Weilong Liao
2dfbabcd29
Delete tests/test_qqofficial_adapter.py
2026-05-27 21:59:15 +08:00
Soulter
38e4408ebe
feat(qqofficial): split message chain by media and update sending logic
2026-05-27 21:58:34 +08:00
NayukiChiba
85f9c4dff8
fix(mimo): 修复voice design模型请求中包含无效voice参数的问题 ( #8326 )
...
* fix(mimo): 修复voice design模型请求中包含无效voice参数的问题
- voice design模型不支持audio.voice参数,之前统一添加导致请求可能出错
- 在构建请求payload时根据模型名称动态决定是否包含voice字段
- 增加单元测试覆盖voicedesign模型和普通模型的参数构建逻辑
close #8283
* style: 使用snake case命名法
2026-05-27 21:36:22 +08:00
lingyun14
465a685b66
feat: add EULA hint for first notification ( #7955 )
...
* docs: add FIRST_NOTICE.ru-RU.md
* docs: add metrics notice to FIRST_NOTICE files
* docs: add metrics notice to FIRST_NOTICE
* docs: update FIRST_NOTICE to reference system config
* docs: update FIRST_NOTICE to reference system config
* docs: update FIRST_NOTICE to reference system config
* Update FIRST_NOTICE.md
* Update FIRST_NOTICE.en-US.md
* Update FIRST_NOTICE.ru-RU.md
2026-05-27 21:33:41 +08:00
NayukiChiba
89153fdf80
fix: 8267 mimo reasoning content ( #8327 )
...
* feat(openai): 为MiMo推理模型自动补充reasoning_content字段
- 消息过滤时增加reasoning_content判断,保留仅含思考内容的assistant消息
- 自动为MiMo推理模型的assistant历史消息注入空reasoning_content,满足API要求
- 通过模型名称集合和xiaomimimo.com端点双重判断是否为MiMo推理模型
- 添加单元测试覆盖不同模型识别、字段注入、端点检测和已有内容保留等场景
* fix(openai): 移除MiMo推理模型检测中的端点主机名判断
- 回退通过xiaomimimo.com主机名自动识别MiMo推理模型的逻辑
- 仅保留基于模型名称集合的判断方式,避免误判非MiMo模型
- 删除对应主机名检测的单元测试用例
* test(openai): 补充MiMo推理模型仅含reasoning_content消息不过滤的单元测试
- 添加test_mimo_filter_preserves_reasoning_only_assistant_message参数化测试
- 验证仅有reasoning_content的assistant消息不会被_sanitize过滤
- 确保包含reasoning_content的空content消息仍保留在对话历史中
* Update test_openai_source.py
---------
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
2026-05-27 21:13:40 +08:00
星空凌
538772c305
feat: add Xiaomi 和 Xiaomi Token Plan LLM provider ( #7744 )
...
* feat: 新增 Xiaomi 和 Xiaomi Token Plan LLM 提供商
- 新增 Xiaomi provider(OpenAI 兼容)
- 新增 Xiaomi Token Plan provider(Anthropic 兼容)
- 支持全模态(图片理解)
- 内置 MiMo v2.5 系列模型
* Update astrbot/core/provider/sources/xiaomi_token_plan_source.py
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Remove default config from Xiaomi provider adapter
Removed default configuration template for Xiaomi provider adapter.
* Remove default config from Xiaomi Token Plan adapter
Removed default configuration template for Xiaomi Token Plan provider adapter.
* chore: rf
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
Co-authored-by: Soulter <905617992@qq.com >
2026-05-27 21:11:00 +08:00
lxfight
23d70dbdbd
feat(webui): add direct access button on plugin cards and improve embedded page height ( #8369 )
...
* feat(plugin): add pages field to plugin list API response
Include discovered page names for each plugin in the /api/plugin/get
response, so the frontend can determine whether a plugin has a WebUI
without an extra detail request.
* feat(webui): add direct WebUI access button on plugin cards
- Add "open-webui" button on plugin cards when plugin has pages
- Navigate to plugin's first page directly from the card
- Adjust PluginPagePage iframe height for better UX
- Add i18n labels (zh-CN/en-US/ru-RU)
* perf(plugin): use asyncio.gather for concurrent page discovery
Replace sequential await loop with concurrent processing to avoid
blocking on disk I/O when discovering plugin pages.
* fix(webui): disable open plugin UI button when plugin is deactivated
Prevent navigation to a disabled plugin's WebUI page which would
result in an error.
* test: update plugin API tests to match pages field in list response
- test_plugin_get_excludes_scanned_pages: expect pages field now present
- test_plugins: use name-based lookup instead of exact count assertion
---------
Co-authored-by: lxfight <lxfight@192.168 .5.50>
2026-05-27 20:33:10 +08:00
Simon He
ae44163bb3
feat: enable smooth markdown streaming ( #8371 )
2026-05-27 20:30:16 +08:00
dependabot[bot]
284c4082f3
chore(deps): bump the github-actions group with 3 updates ( #8335 )
...
Bumps the github-actions group with 3 updates: [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action ), [docker/login-action](https://github.com/docker/login-action ) and [docker/build-push-action](https://github.com/docker/build-push-action ).
Updates `docker/setup-buildx-action` from 4.0.0 to 4.1.0
- [Release notes](https://github.com/docker/setup-buildx-action/releases )
- [Commits](https://github.com/docker/setup-buildx-action/compare/v4.0.0...v4.1.0 )
Updates `docker/login-action` from 4.1.0 to 4.2.0
- [Release notes](https://github.com/docker/login-action/releases )
- [Commits](https://github.com/docker/login-action/compare/v4.1.0...v4.2.0 )
Updates `docker/build-push-action` from 7.1.0 to 7.2.0
- [Release notes](https://github.com/docker/build-push-action/releases )
- [Commits](https://github.com/docker/build-push-action/compare/v7.1.0...v7.2.0 )
---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
dependency-version: 4.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: github-actions
- dependency-name: docker/login-action
dependency-version: 4.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: github-actions
- dependency-name: docker/build-push-action
dependency-version: 7.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: github-actions
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-27 12:00:42 +08:00
letr
bc35daa110
fix(webui): restore mobile provider source deletion ( #8321 )
...
* fix(webui): restore mobile provider source deletion
* fix(webui): improve provider source delete accessibility
2026-05-27 11:59:06 +08:00
F. Abyssalis
000d638c1b
fixed typo in the Chinese documentation for the QQ official WebSocket bot setup. ( #8351 )
2026-05-27 11:56:28 +08:00
香草味的纳西妲喵
7ff58f2938
fix(docs): Update FAQ, add description of hard refresh (force reload) of the page. ( #8359 )
2026-05-27 08:44:23 +08:00
hibiki233i
2d78626840
fix SQLAlchemy compatibility issues on macOS ( #7724 )
...
* Stabilize packaged SQLite knowledge base initialization
* Apply suggestion from @sourcery-ai[bot]
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
* Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* fix: updating database URL handling and ensuring unique document IDs
* fix: preserve sqlite pragmas with null pool
---------
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: 邹永赫 <1259085392@qq.com >
2026-05-26 09:37:01 +09:00
NayukiChiba
ff28eca9ca
fix(openai): 修复流式响应末尾usage信息丢失问题 ( #8306 )
...
- 修复在流式处理过程中,因跳过 delta=None 且 choices=[] 的 usage chunk 导致最终 completion 丢失 usage 数据的问题
- 在 handle_chunk 调用条件中增加 chunk.usage 判断,确保末尾 usage chunk 能被正常传递给 state 处理
- 更新相关注释,说明 usage chunk 的例外情况,保障流式响应的 usage 信息完整性
2026-05-23 23:17:44 +08:00
elecvoid243
dcc99e6b9b
feat: 为ChatUI添加指令候选功能 ( #8279 )
...
* feature: add command suggestion for ChatUI
* feat(chat): add focus functionality to chat input after sending messages
* feat(llm): add error handling for LLM provider selection failures
* feat(command-suggestion): enhance command filtering and sorting logic
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-05-22 20:57:19 +08:00
lingyun14
fd4fe84310
fix: docs ( #8229 )
...
* Update listen-message-event.md
* Update other.md
* Update send-message.md
* Update ai.md
* Update ai.md
* Update send-message.md
* Update listen-message-event.md
* Delete docs/zh/dev/star/guides/env.md
* Delete docs/en/dev/star/guides/env.md
* Update simple.md
* Update discord.md
* Update discord.md
* Update matrix.md
* Update matrix.md
* Update index.md
* Update index.md
* Update openapi.md
* Update ppio.md
* Update ppio.md
* Update function-calling.md
* Update function-calling.md
* Update config.mjs
* docs: add EN desktop deployment page
* Update plugin.md
* Update ai.md
* Update ai.md
* Update ai.md
* Update desktop.md
2026-05-22 20:35:29 +08:00
EmilyCheoh
f5bd4f30e5
fix: preserve original completion_text in skills_like tool re-query ( #8240 )
...
Only overwrite tool-call-related fields from the re-query response, preserving the original completion_text and reasoning_content that were already sent to the user.
2026-05-22 20:32:29 +08:00
x1051445024
1e48bab514
fix: handle delta=None chunks in streaming to prevent SDK to_dict() error ( #8244 )
...
* fix: handle delta=None chunks in streaming to prevent SDK to_dict() error
When certain OpenAI-compatible providers (Gemini, DeepSeek, some proxies)
return chunks with choice.delta=None (e.g. ContentBlockDeltaEvent),
ChatCompletionStreamState._convert_initial_chunk_into_snapshot internally
calls choice.delta.to_dict() at line 747, causing:
'NoneType' object has no attribute 'to_dict'
Fix:
1. Skip handle_chunk when delta is None (delta=None chunks have no
content contribution anyway)
2. Wrap get_final_completion in try/except to gracefully fall back to
empty ChatCompletion if SDK state is corrupted
Refs: openai-python#5069, openai-python#5047
* fix: resolve bugs found by Sourcery and gemini-code-assist review
- Remove orphan logger.error that caused NameError on every chunk
- Replace broken empty ChatCompletion fallback with clean return;
streamed content already yielded, no data loss
Co-authored-by: sourcery-ai[bot] <sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <gemini-code-assist[bot]@users.noreply.github.com>
* fix: properly replace get_final_completion fallback in _query_stream
Previous fix_pr_v3 wrongly injected code into terminate() instead.
Now correctly:
1. Replace empty ChatCompletion fallback with clean return in _query_stream
2. Revert terminate() to original (await self.client.close() only)
* fix: revert corrupted terminate() to original
Previous fix_pr_v3 injected wrong-indentation code into terminate().
---------
Co-authored-by: sourcery-ai[bot] <sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <gemini-code-assist[bot]@users.noreply.github.com>
2026-05-22 20:28:03 +08:00
lingyun14
3f20bbdf23
fix: t2i shiki issue ( #8013 )
...
* fix(t2i): run Shiki runtime injection in executor to avoid blocking event loop
* Update network_strategy.py
* ruff
2026-05-22 19:11:38 +08:00
lingyun14
0711172fa7
Fix/stale command hints ( #8245 )
...
* Update stage.py
* fix: remove stale slash command hints
* fix: remove stale slash command hints
* fix: remove stale slash command hints
* Update openai_source.py
2026-05-21 21:45:57 +08:00
Weilong Liao
d15606d202
feat(password): add command to change AstrBot dashboard password ( #8272 )
...
closes : #8268
2026-05-21 21:37:10 +08:00
M1LKT
165933545d
feat: Automate generation of the MDI icon font subset during dashboard dev and build workflows ( #8264 )
...
* feat: ignore字体集的生成文件,并在编译时自动生成
* 移除preview的前置运行
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-21 08:48:12 +08:00
Yufeng He
c4693fa68e
fix: support rst and adoc knowledge uploads ( #8255 )
2026-05-20 14:38:16 +08:00
Jianyu Li
7a9fb33dd9
docs: fix typo of the count in FAQ deletion instructions ( #8235 )
...
Correct the number of fields to be deleted from five to six in the instructions.
2026-05-19 14:41:58 +08:00
dependabot[bot]
de0a7afdcf
chore(deps): bump pnpm/action-setup in the github-actions group ( #8233 )
...
Bumps the github-actions group with 1 update: [pnpm/action-setup](https://github.com/pnpm/action-setup ).
Updates `pnpm/action-setup` from 6.0.7 to 6.0.8
- [Release notes](https://github.com/pnpm/action-setup/releases )
- [Commits](https://github.com/pnpm/action-setup/compare/v6.0.7...v6.0.8 )
---
updated-dependencies:
- dependency-name: pnpm/action-setup
dependency-version: 6.0.8
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: github-actions
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-19 13:21:03 +09:00
Yufeng He
5bbcdced0f
fix: skip empty llm summaries ( #8195 )
2026-05-19 09:38:55 +08:00
Soulter
dceacd5a87
docs: update release version instructions in AGENTS.md
2026-05-17 15:07:39 +08:00
Soulter
d609f23b71
chore: bump version to 4.25.1
v4.25.1
2026-05-17 15:01:59 +08:00
Soulter
a1e95081be
feat: add random suffix for weixin and dingtalk id
2026-05-17 14:56:15 +08:00
Midwich
b3381c6448
fix(webui): add Noto Sans to global font-family stack for Cyrillic text ( #8205 )
...
PR #8015 added 'Noto Sans' to the Google Fonts link and CJK fallback list,
but the font was placed at the end of $cjk-sans-fallback where browsers
never reach it for Cyrillic text. The global $body-font-family also lacked
'Outfit' entirely, causing Vuetify to use CJK fonts as the primary face.
Changes:
- Remove 'Noto Sans' from the end of $cjk-sans-fallback (it is not a CJK font)
- Add 'Outfit' and 'Noto Sans' to $body-font-family before CJK fallbacks
- Update .Outfit class in _container.scss to match the new stack
This ensures:
- Latin text → Outfit
- Cyrillic text → Noto Sans (loaded by vite-plugin-webfont-dl)
- CJK text → Noto Sans SC / PingFang SC etc.
Fixes follow-up to #8015 .
2026-05-16 22:03:13 +08:00
Soulter
02291a3217
chore: bump version to 4.25.0
v4.25.0
2026-05-16 01:39:04 +08:00
Yufeng He
1d69626421
fix: pass image inputs through active replies ( #8119 )
...
* fix(core): pass images through active replies
* fix: harden active reply image collection
* test: avoid logger coupling in active reply test
* Delete tests/unit/test_builtin_astrbot_main.py
---------
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
2026-05-16 01:34:03 +08:00
Tom8266
871b932785
fix: detect Tencent SILK (\x02 prefix) in audio magic bytes to avoid ffmpeg failure ( #8009 )
...
* fix: detect Tencent SILK (\x02 prefix) in audio magic bytes to avoid ffmpeg failure
QQ official bot sends voice in Tencent SILK format (leading \x02 byte before
#!SILK_V3 magic). _get_audio_magic_type() had two off-by-one slice errors:
1. Standard SILK: header[:8] vs b'#!SILK_V3' (8 != 9 bytes) — never matched
2. Tencent SILK: not detected at all
Fixes:
- Standard SILK: header[:9] == b'#!SILK_V3' (correct 9-byte slice)
- Tencent SILK: header[:1] == b"\x02" and header[1:10] == b'#!SILK_V3'
- ensure_wav() routes detected silk to tencent_silk_to_wav()
Before: QQ voice → ffmpeg → 'Invalid data found'
After: QQ voice → magic detects silk → tencent_silk_to_wav → WAV OK
* refactor: use startswith() for SILK magic byte detection
Replace manual slice comparisons with startswith() — cleaner, less
error-prone, and immune to off-by-one slice errors.
Suggested by: sourcery-ai
2026-05-16 01:20:52 +08:00
Weilong Liao
c88025c2a3
feat(dingtalk): implement one-click QR registration and polling mechanism ( #8198 )
2026-05-15 18:43:21 +08:00
lingyun14
094aef6241
fix: drop **kwargs bug in two register funcs ( #8141 )
2026-05-15 17:00:03 +08:00
Weilong Liao
6982ef7d94
feat(weixin_oc): handle session timeout and clear login state ( #8196 )
2026-05-15 15:30:56 +08:00
Midwich
1a0306343a
fix(webui): add Noto Sans font support for Cyrillic text ( #8015 )
...
The WebUI only loaded Noto Sans SC (Simplified Chinese), which lacks
Cyrillic glyphs. Russian text fell back to system sans-serif, causing
poor rendering depending on the OS.
Changes:
- Load Noto Sans (regular) from Google Fonts alongside Noto Sans SC
- Add 'Noto Sans' at the END of $cjk-sans-fallback (after CJK fonts)
so Chinese text still renders with system CJK fonts first,
while Cyrillic text falls through to Noto Sans.
This ensures both Chinese and Cyrillic text render correctly.
2026-05-15 13:36:37 +08:00
千岚之夏
a09657e620
fix: handle MiniMax TTS timber weight configuration more robustly to avoid crashes on invalid or empty values
...
* fix: add comments and await asyncio.sleep(0) for startup signal
* fix: [Bug] 修复 MiniMax TTS 空字符串配置解析报错
* fix: 采纳AI审查建议,添日志+提取默认配置变量
* fix: 移除误加的core_lifecycle.py改动
---------
Co-authored-by: RainBot-Ai <qianlanzhiya@gmail.com >
2026-05-15 13:01:36 +08:00
Weilong Liao
aace90daab
feat: supports scan QR code to configure feishu / lark ( #8191 )
...
* feat(lark): implement app registration and bot info retrieval
- Add app registration functionality for Lark and Feishu platforms, including endpoints and request handling.
- Introduce polling mechanism for app registration status.
- Create bot info retrieval functionality to fetch bot details after successful registration.
- Enhance dashboard with new UI components for one-click QR setup and manual setup options.
- Update internationalization files to support new features and actions.
- Add unit tests for app registration endpoint resolution and data handling.
* feat(weixin_oc): add WeChat login registration and QR code handling
2026-05-15 13:00:26 +08:00
Yufeng He
094c2de85a
fix: surface weixin media send failures ( #8175 )
...
* fix: surface weixin media send failures
* fix: include weixin send failure context
* Delete tests/unit/test_weixin_oc_adapter.py
---------
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
2026-05-14 12:17:59 +08:00
counhopig
7d402fa16a
fix: add ollama and nvidia embedding ( #8104 )
...
* fix: add ollama and nvidia embedding
* fix: address code review feedback for embedding providers
- Remove redundant proxy branch in NvidiaEmbeddingProvider._get_client
- Change ClientError handling to re-raise instead of wrapping in Exception
- Add exc_info=True for better error diagnostics
- Remove redundant isinstance check in OllamaEmbeddingProvider._build_payload
2026-05-14 12:16:35 +08:00
lingyun14
3a1d6c8f89
fix: handle None tool arguments from Claude API for no-parameter tools ( #8136 )
...
* fix: handle None tool arguments returned by Claude API for no-parameter tools
* fix: handle None tool arguments from Claude API for no-parameter tools
* fix: generalize None tool args comment
* fix: generalize None tool args comment
* 去除空格,以保证格式正确
2026-05-14 12:01:19 +08:00
Chang Lee
35f5d7e710
perf: enhance AMR audio quality and simplify opus logic ( #8153 )
...
* chore: streamline convert_audio_to_opus logic
- Route Opus conversion directly through the underlying convert_audio_format.
- Remove redundant FFmpeg processing chains to improve code reusability.
* perf: optimize AMR voice encoding parameters
- Enhance AMR audio quality via built-in FFmpeg filters.
2026-05-14 11:57:14 +08:00
M1LKT
720d384b44
fix: synchronize the autoScroll state of the consoleDisplayer component using $refs ( #8186 )
2026-05-14 11:44:42 +08:00
Yufeng He
3290d75519
fix: prefer bundled dashboard over stale data dist ( #8172 )
...
* fix: prefer bundled dashboard over stale dist
* fix: harden dashboard dist version checks
2026-05-14 09:00:16 +08:00
lingyun14
ef73d2da33
docs: Clarify and expand the LLM tool registration guidance in the AI plugin documentation ( #8178 )
...
* docs(zh/ai): fix misleading tool registration guide and add warnings
* docs(en/ai): add tool registration section with deprecation warnings
2026-05-14 08:58:37 +08:00
Soulter
c77cb0f4e2
chore: bump version to 4.24.5
v4.24.5
2026-05-14 01:16:26 +08:00
Soulter
0e6ad1c443
feat: cli supports ASTRBOT_DASHBOARD_INITIAL_PASSWORD env
2026-05-14 01:13:46 +08:00
Soulter
e05dd650ab
feat(auth): add legacy password login failure message and FAQ guidance for upgrade issues
2026-05-14 00:48:15 +08:00
Soulter
93428a7976
feat: add initial dashboard password resolution from environment variable
2026-05-14 00:45:37 +08:00