Weilong Liao
3d4c4ed01b
fix: validate plugin install sources ( #9061 )
2026-06-28 13:45:59 +08:00
Gargantua
c1cc74b6bc
fix: preserve fallback models for future tasks ( #9054 )
...
* fix: preserve fallback models for future tasks
* chore: remove local test markdown ignore
---------
Co-authored-by: Gargantua <22532097@zju.edu.cn >
2026-06-28 00:03:31 +08:00
Weilong Liao
a619988d2d
chore: bump version to 4.26.2 ( #9052 )
2026-06-27 17:50:04 +08:00
Weilong Liao
de572e3fe0
fix: avoid duplicate send_message_to_user replies ( #9051 )
2026-06-27 16:57:17 +08:00
F. Abyssalis
d4fa9d3d5d
fix: align OpenAI tool message sanitizer ( #8350 )
...
Co-authored-by: Soulter <905617992@qq.com >
2026-06-27 16:27:32 +08:00
Weilong Liao
8f30978c8d
fix: separate plugin and tool activation state ( #9048 )
...
* fix: separate plugin and tool activation state
* style: apply ruff formatting
* fix: preserve manual tool deactivation on load
* fix: harden plugin tool state migration
2026-06-27 16:15:31 +08:00
Fiber
298078b536
Fix: KV storage not cleared on plugin uninstall. Improved cleanup logic and updated i18n strings to indicate database KV data removal. ( #8291 )
...
* fix: 完善插件卸载时的清理逻辑,新增KV数据清理,更新了多语言文案以说明会清理数据库KV数据
* fix: 修复插件关闭时不清理KV的问题,更新单元测试
* refactor: 统一插件ID生成逻辑
将插件ID生成逻辑抽离到StarMetadata类中,移除重复的代码实现,
同时在__post_init__中自动补全plugin_id字段。
* refactor: 将plugin_id属性从方法转换为属性,确保在属性赋值后正确计算
2026-06-27 16:06:14 +08:00
伊尔弥亚 - Irmia
3667487dd7
fix: DeepSeek V4 proxy model recognition — substring match instead of exact set match for reasoning_content injection ( #9015 )
...
* fix: DeepSeek V4 proxy model recognition — substring match for reasoning_content
* fix: remove deepseek-chat/reasoner exclusion per review feedback
2026-06-27 15:46:11 +08:00
renchonghan
3db778ff09
fix: prevent API 400 errors by ensuring assistant messages with reasoning_content but no content or tool_calls are preserved with a placeholder content value ( #8483 )
...
* fix: preserve assistant messages with reasoning_content in sanitize pass
When _sanitize_assistant_messages encounters an assistant message with empty content and no tool_calls but with reasoning_content, keep it with content set to empty string instead of dropping it. Reasoning models (DeepSeek V4, MiMo, etc.) require this history for subsequent turn validation.
* Update astrbot/core/provider/sources/openai_source.py
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* fix: default to empty TokenUsage when completion.usage is None
When completion.usage is None (e.g. certain proxy/streaming edge cases), llm_response.usage stayed unset (None). Plugins accessing .input_tokens on it would crash with AttributeError.
Always assign llm_response.usage — extract from completion.usage if present, otherwise fall back to a zeroed TokenUsage().
Closes #8605
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: renchonghan <renchonghan@users.noreply.github.com >
2026-06-27 15:26:09 +08:00
F. Abyssalis
8213c14cc6
fix: sanitize orphaned tool_result blocks in Anthropic provider ( #8952 )
...
* sanitize orphaned tool_result blocks in Anthropic provider
Sanitize tool_result blocks and merge consecutive messages with the same role to comply with Anthropic API requirements.
* Fix content handling in message merging logic
* fix: sanitize anthropic assistant messages
* fix: validate anthropic tool result ordering
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-06-27 15:18:33 +08:00
FuShang114
b8f4c7d515
fix: handle MiMo STT audio and reasoning output ( #8938 )
...
* fix: handle MiMo STT audio and reasoning output
* fix: 移除 MiMo STT 的系统和用户提示词配置
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-06-27 15:04:41 +08:00
Weilong Liao
0ef790d289
fix: track plugin install source for updates ( #9037 )
...
* fix: track plugin install source for updates
* feat: refine plugin source management flow
* test: align plugin update expectation
2026-06-27 15:02:04 +08:00
fan
534ad0ccc7
fix: _KeyRotator index bounds check ( #9040 )
2026-06-27 13:56:26 +08:00
MUHAMED FAZAL PS
b5e29511ac
fix: reliably kill shell process tree on Windows timeout ( #8822 )
...
* fix: reliably kill shell process tree on Windows timeout
Fixes #8809
* fix: remove redundant import and wrap taskkill in try/except
- Remove 'import subprocess as _sp' (subprocess already imported at top)
- Use subprocess.run directly with DEVNULL for stdout/stderr
- Wrap taskkill in try/except to avoid masking original TimeoutExpired
- If taskkill fails, cleanup failures don't prevent proc.wait() or re-raise
https://buymeacoffee.com/muhamedfazalps
* style: apply ruff formatting to local.py
* test: fix shell component tests to match Popen-based implementation
The tests were monkeypatching subprocess.run but the implementation
now uses subprocess.Popen + communicate() for timeout handling.
Updated tests to mock Popen instead.
Fixes CI Unit Tests failure
* fix: harden windows shell timeout cleanup
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-06-27 00:10:59 +08:00
Weilong Liao
d6738a03f3
fix: preserve jpeg quality during conversion ( #9031 )
2026-06-26 22:43:15 +08:00
NayukiChiba
c93bedf04d
fix: unify handling of whitespace in streamed message segments and ensure trailing buffers are stripped before sending. ( #9029 )
...
* perf(streaming): 将流式消息分段发送的空白过滤逻辑前移至核心方法
- 在 AstrMessageEvent 的 process_buffer 中统一进行 strip 并跳过空段,移除各平台子类的重复处理
- aiocqhttp 平台回退尾部 buffer 直接使用核心逻辑过滤,避免自身再次判断空白
- 简化流式消息发送链路,提升代码可维护性与执行效率
* test(strip-stream): 添加流式消息分段空白过滤的单元测试
- 新增 CollectingMessageEvent 与 CollectingAiocqhttpMessageEvent 辅助类,模拟消息发送与断言
- 覆盖 AstrMessageEvent.process_buffer 对段落前导空白行的 strip 和空段跳过逻辑
- 覆盖 AiocqhttpMessageEvent.send_streaming 回退缓冲区的空白过滤,确保跨平台行为一致
* fix(streaming): 调整流式消息分段发送限速等待位置
- 将限速等待(sleep)从循环末尾移动至消息发送成功后立即执行
- 仅在成功发送文本片段时才进行等待,避免无实际发送时的无谓延迟
- 修复因等待时机不当可能导致的流式消息发送频率异常问题
* test(strip-stream): 添加空白分段时跳过睡眠的单元测试
- 新增测试用例,验证当分段为空时不调用睡眠函数
- 确保处理缓冲区时正确剥离空白字符
- 测试通过验证发送消息的行为
* Delete tests/test_streaming_segment_strip.py
---------
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
2026-06-26 22:11:31 +08:00
Lovely Moe Moli
110cc8736c
fix: 'DashboardRequest' object has no attribute 'get_data' ( #9021 ) ( #9023 )
2026-06-26 22:04:29 +08:00
Weilong Liao
c6b2c65b04
fix: preserve image formats in media handling ( #9019 )
...
* fix: preserve image formats in media handling
* fix: address image format review feedback
* fix: avoid tainted image temp path rename
2026-06-26 11:27:32 +08:00
Weilong Liao
00c50b3b92
chore: bump version to 4.26.1
2026-06-25 23:12:10 +08:00
Weilong Liao
090f9008b6
chore: revert "fix: preserve At components when sending messages on qq_official plat…" ( #9004 )
...
This reverts commit bc117038fb .
2026-06-25 17:07:08 +08:00
Weilong Liao
473377f340
feat: update permission handling to delegate event context in guarded tools ( #9001 )
2026-06-25 16:18:04 +08:00
Foolllll
9daf8f0a84
fix: check OnWaitingLLMRequestEvent stop signal before acquiring session lock ( #8935 )
2026-06-25 16:17:07 +08:00
Weilong Liao
952d1bfad7
chore: bump version to 4.26.0 ( #8994 )
...
* chore: bump version to 4.26.0
* feat: 更新 v4.26.0 更新日志,添加 WebUI 设置迁移提示及新功能说明
* fix: 修复多个 WebUI 和工具相关问题,提升稳定性和用户体验
2026-06-24 23:44:15 +08:00
Soulter
0cfe4163cd
fix: update max_context_length and dequeue_context_length defaults
2026-06-24 23:21:50 +08:00
Weilong Liao
d90530af8e
Revert "fix: reconnect MCP client on terminated session ( #8694 )" ( #8991 )
...
This reverts commit 2bda4e4d96 .
2026-06-24 22:44:45 +08:00
EterUltimate
2bda4e4d96
fix: reconnect MCP client on terminated session ( #8694 )
...
* fix: reconnect MCP client on terminated session
* Update astrbot/core/agent/mcp_client.py
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update mcp_client.py
---------
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-06-24 22:43:24 +08:00
ZouZhang
bc117038fb
fix: preserve At components when sending messages on qq_official platform ( #8983 )
...
- Add At component handling in _parse_to_qqofficial method
- Convert At(qq=openid) to <@openid> plain_text format
- Maintain original message chain order by appending
- Skip At(qq='all') since QQ Official API may not support it
Closes #8982
2026-06-24 22:15:12 +08:00
FuShang114
b7cadfe704
fix: allow plugin page asset token fallback ( #8970 )
...
Co-authored-by: beidou-lab-macmini <beidou-lab-macmini@beidou-lab-macminideMac-mini.local >
2026-06-24 22:11:49 +08:00
Weilong Liao
421d718041
feat: show public version details on login ( #8986 )
...
* feat: show public version details on login
* fix: address login version review feedback
2026-06-24 21:46:29 +08:00
Weilong Liao
967ed01cf7
fix: add data scope to api keys ( #8985 )
2026-06-24 16:37:46 +08:00
Weilong Liao
df4d93d724
fix: normalize cron weekday scheduling ( #8984 )
2026-06-24 16:22:58 +08:00
VectorPeak
3c7956e8c8
fix: prevent path traversal in plugin upload filenames ( #8968 )
2026-06-24 15:55:53 +08:00
VectorPeak
5266d170a3
fix: prevent path traversal vulnerability in knowledge base upload filenames ( #8971 )
2026-06-24 15:55:01 +08:00
Tanishq
ae29a7eaf9
feat(websearch): add Exa as a web search provider ( #8973 )
...
- Add ExaWebSearchTool (web_search_exa) with keyword/semantic search,
category filters, domain restrictions, and date range support
- Add ExaGetContentsTool (exa_get_contents) for extracting web page content
- Add _exa_search() and _exa_get_contents() API helpers hitting
https://api.exa.ai/search and https://api.exa.ai/contents
- Add _EXA_KEY_ROTATOR for multi-key rotation
- Register Exa tools in _apply_web_search_tools() dispatch
- Add Exa to WEB_SEARCH_CITATION_TOOL_NAMES for citation support
- Add websearch_exa_key config default and provider option
- Add i18n metadata for en-US, zh-CN, ru-RU
- Add Exa section to docs (en + zh)
- Add 6 unit tests covering search, contents, error handling, and
legacy config migration
Closes #5621
2026-06-24 15:53:47 +08:00
Soulter
7980ed28ad
fix: restore cli init dashboard monkeypatch hook
2026-06-21 14:14:45 +08:00
Weilong Liao
c59ef11128
chore: bump version to 4.26.0-beta.12 ( #8934 )
2026-06-21 14:12:07 +08:00
Weilong Liao
39d425316f
fix: created unnecessary data dir when executing astrbot command ( #8932 )
...
* fix: created unnecessary data dir when executing astrbot command
fixes : #8853
* fix: 更新包版本更新函数以修改 astrbot/__init__.py 中的版本号
2026-06-21 14:04:49 +08:00
lingyun14
42ca89d6c8
fix: 修复提供商源修改 ID 后保存被静默还原的问题 ( #8915 )
...
* Update schemas.py
* Update schemas.py
2026-06-21 11:55:54 +08:00
Weilong Liao
b6913833d4
chore: bump version to 4.26.0-beta.11
...
Release 4.26.0-beta.11
2026-06-20 22:32:56 +08:00
Weilong Liao
d36987dd19
fix: restore static runtime version
...
Fixes #8924
2026-06-20 22:06:24 +08:00
Weilong Liao
da7f53d5eb
fix: keep system tools with persona tool lists ( #8908 )
2026-06-20 01:15:31 +08:00
Soulter
a7533aacda
fix: fall back to stale WebUI when repair fails
2026-06-20 00:01:29 +08:00
lxfight
2d98d38078
fix: inject knowledge base context as temporary user content ( #8904 )
2026-06-19 22:48:23 +08:00
Weilong Liao
1b0f5cb0d3
fix: keep WebUI assets in sync with core version ( #8901 )
...
* fix: keep WebUI assets in sync with core version
* fix: import dashboard version before bundled fallback
* fix: remove stale WebUI dist robustly
2026-06-19 22:46:38 +08:00
Weilong Liao
272242e407
chore: add release preparation workflow ( #8891 )
...
* chore: add release preparation workflow
* fix: address release workflow review feedback
2026-06-19 17:41:13 +08:00
Weilong Liao
dd36979eca
feat: implement request retry mechanism for provider requests ( #8893 )
...
* feat: implement request retry mechanism for provider requests
* feat: add request max retries configuration and implement retry logic for provider requests
* feat: update fake_query function to accept request_max_retries parameter
* feat: remove retry_rate_limits from provider request calls
2026-06-19 17:13:40 +08:00
Weilong Liao
143f846b92
fix: support renamed MCP streamable HTTP client
...
Support both MCP streamable HTTP client names and keep mcp dependency below 2.
2026-06-19 15:54:47 +08:00
Weilong Liao
5888631ed5
feat: add hosted core package downloads ( #8888 )
...
* feat: add hosted core package downloads
* Potential fix for pull request finding 'CodeQL / Incomplete URL substring sanitization'
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* fix: validate hosted core package archive
* fix: validate hosted dashboard package archive
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-06-19 12:44:31 +08:00
Weilong Liao
29d66b84b9
feat: support workspace skills in requests ( #8884 )
...
* feat: support workspace skills in requests
* fix: harden workspace skill discovery
* fix: address workspace skills review comments
2026-06-19 12:03:07 +08:00
Weilong Liao
59734c22b6
fix(core): reject hardlinked files in restricted local fs tools
...
Reject multi-linked regular files in restricted local filesystem tools so workspace hardlink aliases cannot read or overwrite files outside allowed directories.
Fixes #8868 .
2026-06-19 00:28:36 +08:00