v0.32.0#
These are the release notes for gptme version v0.32.0.
Contributors#
Thanks to everyone who contributed to this release:
@0xbrayo, @dvirarad, @erikbjare, @Fsmount, @meichuanyi, @Miyou, @patriklaurell, @sebastiondev, @the-eater, @Thibaultjaigu, @TimeToBuildBob
Changelog#
Changes since v0.31.0:
📦 gptme#
✨ Features (695)#
feat(eval): add SWE-bench two-stage file retrieval (#3179) (
593bdb760)feat(cli): add opt-in tool-output pruning (#3181) (
ffee326cc)feat(tts): better error guidance and docs when OPENROUTER_API_KEY is absent (#3175) (
3d8505cdd)feat(mcp): add ‘gptme-util mcp serve’ subcommand and docs (#3170) (
80b8a76e5)feat(eval): wire tokens_per_task through SWE-bench and model summary (#3176) (
1b71d9cd0)feat(models): add GPT-5.6 Luna/Terra/Sol to OpenAI model registry (#3166) (
8221940df)feat(subagent): accept plain dict as output_schema, generate proper JSON Schema hints (#554) (#3174) (
3b9fb6c6c)feat(eval): add tokens_consumed_per_task metric to eval harness output (#3165) (
e867f7ac2)feat(mcp): expose gptme tools as MCP server (gptme-mcp-server) (#3157) (
4de53ec1b)feat(acp): add gptme-acp shim package for ACP agent registry (#3160) (
10adb1181)feat(cli): add GPTME_EXIT_STATS for machine-readable session cost summary (#3159) (
2c62b349f)feat(computer): add –milestone and –all flags to demo command (#216) (#3152) (
99621c13a)feat(subagent): subprocess-mode progress notifications via file channel (#3153) (
3703b2813)feat(util/replay): compound query from last N user turns for better context recovery (#3148) (
3eed3fe21)feat(subagent): add context_window to subagent_batch, subagent_parallel, subagent_pipeline (#554) (#3147) (
3014f7b0b)feat(computer): add ComputerPreview panel using screenshot polling API (#216) (#3143) (
ef5fe719a)feat(util): BM25 evidence replay for long-session context recovery (#3146) (
0fa14d354)feat(server): add /api/v2/computer/screenshot polling API (#216) (#3140) (
201fcab38)feat(llm): enable strict tool schema for openai and azure providers (#3136) (
375008e97)feat(computer): add gptme-util computer demo command (#216) (#3137) (
b4472da86)feat(subagent): add subagent_wait_any() for race/hedging patterns (
7f160ba08)feat(computer): surface terminal startup delay fix in doctor (#216) (#3134) (
31bd7b7f8)feat(computer): add terminal startup latency diagnostic (#216) (#3130) (
338170adc)feat(eval): add ‘Can it play Factorio?’ local milestone validation (#216) (#3127) (
2ea863160)feat(computer): add
gptme-util computer doctorhealth-check command (#216) (#3120) (b63c9b904)feat(eval): add ‘Can it play Doom?’ local milestone validation (#216) (#3115) (
006c3ef4f)feat(eval): add ‘Can it Tweet?’ local milestone validation (#216) (#3112) (
e2f9f87bd)feat(subagent): add subagent_pipeline() for staged fan-out with no barrier (#554) (#3110) (
41bb73e21)feat(browser): add load_browser_state() for in-session auth state restoration (#3108) (
d673fb256)feat(browser): add hover_element(), snapshot_page(), get_current_url() (#216) (#3104) (
9efc6b080)feat(eval): add eval tests for press_key/select_option/wait_for_element (#216) (#3097) (
5f2398c9e)feat(subagent): token budget tracking — input/output tokens in ReturnType and BatchJob (#554) (#3099) (
9de8a92cf)feat(subagent): add output_schema, workdir, context_turns to subagent_parallel() and batch (#554) (#3096) (
08692fa3c)feat(subagent): suppress thread-mode subagent terminal output (closes #554) (#3094) (
b03935ed5)feat(browser): add press_key, select_option, wait_for_element for computer-use (#216) (#3095) (
09d5c5e35)feat(computer): add latency diagnostic command for diagnosing delays (#216) (#3093) (
007fe94b2)feat(subagent): enforce output_schema at the complete-block layer (#3090) (
7e81ba052)feat(doctor): add ffmpeg check for screen recording (#216) (#3089) (
03bb8ac4d)feat(computer): add screen recording — start_recording / record_screen / gptme-util computer record (#216) (#3088) (
5771653e8)feat(subagent): add subagent_parallel() fan-out + fix BatchJob.wait_all() sequential wait bug (#3085) (
7ca25ee31)feat(computer): add run-task CLI + fix include_paths directory test (#216) (#3086) (
6816c0408)feat(computer): expose audit trail in computer_task() result + –agent-id CLI option (#216) (#3084) (
d76c3531a)feat(computer): add –jsonl output format to audit-log (#3083) (
6f6a2b150)feat(computer): add real-time risk-label streaming to parent agent (#216) (#3082) (
3cd6ebff3)feat(computer): add pre-action confirmation gate for sensitive actions (#216) (#3081) (
5dde6e21d)feat(computer): add risk-level classification to audit-log (#216) (#3071) (
826494cc3)feat(chats): add –all-agents flag to search Cursor and Codex sessions (#3068) (
94c303989)feat(browser): add session persistence via GPTME_BROWSER_STORAGE_STATE (#216) (#3069) (
819f1b778)feat(server): add –default-profile option for specialized deployments (#3063) (
a935a2471)feat(computer): add
gptme-util computer video-framesCLI command (#3062) (112060a75)feat(computer): add computer-use service to docker-compose.yml (#216) (#3061) (
ff3d32542)feat(computer): add
gptme-util computer screenshotCLI command (#216) (#3060) (0ab94ca91)feat(cli): show discovered gptme-* plugins in
gptme --help(Part 3 of #3051) (#3057) (b43b2081a)feat(setup): add custom OpenAI-compatible provider to interactive setup (#3056) (
6e86ec9ac)feat(cli): gptme-util subcommand mirroring (gptme chats → gptme-util chats) (#3052) (
a2b6e0fea)feat(computer): add computer_task() for context-efficient subagent delegation (#216) (
b894c41a4)feat(cli): add
gptme searchalias forgptme-util chats search(#3050) (65610d791)feat(computer): track act_and_observe() calls in audit-log (#216) (#3043) (
efc5c9d25)feat(config): allow setting system prompt type in gptme.toml via [prompt] system (#3044) (
9d0ab3a27)feat(computer): add act_and_observe() for the ‘act then look’ loop (#216) (#3042) (
346600202)feat(computer): extend audit-log to track browser interactions (#216) (#3041) (
b95e29af4)feat(reduce): emit visible feedback when log is truncated (#3038) (
658a3a404)feat(computer): add macOS accessibility tree + click via osascript (#216) (#3040) (
d12f3fb26)feat(computer): add audit-log CLI + interactive web action evals (#216) (#3030) (
6b5a5183d)feat(webui): windowed open (limit=50) + ‘Load older’ button (#3034) (
8d15d61af)feat(server): add ?status= filter to GET /api/v2/tasks list endpoint (#3033) (
ae46a7bdf)feat(safety): add local heuristic safety check to chats export (#3023) (
d675df2a5)feat(webui): render normalized transcript messages in session replay detail (#3028) (
b10cde34f)feat(subagent): add context_turns parameter for parent conversation forwarding (#3008) (
b673ad792)feat(commands): add /rag slash command for mid-session RAG queries (#3022) (
260d7a466)feat(eval): add computer-use eval suite + observe_web/observe_desktop in profile (#216) (#3020) (
0245a3b89)feat(subagent): add max_time parameter for auto-cancel watchdog (#3019) (
3d220cc73)feat(computer): add AT-SPI2 accessibility tree actions for Linux native apps (#3018) (
4d1bd24ee)feat(computer): add observe_web/observe_desktop helpers + unit tests for window_focus and wait_for_change (#216) (#3011) (
86a14c6d6)feat(server): add HTTP QUERY method to /api/v2/tools for filtered introspection (#3010) (
259eedbe3)feat(tools): annotate core built-in tools with hints metadata (#3009) (
4912d2281)feat(subagent): compact result summary in subagent_wait (#554) (#3007) (
8d974ca1f)feat(subagent): add workdir parameter for explicit workspace control (#2989) (
5d7dacdbb)feat(cli): add gptme attest sign and verify commands (#2978) (
be689fa04)feat(browser): make Playwright engine configurable via GPTME_BROWSER_ENGINE (#2996) (
0dd93066f)feat: add Requesty as an OpenAI-compatible provider (#2993) (
cf91ac1e4)feat(lessons): randomized lesson-dropout injection for causal LOO (#2988) (
7dbb0f36a)feat(subagent): expose context_window in tool instructions; validate negative values (#2976) (
0192f2328)feat(subagent): context_window parameter for workspace context isolation (#2975) (
31acfcba6)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(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)feat(chats): add per-conversation session stats (#2774) (
68459b62d)feat(webui): add conversation system prompt override (#2672) (
17b91546a)feat(util): add gptme-util status subcommand for operator handoff (#2752) (
7355b1820)feat(complete): stuck/loop detection hook for repeating tool calls (#2743) (
7e2f394c0)feat(webui): add live_app panel kind distinct from iframe panels (#2754) (
2c19195f6)feat(patch): add _anchored core module — hash-anchored line editing (#2733) (
be43ca2e0)feat(webui): add open conversation directory action (#2673) (
6a29d3f93)feat(cost_tracker): add extras dict and record_extra() to SessionCosts (#2735) (
641dbdeba)feat(webui): suppress live fetches in demo mode (#2721) (
8f15739c6)feat(self-heal): add structured autofix gate (#2697) (
b3c609a45)feat(webui): replay demo tool-call flow (
e95a2aa48)feat(ci): self-heal workflow — analyze test failures and propose fixes (Phase 1) (
919836d17)feat(webui): demo mode slice 2 — fixture-backed read paths (#2687) (
9ffb02611)feat(webui): offline demo ApiClient seam (IApiClient + createDemoApiClient) (#2664) (
58c46e795)feat(webui): import exported conversation JSON (#2671) (
fbbaac911)feat(webui): add Ctrl+F message search with match navigation (#2668) (
d598b5e7f)feat(server): add docker-compose self-host setup (#2681) (
7a8bf8cd6)feat(webui): speech-to-text dictation button (#2666) (
bac384dde)feat(webui): add compact user avatar treatment (#2678) (
6995242c3)feat(tools/python): emit artifact descriptors for plot files (#830 Phase 2) (#2680) (
d92f6fe25)feat(webui): recover dropped event streams (
7886a9d8f)feat(webui): structured tool call visualization with RichToolCall component (#2676) (
029b93efb)feat(webui): server connection health panel with /api/v2/server/health endpoint (#2675) (
aadc57ce8)feat(webui): stream tool outputs live via SSE tool_output events (#2674) (
c0d622402)feat(webui): per-tool call latency badges with live elapsed timer (#2655) (
6d0347e46)feat(webui): temperature and top_p controls in ChatOptionsPanel (
aebc9c57c)feat(webui): add FunctionBrowser panel with /api/v2/tools endpoint (#2663) (
9643f8f08)feat(webui): persist temperature/top_p/max_tokens in ConversationSettings sidebar (#2662) (
887e9b0c7)feat(webui): add ErrorBoundary to catch render crashes and chunk-load failures (#2661) (
16d290d09)feat(webui): add temperature and top_p controls to ChatOptionsPanel (#2660) (
417a4205a)feat(llm): make temperature and top_p request-driven via ChatConfig (#2659) (
9f164493c)feat(resilience): add CircuitBreaker for flaky MCP/tool calls (#2658) (
4be41e539)feat(webui): add /admin session management panel (#2657) (
6715363a9)feat(webui): add max_tokens input with full operation coverage (#2652) (
2aa807e5d)feat(webui): responsive nav sidebar with icon-only collapse and label expand (#2653) (
4a0990a6b)feat(hooks): add injection_screening hook to flag untrusted tool output (#2650) (
b7b3e7a03)feat(webui): add keyboard shortcuts reference dialog (
ca42d7ff6)feat(server): plumb max_tokens from chat config through generation (#2649) (
82b64f3a2)feat(webui): add per-conversation cost badge to ConversationList (
d8cefc4ba)feat(llm): add Anthropic fast-mode (speed=fast) support (#2647) (
08e154032)feat(webui): conversation-level session cost summary (
1f15de92f)feat(webui): wire panel_hints into sidebar as iframe panels (#830 Phase 3b) (
22164215c)feat(webui): sandboxed iframe panel primitive (#830 Phase 3) (#2640) (
9671295e4)feat(tools/computer): emit artifact descriptors on screenshot (#830 Phase 2 producers) (#2639) (
9ff16c4c6)feat(server): consume tool-declared artifact descriptors from message metadata (#830 Phase 2) (
969e9accf)feat(webui): add artifacts sidebar panel and registry (#2637) (
f46eb9ac7)feat(server): add conversation artifact registry API (#830 Phase 1) (#2636) (
f9e242748)feat(server): bundle modern webui into package (gptme#2612 Part 2) (#2633) (
05b7916fc)feat: add gptme init command for project scaffolding (#2632) (
d9c6e1082)feat(models): add DeepSeek V4 Pro/Flash/Flash:free via OpenRouter (#2629) (
9cbe3f236)feat(hooks): emit aw-watcher tool activity heartbeats (#2622) (
a82cd5436)feat(llm): add Claude Opus 4.8 model support (
a85cc233a)feat(server): add –webui-dir flag to serve a custom web UI build (#2614) (
62db7c762)feat(lessons): load manifest-backed skills lazily from index.json (#2604) (
3dc0f94b4)feat(llm): add gptme.ai as provider alias for gptme (#2603) (
152149edd)feat(cli): list dynamic models for gptme provider (
408df0b90)feat(cli): prompt inline gptme auth on first use (#2599) (
c72b7362a)feat(util): added
gptme-util prompts workspace/git/journalhelper commands (#271) (3138251b5)feat(eval-ci): expand quality gate from 3 to 5 tests (#2598) (
4b5aa3ed2)feat(eval): check subagent waited for completion before stating result (#2593) (
60908932b)feat(install): add gptme.ai/install.sh one-liner installer (#2592) (
c78976f00)feat(eval): add subagent trajectory checks (
8b0e098aa)feat(browser): support connecting over CDP (#2570) (
fa922d8a0)feat(hooks): add turn.pre and aw watcher consumer (#2572) (
930e2d063)feat(auth): retarget device flow from fleet-operator to Supabase edge fn (
349972006)feat(webui): launch SetupWizard from disconnected banner on first visit (#2494) (
511bdbd3e)feat(webui): surface gptme.ai as cloud alternative in disconnected banner (#2490) (
5b4f29696)feat(webui): opt into Chrome LNA for local-server fetches (targetAddressSpace) (#2488) (
55b9cacc1)feat(webui): add install step + setup-guide link to disconnected banner (#2481) (
0f18cf1af)feat(llm): surface diagnostic for generic out-of-credits 402 errors (#2467) (
a085d2b18)feat(bot): add /gptme-resolve comment macro trigger to resolve workflow (#2453) (
ed054e4a8)feat(tools): add vent tool for real-time friction signals (#2452) (
32bf967a3)feat(bot): add label-triggered issue resolver mode (#2445) (
930acf352)feat(tools): add when-to-use trigger language for choice, complete, and restart (#2442) (
94f2feced)feat(tools): add when-to-use trigger language for mcp and lessons (#2440) (
fe6d73250)feat(tools): add when-to-use trigger language for gh (
992489cc2)feat(tools): add when-to-use trigger language for screenshot, rag, vision, and todo (
6861f00a9)feat(eval): add minimal-feature-preserve-default-with-decoys scenario (
0d935883f)feat(tools): add when-to-use trigger language for elicit and form (#2437) (
8a7cc6c44)feat(tools): add when-to-use trigger language for vision and screenshot (#2435) (
842efa85b)feat(tools): add when-to-use trigger language for computer and morph (#2434) (
1301dfa15)feat(eval): add root-cause-pipeline-debug behavioral scenario (
ef2cac82d)feat(eval): add bounded-bugfix-with-decoys behavioral scenario (#2429) (
299b9af02)feat(hooks): trace sync hook execution spans (#2421) (
efb96866e)feat(hooks): add Windows agent scanning (
6d12c6529)feat(tools): add when-to-use trigger language for tmux and browser (
b8c8e26b5)feat(tools): add when-to-use trigger language for python, save, patch tools (#2412) (
1b31bd8a5)feat(setup): add confirmation prompt for fish completions (#2410) (
b5ceb04ba)feat(tools): add trigger language for shell, read, and gh (#2406) (
7e1bb2ce7)feat(openai): add feature-gated Responses API chat path (#2397) (
076599ac4)feat(cli): add –output-format json for headless gptme runs (#2392) (
50422d121)feat(eval): add partial-credit ‘Score’ column to eval_results.csv (#2389) (
8d05e0a4b)feat(llm): surface actionable diagnostic for OpenRouter 402 insufficient-credits errors (#2388) (
bee2165b2)feat(hooks): refactor and extend tool_target_instructions (Phase 1+) (#2386) (
ebc3a8802)feat(hooks): tool-target agent-instruction loading (Phase 1) (#2385) (
acb5e3f3d)feat(subagent): add role= parameter for typed work posture (#2382) (
78603c5a4)feat(profiles): add built-in verifier profile for subagent review/validation (
84d3a1aa9)feat(cli): queue prompts for running chats (
988f087bd)feat(hooks): add TTL-based cache coldness heuristic to cache_awareness (#2378) (
e896ed4ff)feat: opt-in auto-snapshots for workspace rollback (Phase 2a) (#2377) (
a5fbc0421)feat(computer): add pluggable transport abstraction layer (#2368) (
2e625199e)feat(commands): add checkpoint slash command (
1a9969e31)feat(models): add preferred_edit_format to OpenRouter models (
c92fdb1a8)feat(serve): inject webui HTML rendering hint into system prompt (
cf85d7d8b)feat(eval): natural pass-rate gate for lesson injection (Phase 3, idea #228) (#2365) (
cdf4be27e)feat: architect/editor coder split — plan with strong model, execute with cheap model (#2364) (
eafdb5aef)feat(models): add preferred_edit_format field to model registry (#2363) (
2d46a8f54)feat(hooks): add mcp_namespace_hint hook for @server_name references (#2358) (
2eca386d8)feat(commands): add /account provider onboarding with OAuth (#2356) (
727aa6030)feat(oauth): add OpenRouter PKCE OAuth flow (#2355) (
c55a0fd2c)feat(eval): add task_type to EvalSpec and conditional lesson gating (#2352) (
243d5f9ad)feat(tokens): add per-step token breakdown to /tokens command (#2350) (
9d96649e6)feat(eval): add –no-lessons flag for no-context baseline runs (
34890e849)feat(tokens): surface biggest-turn input in /tokens output (#2348) (
72501779a)feat(lessons): cap lesson injection at 50K tokens to prevent sys_prompt bloat (#2346) (
b5fc04cd6)feat(tools): add gh issue/pr list preview to shell output (#2341) (
eb7b11e96)feat(tools): add shell_compact git log preview (#2337) (
528a3f8d7)feat: add GPTME_DISABLE_PATH_INCLUDE env var to skip path expansion (#2336) (
fb4f6a7e1)feat(messages): ephemeral_ttl — context-aware pruning with cache boundary optimization (#2330) (
56080e094)feat(tauri): add Android project files and CI build (closes #2328) (#2329) (
973e48a61)feat(webui): add embedded MenuBar context slot (#2319) (
582746247)feat(cost-awareness): warn on cold Anthropic prompt cache (#2322) (
4c674a7a9)feat(server): voice Phase 3 — transcript to conversation history (#2315) (
96067fa2f)feat(server): expose session last_error in conversation GET response (#2305) (
a88401a90)feat(settings): add Re-run Setup button to re-open setup wizard (#2303) (
2bd1f2464)feat(models): add gpt-5.5 to openai-subscription provider models (#2299) (
8fdc1df16)feat(eval): add –adversarial flag for behavioral eval prompt injection (#190) (#2291) (
ebfaf5733)feat(shell): make output truncation thresholds configurable via env vars (
5f843641d)feat(tauri): sync version to 0.31.0 and show server version in About panel (
6fce363c3)feat(webui): add real-time voice session support (#2265) (
d13f97758)feat(webui): add _headers for CF Pages cache policies (#2282) (
5e5a6967b)feat(tools/read): support batch reads via newline-separated paths (
b799b3933)feat(site): add downloads page at gptme.org/downloads/ (#2243) (
45e904ac1)feat(webui): submit SetupWizard inputs on Enter key (#2230) (
c14bd0c8c)feat(cli): add gptme-checkpoint for Git-backed workspace recovery (#2224) (
15d3c2256)feat(openai): support OPENAI_VERBOSITY env var for GPT-5+ models (#2223) (
a12a9c065)feat(openai): add gpt-5.5 and gpt-5.5-pro models (#2220) (
5f546f377)feat(context): show truncation savings in /context (#2213) (
2df6ce3d5)feat(webui): expose provider API key settings (
5fcd34dcd)feat(webui): wire ServerDefaultModelSettings to GET /api/v2/user/settings (#2204) (
9cb296e19)feat(server): add GET /api/v2/user/settings for provider+model introspection (#2203) (
7633bc1d8)feat(onboarding): add shared default-model selection flow (#2201) (
91a580f05)feat(tauri): in-app API key entry (save_api_key + wizard UI) (#2195) (
02fb26b23)feat(hooks): track memory_mb for detected agents in workspace_agents (#2200) (
b0b8fd097)feat(cli): add gptme-util agents scan command (#2198) (
19422518c)feat(tauri): desktop/mobile split — gate sidecar behind cfg(desktop) (#2191) (
64a84c77e)feat(tauri): surface provider_configured in /api/v2 + SetupWizard onboarding step (#2194) (
0ace79689)feat(anthropic): wire output_config.effort for true xhigh/max thinking semantics (#2186) (
a9f224631)feat(prompts): add cache boundary marker and stable file order (#2185) (
e33fec132)feat(anthropic): add GPTME_THINKING_EFFORT env var with named levels (#2184) (
6f7e30846)feat(prompts): propagate model to prompt_short for tool-use enforcement (#2181) (
ff626be51)feat(prompts): inject tool-use enforcement for GPT/Gemini/Grok families (#2180) (
2cd8ee8b5)feat(util): add models test command for verifying model connectivity (#2159) (
bf64c6799)feat(chats): expose context/matches options in search and read commands (#2155) (
53a00009d)feat(models): add claude-opus-4-7 and anthropic/claude-opus-4.7 (OpenRouter) (#2153) (
bc4f2aa86)feat(server): add include_archived parameter to list_tasks API (#2127) (
182724167)feat(eval): add implement-memoization behavioral scenario (31st) (#2114) (
e23bd9687)feat(eval): add implement-priority-queue behavioral scenario (33rd) (#2113) (
5fedad714)feat(eval): add implement-event-emitter behavioral scenario (30th) (#2105) (
48a437229)feat(eval): add implement-lru-cache behavioral scenario (29th) (#2103) (
b504ddbc3)feat(eval): add circuit-breaker behavioral scenario (28th) (#2100) (
5806f3458)feat(eval): add circuit-breaker behavioral scenario (26th) (#2099) (
8bb769ea2)feat(eval): add rate-limiting behavioral scenario (28th) (
6fa5d440f)feat(eval): add add-docstrings behavioral scenario (24th scenario) (#2093) (
833a00c32)feat(eval): add validate-user-input behavioral scenario (27th scenario) (#2096) (
dc5cea427)feat(eval): add retry-with-backoff behavioral scenario (26th scenario) (#2095) (
fe0bcd6ea)feat(eval): add add-deprecation-warning behavioral scenario (25th scenario) (#2094) (
b521a3db4)feat(eval): add fix-mutable-default behavioral scenario (22nd scenario) (#2091) (
1da36d5c2)feat(eval): add remove-dead-code behavioral scenario (21st scenario) (#2090) (
df563ea44)feat(eval): add optimize-n-squared behavioral scenario (20th scenario) (#2088) (
83b2f542f)feat(eval): add fix-data-mutation behavioral scenario (19th scenario) (#2083) (
f4288d80c)feat(eval): add noisy-worktree-fix behavioral scenario (18th scenario) (#2080) (
f51c7a9cd)feat(eval): add add-type-hints behavioral scenario (17th scenario) (#2079) (
404511815)feat(eval): add refactor-for-testability behavioral scenario (16th scenario) (#2078) (
3db6116c2)feat(eval): add fix-security-path-traversal behavioral scenario (15th scenario) (#2077) (
82e1d2fe5)feat(eval): add handle-specific-exception behavioral scenario (14th scenario) (#2076) (
2c4bc5a22)feat(eval): add add-feature-preserve-default behavioral scenario (13th scenario) (#2074) (
5ad697291)feat(eval): add use-existing-helper behavioral scenario (12th scenario) (#2073) (
049cd9c0e)feat(eval): add add-logging behavioral scenario (11th scenario) (#2072) (
e389c0ce5)feat(webui): polish message styling and fix avatar chaining (#1996) (
bab294021)feat(eval): add scope-discipline-bugfix behavioral scenario (10th scenario) (#2069) (
24272facd)feat(server): add CLI-based fallback for external session provider (#2067) (
89db2d056)feat(lessons): add GPTME_LESSONS_EXTRA_DIRS env var (#2066) (
587acf934)feat(eval): add debug-data-pipeline behavioral scenario (9th scenario) (#2064) (
60828f867)feat(webui): add external sessions catalog view (#2062) (
29c517293)feat(server): add read-only external session catalog (#2059) (
dbf83cd65)feat(cli): prototype live terminal status line (#2058) (
8f12aa2ca)feat(eval): add write-test-suite and test-driven-error-handling behavioral scenarios (#2053) (
19f0f01ed)feat(eval): add merge-conflict and extract-function behavioral scenarios (#2052) (
1a9607621)feat(eval): add stage-new-files behavioral scenario (#2049) (
a4904c6b8)feat(eval): add behavioral eval suite — 3 multi-step workflow scenarios (#2046) (
3552864cb)feat(eval): add –resume and incremental writing to SWE-bench eval (
d3f76a95c)feat(eval): add –info flag to gptme-eval-swebench for dataset inspection (#2043) (
23ed17f66)feat(eval): add practical31-33 suites — 9 new algorithm tests (#2036) (
c13443317)feat(eval): add pass-rate trend analysis with sparklines (#2035) (
8d5ce76ab)feat(eval): add practical30 suite — decode string, top-k frequent, partition equal subset (
1647a19c0)feat(eval): add practical29 suite — word break II, unique paths, rotate array (#2031) (
aa0268904)feat(eval): add practical28 suite — minimum path sum, gas station, next permutation (#2028) (
7b7f658cc)feat(eval): add practical27 suite — house robber, max product subarray, find all anagrams (#2024) (
69ddd5dee)feat(eval): add practical26 suite — longest palindromic substring, jump game, task scheduler (#2023) (
700463af9)feat(eval): add practical25 suite — sliding window max, decode ways, meeting rooms (#2022) (
1d607a83d)feat(eval): add practical24 suite — N-Queens, LIS, cycle detection (#2021) (
c65e256fc)feat(eval): add interactive sorting and filtering to HTML leaderboard (#2018) (
4a60955c4)feat(eval): add practical23 suite — LCS, stock cooldown, rotate image (#2015) (
eb7f836d6)feat(eval): add practical22 suite — trapping rain water, word break, permutations (#2003) (
75d788618)feat(lessons): support holdout exclusions in auto-include hook (#1997) (
bd73c6211)feat(util): add gptme-util hooks for Claude Code lesson injection (#1995) (
9129169cb)feat(eval/swebench): generate predictions JSONL and add official harness integration (
f18715fe4)feat(eval): add practical21 suite — Kadane, 0/1 knapsack, flood fill (#1993) (
5dfaee0e1)feat(eval): add practical20 suite — Dijkstra, spiral matrix, num islands (#1988) (
73075c0bf)feat(eval): add practical19 suite — edit distance, BST, coin change (#1987) (
d6453b629)feat(eval): add practical18 suite — min-stack, knight-moves, histogram-area (#1986) (
0177f79ab)feat(eval): add practical17 suite — LRU cache, interval merge, base converter (#1982) (
485f08552)feat(webui): custom welcome background with frosted glass effect (
9d787f357)feat(webui): render short code blocks inline instead of collapsible (#1977) (
f7d436d61)feat(eval): add per-test breakdown and fix OpenRouter model names (#1961) (
6362ac6cf)feat(eval): add practical16 suite — harder tasks (queue workers, JSON schema, Trie) (#1960) (
81a505e7d)feat(webui): add Attachments tab and ‘open in workspace’ to workspace explorer (#1930) (
2639f8342)feat(eval): add practical15 suite — async, SQL analytics, SQL injection (#1931) (
f5b89e336)feat(webui): collapse intermediate tool steps into expandable summaries (#1929) (
077cb24cd)feat(webui): cleaner assistant surface — borderless, page-native messages (
d02dc8127)feat(webui): reuse ChatInput for message editing with attachment support (#1919) (
c7fa714b1)feat(webui): improve file attachment UX with tooltips and lightbox (#1917) (
c8054e786)feat(webui): add search to navigation and improve search scope (#1915) (
e9ba091b2)feat(webui): delete individual messages from conversation (#1910) (
8eb231f07)feat(webui): add dedicated history page with activity calendar (#1903) (
66f90c0f5)feat(webui): message editing, branch navigation, and tool state restoration (#1900) (
d90b7e727)feat(webui): fix chat UX, add routes, file attachments, and search (#1894) (
a9729d562)feat(webui): group conversations by date in sidebar (#1893) (
1381dc90d)feat(webui): add right-click context menu for conversations (#1891) (
e393c6b51)feat(webui): show last message preview in conversation list (#1890) (
b4ae4c496)feat(webui): show message timestamps on hover (#1886) (
884de90d6)feat(webui): add scroll-to-bottom floating button in conversations (#1884) (
863da6d0b)feat(webui): add copy-to-clipboard button on chat messages (#1883) (
9b4191068)feat(webui): add conversation export as Markdown and JSON (#1882) (
12a3cc497)feat(webui): add conversation search to command palette (#1877) (
f2be6b4c8)feat(webui): add file download button to workspace file preview (#1876) (
59c077a99)feat(webui): add file upload support with drag-and-drop (#1873) (
744cc1cf0)feat(server): add workspace file download endpoint (#1875) (
6f753de89)feat(webui): add autocomplete for slash commands and file paths (#1872) (
e218432a6)feat(gh): add native issue view handler with linked PRs (
0a53c166d)feat(openrouter): add quantization routing preference (#1864) (
f0eddbedc)feat(openrouter): add user override for data_collection preference (#1861) (
50d322370)feat(openrouter): add provider routing preferences (require_parameters, data_collection) (#1859) (
8596b2f24)feat(gh): add native issue create and comment commands (#1852) (
6b8f475a8)feat(plugins): unified plugin registration via entry points (#1851) (
461040759)feat(llm): add plugin-based provider support via entry points (#1846) (
152710ec2)feat(gh): add native gh pr merge command (#1844) (
0837d40fb)feat(gh): add gh search issues and gh search prs commands (#1841) (
1db97464d)feat(gh): add native
gh issue listandgh pr listcommands (#1839) (61147b976)feat(gh): add
gh run viewfor structured CI failure log extraction (#1837) (7d01905e8)feat(gh): add gh pr diff command for viewing PR code changes (#1836) (
77ea7212f)feat(gh): support short GitHub references (owner/repo#N, #N, bare N) (#1835) (
8b11d7735)feat(browser): smarter GitHub URL routing + HTML content extraction (#1825) (
bbf952b4a)feat(llm): add max_tokens parameter to reply() and chat() (#1828) (
d57fd0ca4)feat(gh): add
gh issue viewcommand for structured issue reading (#1827) (704165542)feat(docs): wire eval leaderboard into docs build (#1814) (
d3be51138)feat(context): support @-prefix for file/directory references (#1813) (
628453d12)feat(eval): add HTML output format for leaderboard (#1812) (
c0b6139f8)feat(eval): add trend tracking for regression/improvement detection (#1807) (
4e9a71cc5)feat(eval): add –json flag for machine-readable eval output (#1787) (
2cad452af)feat(cli): add –json flag to tools list and tools info commands (#1800) (
64ce57a4d)feat(cli): add –json flag to models list and models info (#1799) (
06e39131e)feat(cli): add providers test command for connectivity validation (#1798) (
40712a4b0)feat(cli): add –json flag to chats list and chats search commands (#1797) (
9e252e829)feat(eval): add practical14 suite — matrix transpose, IPv4 classification, bracket balance (#1793) (
497c8a769)feat(eval): add practical13 suite — summary stats, Pascal’s triangle, Caesar cipher (#1788) (
317a154ac)feat(eval): add practical10 suite — semver sorting, date histogram, TSV-to-CSV (#1784) (
8f8eaf6e9)feat(eval): add practical12 suite — word frequency, Collatz sequences, log-level stats (
dd1613e95)feat(eval): add practical11 suite — Roman numerals, run-length encoding, anagram groups (#1785) (
b568f4b1d)feat(eval): add practical9 suite — env parsing, YAML merge, git log stats (#1782) (
c0f6b1f20)feat(prompts): auto-load cross-tool AI instruction files (#1780) (
4e719752e)feat(browser): add read_page_text() for interactive page content (#1772) (
ddd327389)feat(browser): add page metadata to ARIA snapshot output (#1771) (
efff411c0)feat(browser): add interactive browsing — click, fill, scroll (#1764) (
4f21623d7)feat(context): add directory support to include_paths (#1767) (
83e3ebf30)feat(prompts): include git status in workspace prompt (#1766) (
57132d49c)feat(browser): add ARIA accessibility snapshot via snapshot_url() (#1762) (
17c2c12c5)feat(eval): add –list flag to show available suites and tests (#1761) (
7d34bd689)feat(evals): add model comparison leaderboard (#1758) (
e4a5d4833)feat(chat): add GPTME_MAX_STEPS and GPTME_CONTEXT_LENGTH env vars (#1683) (
02cc7c16a)feat(eval): add –eval-module flag for loading external eval specs (#1727) (
da477f9a3)feat(skills): add dependency declarations to SKILL.md frontmatter (#1722) (
d8f3bbb2c)feat(llm): model-dependent break_on_tooluse default (#1724) (
955002b39)feat(eval): add Claude Code agent for cross-harness evaluation (#1713) (
a819c6a70)feat(eval): add practical8 suite — url-stats, markdown-toc, json-flatten (#1708) (
ce5ea8866)feat(eval): add practical7 suite — ini-to-json, json-diff, changelog-gen (#1706) (
85db2dc17)feat(prompts): XML-sectioned system prompt when tool_format=xml (
6939aeba7)feat(eval): add practical7 suite — ini-to-json, json-diff, changelog-gen (#1679) (
31d07dd42)feat(models): use closest-match heuristic for unknown model metadata (#1682) (
35e4aa9de)feat(eval): add practical6 suite — csv-analysis, word-frequency, merge-configs (#1676) (
c1bb0252a)feat(eval): add practical5 suite — rename-function, data-pipeline, regex-scrub (#1662) (
76ad24d7e)feat(eval): add implement-class and optimize-performance eval tests (#1644) (
bad1be942)feat(eval): add practical4 suite — group-by, schedule-overlaps, topo-sort (#1654) (
0ac1a46df)feat(eval): add practical3 suite — write-tests and sqlite-store tasks (#1653) (
80cbf8cff)feat(eval): add practical2 suite — sort-and-filter, template-fill, validate-csv (#1652) (
47d83e95b)feat(eval): add practical eval suite with 3 real-world tests (#1647) (
120edd060)feat(eval): add count-words and json-filter tests to basic suite (#1661) (
76277badc)feat(util): add context deduplication helper for plugins (#1656) (
bfcb30739)feat(acp): stream tokens from ACP subprocess to server SSE (#1586) (
822879134)feat(server): add /api/config endpoint exposing agent URLs from gptme.toml (#1657) (
86510ccec)feat(prompts): distinguish agent instruction files from context files (#1556) (
6f44f7742)feat(release): centralize release pipeline in release.yml (#1640) (
0b35e0c1e)feat(lessons): support LLM-judge effectiveness state (#1636) (
6f544dfd0)feat(cli): add
gptme-util chats renamecommand (#1622) (2d77ef1ae)feat(skills): skill marketplace — install, uninstall, validate, init, publish (#1566) (
fa6680ee2)feat(eval): add debug-type-error and find-and-fix eval tests (#1614) (
4347c53ae)feat(doctor): add MCP server health checks (#1617) (
8ba02b92e)feat(eval): add generate-cli and extract-function eval tests (#1615) (
a21287b06)feat(cli): add
gptme-util chats statscommand (#1618) (53c415e9a)feat(cli): add tool exclusion with ‘-’ prefix syntax (#1616) (
b1907cac0)feat(cli): add
gptme-util chats cleancommand (#1620) (84145d061)feat(cli): add
gptme-util chats exportcommand (#1619) (3abc90f08)feat(config): add [agent.urls] to AgentConfig for named agent links (#1621) (
524208ff5)feat(doctor): add lesson health checks to agent doctor (#1613) (
c9a691681)feat(server): add ACP subprocess health monitoring and orphan cleanup (#1583) (
6b423fd0f)feat(lessons): canonicalize TS lesson lookup keys (#1610) (
6f73516ba)feat(doctor): add version check and Playwright browser check (#1612) (
b5310b091)feat(context): show context window utilization in /context command (#1611) (
b817e8101)feat(lessons): Thompson sampling effectiveness scoring for hybrid matcher (#1573) (
0ee822c76)feat(models): add GPT-5.4 subscription models (#1604) (
aac5582a7)feat(models): add –available flag and provider status markers to models list (#1606) (
b181b450d)feat(subagent): add ACP execution mode for multi-harness subagents (#1563) (
809ff65a0)feat(context): show metadata for binary files instead of silently ignoring (#1601) (
6ebae8dbb)feat(read): list directory contents instead of erroring (#1602) (
0d789bf6a)feat(setup): add bash and zsh shell completions (#1603) (
b51575517)feat(tauri): first-run setup wizard for new users (#1596) (
afa31888d)feat(server): add GPTME_USE_ACP_DEFAULT config for server-side ACP opt-in (#1580) (
6752790f4)feat(tauri): add monorepo integration — CI, Makefile, and path fixes (
33cb1c58b)feat(eval): add Terminal-Bench (tbench) evaluation module (#1582) (
10bcbf6f1)feat(server): add ACP session runtime wrapper for per-session subprocesses (#1546) (
7abe6078d)feat: automated demo capture pipeline (asciinema + screenshots + recordings) (#1558) (
0862961cd)feat(eval): new test cases and robustness fixes (#1559) (
2016223e0)feat(release): generate structured changelogs for all release types (#1550) (
50539e79b)feat(hooks): add CWD_CHANGED hook type for directory change events (#1539) (
16e5cd818)feat(acp): add GptmeAcpClient — gptme as ACP client (#1536) (
c1a083281)feat(agent): add
gptme-agent doctorcommand for workspace health checks (#1545) (11295882a)feat(tools): support loading custom tools from .py files via –tools (#1540) (
d66a011e5)feat(llm): add gptme provider for managed service (#1529) (
f6abb75dd)feat(hooks): add goose, opencode, amp agent runtime detection (#1530) (
5e5f0df10)feat(tools): add /tools load command to enable tools mid-conversation (#1518) (
02d38a7bd)feat(hooks): inject AGENTS.md on working directory change (#1519) (
233346545)feat(hooks): parallel agent awareness via process scanning (#1505) (#1509) (
1b7f817ba)feat: enhance –version with extras, providers, health summary (#1503) (
67eafafc4)feat: always load AGENTS.md files (layered: user + project) (#1511) (
26da34a77)feat: improve gptme-util discoverability and tool formatting (#1506) (
05b07cef4)feat: cleaner KeyboardInterrupt handling and CI startup benchmarks (#1502) (
80c185d46)feat(prompts): skip tool examples for reasoning models (#1500) (
50ca19755)feat(eval): add SWE-bench evaluation modules (recovered from #142 and #424) (#1489) (
7b29e8db0)feat: add deep-link OAuth flow for gptme.ai pairing (#12) (
4e2aadaf3)feat(profiles): add computer-use profile and document –tools +computer (#1492) (
60ed23f87)feat(subagent): add persistent memory per agent profile (#1466) (
2fb82ac6f)feat(subagent): add worktree isolation for filesystem-safe subagents (#1465) (
15b837654)feat(profiles): support markdown files with YAML frontmatter (#1464) (
3184df121)feat(profiles): add tool name validation (#1463) (
210db47db)feat(cli): add agent profiles for pre-configured system prompts + tool access (#1455) (
64b2015db)feat(acp): consolidate ACP improvements (
88fd565f2)feat(acp): enrich listSessions with title, timestamps, cwd filtering (#1430) (
4faa85a26)feat(models): add per-model default tool_format to ModelMeta (#1417) (
aa61e3517)feat(acp): return modes and models in NewSessionResponse (#1425) (
eaba19834)feat(cli): add auto_envvar_prefix for GPTME_* env vars (#1418) (
d43caf018)feat(acp): persistent sessions with load/list from disk (#1424) (
52b855c73)feat(acp): add JSON-RPC protocol logging for debugging (#1423) (
e1ac729f0)feat(acp): send AvailableCommandsUpdate on session start (#1396) (
636b9b085)feat(acp): send model and workspace info on session open (#1392) (
82b9873f6)feat(llm): add deprecated field to model metadata (#1316) (
1481d059c)feat(llm): add missing OpenAI model metadata (GPT-4.1, o3, o4-mini) (#1311) (
dcbbc0a81)feat(reduce): truncate long
<details>blocks in messages (#1304) (8ff9d9bc0)feat(server): support slash commands in V2 API (#1282) (
60881e487)feat(webui): display image attachments and file links in built-in UI (#1289) (
5d86aa7d2)feat(server): add server-side elicitation hook for WebUI (#1295) (
879a3ad63)feat(mcp): add elicitation support for user input requests (#1227) (
ebf4acbeb)feat(cli): add skills subcommands to gptme-util (#1287) (
08c9f0661)feat(hooks): generalize elicitation with hook-based system (#1283) (
b95078dfd)feat(tools): make read tool useful standalone, disable by default (#1266) (
1c05d1f7c)feat(llm): add OpenAI subscription provider support (#1225) (
02396e775)feat: auto-trigger LLM resume when rule-based compaction stalls (#1262) (
3bd7d4ec3)feat(dirs): add get_workspace() for agent workspace detection (#1265) (
a81083c05)feat(cli): add –context flag, –tools validation, and CLI help cleanup (#1258) (
b74076d4a)feat(webui): complete avatar support — cache fix, tooltips, user avatars (#1252) (
5ca031a7d)feat(webui): display agent avatar in chat messages (#1215) (
842c6972f)feat(webui): add show hidden messages setting, move initial system to settings (#1248) (
9c68f2567)feat(webui): multi-backend support with unified view (#1241) (
df8df2766)feat(patch): improve multi-hunk support and error messages (#1245) (
f110a53eb)feat(commands): separate /model and /models commands (#1243) (
db9f6c572)feat(config): support config.local.toml for user config (#1239) (
edf7aabc9)feat(config): add [user] section to user config (#1238) (
60b36436f)feat(context): add URL confirmation and content size safeguards (#1211) (
717bb20d5)feat(vision): add PIL.Image support to view_image function (#1232) (
328eda834)feat(lessons): add default lookup directories for skills (#1217) (
f76a80bdd)feat(anthropic): enable thinking mode with native tool calling (#1193) (
503077803)feat(telemetry): add GPTME_RUN_TYPE env var support (#1200) (
fb3810f6a)feat(config): add avatar field to AgentConfig (#1198) (
69e6e24ae)feat(config): add [plugin.*] namespace for plugin-specific configuration (#1197) (
6b5c248e8)feat: switch to hook-based tool confirmations (#1105) (
a23d89333)feat(agent): detect existing agent workspaces and enhance status command (#1183) (
e3bdd2476)feat(prompts): add safeguard truncation for context_cmd output (#1178) (
ba7cd8776)feat: hide messages with hide=true (e.g., auto-included lessons) (#118) (
6c0df0cad)feat(cli): add gptme-onboard wizard for first-run setup (#1167) (
d1f45db94)feat(cli): add gptme-doctor command for system diagnostics (#1166) (
5140d8699)feat(cli): add gptme-agent command for unified agent management (#1159) (
104f05d78)feat(hooks): add async_mode support for non-blocking hook execution (#1154) (
a2b4b70eb)feat(compact): add context file extraction for /compact resume (#1151) (
5b7b55993)feat(browser): improve PDF reading with page limits and vision hints (#1126) (
d18b9aa76)feat(lessons): session-wide limit and end-of-session statistics (#1146) (
4ac795519)feat(mcp): add roots support for defining operational boundaries (#1144) (
dd3108cba)feat(input): add message queueing support (#115) (
6f4f3fa68)feat(ui): add auto-accept all option using existing onAuto mechanism (#103) (
c9b789e95)feat(auth): derive exchange URL from configuration (Option B) (#111) (
42d7b3db7)feat: add URI support in Message.files for URLs and MCP resources (#1118) (
34c6afef7)feat: add file autocomplete for @ mentions (#110) (
8465902d8)feat: enable auto-reconnect for web environments (#109) (
1fa2ca113)feat(auth): implement auth code exchange flow (#108) (
8caf1d3ec)feat(browser): add PDF support using pypdf (#1120) (
2c5086dcf)feat(anthropic): add web search block handling (#1122) (
8c403ab32)feat(anthropic): add native web search support (#723) (
dda13a54d)feat(prompts): add skills summary to system prompt (#1107) (
f65b0b5ba)feat(gh): truncate verbose comment bodies to reduce token usage (#1103) (
fcfe48aad)feat(gh): include comment IDs in PR review output (#1101) (
5a1850b3d)feat(lessons): add wildcard and regex pattern support for keyword matching (#1093) (
12dae0b8d)feat(server): add GPTME_DEBUG_ERRORS for verbose error messages in dev mode (#1096) (
e9bba532f)feat(hooks): add cache_awareness hook for centralized cache state tracking (#1074) (
88c38de31)feat(llm): add retry logic for OpenAI API transient errors (#1067) (
91811070f)feat(hooks): add CACHE_INVALIDATED hook type for cache-aware plugins (#1070) (
04b9f6940)feat(autocompact): add semantic patterns for value-aware retention (#1061) (
34369e203)feat(lessons): deduplicate lessons by resolved path to handle symlinks (#1026) (
1a5701125)feat(autocompact): add Master Context Architecture for byte-range recovery (#1020) (
c82701c77)feat(commands): add /skills command for browsing skills and lessons (#1014) (
ddec87163)feat(codeblock): support quad+ backticks for nested markdown (Issue #1005) (#1009) (
fe24f45cb)feat: add extensible command argument completion system (#1010) (
ce912dae1)feat(subagent): add structured delegation template for clear task handoff (#997) (
aea670e9b)feat(skills): add codebase classification skill (
56a9d442e)feat(lessons): support Anthropic SKILL.md format matching (#1001) (
e63c98068)feat(complete): add todo-based continuation enforcer (#996) (
739691bf8)feat: improve cost awareness UX and add prompt caching for OpenRouter (#990) (
1ff94d260)feat(eval): implement DockerGPTMeEnv for Docker-isolated gptme execution (#988) (
1c61f0ed4)feat(context): implement AdaptiveCompressor for Phase 3.1 Week 3-4 (#937) (
d8bc11979)feat(cli): add context-mode, context-include, output-schema flags for subprocess mode (#987) (
1aac45965)feat: add shared executor module for ACP/server code reuse (#984) (
6a4756a29)feat: add parallel tool execution support (#985) (
7d61dc9db)feat(acp): add Phase 2 tool call reporting and permissions (#979) (
8f5cc107c)feat(subagent): add Phase 1 async enhancements (subprocess mode, hook notifications, batch) (#962) (
431c7c171)feat(acp): add Agent Client Protocol support (Phase 1) (#978) (
75d94dd34)feat(cli): add /clear command to clear terminal screen (#968) (
e0168dbfe)feat(models): add ollama/local model discovery to /model command (#960) (
4512d3237)feat(cli): add /delete command to remove conversations (Issue #956) (#959) (
0563366bd)feat(tasks): add target type filters to task list (#101) (
066769c34)feat(ui): improve error handling for conversation creation (#95) (
cc3f9c89d)feat(ui): add CommandPalette component with comprehensive tests (#98) (
48ca8b2f2)feat: add markdown preview to file explorer with accessibility improvements (#94) (
e47a7e152)feat: redesign navigation with unified collapsible sidebar (#89) (
b7e267897)feat: add ExamplesSection component with more examples modal (
3717e2e4b)feat: redesign settings modal (
a82549a55)feat: add setting to configure default code block open state (
ca90c78de)feat: implement auto-naming for conversations (#84) (
00aa50695)feat: enhance right sidebar UX with auto-collapse and click-to-close (
e3b08cd89)feat: implement collapsible right sidebar with icons-only mode (
2b49a313b)feat: add agent/workspace badges and improve sidebar UX (
67c5a376d)feat: add tool execution status indicator (
246485d12)feat: list models available from gptme-server API (#82) (
e29514976)feat: add agent creation form and agent list (
9f3f9eaa9)feat: ability to add new workspace (
6d6b63321)feat: added system notifications on completed response, added modal for ui settings like chime and theme (#79) (
4a94295b4)feat: switch to next-themes ThemeProvider for theme detection and settings (
233ed4251)feat: implement infinite loading for conversations list (#78) (
2ed57032c)feat: started working on task view for parallel workflows (#77) (
00289595f)feat: send SIGTERM to gptme-server on app exit (
440bed12a)feat: add chime sound notifications for assistant completion and tool confirmations (#72) (
fcad63560)feat: implement inline tool confirmation to replace modal dialog (#71) (
57f4637ad)feat: add port conflict detection and error dialogs (
e5f86d3dd)feat: add auto-connect with retry logic and Tauri integration (#70) (
e417f265b)feat: add comprehensive logging for browser and gptme-server output (
20c7eb3e2)feat(wip): add agents and workspace list UI components (
8855bf068)feat: added support for conversation display names (separate id and name) (#68) (
ca4a097fa)feat: added WelcomeView for cleaner conversation starts (#56) (
b60b00daf)feat: bundle gptme-server as a sidecar (
7f3722234)feat: add gptme submodule (
f0d010204)feat: run
npm ion first run (a2e9e2fbf)feat:add gptme logo (
136e4b008)feat: replace default frontend with gptme-webui (
72ac75abe)feat:initial commit (
f21cef66a)feat: added resizable sidebars, file type icons, menubar improvements (#62) (
45c50c1fa)feat: chat config panel, incl tools & MCP support (#53) (
fdfef2b58)feat: add keyboard shortcuts and floating input styling (
08d0ed177)feat: add back ‘Thinking…’ indicator until first token (#52) (
d849e6a9f)feat: support multiple loaded/active conversations (#42) (
243d0781d)feat: retry getting session id if not received (#43) (
5d60cd9a9)feat: add button to view rendered markdown blocks (#40) (
0be2013f5)feat: streaming markdown parsing (
38f8606b1)feat: improve API connection handling and security (#34) (
63a54b6e6)feat: persist baseUrl and userToken in localstorage to enable refresh without having to re-click link (
4fe43bfc0)feat: enter to confirm tooluse (
e3cdfaeb0)feat: rewrite chat rendering with LegendState (#26) (
b62861666)feat: wip rewrite for server api v2, including tool confirmations (
f2b95173f)feat: added a message options dropdown for model and streaming selection (#22) (
d43201bc1)feat: support baseUrl and userToken via URL fragments (#20) (
0ee5984ca)feat: added option to add header
Authorizationto the connect modal (#17) (b80d6d1ee)feat: add dynamic page titles based on selected conversation (
a57be6e68)feat: improve web UI instructions and code highlighting (
e1b0b9193)feat: automatically continue generating after tool use, as in cli (
ebf2a4a8c)feat: added support for computer use, improved styling, fixed bugs (
74dd8f9ac)
🐛 Fixes (962)#
Click to expand
fix(mcp): keep tool stdout off stdio transport (#3182) (
fd29d2390)fix(test): skip real model loading in semantic unit tests (#3177) (
6338a8f29)fix(release): use OIDC Trusted Publisher for gptme-acp PyPI publish (#3173) (
21ba5b4d0)fix(test): add @pytest.mark.no_retry to test_multi_tool_per_message (#3171) (
4167a4fc6)fix(subagent): preserve workdir in subagent_reply() re-spawn (#554) (#3161) (
4a6f59dc1)fix(openrouter): update stale default models (llama-3.1 series deprecated) (#3163) (
76c253354)fix(acp): add gptme_acp stub package so hatchling can build the shim wheel (#3167) (
cdd71aa41)fix(mypy): add warn_unused_ignores and remove 53 stale type: ignore comments (#3154) (
0198f0590)fix: reorder star button and message count indicator in ConversationItem to remove dead space (star button only visible on hover) (
7d331b795)fix(webui): stabilize WelcomeView autoFocus$ to prevent focus-steal on re-render (#3155) (
4fd36a8ab)fix(config): cast providers to AoT to fix tomlkit type errors (#3151) (
9b793120d)fix(webui): show –cors-origin command in setup wizard for web users (#3149) (
d9c3e148a)fix(ci): harden docs deploy and PyInstaller apt setup (#3144) (
8d7164b0d)fix(computer): apply terminal startup delay fix to Docker container (#216) (#3133) (
2893cdf48)fix(computer): treat missing Playwright chromium binary as warning, not error (#216) (#3131) (
f0ed8713b)fix(computer): treat playwright missing as warning, not hard failure (#216) (#3129) (
44da5d6cd)fix(info): fall back to pyproject.toml when editable install omits Provides-Extra (#216) (#3128) (
27b954094)fix(computer): classify new browser functions in risk/audit system (#216) (#3123) (
7aa01574c)fix(computer): auto-detect native transport in latency diagnostic (#216) (#3117) (
e876924ab)fix(subagent): add +complete to subprocess mode tool list (#3116) (
945af647d)fix(subagent): apply output_schema parsing in subagent_wait() (#554) (#3114) (
68a9af0b2)fix(webui): wait for artifact preview in tests (#3113) (
dec292ceb)fix(webui): connect server after auth-code exchange + lazy cloud env vars (#3111) (
258e69277)fix(computer): lower screen-change threshold 1% → 0.2% and fix xvfb teardown (#216) (#3109) (
c2440ccdd)fix(subagent): delete worktree branch on cleanup (#554) (#3106) (
527b19be2)fix(browser): drop unreachable label= fallback in select_option (#3103) (
28a5139b8)fix(subagent): isolate thread tool list via clear_tools() at entry (#554) (#3102) (
94aae12a5)fix(subagent): report unfinished thread agents as “timeout” in wait_all() (
4f89a57da)fix(computer): microsecond screenshot timestamps + robust test timing (#3092) (
30400bd0e)fix(subagent): fix eval checks and subagent_wait_basic test (#554) (#3087) (
9a328b67f)fix(util): add missing f-prefix in epoch_to_age incl_date branch (#3080) (
b601eaa87)fix(chats): discover cursor-chat-history.json even when conversations/ dir absent (#3077) (
437c3cfb2)fix(tools): always pair structured tool_use with a tool_result (#554) (
33d25418b)fix(computer): add settle_time to _poll_for_change to handle multi-phase UI transitions (#216) (#3065) (
345f70c11)fix(ci): harden Build workflow against broken Ubuntu apt sources (#3066) (
2bb45ad99)fix(computer): capture pre-action baseline in act_and_observe to detect immediate changes (#216) (#3064) (
5761a5d34)fix(computer): derive VNC hostname from page origin in computer.html (#216) (#3054) (
013a7588a)fix(computer): detect macOS display scale via AppKit/system_profiler (#216) (#3047) (
994a362ad)fix(computer): doctor checks for WM + pyatspi; profile guidance for window_focus delay (#216) (#3046) (
a42b5d38f)fix(computer): surface observe_web failures as actionable error messages (#216) (#3039) (
a9d0b47c0)fix(computer): add browser tool to Docker server for structured-first web interaction (
921040881)fix(server): reject unknown fields in PUT /api/v2/tasks/{id} to prevent silent no-ops (#3032) (
631d910fa)fix(computer): restore Docker build with lockfile-backed install (#216) (#3029) (
b58ec3766)fix(eval): make subagent eval expect/check_log checks picklable (#3025) (
54e038f84)fix(eval): harden computer-use eval suite flagged at Greptile 3/5 on #3020 (#3026) (
4272c0d1e)fix(cli): re-raise ClickException before catch-all so UsageError exits 2 (#3016) (
818ae0b59)fix(webui): guard provider-health and user-settings hooks on isConnected (
ad823b6c9)fix(computer): register observe_web/observe_desktop as ToolFunctions + handle list[Message] in ipython (#3014) (
00c52fc7f)fix(test): use infinite iterator for monotonic mock to avoid StopIteration (#3013) (
eae44dc72)fix(computer): adaptive wait_for_change polling + EWMH WM readiness check (#3005) (
85285e801)fix(computer): add shell+vision to Docker server, Xvfb liveness check in doctor (#3004) (
f07b8cf6b)fix(server): only reject message-delete that creates a NEW role adjacency (#2997) (
36c5237ff)fix(webui): avatar alignment + standard-markdown previews (closes #2998) (#2999) (
4436f54fc)fix(util): tokens count rejects valid provider-prefixed models (#2992) (
f3bdf806f)fix(lessons): always log dropout record when epsilon>0, even if no lessons withheld (#2990) (
7061f0bbc)fix(webui): fix fork_command placeholder in Create Agent dialog (#2991) (
c8d8715ac)fix(openai): embed reasoning content in non-streaming response instead of dropping it (#2985) (
66b48256b)fix: demote reasoning content logging from INFO to DEBUG (#2981) (
63c659234)fix(rag): register tools-list context hook with dot notation (#2980) (
44f842640)fix(subagent): correct context_window=N truncation (off-by-one in n_base) (#2977) (
b7254c271)fix(config): strip unknown top-level keys from config file on load (#2974) (
0da7af251)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): 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(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)fix(server): reject whitespace elicitation ids (
0736a78f0)fix(shell): preserve indentation on first line of command output (#2767) (
666285e32)fix(webui): trigger placeholder chat initial step (#2768) (
273034842)fix(webui): improve chat composer mobile ergonomics (#2764) (
d57fabc0b)fix(util): reject empty batch model override (
a9d287188)fix(webui): Jest ESM import crash from ansi-regex v6 (#2761) (
15bd38319)fix: model-aware temperature and top_p for gpt-5 and moonshot (
f0564fd4a)fix(complete): nudge interactive+no_confirm (-y) mode on think-only responses (
d9c4157ec)fix(webui): keep demo mode out of setup probes (#2746) (
a6527cadb)fix(reduce): drop orphaned tool results in limit_log when tool-use is dropped (
4bea903d6)fix(eval): normalize model key in pass-rate gate to handle router prefixes (
13b4f1060)fix(tests): add assertions to three no-op test functions in server bad-input suite (#2738) (
9f7c2a185)fix(server): return JSON instead of HTML for HTTP errors (404, 405, etc.) (#2740) (
50fb21abc)fix(webui): restore direct-link fallbacks for admin and health (#2742) (
dce35372e)fix(webui): add baseline security headers to Cloudflare Pages _headers (#2744) (
2840c9fde)fix(server): batch SSE generation_progress events and fire generation_complete early (#2730) (
5be5f1fc1)fix(tests): update bad-input test expectations for correct error codes (#2729) (
385ad0611)fix(webui): polyfill structuredClone in jest.setup for jsdom (#2690) (
23a658e36)fix(config): validate temperature/top_p/max_tokens types in ChatConfig.from_dict (#2737) (
b5da92408)fix(cli): bare model name without provider gives misleading error (#2734) (
340efcf66)fix(cli): guard against empty –name value bypassing ParamType validation (#2732) (
f21f3c73b)fix(cli): promote no-tool auto-reply logging from info to warning level (#2736) (
3c7038529)fix(logmanager): stop auto-pruning thinking blocks (#2727) (
5106fa6de)fix: suppress RequestsDependencyWarning globally (#2728) (
35613fcc5)fix(webui): preserve demo query across chat navigation (#2722) (
48fae73a7)fix(cli): use interactive flag instead of raw isatty() for stderr routing (#2719) (
14625ae02)fix(cost): drain stream after tool break to capture message_delta usage (#2720) (
69a373377)fix(logs): demote reasoning_budget and auto-naming retry logs to debug (#2715) (
03f405a6a)fix(llm): buffer thinking-block display to prevent think-sig terminal wrapping (#2704) (
54b77b123)fix(logs): suppress multiline think-sig; capture usage when stream broken early (#2703) (
c95e73cb4)fix(cost): fix request_count inflation and redundant total display (#2702) (
58eff1f3e)fix(server): load conversations from validated logdir (#2696) (
760c74291)fix(logs): suppress think-sig in streaming; restore CLI workspace default (
ee17a7dca)fix(webui): encode chat route conversation ids (#2699) (
0753abe19)fix(logs): quiet normal runtime noise (
25a2f1fc5)fix(server): reject path traversal in file attachments via API (
4d487bba3)fix(cli): catch empty –model at parse time instead of blocking startup (#2692) (
f93cccf26)fix(self-heal): handle invalid ANTHROPIC_API_KEY gracefully (#2693) (
42cdec9ed)fix(webui): replace structuredClone with JSON.parse/stringify for jsdom compat (#2691) (
6340324ed)fix(webui): add missing getServerHealth to demo ApiClient (
4b8abfdb7)fix(webui): add missing getServerHealth to demoApiClient (#2685) (
c5078b037)fix(webui): improve history accessibility (#2670) (
a374f26ae)fix(release): verify artifact build workflows actually started (#2648) (
a23951230)fix(release): vendor build_changelog.py, add dry-run PyPI publish validation (#2644) (
c77843321)fix(cli): clearer error when calling execute-only tools via ‘tools call’ (#2642) (
5ec49f43e)fix(server): emit Access-Control-Allow-Private-Network on CORS preflight (#2635) (
5031b54e3)fix(server): strip whitespace from session_id before emptiness check (
de2447956)fix(webui): handle cloud auth postMessage handoff from popup (#2624) (
2746a6978)fix(util-cli): reject empty –model in llm generate (#2628) (
785d76aba)fix(test): use CliRunner instead of subprocess in TestModelsInfo to prevent CI timeouts (
fbfb2c235)fix(computer): handle missing/timed-out ImageMagick convert in screenshot resize (#2625) (
111e178b0)fix(webui): tag loopback requests correctly (#2623) (
4dc83cb28)fix(server): avoid full JSONL scan in agents listing endpoint (#2619) (
3b11cd751)fix(webui): hint when hosted chat hits loopback without CORS (#2615) (
89eb8e903)fix(webui): refresh stale fallback model to claude-sonnet-4-6 (#2610) (
dd67a2a93)fix(webui): cross-tab sync for server registry after cloud sign-in (
6c58d6bc9)fix(server): validate stream and tool-confirm action inputs (#2608) (
322c893d8)fix(cli): suppress resume hint after fatal exit (#2607) (
4a0c25287)fix(autocompact): preserve tool-call messages (#2606) (
df7533d7f)fix(llm): stop tool-format streams without newline (#2605) (
0c1f47359)fix(install): error on missing TTY instead of silently assuming yes (#2600) (
22c26d473)fix(server): validate config patch tool allowlist (#2597) (
e385e622b)fix(cli): reject shell-hostile conversation names (#2596) (
386cb3bac)fix(server): validate tools field type before calling init_tools (#2595) (
3d6b4ee95)fix(cli): expand tilde in –workspace paths (
ef9297a28)fix(hooks): never crash gptme-util hooks run on malformed CC event JSON (#2591) (
c2913a033)fix(server): block /edit command in server mode (#2590) (
a55f46010)fix(cli): reject whitespace-only conversation names (
fb904f796)fix(server): return ‘Branch not found’ when POST targets a non-existent branch (#2587) (
9ccc02c64)fix(cli): strip whitespace from prompts before empty check (#2584) (
c61294aed)fix(server): reject non-string transcript call_sid (#2583) (
ab112b6f4)fix(server): propagate ContextVars into background threads (#2582) (
347ad1695)fix: improvements to
gptme-util chats read/search(#437) (d5b19ba50)fix(server): reject whitespace-only upload filenames; return 404 for nonexistent workspace subpaths (#2581) (
85a430b0c)fix(util-cli): prepend system message in llm generate (#2578) (
e31dddfa1)fix(server): reject invalid message tool allowlists (#2579) (
bcf4b28ad)fix(util-cli): keep tools info JSON machine-readable (
c6178c96e)fix(cli): raise UsageError for empty –model string (#2577) (
6362147c9)fix(server): correct upload path field description and add upload tests (#2576) (
b87d153ab)fix(cli): raise UsageError for unknown model in llm generate (#2575) (
998fb759b)fix(server): reject non-string conversation prompt (#2574) (
c5c0c8598)fix(hooks): tolerate session-end trigger kwargs (#2573) (
ec9b5104b)fix(cli): keep unknown profile errors off stdout (#2567) (
db71a4e7f)fix(cli): reject malformed –output-schema with a usage error (#2571) (
ea860e41d)fix(cli): reject missing path args before prompt merge (#2569) (
8d3b3ff3a)fix(cli): validate custom tool paths before startup (#2566) (
64e09e384)fix(webui): skip hosted loopback auto-connect (#2568) (
4597b63c7)fix(server): reject malformed project_config sections (
4ca1d829b)fix(cli): validate architect/editor model names with clean usage error (
5c2d0f05f)fix(cli): scope implicit resume to cwd workspace (
72300a945)fix(cli): reject missing explicit path prompts early (
1183cfd62)fix(server): reject malformed JSON before field validation (#2562) (
f133dda7f)fix(cli): scope unnamed resume to workspace (#2561) (
66e4249c0)fix(json): keep runtime stdout pure in JSON mode (#2559) (
ed66a68c1)fix(webui): retire dead cloud preset URL (#2560) (
c45feb926)fix(models): dedup ‘Unknown model’ warning via log_warn_once (#2558) (
10a313143)fix(test): adjust short prompt lower bound from 500 to 400 after null-byte guard reduced prompt size (
85b00010c)fix(cli): preserve custom tool file allowlists (#2554) (
2573e54ae)fix(logmanager): clamp over-large conversation limit to avoid islice crash (#2552) (
6b6e7e46e)fix(telemetry): honor OTEL_EXPORTER_OTLP_TIMEOUT for export and flush (#2550) (
f38ffaf7f)fix(webui): render a NotFound page for unmatched client-side routes (#2551) (
2201a78d3)fix(cli): remove dead logdirs on startup validation (#2540) (
683a1b501)fix(cli): allow json after headless auto-switch (#2548) (
3a8c1ed7b)fix(cli): reject unsafe /fork conversation ids (#2536) (
575e9a3c2)fix(cli): avoid full conversation scans on resume (#2544) (
b23cdb47c)fix(server): reject non-string session ids (#2545) (
d6057b931)fix(cli): keep slash commands on json rail (#2543) (
c61d145e0)fix(webui): restore hosted deep links on Pages (#2534) (
34bc0a01e)fix(server): reject non-string elicit ids (#2541) (
3491af279)fix(cli): keep json-mode logs off stdout (#2537) (
184ccc7ef)fix(server): reject invalid chat config path types (#2538) (
5ddadc2e3)fix(server): reject non-string step models (#2535) (
64f74e318)fix(cli): validate custom tool paths before init (#2533) (
212139f93)fix(server): validate agent creation field types (#2531) (
ec61e388e)fix(webui): keep api misses out of SPA fallback (#2532) (
10ee75d53)fix(telemetry): suppress OTLP timeout tracebacks (#2528) (
2d64b73ec)fix(server): return 409 for upload name exhaustion (#2529) (
ef29f0682)fix(cli): avoid blocking on idle stdin pipes (#2525) (
9390f0ef7)fix(cli): ignore disable env in prompts expand (
bcfbd00bc)fix(server): reject non-object conversation config (
4f68269eb)fix(server): use get_json(silent=True) in tasks endpoints (#2524) (
84d5c5857)fix(server): reject non-object v2 JSON bodies (
e5c09e826)fix(server): use get_json(silent=True) in tasks and agents endpoints (#2523) (
03fca16a6)fix(cli): honor –name when resuming conversations (#2522) (
417a4f82a)fix(mcp): deduplicate search_all results across registries (#2520) (
ecfea2bae)fix(webui): route auth code exchange through fleet (#2519) (
d50617c57)fix(server): validate PUT conversation body and messages types (#2517) (
4c7fa7916)fix(cli): reject unsafe conversation names (#2518) (
fa6c9d80c)fix(chats): add logger warning for skipped non-string content and narrower type hint (
5f1fee889)fix(webui): reset isLoading to false when disconnected in useModels (#2514) (
568585c70)fix(webui): gate useModels on connection state (#2513) (
3282b11db)fix(server): validate transcript turn text type to prevent 500 on non-string input (
01729f32c)fix(server): validate message content type in PUT conversation (#2511) (
2bd3b3ca8)fix(cli): reject directory passed to ‘tokens count –file’ (#2510) (
7e1cdf1c6)fix(server): validate session belongs to conversation across all sessions endpoints (#2508) (
d5f44c478)fix(cli): prevent gptme-util tokens count from hanging on no-input non-TTY (#2509) (
5f527a0f6)fix(server): return 404 from events endpoint when conversation does not exist (
cca616bd9)fix: prevent hang on empty query in chats search (#2505) (
b68a38f75)fix(webui): gate useTasksQuery on connection state (
24d42078b)fix(webui): suppress duplicate PNA hint in install block (
9379aa6db)fix(cli): reject overlong conversation IDs before filesystem access (#2502) (
6bdf18dc3)fix(server): return 400 for conversation_id/branch names exceeding NAME_MAX (#2498) (
4d3f06f97)fix(cli): remove browser backend noise from utility output (#2500) (
a5b383286)fix(chats): read finds any conversation by id and exits non-zero when missing (#2497) (
7a39bba7f)fix(cli): reject negative chats –limit instead of crashing islice() (#2496) (
dad0fe359)fix(cli): warn when ‘models info’ falls back for an unrecognized provider (#2495) (
8bcc96e8b)fix(cli): make non-default tools callable via gptme-util tools call (#2493) (
b4664e9ad)fix(chats): avoid scanning test logs for user stats (#2491) (
b3b3e01b7)fix(cli): tokens count treats ‘-’ as stdin (Unix convention) (#2489) (
3e137c218)fix(cli): mcp commands exit nonzero on failure (#2487) (
925eaae6a)fix(cli): tokens count exits nonzero when no input is provided (#2484) (
1ceb07ab1)fix(cli): resolve bare provider-less model names instead of crashing (
3072e1a4f)fix(logmanager): tolerate unknown message fields when reading logs (#2482) (
f1719b89a)fix(tools): split comma-separated choice options (
cf1c91a28)fix(vent): tolerate trailing punctuation in resolution-owner tag (#2474) (
9bd65be9b)fix(bot): verify sha256 of downloaded github_bot.py (
0973bbf44)fix(lessons): use description field for semantic matching in hybrid_matcher (#2469) (
35e426d19)fix(bot): update model default, fix checkout version, tighten permissions (#2468) (
aa7675878)fix(vent): teach resolution-owner taxonomy, capture owner tag (#2463) (
09bcf44ef)fix(webui): surface payment-required chat errors (#2462) (
a3302479a)fix(hooks): replace invalid noqa directives in auto_snapshots (#2461) (
e4e078fb0)fix(tests): bump short prompt token limit to 4200 (#2460) (
aad46a340)fix(site): strip broken README TOC from homepage (#2459) (
daea4ee98)fix(tauri): verify server is usable before reusing port 5700 (#2458) (
1bf0beb3c)fix(webui): include status code and server error in models fetch failure (#2457) (
137a55d53)fix(android): disable broken mobile cloud setup path (#2454) (
30bc3384e)fix(tests): skip test_search_perplexity on Perplexity/OpenRouter quota exhaustion (#2450) (
d30562d6d)fix(benchmark): raise cold threshold to 10s and increase runs to 10 (#2449) (
fdbcf5a92)fix(bot): avoid duplicate resolve failure comments (#2447) (
248aac98c)fix(tauri): commit app icons and remove icons/* from gitignore (#2446) (
abe287c84)fix(tests): skip requires_api tests on invalid API key (AuthenticationError) (#2444) (
b4b6ea58a)fix(tools): keep tool descriptions within OpenAI limit (#2441) (
89a5dccac)fix(github): rewire stale PR view helper (#2432) (
1071fac9a)fix(subagent): harden thread-mode wait path (#2425) (
5e026c961)fix(tests): adapt server tests to isolated workspaces (#2428) (
76b121112)fix(config): give server sessions an isolated workspace directory (#2427) (
4e4ae6bc5)fix(tools): warn when plain allowlists drop MCP tools (
aadcdd257)fix(server): correct conversation sort direction (
cc0554d26)fix(tools): support glob tool allowlists (#2423) (
10e8caee5)fix(hooks): harden Windows process handles (#2422) (
98c9f3f5e)fix(eval): lazy-load disabled swebench helpers (
b8a47cce4)fix(eval): address staged swebench review notes (
3b9eead84)fix(eval): fail fast on disabled staged swebench runner (
cc39e45fc)fix(webui): preserve structured API errors (
d255073b8)fix(llm): apply default max_tokens (16k) for OpenRouter models (#2402) (
ed1d6ef26)fix(ci): move workflow inputs from inline run: interpolation to env: (closes #2398) (#2399) (
dc070862b)fix(tools): restore CUA transport compatibility (#2393) (
afada2488)fix(eval): attach fixture files to local eval prompts (#2390) (
157f7c98d)fix(tests): clear GPTME_DISABLE_PATH_INCLUDE in test_image_auto_attach_end_to_end (#2379) (
184daf803)fix(webui): surface auto-step startup failures (#2375) (
5d5bba3ec)fix(tests): isolate include_paths tests from GPTME_DISABLE_PATH_INCLUDE env var (#2359) (
7ad8c7d93)fix(tools): simplify derive_type TODO with get_type_hints fallback (#2351) (
7df272dcc)fix(server): move :key from Vue template to child elements (#2345) (
6f065264a)fix(tools): fall back to current LogManager when shell logdir is None (#2344) (
b84ef032f)fix(autocompact): record context-savings ledger when tool outputs are summarized (#2342) (
941bb9b25)fix(tools): fold git log preview into shell (#2340) (
786d1a00c)fix(webui): responsive settings modal — horizontal tabs on mobile, sidebar on desktop (#2335) (
2333ae49d)fix(messages): merge turns after ephemeral pruning (#2331) (
05dc3feab)fix(webui): delete stale api.gptme.ai Cloud preset on migration (#2327) (
af8d3edec)fix(webui): show HTTP status in auth code exchange error instead of ‘Unknown error’ (#2326) (
5cd88032b)fix(webui): support same-window postMessage in EmbeddedContextProvider (#2325) (
41da3560a)fix(server): validate per-turn dict type in POST /transcript (
c15350ab0)fix(webui): update auth base URL from fleet.gptme.ai to gptme.ai (#2312) (
3c0fb79f0)fix(llm): strip redundant openrouter/ prefix from proxy model IDs (#2311) (
9453b85a3)fix(context): add per-message size budget to include_paths (#2308) (
2f7981c76)fix(context): deduplicate paths in _find_potential_paths to prevent repeated file embeddings (#2307) (
c48735622)fix(tests): add _restore_logged_warnings fixture and fix caplog context in TestLogWarnOnce (#2301) (
b94ae2ba2)fix(ci): route Anthropic tests through OpenRouter to use per-key spend limits (#2297) (
771528ed8)fix(webui): make SetupWizard X close button visible and persist hasCompletedSetup (#2295) (
b0200264b)fix(webui): add Skip button to SetupWizard welcome step (#2294) (
e1583222a)fix(webui): mount SettingsModal in mobile layout so Server settings works on Android (#2293) (
f8d336238)fix(webui): stop auto-connect retries on CORS/PNA failures (#2290) (
faa0333e9)fix(webui): move Sheet safe-area from SheetHeader margin to SheetContent padding (#2289) (
bd954bbc8)fix(webui): apply safe-area insets to Sheet primitive (app-wide) (#2287) (
60e826e8a)fix(webui): replace removed SiOpenai with local SVG icon (#2283) (
58ded337b)fix(webui): add safe-area insets for Android/iOS notch support (#2284) (
deb4a008d)fix(webui): remove dead Lovable bootstrap script (#2281) (
6482aee7e)fix(webui): remove unsupported [build] key from wrangler.toml (#2279) (
f14d1df4e)fix(webui): gitignore bun.lockb to prevent silent CF Pages breakage (#2278) (
adf43a21a)fix(webui): remove bun.lockb and fix McpConfiguration type errors (#2270) (
74d15ee5a)fix(tauri,server): self-terminate gptme-server when Tauri parent dies (#2267) (
6684e7032)fix(tauri): handle RunEvent::Exit for macOS Cmd+Q sidecar cleanup (#2260) (#2266) (
fa8616615)fix(tauri): prevent_exit in ExitRequested to guarantee server cleanup on macOS (#2264) (
32b13c1dc)fix(tauri): catch PyInstaller orphan on app exit (
62155215e)fix(tauri): kill gptme-server subprocesses and orphans on exit (#2261) (
fe05ed5c3)fix(agents_md_inject): skip re-injection when content already loaded from different path (#2256) (
b69b5bf91)fix(tauri): reuse existing gptme-server on startup instead of blocking error dialog (#2258) (
ee6bb708a)fix(cli): skip context_cmd when opening any existing conversation, not just –resume (#2257) (
5b607e1ea)fix(prompts): include version string in custom agent system prompt (#2251) (
ff23215b9)fix(llm): read OpenRouter cache write tokens (#2250) (
09a4f7164)fix(tauri): set display name to ‘gptme’ in Dock/Finder on macOS (#2248) (
42fcc357a)fix(settings): show effective config sources and restore scroll (#2247) (
7cd59addd)fix(tauri): restore execute permission on sidecar after artifact download (#2246) (
4d0f9d663)fix(tauri): fix notarization, app name, and icon (#2244) (
8f78b5a3d)fix(tauri): codesign sidecar binary on macOS (#2242) (
3571ed770)fix(webui): surface missing provider setup on welcome view (#2241) (
92646ade7)fix(tauri): trigger macOS local-network permission at app startup (#2240) (
7e099f847)fix(webui): include port in derived server name to prevent name collisions (#2239) (
4b0440ddc)fix(tauri): clean up gptme-server on app exit, not just window close (#2238) (
620edf49b)fix(webui): use configured Pages project and refresh Bun lock (#2233) (
07027a663)fix(tauri): expose TAURI global so webui detects desktop env (#2229) (
ee6693584)fix(webui): show actionable connection error details (#2228) (
cf87099be)fix(tauri): allow multi-origin CORS so AppImage local setup works (#2227) (
646590516)fix(webui): surface disconnected first-run actions (#2219) (
45820f031)fix(server): apply provider API key to os.environ immediately (no restart needed) (#2214) (
2930da50e)fix(reduce): skip unfindable codeblocks instead of asserting (#2212) (
74f701ec6)fix(release): use creatordate sorting for previous tag detection (#2211) (
285c45f76)fix(hooks): match Claude sessions by start time (#2202) (
b155f7913)fix(hooks): detect codex session mode in workspace_agents (#2196) (
4136b5857)fix(anthropic): use adaptive thinking on Opus 4.7 (legacy returns 400) (#2190) (
3933b9e95)fix(openai): extract cache_creation_input_tokens from OpenRouter/Anthropic responses (#2189) (
ace5b7cdf)fix(anthropic): fold static bootstrap into system prompt (#2188) (
fe9c84c34)fix(doctor): check for pandoc, pdftoppm, convert, and shellcheck (#2182) (
fb44ae9e7)fix(config): drop unknown project-config keys instead of crashing (#2179) (
59c780852)fix(server): start without a default model when no API keys configured (#2178) (
76719bf4d)fix(server): pick fallback model based on available provider keys (#2177) (
8304021d7)fix(config): ignore unknown keys in [prompt] and [user] instead of crashing (#2176) (
504aec64d)fix(doctor): show fix hints for SKIPPED checks in verbose mode (#2172) (
398adb1a7)fix(doctor): add node, npx, and docker to optional tool checks (#2171) (
54cb8e21a)fix(eval): clean up auto-created host_dir in DockerExecutionEnv (#2170) (
f3bc96e2e)fix(eval): isolate user context from benchmark runs (#2168) (
6537b57bc)fix(server): serial multi-tool execution and call_id propagation (#2166) (
622c92f35)fix(doctor): suppress requests version-compatibility warning (#2164) (
a3aa732b8)fix(server): use int type for –port, add GPTME_SERVER_HOST/PORT env vars (#2163) (
10dcd2922)fix(doctor): add Python version check (require 3.10+) (#2161) (
97f2608e3)fix(cli): suppress requests version-compatibility warning in gptme-util (#2160) (
2cd90fd6b)fix(server): include exception detail in agent init error response (#2158) (
cc3b2f1b2)fix(server): include exception detail in tasks API error responses (#2157) (
096b4f572)fix(chats): use 1-indexed labels in read to match –start parameter (#2156) (
0f4b24995)fix(doctor): show warning when Anthropic API key quota is exhausted (#2154) (
1eb85f995)fix(dx): improve error messages with actionable context (#2151) (
e39e37c5b)fix(dx): improve first-run experience with better errors and config detection (#2150) (
e273ae15f)fix(models): update OpenRouter Anthropic model IDs to dot notation (#2149) (
d66ac4ba7)fix(agent): use function timeout for fork command instead of hardcoded 120s (#2148) (
f6e4eacce)fix(server): reject non-object JSON in session endpoints (#2144) (
e70c73d9e)fix(server): reject non-object JSON in task PATCH endpoint (#2142) (
e01a50be5)fix(server): reject non-object JSON in agent creation (#2143) (
53ff31a4e)fix(server): 404 orphaned conversation avatar requests (#2141) (
182df9a0c)fix(util): lazy-import scipy in _sound_sounddevice to avoid 1.4s startup penalty (#2140) (
5676664d2)fix(server): reject non-object JSON in config patch (#2139) (
fabfa88ba)fix(server): add missing validation in POST message and config PATCH endpoints (#2138) (
65c60f362)fix(server): return 404 for missing conversation avatar and config (#2137) (
69503e907)fix(server): return 404 when patching missing conversation config (#2136) (
3d0995d65)fix(server): return 404 for missing conversations (#2135) (
4d689db77)fix(server): handle file deletion races and bound attachment name allocation (#2134) (
fdcac364e)fix(webui): avoid setup wizard completion loop (#2133) (
387a27ceb)fix(server): validate message content and timestamp in conversation creation (#2132) (
b6256b03d)fix(server): add thread-safety lock to SessionManager (#2131) (
4f2eee4f3)fix(tools): report error on invalid read line numbers and fix tool name in server error log (#2130) (
da409c30c)fix(server): validate task_id to prevent path traversal in tasks API (#2128) (
be1bee349)fix(server): add random suffix to task IDs to prevent collisions (#2126) (
8bdbca06e)fix(ci): fall back to unsigned tauri release when apple secrets missing (#2121) (
6872f804b)fix(server): cap text file preview at 10MB to prevent OOM (#2124) (
748f177d0)fix(server): restrict agent creation path to server working directory (#2123) (
899c5b053)fix(tests): fix server_confirm race condition and mark slow CLI tests (#2122) (
80f35ccf6)fix(server): validate user avatar serves only image files (#2119) (
9ae2f22ff)fix(lessons): validate tools field in frontmatter like keywords/patterns (#2120) (
13ca5cba6)fix(webui): use dynamic month name in ConversationList date group test (#2117) (
aa6e86186)fix(server+eval): event trimming for memory leak + eval timeout bug (#2108) (
62ec454f9)fix(server): detect and clean up stuck generating sessions (#2107) (
33f17bd1d)fix(lessons): guard against zero-norm embeddings and clean up dead code (#2102) (
16ef840bc)fix(lessons): make tool matching case-insensitive (#2092) (
890ffc840)fix(lessons): fix hybrid matcher crash, improve context extraction and path parsing (#2087) (
cd762a1ff)fix: three reliability/UX bugs (assert, API validation, stdout) (#2086) (
3d6a19504)fix(server): fix SSE event delivery race causing test flakiness (#2081) (
825514b0e)fix(server): resolve gptme session dirs in external sessions API (#2071) (
012241e31)fix(mcp): don’t set thread-global event loop in MCPClient (#2070) (
d7abbc8a3)fix(server): improve external session provider detection for uv tool installs (#2065) (
463747f20)fix(eval): clarify behavioral eval prompts to improve baseline score (#2063) (
51c32cf47)fix(tools): add explicit UTF-8 encoding to all file read/write operations (#2051) (
d0b41b0ae)fix(server): fix model name in rerun endpoint and event flag race condition (#2050) (
3b271f7c3)fix(eval): fix behavioral eval suite — 4 cascading bugs (#2047) (
922603a69)fix(tools): add text=True to lynx subprocess and error handling to PDF download (#2044) (
928f18dd1)fix(server): close TOCTOU race in /step endpoint for concurrent requests (#2042) (
e3c20a98f)fix(llm): add safety guard against silent None return in retry decorators (#2041) (
b87923bd6)fix(eval): handle TimeoutExpired from docker stop during timeout cleanup (#2040) (
8d7a4c4b6)fix(tools): add missing capture_output/text to subprocess calls (#2038) (
68d47b425)fix(server): return LLM errors in step HTTP response (#2037) (
0ddec3da6)fix(tools): add error handling for subprocess calls in screenshot and PDF tools (#2030) (
7fecc87a8)fix(server): harden session management and input validation (#2029) (
9eee5d2c3)fix(tools): replace deprecated getchildren() with direct iteration (#2020) (
5489d2dbe)fix(subagent): add timeout to subprocess monitor to prevent indefinite blocking (#2019) (
6a1c07837)fix(tests): set asyncio_default_fixture_loop_scope to suppress deprecation warning (#2016) (
dee34bc29)fix(server): validate input types on tasks API and POST message endpoints (#2014) (
cc7804bb2)fix(eval): add subprocess timeouts to eval module (#2012) (
8ac9f4b52)fix: add subprocess timeouts to remaining misc modules (#2013) (
3d84cbe10)fix(agent): add subprocess timeouts to service and workspace modules (#2010) (
1b175afb5)fix(util): add subprocess timeouts to all gh CLI calls (#2009) (
53ea31565)fix(tools): add subprocess timeouts to computer tool (#2007) (
447bb9a4d)fix(util): add subprocess timeouts to clipboard operations (#2008) (
9e4a1f5ad)fix(server): wrap tasks list response to match TaskListResponse schema (#2006) (
524e7640a)fix(server): validate branch parameter to prevent path traversal (CWE-22) (#2005) (
39f118bdc)fix: harden XML parsing — prevent KeyError and negative positions (#2004) (
b55f79d83)fix(server): add path traversal validation to session and workspace endpoints (#2000) (
fbe35eb55)fix(server): hide reasoning blocks from visible output (#1999) (
ba2567323)fix(tests): remove unused pytest-asyncio config options (#1998) (
960884dc7)fix(webui): resolve eslint react-hooks/exhaustive-deps warning (#1991) (
23a55aafc)fix(webui): fix pre-commit hooks to only run on webui file changes (#1990) (
5a9e5a5eb)fix(tools): add missing subprocess timeouts to prevent indefinite hangs (#1985) (
7177168cd)fix(eval): replace readline() loops with communicate() to prevent pipe deadlocks (#1984) (
3d5beeec8)fix: harden subagent thread safety and server input validation (
52db57eba)fix(eval): use Wilson score consistently in per-test breakdown (#1981) (
f71571cab)fix(eval): add missing subprocess timeouts to Docker operations (#1980) (
b385decaf)fix(eval): rank leaderboard by Wilson score to account for test coverage (#1978) (
f52f2c826)fix(webui): sidebar icon reorder, workspace filtering, remove redundant sections (#1976) (
348f09e6d)fix(webui): handle nested code blocks in markdown rendering (
f595ef842)fix(webui): add node types for test environment (#1973) (
95cd37bf3)fix(webui,server): step collapse bugs, message styling, metadata, model persistence, scroll (#1957) (
a9105d50e)fix(test): join subagent threads before mock assertions (#1968) (
5115fbdf7)fix(ci): install ffmpeg conditionally for demo capture recording (
9367530dc)fix(eval): close remaining practical16 review gaps (#1967) (
f48de363a)fix(server): validate auto_confirm type in PUT conversation endpoint (CWE-20) (#1966) (
d69781211)fix(ci): install ffmpeg in capture-webui job for recording support (#1964) (
730bccc07)fix(webui): add DOMPurify sanitization and remove debug logs (#1963) (
d8fbb6dc9)fix(eval): fix practical16 check false positives flagged by Greptile (#1962) (
fa6febd9a)fix(hooks): prevent AGENTS.md re-injection on CWD change in server mode (#1959) (
c613c7593)fix: add ValueError guards for env var int() parsing in anthropic and computer tools (#1956) (
a129ec7cb)fix(test): check Anthropic quota by API key presence, not MODEL env var (#1955) (
daf02c9b6)fix(logmanager): call write() after undo() to persist changes (#1954) (
e59ed83e7)fix(message): preserve quiet flag in Message.concat() (#1953) (
949316ab7)fix(subagent): use DEVNULL instead of PIPE to prevent deadlock (#1952) (
c6885c494)fix: config write loss, env prefix mismatch, chats lock, gh poll timeout (#1951) (
b971b9b7a)fix(logmanager): use is_absolute() instead of resolve() for logdir check (#1950) (
d9dc0e8a2)fix(computer): use API dimensions directly for screenshot resize (#1949) (
96d4df926)fix: pdf temp directory leak, tmux wait crash, include_paths crash guard (#1948) (
19d7356f9)fix(codeblock): preserve fence length to prevent truncation assertion failure (#1947) (
b51845ebb)fix(logmanager): use Path.relative_to() instead of string containment for logdir check (#1946) (
cc4bb1b86)fix: tty file handle leak, vision temp file cleanup, and server TOCTOU race (#1945) (
ba464915a)fix(eval): remove phantom CSV columns and add Docker upload path traversal guard (#1944) (
8469985ce)fix(server): persist tool output to disk after execution (#1943) (
ca3539be1)fix: register planner subagent before thread start and remove dead proxy_url branch (#1942) (
d7e33c0f0)fix: fix Log.repr bracket, command arg parsing, and read end_line check (#1941) (
c555deb03)fix: replace deprecated tempfile.mktemp() and fix patch size warning condition (#1940) (
744166718)fix(eval): add p.wait() after p.kill() to prevent zombie processes (#1938) (
dfb7ffdf3)fix(server): use .get() to prevent KeyError on concurrent pending_tools access (#1937) (
0443906f5)fix(server): snapshot session dict before iterating in cleanup (#1935) (
7a323d888)fix(server): send text chunks not individual characters in ACP SSE streaming (#1934) (
8721842ba)fix(openrouter): don’t set require_parameters when reasoning is enabled (#1933) (
6760b4cec)fix(webui): remove broken generic Cloud preset from multi-server registry (#1926) (
1c9a0b79e)fix(server): persist visible generation errors (#1920) (
86480967d)fix(webui): highlight Chat tab when on root path ‘/’ (#1914) (
c5a4b7b33)fix(webui): add mobile bottom navigation and fix desktop logo shift (#1913) (
b1954b3c9)fix(webui): use dynamic aria-label for mobile nav toggle (#1911) (
9ab5d20d7)fix(webui): fix mobile navigation — add hamburger menu, prevent sidebar auto-open (#1909) (
25b6346bf)fix(webui): fetch recommended models from API instead of hardcoding (#1901) (
e1b6659c5)fix(webui): serve attached files via correct API endpoint (#1906) (
2abccb4dc)fix(webui): preserve cross-server conversations with same id (#1904) (
7d1605a01)fix(webui): fix duplicate message and step race in pendingFiles flow (#1902) (
0618790fa)fix(webui): remove asChild from ContextMenuTrigger wrapping Computed (#1892) (
59db8b873)fix(webui): add aria-label attributes to icon-only buttons (#1889) (
90202f246)fix(webui): prevent scroll-to-bottom button flicker during smooth scroll (#1888) (
164a7fee6)fix(webui): make scroll-to-bottom button reactive with use$() (#1887) (
ad15a4104)fix(save): handle binary/non-UTF-8 files gracefully (#1879) (
21d182e1d)fix: ensure python command is available in eval on macOS (#1853) (
ecc02a63a)fix(webui): asset detection breaks on query strings, causing HTML to be served as JS/CSS (#1848) (
c53a9eca3)fix: use –env-file for docker secrets instead of CLI args (CWE-214) (#1832) (
67c55bbbb)fix(gh): show leading omitted lines in run log extraction (#1838) (
97c1befe2)fix(tests): keep FakePage reference for evaluate_calls assertions to satisfy mypy (#1834) (
8340ca7c0)fix(browser): preserve repo metadata on README parse errors (
d050766ec)fix(tests): prevent TemporaryDirectory resource leak in test_cli (#1833) (
6971ac5ad)fix(llm): forward max_tokens to openai-subscription provider (#1830) (
883ecb8e4)fix(eval): add 21 missing practical tests to leaderboard categorization (#1822) (
6b83adcb4)fix(eval): increase default timeout from 60s to 300s (#1820) (
f81e15ebb)fix(eval): increase default timeout from 30s to 60s (#1819) (
c41a0b660)fix(eval): instruct agents to use relative paths in isolated workspace (#1818) (
56ac4d187)fix(eval): restore fixture files before running eval checks (#1815) (
9b2b0261d)fix: use –env-file for docker secrets instead of CLI args (CWE-214) (#1789) (
e6c3a9766)fix(ci): replace bash 4+ lowercase syntax with POSIX-compatible tr (#1806) (
c4114cfd3)fix: improve error handling in SSE parsing, CLI args, and URL parsing (#1804) (
1e6fbfe6e)fix(shell): fix -executable false positive in is_allowlisted flag detection (#1792) (
843898997)fix: remove 6 type: ignore comments — batch 5 (#1783) (
b851e3cb9)fix(tests): gracefully skip tests when API quota exhausted mid-run (#1778) (
c7cf7fcac)fix: remove 11 type: ignore comments — batch 4 (#1777) (
43b7af0e8)fix: remove 18 type: ignore comments — batch 3 (#1775) (
6ee5aefd6)fix: remove 19 type: ignore comments with proper type fixes (#1774) (
b31827057)fix(context): include dotfiles in rglob fallback listing (#1770) (
59161e813)fix: improve type safety — remove 4 type: ignore comments (#1769) (
38ff334af)fix(config): preserve TOML formatting and comments on chat config save (#1765) (
cd671c5bd)fix(tests): use fully-qualified model names to prevent test pollution (#1763) (
acfd5258b)fix(server): add cookie-based auth for SSE connections (#1760) (
447447b3f)fix(tests): properly isolate server v2 test from user config (#1757) (
bc432757c)fix(acp,llm): fail-closed permission checks + surface token refresh errors (#1750) (
94cb4c08d)fix(server): make shell cwd thread-safe for concurrent sessions (#1749) (
f09d95552)fix(tests): eliminate 250+ ‘init() called twice’ warning spam (#1748) (
bf6f30858)fix(subagent): import Status type, remove dead threads list (#1746) (
7c34383bf)fix(eval): make topo-sort checks dynamic — read graph from deps.json (#1728) (
165b66cb7)fix(tests): fix flaky test_api_conversation_generate mock setup (#1739) (
4fc9b174e)fix(skills): address remaining quality issues in dependency declarations (#1730) (
f0b32d668)fix(shell): decode bytes in final read of background job output (#1726) (
01fc09859)fix(models): add supports_parallel_tool_calls to openrouter/anthropic/claude-sonnet-4-6 (#1725) (
050700af5)fix(browser): auto-select search backends with fallback (#1721) (
ded1394e9)fix: stats timestamp fallback + add model/token/cost breakdown (#1718) (
b660a7f0e)fix(vision): add webp to allowed image file extensions (#1717) (
7450a6adc)fix(tests): use subprocess isolation for flaky ACP stdout test (#1715) (
fa3032502)fix(eval): improve error robustness in eval runner (#1714) (
5c39e64f2)fix(eval-ci): detect fast-fail pattern as API quota exhaustion (#1711) (
84c6f709f)fix(chat): don’t exit on complete when chained prompts remain (#1707) (
bd1b07579)fix: keep tool descriptions within OpenAI’s 1024-char limit (
c2280ba8c)fix(shell): use findall+last for return code parsing (Greptile follow-up from #1672) (#1701) (
8dc0d6715)fix(shell): preserve output when last line lacks trailing newline (#1672) (
84dcbba2c)fix(tokens): graceful fallback when tiktoken unavailable or offline (#1675) (
d1cb27654)fix(tools): use itertext() in _iter_from_xml to prevent content truncation (#1694) (
b7f8d1a7c)fix: assorted bug fixes — wrong tool name, missing timeout, dead code, race guard (#1677) (
5cd1332d7)fix(eval): prevent user workspace config from contaminating eval agent prompts (#1693) (
9954695d8)fix(precommit): run checks on modified files only in TURN_POST hook (#1667) (
0870f4bb9)fix(tests): replace pytest-mock mocker fixture with unittest.mock (#1673) (
b1e09f0ea)fix(codeblock): handle
</thinking>end tag (gemini uses it instead of</think>) (#1691) (9ee3c6829)fix(prompts): pass workspace to prompt_systeminfo for correct Working Directory (
73c3d28b7)fix(llm): prevent double-wrapped
<think>tags when both reasoning mechanisms fire (#1689) (04f1a6f34)fix(llm): handle reasoning content in openai-subscription stream (
556bde01d)fix(models): update Claude 4.6 context window to 1M (GA) (#1674) (
2bfece86d)fix: replace bare except clauses and unclosed file handle (#1670) (
9400dff9f)fix(types): resolve mypy errors in chats tool and gh tests (#1669) (
e17eb06dc)fix(tests): mark test_python and test_python_error as slow (#1671) (
9b1d7a3fc)fix(server): replace assertions with explicit error checks in production code (#1681) (
e752f2aef)fix(tools): graceful degradation for unavailable tools in server context (#1680) (
d4da97051)fix(eval): close file handle in SWEBenchInfo.save_to_log_dir (#1668) (
7cad79dff)fix(server): close TOCTOU race on acp_runtime in step request handler (#1666) (
73f84f263)fix(server): guard acp_runtime None in _acp_step finally block (#1664) (
953ef0055)fix(eval): rename duplicate write-tests to avoid name collision (#1663) (
cce683d25)fix(tools): pass tool_format to all .to_output() calls in examples (#1650) (
fafbb36b4)fix(tools): prevent content from leaking into unrelated ToolUse parameters (#1646) (
94ce6e032)fix(eval/dspy): handle empty messages gracefully in tool_usage_metric (#1642) (
3cf20a913)fix(release): poetry via pipx, upload retry, Docker tag policy (#1641) (
4a8c0b350)fix(release): don’t block dev releases on flaky API test failures (#1639) (
9626e8be5)fix(models): proper metadata for openai-subscription models (#1637) (
9bdcac233)fix(eval/dspy): handle API quota exhaustion gracefully in optimize workflow (#1628) (
910503855)fix(docs): extend RST title underlines for wide emoji characters (#1631) (
2ea96458f)fix(shell): do not process backslash escapes inside single quotes (#1624) (
7004680f6)fix(util): fix parameter shadowing and add empty-list guards (#1605) (
c3c8cdaaf)fix(lessons): deduplicate same-named lessons across directories (#1594) (
aff8fd515)fix(tauri): add webui npm install to tauri-dev target (
297a7af41)fix(tauri): use real PyInstaller sidecar in release CI instead of placeholder (
99ae4dde3)fix(tauri): pre-commit paths relative to tauri/, gptme.toml no agent, tauri-dev sidecar placeholder (
69a6d116f)fix(tauri): ensure venv exists before uv pip install, add deb to Linux CI build (
27d9ab449)fix(test): increase timeout for test_create_template_mode_e2e to 120s (
092b8c3ef)fix(tauri): platform-specific CORS, capability path, pre-commit config, gptme.toml (
4f5ed21ad)fix(tauri): install pyinstaller before running it in build-sidecar.sh (
cbc3ef124)fix(tauri): address remaining Greptile review feedback (
3370adbab)fix(ci): use platform-specific bundle args for build job (
e7c285956)fix(tauri-ci): skip DMG bundling in build job to fix macOS CI (
5b2492934)fix(tauri): address Greptile review feedback (
2f247a906)fix(ci): add placeholder icons to build/release jobs before icon generation (
95f78632e)fix(tauri): correct frontendDist path for monorepo layout (
0695c4398)fix: use diff syntax highlighting for save/append previews (#1585) (
92584a49e)fix: perplexity search now reads keys from config.local.toml (#1584) (
0f5bef4ea)fix(lessons): inject keyword count instead of text to prevent self-referential corpus matches (#1581) (
97a90309d)fix(gh): add multi-line comment guidance to prevent literal \n in posts (#1572) (
0fe7e7fdb)fix(server): validate auto_confirm type in v2 step request (#1571) (
6b1faf80c)fix(server): validate use_acp as boolean in v2 step request (#1569) (
13f0e4369)fix(release): fix oversized changelog from unreachable dev tags, add truncation guard (#1567) (
7b84f7431)fix: improve error handling and resource cleanup across tools (#1565) (
6a5ae8813)fix(codeblock): prevent premature block extraction in streaming mode (#1564) (
136bc14d3)fix(tools): pass instructions to ToolSpec in vision and subagent tools (#1562) (
951015418)fix(context): use plain git status instead of -vv (#1561) (
b8cadbf4d)fix(chats): escape regex in search highlight and fix repr’d output (#1557) (
0b4c9a188)fix(release): skip branch push for pre-releases to avoid branch protection (#1548) (
3fe1da788)fix(deps): bump pypdf minimum to >=6.7.3 for security fixes (
9dca32aa3)fix(test): configure pytest-asyncio and add as explicit dependency (#1538) (
3652f064c)fix(docker): optimize image size and add CI size tracking (#1524) (
c54fd7f7e)fix(hooks): resolve prompt file paths relative to agent’s CWD (#1531) (
018406eb7)fix(tests): make test_shell_file resilient to output ordering (#1522) (
bfa8f4ea2)fix(webui): resolve high-severity npm vulnerabilities (#1526) (
59090b10f)fix: write RESUME.md to logdir instead of workspace (#1514) (
58b9b2017)fix: use quad backticks for tool output codeblocks (#1507) (
4e90fe895)fix(hooks): filter lockfiles and add token budget to active context (#1499) (
bf9472161)fix: remove stale xfail, register xdist_group marker, close socket in tts (#1497) (
9f39db7f3)fix: cleanup test assertions, typo, and memory-efficient msg counting (#1496) (
f8ef5b7e2)fix(subagent): subprocess mode fixes for profiles (#1495) (
ce5a7da23)fix(prompt): strip System outputs from tool examples to prevent hallucination (#1490) (
e2c9705ce)fix(screenshot): add availability check for screenshot tools (#1488) (
76daa97de)fix(server): always chdir to workspace at step start (#1400) (
d2cef9427)fix(util): correct pytest detection and codeblock XML roundtrip (#1485) (
94de63494)fix(server): fix unreachable model fallback and consistent msg2dict serialization (#1484) (
a7143f7ac)fix(context): fix missing separator and inverted error handling in path parsing (#1474) (
17449863e)fix(logmanager): use .exists() for conversation.jsonl path check (#1478) (
f3ff8e938)fix(browser): add missing return path in read_url (#1482) (
02abaa7e9)fix(computer): implement proper macOS left_click_drag using cliclick dd/du (#1479) (
a7cbe5960)fix(tools): add path resolution and traversal protection to append and morph (#1475) (
86e931bf9)fix(reduce): handle all-pinned messages in reduce_log (#1480) (
a4cc63ea0)fix(cli): improve error messages and log levels for better UX (#1476) (
7fd5e075e)fix(subagent): use correct Status type in notify_completion and reap killed processes (#1477) (
a74e55f8d)fix(models): add recommended defaults for deepseek, groq, openai-subscription (#1473) (
4c40e1e1a)fix(profiles): correct tools=[] display and broaden type validation (#1483) (
2fdb1ea44)fix(tmux): remove check=True to let error messages display in kill_session (#1481) (
41f182a26)fix(tools): skip tool call parsing inside markdown codeblocks (#1472) (
e53ea3d01)fix(browser): fix Google search consent banner bypass in lynx (#1380) (
0ef877010)fix(profiles): reject string tools field with clear error (#1471) (
d46255ff7)fix(agent): set default git identity for workspace creation (#1470) (
2713d6b01)fix(test): set git identity in agent create E2E test for CI (
0fb6494f7)fix: server cleanup bug, modernize CI, update deps (#10) (
3b7393442)fix(python): don’t set NO_COLOR globally, it breaks Rich colors (
53fdded53)fix(subagent): hard-enforce profile tool restrictions at execution level (#1460) (
ded8a8136)fix: use specific exception handlers and lazy logging (#1459) (
70aedae4e)fix(context): exclude paths inside XML tags from context extraction (#1445) (
a72599034)fix(acp): prevent GC of fire-and-forget asyncio tasks + sort all (#1456) (
0d60b1266)fix(llm): prevent empty text content that breaks Z.AI/GLM via OpenRouter (#1444) (
aec3372e8)fix(codeblock): fix streaming parser nesting for bare backticks (#1429) (
621303cb8)fix(acp): remove slash prefix from advertised command names (#1438) (
c9d923818)fix: add timezone awareness to all datetime calls (#1433) (
051ed1df6)fix: remove unused dep, fix RAG post-process bug, clean type ignores (#1428) (
157c5117b)fix(acp): defer session-open notifications to after NewSessionResponse (#1420) (
459bd0107)fix(acp): return None from load_session instead of raising NotImplementedError (#1419) (
d77df7720)fix(acp): resend AvailableCommandsUpdate on first prompt() to fix Zed race condition (#1412) (
df3021089)fix(auth): don’t truncate OAuth URL in fallback message (#1414) (
4ed5152ce)fix(agent): replace template strings in gptme-agent create (#1413) (
cf592b0ff)fix(logmanager,tmux): prevent crashes on undo overflow and send-keys missing args (#1390) (
3795f5483)fix(acp): include gptme version in ACP agent startup log (#1410) (
65f4a8511)fix(acp): replace assert guards with explicit runtime checks (#1399) (
031cade81)fix(todo): allow setting paused state on todo items (#1405) (
9138a12d1)fix(models): update Anthropic model metadata per official docs (#1409) (
1cebda747)fix: duplicate name entry, explicit encoding, simplified exception (#1401) (
564c6edd3)fix(acp): guard session_update calls against null connection in prompt() (#1406) (
fac950499)fix(context): use proper type annotations in config dataclasses (#1402) (
8d1079499)fix(acp): handle slash commands with actual execution (closes #1393) (#1394) (
5ab0b4ff3)fix(server): prevent IndexError on bare slash command and use immutable Log API (#1388) (
5afb19b0b)fix(logmanager): prevent data loss when writing on compacted view branch (#1389) (
251ef49dd)fix: remove debug print statements from util and anthropic modules (#1386) (
77988a8c7)fix: resolve morph duplication, off-by-one count, and dead code (#1384) (
7c7e379e8)fix(browser): implement lynx cookie support, fix model metadata (#1377) (
dc196c0a0)fix: add requires-python to project metadata (#1376) (
8a7929973)fix: code quality follow-ups (lambda assignments, assert validation) (#1371) (
d5de79ac4)fix(webui): resolve npm security vulnerabilities (#1373) (
088f269d1)fix(tests): use tmp_path fixture to avoid parallel test interference (#1372) (
f78133cd7)fix(acp): add session cleanup to prevent unbounded memory growth (#1368) (
ff2fcbdb2)fix: replace assert with proper validation in server and shell (#1366) (
7b9e2ae01)fix(logmanager): handle malformed JSON lines gracefully in JSONL reader (#1364) (
e4f3f8ce7)fix(llm): strip @provider suffix in non-streaming chat path (#1363) (
b98a76429)fix(acp): use per-session model from project gptme.toml (#1360) (
b33879b42)fix: guard Unix-only imports for Windows compatibility (#1357) (
e6e77849f)fix(logmanager): check only last assistant message to prevent pre-commit loops (#1358) (
41634ba96)fix(subagent): capture workspace before spawning planner threads (#1356) (
9dd547e24)fix(acp): surface init error proactively in new_session via session/update (#1355) (
e9ccc1061)fix(shell): don’t use start_new_session in TTY path (#1352) (
4771cf0a4)fix(llm): add missing Claude 4.x model aliases (#1347) (
2dabee163)fix(llm): mark claude-3-opus-latest as deprecated (#1346) (
e7b50e4f4)fix: clean up type ignores and fix browser element selector (#1344) (
e87201a60)fix(shell): restore interactive sudo support in interactive mode (#1288) (
e79ff6e9f)fix(llm): correct GPT-4.1 knowledge cutoff to June 2024 (#1342) (
b6dd2b486)fix(chat): improve thread safety and None guard in auto-naming (#1341) (
5caa7b2d6)fix(acp): surface init errors as agent messages instead of killing connection (#1319) (
6be28f078)fix(llm): add missing -latest model aliases for Anthropic (#1337) (
d225c5987)fix(llm): add GPT-5.3-Codex and Codex-Spark to subscription models (#1336) (
c0303c070)fix(llm): add missing Gemini model entries (3-pro-preview, 2.0-flash) (#1334) (
dc3fc5783)fix(llm): fix tools API detection for custom providers (#1331) (
7913cf03f)fix(logmanager): check all messages for modifications, not just first 3 (#1329) (
8056c261a)fix(llm): update model metadata (xAI, Gemini 3, Anthropic) (#1328) (
2d0f510a6)fix(tests): restore xfail on test_shell_file (flaky in CI) (#1327) (
ed1f89282)fix(message): drop timestamp from Message equality, add consistent hash (#1326) (
cca9c02df)fix(tests): remove stale xfail from test_shell_file (#1325) (
5bad61022)fix(tests): register flaky and integration pytest markers (
bf6fc46a4)fix(tests): isolate server v2 test from user config (#1323) (
29d012f9c)fix(types): add specific error codes to all bare type: ignore comments (#1320) (
734a5ca4b)fix(types): add mypy overrides for optional deps (dspy, playwright) (#1322) (
d97cb22d7)fix(llm): correct gemini-2.5-pro max_output from 8192 to 65536 (#1321) (
9813091a6)fix(acp): resolve model from config instead of hardcoding Anthropic default (#1317) (
e9cd4842f)fix(tmux): handle list-sessions failure gracefully instead of asserting (#1318) (
0cfb732f0)fix(tools): add specific error codes to bare type-ignore and noqa comments (#1312) (
9a101ba8c)fix(dirs): move readline history from config dir to data dir (#1310) (
22d3f65e4)fix(agent): create clean git history for new workspaces (#1308) (
edfe4b494)fix(python): disable colors at source instead of only stripping ANSI (#1309) (
779b0ad9e)fix(acp): re-set default model for cross-task ContextVar isolation (#1300) (
06aac4df9)fix(hooks): remove unnecessary type: ignore and fix cast import style (#1302) (
f034baddb)fix(webui): rename env vars to use VITE_GPTME_ prefix (#1307) (
1bf38e4bb)fix(shell): use current model for tokenizer in output truncation (#1305) (
9d0074475)fix(logmanager): persist main branch when writing from non-main branch (#1299) (
6262316b6)fix(doctor): handle OAuth-based providers in diagnostics (#1297) (
2c7e32593)fix(tests): skip tests when optional deps/API keys unavailable (#1298) (
1a2bfb127)fix(tree): remove tree command dependency, fall back to git ls-files (#1284) (
d6670dcf8)fix(tests): use correct field name option_id in ACP test helper (#1296) (
1db5095da)fix(acp): propagate ContextVars to executor thread in prompt handler (#1293) (
e7c242518)fix(acp): handle Pydantic TextContentBlock in content conversion (#1291) (
c30f86e4c)fix(doctor): add missing provider docs for gemini, azure (#1286) (
ef6e8306b)fix(acp): use proper write pipe protocol to prevent _drain_helper AttributeError (#1276) (
2f390bdc5)fix(config): use logger instead of console for config messages (#1281) (
aa681fb3c)fix(tests): skip server API tests when flask is not installed (#1274) (
629e25918)fix(python): detect and use user’s venv for IPython tool (#1279) (
9bcc85338)fix(types): resolve mypy errors in OpenAI and ACP modules (#1277) (
477530825)fix(acp): remove eager cli.main import from gptme/init.py to prevent stdout pollution (#1273) (
3108adfb2)fix(eval): handle @ in OpenRouter model names when parsing tool format (#1271) (
6046b5380)fix(acp): redirect Rich console to stderr to prevent JSON-RPC pollution (#1269) (
e000defbb)fix(shell): close leaked pipes via SESSION_END hook (#1257) (
d1e77bb32)fix(llm): properly round-trip tool calls in OpenAI subscription provider (
412c1f4b8)fix(subagent): update subprocess mode for new –context CLI flag (#1263) (
c5dd33129)fix(agent): fix service management and add proper tests (#1261) (
911ef35fe)fix(models): handle @ suffix in OpenRouter model lookup for context length (#1256) (
617bb17e6)fix(webui): chain consecutive user messages like assistant/system chains (#1255) (
4813120c4)fix(webui): fix chat settings save, sidebar icon, and model search (#1253) (
5ce7850c4)fix(webui): use message queue array to prevent rapid-send message loss (#1254) (
3b27e7a6b)fix(webui): use .get() for agent avatar observable check (#1251) (
48e2523ff)fix(webui): skip hidden messages in chain type calculation (#1250) (
c0330febf)fix(webui): restore Developer Options that were lost in #1249 (
27ff31cbb)fix(webui): clean up server UI — combine ConnectionButton into ServerSelector (#1249) (
0b71ef7fc)fix(webui): make settings reactive in Legend State For loop (
2ec2e0fb4)fix(tests): expect cursorrules hint at DEBUG level (#1247) (
73b089053)fix: use configured username instead of ‘User’ for user messages (
b18ffb4dc)fix(lessons): demote noisy startup messages to debug level (
e9e9e00d2)fix(config): condense user config log to single line (
0b4856feb)fix(config): deduplicate and improve user config logging (
f6be0a891)fix(eval): prevent recursive SIGTERM handler loop (#1240) (
9c6224b0c)fix(prompts): attach workspace files to Message instead of reading inline (#1231) (
0707f7364)fix: detect vision support from OpenRouter modality correctly (#1237) (
152504f16)fix: fix
aas acceptable answer for auto in confirmation (#1233) (cf189c929)fix(docs): add PIL.Image.Image to nitpick ignore list (
9ac73a081)fix(docs): use string literal for PIL.Image.Image type annotation to fix Sphinx warning (
413cc7ce2)fix(llm): handle httpx transport errors during streaming (#1226) (
f564bb707)fix(llm): handle OpenRouter ‘Overloaded’ errors for Anthropic models (#1223) (
a57f5612a)fix(autocompact): reduce log spam from per-message logging (#1216) (
753b756fc)fix(save): remove duplicate overwrite confirmation (#1204) (
2c055be8a)fix(lessons): exclude worktree and .git directories from indexing (#1213) (
af9acc27a)fix(patch): handle RST heading underlines (===================) in content (#1203) (
b201c91ce)fix(eval): add thread-safe locking for environment variable mutation (#1044) (
a14391479)fix(llm): handle list content in OpenRouter reasoning extraction (#1188) (
5a2eddbf4)fix: added missing import (
7582ccf9a)fix(server): include hide property in SSE message_added events (#1190) (
2d7a03b17)fix(llm): add reasoning_content for OpenRouter reasoning models with tool_calls (#1187) (
fd1db2d28)fix(llm): handle OpenRouter subprovider suffix in model lookup (#1182) (
5be25bc58)fix: support [lessons] section in user config (#1184) (
5f7b261ba)fix(browser): disable broken google/duckduckgo search, default to perplexity (
e66ac15f1)fix(prompts): restore truncation line accidentally deleted in suggestion commit (
7891580b5)fix(chat): restructure type checks for mypy narrowing (#1177) (
391953c99)fix(chat): allow explicit model param to bypass default_model assertion (#1176) (
dbb7420f7)fix(tests): mark PDF tests as slow to exclude from no-API-key CI (
aca29a1e3)fix: added ‘auto’ to listed choices in ask_execute (
8126698c1)fix(shell): correct markdown heading level for Background Jobs section (#1168) (
afc27403b)fix(config): use TOOL_ALLOWLIST instead of TOOLS for consistency (#1165) (
1abe61db9)fix(tests): fix lesson tests failing due to mock config issues (#1150) (
718a5cbe6)fix: add proper TypeScript types and lint fixes (
a9e3485e2)fix: remove duplicate Goodbye message on Ctrl+D exit (#1147) (
a34dbb7c9)fix: fix examples for tmux tool, add tmux tool examples for working with subagents (#1145) (
268f350f9)fix(auth): re-check hash at mount time for SPA navigation (#113) (
1e25eb42e)fix(server): propagate default model to request contexts via before_request hook (#1139) (
25492f6b6)fix: add fallback model when no default is available (
b50a2709f)fix: don’t disable input while waiting for session + persist drafts (#107) (
dab3dbb9b)fix: move step() from createConversation to useConversation to fix streaming race (#106) (
c21b7bc77)fix(llm): add supports_reasoning flag to Gemini 2.x models (#1136) (
a738a2e92)fix(setup): recognize Gemini API keys in setup wizard (#1137) (
d10e7e883)fix: handle Session ID 404 errors in tool confirmation retry (#105) (
53fe8a44f)fix(server): make session_id optional for tool confirmation (#1133) (
7f0fba2e4)fix(logmanager): robust lock handling with PID check for server mode (#1130) (
c5ee4137f)fix(server): improve skip message to prevent LLM re-suggestion (#1132) (
7e9e5538c)fix(chat): return to prompt when user declines execution (#1127) (
67f16e1e3)fix(cli): validate non-interactive mode requires prompt (#1125) (
dd0e23464)fix(llm): add safe parsing for environment variables (#1029) (
11aa4b7e0)fix(server): add timeouts to subprocess.run calls in tasks_api (#1087) (
d1ade7755)fix(auto-naming): validate LLM responses to reject error-like titles (#1117) (
270d6bec2)fix(logging): suppress OpenTelemetry error spam on connection failures (#1113) (
f111d27a1)fix(models): inherit base model properties for date-suffixed variants (#1114) (
b59555ab4)fix(lessons): disable description-based word matching (#1106) (
f9ec1a139)fix(chat): add input validation and queue size limits (#1077) (
214643b51)fix(server): sanitize error messages returned to clients (#1090) (
5c0903b4b)fix(server): replace assert with proper validation checks (#1092) (
bcd5f3850)fix(server): validate role against allowed values (#1085) (
ed03f611a)fix(message): improve TOML serialization and round-trip completeness (#1083) (
a8b66bf8d)fix(server): remove stale init_tools FIXME comments (#1091) (
c4f97dd60)fix(shell): check denylist for background jobs (#1086) (
dbb3b6396)fix(server): add @require_auth to tasks and workspace API endpoints (#1084) (
0ea93f1d3)fix(anthropic): prevent empty message content error (#1081) (
7d539dfbf)fix(prompts): truncate context command stderr to prevent info leakage (#1079) (
9827a611a)fix(message): prevent call_id=None from serializing as literal ‘None’ string (#1078) (
0bbc82102)fix(server): replace assert with runtime check for path traversal defense (#1072) (
473806dde)fix(message): preserve whitespace in TOML serialization (#1064) (
d78644d89)fix(llm): replace assert with runtime checks for production safety (#1071) (
02bfaf17a)fix(prompts): add path traversal protection for glob patterns (#1065) (
f5c7ff0ed)fix(llm): check raw file size instead of base64 encoded size (#1066) (
99d2834e3)fix(llm): prevent duplicate output on generator retry (#1063) (
c8d8e6b63)fix(llm): log exceptions instead of silently swallowing them (#1068) (
0ec410170)fix(llm): prevent division by zero in token rate calculation (#1062) (
6058d8c87)fix(lessons): deduplicate lessons by resolved path in matcher (#1060) (
faf9ea0ed)fix(llm): replace bare assert with proper error for missing system message (#1058) (
196e106bf)fix(llm): replace bare assert with proper error for empty LLM responses (#1057) (
c00acd461)fix(autocompact): include exception type when resume error message is empty (#1056) (
dab83d969)fix(eval): prevent SIGTERM self-kill from overwriting success result (#1055) (
eb4ce7a72)fix(eval): add grace period before SIGKILL to prevent IPC corruption (#1042) (
329997b69)fix(tools): add path traversal protection to save and patch tools (#1045) (
c20217098)fix(message): add XML escaping to prevent injection in to_xml() (#1048) (
945050fc0)fix(config): use atomic write to prevent corruption in daemon thread (#1050) (
8b1720ea3)fix(logmanager): ensure lock is released if atexit registration fails (#1049) (
80edeb6a8)fix(eval): add automatic cleanup for temp directories (#1051) (
3a5bf98b9)fix(logmanager): store TemporaryDirectory instance to prevent resource leak (#1054) (
9913c0c93)fix(eval): move init_tools outside inner function to avoid repeated calls (#1053) (
061935cc5)fix(eval): use UUID for deterministic unique IDs (#1052) (
c2ee02da0)fix(eval): prevent race condition in result retrieval (#1043) (
0ef426743)fix(eval): add path traversal protection to FileStore.upload() (#1041) (
7de80c0ec)fix(eval): use explicit shell invocation instead of shell=True (#1040) (
d2d28a5d4)fix(util): use ContextVar for thread-safe interrupt state (#1046) (
395036479)fix(llm): explicitly close stream generator in finally block (#1047) (
2ee2fd6e1)fix(browser): close browser contexts to prevent resource leaks (#1038) (
1a3c820c6)fix(tools): add defensive checks for edge cases (#1027) (
ae574f386)fix(security): validate screenshot path stays within OUTPUT_DIR (#1023) (
7576240b7)fix(security): block file:// protocol in lynx browser backend (#1022) (
8f24d700c)fix(eval): pass API keys to Docker container (#1019) (
d53293dde)fix(security): prevent command injection vulnerabilities (#1018) (
da7dc3c53)fix(restart): filter out positional arguments (prompts) on restart (#1012) (
707a23370)fix: propagate metadata return value in Anthropic retry decorator (#1013) (
a4a9e0f1c)fix(tests): mock _create_subagent_thread to prevent API calls (
a410846c1)fix(llm): cut out @provider suffix spec in model send to API to fix provider spec support (
b8e614d8d)fix(tmux): add retry logic for session creation race conditions (
fdbe38f11)fix(autocompact): use compacted_log length for Phase 3 distance calculation (
bd35cdad8)fix(shell): prevent orphaned bg jobs and support bg on non-first line (#994) (
f32186a63)fix: throw lock on tmux tool new_session to prevent race (#991) (
106781775)fix(eval): wire DockerGPTMeEnv to agent for –docker flag (#989) (
99c467650)fix(shell): truncate long commands in output to reduce context waste (#983) (
c4ae9e535)fix: improve /tokens command to use CostTracker (#976) (
4b4599588)fix: fixed autonaming in some cases (like for unknown models) (
75709b120)fix: enable dynamic model switching via /model command (#967) (
ec61727e4)fix: add missing sound files to package distribution (#969) (
2f36eedeb)fix(setup): check for wl-copy instead of wl-clipboard command (#970) (
ab0dd1e02)fix(shell): ignore ProcessLookupError during close (
d765f4c03)fix(setup): use PROVIDERS instead of get_args(Provider) (#958) (
1eb7d106b)fix(models): support local providers in get_summary_model (#950) (
f74743774)fix(lessons): handle empty globs/triggers in Cursor rules (#952) (
9e7cc4305)fix(api): await operations in createConversationWithPlaceholder to propagate errors (#100) (
e85787dd8)fix: add crypto.randomUUID polyfill and SPA routing support (#97) (
a594aa0f7)fix: implement onConnected callback and improve message streaming (
259d804f5)fix: resolve session ID mismatch causing interrupt failures on initial prompts (
71c554738)fix: improve layout and scrolling in settings panels (
54bd992ad)fix: support auto-generating agent path from name (#88) (
4b343c33f)fix: fixed test (
eff175ee7)fix: use authHeader for /models requests (
1e871ed5c)fix: improve styling for inline tool confirmation and execution components (denser) (
5ea375c05)fix: embed auto-approve in button dropdown for a denser component (
b4940c44b)fix: use simple placeholder text instead of rotating examples (
1fe9fa926)fix: only show recommended models that are available (
83fa597d3)fix: improved model selector with recommended models, fix model search input focus, etc. (
01ce9d0b9)fix: ensure pending tool state is always set for tool execution (
2e8aa4f2c)fix: added logo to repo (
e91e29d90)fix: show interrupt button during tool execution (
35116c0e9)fix: select agents by their paths (
568384bb9)fix: simplify create agent dialog with better defaults (
0fe8f3271)fix: improved success detection for messages, refer to equivalent code in gptme cli (
e121314c5)fix: extend the success pattern for messages (
92b7eef7b)fix: fixed warning from missing forwardRef (
72fa6c4c4)fix: added account/dashboard link in top menu when in ‘embedded mode’ (set by vite env var), removed theme toggle quick-button (now in settings) (
142017dee)fix: responsive sidebar design issues on mobile and desktop (#80) (
0179f94f4)fix: fix respecting baseUrl in workspaceApi (
ed7c061ee)fix: fixes for integration with gptme-landing (
ab9363024)fix: fixed links and scrolling for tasks (
1996d5eac)fix: resolve TypeScript warnings in audio utils by properly typing webkit AudioContext (#74) (
abe5b9394)fix: properly manage gptme-server lifecycle and fix dev mode CORS (
787104e90)fix: remove logspam (
0b1b02949)fix: reuse ChatInput component in WelcomeView, improve styling, fix model selector when creating new conversations (#67) (
acf874131)fix: collapse thinking blocks by default (
6cd2dff1a)fix: support
<think>tags in smd.js streaming output (f78fa3da4)fix: minor fixes (
29ef54ec9)fix: moved the conversation delete button into conversation settings (#60) (
39ad54ebe)fix: use encodeURIComponent for path (
aa9489fb8)fix: demo conversations now show without API connection (#57) (
5b86355f7)fix: use testid instead of placeholder for e2e test element lookup (
c9f52cc25)fix: fix re-rendering issues, implement connection retry and connection status (#41) (
0ee36b766)fix: change default port to 5701, adapt to new 5700 gptme-server default (#38) (
cc85450fb)fix: fixes messed up rebase (
2cdf6261a)fix: add StreamingMessage extended Message (
84393c58c)fix: chatmessage styling not updating on new messages (#31) (
0208d6ae8)fix: don’t rerender whole ConversationContent on isLoading change (
e73f54f0d)fix: chatinput button not updating after generation complete (
f1d3a1702)fix: fix chat input being stuck in disabled (#29) (
5b9845187)fix: dont disable input box during generation (much easier to reply! much better UX!) (
e51020edd)fix: add important comment and refactor use of queryKey (
e06389a17)fix: implement use of generation_started/onMessageStart (
7a2ccc2f4)fix: less log spam, clarified function names, check for duplicates before adding (
d9d35144b)fix: incorrect type ToolPendingEvent (
8fdb76f89)fix: improved typing (
d319118da)fix: minor fix (
11fd94201)fix: more fixes (
c76e9bdb3)fix: more fixes (
3db2a9091)fix: switch default branch to master (
60cff9f9d)fix: make npm run format less spammy (
37d1d0ef9)fix: include Authorization header in all requests if user token available (
2292625b3)fix: fixed
<think>tags support (de6e22a85)fix: open external links in new tabs (
0e300aef4)fix: only show system message toggle when initial system messages exist (
e59314e01)fix: improve markdown parsing and add comprehensive tests (
abc57033c)fix: style saves as success (
4f251bb46)fix: improved styling, denser chat (
2e026b09a)fix: improved parsing of markdown fenced codeblocks’ langtag args (
8e7359de3)fix: show codeblock langtag args, improve demo conversation (
1adf2dcc1)fix: added special emoji for writing tools (save/append/patch) (
b478e8097)fix: improved demo conversation (
1095bdf04)fix: fixed respecting base url for navigation (
a1d98eae6)fix: fixed emoji for certain files (
339fb574f)fix: added emojis to
<details>cards like 💭 thinking, 📄 documents, 🛠️ tooluse, and 📤 output (71ab9ead0)fix: fix styling for links in messages (
d7f216f05)fix: improved styling (
f16c11937)fix: add spacing at end of conversation to give last message some breathing room (
381459d5b)fix: improved logging (
87045b8fa)fix: handle nested codeblocks (
5384c79f7)fix: style error/success system messages (
9c730841f)fix: improved styling and layout for chat messages (
0ca11f5d3)fix: fixed aspect ratio for logo (
c86204dd1)fix: re-added message id to fix streaming issue (
7a8baedc3)fix: removed unused interrupted message property (
d90ebcd21)fix: work on interrupting requests, fixed styling (
445839b3d)fix: improved styling for lists (
28910f602)fix: set
stream: truefor /generate call (af229edbe)fix: cleanup and refactor (
acf89b6ac)fix: lots of fixes (
931c12482)
🔨 Misc (514)#
Click to expand
chore: bump version to 0.32.0 (
a084f7ce6)docs(computer): add ‘Validate your setup’ section to how-to (#216) (#3172) (
3684aedf3)test(subagent): deterministic roundtrip tests for thread-mode completion (#554) (#3145) (
f71248631)docs(subagent): correct false threading-context premise behind #554 tool-isolation (#3142) (
5ffac83d6)eval(subagent): workdir-subprocess eval + broader wait_any cancel check (#554) (#3141) (
8986e9f38)docs(mcp): add Chrome DevTools MCP server example (#3138) (
309a00da6)test(computer): add integration tests for Doom and Factorio milestone pipelines (#216) (#3139) (
932109b7e)docs(subagent): document subagent_pipeline and subagent_wait_any; add wait_any eval (#554) (#3135) (
581d46222)test(computer): add integration tests for hover_element, snapshot_page, get_current_url, save/load_browser_state (#216) (#3132) (
5f86c10a4)eval(subagent): trajectory evals for output_schema and subagent_pipeline (#554) (#3124) (
872acd852)test(subagent): add unit tests for subagent_pipeline() staged fan-out (#554) (#3122) (
2f37ef612)test(subagent): add regression tests for thread-mode tool isolation (#554) (#3121) (
a05f0eb5b)docs(subagent): document parallel/batch/output_schema/token-budget; fix stale race note (#554) (#3107) (
1a1cb9bc6)test(tools): regression test for execute_msg defensive error tool_result (#554) (#3098) (
2a06c8d2f)docs(tools): document subagent isolation contract (#3073) (
71d604621)docs(howto): document observe_web/observe_desktop, AT-SPI2, and act_and_observe (#216) (#3070) (
edd8d6b0b)test(computer): native X11 integration tests for issue #216 (#3058) (
cdd7cea81)test(cli): cover external plugin dispatch (#3053) (
56e4ea64a)test(computer): end-to-end integration tests for the ‘Can it Tweet?’ pipeline (#216) (#3045) (
97f8654bb)docs(providers): add dedicated Groq section with setup and anti-pattern note (#3037) (
7999b0f90)test(server): cover audio transcription oversize guard + _guess_audio_format (#3006) (
248882da9)docs(howto): add computer-use guide (prerequisites, backend selection, recipes) (#2987) (
5a4643e72)test(subagent): regression tests for planner role→execution-mode forwarding (#2986) (
2433e47d5)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)test(tauri): scaffold E2E smoke test with tauri-driver (Slice 1, Linux) (
9a113de6a)test(webui): honor Playwright port setting (
a0d43d283)refactor(extension): move under webui/, replace side panel with React (#2755) (
20f65e999)perf(llm): batch terminal output per chunk, not per char (#2753) (
0a301eab6)docs(automation): expand automation guide with non-interactive mode, CI/CD, and scheduling (
8d0b246fa)docs(commands): add missing /account, /doctor, and /checkpoint commands (#2748) (
b2f1cb2af)docs(webui): add comment on structuredClone polyfill limitations (#2741) (
f1efd6d59)docs(server): add systemd unit template for pipx self-hosters (#2688) (
23083dcbf)docs(server): add nginx reverse proxy guide for self-hosters (#2684) (
1f31b6ab7)docs(server): point self-hosters to the same-origin bundled web UI (#2683) (
5cff5d7b8)refactor(webui): remove dead App.css and convert remaining raw CSS to Tailwind @apply (#2669) (
2cb20e406)refactor(hooks): use typed HookData dataclass for tool execution hooks (
c2b5859a6)docs: improve examples page with subsections and advanced workflows (#2616) (
e821361ab)docs(skills): note Agent Skills open standard conformance (#2611) (
f40857cb8)chore(deps): bump actions/checkout from 4 to 6 (#2553) (
f568fe921)test(cli): add real resume hint coverage (#2530) (
254d1edd4)docs(readme): surface gptme-codegraph as a named feature (
ab5ae11d8)docs: surface gptme-codegraph as named ecosystem project in README (#2503) (
c1861dbd7)docs(webui): explain Chrome 142+ Local Network Access for hosted UI → local server (#2483) (
7a01a7e0d)docs(webui): document CORS origin needed for hosted UI + local server (#2478) (
fea7042ce)docs(readme): add multi-agent and provider support rows to comparison table (#2477) (
a8ca40aae)test(server): relax tool confirmation log assertions (#2472) (
82a170b09)perf(lessons): cache lesson embeddings across turns in hybrid matcher (#2471) (
ebd927dba)perf(webui): route-based code-splitting via React.lazy (#2464) (
98c6341e2)test(webui): add setup wizard e2e coverage (#2456) (
4880cd7cf)docs(tools): add missing autocommit, precommit, and vent tool entries (#2455) (
ec72c0452)docs(tools): add 9 missing tools to tools.rst (#2443) (
9fc3c925b)test(config): document chat workspace default (
ae0c4aa68)docs: add FAQ section (
7e88d1719)test(eval): cover top-level future drain timeout fallback (#2419) (
eb703c39e)test(computer): add macOS mouse move, drag, and cursor position tests (
e852e6a6a)chore(cli): replace stale TODO with clarifying comment on deferred path expansion (#2416) (
7b88ea8ef)test(chat): cover deferred path expansion in chained prompts (#2414) (
c7cea8db8)docs(config): document default_config defaults for about, response_preference, and prompt.project (
5ffde4a4c)docs: make finetuning page honest about current support (#2407) (
c429555fb)refactor(openai): share Responses API helpers (#2405) (
f26e5383c)docs(providers): document OpenAI Responses API gate (
a2d717554)docs(cli): document JSONL automation mode (#2403) (
e1f3736ce)test(cli): relax queued prompt help assertions (#2401) (
15c93a4ca)docs(cli): surface queued follow-up prompts (#2400) (
04dbb7782)test(cli): add integration tests validating stdout is pure JSONL in JSON mode (#2394) (
0bf47a6c5)test(webui): cover server settings onboarding action (#2380) (
c1225fae4)docs(readme): fix truncated initial-commit SHA link (#2376) (
b54503f89)docs: describe account provider onboarding (#2360) (
eb6ebbade)docs(alternatives): make CMA runtime fee gap explicit ($0.08/hr vs $0) (#2357) (
e3caabd6c)test(cost-awareness): add 29 tests for cache-cold warning, cost thresholds, and injection (#2324) (
fe0f873d3)test(webui): cover PCM voice playback + useVoiceSession state machine (
dee689a49)docs(readme): drop brittle undated session counts (#2300) (
794505a43)test(webui): use ConnectionProbeResult type in ApiContext mocks (#2292) (
4c3b0f3f6)perf(llm): lazy-load provider imports to speed CLI startup ~1.7s (#2235) (
dba4da4bf)chore: remove journal entry (
066975839)docs(providers): document gpt-5.5 and gpt-5.5-pro (#2222) (
2ceaee271)perf(telemetry): lazy-load opentelemetry imports (saves ~1.4s startup) (#2218) (
24d286450)refactor(webui): share provider api key metadata (
4a76a42f5)perf(lessons): defer sentence_transformers import (~33s CLI startup savings) (#2208) (
19aad7692)perf: lazy-load heavy imports to reduce CLI startup time 3.3s→1.0s (#2207) (
ceddeb96f)docs: update gptme-webui links to merged location (#2199) (
823cf847d)docs: add guardrails framing for autonomous agents (#2197) (
9c0512df8)docs(cli): improve models test command docstring with examples (#2162) (
f77bf93f7)perf: lazy-compute version string to avoid subprocess calls at import time (#2145) (
41ec74653)refactor(server): remove redundant re imports in tasks_api (#2129) (
60bdd0cf5)docs(alternatives): add Claude Managed Agents to comparison tables (#2110) (
9abfa79b6)Unauthenticated static file server exposed on all interfaces can leak sensitive workspace files (#1847) (
00076bc9c)docs: add local model quickstart and Claude Managed Agents comparison (#2106) (
8a11f6ffd)docs: improve alternatives page for SEO and discoverability (#2085) (
da1be915b)refactor(eval): split behavioral.py monolith into per-scenario package (#2082) (
a0c44f3b4)test(server): add unit tests for external_sessions module (#2068) (
1b4ec412f)Revert “feat(cli): prototype live terminal status line (#2058)” (#2061) (
a6212255a)docs: clarify selective subagent context components (#2034) (
eac7e45be)test(eval): add end-to-end solution verification for behavioral evals (#2057) (
890f35ed0)test(eval): add comprehensive tests for behavioral eval checkers (#2056) (
5f8a177e3)docs(eval): document current SWE-Bench support (#2055) (
1a6510eec)docs(eval): fix leaderboard CLI command examples (#2054) (
313197daf)refactor: remove redundant local imports already available at module scope (#2048) (
a17fdcb4d)refactor: narrow broad except Exception catches to specific types (#2039) (
b17c92d02)docs(evals): update practical suite coverage to practical29, 86 tasks (#2033) (
8f66016dd)docs(evals): update practical suite coverage and add suite aliases (#2026) (
9ce6e11da)refactor(eval): auto-derive test sets from suite registry (#2017) (
4929fd13a)Revert “fix(server): hide reasoning blocks from visible output (#1999)” (#2001) (
1c1b2f79d)docs(eval): sync suite overview to practical19 and harden autodiscovery test (#1989) (
41b7f898d)docs: add webui/AGENTS.md with architecture notes and gotchas (#1979) (
403da33e1)docs: increase commands.rst TOC depth to 3 (
b2dd7c1ce)test(computer): assert screenshot resize dimensions (#1969) (
ee2a6ce4a)refactor: avoid redundant str.split() calls in content and choice utils (#1939) (
f723e7a5a)test(prompt): fix FIXME — enable simple filename highlighting test (#1936) (
f57ac8311)test(server): add 59 tests for agents and session API endpoints (#1918) (
4ca7f4c6c)perf(server): speed up conversation list/search with tail-only JSONL scan (#1916) (
2b5f88adb)test(server): add 84 tests for api_v2_common and session_models modules (#1899) (
84d6c8a61)test(models): add 86 tests for model resolution and listing modules (#1898) (
f05ec70fa)test(context): strengthen vacuous assertions per Greptile review (#1897) (
0f0ae2cfa)test(context): expand test coverage for task_analyzer and adaptive_compressor (#1896) (
3e6dbf0dd)test(hooks): add 80 tests for cache_awareness and server_confirm modules (#1895) (
c5990904e)test(server): add 59 tests for tasks API module (#1881) (
c9a5b02d9)test(tools): add 35 tests for browser thread module (#1880) (
61408d8ce)test(webui): add 19 tests for workspace file components (
f1a4a27de)test(server): add 61 tests for workspace API endpoints (#1874) (
d5b6bbba5)test(tools): add 172 tests for browser and mcp tools (#1870) (
160ebde1d)test(tools): add 100 tests for shell_background and restart tools (#1869) (
7176fd3f7)test(tools): add 63 tests for complete and screenshot tools (#1868) (
30b0026bf)test(tools): add 61 tests for precommit tool (#1867) (
46ce2fc2b)test(tools): add 42 tests for lessons tool (#1866) (
e84c25fec)test(mcp): mock registry lookup in CLI test (#1865) (
f0c7ffcd9)refactor(gh): trim tool sprawl, add CLI pass-through (#1863) (
dc19041af)test(tools): add 49 tests for shell_background.py (#1854) (
1f0ff8ba9)docs(plugins): document unified plugin registration system (#1858) (
6e7b7862e)test(tools): add 35 tests for autocommit hook and /commit command (#1856) (
26bac3ba9)test(tools): add 44 tests for morph tool editing infrastructure (#1855) (
07eec0669)test(util): add 73 tests for install, interrupt, and terminal utilities (#1850) (
9e31a1aec)test(dirs): add 40 tests for directory resolution and path utilities (#1845) (
26597bed5)test(util): add 88 tests for keyword_matching and file_storage (#1843) (
6087f97d4)test(tools): add 85 tests for base.py tool infrastructure (#1842) (
ad160739d)refactor(gh): extract common ref-parsing and repo-resolution helpers (#1840) (
d885cd141)test(util): add 105 unit tests for content, tool_format, and cost utilities (#1826) (
0f4362210)test(lessons): add 90 unit tests for lesson system core (#1824) (
ac3fa9602)test(gh): add 43 unit tests for gh tool functions (#1823) (
2c78f302c)test(auth): add 55 unit tests for LLM auth helpers (
47d78d0f2)refactor(eval): move leaderboard into eval module, add –leaderboard CLI flag (#1809) (
3be81fb77)refactor(eval): auto-discover eval suites instead of manual registration (#1808) (
2d668eb70)test(prompts): add unit tests for prompt templates, context_cmd, and helpers (
7117052f0)test(commands): add unit tests for command registry and dispatch system (#1802) (
a17f87849)test(executor): add unit tests for shared execution infrastructure (#1801) (
5a35c96c0)test(init): add unit tests for core initialization module (#1796) (
00a4cbbed)test(info): add unit tests for system/environment info module (#1795) (
fea4e5fda)test(hooks): add unit tests for hook registry module (#1794) (
0feeac38d)test(vision): add unit tests for view_image function (#1790) (
fc380bf1f)test(shell): add unit tests for shell_validation module (#1791) (
e796b3cc6)test(subagent): add unit tests for refactored subagent package (#1779) (
cd740d8bd)docs(profiles): update browser-use profile with interactive browsing functions (#1776) (
180123615)refactor(subagent): split into modular package (#1773) (
023e99fbb)refactor(prompts): move context_cmd output after static content for better caching (#1768) (
2f4829f2c)refactor(models): split models.py into modular sub-files (-90%) (#1759) (
d604ca94e)refactor(logmanager): split logmanager.py into modular sub-files (-95%) (#1756) (
4574b326e)refactor(config): split config.py into modular sub-files (-93%) (#1754) (
deb5072fb)refactor(autocompact): split autocompact.py into modular sub-files (-96%) (
656027c22)refactor(prompts): split prompts.py into modular sub-files (-71%) (#1752) (
bc6cdd68b)refactor(hooks): split init.py into types + registry sub-modules (-79%) (#1751) (
867dc1199)refactor(server): split api_v2_sessions.py into modular sub-files (-64%) (#1747) (
1227fe0e5)refactor(subagent): extract execution backends into subagent_execution.py (#1745) (
1a58369e4)refactor(cli): split util.py into modular command files (-57%) (#1743) (
e861bc842)refactor(shell): split shell.py into modular sub-files (-34%) (#1744) (
473385144)refactor(util): deduplicate flush_stdin into terminal.py (#1741) (
4bee516c6)refactor(server): remove V1 API endpoints (-564 lines) (#1740) (
6b3a86e2b)refactor(server): extract shared code from V1 API module (#1738) (
ea66d1529)refactor: remove 9 unused scripts (-1,437 lines) (#1737) (
0698f60d4)refactor: move TTS tool to gptme-contrib plugin (#1735) (
cd4739402)refactor(lessons): remove unused EnhancedLessonMatcher dead code cluster (#1736) (
5005e47b4)refactor: remove 47 unused type: ignore comments (#1733) (
fbc2f17cc)refactor: move youtube tool to gptme-contrib plugin (#1734) (
e97772965)test(llm): add integration tests for model-dependent break_on_tooluse default (#1729) (
a4066e8f4)refactor(models): move deprecated models to separate files (#1732) (
edab9f588)autoresearch(gptme): improve practical5 pass rate 0.778 → 1.000 (#1723) (
da798cec8)refactor(eval): use specific exception types and cleaner imports (#1716) (
8ef484698)docs(evals): update eval docs — fix model, expand suite listing (#1712) (
92504ab80)autoresearch(gptme): improve practical5 pass rate 0.556 → 1.000 (#1702) (
f500d590b)test(eval): add runtime guard and test for duplicate test names (#1665) (
44059ef1e)chore: delete ellipsis.yaml (
995927a0f)refactor: consolidate release pipeline into single workflow (#1643) (
389ff5fb1)refactor(message): nest token fields under
usagein MessageMetadata (#1638) (1d5d5a670)docs: remove incorrect claim that Bob’s workspace is open source (
4dfc40014)chore: add make tiny summary + refactor gh tool complexity (#1630) (
065ccd937)docs: expand autonomous agents in README, remove private agent mentions (
ad9439f7f)docs: expand Autonomous Agents section in features.rst (
08648e757)docs: add features overview page (
e177b4782)test(tauri): add Rust unit tests for IPC commands and deep-link parsing (#1598) (
bf7e1faf2)test(eval): expand basic suite with 4 practical agent capability tests (#1607) (
8771579eb)Merge remote-tracking branch ‘origin/feat/tauri-subtree-merge’ (
3f1fd34db)Add ‘tauri/’ from commit ‘4e2aadaf348b6c2d917e7d4edee9d350785995f2’ (
c680b290e)docs: comprehensive README improvements (MCP, ACP, plugins, skills, ecosystem) (#1553) (
d3f27bec9)docs(custom_tool): document –tools file loading and /tools load command (#1547) (
46a6de62e)docs: document /tools load command and gptme managed service provider (#1544) (
233c227a8)refactor(auto-naming): consolidate duplicated auto-naming logic (#1542) (
7f7320485)test(hooks): add tests for cli_confirm and form_autodetect (
c27fdbc09)test(hooks): add tests for cost_awareness, token_awareness, server_confirm, server_elicit (#1535) (
0e82bfb71)test(hooks): add tests for markdown_validation, agents_md_inject, active_context (#1533) (
863b31db6)test(hooks): add tests for cwd_tracking, time_awareness, and auto_confirm (#1520) (
0ca92d635)test(shell): add tests for allowlist auto-confirm behavior (#1508) (
a8ac588ab)refactor(info): parse extras from package metadata instead of hardcoding (#1517) (
94e2eb342)style: use shared prompt_alert() for consistent alert styling (#1516) (
32f600c88)style: use shared prompt_alert() for consistent alert styling (#1510) (
1e5c7ac1c)docs: add AGENTS.md with agent-specific development guidelines (#1504) (
917167fdf)refactor(context): return mention counts from get_mentioned_files (#1501) (
df05462bd)test(computer): expand test coverage from 9 to 51 tests (#1498) (
c6b48ffa1)refactor: use Message.concat() in Anthropic provider (#1494) (
c5446adce)test(context): add image auto-attach pipeline tests + debug logging (#1493) (
919e25807)revert: undo unconditional chdir that breaks cd persistence (#1400) (#1487) (
e90f9e533)test(agent): add e2e coverage for gptme-agent create template path (#1468) (
d98f265ac)docs(skills): clarify standards-aligned scope and plugin boundary (#1467) (
5a53a6ac1)refactor: remove obsolete gptme-webui submodule, use gptme’s built-in webui (#9) (
632362c32)chore: bump ruff-pre-commit v0.6.9 → v0.15.2 (#1431) (
3e8b53273)Support GPTME_ prefix for environment variables (#1416) (
57a351909)style: rename deprecated ruff TCH rules to TC (#1426) (
7dd0f699c)style: enable PT011/PT022 rules, clean up unused noqa and imports (#1408) (
c76997b55)style: enable FLY, ISC, PLE, PERF ruff rules (#1398) (
3b8fcb8c7)style: enable TCH, PIE810, PT003/PT006/PT022 ruff rules (#1407) (
b71909506)style: remove self-assignment and add timezone to datetime.now() calls (#1404) (
d3d918b43)refactor(acp): remove unused adapter scaffolding (#1397) (
bb0179fcb)style: add explicit check param to subprocess.run() calls (PLW1510) (#1403) (
658d1cce2)test(autocompact): add unit tests for semantic and reference scoring functions (#1387) (
131dc0966)test(tools): add unit tests for choice and elicit tool parsing (#1385) (
084dceb6d)test(llm): add unit tests for shared LLM utility functions (#1382) (
bfd1cc211)test(util): add unit tests for tokens, cost_display, and export modules (#1383) (
780acc00c)style: enable additional ruff rules (C4, FURB, RSE, RET, RUF) (#1381) (
a5fb1842d)style: enable SIM103, SIM110, SIM117, SIM300, SIM910, RET505 ruff rules (#1378) (
3c3dacc6a)style: enable SIM118, PIE790, RET501 ruff rules (#1375) (
11d59f23d)test(acp): add per-session model override tests (#1370) (
4aefb0c0f)chore: remove dead TYPE_CHECKING blocks with empty pass bodies (#1369) (
15750f6a5)refactor: move inline lynx tests to proper test file (#1367) (
d955fd670)chore: remove commented-out dead code across 7 files (#1365) (
8f374dd2b)refactor: remove deprecated parallel tool execution module (#1361) (
bc28ee093)style: fix E402 import ordering in codeblock.py and plugins/init.py (#1353) (
51e06a6b4)chore(deps): bump pillow, cryptography, protobuf for security fixes (#1351) (
8f65c8b68)chore: update deprecated model references and remove stale noqa (#1350) (
2beb00810)test: remove stale xfail and fix unclosed file handles (#1349) (
a08b6e4a7)refactor(llm): replace duplicate model entries with MODEL_ALIASES (#1348) (
44a67a8c7)chore: remove 6 unused type: ignore comments (#1345) (
64f8e0602)docs: update stale xai model example (grok-beta → grok-4) (#1343) (
3a9c5f585)chore: remove redundant assert and str() calls (#1340) (
1f1e9da87)chore: remove dead browser tests and fix shell.py type safety (#1339) (
7c75db589)docs: fix config path in custom-providers.md (gptme.toml → config.toml) (#1333) (
c382491e8)test(util): add comprehensive tests for tree.py workspace listing (#1303) (
a96b099f6)test(acp): add comprehensive unit tests for types, adapter, and agent (#1275) (
4a5d2b765)refactor(eval): replace model@format strings with typed ModelConfig dataclass (#1280) (
744ff9ec8)chore: update default model references to current versions (#1278) (
84e740706)docs: recommend gptme-agent CLI for creating and managing agents (#1260) (
86c60356f)refactor(tools): combine todoread/todowrite into single todo tool (#1242) (
76732bca0)refactor(commands): add auto_undo to command decorator (#1244) (
a073a8b49)chore(deps): bump actions/checkout from 4 to 6 (#1221) (
b2e32c7bd)chore(deps): bump actions/setup-node from 4 to 6 (#1220) (
767ce42f7)chore(deps): bump actions/setup-python from 5 to 6 (#1222) (
6b85679a7)chore(deps): bump actions/upload-artifact from 4 to 6 (#1219) (
6ccabf95e)chore: merge gptme-webui into webui/ folder (
e2fa294dd)chore: merge latest gptme-webui commits (
8c8a9937b)docs: improve system dependencies organization (
1510bcdcb)docs: add source installation and extras documentation (
d68293cb4)refactor(llm): add TypedDict for message dict typing (#1195) (
89d467b98)test: fixed test (
5d933eb62)refactor(agent): rename setup command to create (#1185) (
29c9a0bab)docs(lessons): add worktree best practices with /tmp/ recommendation (
c94594d9c)refactor: move top-level files to appropriate modules (#1175) (
4cae46f99)test: add slow marker to test_load_context_files_truncates_long_files (
d8f7805a6)refactor: move CLI into gptme/cli/ module (#1173) (
5e3e80ce9)Add ‘webui/’ from commit ‘6c0df0cad5a6316b96b91840fb39b29c082fe8c9’ (
fad8287c3)docs: clarify lessons vs skills distinction (#1169) (
6d5428931)Replace hasattr checks with isinstance for type safety (#1161) (
163678ed9)docs: improve README (again) (
ff2960e40)docs: improve README (
9fd1f47cb)docs: improve README (
5e3e358c9)docs: fill News section and update Timeline with recent milestones (#1143) (
baf1cd110)docs: fill News section with major milestones and ecosystem highlights (
afe29ad7e)perf(ui): optimize first message latency with optimistic UI (#104) (
dc53c3821)refactor: use ContextVar for thread-safe shell sessions (#1089) (
aa738bb09)format: fixed formatting (
082841ed6)refactor(chat): remove vestigial _recently_interrupted variable (#1039) (
56ca13b4b)refactor(dspy): archive GptmeReasoningProgram, simplify GEPA (#1128) (
3ade55080)test(gh): update mocked tests for comment ID format (#1102) (
bdbc13f03)refactor(hooks): adopt OpenCode-style dot-notation naming (#1099) (
f1d152743)docs(security): add warning about gptme.toml trust in untrusted repos (#1082) (
44d0dcacc)docs: add glossary with step/turn terminology (#1076) (
911bbd023)refactor: split commands.py into modular commands/ package (#1073) (
36cc81dff)refactor(llm): remove dead code in _chat_complete control flow (#1069) (
28c51d912)docs(security): add security documentation and SECURITY.md (#1024) (
372e654af)docs: add comprehensive commands reference documentation (#1008) (
4545c64d5)refactor: separate multi-tool from parallel execution (#1006) (
b57ed2100)docs: document plugins in project config (#1007) (
5ddbd06bd)refactor(autocompact): truncate largest tool results first (
79fd943dc)docs: fixed cloc commands to have cleaner output (
045fb376c)chore: cleaned up old md file (
e8c0e17ec)docs: improved file list for cloc groups (
228a2bed0)chore: remove unfinished gptme-ncurses (
cc7c08475)refactor(session): add shared session module for ACP/server (#982) (
fd0e236b6)docs(acp): add Agent Client Protocol documentation (#981) (
8c1cf1f98)docs: improved the usage instructions, mention gptme.ai (
f66a45693)refactor: remove spammy per-token debug logging (
9dadf72b8)perf: prevent unnecessary state updates in MainLayout (
367a9e5c8)refactor: centralize examples system with user type support (
6404776a3)Model selector improvements (search, refactor, fixes), add name input in chat settings (#85) (
af0f9e8e9)refactor: restructure right sidebar to fix padding and layout issues (
01d6fae4f)chore: set NO_STRIP on linux build only (
a33d4473f)refactor: change agent.workspace to agent.path, use path as primary agent ID (
70dfad00b)chore: updated gptme.toml (
8d22592b3)chore: updated gptme.toml (
1e4d22b18)format: fixed formatting and lint (
bdb44e6e0)format: fixed formatting and lint (
12c64155f)refactor: extract SuggestedActionsPanel and SuggestedActionsTips (
23b49e484)Fix tool confirmation cancellation and auto-stepping chime behavior (#76) (
aa275e1f4)chore:skip rebuilding gptme-server if alredy built (
3b25ed48c)docs: added README (
7b29ec1d0)format: fixed formatting (
cd133266b)refactor: simplify ChatInput component structure and fix button positioning (
d99873249)refactor: consolidate conversation types and add workspace selector to ChatInput (
5839db9d4)refactor: move positioning logic out of ChatInput to parent components (
c7f44bb08)chore: cargo fmt :( (
71dbb3115)chore: set up gptme submodule and update .gitignore (
01bd2c4cf)chore: fix broken Makefile (
d8d9a855c)chore: delete react folder and related files (
5e174df26)Initial setup of gptme-tauri project with React and TypeScript (
9e657fe02)refactor: refactor conversation settings component (#61) (
84bc99c28)chore: fixed deprecated .pre-commit-config.yml format (
1b1b5c458)docs: update README.md gptengineer.app -> lovable.dev (#50) (
729c171b8)refactor: refactored to allow using as submodule (#39) (
59ef067a5)refactor: minor fixes (
f2dc9b96a)refactor: wip v2 api stuff (remove v1 api support, among other things) (
83aa97918)chore: removed unused file (
dd2b1fb3e)chore: disable prettier for md files (
a68d7b796)format: set up prettier and formatted project (
8e45fa689)Reverted to edit 8b3959ef-92d3-4cfe-a9ed-1d26d2244f9d: “feat: add dynamic page titles based on selected conversation” (
9d3725158)Reverted to edit 92595471-e0eb-4f82-8df6-cce9b1afc166: “Add external link icons to messages (
1cacd4ad8)Update bottom left icons (
1a25474ce)Add external link icons to messages (
57f3cc2e0)Reverted to edit 8b3959ef-92d3-4cfe-a9ed-1d26d2244f9d: “feat: add dynamic page titles based on selected conversation” (
1e351207c)Fix TypeScript errors in markdownUtils (
f544d3cc9)Add external link icons to messages (
915481397)refactor: consolidate Vite configs into single file (
eee76072f)chore: remove redundant jest.setup.js in favor of TypeScript version (
6bfa10f64)style: improve code block styling and formatting (
4baa4aed3)docs: update demo conversation to use correct dev server port (8080) (
9468e2b07)docs: update domain from gptme.gptengineer.run to chat.gptme.org (
48ea02adc)chore: comment out GitHub Pages base URL (
2f3a95eb4)refactor: improve markdown code block handling (
f2626cd95)Remove follow-on avatars from messages (
7e943705f)Improve System Message Styling (
61315ec06)Add background for assistant cards (
d6701bb93)Fix light mode design (
33211e972)Update message styling for system outputs (
f26a7a9ef)Reverted to edit dd0e8988-d18a-4a66-ae1d-cbaf262721eb: “Fix overlapping messages issue (
3aca22385)Update system message styling (
085e3c945)Fix overlapping messages issue (
4c590457f)Join assistant-system messages and fix styling (
d67d8daae)Refactor ConversationContent component (
444725f67)Join messages into a single card (
9be7801e6)Retry last action on correct branch (
1faa85722)Reverted to edit 815a42d6-9116-4fbf-9d95-1e113737e268: “fix: improved parsing of markdown fenced codeblocks’ langtag args” (
de5b21ed4)Update message handling logic (
8a06922c4)Reverted to edit 664da7a0-5c00-49d1-af75-0cbf4306b238: “fix: handle nested codeblocks” (
3c7bb372a)Adjust message spacing for continuity (
f583fbc09)test: setup jest for testing and added tests for handleWrappedFencedCodeBlocks and transformThinkingTags (with fixes) (
e9301fcd8)chore: fixed incompatible gptme.toml config (
69c78edee)Update conversation URL handling (
c85bf3194)Fix conversation navigation issue (
1f6084dc5)Reverted to edit 2367e0d1-5107-48f5-9222-f1f517e3b5bd: “Reduce font size across application (
5c7e43abf)Adjust Avatar Spacing in Messages (
20dbb43ef)Reduce font size across application (
83ba6d2c5)Reverted to edit 8cd5b1eb-0450-4f31-85d5-cde2c3980604: “Remove unused variables in ChatMessage.tsx (
b8993f2fb)Reverted to edit 871d40ab-c673-4dd5-aa55-a9abae1cb146: “Fix HTML entity rendering issues (
d6b1bd129)Fix HTML rendering issues (
ec9b8235c)Reverted to edit 8cd5b1eb-0450-4f31-85d5-cde2c3980604: “Remove unused variables in ChatMessage.tsx (
417bcf84b)Fix HTML entity rendering issues (
226c94b66)Remove unused variables in ChatMessage.tsx (
8f2933791)Adjust message layout alignment (
dae7b52c7)Fix message overlapping issue (
3a8de85dc)Hide avatars on small screens and adjust spacing (
a522a1356)Update user chat bubble color (
31382280d)Move user avatar to right side (
ef1d7f599)Refine paragraph formatting (
8848f147d)Remove excessive padding (
3ca8552ae)Add chat bubble for messages (
f240d910d)Make UI darker (
80af26e67)Compare UI Color Schemes (
8dbbfd6ec)Remove blue tint from gray (
aa959e18e)Update background to dark gray (
51eb037e5)Adjust button margin settings (
16365bbce)Update button sizes and menu bar (
e834dec1b)Reduce button size in MenuBar (
bf332ed21)Make menu bar thinner and update font (
ae63ccdb5)Update chat message styles (
bc74616a5)format: fixed formatting (
e9649bd9f)Replace favicon logo (
96687c658)Fix sidebar toggle button issue (
91d5ac410)docs(README): fix typo in example (
33d7e1067)refactor: renamed ConversationMessage -> Message (
2b918341d)refactor: major refactor with better typechecking (
a6f142842)Reverted to edit 68d941ae-8a5d-420e-a3be-1e6beca5417e: “Fix tooltip for server conversations (
162a9a6d2)Fix issue with functionality (
e6e73ba00)Fix chat area overflow issue (
9a997a762)Fix tooltip for server conversations (
e6f59badc)Reverted to edit f80f0015-ed10-4179-8a02-f0fb0f41a7b0: “Fix meta tags for social previews (
72f15012e)Fix empty tooltips in conversations (
526ca37e2)Fix tooltip for message counts (
ae8c47ac8)Fix meta tags for social previews (
65b30647b)Hide content in conversations footer (
b792608e9)Add links to GitHub repositories (
291b8bd9e)Add tooltip for message breakdown (
c19e07236)Fix CORS origin typo (
bdfec6a73)Remove border from New button (
5de3bcc23)Add checkmarks to ConversationList (
2b69addbb)Fix emoji display when disconnected (
d1c30c250)Remove features from connection dialog (
92e827908)Update connection instructions (
9ee226f4d)Add favicon from URL (
21a4dd2c7)docs(README): updated README (
cf7209a66)Toggle visibility for system messages (
998bc4f85)Fix hiding system messages (
33d38fb6f)Hide Leading System Messages by Default (
19910b5c0)Hide Initial System Messages (
646b90dd6)Refresh conversation list after creation (
2f6735f7b)Fix type conversion error (
a0584237a)Add information to connection modal (
a2a84c1f0)Fix TypeScript errors (
964bc124d)Move New Conversation Button (
139c1452d)docs: updated README and index.html (
8e6ec4559)Add padding to components (
c0b205389)Style details with border and padding (
4d4865338)Add styling for lists in messages (
f087345a6)Transform Thinking Tags in Messages (
7588641ca)Add API call to generate replies (
25aba2d0c)Refactor ChatMessage to Use Message (
24be7340a)Hide Initial System Messages (
755058dbe)Fix TypeScript error in ChatMessage (
6c008517e)Fix HTML rendering issue (
db4fe1523)Fix issues in existing code (
e88221e8a)Fix image problems (
8e6338784)Add example messages for conversation (
fcab46c60)Improve Conversation Switching Performance (
36dbec34a)Fix unresponsiveness on conversation click (
b40e89d44)Fix TypeScript error in Index.tsx (
093a1e047)Fix TypeScript errors in Index.tsx (
0098a0b39)Fix conversation switching performance (
18833ef67)Fix performance issue with server conversations (
337f239c1)Fix TypeScript errors in Index.tsx (
8be776002)Read and Process Conversation Log (
50b6c20f4)Fix TypeError for apiMessages (
1e9affd14)Fix conversation path usage (
f961cccf7)Fix conversation loading errors (
2333b61f6)Fix runtime errors and TypeScript issues (
03c1698ce)Fix TypeScript error in ApiContext (
20454a3e3)Fix TypeScript error in ApiContext (
0b85c151b)Connect to API by default (
e8f977eb9)Fix connection state handling (
e43cee555)Fix runtime errors in ApiContext (
e9a6cd059)Fix CORS issue (
2c608d837)Add verbose error logging (
4c4f16d03)Fix ApiContext usage error (
351298356)Fix type error in ApiContext (
524d472f3)Fix connection button and conversation loading (
75c6f75f7)Add new conversation button (
8e788a70d)Fix TypeScript errors in ApiContext (
db319023b)Fix TypeScript error in ApiContext (
ffb7d6b30)Load API Conversations and Enable Messaging (
a4aac76fc)Fix API errors and type assignment (
c71b5c12d)Add configurable connection button (
714c20611)Connect to Optional gptme Instance (
279022afe)Fix incorrect element wrapping (
5eef749cd)Remove Excessive Borders and Style (
b01300432)Remove terminal-commands langtag (
d972802b3)Fix display of example.py (
d2b604b27)Refactor markdown parsing for code blocks (
5e593c6bf)Fix recursive nesting in codeblock (
11a377aaa)Fix nested terminal command display (
0851b040e)Fix sidebar border extension (
4ddc69d69)Fix sidepanel toggle issue (
bcc3e3ecd)Fix sidebar button functionality (
bea802078)Fix undefined conversations error (
3fe8bffe1)Add conversation selection feature (
e815d8fb6)Fix TypeScript error in ChatMessage (
25a58895e)Fix codeblock formatting issue (
97b56ddf6)Add markdown highlighting and formatting (
a91fca323)Add markdown parsing for assistant messages (
a36d92027)Implement LLM Chat Interface UI (
5cbe7a4d5)Use tech stack vite_react_shadcn_ts [skip gpt_engineer] (
010528338)
(excluded 87 less relevant commits)
Full Changelog: https://github.com/gptme/gptme/compare/v0.31.0…v0.32.0