v0.2.1

sipeed/picoclawv0.2.1Mar 9, 2026by github-actions[bot]

AI Summary

A feature-rich release adding several new AI providers (Minimax, Avian, Exa, Kimi/Opencode, SearXNG) and integrating MCP tools. It also adds IRC support and improves the agent browser skill.

Key Highlights

  • Add minimax provider
  • Add Avian, Exa, Kimi/Opencode, SearXNG providers
  • Add MCP integration and tools support
  • Add IRC channel integration
  • Add agent browser skill

New Features

  • Minimax provider
  • Avian provider
  • Exa provider
  • Kimi/Opencode providers
  • SearXNG provider
  • MCP integration
  • IRC channel
  • Agent browser skill

Full Release Notes

## Changelog
* 435223f500b56b81c2c238c36109401ef5f1ba99 * Add new style banner for picoclaw and picoclaw-launcher-tui (#1008)
* abafa3c2aac12cd3483d9ccc345e6033f8a7f2d4 * add minimax provider (#1273)
* 4402fcf63c949e403c2d0a00df7ed3a308d9266b * update contributing.md
* 5fa2e1d1e4f7372b5fbb4c79c215728778531bce * update contributing.md
* b74f92ed28bc4f14641cc993311d928034f10a87 A more neutral and elegant voice.Transcriber interface
* 6caee427bb4c4556ff06c17ded8b36a4c4364e8b Add WeCom AIBot channel implementation and tests
* 84ded81a8cee24f9bd3ef6c1fb1e624ad9695d56 Address Copilot review feedback for .env loading
* 8219b5a26fbb437ce98bce3e9b74b0e4847ac0e2 Address Copilot review feedback for Exa search provider
* 9c91d66427bef2475743336c3db6551e3cd17083 Address Copilot review feedback for Kimi/Opencode providers
* 2dccee5044665ed3a02bd19f4576654b22798fce Address Copilot review feedback for Telegram message chunking
* 33109a1676aa69150bcaabd46b30743538616b90 Address Copilot review: handle HTML expansion exceeding Telegram limit
* ead22368bde0c1e7049d97a1cd02cbf15730767d Enhance model selection and add footer navigation instructions (#1271)
* 6f5930624b1cfaea113279f637a45569eafa812b Feat/add tool enable or disable configuration (#1071)
* a2f63e4207828273d75dcf7771cdbd240facdc34 Fix HasProvidersConfig
* 4df413866381a7cc417e35c7d37c371241969db7 Fix Vivgrid docs and inference logic
* e6f546771182e0cdd6866b497a6f6d5e8c9d69d9 Fix golines for vivgrid case
* 494953fb780e86d82535fc475ad746ac9cf83fb7 Fix lint
* b1386ad71fbe43142b96deca018d73294df06fcc Fix voice transcription
* 2c3952b8c02d93774115adabe4eb452ac320d254 Fix: improve history compression with retry logic and multi-byte character support (#1167)
* cd500d2046c848768e884345501d3cb293a4dd85 Merge branch 'main' into feat/jsonl-memory-store
* 4a067cd9ed37fa1a792e1cbed07fdb410590500c Merge branch 'main' into feat/kimi-opencode-providers
* 9be6fb1a7d3165dc207ff76598758348356c24fe Merge branch 'main' into feat_discord_proxy
* b86bf5b7ea9ad38d41152de58feda2672bd602d5 Merge branch 'main' into fix/max-payload-size-in-web-fetch
* d867e86dbead31f9b63ba757c022c0cfc3adae09 Merge branch 'main' into mcp-tools-support
* 672da984e5d0d7902677ad6d80b7eb3af5dd155d Merge branch 'main' into mcp-tools-support
* acb974fcf1eef57a0dd3af6b834ba082de26b597 Merge branch 'main' into mcp-tools-support
* 257b0d82b52e8ad12f702a647b7702d0a8551f16 Merge branch 'main' into mcp-tools-support
* 4e348e39ac637f7466bdcf10809e3f2960810e31 Merge branch 'main' into mcp-tools-support
* c319db431e700e9c81e0ae6837fa926882d4202f Merge branch 'main' into telegram-bot-commands
* d49ce320104d9923690589d7be7972a2d02dc890 Merge branch 'main' into telegram-bot-commands
* 50d2616172a307e9085b1cc3bc7cba1184806ce1 Merge branch 'main' into telegram-bot-commands
* bebf4b0c1711c9ad11cbb1f544473246f8f7986f Merge branch 'main' into telegram-bot-commands
* aeed392c3f506f0236009a4b9f77ad28ddba1134 Merge branch 'main' into telegram-bot-commands
* 0f568aceb74f91d6e29ba564ce05cdec6a4ccd71 Merge branch 'sipeed:main' into fix/reload-config-selfkill-guard
* d0f627697e7b4d5015ac28afcba3551307dad4a1 Merge branch 'sipeed:main' into fix/reload-config-selfkill-guard
* cf68166cf2ef27d2e111e2382bb57abb7740fa8f Merge pull request #1000 from alexhoshina/main
* 227f22d28a5d49122d0e4676674ba052a9512dce Merge pull request #1002 from afjcjsbx/docs/mcp-http-server-example
* 3bb4f4ecc645f349005d1afd335956041874eee4 Merge pull request #1010 from sipeed/revert-990-feat/agent-vision-pipeline
* a65ccc0d1d63d208a945e04e755fdde9b97c1c3b Merge pull request #1020 from shikihane/feat/agent-vision-pipeline-v2
* 4a7605ee14bff076ca77c8916c6bd59930224566 Merge pull request #1024 from wangyanfu2/fix-TavilySearch-response
* 4d965f2c81b3aeffe4f478d720c8d2c41639d3ed Merge pull request #1047 from AaronJny/feat/discord-reply-context
* b075ee43d87007b166c3b180876411160244071e Merge pull request #1052 from imguoguo/update-wechat-qr
* 440d665baa2dcaff8422c0e645fc7921f351c12a Merge pull request #1075 from qs3c/fix/1068-html-response-error
* a00ecedeb6b0fc1e69144c5cafb14e4f8aec51e9 Merge pull request #1081 from rankaiyx/rankaiyx-patch-1
* 858e51da62cd0b2e20cb62c458c69b7e5c44a53d Merge pull request #1096 from Oceanpie/docs/summarize-config-example
* 81dfdf5f45d8f503189b9d7087c3e47e61b27c63 Merge pull request #1100 from zihan987/main
* 74b5af9e53932c11abb0af167b3eb049f3275c19 Merge pull request #1105 from cornjosh/fix/registry-flag-usage
* 464ae1846efaf1faf36e44075face87aa476594f Merge pull request #1106 from afjcjsbx/fix/prevent-audio-as-image-url
* 37380409870d8b985e812e548fd1a84145c76241 Merge pull request #1127 from mosir/fix/reload-config-selfkill-guard
* 445c32af4fb7ed9d20ba7a5e52d6cf58d1f57a3e Merge pull request #1135 from qs3c/fix/1134-clawhub-429-retry
* aeabbcf2e8ae0d17032ba767c8cf18fb7afb8c01 Merge pull request #1138 from amirmamaghani/feat/irc-channel
* 8581d46eaac0ecfc9678a33e5721bdf8c49c51b6 Merge pull request #1142 from mattn/fix/handle-io-readall-errors
* a32a4e007d264cbf3f6d82ab5c041771a925d65b Merge pull request #1143 from blib/bug/parallel-execution
* 23da4503c1743d4f07947b117b63622b2b527e80 Merge pull request #1145 from Esubaalew/fix/upstream-skills-global-toggle
* 651cb2ebdabe8506eac7c02417aa9b168975f32b Merge pull request #1155 from keithy/feature/picoclaw-home-env
* f600829158d91695dbfb62687a8c46eb560e3bb4 Merge pull request #1157 from wangyanfu2/fix-config-shell-command-exec-timeout
* 7ea7bb0717ed2573eac020a6efc64991bc94658f Merge pull request #1171 from mutezebra/feat/feishu-random-emoji-v2
* 4768edc67b459ca695894c026602bdd3fed3b3b3 Merge pull request #1215 from yinwm/refactor/agent
* b767ca9c3c64e7b34aa7b2ce45fc7cb0f02e3ad9 Merge pull request #1220 from horsley/feat/matrix-channel-support
* 0150947e61f167507d0d1271cbcef70b74402342 Merge pull request #282 from yuchou87/mcp-tools-support
* 25639168eaef2a6b11b42b05ca8f6abc1182ca54 Merge pull request #300 from mymmrac/telegram-bot-commands
* a3648aee1949da173671a977bc4f8a1f48149503 Merge pull request #534 from truongvinht/feat/searxng
* faec0261d052b8abb191d2cfe165bf123c29c71a Merge pull request #535 from xiaket/ci-enable-dupl-linter
* 8fddbaed4f74636d9960baa28768c19f0b6d9730 Merge pull request #682 from Esubaalew/fix/makefile-test-vet-generate
* 475d8f948bf55c1d7d3e39845da3de6e3bb7790a Merge pull request #727 from Esubaalew/fix/wecom-dedupe-race
* c8178f4ad4aea855693ca87b0bfcc74948efd7b6 Merge pull request #732 from is-Xiaoen/feat/jsonl-memory-store
* 325af2163b37f6252c496838a665e0b4210b0014 Merge pull request #844 from avianion/feat/add-avian-provider
* bea238c3378aeea7e6f4fcad57713a5bb94cf60a Merge pull request #853 from nayihz/feat_discord_proxy
* f7136b6a5de8bb05cc385da3499dbcbc90943af2 Merge pull request #861 from p3ddd/refactor/modernize
* 83dbff77851d0cec295648b5b94fbb6480658c81 Merge pull request #883 from afjcjsbx/fix/max-payload-size-in-web-fetch
* f2ab1a74da83a7aedce1756cbd7458a516778836 Merge pull request #893 from reevoid/rui-dev
* 9c9524f93497b025512e3fd33dc83bdc47b86ea0 Merge pull request #914 from alexhoshina/fix/wecom-context-canceled
* 3926585786b8757c7173d969f8f0ac9d922445b1 Merge pull request #916 from alexhoshina/fix/channel-config-cleanup
* 33f67e8275d9ae9b62010d7407d380de578f3f07 Merge pull request #918 from alexhoshina/fix/wecom-resource-leaks
* 826f92cf537f8dd04cfa990f78ecf2d2f5b82032 Merge pull request #935 from putueddy/feat/telegram-chunking
* 26d1b8e37461e64a1e82b4101ff5397bc3846c02 Merge pull request #946 from winterfx/fix/preserve-reasoning-content-in-history
* 3e5b849984c81b0b8071aa079ed40c29a75fa4b3 Merge pull request #947 from dim/fix/transcription
* 929589a025a5c9cf3027d62cf7beb59381013319 Merge pull request #987 from lxowalle/doc/update_contribute
* 12d4570a36672bf247312e4b1771926504a433ec Merge pull request #990 from shikihane/feat/agent-vision-pipeline
* 9b1e73de9c487d24820e70d1683e71281976b404 Merge pull request #994 from is-Xiaoen/feat/model-routing
* de2ccb5da4ab517c96bfef66f49a56a8b3d90edb Merge pull request #999 from yinwm/fix/mcp-race-condition-and-resource-leak
* b7aaa5b887c5bd7f61a29f7d177befde5faec35f Merge remote-tracking branch 'origin/feat/dotenv-loading' into deploy/pi-integration
* fe97387f0fbe1496b4242537fdc66383c4453dd7 Merge remote-tracking branch 'origin/feat/exa-search' into deploy/pi-integration
* c5d22984908fede913642bc6965d1482ea1a7fd0 Merge remote-tracking branch 'origin/feat/kimi-opencode-providers' into deploy/pi-integration
* 8ed351cf2827195fa5dd68a6b71fe7d2f9dad6b8 Merge remote-tracking branch 'origin/feat/telegram-chunking' into deploy/pi-integration
* 2580ef31ca9dc28e0d6ce14a4e74e75ef4d37bf5 Merge remote-tracking branch 'origin/main' into feat/searxng
* 69b1ae48d590f6df43201cf7125aec4d9ee70f73 Merge remote-tracking branch 'origin/main' into feat_discord_proxy
* 0c17c075da6e5cae378e9c4cc03c16ee05342ab1 Merge remote-tracking branch 'origin_picoclaw/main'
* 7308f0621bcd7b11d3be5645bd2cf011d8902597 Merge upstream main
* b15cff1266cb640603f0ceb2102f60fc152f1311 Merge upstream/main and resolve conflicts in .env.example
* 56ad77b7353df2ef6b77565112b101ddd7fb7d6d Merge upstream/main into feat/dotenv-loading
* 4599064f2a1699f5456ff834285b255a6314247e Merge upstream/main into feat/searxng
* e4daab8b09ca6e6d0ab3a16c4caad9ef14de0edf Merge upstream/main into feat/searxng
* 5dcd42e5d332ec4b8c6f2fce1def82bf3a62ca3f Merge upstream/main into fix/bugfixes
* 91f52c45861654788a6e0154d6a073f379a1112d Resolve merge conflicts
* d1cf6806572118ce4b5a03f7327ef902c108d170 Resolve merge conflicts
* 407707a7cccaf555fdc3d54b26c5f4a46467a41a Revert "feat(agent): add vision/image support to agent pipeline"
* 93689b82314a32a01fe6ffc431eca54affc2cf39 Update README.md
* 1ebfbc1c6bd1551c267f3fc1801bc759ad5efc6c Update docs/channels/line/README.zh.md
* 00ad6be7ea993fd7d45c4f9de7d89da72d095a59 Update pkg/agent/loop.go
* 8d2f2d67b2d57ad30f35df78b3ad612e69f42a08 Update pkg/channels/line/line.go
* e33712deff3be0b766d5d4490b646f22685aff06 Update pkg/channels/wecom/aibot.go
* 0b6d913dfca4b72f56703799c14809ef4cdc629f Update pkg/channels/wecom/aibot.go
* e88b39f21e6bb619b43081591be75a931897efe4 Update pkg/channels/wecom/aibot.go
* aa9ce6955b18574cc920907703fa22654c1078d4 Update pkg/channels/wecom/aibot.go
* ee2ebc8bf35141abc609457c92964baf73c08335 Update pkg/channels/wecom/app.go
* 42a32fbf3bb956340e59985f2d56f36fde4db1d8 Update pkg/channels/wecom/app.go
* ca4e44bd0feef193ae12dbb4bf53b731639ad52a Update pkg/channels/wecom/bot.go
* ea0b634b3b05681511bdfa4fc4bf7ba6886a0669 add Vivgrid config
* 42fc589a75258ec18b11e70cf5d84f5dd0b183e4 add Vivgrid config example to README
* e38364b08a60f9d586c3191ebcdf208b3eef07db build(docker): migrate full image from Debian to Alpine base
* 08d668c1657e3ddb03d173ecaf0f565585dfa401 chore(config): gofmt 格式化 FeishuConfig 字段对齐
* 4113190c2a981e9ac3f0ffd9738e6985797976c3 chore(config): remove example MCP servers from default config
* 91a633c009d2f0baf067e3cfa94140819d6282af chore(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 (#1200)
* 78aa45f107df063d44533d8aeb5391d573bda6b7 chore(deps): bump github.com/modelcontextprotocol/go-sdk (#1199)
* a026d56c0f7ce097e645693018ebff7965c32891 chore(deps): consolidate indirect require for uritemplate
* 87e0336d6271bfd97d056234a8a626ca25974405 chore(deps): format go.mod
* 24610693e4a9e6df3fbf615eab31cb7363c38e48 chore(docker): add execute permission to test script
* 109a382507dd894282983721ec2416fb61a0678c chore(feishu): add random_reaction_emoji to example config
* 92a0db4993d2e44a677421386b8ca524d55cfc67 chore(feishu): document reaction emoji option and promote filetype dep
* 559cef3d5b27d8f5f13cc839c43dac91f853041c chore: add h2non/filetype dependency for magic-bytes MIME detection
* 2a577f7a1d2aecb2eb50a0fb67cd95311b8891bf chore: alter env timezone from Asia/Tokyo to Asia/Shanghai (#1054)
* 077d7c8d9b04d84c7c8072f3f07bc7a6f5e24a50 chore: fix lint issues in mcp and agent packages
* a5d2e109bf5f0211bf4910aede4fbb4bfc08ae0b chore: merge main branch into mcp-tools-support
* 04ddb6b472e991a25fc05b6d3fba100649025d33 chore: remove accidentally committed local files
* 62bdece7f50dcbe6de586f042d8e41097f480824 chore: resolve conflicts with upstream/main
* b3946984ada6c7c158efee60341b9692bc712cca docs(config): expose summarization thresholds in config example
* 59e9c5545413626d11e3628f981503ea16e8f82d docs(config): restore MCP server examples in config.example.json
* 32c864c309a7717b0254f270444df11ade1868f8 enable dupl check
* 66e6fb6c79e6f3d1bbc6f714ba89c8c070f83096 feat(agent) fallback to reasoning content (#992)
* 18b36af9342b648b0dd1e2ba6d9f56866af76744 feat(agent): add resolveMediaRefs to convert media:// refs to base64 data URLs
* 6fd65825e731cf27a24b477bb5516dd2f2ea52b2 feat(agent): implement resolveMediaRefs with streaming base64 and filetype detection
* 6997edc82e1cd555187f982701d03ebc51e26bba feat(agent): wire Media through agent pipeline (cherry-pick PR #555)
* 43227411eedde9c35aa5de37d3f12b0745bf2cf9 feat(agent): wire media refs through agent pipeline to LLM provider
* 02e81923493712bd714fce8f63d08a79912bd97b feat(agent): wire model routing into the agent loop
* 23abbb67ea378d59d9384ce88bc32a1d1aa2ad9a feat(auth): add Anthropic OAuth setup-token login (#926)
* c3af1543db7664c704ef42c89ac93aa5fe56cfae feat(build): add MIPS32 LE (mipsle) cross-compilation support (#1051)
* 40b7b6ee4b7643c060c8a3dd71fc474d0027658c feat(channels): add IRC channel integration
* 41bb78f5939686235ac2cb4bd4bb50aaa44f11c6 feat(ci) govulncheck (#1086)
* ad9d5a3d19acc278c972a3b356f924e11abed1c6 feat(ci/cd) Add nightly build workflow (#1226)
* b716b8a053a4d1e163fc43f6832aa081fb748152 feat(commands): centralized command registry with sub-command routing (#959)
* d4bc28c11366b9f9b787ecd0d540591214f97473 feat(config): Add support for env var configuration (#896)
* c5a21b269f1d1487e89125228979b1dd0fcc4477 feat(config): add RoutingConfig to AgentDefaults
* 4c6c05a251895ad28cb7329664a3d028aa3d5948 feat(config): add configurable max_media_size with 20MB default
* 1945436dd44817bb3eca9919e63dc8d7f1325c25 feat(cron): add execution lifecycle logging (#1185)
* b5a4bb28b6f74de5df38143aeea7cfbecdaa9614 feat(discord): add proxy support and tests
* 922604fc7eeab69fc0ec5d073dc51573871b47ee feat(discord): resolve channel references and expand message links
* 465819e1c66c74b38ab86e2358f0159d1c86027d feat(discord): support referenced/quoted messages in replies
* ce3fc4bc67ee7362ff536516d43f5af826e2f61f feat(docker): add full-featured Docker image with MCP tools support
* 9f017d077e9bbec678ba64ff39e8e67762a846c3 feat(feishu): add random reaction emoji config
* c9fb681f3b2253142623ff4079dc5aaafa4ca3c0 feat(feishu): enhance channel with markdown cards, media, mentions, and editing
* c368b5b3599c918fb2c1c7cf99639b63c61264d9 feat(feishu,tools): add outbound media delivery via send_file tool (#1156)
* 91c168db2042998fa90ec993febf0cc2d0b3f75c feat(mcp): add Model Context Protocol integration
* b464687e2fc0578eb23f3e9be4aa20849d5bcaa4 feat(memory): add Compact method for physical JSONL compaction
* 32ec8cadeb039fca8430520bed8f45b9f4f3f1b0 feat(memory): define Store interface for session persistence
* 9f36e50807093181d13619b2f21d988f98553276 feat(memory): implement append-only JSONL session store
* 903681207ba3b423ee04d6a7056738dacbf75f08 feat(memory): support migration from legacy JSON sessions
* 03f7ae494f348ada4a7327486010a4ea88d05d9d feat(openai_compat): implement serializeMessages with multipart media support
* 6689c0b1c068a8149cb801b39cba959948a88272 feat(providers): add Media field to Message struct for vision support
* 82773fcd42151abf726d7693c49a384e277e9137 feat(release): add linux/s390x and linux/mipsle to goreleaser builds (#1265)
* f505f009df1d54a6d735170f870e9651cf1ceb08 feat(release): add macOS binary notarization via goreleaser (#1274)
* 1943c3e6602930880c2da90fb973d5e07dc98854 feat(routing): add language-agnostic model complexity scorer
* 1b1e472df25cf91f0a8ceb53d347ab5b4888b27a feat(telegram): Changed command scope
* 26bca10b81cfb47ae4903bfad469a90e5591eb02 feat(telegram): Do not fail on commands init
* 2bf467fbbe7479d45501b5843508c8bb22da97d6 feat(telegram): Fix conflicts
* b0c8fc4a7ed21657a56d487ac8636e6cdd2678eb feat(telegram): Fix conflicts
* d1a66cbf50ae2261f6c605f07f24a7e12ee1b905 feat(telegram): Fix text
* bfb9d8f644b19f774fb6c4139ff386608bbe88c8 feat(telegram): Init bot commands on start
* e1ba69293e144d3fdb486516f54c193d09eb6fee feat(telegram): Updated log message
* 1265655ef09427b26028b560d47643a9e83cb211 feat(telegram): add base_url support for custom Telegram Bot API server (#1021)
* b82bb9acc0b9a53b9a14c4d9a916778f9675b257 feat(tools): add GLM Search (智谱) web search provider (#1057)
* e55b3b7a8d0b1ea1522da08fd46155ee4f58b794 feat(web): migrate launcher to modular web frontend/backend and improve management UX (#1275)
* a25726e7981ba8b184b401c9f198b5525fb06a41 feat(wecom): add WeCom AI Bot integration and update documentation
* 4e09c91dda6ae1f2239b94b07d6e54b7e2b179cd feat(wecom-aibot): add context management for stream tasks to improve agent cancellation
* e894f8d39af59724e9d74b017b11ec417a6ef0f2 feat(wecom-aibot): add reasoning_channel_id to configuration and enhance message handling limits
* a87e6b0551593a466c3b3a863b5f4a8ebf7959ba feat(wecom-aibot): enhance stream task management with StreamClosedAt and improved cleanup logic
* e7d8975f1c3420733d1e34411c6f352c0e00b3d2 feat: Add SearXNG search provider support
* aaf99d7a308bb18edb34a89b64cfbb8c75929483 feat: add  /clear command to clear chat history (#1266)
* d9b4af797d55fd743d4f14cca8dd0e5b02047314 feat: add .env file loading and provider env overrides
* a4546ffb8f208f0b4b9f69262e20b3754c884279 feat: add Avian as a named LLM provider
* 4b7e8d9cb956c01a1b3bcdd88997fbe80f39b334 feat: add Exa AI search provider
* ec540312da9905f9f2ced6df268a8c3b19a333bd feat: add Kimi/Moonshot and Opencode provider support
* 946af6b53db371a1dba5a09ae52ca3c034d65086 feat: add LiteLLM provider alias support (#930)
* a66eac42c4997f3777fa62b8629c630e93b9cd20 feat: add Matrix channel support
* 3d54a77c407404e2043fa3af568fef5321a21ad8 feat: add Media field to Message struct and implement serializeMessages for vision API support
* 204038ec6022bfb362ef83821bce3192cbca4638 feat: add extended thinking support for Anthropic models (#1076)
* a6f42748708d4c5a28981366feadaf63ee136285 feat: add message chunking in Telegram Send method
* c3c293297df5f42f95162bd36b848d36c49f76d5 feat: add upload_tos toggle to release workflow (#1183)
* 028605cfd09d78c3db1c9f9fae65538f442a7c34 feat: execute LLM tool calls in parallel for faster response (#1070)
* 51e8479f996c48fdbce243bf1a13e2b08b19c804 feat: honor PICOCLAW_HOME env var for config, auth, and workspace paths
* df1b53fdf9baff1460e0a9dda72e5c9c775d3eff feat: make summarization message threshold and token percent configurable (#854) (#1029)
* 46201fb679021cca56580d44a66ae0e0bb262452 feat: upload release artifacts to Volcengine TOS (#1164)
* 7df7e0495cd6225f51ac50c11fd74cb5a3bc5e1e fix deepseek-chat bug (#1066)
* 2318232b71737ac100495ec86fdf0833fe379c4c fix(agent): ensure MCP cleanup on all Run() exit paths
* 3902061db141a7fe1cb7cb68d12eaf476cb49039 fix(agent): invalidate system prompt cache for global/builtin skills (#845)
* 0f6fadb445041aba56d04b764c6a3776b25427ff fix(agent): register MCP tools after server initialization
* f046ba59e80e6f901067513913490af83affa117 fix(agent): respect global skills toggle for skill tools
* ffa01986ce1513846f42d55bd8aab9d0bc3cd8fd fix(agent): scope MCP manager cleanup to successful initialization
* aed7296c0d95ff88683cce0b6733510fd5895f3a fix(agent): tie MCP connections to agent lifecycle context
* a7a4e88fff1af11d8a675588ab7ab7cae830d222 fix(agent): use fallback workspace path for MCP initialization
* 8ebeefc59f6f43954b9f4fd57b7359176aa9f715 fix(agent,openai_compat): address review feedback on vision pipeline
* cd955d730bbf0c9d16ab29de98ec469d1b9648f3 fix(ci): resolve linter and security check failures
* 38263333edf231d16cf93ce534cb752a04c28137 fix(discord): prevent cross-guild message leakage in link expansion
* e0616362fe65373906634f869fc4288ea82f411d fix(discord): prevent duplicate link expansion and add regex tests
* fcedba1c9df3aa47b704145af864e00f074ddc33 fix(docker): add profiles to build commands
* 1764181e6f40370c6fd8e37bfd6f5ecb48fdffb9 fix(docker): correct uv installation path
* 1c9c32022ed5ca15c12b552db7336499be332016 fix(docker): ensure uv is accessible in system PATH
* b9c2b3555a946f93c9c1941403b68a7afe04a29d fix(docker): override entrypoint in test script to avoid interactive mode
* e91e7169587674c4f8d928e2675d68ec5642275e fix(docker): use service names instead of --profile flag for build
* 4a87090fd9d95ebfe3597fb895fe3565f37c9871 fix(docs): update WeCom AI Bot task timeout duration in README
* 81f6787dd59eedcc4061045b222880276df60afc fix(docs): update WeCom AI Bot timeout duration in README and improve streamTask comments
* 5c599d2dacd2cbc471dc5d5af93fbc2df86041ad fix(exec): block kill command pattern in safety guard
* fa1cb9cc74230182aac0ebfef9cb745cbb7079f7 fix(feishu): address PR #1000 review comments from @xiaket
* 42eb6ea410569b7a003f240adcd55d519406445d fix(feishu): address review findings
* 595de7814d617687923671684f8b670a86c7d758 fix(feishu): remove dead fetchBotOpenID stub and fix misleading comment
* 0bee9d7bcf8839bedbd842913c342e65b2367c80 fix(feishu): resolve lint issues
* 6aa1d02fff77912490e0d9a03508f6476571ee42 fix(feishu): 用 crypto/rand 选择随机表情并修正示例配置
* f2a71ca8247c66d789fda19a29a52f3da91ba292 fix(lint): format imports in agent_id_test
* 6e16ac7f682a9f652e17912b01fd0be0440e86d8 fix(matrix): bound room cache and align temp media dir
* 64b99b34bb212195c13acd7280533b93068a2c25 fix(matrix): improve group mention detection
* fb2bfe4b3ce809a1f1afbddc5336eb6badf3a3d7 fix(matrix): satisfy golines in mention regex test
* 757741476181b6ed2b39cf1626c472eb069fe631 fix(mcp): ensure proper environment variable override semantics
* 246fdf3f33d48b7361f9623f1566a020c894a32c fix(mcp): guard against nil result from CallTool
* d2b3fc1dd03abae11e1f2ab15258c8b31a5598a8 fix(mcp): include server name and cause in Close() errors
* f1b798434d2f098d26b996a5f50995ffda9af1de fix(mcp): prevent race condition between CallTool and Close
* cfc29a1383a3cdc26cdd2a74c162fc0cd7dec6c7 fix(mcp): prevent use-after-close race between CallTool and Close
* 33058b534e50b6fe6507c1c2b5d53b1014893f09 fix(mcp): reject empty keys in loadEnvFile
* 78aba700d57e832d6efaa461565cb38579606375 fix(mcp): resolve TOCTOU race condition and resource leak
* a4265b3f163ef18cd664cffcdd5e18333fddc530 fix(mcp): resolve relative envFile paths against workspace directory
* 77d26e5ce32adebf31eb773d1dcb9ebabf57ae65 fix(mcp): return aggregated error when all servers fail to connect
* 16a3b96ddebe4b1d75db05a19c6f36f814823118 fix(mcp): validate workspace before resolving relative env_file
* 1f0b85280a5d93d01be4c7b76e72577ccbda515b fix(memory): always reconcile line count in TruncateHistory
* d55e5540af6de070d3b1b9750e825c3054c6a30f fix(memory): bound lock memory and increase scanner buffer
* f9f726c0c1c58aeac51f7ea4cbc138720bd37c31 fix(memory): fsync appended message for consistent durability
* e810331dd8d8875d440ffe2cff6d8f530a2b13b2 fix(memory): use SetHistory in migration for crash idempotency
* 9c72317b9b497671ebe0de8e38993f638e5fa056 fix(memory): write meta before JSONL rewrite for crash safety
* b3c3b02666bd188a7f0f62a7a086b23d1b52d634 fix(onboard): use AGENTS.md template instead of AGENT.md (#931)
* a305c0a4790d39590592f529a883386b9db83316 fix(openai_compat): avoid predeclared identifier in preview
* 4946a8b449a963cbe04c1719f88f07d95f692f29 fix(openai_compat): clarify HTML response errors
* 9216cd14b5a7bc39b92eb94011cddb4386834f83 fix(openai_compat): handle html error bodies and reduce allocations
* a4e5c391bd67357a52936e1e3081b97a01edffb8 fix(openai_compat): preserve reasoning_content in serializeMessages
* d6e88da8ba22221a434c7d0d582acbf48320a53f fix(pkg):do regex precompile insteadd on the fly (#911)
* b84adacc2f302aa68c3ccd88bc5815ff51904273 fix(routing): address review feedback on CJK estimation and observability
* 09e68cb63bd2ee556adcc1f559dd0e8019b3af37 fix(routing): resolve golines, gosmopolitan and misspell lint failures
* fb2b5940600c03349787a4147264f32133de5e92 fix(scripts): specify service name in docker compose build
* 7a2fdc24dc202012db849722ba92df8238257b3e fix(skills): retry ClawHub requests on 429
* ab120af64906537409c297c9c56d1bf80492926e fix(skills): use --registry flag value as registry name
* cadcdc0b4155d0b43916445e0c5d6fe164e4e053 fix(skills): use registry-backed search for skills discovery (#929)
* d5370c9605c4f007373272ec628f41a34b681eae fix(tools): allow /dev/null redirection and add read/write sandbox split (#967)
* 44a52c0cf646beee1522b85c67777df5fdba0386 fix(tools): close resp.Body on retry cancel and cache http.Client instances (#940)
* e0d2be35c257097cb9c1ade8ee0768f45b90fb5e fix(tools): make exec tool timeout configurable via config
* 02c1792015baf4ed0e0f23c7f78e4373fa316959 fix(tools): preserve MCP tool InputSchema via JSON marshal/unmarshal
* 8640c8177ca544558fa6c89eeb76b72e084c7fd9 fix(wecom): correctly retain boundary message during dedupe map rotation
* e9b48865734008f22284b19bdce7c6aadc9b2700 fix(wecom): fix context leak in Start() and data race in processedMsgs
* edd339e05603d187db0e7bad65462b393aa3d660 fix(wecom): handle empty response by encrypting and returning a default response
* 79b7fb7792fd8cce890c273a25b7c2a79735cb7b fix(wecom): improve error handling in sendViaResponseURL and remove task on failure
* 619948f8ff59a30c4c8ef91bd3ece7d7bc051b80 fix(wecom): improve error message for response_url delivery failure
* 8e06e2adbd08395f7cce100e164c314ec9a37a68 fix(wecom): initialize context in constructors to prevent nil panic in tests
* 18d89937ad487bd467b64aa798e5ec4560adecb7 fix(wecom): remove message-dedupe data races in bot/app channels
* 29e9b6b4b5c1d6055b4e1e695c83faf1324b383e fix(wecom): replace dedupe map rotation with circular queue
* 2e0be9277660b33b4017b0c0f5e4f388ac54ac75 fix(wecom): resolve upstream rebase conflicts after channel refactor
* 55c556a4c5cb9c57b2af54c4d4133563bc0b89a7 fix(wecom): update CanonicalID generation to use identity.BuildCanonicalID for consistency
* 62f59f76e3aaea62e7e9066926db010366af1ca5 fix(wecom): use channel context instead of HTTP request context for async message processing
* c7d4012fc9ab678168a7418d962fa7b8b9163ceb fix(wecom-aibot): correct variable name in JSON parsing in message callback handler
* 7de4cc5ebde197bd89b3ba9e1ad772797ac8abfe fix: add HTTP status code check in BraveSearchProvider
* e503c87c18e7e02bc9c3dbc13f43b279f0cca469 fix: add LiteLLM to env overrides and fix malformed .env test
* 89bc7aaea51ff2bfa1d1a14a2781e2d9906d1467 fix: add generate dependency to test and vet Makefile targets
* 2fc87985d2b43b5482d4be021d08e9911ce4c737 fix: add kimi-code migration alias and User-Agent test
* 81aeaf1ca026420147381ba19c1c7309cc6b7ade fix: address Copilot review feedback on PR #932
* ef738f478741baeba5c8fe77d69a8b76a981a935 fix: address PR review feedback for MCP tools support
* a89ba06cb8453a6d4f0e8f01f40334a725a6bfe2 fix: address review feedback from @mengzhuo
* 968fff07b9254e3f8b402a92cdeb8f23b65f2786 fix: background task results silently dropped
* 0eec640c3763a4e3691dfc940348f71da4e324a4 fix: correct MCP server install test in test-docker-mcp.sh
* ac37d6b6264fb40941fe1b355509064a254dff4d fix: disable closing custom model dialog by clicking backdrop (#1180)
* aef1e8e8c489f427558d2004b1aecae68808d77a fix: eliminate data races on shared tool instances (#1080)
* b26337501cbe2ea871fd3ccc130c866681fcd157 fix: error check on state (#864)
* df53f4411ac5f7f7b41d9ddbaa060a0ed014a30a fix: format long lines in telegram_test.go to satisfy golines linter
* 943385105fc432ec7e09c75aedb16d77050bc788 fix: handle ignored io.ReadAll errors across codebase
* 7f6d95c026703835cd72f5613a456b0a4b4eacc7 fix: handle zero values in cron schedule type assertions (#1147)
* a2591e03a942ae244b50539d4b9d26da3a0b3d58 fix: improve MCP tool name collision safety and registry overwrite warning
* c1a3876f7de9251412ddc71a42530482d80334b1 fix: improve error handling for non-JSON responses by checking content type and using a streaming JSON parser.
* 71bdeb41c988f0360e9bceca209a02f8e6ecd5a4 fix: improve error handling in GitHub Copilot provider (#919)
* 6eaa49f7ab1f488ba8b3df39539cb191339b0799 fix: improve openai compat HTML response handling
* a9a307584b02d97503368f3902781a4370a4b585 fix: max payload size in web fetch
* ee5b61884a3ba11edef4b6376ae8fb39d3b0db6b fix: migration ModelName, reasoning_content, shell regex, loop boundary
* 3de4cb863babcf3077ea6c8a35a5ade31b00962f fix: pass original markdown to sendHTMLChunk for plain-text fallback
* 9efdde25ad7fc63ccb869c4601c469491b6d31c7 fix: preserve reasoning_content in multi-turn conversation history
* f07dbd1db2d88fd270bab07aea119e8861b5ba71 fix: remove redundant SplitMessage in Send() per review feedback
* 1604582a411419812c1c9552081b588318443ff2 fix: resolve gci lint errors in IRC channel files
* b8782729623e55ab09a985259fd46c5c7ee0d95a fix: resolve govet shadow and golines lint errors in wecom channels
* 6ccb68c63e8daccec339f6ec02b7b87ecc8334b1 fix: resolve linter issues (gci import grouping, gofumpt, govet shadow)
* 03d6ad420f573b4eff138c561ef79d564f3eeef1 fix: resolve merge conflicts in wecom error handling
* 53cba73283e53e1bf6933cf01a42de3b696bc298 fix: resolve openai compat lint issues
* ba4b7026754cac04fd00e92218ed5ed908051f25 fix: retryLLM return empty (#1264)
* fc9f1ec921564c15922e76715cbddcfd0d710abb fix: return fetched content to LLM in web_fetch tool (#833)
* 0e810a2ec4cd3cee813d3046c946ff11660996da fix: tighten HTML-expansion test to stay under chunk size
* 0c97cb30d84dfeb6b273c64bf6fe15abeea7a57a fix: update provider count in migration test to include Avian
* bd0018a5d78bfa9563391452b2843222e65821f7 fix: use queue-based re-splitting for HTML expansion validation
* a521a4916221daced2533738ddf4d0e83ce59d3e fix:fix cmd example (#1166)
* e0667304d1f57065cad8facbb53083ff218ac5a2 fixed conflicts
* dea381c38567fc242df0f3fd8d64172134712f67 improve(agent): clarify MCP tool registration logging
* 23bb0828b18eb343a99f9c94bdc3da648da76d3c mcp http server example
* 1a922c96a8b3b66308b357b0204d9fe706cc65f3 merge: resolve conflict with main in loop.go
* d257f1aaefd658fce771b10f5171644ea2c6b81a merge: resolve conflict with upstream/main in provider_test.go
* 11017ac7ba6775d823883098ac6cf252f5e9edab merge: resolve conflicts with upstream/main
* e433bb8b7f61714e0333f7ce8b78ac2b7c9810d9 merge: resolve conflicts with upstream/main
* b88e590c6ce0040805c2e3045c30dfcae0da1ae9 moved fetch limit bytes in config file
* 11dbc301f927ce7299df222996d5d83484647179 perf(agent): cache ListAgentIDs() result before MCP tool registration loop
* 6892d006d680902b32e07743434101db4cafec92 perf(agent): reduce memory footprint by storing minimal MCP dependencies
* b9ee9b33f50dd460d0bb56d212d15c0c9fe04b03 prevent audio as image url
* 23f48d7c4e76c3b4bda281b5f2bc4bce3af364ee refactor(aibot): remove downloadAndDecryptImage function to streamline image handling
* d4824a00b6756c0bb67be670014d3cfb091fc5ef refactor(config): remove WebhookHost and WebhookPort from WeComAIBotConfig
* c3e029061b1d084394f23a3480430c24c5799b97 refactor(discord): self-review fixes for resolveDiscordRefs
* c05742330dd7193eddd00b84d97ea226e0fafe83 refactor(docker): migrate to docker compose v2 syntax
* 51ed54a41410479ba9114acce4ee4d7bb66504ed refactor(docker): switch to node:24-bookworm-slim base image
* bf4445f1f333194c4b8381752f13fbef273efd9e refactor(docs): remove webhook_host and webhook_port from configuration examples
* 6d894d6138cb89a8bc714d69b03c9a6a14cb03d7 refactor(memory): use fileutil.WriteFileAtomic and log corrupt lines
* 5d73ee2d9a72c27233cbb27a305d128130228944 refactor(memory): use sync.Map for session locks and skip-scan in readMessages
* 222d1a30864ab451221a54309747d73794fbb90c refactor(modernize): apply safe modernize fixes
* 536e9ac9de6aadf97ea23fbe21f7c6126589a625 refactor(skills): reuse shared HTTP retry helper
* aa2d6b39f523a0e606c38609d2195bd5ed7e918f refactor(tools): remove redundant kill -9 pattern
* 20f8bb200b84a2350bc38387cad53816de281ef0 refactor(tools): use MCPManager interface in NewMCPTool constructor
* 8f3d611a4c56f43be7d76ff65e8d7b82d8fe5e98 refactor(wecom): replace generateSignature with computeSignature and update related tests
* 79bc06c0ba7caac36a872a5667185da7b5d8f92e refactor(wecom): simplify stream message structure by introducing WeComAIBotMsgItem and WeComAIBotMsgItemImage types
* 880c402ab7025fd2a65bda487486c854c52647f5 refactor(wecom): streamline AES encryption/decryption and improve task management logic
* e54b1d39a5bf1991f150ae9230631a37d3f3017c refactor: parse Kimi API hostname once in constructor instead of per-call
* 434b03ed677578dfe2270262e8cfa0ebe77cda24 remove wrapper methods
* f0ce26ff2bfdf0f3a05743ca43594d022689760d style(config): use snake_case for EnvFile JSON field name
* 65e1434e1b2690c72c83ade2969e740766e6c2a3 style: fix gofmt formatting in ExecConfig struct
* de0f15d548f7a62521531423083e38a58b12fb1a style: fix golines struct tag alignment in SearXNGConfig
* 47533a00cd5ca796aeb1a43d1ed80f93fdaf4d5e style: format code with gofmt
* 8bd1935efb7392f74dd76f6b1cf0436761053c51 telegram: lower MaxMessageLength to 4000 for HTML expansion margin
* c10959b645dd70930e5791c5f10a8237cf443309 test(irc): add unit tests for IRC channel
* 4e330b297c99a3f5c1e44869b84028b8069ca433 test(mcp): add manager behavior and lifecycle unit tests
* 529622b7d3d49d068f332a3a1ecef7eee2848bf1 test(memory): add unit, concurrency, and benchmark tests
* 1e2ab4a5e51b08536c76ba4b0783ad560b6971c6 test(wecom): add dedupe helper coverage and align constant usage
* db17cdc86deeb37927ed39e11919dabfcca0a03c test(wecom): align dedupe rotation behavior and add helper tests


---
Released by [GoReleaser](https://github.com/goreleaser/goreleaser).