Releases: AstrBotDevs/AstrBot
Releases · AstrBotDevs/AstrBot
v4.23.0-beta.1
What's Changed
新增
- 为电脑使用能力支持文件读取(read)、写入(write)、编辑(edit)、Grep 搜索(ripgrep)与按会话隔离的 workspace。(#7402)
- 新增 Brave Search 网页搜索工具,替代旧的默认网页搜索实现。(#6847)
- 新增 Mattermost 平台适配器支持。(#7369)
- 新增 NVIDIA Rerank Provider。(#7227)
- 新增 OpenAI、Gemini 音频输入模态支持,并修复 ChatUI 录音相关问题。(#7378)
- Discord 平台新增 Bot 消息过滤配置,允许控制是否接收其他 Bot 的消息。(#6505)
- 新增 LLM 对重复工具调用的引导能力,减少模型陷入重复调用工具的情况。(#7388)
优化
- 合并 Cron 相关工具为统一管理工具,并新增 Cron 任务编辑能力。(#7445)
- 重构内置工具管理逻辑,改善 AstrBot 内置工具注册与调用维护性。(#7418)
- 移除默认网页搜索实现,改由新的搜索工具链路提供能力。(#7416)
- 移除
lxml与beautifulsoup4依赖,降低安装体积与依赖复杂度。(#7449) - 降低 MCP Server 状态轮询频率,减少后台请求开销。(#7399)
- 修正文档中的路径拼接示例,避免插件开发存储文档误导使用者。(#7448)
修复
- 修复 Windows 桌面端插件依赖加载不安全或失败的问题。(#7446)
- 修复 Telegram 长消息最终分段过长的问题。(#7432)
- 修复 Telegram
sendMessageDraft发送空文本导致 400 错误刷屏的问题。(#7398) - 修复 Telegram 收集命令时插件 handler 不在
star_map中导致KeyError的问题。(#7405) - 修复 QQ 官方 WebSocket 关闭流程清理不完整的问题。(#7395)
- 修复 Gemini FunctionResponse 中不支持的
id字段导致请求失败的问题。(#7386) - 修复 Gemini 空模型输出误触发错误处理的问题。(#7377)
- 修复仅存在原生工具时仍传递
FunctionCallingConfig的问题。(#7407) - 修复 ChatUI 项目常量缺失,并补充相关测试用例。(#7414)
- 修复 WebUI 暗色模式渲染与多处交互问题。(#7173)
- 修复页面切换时浮动按钮跳动的问题。(#7214)
- 修复
faiss在启动阶段过早导入导致部分环境启动失败的问题。(#7400) - 修复微信个人号适配器缺少上下文 token 时的警告信息。(commit)
- 修复工具结果断言与动态阈值不一致的问题。(commit)
What's Changed (EN)
New Features
- Added local Computer Use filesystem tools, including file read, write, edit, Grep search, and per-session workspace support. (#7402)
- Added the Brave Search web search tool, replacing the old default web search implementation. (#6847)
- Added Mattermost platform support. (#7369)
- Added the NVIDIA Rerank Provider. (#7227)
- Added audio input support across providers and fixed ChatUI recording issues. (#7378)
- Added configurable Discord bot-message filtering, including support for receiving messages from other bots. (#6505)
- Added LLM guidance for repeated tool calls to reduce repetitive tool-call loops. (#7388)
Improvements
- Merged Cron tools into a unified management tool and added Cron task editing. (#7445)
- Refactored built-in tool management to improve registration and maintenance. (#7418)
- Removed the old default web search implementation in favor of the new search tool flow. (#7416)
- Removed
lxmlandbeautifulsoup4dependencies to reduce dependency weight and installation complexity. (#7449) - Reduced MCP Server status polling frequency to lower background request overhead. (#7399)
- Fixed a path concatenation example in the plugin storage docs. (#7448)
- Updated the README logo. (commit)
Bug Fixes
- Fixed safer desktop plugin dependency loading on Windows. (#7446)
- Fixed overly long final Telegram message segments. (#7432)
- Fixed Telegram
sendMessageDraft400 spam caused by empty text. (#7398) - Fixed a
KeyErrorin Telegram command collection when a plugin handler is missing fromstar_map. (#7405) - Cleaned up QQ Official WebSocket shutdown handling. (#7395)
- Removed the unsupported
idfield from Gemini FunctionResponse payloads. (#7386) - Fixed empty model output handling that could misfire when using Gemini. (#7377)
- Skipped
FunctionCallingConfigwhen only native tools are present. (#7407) - Added missing ChatUI project constants and related tests. (#7414)
- Fixed WebUI dark-mode rendering and multiple interaction bugs. (#7173)
- Prevented floating buttons from jumping during page transitions. (#7214)
- Deferred
faissimports during startup to avoid startup failures in some environments. (#7400) - Improved the missing-context-token warning message in the Weixin OC adapter. (commit)
- Updated tool-result assertions to match dynamic threshold values. (commit)
What's Changed
- docs: add usage of
select_knowledgebasein plugin development docs by @piexian in #7115 - feat: add new StatsPage for enhanced statistics overview by @Soulter in #7152
- fix(core): Record.path was incorrectly treated as required under Pydantic v2 by @No-22-Github in #7048
- fix: improve number input UX in config renderer by @Reisenbug in #7153
- fix: send SSE heartbeat to prevent WebChat disconnect during compression by @he-yufeng in #7003
- perf: improve ui by @Soulter in #7178
- chore(deps): bump codecov/codecov-action from 5 to 6 in the github-actions group by @dependabot[bot] in #7209
- Fix cached_tokens handling in _extract_usage method by @LIghtJUNction in #6719
- refactor: update provider panels for improved layout and styling by @Soulter in #7248
- feat: integrate Monaco Editor workers for enhanced code editing support by @Soulter in #7249
- fix: add pysocks dependency to support SOCKS5 proxy for pip install by @Neko-Yukari in #7221
- fix(Docker): add amr encoder by @WenqiOfficial in #7247
- fix: support both old and new Bailian Rerank API response formats by @he-yufeng in #7217
- 修正了QQ websoket连接的文档错误 by @Thelia-Lzr in #7279
- 修复:过滤空助手消息,以防止在严格API上出现400错误(fix: filter empty assistant messages to prevent 400 error on strict APIs) by @kaixinyujue in #7202
- Docs/update mimo provider readme by @RichardLiuda in #7207
- Feat(webui): dashboard and console qol improvements by @M1LKT in #7215
- fix: 改进知识库的初始化错误处理 by @piexian in #7243
- docs: 在 uv 部署文档中添加不支持 WebUI 升级的说明 by @piexian in #7298
- fix: resolve Discord/Misskey hot reload issue by fixing client_self_id misuse by @Soulter in #7331
- fix: satisfy Google Gemini's function_response requirements to avoid 400 Invalid argument errors by @he-yufeng in #7216
- fix: filter Gemini thinking parts from user-facing message chain by @he-yufeng in #7196
- perf: Set
contentto None when the OpenAI message content list is empty by @he-yufeng in #6551 - fix(windows): inherit all system environment variables into MCP runner for Windows by @SoloLevelingAI in #7054
- feat: support token usage extraction for llama.cpp by @Soulter in #7358
- feat(provider/vllm_reran...
v4.22.3
What's Changed
新增
- 新增
vllm_rerank提供商支持可配置的rerank_api_suffix,可灵活适配不同 API 路径。(#7278) - 适配 llama.cpp 的 token 用量提取支持,增强 token 统计与计费分析能力。(#7358)
- WebUI 捆绑 Monaco Editor 的 worker 文件,防止从 CDN 下载失败。(#7249)
- 全新的模型/平台总览统计面板。(#7152)
优化
- 优化 OpenAI 消息处理,若
content列表为空时将其置为None,并降低空内容下的异常率。(#6551) - 优化 provider page 布局与样式,提升整体设置页面排版一致性。(#7248)
- 用户已登录时将直接跳转欢迎页,减少再次进入登录页的步骤。(commit)
修复
- 修复 Windows 下 MCP runner 未继承完整系统环境变量导致启动异常的问题。(#7054)
- 修复 Gemini 思考片段泄露到用户可见消息链路的问题。(#7196)
- 修复 Gemini(OpenAI 兼容 API) 下,
function_response格式要求导致的400 Invalid argument错误。(#7216 - 修复知识库初始化失败时的错误提示与恢复问题。(#7243)
- 修复 Bailian Rerank 对新旧响应格式兼容性,避免解析失败。(#7217)
- Docker 镜像补充 AMR 编码器依赖,修复部分部署场景下的音频转码缺失问题。(#7247)
- 修复 pip 安装缺少
pysocks依赖导致的 SOCKS5 代理不可用问题。(#7221) - 修复
cached_tokens在_extract_usage中的处理逻辑,避免 token 统计错乱。(#6719) - 增强 SSE 断开保护,压缩传输下主动发送心跳,减少 WebChat 误断连。(#7003)
- 修复严格 API 下空 assistant 消息导致的 400 错误。(#7202)
- 新增二维码功能缺失的
qrcode依赖修复,恢复二维码生成功能。(commit) - 修复配置器数字输入组件的交互体验问题,避免异常输入场景下的处理偏差。(#7153)
- 修复
Record.path在 Pydantic v2 下被错误视为必填字段的问题。(#7048)
What's Changed (EN)
New Features
- Added configurable
rerank_api_suffixfor thevllm_rerankprovider to support custom API paths.(#7278) - Added token usage extraction support for llama.cpp to improve token accounting.(#7358)
- Bundled Monaco Editor workers in WebUI so code editing does not depend on external CDN downloads.(#7249)
- Added a new statistics overview for model and platform usage.(#7152)
- Redirected logged-in users to the welcome page instead of the login page.(commit)
Improvements
- Improved OpenAI message handling by setting message
contenttoNonewhen content lists are empty, reducing empty-payload edge cases.(#6551) - Improved provider page layout and styling to keep settings pages consistent.(#7248)
- Refined connection-success handling and messaging when users are already logged in.(commit)
Bug Fixes
- Inherited all system environment variables in Windows MCP runner to fix environment-dependent launch issues.(#7054)
- Filtered Gemini thinking parts from user-facing message chains.(#7196)
- Fixed Gemini
function_responsecompatibility to prevent400 Invalid argumentresponses.(#7216) - Improved knowledge base initialization error handling.(#7243)
- Fixed Bailian rerank parsing for both old and new response formats.(#7217)
- Added AMR encoder support in Docker builds to fix missing audio codec support.(#7247)
- Added the
pysocksdependency so pip installs can use SOCKS5 proxy correctly.(#7221) - Fixed
_extract_usagecached token handling.(#6719) - Sent SSE heartbeat packets to prevent WebChat disconnection under compression.(#7003)
- Fixed
400errors caused by empty assistant messages on strict APIs.(#7202) - Added missing
qrcodedependency to restore QR code generation.(commit) - Fixed number input UX in config renderer.(#7153)
- Fixed
Record.pathbeing incorrectly treated as required under Pydantic v2.(#7048)
What's Changed
- docs: add usage of
select_knowledgebasein plugin development docs by @piexian in #7115 - feat: add new StatsPage for enhanced statistics overview by @Soulter in #7152
- fix(core): Record.path was incorrectly treated as required under Pydantic v2 by @No-22-Github in #7048
- fix: improve number input UX in config renderer by @Reisenbug in #7153
- fix: send SSE heartbeat to prevent WebChat disconnect during compression by @he-yufeng in #7003
- perf: improve ui by @Soulter in #7178
- chore(deps): bump codecov/codecov-action from 5 to 6 in the github-actions group by @dependabot[bot] in #7209
- Fix cached_tokens handling in _extract_usage method by @LIghtJUNction in #6719
- refactor: update provider panels for improved layout and styling by @Soulter in #7248
- feat: integrate Monaco Editor workers for enhanced code editing support by @Soulter in #7249
- fix: add pysocks dependency to support SOCKS5 proxy for pip install by @Neko-Yukari in #7221
- fix(Docker): add amr encoder by @WenqiOfficial in #7247
- fix: support both old and new Bailian Rerank API response formats by @he-yufeng in #7217
- 修正了QQ websoket连接的文档错误 by @Thelia-Lzr in #7279
- 修复:过滤空助手消息,以防止在严格API上出现400错误(fix: filter empty assistant messages to prevent 400 error on strict APIs) by @kaixinyujue in #7202
- Docs/update mimo provider readme by @RichardLiuda in #7207
- Feat(webui): dashboard and console qol improvements by @M1LKT in #7215
- fix: 改进知识库的初始化错误处理 by @piexian in #7243
- docs: 在 uv 部署文档中添加不支持 WebUI 升级的说明 by @piexian in #7298
- fix: resolve Discord/Misskey hot reload issue by fixing client_self_id misuse by @Soulter in #7331
- fix: satisfy Google Gemini's function_response requirements to avoid 400 Invalid argument errors by @he-yufeng in #7216
- fix: filter Gemini thinking parts from user-facing message chain by @he-yufeng in #7196
- perf: Set
contentto None when the OpenAI message content list is empty by @he-yufeng in #6551 - fix(windows): inherit all system environment variables into MCP runner for Windows by @SoloLevelingAI in #7054
- feat: support token usage extraction for llama.cpp by @Soulter in #7358
- feat(provider/vllm_rerank): add configurable rerank_api_suffix option by @richard950825-sys in #7278
New Contributors
- @No-22-Github made their first contribution in #7048
- @Neko-Yukari made their first contribution in #7221
- @WenqiOfficial made their first contribution in #7247
- @Thelia-Lzr made their first contribution in #7279
- @kaixinyujue made their first contribution in #7202
- @SoloLevelingAI made their first contribution in #7054
- @richard950825-sys made their first contribution in #7278
Full Changelog: v4.22.2...v4.22.3
v4.22.2
What's Changed
新增
优化
- Chat Provider text_chat 接口新增
tool_choice参数,并为模型空响应引入统一的EmptyModelOutputError与增强重试逻辑,改善 “skills-like” 工具调用模式下的稳定性。(#7101、#7104) - SSL 证书配置错误时自动回退到非 SSL 模式,而不是程序直接退出。(#7102)
修复
- 修复 个人微信 Bot 无法发送多媒体文件与 CDN 上传地址兼容性问题,适配新的
upload_full_url返回格式。#7066) - 修复 个人微信 连接超时 / 中断后直接导致微信适配器实例退出的问题,增强了重试机制。(#7041
- 修复 WebUI Skills 上传对多技能压缩包的处理,允许单个 zip 包内包含多个技能。(#7070)
- 修复 OpenAI 嵌入模型接口处理相关问题。#7026)
- QQ 机器人发送语音或音频文件没有响应 (#7007)
- ChatUI 切换到某个会话,刷新后错误地跳转到最新会话 (#6535)
- 修复百炼
qwen3-rerank的请求负载兼容性问题,并忽略不受支持的return_documents参数。(#6222) - 修复 QQ 下,发送唤醒前缀后,多次空触发 LLM 的问题。(#6893)
- 修复 GSVI TTS 调用方式与鉴权头构造问题,并补充默认配置值,适配新的
/infer_singleAPI。(#7083) - 修复缺失
httpxSOCKS 代理依赖的问题,恢复 SOCKS 代理支持。(#7093) - 修复企业微信客服发送失败时无法回退普通消息接口的问题。(#7012)
- 修复 WebUI 对话管理详情页无法滚动的问题。#6972)
- 修复 Telegram 附件消息 caption 丢失的问题。(#7020)
What's Changed (EN)
New Features
- Added
tool_choiceto Tool Loop Agent Runner and introducedEmptyModelOutputErrorwith stronger retry handling, improving stability for "skills-like" tool-call workflows.(#7101、#7104) - Added SSL config resolution and validation for Dashboard, with automatic fallback to non-SSL mode when the certificate setup is invalid.(#7102)
- Added the ability to create a new config by copying an existing one in the config management page.(#6785)
- Updated the QQ Official adapter to support asynchronous message parsing and attachment preparation.(#7007)
- Added typing-state control ("user is typing...") for the Weixin OC adapter.(#6977)
Improvements
- Refactored Chat UI routing and layout so the UI mode is URL-driven and related state is scoped to
sessionStorage.(#6535) - Improved WebUI polish by centering extension-page toast hints and making code blocks more readable in dark mode.(#6043、#7014)
Bug Fixes
- Fixed skill installer handling so a single zip archive can contain multiple skills.(#7070)
- Fixed Bailian
qwen3-rerankpayload compatibility and ignored unsupportedreturn_documentsparameters.(#6222) - Fixed pipeline wake-up and request flow on empty messages.(#6893)
- Fixed GSVI TTS invocation and authorization-header construction, and added safer default config values.(#7083)
- Fixed missing
httpxSOCKS proxy dependency to restore SOCKS proxy support.(#7093) - Fixed Weixin OC inbound polling retry behavior and CDN upload compatibility with the new
upload_full_urlresponse field.(#7041、#7066) - Fixed WeCom fallback behavior so sending can retry through the regular message API when the KF API returns
40096.(#7012) - Fixed missing attachment captions in Telegram messages.(#7020)
- Hardened OpenAI attachment recovery and fixed Embedding URL suffix trimming to avoid recovery failures and accidental URL character removal.(#7004、#7026)
- Fixed Dashboard regressions around list-option label mapping, missing icons, and mouse-wheel handling in the preview container.(#6844、#6970、#6972)
What's Changed
- fix: honor computer_use_require_admin in shipyard_neo tools by @1zzxy1 in #6951
- fix(dashboard): include missing vuetify mdi icons by @RC-CHN in #6970
- docs: Fix typo in plugin configuration documentation by @Yinr in #6971
- docs: normalize QQ group listings in READMEs and community docs by @idiotsj in #6976
- fix(provider): restore parameter transparency in core LLM provider adapters by @SXP-Simon in #6934
- feat(dashboard): center extension page toast hints with the global UI by @catDforD in #6043
- docs: update plugin dev link in webui by @xrr2016 in #6978
- Feat(webui): improve code block readability in dark mode(iss#6963) by @M1LKT in #7014
- fix: harden OpenAI attachment recovery by @zouyonghe in #7004
- revert: "fix(provider): restore parameter transparency in core LLM provider adapters" by @Soulter in #7023
- fix(dashboard): update aiocqhttp tutorial links to new docs path by @idiotsj in #7038
- fix(embedding): use removesuffix instead of rstrip to prevent over-trimming URLs by @Izayoi9 in #7026
- fix(telegram): preserve attachment captions by @Clhikari in #7020
- fix(wecom): fallback to message API when kf returns 40096 by @silwings1986 in #7012
- fix(chatui): refactor routing and layout to drive UI mode from URL and scope state to sessionStorage by @itamiokanjiro in #6535
- fix(weixin_oc): add error handling and retry logic for inbound updates polling by @Soulter in #7041
- feat: Add "typing" ("对方正在输入...") state control for weixin_oc plateform by @GowayLee in #6977
- docs: corrent weixin_oc wechat version requirements by @tlw00988 in #7068
- fix(weixin_oc): allow CDN uploads to use
upload_full_urlwhen provided by @Astral-Yang in #7066 - fix: bundle httpx SOCKS proxy support by @zouyonghe in #7093
- fix(gsvi_tts): Use the correct calling method by @Rain-0x01-39 in #7083
- fix(pipeline): skip waking on empty messages by @Reisenbug in #6893
- fix: allow multiple skills in a single zip archive by @jmt059 in #7070
- feat: update QQOfficialPlatformAdapter to support async parsing and attachment preparation by @Soulter in #7007
- fix(dashboard): apply labels mapping for list options in config renderer by @Foolllll-J in #6844
- feat: allow copy config from existing configs by @Flartiny in #6785
- fix(provider): fix Bailian rerank payload compatibility for qwen3-rerank by @kawayiYokami in #6222
- fix(webui): keep wheel scrolling inside history dialog by @1zzxy1 in #6972
- feat(agent-runner): add tool_choice parameter to fix empty tool calls response in "skills-like" tool call mode by @Soulter in #7101
- feat(dashboard): add SSL configuration resolution for dashboard by @Soulter in #7102
- feat: implement EmptyModelOutputError for handling empty responses across providers and enhance retry logic in ToolLoopAgentRunner by @Soulter in #7104
New Contributors
- @Yinr made their first contribution in #6971
- @xrr2016 made their first contribution in #6978
- @silwings1986 made their first contribution in #7012
- @tlw00988 made their first contribution in #7068
- @Astral-Yang made their first contribution in #7066
- @Rain-0x01-39 made their first contribution in #7083
- @jmt059 made their first...
v4.22.1
What's Changed
新增
- 增强 Skills 安装流程,不再限制上传的压缩包顶级必须是一个目录。并支持中文技能名称显示。(#6952)
- OpenAI Embedding 模型配置支持自动补齐
/v1基础路径。(#6863) - 为
/api/file新增 GET 端点并支持多种请求方式。(#6874) - WebUI 设置页新增日志与缓存清理能力。(#6822)
- Lark 平台新增可折叠 Thinking 面板能力与消息处理优化。(#6831)
修复
- 修复 QQ 官方机器人中,在 Cron Job 或者主动发送消息时的
msg_id相关负载处理问题。(#6604) - 修复 个人微信 在轮询超时后停止轮询的问题。(#6915)
- 修复 硅基流动 提供商无法正确使用工具调用能力的问题。(#6829)
- 修复部分提供商工具调用流式增量返回缺少 index 导致的异常。(#6661
- 修复 WebUI 中
ObjectEditor的updateKey错误索引导致的“键已存在”误判。(#6825) - 修复 UI 图标集合及测试一致性导致的展示异常。(#6894、#6892)
- 修复 T2I 配置间未同步生效模板的问题。(#6824)
- 修复 MIMO TTS 样式参数以对齐官方文档约定。(#6814)
What's Changed (EN)
New Features
- Enhanced skill installation to support multiple top-level folders, duplicate handling, and Chinese skill names.(#6952)
- Automatically append
/v1toembedding_api_basefor OpenAI embedding compatibility.(#6863) - Added plugin author display and pinned plugin card support in WebUI.(#6875)
- Added GET endpoint for
/api/fileand support for multiple HTTP methods.(#6874) - Added log and cache cleanup in Dashboard settings.(#6822)
- Added collapsible reasoning panel and message handling improvements for Lark.(#6831)
Improvements
- Validate
config_pathbefore existence checks to avoid false negatives.(#6722) - Improved Provider batch reset behavior and "follow" configuration handling in WebUI.(#6825)
- Updated OpenAI-related guidance in i18n docs for clearer compatibility hints.(adc252a3)
Bug Fixes
- Fixed missing index field in streaming
tool_calldeltas.(#6661) - Fixed
msg_idpayload handling for QQ API.(#6604) - Kept Weixin OC polling active after inbound timeout.(#6915)
- Fixed
updateKeyindex bug in WebUIObjectEditorthat caused false “key exists” errors.(#6825) - Fixed icon regressions in UI and related icon scan tests.(#6894、#6892)
- Fixed SiliconFlow provider tools compatibility issue.(#6829)
- Synchronized active T2I template across all configs.(#6824)
- Aligned MIMO TTS payload style with official docs.(#6814)
- Removed privacy-sensitive data left in tests.(#6803)
v4.22.0
What's Changed
新增
- 新增个人微信接入能力(微信官方提供)。详见 个人微信接入(#6777)
- 新增图片压缩能力,支持图片尺寸、JPEG 质量限制。(#6794)
- 新增 WebUI 已安装插件置顶与拖拽重排能力。(#6776)
优化
修复
- Telegram 适配器改为导入
Forbidden,替代已弃用的Unauthorized(兼容性修正)。(#6769) - 处理 OpenAI Provider 中
token usage metrics为None时的异常场景。(#6788) - 保留全部
CallToolResult的content项,避免工具调用上下文内容丢失。(#6149)
What's Changed (EN)
New Features
- Added WeChat personal account support, including QR-code driven setup, message flow refactor, and media handling improvements.(#6777)
- Added pinning and drag-sorting for installed WebUI plugins.(#6776)
- Added image compression with max-size handling and temporary-file lifecycle management for improved image efficiency.(#6794)
Improvements
- Skipped search execution when the entire knowledge base is empty.(#6750)
- Preserved escaped newlines in
frontmatter, with related test and CI workflow updates.(#6783)
Bug Fixes
- Replaced deprecated Telegram adapter import of
UnauthorizedwithForbidden.(#6769) - Handled
Nonevalues in OpenAI providertoken usage metrics.(#6788) - Kept all
CallToolResult.contentitems to prevent losing tool-call context.(#6149)
What's Changed
- feat: supports weixin personal account by @Soulter in #6777
- fix(platform.tg_adapter): import Forbidden instead of deprecated Unauthorized (#6765) by @mzwing in #6769
- feat: skip search when the entire knowledge base is empty by @Waterwzy in #6750
- feat: fix preserve escaped newlines in frontmatter & update tests & ci workflows by @RC-CHN in #6783
- Feat(webui): support pinning and dragging for installed plugins (#6649) by @M1LKT in #6776
- fix: handle potential None values for token usage metrics in OpenAI provider by @Soulter in #6788
- feat: supports image compressing (#6463) by @Soulter in #6794
- fix: keep all CallToolResult content items by @tsubasakong in #6149
New Contributors
Full Changelog: v4.21.0...v4.22.0
v4.21.0
What's Changed
新增
- 为插件市场新增分类筛选并优化界面组件。(#6762)
- 新增 Kimi Coding Plan Provider(兼容 Anthropic API)。(#6559)
- 统一并重命名
skill.md文件为SKILL.md。(#6757) - 新增 Ollama 关闭思考模式开关。(#5941)
- 新增小米 MiMo TTS 与 STT Provider。(#6643)
- 新增多模态上下文 token 计数能力(图片、音频与思维链)。(#6596)
- 新增按元信息名称安装插件并校验可导入标识符。(#6530)
优化
- 降低
kook_type中StrEnum到(str, Enum)以兼容旧版本 Python。(#6512) - 优化 WebChat 消息处理:提前保存消息并增强流式补全。(#6698)
- 优化 Dashboard 中移动端 persona 选择器布局。(#5907)
- 优化 Dashboard,减少 MDI icon font 范围并自托管 Google Fonts。(#6532)
- 使用 Pydantic 重构 KOOK 适配器数据模型以提升消息结构解析与校验性能。(#5719)
- 调整文档术语与表达(“消息平台”改为“机器人”等)并优化更新说明文字。(#6568)
修复
- 修复 web search tools 中被禁用系统函数时未正确生效的问题。(#6584)
- 跳过空的知识库嵌入批次,避免不必要计算。(#6106)
- 修复 Feishu opus 文件在 Whisper API STT 场景下未正确转换的问题。(#6078)
- 修复 Lark 在工具调用中断时卡片创建与重续流程。(#6743)
- 修复 Windows 环境下 skill 文件编码兼容问题。(#6058)
- 修复 WebChat 单独渲染的 HTML 回复被错误显示的问题。(#6074)
- 修复 Gemini 数组 schema 缺少
items字段的问题。(#6051) - 修复 skills 使用硬编码工作区路径的问题,改为使用缓存中的真实沙箱路径。(#6331)
- 修复 subagent 工具调用超时传递,修正
tool_call_timeout并将默认超时从 60 秒提升到 120 秒。(#6713) - 修复
skills-like下缺失extra_user_content_parts时未注入图片说明的问题。(#6710) - 修复
/stop后继续处理后续 follow-up 消息的问题。(#6704) - 修复核心流程在 stop 时中断子代理工具等待的行为。(#5850)
- 修复 Windows 平台 stdio MCP 服务
PATHEXT丢失的问题。(#5822) - 修复 Telegram 轮询重启机制,失败时自动恢复循环。(#6648)
- 修复
/stop后 follow-up 状态未清理导致后续触发继续运行的问题。(#6656) - 修复 OpenAI 配置日志,改进代理与 API Base 的可读性与排障能力。(#6669)
- 修复长工具调用中截断逻辑误删唯一 user 消息的问题。(#6198)
- 修复截断器移除唯一用户消息导致部分 provider 返回
400的问题。(#6581) - 修复 ID 白名单为空时提示文案不清晰的问题。(#6611)
- 修复 MoonshotAI 官方 API 下 OpenAI token usage 缺失问题。(#6618)
- 提升 Wecom AI Bot 流式可读性与速度(限流处理),改善卡顿与显示体验。(#6610)
- 修复 Wecom 长连接回复消失的问题。(#6606)
- 修复 Windows 打包运行时 pip/native 构建环境配置问题。(#6575)
- 修复仅在显式配置时传递 embedding
dimensions,避免无效参数干扰。(#6432) - 修复
register_agent装饰器导致的NameError。(#5765) - 修复默认 persona 场景下的 subagent 查询失败问题。(#5672)
- 修复 Windows 下 skill 读取失败问题。(#6490)
- 修复
SKILL.md多行 frontmatter 解析问题。(#6460) - 修复 SQLite
database is locked问题,新增繁忙超时处理。(#6474) - 修复工作流限制仅允许上游仓库触发的报错场景。(#6531)
What's Changed (EN)
New Features
- Added category filtering for market plugins and enhanced UI components.
- Normalized and renamed
skill.mdfiles toSKILL.md. - Added a toggle to disable thinking mode in Ollama.
- Added Xiaomi MiMo TTS & STT providers.
- Added Kimi Coding Plan provider with Anthropic API compatibility.
- Added context token counting support for multimodal content (images, audio, and chain-of-thought).
- Added plugin installation by metadata name and validated importable identifiers.
Improvements
- Refactored
StrEnumto(str, Enum)inkook_typefor backward compatibility. - Enhanced WebChat message handling with proactive saving and streaming completion.
- Simplified dashboard persona selector layout for mobile screens.
- Subset MDI icon font and self-hosted Google Fonts in dashboard.
- Implemented Pydantic data models for KOOK adapter for better retrieval and schema validation.
- Updated documentation wording for incomplete updates terminology.
Bug Fixes
- Fixed disabled system functions in web search tools.
- Skipped empty knowledge-base embedding batches.
- Converted Feishu opus files for Whisper API STT.
- Deferred Lark card creation and renewal on tool call break.
- Added fallback for Windows skill file encodings.
- Rendered standalone HTML replies as code in WebChat.
- Ensured Gemini array schemas always include
items. - Fixed skills path resolution to use cached sandbox path instead of hardcoded workspace root.
- Passed
tool_call_timeoutto subagent handsoff/cron/background tasks and increased default timeout to 120 seconds. - Fixed
skills-likere-query missingextra_user_content_partscausing image caption not injected. - Rejected follow-up messages after
/stoprequest. - Interrupted subagent tool waits on stop.
- Preserved
PATHEXTfor stdio MCP servers on Windows. - Added automatic restart for Telegram polling loop on failure.
- Fixed follow-up persistence logic after
/stoptrigger. - Improved OpenAI proxy/API base logging.
- Prevented truncation logic from removing the only user message in long tool-calling conversations.
- Fixed truncation removing the only user message and returning
400for some providers. - Updated ID whitelist empty-configuration hint wording.
- Fixed token usage with MoonshotAI official API.
- Improved Wecom AI Bot streaming readability and speed via throttling.
- Prevented Wecom AI Bot long connection replies from disappearing.
- Set packaged Windows runtime build env for pip native builds.
- Only pass embedding dimensions when explicitly configured.
- Fixed
register_agentdecoratorNameError. - Fixed subagent lookup failure when using default persona.
- Fixed reading skills on Windows.
- Fixed multiline frontmatter parsing in
SKILL.md. - Fixed SQLite
database is lockedwith busy timeout. - Restricted workflows to upstream repo.
What's Changed
- feat: localize session management group & interval method texts by @RC-CHN in #6471
- fix: SQLite 'database is locked' under concurrent writes by @he-yufeng in #6474
- fix: parse multiline frontmatter description in SKILL.md by @RhoninSeiei in #6460
- chore(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #6461
- chore: remove deprecated version field from compose.yml by @YuanyuanMa03 in #5495
- fix: reading skills on Windows by @linzhengtian in #6490
- fix: subagent create failure when using default persona by @whatevertogo in #5672
- fix: register_agent decorator NameError by @whatevertogo in #5765
- fix: only pass dimensions when explicitly configured in embedding config by @jnMetaCode in #6432
- perf: Implement Pydantic data models for the KOOK adapter to enhance data retrieval and message schema validation by @shuiping233 in #5719
- refactor: Downgrade StrEnum to (str, Enum) in kook_type for backward compatibility by @shuiping233 in #6512
- feat: install plugin using metadata name and validate importable identifiers by @Soulter in #6530
- fix: restrict workflows to upstream repo by @Raven95676 in #6531
- Fix LLM always choosing FileDownloadTool instead of FileUploadTool by @he-yufeng in #6527
- perf(dashboard): subset MDI icon font and self-host Google Fonts by @camera-2018 in #6532
- 更改未完成更新的文档用词问题(多处“消息平台”已更名为“机器人”) by @nuomicici in #6568
- fix: set packaged Windows runtime build env for pip native builds by @zouyonghe in #6575
- feat (doc) : Add doc for shipyard-neo sandbox driver by @RC-CHN in #6590
- docs(sandbox): clarify section references in guides by @RC-CHN in #6591
- fix: prevent wecom ai bot long connection replies from disappearing by @shijianhuai in #6606
- fix(wecom-aibot): significantly improve streaming readability and speed via add throttling by @Soulter in https://git...
v4.20.1
What's Changed
新增
优化
- 优化 UMO 处理兼容性。(#5996)
- 重构
_extract_session_id,改进聊天类型分支处理。(#5775) - 优化聊天组件行为,使用
shiki进行代码块渲染。(#6286) - 优化 WebUI 主题配色与视觉体验。(#6263)
- 优化 OneBot @ 组件后处理,避免消息文本解析空格问题。(#6238)
修复
- 修复创建新 Provider 后未同步
providers_config的问题。(#6388) - 修复 API 返回
null choices时的TypeError。(#6313) - 修复 QQ Webhook 重试回调重复触发的问题。(#6320)
- 修复流式模式下
delta为None导致工具调用时报错的问题。(#6365) - 修复模型服务链接说明文字错误。(#6296)
- 修复 AI 在 tool-calling 模式设为
skills-like时发送媒体失败的问题。(#6317) - 修复 Telegram 适配器中 GIF 被错误转成静态图的问题。(#6329)
- 将 Provider 图标来源替换为 jsDelivr CDN 地址,修复部分环境下图标加载问题。(#6340)
- 修复 QQ 官方表情消息未解析为可读文本的问题。(#6355)
- 修复 WebChat 队列异常时流式结果页面崩溃的问题。(#6123)
- 修复子代理 handoff 工具在插件过滤时丢失的问题。(#6155)
- 修复 Cron 提示文案缺少空格及
utcnow()的弃用警告问题。(#6192) - 修复 WebUI 启动时 Sidebar hash 导航抖动/定位问题。(#6159)
- 修复启动重试过程中移除已移除 API Key 的
ValueError报错。(#6193) - 修复 README 启动命令引用更新为
astrbot run。(#6189) - 修复
Plain.toDict()在@提及场景下空白字符丢失的问题。(#6244) - 修复 provider 依赖重复定义问题。(#6247)
- 修复 Telegram 中普通回复被误判为线程的处理问题。(#6174)
其他
- 调整
astrbot.service及 CI 配置,升级 GitHub Actions 版本。
What's Changed (EN)
New Features
- Added OpenRouter chat completion provider adapter with support for custom headers (#6436).
- Added MiniMax provider (#6318).
- Added batch conversation deletion in WebChat (#6160).
- Added send shortcut settings and localization support for WebChat input (#6272).
- Added local temporary directory binding in YAML config (#6191).
Improvements
- Improved UMO processing compatibility (#5996).
- Refactored
_extract_session_idfor chat type handling (#5775). - Improved chat component behavior and uses
shikifor code-block rendering (#6286). - Improved WebUI theme color and visual behavior (#6263).
- Improved OneBot
@component spacing handling (#6238). - Improved PR checklist validation and closure messaging.
Bug Fixes
- Fixed missing
providers_configsync after creating new providers (#6388). - Fixed
TypeErrorwhen API returns null choices (#6313). - Fixed repeated QQ webhook retry callbacks (#6320).
- Fixed tool-calling streaming null
deltahandling to preventAttributeError(#6365). - Fixed model service link wording in docs/config (#6296).
- Fixed AI media sending failure when tool-calling mode is set to
skills-like(#6317). - Fixed GIF being sent as static image in Telegram adapter (#6329).
- Replaced npm registry URLs with jsDelivr CDN for provider icons (#6340).
- Fixed QQ official face message parsing to readable text (#6355).
- Fixed WebChat stream-result crash on queue errors (#6123).
- Preserved subagent handoff tools during plugin filtering (#6155).
- Fixed cron prompt spacing and deprecated
utcnow()usage (#6192). - Fixed unstable sidebar hash navigation on startup (#6159).
- Fixed
ValueErrorin retry loop when removing an already removed API key (#6193). - Updated startup command to
astrbot runacross READMEs (#6189). - Preserved whitespace in
Plain.toDict()for @ mentions (#6244). - Removed duplicate dependencies entries (#6247).
- Fixed Telegram normal reply being treated as topic thread (#6174).
Documentation
- Updated
rainyunbackup/access documentation (#6427). - Updated
package.mdand platform docs, including Matrix and Wecom AI bot documentation. - Fixed Discord invite link in community docs.
Chores
- Updated PR templates/checklist workflow, repository service config, and automated checks.
- Refreshed repository automation and formatting maintenance, and removed obsolete changelog scripts.
v4.20.0
What's Changed
新增
优化
修复
- 修复 Dashboard README 对话框锚点导航失效(#6083)。
- 优先使用具名 weekday 的 cron 示例,避免歧义(#6091)。
- 修复插件市场安装后状态未及时刷新的问题(#6124)。
- 修复插件依赖安装逻辑:仅安装缺失依赖(#6088)。
- 移除 Telegram 适配器中已废弃的
normalize_whitespace参数(#6044)。 - 修复 Windows 本地 skill 文件读取问题(#6028)。
- 修复 Discord pre-ack emoji 配置重启后不持久化的问题(#6031)。
- 统一 WebUI 搜索框清空行为(#6017)。
- 优化插件依赖自动安装流程与 Dashboard 安装体验(#5954)。
What's Changed (EN)
New Features
- Added Russian translation support (#6081).
- Added file, voice, and video message support for QQ Official Bot (including WebSocket mode) (#6063).
Improvements
- Improved streaming message delivery reliability and proactive media sending for QQ Official API (#6131).
- Optimized booter selection logic in edge cases and message sending tooling (#6064).
Bug Fixes
- Fixed broken README dialog anchor navigation in the Dashboard (#6083).
- Preferred named weekday cron examples to reduce ambiguity (#6091).
- Fixed plugin market install-state refresh after installation (#6124).
- Fixed plugin dependency installation logic to install only missing packages (#6088).
- Removed deprecated
normalize_whitespaceparameter in the Telegram adapter (#6044). - Fixed local skill file reading issues on Windows (#6028).
- Fixed Discord pre-ack emoji config not being persisted across restarts (#6031).
- Unified WebUI search input clear behavior (#6017).
- Improved plugin dependency auto-install flow and Dashboard installation experience (#5954).
What's Changed
- fix: 插件依赖自动安装逻辑与 Dashboard 安装体验优化 by @zouyonghe in #5954
- fix(webui): unify search input clear behavior by @Flartiny in #6017
- fix: Persist Discord pre-ack emoji config across restart by adding missing default key by @Jzjerry in #6031
- fix: improve Windows local skill file reading by @zouyonghe in #6028
- feat: added support for file, voice, and video messages for QQ Official Bot (including WebSocket mode). by @Soulter in #6063
- perf: optimize booter selection for edge cases and message sending tool by @Soulter in #6064
- fix(docs): typo in docker.md & napcat.md by @shudorcl in #6048
- fix(telegram): remove deprecated normalize_whitespace param from telegramify_markdown.markdownify calls by @DOHEX in #6044
- fix: install only missing plugin dependencies by @zouyonghe in #6088
- chore: update dependency and workflow versions by @zouyonghe in #6119
- fix(extension): refresh plugin market install state after install by @letr007 in #6124
- docs: 添加 Astrbook 和玖帕喵社区链接 by @advent259141 in #6135
- [Security] Fix CRITICAL vulnerability: V-004 by @orbisai0security in #6093
- fix: prefer named weekday cron examples by @stablegenius49 in #6091
- fix(dashboard): restore README dialog anchor navigation by @stablegenius49 in #6083
- feat: add Russian translation by @seoeaa in #6081
- perf(QQ Official API): improve streaming message delivery reliability and proactive media sending by @2ndelement in #6131
New Contributors
- @Jzjerry made their first contribution in #6031
- @shudorcl made their first contribution in #6048
- @DOHEX made their first contribution in #6044
- @orbisai0security made their first contribution in #6093
- @stablegenius49 made their first contribution in #6091
- @seoeaa made their first contribution in #6081
- @2ndelement made their first contribution in #6131
Full Changelog: v4.19.5...v4.20.0
v4.19.5
What's Changed
新增
优化
- 启动时后台加载 MCP Server,不阻塞加载流程 (#5993)。
修复
- 部分情况下 MCP 页报错 500 导致查看不了 MCP 服务器 (#5993)。
- 修复 TTS Provider 测试:增加文件大小校验,并补充 MiniMax 空音频检测 (#5999)。
- 修复前端切换到 Chat 后又回到 Welcome 时,页面切换配置未正确持久化的问题 (#5792)。
- 修复 Azure TTS 不支持 84 位订阅密钥的问题 (#5813)。
文档
- 文档仓库迁移:将
AstrBotDevs/AstrBot-docs内容迁移至AstrBotDevs/AstrBot(#5960)。
What's Changed (EN)
New Features
- Added CardKit streaming output support for the Lark/Feishu adapter (#5777).
- Added filtering and sorting for installed plugins in the WebUI (#5923).
Impprovement
- MCP Server now loads in the background during startup without blocking the loading process (#5993).
Bug Fixes
- Added file size validation in TTS provider tests and MiniMax empty-audio detection (#5999).
- Fixed frontend state persistence when switching from Chat back to Welcome (#5792).
- Fixed Azure TTS support for 84-character subscription keys (#5813).
- Reverted the MCP stdio missing-command error wording change after the previous fix (#5992).
Documentation
- Migrated documentation content from
AstrBotDevs/AstrBot-docsintoAstrBotDevs/AstrBot(#5960).