Changelog
- 435223f * Add new style banner for picoclaw and picoclaw-launcher-tui (#1008)
- abafa3c * add minimax provider (#1273)
- 4402fcf * update contributing.md
- 5fa2e1d * update contributing.md
- b74f92e A more neutral and elegant voice.Transcriber interface
- 6caee42 Add WeCom AIBot channel implementation and tests
- 84ded81 Address Copilot review feedback for .env loading
- 8219b5a Address Copilot review feedback for Exa search provider
- 9c91d66 Address Copilot review feedback for Kimi/Opencode providers
- 2dccee5 Address Copilot review feedback for Telegram message chunking
- 33109a1 Address Copilot review: handle HTML expansion exceeding Telegram limit
- ead2236 Enhance model selection and add footer navigation instructions (#1271)
- 6f59306 Feat/add tool enable or disable configuration (#1071)
- a2f63e4 Fix HasProvidersConfig
- 4df4138 Fix Vivgrid docs and inference logic
- e6f5467 Fix golines for vivgrid case
- 494953f Fix lint
- b1386ad Fix voice transcription
- 2c3952b Fix: improve history compression with retry logic and multi-byte character support (#1167)
- cd500d2 Merge branch 'main' into feat/jsonl-memory-store
- 4a067cd Merge branch 'main' into feat/kimi-opencode-providers
- 9be6fb1 Merge branch 'main' into feat_discord_proxy
- b86bf5b Merge branch 'main' into fix/max-payload-size-in-web-fetch
- d867e86 Merge branch 'main' into mcp-tools-support
- 672da98 Merge branch 'main' into mcp-tools-support
- acb974f Merge branch 'main' into mcp-tools-support
- 257b0d8 Merge branch 'main' into mcp-tools-support
- 4e348e3 Merge branch 'main' into mcp-tools-support
- c319db4 Merge branch 'main' into telegram-bot-commands
- d49ce32 Merge branch 'main' into telegram-bot-commands
- 50d2616 Merge branch 'main' into telegram-bot-commands
- bebf4b0 Merge branch 'main' into telegram-bot-commands
- aeed392 Merge branch 'main' into telegram-bot-commands
- 0f568ac Merge branch 'sipeed:main' into fix/reload-config-selfkill-guard
- d0f6276 Merge branch 'sipeed:main' into fix/reload-config-selfkill-guard
- cf68166 Merge pull request #1000 from alexhoshina/main
- 227f22d Merge pull request #1002 from afjcjsbx/docs/mcp-http-server-example
- 3bb4f4e Merge pull request #1010 from sipeed/revert-990-feat/agent-vision-pipeline
- a65ccc0 Merge pull request #1020 from shikihane/feat/agent-vision-pipeline-v2
- 4a7605e Merge pull request #1024 from wangyanfu2/fix-TavilySearch-response
- 4d965f2 Merge pull request #1047 from AaronJny/feat/discord-reply-context
- b075ee4 Merge pull request #1052 from imguoguo/update-wechat-qr
- 440d665 Merge pull request #1075 from qs3c/fix/1068-html-response-error
- a00eced Merge pull request #1081 from rankaiyx/rankaiyx-patch-1
- 858e51d Merge pull request #1096 from Oceanpie/docs/summarize-config-example
- 81dfdf5 Merge pull request #1100 from zihan987/main
- 74b5af9 Merge pull request #1105 from cornjosh/fix/registry-flag-usage
- 464ae18 Merge pull request #1106 from afjcjsbx/fix/prevent-audio-as-image-url
- 3738040 Merge pull request #1127 from mosir/fix/reload-config-selfkill-guard
- 445c32a Merge pull request #1135 from qs3c/fix/1134-clawhub-429-retry
- aeabbcf Merge pull request #1138 from amirmamaghani/feat/irc-channel
- 8581d46 Merge pull request #1142 from mattn/fix/handle-io-readall-errors
- a32a4e0 Merge pull request #1143 from blib/bug/parallel-execution
- 23da450 Merge pull request #1145 from Esubaalew/fix/upstream-skills-global-toggle
- 651cb2e Merge pull request #1155 from keithy/feature/picoclaw-home-env
- f600829 Merge pull request #1157 from wangyanfu2/fix-config-shell-command-exec-timeout
- 7ea7bb0 Merge pull request #1171 from mutezebra/feat/feishu-random-emoji-v2
- 4768edc Merge pull request #1215 from yinwm/refactor/agent
- b767ca9 Merge pull request #1220 from horsley/feat/matrix-channel-support
- 0150947 Merge pull request #282 from yuchou87/mcp-tools-support
- 2563916 Merge pull request #300 from mymmrac/telegram-bot-commands
- a3648ae Merge pull request #534 from truongvinht/feat/searxng
- faec026 Merge pull request #535 from xiaket/ci-enable-dupl-linter
- 8fddbae Merge pull request #682 from Esubaalew/fix/makefile-test-vet-generate
- 475d8f9 Merge pull request #727 from Esubaalew/fix/wecom-dedupe-race
- c8178f4 Merge pull request #732 from is-Xiaoen/feat/jsonl-memory-store
- 325af21 Merge pull request #844 from avianion/feat/add-avian-provider
- bea238c Merge pull request #853 from nayihz/feat_discord_proxy
- f7136b6 Merge pull request #861 from p3ddd/refactor/modernize
- 83dbff7 Merge pull request #883 from afjcjsbx/fix/max-payload-size-in-web-fetch
- f2ab1a7 Merge pull request #893 from reevoid/rui-dev
- 9c9524f Merge pull request #914 from alexhoshina/fix/wecom-context-canceled
- 3926585 Merge pull request #916 from alexhoshina/fix/channel-config-cleanup
- 33f67e8 Merge pull request #918 from alexhoshina/fix/wecom-resource-leaks
- 826f92c Merge pull request #935 from putueddy/feat/telegram-chunking
- 26d1b8e Merge pull request #946 from winterfx/fix/preserve-reasoning-content-in-history
- 3e5b849 Merge pull request #947 from dim/fix/transcription
- 929589a Merge pull request #987 from lxowalle/doc/update_contribute
- 12d4570 Merge pull request #990 from shikihane/feat/agent-vision-pipeline
- 9b1e73d Merge pull request #994 from is-Xiaoen/feat/model-routing
- de2ccb5 Merge pull request #999 from yinwm/fix/mcp-race-condition-and-resource-leak
- b7aaa5b Merge remote-tracking branch 'origin/feat/dotenv-loading' into deploy/pi-integration
- fe97387 Merge remote-tracking branch 'origin/feat/exa-search' into deploy/pi-integration
- c5d2298 Merge remote-tracking branch 'origin/feat/kimi-opencode-providers' into deploy/pi-integration
- 8ed351c Merge remote-tracking branch 'origin/feat/telegram-chunking' into deploy/pi-integration
- 2580ef3 Merge remote-tracking branch 'origin/main' into feat/searxng
- 69b1ae4 Merge remote-tracking branch 'origin/main' into feat_discord_proxy
- 0c17c07 Merge remote-tracking branch 'origin_picoclaw/main'
- 7308f06 Merge upstream main
- b15cff1 Merge upstream/main and resolve conflicts in .env.example
- 56ad77b Merge upstream/main into feat/dotenv-loading
- 4599064 Merge upstream/main into feat/searxng
- e4daab8 Merge upstream/main into feat/searxng
- 5dcd42e Merge upstream/main into fix/bugfixes
- 91f52c4 Resolve merge conflicts
- d1cf680 Resolve merge conflicts
- 407707a Revert "feat(agent): add vision/image support to agent pipeline"
- 93689b8 Update README.md
- 1ebfbc1 Update docs/channels/line/README.zh.md
- 00ad6be Update pkg/agent/loop.go
- 8d2f2d6 Update pkg/channels/line/line.go
- e33712d Update pkg/channels/wecom/aibot.go
- 0b6d913 Update pkg/channels/wecom/aibot.go
- e88b39f Update pkg/channels/wecom/aibot.go
- aa9ce69 Update pkg/channels/wecom/aibot.go
- ee2ebc8 Update pkg/channels/wecom/app.go
- 42a32fb Update pkg/channels/wecom/app.go
- ca4e44b Update pkg/channels/wecom/bot.go
- ea0b634 add Vivgrid config
- 42fc589 add Vivgrid config example to README
- e38364b build(docker): migrate full image from Debian to Alpine base
- 08d668c chore(config): gofmt 格式化 FeishuConfig 字段对齐
- 4113190 chore(config): remove example MCP servers from default config
- 91a633c chore(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 (#1200)
- 78aa45f chore(deps): bump github.com/modelcontextprotocol/go-sdk (#1199)
- a026d56 chore(deps): consolidate indirect require for uritemplate
- 87e0336 chore(deps): format go.mod
- 2461069 chore(docker): add execute permission to test script
- 109a382 chore(feishu): add random_reaction_emoji to example config
- 92a0db4 chore(feishu): document reaction emoji option and promote filetype dep
- 559cef3 chore: add h2non/filetype dependency for magic-bytes MIME detection
- 2a577f7 chore: alter env timezone from Asia/Tokyo to Asia/Shanghai (#1054)
- 077d7c8 chore: fix lint issues in mcp and agent packages
- a5d2e10 chore: merge main branch into mcp-tools-support
- 04ddb6b chore: remove accidentally committed local files
- 62bdece chore: resolve conflicts with upstream/main
- b394698 docs(config): expose summarization thresholds in config example
- 59e9c55 docs(config): restore MCP server examples in config.example.json
- 32c864c enable dupl check
- 66e6fb6 feat(agent) fallback to reasoning content (#992)
- 18b36af feat(agent): add resolveMediaRefs to convert media:// refs to base64 data URLs
- 6fd6582 feat(agent): implement resolveMediaRefs with streaming base64 and filetype detection
- 6997edc feat(agent): wire Media through agent pipeline (cherry-pick PR #555)
- 4322741 feat(agent): wire media refs through agent pipeline to LLM provider
- 02e8192 feat(agent): wire model routing into the agent loop
- 23abbb6 feat(auth): add Anthropic OAuth setup-token login (#926)
- c3af154 feat(build): add MIPS32 LE (mipsle) cross-compilation support (#1051)
- 40b7b6e feat(channels): add IRC channel integration
- 41bb78f feat(ci) govulncheck (#1086)
- ad9d5a3 feat(ci/cd) Add nightly build workflow (#1226)
- b716b8a feat(commands): centralized command registry with sub-command routing (#959)
- d4bc28c feat(config): Add support for env var configuration (#896)
- c5a21b2 feat(config): add RoutingConfig to AgentDefaults
- 4c6c05a feat(config): add configurable max_media_size with 20MB default
- 1945436 feat(cron): add execution lifecycle logging (#1185)
- b5a4bb2 feat(discord): add proxy support and tests
- 922604f feat(discord): resolve channel references and expand message links
- 465819e feat(discord): support referenced/quoted messages in replies
- ce3fc4b feat(docker): add full-featured Docker image with MCP tools support
- 9f017d0 feat(feishu): add random reaction emoji config
- c9fb681 feat(feishu): enhance channel with markdown cards, media, mentions, and editing
- c368b5b feat(feishu,tools): add outbound media delivery via send_file tool (#1156)
- 91c168d feat(mcp): add Model Context Protocol integration
- b464687 feat(memory): add Compact method for physical JSONL compaction
- 32ec8ca feat(memory): define Store interface for session persistence
- 9f36e50 feat(memory): implement append-only JSONL session store
- 9036812 feat(memory): support migration from legacy JSON sessions
- 03f7ae4 feat(openai_compat): implement serializeMessages with multipart media support
- 6689c0b feat(providers): add Media field to Message struct for vision support
- 82773fc feat(release): add linux/s390x and linux/mipsle to goreleaser builds (#1265)
- f505f00 feat(release): add macOS binary notarization via goreleaser (#1274)
- 1943c3e feat(routing): add language-agnostic model complexity scorer
- 1b1e472 feat(telegram): Changed command scope
- 26bca10 feat(telegram): Do not fail on commands init
- 2bf467f feat(telegram): Fix conflicts
- b0c8fc4 feat(telegram): Fix conflicts
- d1a66cb feat(telegram): Fix text
- bfb9d8f feat(telegram): Init bot commands on start
- e1ba692 feat(telegram): Updated log message
- 1265655 feat(telegram): add base_url support for custom Telegram Bot API server (#1021)
- b82bb9a feat(tools): add GLM Search (智谱) web search provider (#1057)
- e55b3b7 feat(web): migrate launcher to modular web frontend/backend and improve management UX (#1275)
- a25726e feat(wecom): add WeCom AI Bot integration and update documentation
- 4e09c91 feat(wecom-aibot): add context management for stream tasks to improve agent cancellation
- e894f8d feat(wecom-aibot): add reasoning_channel_id to configuration and enhance message handling limits
- a87e6b0 feat(wecom-aibot): enhance stream task management with StreamClosedAt and improved cleanup logic
- e7d8975 feat: Add SearXNG search provider support
- aaf99d7 feat: add /clear command to clear chat history (#1266)
- d9b4af7 feat: add .env file loading and provider env overrides
- a4546ff feat: add Avian as a named LLM provider
- 4b7e8d9 feat: add Exa AI search provider
- ec54031 feat: add Kimi/Moonshot and Opencode provider support
- 946af6b feat: add LiteLLM provider alias support (#930)
- a66eac4 feat: add Matrix channel support
- 3d54a77 feat: add Media field to Message struct and implement serializeMessages for vision API support
- 204038e feat: add extended thinking support for Anthropic models (#1076)
- a6f4274 feat: add message chunking in Telegram Send method
- c3c2932 feat: add upload_tos toggle to release workflow (#1183)
- 028605c feat: execute LLM tool calls in parallel for faster response (#1070)
- 51e8479 feat: honor PICOCLAW_HOME env var for config, auth, and workspace paths
- df1b53f feat: make summarization message threshold and token percent configurable (#854) (#1029)
- 46201fb feat: upload release artifacts to Volcengine TOS (#1164)
- 7df7e04 fix deepseek-chat bug (#1066)
- 2318232 fix(agent): ensure MCP cleanup on all Run() exit paths
- 3902061 fix(agent): invalidate system prompt cache for global/builtin skills (#845)
- 0f6fadb fix(agent): register MCP tools after server initialization
- f046ba5 fix(agent): respect global skills toggle for skill tools
- ffa0198 fix(agent): scope MCP manager cleanup to successful initialization
- aed7296 fix(agent): tie MCP connections to agent lifecycle context
- a7a4e88 fix(agent): use fallback workspace path for MCP initialization
- 8ebeefc fix(agent,openai_compat): address review feedback on vision pipeline
- cd955d7 fix(ci): resolve linter and security check failures
- 3826333 fix(discord): prevent cross-guild message leakage in link expansion
- e061636 fix(discord): prevent duplicate link expansion and add regex tests
- fcedba1 fix(docker): add profiles to build commands
- 1764181 fix(docker): correct uv installation path
- 1c9c320 fix(docker): ensure uv is accessible in system PATH
- b9c2b35 fix(docker): override entrypoint in test script to avoid interactive mode
- e91e716 fix(docker): use service names instead of --profile flag for build
- 4a87090 fix(docs): update WeCom AI Bot task timeout duration in README
- 81f6787 fix(docs): update WeCom AI Bot timeout duration in README and improve streamTask comments
- 5c599d2 fix(exec): block kill command pattern in safety guard
- fa1cb9c fix(feishu): address PR #1000 review comments from @xiaket
- 42eb6ea fix(feishu): address review findings
- 595de78 fix(feishu): remove dead fetchBotOpenID stub and fix misleading comment
- 0bee9d7 fix(feishu): resolve lint issues
- 6aa1d02 fix(feishu): 用 crypto/rand 选择随机表情并修正示例配置
- f2a71ca fix(lint): format imports in agent_id_test
- 6e16ac7 fix(matrix): bound room cache and align temp media dir
- 64b99b3 fix(matrix): improve group mention detection
- fb2bfe4 fix(matrix): satisfy golines in mention regex test
- 7577414 fix(mcp): ensure proper environment variable override semantics
- 246fdf3 fix(mcp): guard against nil result from CallTool
- d2b3fc1 fix(mcp): include server name and cause in Close() errors
- f1b7984 fix(mcp): prevent race condition between CallTool and Close
- cfc29a1 fix(mcp): prevent use-after-close race between CallTool and Close
- 33058b5 fix(mcp): reject empty keys in loadEnvFile
- 78aba70 fix(mcp): resolve TOCTOU race condition and resource leak
- a4265b3 fix(mcp): resolve relative envFile paths against workspace directory
- 77d26e5 fix(mcp): return aggregated error when all servers fail to connect
- 16a3b96 fix(mcp): validate workspace before resolving relative env_file
- 1f0b852 fix(memory): always reconcile line count in TruncateHistory
- d55e554 fix(memory): bound lock memory and increase scanner buffer
- f9f726c fix(memory): fsync appended message for consistent durability
- e810331 fix(memory): use SetHistory in migration for crash idempotency
- 9c72317 fix(memory): write meta before JSONL rewrite for crash safety
- b3c3b02 fix(onboard): use AGENTS.md template instead of AGENT.md (#931)
- a305c0a fix(openai_compat): avoid predeclared identifier in preview
- 4946a8b fix(openai_compat): clarify HTML response errors
- 9216cd1 fix(openai_compat): handle html error bodies and reduce allocations
- a4e5c39 fix(openai_compat): preserve reasoning_content in serializeMessages
- d6e88da fix(pkg):do regex precompile insteadd on the fly (#911)
- b84adac fix(routing): address review feedback on CJK estimation and observability
- 09e68cb fix(routing): resolve golines, gosmopolitan and misspell lint failures
- fb2b594 fix(scripts): specify service name in docker compose build
- 7a2fdc2 fix(skills): retry ClawHub requests on 429
- ab120af fix(skills): use --registry flag value as registry name
- cadcdc0 fix(skills): use registry-backed search for skills discovery (#929)
- d5370c9 fix(tools): allow /dev/null redirection and add read/write sandbox split (#967)
- 44a52c0 fix(tools): close resp.Body on retry cancel and cache http.Client instances (#940)
- e0d2be3 fix(tools): make exec tool timeout configurable via config
- 02c1792 fix(tools): preserve MCP tool InputSchema via JSON marshal/unmarshal
- 8640c81 fix(wecom): correctly retain boundary message during dedupe map rotation
- e9b4886 fix(wecom): fix context leak in Start() and data race in processedMsgs
- edd339e fix(wecom): handle empty response by encrypting and returning a default response
- 79b7fb7 fix(wecom): improve error handling in sendViaResponseURL and remove task on failure
- 619948f fix(wecom): improve error message for response_url delivery failure
- 8e06e2a fix(wecom): initialize context in constructors to prevent nil panic in tests
- 18d8993 fix(wecom): remove message-dedupe data races in bot/app channels
- 29e9b6b fix(wecom): replace dedupe map rotation with circular queue
- 2e0be92 fix(wecom): resolve upstream rebase conflicts after channel refactor
- 55c556a fix(wecom): update CanonicalID generation to use identity.BuildCanonicalID for consistency
- 62f59f7 fix(wecom): use channel context instead of HTTP request context for async message processing
- c7d4012 fix(wecom-aibot): correct variable name in JSON parsing in message callback handler
- 7de4cc5 fix: add HTTP status code check in BraveSearchProvider
- e503c87 fix: add LiteLLM to env overrides and fix malformed .env test
- 89bc7aa fix: add generate dependency to test and vet Makefile targets
- 2fc8798 fix: add kimi-code migration alias and User-Agent test
- 81aeaf1 fix: address Copilot review feedback on PR #932
- ef738f4 fix: address PR review feedback for MCP tools support
- a89ba06 fix: address review feedback from @mengzhuo
- 968fff0 fix: background task results silently dropped
- 0eec640 fix: correct MCP server install test in test-docker-mcp.sh
- ac37d6b fix: disable closing custom model dialog by clicking backdrop (#1180)
- aef1e8e fix: eliminate data races on shared tool instances (#1080)
- b263375 fix: error check on state (#864)
- df53f44 fix: format long lines in telegram_test.go to satisfy golines linter
- 9433851 fix: handle ignored io.ReadAll errors across codebase
- 7f6d95c fix: handle zero values in cron schedule type assertions (#1147)
- a2591e0 fix: improve MCP tool name collision safety and registry overwrite warning
- c1a3876 fix: improve error handling for non-JSON responses by checking content type and using a streaming JSON parser.
- 71bdeb4 fix: improve error handling in GitHub Copilot provider (#919)
- 6eaa49f fix: improve openai compat HTML response handling
- a9a3075 fix: max payload size in web fetch
- ee5b618 fix: migration ModelName, reasoning_content, shell regex, loop boundary
- 3de4cb8 fix: pass original markdown to sendHTMLChunk for plain-text fallback
- 9efdde2 fix: preserve reasoning_content in multi-turn conversation history
- f07dbd1 fix: remove redundant SplitMessage in Send() per review feedback
- 1604582 fix: resolve gci lint errors in IRC channel files
- b878272 fix: resolve govet shadow and golines lint errors in wecom channels
- 6ccb68c fix: resolve linter issues (gci import grouping, gofumpt, govet shadow)
- 03d6ad4 fix: resolve merge conflicts in wecom error handling
- 53cba73 fix: resolve openai compat lint issues
- ba4b702 fix: retryLLM return empty (#1264)
- fc9f1ec fix: return fetched content to LLM in web_fetch tool (#833)
- 0e810a2 fix: tighten HTML-expansion test to stay under chunk size
- 0c97cb3 fix: update provider count in migration test to include Avian
- bd0018a fix: use queue-based re-splitting for HTML expansion validation
- a521a49 fix:fix cmd example (#1166)
- e066730 fixed conflicts
- dea381c improve(agent): clarify MCP tool registration logging
- 23bb082 mcp http server example
- 1a922c9 merge: resolve conflict with main in loop.go
- d257f1a merge: resolve conflict with upstream/main in provider_test.go
- 11017ac merge: resolve conflicts with upstream/main
- e433bb8 merge: resolve conflicts with upstream/main
- b88e590 moved fetch limit bytes in config file
- 11dbc30 perf(agent): cache ListAgentIDs() result before MCP tool registration loop
- 6892d00 perf(agent): reduce memory footprint by storing minimal MCP dependencies
- b9ee9b3 prevent audio as image url
- 23f48d7 refactor(aibot): remove downloadAndDecryptImage function to streamline image handling
- d4824a0 refactor(config): remove WebhookHost and WebhookPort from WeComAIBotConfig
- c3e0290 refactor(discord): self-review fixes for resolveDiscordRefs
- c057423 refactor(docker): migrate to docker compose v2 syntax
- 51ed54a refactor(docker): switch to node:24-bookworm-slim base image
- bf4445f refactor(docs): remove webhook_host and webhook_port from configuration examples
- 6d894d6 refactor(memory): use fileutil.WriteFileAtomic and log corrupt lines
- 5d73ee2 refactor(memory): use sync.Map for session locks and skip-scan in readMessages
- 222d1a3 refactor(modernize): apply safe modernize fixes
- 536e9ac refactor(skills): reuse shared HTTP retry helper
- aa2d6b3 refactor(tools): remove redundant kill -9 pattern
- 20f8bb2 refactor(tools): use MCPManager interface in NewMCPTool constructor
- 8f3d611 refactor(wecom): replace generateSignature with computeSignature and update related tests
- 79bc06c refactor(wecom): simplify stream message structure by introducing WeComAIBotMsgItem and WeComAIBotMsgItemImage types
- 880c402 refactor(wecom): streamline AES encryption/decryption and improve task management logic
- e54b1d3 refactor: parse Kimi API hostname once in constructor instead of per-call
- 434b03e remove wrapper methods
- f0ce26f style(config): use snake_case for EnvFile JSON field name
- 65e1434 style: fix gofmt formatting in ExecConfig struct
- de0f15d style: fix golines struct tag alignment in SearXNGConfig
- 47533a0 style: format code with gofmt
- 8bd1935 telegram: lower MaxMessageLength to 4000 for HTML expansion margin
- c10959b test(irc): add unit tests for IRC channel
- 4e330b2 test(mcp): add manager behavior and lifecycle unit tests
- 529622b test(memory): add unit, concurrency, and benchmark tests
- 1e2ab4a test(wecom): add dedupe helper coverage and align constant usage
- db17cdc test(wecom): align dedupe rotation behavior and add helper tests
Released by GoReleaser.