v0.31.1.dev20260622
These are the release notes for gptme version v0.31.1.dev20260622.
Contributors
Thanks to everyone who contributed to this release:
Changelog
Changes since v0.31.1.dev20260608:
📦 gptme
✨ Features (88)
- feat(cli): add context search-conversations subcommand for RAG conversation search (#2971) (
07f3c1b3f) - feat(subagent): add subagent_list() tool for observability (
67235e921) - feat(subagent): add redact_secrets option for context isolation (#2950) (
27e6942fe) - feat(logmanager): append-only event log for session durability (Phase 1) (#2956) (
94f0c6e79) - feat(server): add /api/v2/version endpoint (Slice 2) (#2954) (
b865baecb) - feat(server): add API version constants, contract_revision, and X-API-Version header (#2952) (
9d005b0fb) - feat(webui): chat UI polish — role-aligned message footer + Chat-button sidebar toggle (#2947) (
7b44dbee2) - feat(cli): add gptme-resume subcommand for lossy session rehydration (#2933) (
59728c6ae) - feat(cli): add
gptme-util snapshot listsubcommand (#2932) (002c94806) - feat(webui): fork conversations from any message (#2923) (
a36df3ef2) - feat(llm): add built-in offline mock provider (
c92bc5a2a) - feat(subagent): progress tool — intermediate parent notifications during long tasks (#554) (#2921) (
5de530f34) - feat(ci): run webui e2e tests against both stable and dev gptme (
5b3f8364b) - feat(shell): suggest subagent when cd enters workspace with gptme.toml (#554) (#2920) (
15aee6267) - feat(subagent): clarification mechanism — subagents can pause and ask parent for more info (#2906) (
c723802e7) - feat(doctor): add computer use prerequisite checks + run-docker-computer target (#2908) (
3763dcca7) - feat(webui/stt): add sttAuthToken setting for cloud-authenticated STT (#2903) (
7b21c1a1b) - feat(profiles): add structured-first backend selection to computer-use profile (#2907) (
70546a9ed) - feat(computer): add window_focus action for reliable new-window targeting (
33d59fd4a) - feat(computer): add wait_for_change action for context-efficient UI loops (#2898) (
28bef9c84) - feat(subagent): configurable max_concurrent cap with semaphore gating (#2892) (
e3c553c95) - feat(tools): as_function_subtoolspecs() — invoke tool functions without IPython (#2899) (
a02099cc9) - feat(snapshot): add --dry-run / -n flag to /snapshot prune (#2897) (
264d7a7cf) - feat(scripts): add treeofthoughts.py — eval-guided tree search for agents (#495) (#2900) (
d1100e782) - feat(webui): add 'Try the offline demo' CTA to disconnected state (#2902) (
bf78ad3cf) - feat(webui/tts): add ttsAuthToken setting for cloud-authenticated TTS (
00e6c3892) - feat(util): add --output-format json to gptme-util llm generate (#2896) (
062ab2c89) - feat(tools): add root-cause classification to stuck_detect_hook (#2895) (
7137fc796) - feat(util): add --max-tokens and --temperature to llm generate (#2894) (
e3d73858d) - feat(tools): ToolSpec.from_function() + parameter extraction in from_callable (#2893) (
9a098fbfd) - feat(rag): add rag_index_conversations for indexing past conversations (#2883) (
882019e31) - feat(snapshot): add /snapshot prune subcommand (#2887) (
a2b069329) - feat(subagent): add subagent_cancel() + tests for resolve_role_defaults (#2889) (
1319c19ef) - feat(tools): hint-based allowlist and MCP annotation hints (#2890) (
7d818cf80) - feat(llm): route gptme cloud models through their real backend SDK (#2876) (
b61f2560c) - feat(tools): introduce ToolFunction abstraction for structured callable metadata (#2880) (
00a45bdaa) - feat(snapshot): embed conversation message count for diff summary (#2886) (
d0baa64a4) - feat(computer): add scroll action for mouse wheel support (#2884) (
7e0de973a) - feat(subagent): forward subprocess/isolated defaults from planner subtask roles (#2881) (
9eb57759f) - feat(commands): add /snapshot command for agent tree search (#495) (#2885) (
83f78db49) - feat(tools): add view_anchored and patch_anchored tools (Gate G2) (#2882) (
74713885e) - feat(commands): add /backtrack for in-session conversation recovery (#2878) (
ca29f94f3) - feat(webui): thread log_offset through conversation state for windowed pagination (Slice 1) (#2872) (
c4d7e42bf) - feat(openai): enable Responses API by default for gpt-5/o-series models (#2869) (
9e3a72e85) - feat(server): add /api/v0/metrics Prometheus endpoint (#2870) (
4a7e7f36e) - feat(server): add limit/before message pagination to conversation GET (#2861) (
dd968bcdf) - feat(server): add ?q= filter param to conversations API with server-side webui search (#2864) (
6a8eaf55c) - feat(webui): add sort control to conversation list (Recent/Longest/A-Z) (#2865) (
50e36b977) - feat(server): cursor-based pagination for conversations list (#2860) (
4a909d2fd) - feat(webui): server-backed star/unstar for conversations via metadata sidecar (#2848) (
962d86065) - feat(cli): add --no-workspace flag to skip all workspace context (#2853) (
41628ff9e) - feat(extension): add conversation history (#2760) (
58e9f7e43) - feat(cli): add startup prompt stats report (#2843) (
3eee34a41) - feat(eval): surface per-task tool-call count (tool-efficiency metric) (#2844) (
0ec74c311) - feat(webui): show conversation stats in list using list-response data (#2841) (
f328d7d10) - feat(webui): add settings-level STT provider choice (browser vs server) (#2840) (
b8832e46b) - feat(eval): add narrow swebench install extra (#2837) (
5bd8ccd8f) - feat(webui): add / keyboard shortcut to focus conversation search (#2838) (
7adc7ba1c) - feat(webui): show relative timestamps on messages with auto-refresh (#2828) (
b7f7dda26) - feat(config): add context_exclude glob patterns to [prompt] in gptme.toml (#2831) (
6c81eae71) - feat(server): expose message_count and last_updated in conversation list (#2833) (
0f791e8cc) - feat(webui): persist conversation search query in URL ?search= param (#2834) (
cd0a87bd8) - feat(webui): highlight matched search terms in conversation list titles (#2832) (
783d5bab8) - feat(webui): add conversation list search/filter (#2827) (
9fb50d57c) - feat(webui): add persistent no-confirm (YOLO) mode setting (#2825) (
c5cc33586) - feat(webui): show message count as badge on conversation title line (#2823) (
116defea7) - feat(webui): add keyboard shortcut (Ctrl+Shift+) to toggle split view (#2816) (
5560bd7b6) - feat(webui): add URL subroutes for settings category deep-linking (#2824) (
a7a93db98) - feat(server): add A2A JSON-RPC MVP (#2763) (
cb601a600) - feat(webui): add per-pane conversation selector in split view (Slice 2) (#2817) (
a7c852816) - feat(artifacts): format-independent file-write parsing + diffs (#2818) (
7d496f481) - feat(webui): add TTS engine selector (browser / gptme-server / gptme-tts) (#2815) (
ab655640b) - feat(artifacts): include workspace files created/modified by the conversation (#2814) (
85b8b8d2b) - feat(webui): show active model in conversation header (#2812) (
75cbfc6b0) - feat(ci): self-heal Phase 2 — auto-open draft fix PR on structured gate pass (#2813) (
44f9f2939) - feat(webui): add split-pane conversation view (Slice 1 — layout skeleton) (#2776) (
5713eb7d5) - feat(webui): add /settings route with full-page settings view (#2806) (
ba34a85f3) - feat(webui): model favorites, set-as-default, and picker scroll fix (#2801) (
7eabaeebf) - feat(webui): toggle/stop TTS playback from the message button (#2803) (
1595ad8e2) - feat(cli): add --format table option to gptme-util status (#2797) (
8db1b3805) - feat(webui): auto-poll provider health every 60s; add degraded badge on settings icon (#2792) (
c8f33ee17) - feat(webui): add Alt+N global shortcut for new conversation (#2779) (
b7722965b) - feat(server): add provider health endpoint and webui panel (#2775) (
ba1cf5992) - feat(webui): add server-side TTS endpoint via OpenRouter (#2795) (
7fb8051a2) - feat(webui): add OpenRouter STT fallback for unsupported browsers (
88b87ecfc) - feat(server): add
detailquery param to conversation list endpoint (#2791) (332fc2dfb) - feat(plugins): discover src-layout plugins, layer user [plugins], lenient +tool (#2781) (
6b6985124) - feat(webui): add browser TTS for assistant messages (Slice 1 — Web Speech API) (#2778) (
f7dcbb8bd)
🐛 Fixes (54)
Click to expand
- fix(shell): only show workspace-detected hint once per workspace (#2973) (
d5f0ca312) - fix(server): return 400 on config-file PATCH with non-table traversal (#2970) (
b3be71cc9) - fix(subagent): make redact_secrets=True the default (secure by default) (#2963) (
34177187c) - fix(server): return 400 not 500 for unknown chat config keys (#2962) (
a3648ce82) - fix(config): tolerate PermissionError in ChatConfig.from_logdir workspace mkdir (#2959) (
9fc58a224) - fix(tests): mock thread creation in test_subagent_status_returns_dict (#2957) (
c4ba4bb4f) - fix(server): prevent external-sessions endpoint from hanging on large session catalogs (#2953) (
833ad614e) - fix(cli): make tokens count --file - read from stdin (#2951) (
7778caa3f) - fix(tools): normalize bare callables in ToolSpec.functions (server won't start with plugins) (#2946) (
287e1cefa) - fix(webui): code-block rendering improvements + emoji additions + star move (#2945) (
7a76048c6) - fix(cli): validate model provider early, before context_cmd runs (#2941) (
133cfaec2) - fix(server): enforce workspace containment at config PUT/PATCH boundary (#2943) (
b0f5f3adb) - fix(server): preserve 'files' field in PUT /api/v2/conversations/:id messages (#2942) (
d3331d5d0) - fix(test): use json.dumps for valid JSON in kimi_k2 test (#2936) (
83dbacff2) - fix(webui): extract ConversationItem to module level (#2935) (
3d104c1d2) - fix(server): accept --tools none to disable all tools (#2931) (
b7ac9649c) - fix(webui): avoid sidebar log scans (#2924) (
e94bf2c0e) - fix(webui): skip hosted loopback probe for first-time users (#2922) (
f1bf1d472) - fix(webui): tolerate legacy non-paginated conversations response (#2916) (#2917) (
32694bc4b) - fix(server): handle OSError in workspace API endpoints (ENAMETOOLONG crash) (#2915) (
4ac4eeb26) - fix(webui/demo): skip provider health + user settings fetches in demo mode (#2905) (
419fb23d0) - fix(llm): invalidate gptme gateway client on reinit (#2876 follow-up) (#2888) (
ab634d581) - fix(webui): collapse single hook system messages in chat view (#2879) (
18469440c) - fix(server): return 400 for non-positive limit in conversations API (#2877) (
78f0c0583) - fix(server): tolerate pre-existing workspace symlink in ChatConfig.from_logdir (#2874) (
94d0c16c3) - fix(server): improve model validation error messages with examples (#2873) (
53555a994) - fix(models): validate provider default model entries + update groq default (#2871) (
b17c96066) - fix(server): validate model type in config PATCH to prevent 500 (#2868) (
4398aedeb) - fix: two startup hangs — skip OpenRouter fetch for bare model names, non-blocking piped stdin (#2867) (
8789034ef) - fix(server): preserve messages field on cached conversation list responses (#2859) (
9e381a4bf) - fix(server): scope conversations cache to active logs dir (#2856) (
f5102088e) - fix(webui): reduce redundant conversations API calls on page load (#2857) (
f0bb73e62) - fix(webui): add semantic landmarks, aria-current, and aria-selected for keyboard navigation (#2849) (
0306c23a0) - fix(complete): auto-reply kill-switch now detects both auto-reply variants (#2846) (
4c1f19ed1) - fix(webui): add Escape-to-navigate-back for full-page settings view (#2845) (
368ffc9d2) - fix(webui): update ConversationList test to handle highlighted search terms (#2835) (
0e689c178) - fix(cloud): parse max_completion_tokens for gptme provider models (#2826) (
254c7136e) - fix(webui): make clickable selection rows keyboard-accessible (#2829) (
09c20db4b) - fix(cloud): route LLM API calls to Supabase edge functions, not fleet.gptme.ai (#2820) (
f70206540) - fix(webui): make Escape key and interrupt logs consistent with isBusy (
b703f8931) - fix(server): graceful shutdown on SIGTERM (#2821) (
1d02a613c) - fix(tools): report unavailable tools accurately instead of 'invalid choice' (#2809) (
a4b310976) - fix(hooks): hide injected agent-instructions from conversation view (#2807) (
ec2dbdb24) - fix(webui): don't flush queued messages during tool confirmation (#2808) (
dd8b1a124) - fix(webui): sync model selector when switching conversations (#2804) (
9319f63d4) - fix(cli): reject malformed model paths (#2798) (
9d4e7d70c) - fix(server): validate edited message file paths (#2762) (
3ab1b592a) - fix(webui): UI polish (input radius, code blocks, avatar, health badge) (#2802) (
a73e71053) - fix: conversation load crash chain (server symlink 500 + webui dataless crash + error surfacing) (#2800) (
42dc02f8d) - fix(webui): request fast conversation list detail (#2796) (
1be7efa74) - fix(plugins): recurse nested src-layout tool packages (#2793) (
97a37bec2) - fix(ci): pin self-heal logs to triggering attempt (#2777) (
675b1d71b) - fix(browser): use tabs instead of new windows for CDP connections (#2723) (
1b0b9c5a9) - fix: clear normal_display_buffer on
<think>tag detection to prevent double output (b1bac08e0)
🔨 Misc (23)
Click to expand
- chore: bump version to 0.31.1.dev20260622 (
ac4335dd2) - perf(hooks): batch process cmdline scan in workspace_agents (#2972) (
6d3bd90d3) - docs(config): add model selection guide and provider-key reference (#2955) (
fd9af1eed) - test(server): perf gate for GET /api/v2/conversations with 100 conversations (#2937) (
7a343dcfa) - perf(server): partial cache update on message POST to avoid O(N) rescan (#2934) (
e9b7c9e80) - chore(deps): group dependabot minor/patch bumps into single PRs (#2926) (
d7fd59f8a) - docs(commands): document /snapshot and /backtrack commands (#2891) (
995eb6946) - refactor(llm): extract shared Responses API event loop into openai_responses.py (#2875) (
018329133) - perf(tools): lazy-load mcp.types and bashlex to reduce startup time (#2862) (
949761c1e) - perf(server): add ETag conditional request support for conversations endpoints (#2863) (
e20ef6405) - perf(server): skip branch glob on fast scan, dedupe stat, drop debug log (#2854) (
d37c69c9d) - docs(howto): remove inaccurate --no-workspace equivalence claim (#2858) (
1cae5798f) - perf(server): enable gzip compression on API responses (#2852) (
2e4bd56b1) - test(complete): cover cross-variant auto-reply exit counting (#2847) (
1aaca3bcf) - test(webui): add Playwright e2e keyboard navigation tests (#2839) (
3f62f130c) - test(server): add PATCH edit-message and DELETE message edge-case tests (#2830) (
683d38fac) - docs: add model-routing guide — pick your model per task (#2810) (
7fd564faf) - docs(config): document [models] section — default and favorites keys (
f27f8c946) - refactor(webui): group Settings → Servers into collapsible sections (#2805) (
95e5385db) - test(tauri): add E2E chat interaction flow tests (Slice 2) (#2780) (
b1c7bde9f) - docs(howto): add how-to guide section with 5 task-oriented recipes (#2782) (
134b36c4f) - test(tauri): cover IPC server lifecycle commands (#2772) (
29d5f1358) - chore: bump version to 0.31.1.dev20260608 (
b830bf46a)
(excluded 12 less relevant commits)
Full Changelog: v0.31.1.dev20260608...v0.31.1.dev20260622