github sipeed/picoclaw v0.2.1

8 hours ago

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.

Don't miss a new picoclaw release

NewReleases is sending notifications on new releases.