nanobot v0.1.4.post6

v0.1.4.post6
Added 7
  • Email content is tagged with [EMAIL-CONTEXT] to prevent LLM prompt injection from email bodies
  • WeChat (Weixin) joined as a full channel with HTTP long-poll, QR code login, and plugin 1.0.3 compatibility
  • Mistral and OVMS providers arrived
  • Step Fun provider joined the ecosystem
  • Per-session concurrent dispatch capability
  • Native multimodal sensory capabilities added to agent
  • Onboard wizard became full-featured with timezone configuration
Changed 13
  • Agent runtime was decomposed into composable pieces with a shared AgentRunner, unified lifecycle hooks in HookContext, and refactored command routing into a plugin-friendly structure
  • Replaced litellm with native OpenAI and Anthropic SDKs for direct upstream communication
  • Prompt cache optimization for Anthropic and proper max_completion_tokens handling for OpenAI o1
  • Gemini thought signature is now preserved
  • Streaming output now flows end-to-end from provider to channel to CLI as a first-class path
  • Feishu gained CardKit streaming support and queued stream deltas are coalesced to reduce API calls
Security 1
  • Fixed email injection and spoofing vulnerability by verifying SPF/DKIM through Authentication-Results headers with verify_dkim and verify_spf enabled by default

🐈 nanobot v0.1.4.post6 is here — 57 PRs merged, 27 new contributors, and a release that's less about adding surface area than about rethinking what's underneath.

Some releases are about what you can do. This one is about how cleanly you can do it. The agent runtime got formally decomposed, a major dependency was removed, streaming went end-to-end, and a security vulnerability was closed. Beneath the feature work, v0.1.4.post6 is a structural turning point — the kind of release that makes the next release possible.

Highlights
  • The agent runtime was decomposed into composable pieces — A shared AgentRunner was extracted, lifecycle hooks were unified into a formal HookContext, and subagent progress is now preserved even on failure. Command routing was refactored into a plugin-friendly structure, and process_direct was unified to return OutboundMessage consistently. This isn't just cleanup — it's the foundation for pluggable agent behaviors, custom execution strategies, and third-party lifecycle integrations that are coming next. (#2524, #2541, #2388, #2338)

  • litellm was replaced with native OpenAI + Anthropic SDKs — The entire provider layer was rewritten to talk directly to upstream SDKs instead of routing through litellm. Prompt cache optimization for Anthropic, proper max_completion_tokens handling for OpenAI o1, and Gemini thought signature preservation all came along for the ride. If you've ever debugged a litellm traceback at 2am, you understand why this matters. (#2448, #1109, #2468, #2550, #2453)

  • Streaming went end-to-end — From provider to channel to CLI, streaming output now flows as a first-class path. Feishu gained CardKit streaming support, queued stream deltas are coalesced to reduce API calls, and the channel manager handles stream boundaries correctly. This is the difference between "the bot is typing..." and actually watching it think. (#2365, #2545, #2497)

  • A security vulnerability was patched — Email injection and spoofing via missing authentication verification has been fixed. Inbound emails now verify SPF/DKIM through Authentication-Results headers, with verify_dkim and verify_spf enabled by default. Email content is tagged with [EMAIL-CONTEXT] to prevent LLM prompt injection from email bodies. See the advisory for details. (GHSA-4gmr-2vc8-7qh3)

  • WeChat support landed as a full channel — WeChat (Weixin) joined the channel family with HTTP long-poll, QR code login, and plugin 1.0.3 compatibility. Alongside it, Telegram, QQ, WhatsApp, and Feishu all received cross-channel enhancements including retry mechanisms with exponential backoff. (#2412, #2428, #2386, #2478)

  • Provider coverage kept expanding — Mistral and OVMS providers arrived, Step Fun (阶跃星辰) joined the ecosystem, and custom provider error reporting got much more honest — raw API errors instead of opaque JSONDecodeError. nanobot continues to meet users wherever their models live. (#2199, #2472, #2289, #2139)

  • The agent got smarter about resources — Per-session concurrent dispatch landed, native multimodal sensory capabilities were added, token estimation now counts all message fields, and memory consolidation properly reserves completion headroom. The agent loop also handles CancelledError gracefully and records subagent results with correct roles. (#2393, #2304, #2344, #2378, #2239, #2104)

  • Feishu and Telegram both leveled up — Feishu gained streaming cards, code block parsing in post messages, and fixes for markdown rendering and media types. Telegram got HTTP(S) URL media support, separated connection pools to prevent pool exhaustion, and quieter network error logging. Small individually, substantial together. (#2545, #2246, #1814, #1755, #1793, #2247, #2272)

  • CLI and onboarding became more capable — A full-featured onboard wizard arrived, --dir enables multiple instances, /status shows runtime info, -h works everywhere, and timezone is now configurable. The kind of polish that makes first-run experience feel intentional. (#2101, #1763, #1985, #2123, #2477, #1136, #2266)

  • Infrastructure hardened across the board — Zombie processes are reaped on shell timeout, cron job stores are scoped to workspaces, MCP tool schemas handle nullable params correctly, Docker builds include openssh-client, and the test suite was reorganized into a cleaner structure. The kind of work that prevents the bug report you'd otherwise file next month. (#2362, #2204, #2230, #2287, #1911, #2427, #2367)

Community

A warm welcome to our 27 new contributors in this release.

v0.1.4.post6 is shaped by a belief that the most important work in open source isn't always the most visible. Replacing a core dependency, decomposing a runtime, closing a security hole — none of these make for flashy demos, but all of them make nanobot a project you can build on with more confidence tomorrow than yesterday. Thank you to everyone who contributed code, fixes, docs, and ideas. The foundation is getting stronger.

Full Changelog: https://github.com/HKUDS/nanobot/compare/v0.1.4.post5...v0.1.4.post6

What's Changed
New Contributors

Full Changelog: https://github.com/HKUDS/nanobot/compare/v0.1.4.post5...v0.1.4.post6

View original

Upgraded? How did it go?

Discussion