v0.30.0-101-ga2f2c305a
These are the release notes for gptme version v0.30.0-101-ga2f2c305a.
Contributors
Thanks to everyone who contributed to this release:
@0xbrayo, @ErikBjare, @nikongo, @TimeToBuildBob
Changelog
Changes since v0.29.0:
📦 gptme
✨ Features (51)
- feat(lessons): auto-discover lessons from plugins (#944) (
ab531ad20) - feat(message): add MessageMetadata TypedDict for token/cost tracking (#943) (
684bbb6ff) - feat(cost): implement cost_awareness hook for session cost tracking (#939) (
ed409cb26) - feat(telemetry): improve trace quality with context propagation and rich metrics (#942) (
5be5a39d4) - feat(shell): add background job support for long-running commands (#902) (
c48bf9bd7) - feat(setup): validate API keys before saving (Issue #930) (#931) (
bf1bc716b) - feat(lessons): add caching and deduplication to lesson index (#928) (
3fdbf4186) - feat(hooks): add form auto-detection hook (Issue #591) (#919) (
40dc68f45) - feat(logmanager): add content-addressable file storage (Issue #150) (#913) (
86febf7de) - feat(tools): add form tool for structured user input (Issue #591) (#911) (
92c475a47) - feat: add Docker container for GitHub bot (Issue #305) (#905) (
ec1204fa9) - feat(tmux): add wait command to monitor long-running commands (#901) (
0ee75e544) - feat(prompt): add multi-line input support (#899) (
558ee3b5f) - feat(autocompact): add Phase 3 extractive compression for long messages (#886) (
cca057c63) - feat: add diagnostic logging to shell tool for Issue #408 (#890) (
750009193) - feat: support GPTME_TTS_SPEED and set exclude-newer for tts_server.py script to fix issues (
eed3a987c) - feat(llm): add constrained decoding support (#776) (
94621288d) - feat: add Cursor .mdc rules support (Issue #686 Phase 5) (#882) (
59723c493) - feat: Enhanced plugin management with smart src/ layout discovery (#873) (
0ccdfbe44) - feat: add compression analysis utilities and script (#864) (
fd3d8edc2) - feat(eval): GEPA Week 3 - HybridOptimizer with adaptive multi-stage optimization (#859) (
58cce70f8) - feat(context): implement hooks-based context compression architecture (#844) (
20435f324) - feat(context): implement Phase 3.1.1 core infrastructure (#860) (
b898c8550) - feat: implement active context discovery (#856) (
990fdca36) - feat: add restart tool (#853) (
418532ea8) - feat(context): Phase 1 - Core Context Selector Infrastructure (#831) (
71416f6ca) - feat: convert default model and hook registry to ContextVar for thread safety (#848) (
5a1ac7b95) - feat(plugins): implement Phase 3 command integration (#846) (
c7304c43b) - feat(plugins): implement Phase 2 hook integration (#845) (
e86fe8e08) - feat(plugins): implement Phase 1 plugin infrastructure (#843) (
fe8b355cc) - feat(server): add API v2 client for programmatic interaction (#841) (
dfd9f74f1) - feat: auto-enable complete tool in non-interactive mode and support multiple -t flags (#836) (
a5ccb6cd0) - feat(gepa): Phase 2 test set expansion - 7 more tasks (#833) (
7bbce0671) - feat(gepa): implement Phase 1 test set expansion (12 new tasks) (#832) (
68bd60cfc) - feat: support OPENROUTER_API_KEY for perplexity (#828) (
658c4450a) - feat(validation): add MESSAGE_POST_PROCESS hook for markdown codeblock cut-off detection (#824) (
ed01e1cb4) - feat: add support for gptme.local.toml configuration layering (#617) (
3dfcc9e5c) - feat(gepa): add PromptImprovementModule to fix InputField architecture issue (#823) (
825d71aa7) - feat(lessons): Phase 5.5 - Dynamic top-K selection (#820) (
7d7fcc455) - feat(lessons): Add ACE-inspired hybrid lesson matching (#817) (
1bdd9de5c) - feat: add hook support to server API v2 (#769) (
104aacff7) - feat(llm): add custom OpenAI-compatible providers support (#800) (
cdf548ee4) - feat(subagent): add planner mode for task delegation (#753) (
71b72b9bf) - feat(server): auto-generate auth token and document security risks (#803) (
f652e752e) - feat(hooks): improve typing for hook registration with Protocol overloads (#801) (
7bb17df7c) - feat(eval): implement Docker-based execution environment (#791) (
7c6761684) - feat(dspy): implement multi-stage reasoning program for GEPA (#786) (
a7f87c58d) - feat: log a warning when context command output is large (#787) (
cf741f841) - feat(server): implement token-based authentication for dev environment (#782) (
65507d7b8) - feat(lessons): add Cursor rules integration and project-local lessons support (#779) (
2ddc0e004) - feat(tools/shell): store truncated output before discarding (#775) (
b7c44982f)
🐛 Fixes (80)
Click to expand
- fix(config): remove quiet parameter from cache key to prevent duplicate entries (
61b81b0f5) - fix: mark plugins as loaded even if no tool_modules (
8917b180f) - fix: more fixes to invalid unicode handling in shell tool (
65151ee60) - fix: improved style of initial output (
06730c6bb) - fix: fix invalid unicode handling in shell tool (
d3b7ddd87) - fix: hide token/time/cost awareness messages by default (
755070737) - fix: suppress duplicate config log when loading conversation metadata (
10148567b) - fix: reduce plugin logging spam by logging each plugin once when loaded (
8e50bcde7) - fix: handle interrupt detection when hooks add messages after interrupt (
216f274da) - fix(autocompact): add minimum savings threshold to avoid wasteful compaction (#946) (
2f5b7825c) - fix: suppress telemetry token warnings (
2aa146e46) - fix: fixed metadata for xai models (
d9c42f2ba) - fix: improved agent setup instructions with more extensive extra/optional/recommended packages (
4f5b64dab) - fix: handle unquoted glob patterns in Cursor .mdc files (
b09f74dca) - fix(telemetry): remove noisy codeblock tracing (Issue #199) (#936) (
c36e25089) - fix: capture both stdout and stderr from context_cmd on error (#933) (
4e81c9187) - fix: attribute perplexity use to gptme on openrouter (#929) (
50792e65f) - fix: fix prompt_systeminfo to work on android/termux (
e5fa38fd8) - fix(tests): clean up gptme_N sessions in tmux test fixture (#926) (
dbe1676e4) - fix: read [prompt] section in project config (#927) (
1ee053ad1) - fix(telemetry): filter NotGiven attribute warnings from OTEL instrumentation (#925) (
a50b70623) - fix(tmux): truncate long pane output to prevent context overflow (Issue #923) (#924) (
7590830b8) - fix(llm): add empty reasoning_content field for DeepSeek assistant messages with tool_calls (#918) (
20f4888cf) - fix(tests): add cleanup fixtures for ShellSession and subagents (Issue #910) (#912) (
980917817) - fix(mcp): preserve server process when conversation is interrupted (#914) (
c4b59c240) - fix(browser): improve error messages for search bot detection (#904) (
ba3c0233f) - fix(config): remove assertions requiring prompt/env in user config (#909) (
06a451433) - fix(codeblock): handle nested codeblocks with same language tag (#903) (
79fdd6ea9) - fix(shell): prevent output mixing between commands (Issue #408) (#906) (
25dac14f2) - fix(llm): handle mixed content types in Groq/DeepSeek transformation (#896) (
31ef55c01) - fix(message): resolve file paths to absolute when serializing (#898) (
4a62f837d) - fix(message): escape Rich markup in non-code-block content (#894) (
369c72c32) - fix(lessons): lazy-load ACE to prevent import warnings (#893) (
5e5557d05) - fix: support custom providers in model selection and routing (#891) (
f20bdc18a) - fix: add browser recovery logic to prevent deadlocks on connection errors (#888) (
ede5080f2) - fix: prevent file content inclusion in command arguments (#889) (
a665571df) - fix: prettier errors on fatal exceptions (
d9f2c06e2) - fix: fix toolcall format to allow dots in call_id (fixes Kimi K2) (
6e970e546) - fix: add better cost telemetry logging in optimizable scenarios (#883) (
7092eae59) - fix: added claude-opus-4-5 (
4a9363a4b) - fix(tests): explicitly disable chat history in server v2 test (#872) (
b888abbea) - fix(shell): added SC1011 and SC1073 to shellcheck error codes (
4acc3748e) - fix: skip large files in active_context hook (
ecc1da20d) - fix: detect git version from pip's direct_url.json for pipx installs (#871) (
f557c43b8) - fix(patch): implement relaxed whitespace matching for whitespace-only lines (#861) (
6681751aa) - fix(server): add default model fallback and improve error messages (#863) (
ebdd3df98) - fix(shell): properly terminate child processes on timeout (#868) (
00377049a) - fix(dspy): register metadata for complexity test tasks (#867) (
767264944) - fix(tools): preserve full type information in tool signatures (#865) (
10ddeb6cb) - fix: initialize tools and model in subagent threads (#854) (
389549c7f) - fix: added SC2016 as excluded shellcheck code (
436b335de) - fix: fix broken favicon in the root path (#847) (
421194a15) - fix: remove xfail markers from previously flaky server tests (#849) (
1645926dd) - fix(gepa): Phase 3.3 - Fix task source and auto parameter conflicts (#837) (
dbbbc8493) - fix(security): block command injection via pipe-to-shell patterns (#840) (
87cd354d8) - fix(gepa): remove auto parameter conflict in MIPROv2 (#835) (
7e51e0ace) - fix: fixed Kimi K2 thinking toolcall support via OpenRouter (#830) (
5a758dbc7) - fix: resolve MCP tool loading issues and connection errors (#825) (
72a4d85bf) - fix(subagent): add missing tool_format parameter to chat() calls (
3167b3366) - fix(gepa): export ANTHROPIC_API_KEY and suppress verbose logs (#821) (
aeefe9b44) - fix(gepa): collect and save trajectory feedback in optimization results (#819) (
603ccfefc) - fix(eval): fix reflection model used in GEPA optimizer (#814) (
6345f0c2a) - fix(eval): add defensive check for eval_result in task_success_metric (#813) (
644eadd97) - fix(server): add GPTME_DISABLE_AUTH env var for k8s deployments (#811) (
dd4910174) - fix(tmux): use dashes instead of underscores for tmux tool function (#810) (
e1119abee) - fix(shell): added SC2002 to default shellcheck excludes (
3c088d372) - fix: improve shell error handling and add Anthropic debug logging (
cdd90afb7) - fix: fix session start hook msgs not being persisted (#808) (
43a8c55df) - fix(eval): run gptme agent inside Docker when --use-docker is used (#805) (
84f18eb3f) - fix(shell): handle bashlex parsing errors for bash builtins like 'time' (#799) (
0e18bf538) - fix(shell): added rg, ag, ast-grep, hyperfine to mentioned installed shell commands (
3c2b3f8ed) - fix(tests): update test_auto_compact.py for timestamp-based naming (#797) (
8142f895c) - fix(autocompact): restore manager state after fork to prevent name mutation (#794) (
ce25affc0) - fix(autocompact): resolve NameError and naming bug (#792) (
16032e481) - fix: dont mistake absolute path for command when given as prompt (
55c5a92d9) - fix(server): support query param token for SSE authentication (#785) (
66b418a5e) - fix: convert GEPA output_dir to absolute path to prevent FileNotFoundError (#784) (
ad5f47a1e) - fix(shell): handle logical OR operators (||) in pipe detection (#777) (
d52a17293) - fix(anthropic): retry on RemoteProtocolError's (#773) (
9c7b4874d) - fix(shell): denylist pkill and killall (fixes #768) (#770) (
6c7939393)
🔨 Misc (34)
Click to expand
- chore: bump version to 0.31.0 (
a2f2c305a) - docs: add TODO comment to prompts.py about optimizing prompt caching of context_cmd (
63c998da5) - style: use consistent 'Using' prefix for local config log message (
4fbcf8927) - docs(bot): improve GitHub bot documentation (#938) (
bc3929e4e) - chore: small fixes and formatting (#934) (
0e7edef0d) - docs: updated agent setup guide (
8d1b0b88d) - chore(config): disable fresh context mode (
f71558992) - docs: add issue labeling guide to contributing docs (Issue #874) (#922) (
606e7ead8) - refactor(bot): simplify action.yml to use github_bot.py script (Issue #305) (#915) (
1e3c020d9) - docs: add optional system dependencies section (#897) (
2718cb369) - Fix: Use conservative token limit for Anthropic models to prevent overflow (#887) (
f94ecc3cb) - docs: added more model alternatives and notes on model and provider selection (
c7b5fd8f7) - docs: Phase 4 - Add plugin example links and decision guidance (#881) (
746fe1d04) - docs: clarify skills vs plugins architecture (#880) (
66168d633) - refactor: Adopt Anthropic skill format (replaces #876) (#877) (
8d8faca55) - test: mark flaky test as flaky (
6b91b0d5f) - test(dspy): add comprehensive unit tests for GptmeReasoningProgram (#870) (
8a8c04e8e) - docs(dspy): add comprehensive documentation for use_reasoning_program parameter (#869) (
f81301090) - tests: add xfail to flaky test (
8f609310f) - docs: more docs fixes (#852) (
15550cb1d) - docs: custom provider docs fix (#851) (
b57b22b68) - docs: fixes to docs, clean up (#850) (
0464aad99) - chore: bump version to 0.30.0 (
0361c2617) - tests: add xfail to flaky test (
0d9448af3) - tests: add xfail to flaky test (
2db3c003f) - tests: fixed flaky tests (
5eb817bdc) - refactor: extract cwd tracking to hook and refactor time/token awareness to clean hooks (#839) (
32dc01f61) - Refactor threading.local to ContextVars support (#827) (
cb157ea1b) - refactor: migrate TTS to hook-based architecture (#816) (
83cbe9ff2) - chore: change default TTS server port from 8000 to 8765 (#815) (
48f11f2ca) - refactor: move len_tokens and related code into gptme.util.tokens (#809) (
62ba557b3) - perf: improve startup time by using
shutil.whichto check for pre-commit instead ofpre-commit --version(630c0cc0a) - docs: add comprehensive lesson system documentation (#771) (
5671da683) - docs(lessons): add Phase 6 comprehensive documentation (#795) (
8e11c24f7)
(excluded 11 less relevant commits)
Full Changelog: v0.29.0...v0.30.0-101-ga2f2c305a