Commit Graph

2342 Commits

Author SHA1 Message Date
Soulter
dfca5cdb79 fix: improve warning message for missing context token in WeixinOCAdapter 2026-04-07 18:26:27 +08:00
神楽坂·喵
0ce5fde7f8 feat(platform): add Mattermost bot support (#7369)
* feat(platform): add Mattermost bot support (#6009)

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* fix(platform): address Mattermost review feedback

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* fix(platform): improve Mattermost streaming and file IO

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* perf(platform): optimize Mattermost duplicate detection

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* fix(platform): preserve Mattermost command prefixes after mentions

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* test(platform): cover Mattermost attachment parsing

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* docs: add mattermost docs

---------

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: Soulter <905617992@qq.com>
2026-04-06 18:27:28 +08:00
Soulter
2a3d93a6c5 fix: clean up qq official websocket shutdown (#7395)
* fix: clean up qq official websocket shutdown

fixes: #7259

* fix: do not catch KeyboardInterrupt/SystemExit

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2026-04-06 17:59:50 +08:00
Soulter
571b571e7e feat: implement llm guidance for repetition tool call (#7388)
* feat: implement llm guidance for repetition tool call

fixes: #7387

* feat: enhance tool execution guidance with user interruption and repetition notices

* chore: fix test

* feat: rename guidance method for repeated tool calls to improve clarity

* feat: update repeated tool notice thresholds to improve user guidance
2026-04-06 16:31:59 +08:00
Chang Lee
b0b6816039 feat: add NVIDIA rerank provider support (#7227)
* feat: add Rerank API support for NVIDIA NIM

- Add Rerank API support for NVIDIA NIM
- Add related i18n support in en-US zh-CN

* chore: format code

* fix: replace illegal characters

Replace illegal characters when building request model path.

* fix: refactor client initialization method

* fix: enhance response parsing

* docs: add comment for model_path process

* docs: add russia translation

* feat: update AddNewProvider component to support current provider type and enhance provider icon mapping

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-04-06 15:20:21 +08:00
Soulter
224287e170 feat: add audio input support across providers and chatui recording issue fix (#7378)
* feat: add audio input support across providers and chatui recording issue fix

- Introduced audio_urls parameter in Provider class and related methods to handle audio input.
- Updated ProviderAnthropic, ProviderGoogleGenAI, and ProviderOpenAIOfficial to process audio URLs.
- Enhanced media_utils with functions to ensure audio format compatibility and detect audio types.
- Modified dashboard components to display audio input support and handle audio attachments in messages.
- Updated localization files to include audio as a supported modality.
- Added new icons for audio input in the dashboard UI.

* feat: enhance audio handling with temporary file cleanup and format support

* feat: track temporary local files for converted audio components

* fix: update image placeholder in prompt from "[图片]" to "[Image]"
2026-04-06 14:58:29 +08:00
Soulter
80d5efdb45 fix: empty model output error may misfire when use gemini (#7377) 2026-04-06 01:28:23 +08:00
Soulter
ff299f770f chore: bump version to 4.22.3 2026-04-05 23:39:41 +08:00
Futureppo
a93568c6f1 feat(provider): add LongCat LLM Provider (#7360)
* feat(longcat): 添加 LongCat 模型提供商

* chore: remove tests and add longcat logo

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-04-05 13:00:46 +08:00
machina
d8f8462942 fix: add checks to return None if STT or TTS providers are disabled in config (#7363)
Co-authored-by: machina <1531829828@qq.com>
2026-04-05 12:55:37 +08:00
stevessr
4a3f92cdfd feat(matrix): add missing Matrix constant and update docs (#7368)
* feat(matrix): 添加 Matrix 平台适配器支持及更新文档

* feat(matrix): 添加 Matrix 平台图标和教程链接
2026-04-05 12:54:47 +08:00
Rico0919x
70872cd44b feat(provider/vllm_rerank): add configurable rerank_api_suffix option (#7278)
* feat(provider/vllm_rerank): add configurable rerank_api_suffix option

Add rerank_api_suffix config option to the VLLM Rerank provider so
users can control the API URL path suffix instead of having /v1/rerank
hardcoded.

- Default value is /v1/rerank (preserves existing behavior)
- Users can set it to empty string to disable auto-append
- Handles suffix without leading slash by auto-adding one
- Schema, default config, and i18n metadata all updated

Issue: Fixes #7238

* fix(provider/vllm_rerank): handle null suffix and improve hint descriptions

- Add explicit None check for rerank_api_suffix (fixes HIGH from Gemini)
- Update rerank_api_base hint to describe actual behavior without
  mentioning specific provider options (fixes 3x MEDIUM from Gemini)
- Add ru-RU i18n for rerank_api_suffix (fixes P2 from Codex)

Co-authored-by: gemini-code-assist[bot]
Co-authored-by: chatgpt-codex-connector[bot]

---------

Co-authored-by: LehaoLin <linlehao@cuhk.edu.cn>
2026-04-05 00:15:27 +08:00
Soulter
dc9c17c195 feat: support token usage extraction for llama.cpp (#7358)
* feat: support token usage extraction for llama.cpp

* chore: ruff format
2026-04-04 23:49:18 +08:00
SoloLevelingAI
77d5d5cc6a fix(windows): inherit all system environment variables into MCP runner for Windows (#7054)
- Merge environment variables case‑insensitively
- Auto‑configure dotnet PATH and suppress console window
- Keep PATHEXT inheritance (from old implementation)

Replaces the minimal PATHEXT fix with a robust solution that resolves
common Windows subprocess issues, especially for .NET servers.

* fix(stdio): improve Windows environment setup for subprocesses

- Merge environment variables case‑insensitively
- Auto‑configure dotnet PATH and suppress console window
- Keep PATHEXT inheritance (from old implementation)
-Add `show_console` option to control `CREATE_NO_WINDOW` flag.Default remains hidden (backward compatible) but can be overridden.

Replaces the minimal PATHEXT fix with a robust solution that resolves
common Windows subprocess issues, especially for .NET servers.

* fix(stdio): improve Windows environment setup for subprocesses 修复(标准输入输出):改进 Windows 环境设置以支持子进程

- Merge environment variables case‑insensitively
- Auto‑configure dotnet PATH and suppress console window
- Keep PATHEXT inheritance (from old implementation)
-Add `show_console` option to control `CREATE_NO_WINDOW` flag.Default remains hidden (backward compatible) but can be overridden.

Replaces the minimal PATHEXT fix with a robust solution that resolves
common Windows subprocess issues, especially for .NET servers.

* fix(stdio): improve Windows environment setup for subprocesses 修复(标准输入输出):改进 Windows 环境设置以支持子进程

- Merge environment variables case‑insensitively
- Auto‑configure dotnet PATH and suppress console window
- Keep PATHEXT inheritance (from old implementation)
-Add `no_console` option to control `CREATE_NO_WINDOW` flag.Default remains hidden (backward compatible) but can be overridden.

Replaces the minimal PATHEXT fix with a robust solution that resolves
common Windows subprocess issues, especially for .NET servers.

* fix(stdio): improve Windows environment setup for subprocesses 修复(标准输入输出):改进 Windows 环境设置以支持子进程

- Merge environment variables case‑insensitively
- Auto‑configure dotnet PATH and suppress console window
- Keep PATHEXT inheritance (from old implementation)
-Add `no_console` option to control `CREATE_NO_WINDOW` flag.Default remains hidden (backward compatible) but can be overridden.

Replaces the minimal PATHEXT fix with a robust solution that resolves
common Windows subprocess issues, especially for .NET servers.

* fix(windows): inherit all system environment variables for subprocesses

- Merge environment variables case‑insensitively
- Auto‑configure dotnet PATH and suppress console window
- Keep PATHEXT inheritance (from old implementation)
- No longer handle as a special case for C#.

Replaces the minimal PATHEXT fix with a robust solution that resolves
common Windows subprocess issues, especially for .NET servers.

* chore: ruff format

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-04-03 16:51:20 +08:00
Yufeng He
1408a8449e perf: Set content to None when the OpenAI message content list is empty (#6551)
_finally_convert_payload 提取 think 部分后,如果 assistant 消息的
所有 content 都是 think 类型,new_content 会变成空列表 []。
Grok 等 provider 不接受空 content list,直接报 400。

改为 new_content or None,空列表时回退到 None(OpenAI 兼容 API
普遍接受 null content 的 assistant 消息)。

Fixes #6447

Co-authored-by: Yufeng He <40085740+universeplayer@users.noreply.github.com>
2026-04-03 16:38:22 +08:00
Yufeng He
8f95ca9d98 fix: filter Gemini thinking parts from user-facing message chain (#7196)
Gemini 3 models return thinking parts (part.thought=True) alongside the
actual response text.  _process_content_parts was including these thinking
parts in the message chain sent to the user, effectively leaking internal
reasoning into the output.  On platforms that split long messages (e.g.
aiocqhttp with realtime segmenting), this caused duplicate or triple
replies since the thinking text often mirrors the actual response.

The streaming path already handled this correctly via chunk.text which
skips thinking parts, but the non-streaming path and the final-chunk
processing in streaming both went through _process_content_parts.

Also switch the Gemini 3 model name matching from an exhaustive list to
prefix matching (gemini-3- / gemini-3.) so new variants like gemini-3.1
get proper thinkingLevel config without code changes.

Fixes #7183
2026-04-03 16:35:25 +08:00
Yufeng He
5e78a24d63 fix: satisfy Google Gemini's function_response requirements to avoid 400 Invalid argument errors (#7216)
Gemini API requires function_response to be a google.protobuf.Struct
(JSON object). When tool results are plain text strings, the API
returns 400 Invalid argument. Detect non-JSON tool content for Gemini
models and wrap it in {"result": content} before sending.

Fixes #7134
2026-04-03 16:32:49 +08:00
Soulter
6a7b622c48 fix: resolve Discord/Misskey hot reload issue by fixing client_self_id misuse (#7331)
* fix: resolve Discord/Misskey hot reload issue by fixing client_self_id misuse

fixes: #7187
closes: #7188

* fix: english logging
2026-04-03 14:03:23 +08:00
氕氙
9d4472cb2d fix: 改进知识库的初始化错误处理 (#7243)
* fix: 改进 KnowledgeBaseManager 和 KBHelper 中的初始化错误处理

* fix: 改进知识库初始化和重排序错误处理,增强日志记录

* fix: 改进知识库模块初始化和检索错误处理

* fix(ui): handle kb init errors in list cards

display a dedicated error state for knowledge base cards that fail
initialization, including a visible badge and error details

prevent navigation and edit actions for failed cards while keeping
delete available, and hide normal stats/description for error items

add list.initError locale strings for en-US, ru-RU, and zh-CN

* fix(kb): avoid replacing helper on init failure

Initialize a new KB helper before swapping instances so a failed re-init
does not break the active knowledge base service.

If initialization fails, restore in-memory KB settings and keep the
existing helper and previous init error state.

Also clear stale init_error after successful vector DB initialization to
prevent outdated error reporting.

* test(kb): add kb manager resilience tests

cover initialization failure and recovery scenarios to guard
against regressions in kb error handling

include reference assets under refs for test validation

---------

Co-authored-by: RC-CHN <1051989940@qq.com>
2026-04-02 16:16:22 +08:00
kaixinyujue
0ecddb4c06 修复:过滤空助手消息,以防止在严格API上出现400错误(fix: filter empty assistant messages to prevent 400 error on strict APIs) (#7202)
* fix: filter empty assistant messages to prevent 400 error on strict APIs

Some OpenAI-compatible APIs (e.g., Moonshot) reject requests with
empty content in assistant messages when no tool_calls are present.
This fix cleans up the messages payload before sending to avoid
'message at position X must not be empty' errors.

Closes related issue with fallback provider behavior.

* test(openai): add tests for empty assistant message filtering

* refactor(openai): simplify empty assistant message filtering logic

* style: format code

---------

Co-authored-by: RC-CHN <1051989940@qq.com>
2026-04-02 09:10:06 +08:00
Yufeng He
4d2791aa9a fix: support both old and new Bailian Rerank API response formats (#7217)
* fix: support both old and new Bailian Rerank API response formats

The new compatible API (compatible-api/v1/reranks) returns results at
the top level as data.results, while the old API returns them nested
under data.output.results. The parser only checked the old path,
causing qwen3-rerank to always report empty results.

Fixes #7161

* Update astrbot/core/provider/sources/bailian_rerank_source.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: Ruochen Pan <badbatch0x01@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-01 11:55:54 +08:00
NekoYukari
deedf85360 fix: add pysocks dependency to support SOCKS5 proxy for pip install (#7221)
* fix: add pysocks dependency to support SOCKS5 proxy for pip install

* docs: update proxy description to include https:// support

* fix: add python-socks and pysocks to requirements.txt for consistency

---------

Co-authored-by: root <root@localhost.localdomain>
2026-04-01 09:05:02 +08:00
LIghtJUNction
328748bd63 Fix cached_tokens handling in _extract_usage method (#6719)
* Fix cached_tokens handling in _extract_usage method

Ensure cached_tokens is an integer and handle None safely.

* ruuf format
2026-03-31 17:14:52 +08:00
Yufeng He
2ffda752ad fix: send SSE heartbeat to prevent WebChat disconnect during compression (#7003)
* fix: send SSE heartbeat to prevent WebChat disconnect during compression

When context compression triggers with slow reasoning models (e.g.
deepseek-reasoner), the backend can go 30+ seconds without pushing any
SSE data. The client-side EventSource / browser then assumes the
connection is dead and disconnects, causing the WebUI to hang
indefinitely since it never receives the eventual response.

Fix: yield an SSE comment (`: heartbeat`) on every empty poll cycle.
Comment lines are defined in the SSE spec as keep-alive signals --
the EventSource API ignores them but the HTTP connection stays open.

Fixes #6938

* chore(dashboard): extract SSE heartbeat to constant

---------

Co-authored-by: Yufeng He <40085740+universeplayer@users.noreply.github.com>
Co-authored-by: RC-CHN <1051989940@qq.com>
2026-03-30 15:52:10 +08:00
No-22-Github
f75c2d30b4 fix(core): Record.path was incorrectly treated as required under Pydantic v2 (#7048)
* fix: make Record.path optional for pydantic v2 compatibility

* fix: preserve telegram voice record path
2026-03-29 22:59:22 +08:00
Soulter
2b435e0c89 feat: add brand-new statistics dashboarde overview with model usage and platform usage (#7152)
* feat: add new StatsPage for enhanced statistics overview

- Introduced StatsPage.vue to provide a comprehensive overview of statistics with various metrics and charts.
- Implemented fetching and displaying of base and model provider statistics.
- Added unit tests for provider statistics persistence in the database.

* style: refine card styles and remove unnecessary shadow for improved aesthetics
2026-03-29 22:50:15 +08:00
Soulter
43a9262719 feat: add collapsed item support in configuration UI and update localization for more settings 2026-03-29 20:49:07 +08:00
Soulter
afa43fc0e2 chore: update version to 4.22.2 in multiple files 2026-03-29 00:32:31 +08:00
Soulter
551c956107 feat: implement EmptyModelOutputError for handling empty responses across providers and enhance retry logic in ToolLoopAgentRunner (#7104)
closes: #7044
2026-03-29 00:03:05 +08:00
Soulter
1070804b90 feat(dashboard): add SSL configuration resolution for dashboard (#7102)
fixes: #7058

program will not exit but fallback to non-ssl mode when ssl config is wrong
2026-03-28 23:22:24 +08:00
Soulter
7db7f4a16c feat(agent-runner): add tool_choice parameter to fix empty tool calls response in "skills-like" tool call mode (#7101)
fixes: #7049
2026-03-28 23:06:06 +08:00
Yokami
971bcbad10 fix(provider): fix Bailian rerank payload compatibility for qwen3-rerank (#6222)
* fix(provider): align bailian qwen3 rerank payload with latest API schema

* fix(provider): explicitly ignore unsupported return_documents for qwen3 rerank
2026-03-28 21:27:53 +08:00
Soulter
b98bd3898f feat: update QQOfficialPlatformAdapter to support async parsing and attachment preparation (#7007)
fixes: #6853
2026-03-28 21:18:33 +08:00
秋月白
81f4bd4e67 fix: allow multiple skills in a single zip archive (#7070)
* fix: allow multiple skills in a single zip archive

* refactor: address bot review comments

* fix: apply ruff format and fix return value
2026-03-28 21:16:40 +08:00
Stardust
4e9916caa4 fix(pipeline): skip waking on empty messages (#6893)
* fix(pipeline): skip waking on empty messages

* fix(pipeline): skip empty message LLM request even with provider_request

* fix(pipeline): skip empty messages in empty_mention_waiter
2026-03-28 20:50:42 +08:00
Rain-0x01_
995a318232 fix(gsvi_tts): Use the correct calling method (#7083)
* fix(gsvi_tts): Use the correct calling method (#5638)
Add some configuration items for GSVI

* fix(gsvi_tts): add default value for api_key in provider configuration

* fix(gsvi_tts): Adjust wherever the Authorization header is built to only include it when `self.api_key` is truthy
Delete some comments

* chore: ruff format

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-03-28 20:48:43 +08:00
奉眠
fcfd6a9e1c fix(weixin_oc): allow CDN uploads to use upload_full_url when provided (#7066)
* fix(weixin_oc): 处理微信开放平台CDN上传URL的新格式

适配微信开放平台`getuploadurl`接口返回的新格式,该接口现在可能返回`upload_full_url`字段。
优先使用`upload_full_url`作为上传地址,以保持上传功能正常。

* fix(weixin_oc): 改进CDN上传URL缺失时的错误信息

- 在适配器中,将通用错误信息具体化为“CDN上传URL缺失”
- 在客户端中,移除冗余的参数处理逻辑,使参数验证更清晰

* fix(weixin_oc): 调整CDN上传参数顺序并移除冗余检查

移除对weixin_oc_adapter中upload_param和upload_full_url同时为空的检查,因为逻辑上已由底层方法保证。
调整upload_to_cdn方法的参数顺序以匹配其内部实现,确保正确传递。
2026-03-28 14:45:58 +08:00
Haoyuan Li
55ed0289c2 feat(weixin_oc): Add "typing" ("对方正在输入...") state control for weixin_oc plateform (#6977)
* feat: Add "typing" state control for weixin_oc plateform

* fix: avoid typing state mutation during cleanup

* fix: preserve typing error tracebacks in logs

* refactor: simplify typing task cancellation flow

* chore: remove tests

* fix: remove unnecessary platform check for stopping typing

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-03-27 15:54:41 +08:00
Soulter
777b831691 fix(weixin_oc): add error handling and retry logic for inbound updates polling (#7041)
fixes: #7022
2026-03-27 15:36:31 +08:00
silwings1986
26627887d1 fix(wecom): fallback to message API when kf returns 40096 (#7012)
* fix(wecom): fallback to regular message API when kf API returns 40096

When sending WeCom messages via kf/send_msg, if the API returns error
40096 (invalid external userid), fall back to the regular message/send
API. This handles internal employees who don't have external userids.

Fixes the issue where internal WeCom users (e.g. WangCong) would cause
kf API to fail with 'invalid external userid' error.

* fix(wecom): improve error handling for kf API fallback to regular message API

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-03-27 11:34:18 +08:00
sanyekana
a5e86c8b94 fix(telegram): preserve attachment captions (#7020)
* fix(telegram): preserve attachment captions

* Update astrbot/core/platform/sources/telegram/tg_adapter.py

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-03-27 11:29:03 +08:00
Izayoi9
af6f9cfc5e fix: 使用 removesuffix 替代 rstrip 修复 URL 字符误删问题 (#7026)
之前在 #6863 中我提交的修复使用了 rstrip() 来移除末尾的 /embeddings,
但 rstrip() 是字符集操作,会误删 URL 末尾属于该字符集的字符。

例如 siliconflow.cn 的末尾 n 会被误删,导致 URL 变成 siliconflow.c

改用 removesuffix() 可以正确处理这种情况,只在字符串以指定后缀结尾时才移除。

closes #7025
2026-03-27 11:24:06 +08:00
Soulter
045be7943d revert: "fix(provider): restore parameter transparency in core LLM provider ad…" (#7023)
This reverts commit 1ad7e10c0f.
2026-03-27 01:58:04 +08:00
エイカク
cd4e999526 fix: harden OpenAI attachment recovery (#7004)
* fix: harden OpenAI attachment recovery

* fix: refine OpenAI image loading

* fix: restore OpenAI image encoding errors

* refactor: streamline OpenAI image helpers

* refactor: simplify OpenAI attachment helpers

* refactor: simplify OpenAI helper flow

* refactor: clarify OpenAI image modes

* refactor: reduce OpenAI materialization copies
2026-03-27 00:49:19 +09:00
Helian Nuits
1ad7e10c0f fix(provider): restore parameter transparency in core LLM provider adapters (#6934)
* fix(provider): restore parameter transparency in core LLM provider adapters

核心对话适配器(OpenAI, Anthropic, Gemini)在准备请求 Payload 时未对 kwargs 进行合并,导致插件层传入的自定义参数(如 max_tokens, temperature, timeout 等)失效,回退到提供商的保守默认值。本次修复确保了各主流模型适配器对请求参数的完整透传。

* fix(payloads): 使用字典解包
2026-03-26 19:32:27 +08:00
Rainor_da!
2b5d86b35c fix: honor computer_use_require_admin in shipyard_neo tools (#6951) 2026-03-26 09:32:19 +08:00
Soulter
b2718b07b6 chore: bump version to 4.22.1 2026-03-26 00:03:23 +08:00
Soulter
c55f2546e2 feat(skills): enhance skill installation to support multiple top-level folders and add duplicate handling, and Chinese skill name support (#6952)
* feat(skills): enhance skill installation to support multiple top-level folders and add duplicate handling

closes: #6949

* refactor(skill_manager): streamline skill name normalization and validation logic

* fix(skill_manager): update skill name regex to allow underscores in skill names

* fix(skill_manager): improve skill name normalization and validation logic
2026-03-25 21:51:44 +08:00
LIU Yaohua
e4ce090db2 fix(provider): add missing index field to streaming tool_call deltas (#6661) (#6692)
* fix(provider): add missing index field to streaming tool_call deltas

- Fix #6661: Streaming tool_call arguments lost when OpenAI-compatible proxy omits index field
- Gemini and some proxies (e.g. Continue) don't include index field in tool_call deltas
- Add default index=0 when missing to prevent ChatCompletionStreamState.handle_chunk() from rejecting chunks

Fixes #6661

* fix(provider): use enumerate for multi-tool-call index assignment

- Use enumerate() to assign correct index based on list position
- Iterate over all choices (not just the first) for completeness
- Addresses review feedback from sourcery-ai and gemini-code-assist

---------

Co-authored-by: Yaohua-Leo <3067173925@qq.com>
Co-authored-by: Soulter <905617992@qq.com>
2026-03-25 18:31:35 +08:00
naer-lily
11c7591b17 Fix payload handling for msg_id in QQ API (#6604)
Remove msg_id from payload to prevent errors with proactive tool-call path and avoid permission issues.

Co-authored-by: Naer <88199249+V-YOP@users.noreply.github.com>
2026-03-25 17:48:51 +08:00