github HKUDS/nanobot v0.1.4.post1

9 hours ago

🎉 Another big release from the 🐈 nanobot community — thanks to all contributors, especially our 19 new ones!

This release brings major channel improvements across Feishu, Slack, and Discord, a new provider, prompt caching, and a significant agent loop refactor. More reliable, more capable, leaner code 😄.

Highlights

  • Feishu Media — Bot can now send and receive images, audio, and files (#844, #922)
  • Slack Media Upload — Send files directly from the agent (#904)
  • Discord Long Messages — Automatically splits messages exceeding 2000 characters (#900)
  • VolcEngine Provider — New LLM provider support (#812)
  • Prompt Caching — Anthropic and OpenRouter cache_control support for lower costs (#854, #905)
  • MCP Auth Headers — Custom HTTP headers for authenticated MCP servers (#807)
  • Telegram Improvements — Configurable reply-to behavior, /help bypasses ACL (#879, #824)
  • CLI Subagent Support — CLI now routes through message bus, enabling full subagent support (#908)
  • Reliable Memory — Memory consolidation uses structured tool calls instead of fragile JSON parsing (#866)
  • Leaner Agent Loop — Extracted memory logic, merged redundant methods, -31% lines (#930)
  • Smarter File Editing — edit_file now shows a diff when old_text doesn't match (#921)
  • Bug Fixes — MCP reconnection, session key persistence, duplicate replies, cron execution, and more (#892, #902, #832, #821, #823, ...)

What's Changed

  • feat(feishu): support sending images, audio, and files by @KinglittleQ in #844
  • fix: Codex provider routing for GitHub Copilot models by @Molunerfinn in #836
  • fix: wait for killed process after shell timeout to prevent fd leaks by @nikolasdehor in #851
  • Fix safety guard false positive on 'format' in URLs by @rubychilds in #820
  • fix: remove dead pub/sub code from MessageBus by @AlexanderMerkel in #870
  • fix: use loguru native formatting to prevent KeyError on curly braces by @nikolasdehor in #864
  • Fix: Add UTF-8 encoding and unicode support for JSON output by @chtangwin in #455
  • fix(tools): resolve relative file paths against workspace by @omdv in #653
  • fix(cron): validate timezone inputs when adding jobs by @Athemis in #763
  • fix(agent): handle non-string values in memory consolidation by @jswxharry in #644
  • feat: add Anthropic prompt caching via cache_control by @tercerapersona in #854
  • fix: allow retry for models that send interim text before tool calls by @nikolasdehor in #825
  • fix: prevent duplicate memory consolidation tasks per session by @nikolasdehor in #823
  • fix: /help command bypasses ACL on Telegram by @nikolasdehor in #824
  • feat: Add VolcEngine LLM provider support by @init-new-world in #812
  • feature: Added custom headers for MCP Auth use. by @dxtime in #807
  • feat: Agent is able to reply to original message (Telegram Channel) by @DaryeDev in #815
  • fix: make cron run command actually execute the agent by @ClaytonWWilson in #821
  • feat: make Telegram reply-to-message behavior configurable, default false by @Re-bin in #879
  • fix: fixed not logging tool uses if a think fragment had them attached. by @DaryeDev in #833
  • fix: Resolve "Unrecognized chat message" error for StepFun and strict providers by @Tevkanbot in #795
  • feat: add OpenRouter prompt caching via cache_control by @tercerapersona in #905
  • feat(slack): add media file upload support by @pjbakker in #904
  • fix: convert remaining f-string logger calls to loguru native format by @nikolasdehor in #903
  • fix: split Discord messages exceeding 2000-character limit by @nikolasdehor in #900
  • fix: store session key in metadata to avoid lossy filename reconstruction by @nikolasdehor in #902
  • fix(agent): avoid duplicate email replies when message tool already sends by @KimGLee in #832
  • fix: allow MCP reconnection after transient failure by @nikolasdehor in #892
  • refactor: route CLI interactive mode through message bus by @Re-bin in #908
  • feat(feishu): add multimedia download support for images, audio and files by @coldxiangyu163 in #922
  • fix(tools): provide detailed error messages in edit_file when old_text not found by @themavik in #921
  • fix: preserve interim content as fallback when retry produces empty response by @nikolasdehor in #887
  • refactor(loop): remove interim text retry, use system prompt constraint instead by @Re-bin in #928
  • fix(memory): Enforce memory consolidation schema with a tool call by @rudy-of-the-corner in #866
  • refactor: extract memory consolidation to MemoryStore, slim down agent loop by @Re-bin in #930
  • fix(agent): keep empty fallback sentinel CLI-only by @Athemis in #926

New Contributors

Full Changelog: v0.1.4...v0.1.4.post1

Don't miss a new nanobot release

NewReleases is sending notifications on new releases.