Skip to content

v0.31.0

Latest

Choose a tag to compare

@TimeToBuildBob TimeToBuildBob released this 15 Dec 10:16
· 21 commits to master since this release

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.which to check for pre-commit instead of pre-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