LIghtJUNction
1f5accc82a
chore: sync master into dev
2026-07-16 18:18:20 +08:00
LIghtJUNction
5535f0c932
Merge branch 'master' into dev
...
# Conflicts:
# AGENTS.md
# astrbot/__init__.py
# astrbot/cli/utils/__init__.py
# astrbot/core/astr_agent_tool_exec.py
# astrbot/core/computer/booters/local.py
# astrbot/core/cron/manager.py
# astrbot/core/knowledge_base/kb_mgr.py
# astrbot/core/knowledge_base/retrieval/manager.py
# astrbot/core/platform/sources/discord/discord_platform_adapter.py
# astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py
# astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py
# astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py
# astrbot/core/platform/sources/wecom/wecom_adapter.py
# astrbot/core/platform/sources/wecom_ai_bot/wecomai_adapter.py
# astrbot/core/provider/func_tool_manager.py
# astrbot/core/provider/sources/mimo_api_common.py
# astrbot/core/star/star_manager.py
# astrbot/core/tools/computer_tools/fs.py
# astrbot/core/tools/computer_tools/python.py
# astrbot/core/tools/computer_tools/shell.py
# astrbot/core/tools/message_tools.py
# astrbot/core/tools/web_search_tools.py
# astrbot/core/utils/io.py
# astrbot/core/utils/tencent_record_helper.py
# dashboard/package.json
# dashboard/src/assets/mdi-subset/materialdesignicons-subset.css
# dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff
# dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2
# dashboard/src/components/ConfirmDialog.vue
# dashboard/src/components/chat/Chat.vue
# dashboard/src/components/chat/ChatInput.vue
# dashboard/src/components/chat/ChatMessageList.vue
# dashboard/src/components/chat/ConfigSelector.vue
# dashboard/src/components/chat/MessageList.vue
# dashboard/src/components/chat/ProjectDialog.vue
# dashboard/src/components/chat/ProjectList.vue
# dashboard/src/components/chat/ProjectView.vue
# dashboard/src/components/chat/ProviderModelMenu.vue
# dashboard/src/components/chat/RegenerateMenu.vue
# dashboard/src/components/chat/StandaloneChat.vue
# dashboard/src/components/chat/ThreadPanel.vue
# dashboard/src/components/chat/ThreadedMarkdownMessagePart.vue
# dashboard/src/components/chat/message_list_comps/MarkdownMessagePart.vue
# dashboard/src/components/chat/message_list_comps/ReasoningTimeline.vue
# dashboard/src/components/chat/message_list_comps/RefsSidebar.vue
# dashboard/src/components/config/UnsavedChangesConfirmDialog.vue
# dashboard/src/components/extension/MarketPluginCard.vue
# dashboard/src/components/extension/McpServersSection.vue
# dashboard/src/components/extension/SkillsSection.vue
# dashboard/src/components/extension/componentPanel/components/DetailsDialog.vue
# dashboard/src/components/extension/componentPanel/components/RenameDialog.vue
# dashboard/src/components/folder/BaseCreateFolderDialog.vue
# dashboard/src/components/folder/BaseFolderItemSelector.vue
# dashboard/src/components/folder/BaseMoveToFolderDialog.vue
# dashboard/src/components/platform/AddNewPlatform.vue
# dashboard/src/components/provider/AddNewProvider.vue
# dashboard/src/components/provider/ProviderModelsPanel.vue
# dashboard/src/components/shared/BackupDialog.vue
# dashboard/src/components/shared/ChangelogDialog.vue
# dashboard/src/components/shared/ExtensionCard.vue
# dashboard/src/components/shared/FileConfigItem.vue
# dashboard/src/components/shared/KnowledgeBaseSelector.vue
# dashboard/src/components/shared/ListConfigItem.vue
# dashboard/src/components/shared/ObjectEditor.vue
# dashboard/src/components/shared/PersonaForm.vue
# dashboard/src/components/shared/PluginSetSelector.vue
# dashboard/src/components/shared/ProviderSelector.vue
# dashboard/src/components/shared/ReadmeDialog.vue
# dashboard/src/components/shared/SidebarCustomizer.vue
# dashboard/src/components/shared/T2ITemplateEditor.vue
# dashboard/src/components/shared/UninstallConfirmDialog.vue
# dashboard/src/components/shared/WaitingForRestart.vue
# dashboard/src/composables/useMessages.ts
# dashboard/src/composables/useProjects.ts
# dashboard/src/composables/useProviderModelConfigDialog.ts
# dashboard/src/composables/useProviderSources.ts
# dashboard/src/i18n/locales/ru-RU/features/config-metadata.json
# dashboard/src/i18n/locales/ru-RU/features/extension.json
# dashboard/src/i18n/locales/ru-RU/features/provider.json
# dashboard/src/layouts/full/vertical-header/VerticalHeader.vue
# dashboard/src/scss/_override.scss
# dashboard/src/stores/common.js
# dashboard/src/stores/customizer.ts
# dashboard/src/views/ConfigPage.vue
# dashboard/src/views/ConversationPage.vue
# dashboard/src/views/PlatformPage.vue
# dashboard/src/views/SessionManagementPage.vue
# dashboard/src/views/WelcomePage.vue
# dashboard/src/views/alkaid/KnowledgeBase.vue
# dashboard/src/views/alkaid/LongTermMemory.vue
# dashboard/src/views/authentication/auth/LoginPage.vue
# dashboard/src/views/extension/InstalledPluginsTab.vue
# dashboard/src/views/extension/useExtensionPage.js
# dashboard/src/views/knowledge-base/DocumentDetail.vue
# dashboard/src/views/knowledge-base/KBList.vue
# dashboard/src/views/knowledge-base/components/DocumentsTab.vue
# dashboard/src/views/knowledge-base/components/SettingsTab.vue
# dashboard/src/views/knowledge-base/components/TavilyKeyDialog.vue
# dashboard/src/views/persona/FolderTree.vue
# dashboard/src/views/persona/MoveToFolderDialog.vue
# dashboard/src/views/persona/PersonaManager.vue
# requirements.txt
# tests/test_local_shell_component.py
# tests/unit/test_func_tool_manager.py
# tests/unit/test_web_search_tools.py
2026-07-16 17:39:40 +08:00
Soulter
6070da9ae2
fix: resume ChatUI streams after refresh ( #9259 )
...
* fix: resume ChatUI streams after refresh
* fix: hide chat run service errors
* fix: harden resumed chat streams
2026-07-13 23:05:03 +08:00
SpencerFang0617
afb898e61f
fix(line): remove unexpected force argument from get_json ( #9187 )
2026-07-09 15:47:57 +08:00
Weilong Liao
2a7c02af8e
fix: remove qq official reply id on proactive fallback so oversized passive replies can succeed via proactive sending ( #9169 )
2026-07-06 23:48:30 +08:00
Weilong Liao
4166d9ab58
fix: preserve qq official quoted message context ( #9164 )
...
* fix: preserve qq official quoted message context
* Update astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* fix: standardize qq-botpy version specification in dependencies
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-07-06 22:55:21 +08:00
shuiping233
cc0b347508
fix: qq_official websocket适配器发送消息收到None时现在会重试了 ( #8977 ) ( #8979 )
...
* fix: qq_official websocket适配器发送消息收到None时现在会重试了 (#8977 )
* fix: qq_official websocket适配器重试发送消息的时候不会重复打印重试告警了
* fix: qq_official websocket适配器发送媒体/文件消息时遇到api返回None也会重试了
2026-07-05 09:50:42 +08:00
Weilong Liao
b43cc6dee0
feat: improve ChatUI attachment display ( #9134 )
2026-07-04 17:56:33 +08:00
Weilong Liao
1e3b12acc9
fix: preserve webhook callback responses
...
Preserve raw webhook callback responses and fix QQ webhook validation handling.
2026-07-03 00:25:09 +08:00
Marshall
ea19be1d06
fix: wecom adapter returning json instead of plain text ( #9107 )
...
* Fix wecom adapter returning json instead of plain text
* Fix handle_verify return class
2026-07-02 23:27:08 +08:00
NLKASHEI
029e9c84af
修复了DISCORD适配器注册命令正则过于严格的问题 ( #9102 )
...
* 修复了DISCORD适配器注册命令正则过于严格的问题
* Update astrbot/core/platform/sources/discord/discord_platform_adapter.py
# Discord 支持 Unicode 命令名(如中文),放宽匹配并确保全小写
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-07-02 11:36:38 +09: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
LIghtJUNction
98d0c2555b
Merge branch 'master' into dev
...
# Conflicts:
# astrbot/__init__.py
# astrbot/core/platform/sources/mattermost/client.py
# astrbot/core/platform/sources/slack/slack_event.py
# astrbot/core/platform/sources/webchat/webchat_event.py
# astrbot/core/platform/sources/wecom/wecom_adapter.py
# astrbot/core/platform/sources/weixin_oc/weixin_oc_adapter.py
2026-06-26 11:53:40 +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
LIghtJUNction
5d22db51ad
fix: resolve merge conflicts and complete dashboard API migration
2026-06-26 09:50:15 +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
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
Weilong Liao
55af880369
feat(qqofficial): allow QQ Official Webhook adapters to proactively send group messages without requiring a cached msg_id ( #8841 )
...
* feat(qqofficial): support webhook QR setup
* docs(qqofficial): simplify webhook QR setup step
2026-06-17 21:13:05 +08:00
letr
30ae18a8f0
feat(qqofficial): support group message create type ( #8838 )
...
* feat(qqofficial): support group message create
* chore: remove temporary qq official capture script
* feat(qqofficial): allow ws segmented replies
* fix(qqofficial): guard missing group mentions
* feat(qqofficial): enhance group message handling with debug logging and sender username
* feat(qqofficial): add recommended group chat settings and update bot creation instructions
* feat(qqofficial): enhance error handling for QQ Official API message sending
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-06-17 19:11:48 +08:00
Weilong Liao
f1854df620
feat: add qq official qr binding
...
Add QQ Official Bot QR binding registration flow for the WebSocket adapter, wire dashboard credential autofill, and mark the WebSocket template as recommended.
2026-06-16 19:08:41 +08:00
Weilong Liao
d56100cdfc
refactor: delegate star tool event creation to platforms
...
Delegate StarTools event creation to platform adapters and add create_event overrides for platform-specific message events.
2026-06-16 12:37:50 +08:00
Soulter
90ca0857a5
Merge remote-tracking branch 'origin/pr/8197' into codex/pr-8197-merge
...
# Conflicts:
# astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py
# astrbot/core/provider/sources/anthropic_source.py
# astrbot/dashboard/routes/plugin.py
2026-06-16 11:46:33 +08:00
Exynos
40720fc2bd
fix: updates the aiocqhttp platform adapter and message event handler to include self_id routing parameters across multiple API calls ( #8779 )
...
Updates the aiocqhttp platform adapter and message event handler to include self_id routing parameters across multiple API calls, including message sending, forwarding, and fetching group/user details. It also adds handling to ignore mface message types. The review feedback suggests refactoring the duplicate self_id extraction logic in the message forwarding code to reduce redundancy and improve maintainability.
2026-06-14 20:28:32 +08:00
Weilong Liao
0d8e8682db
refactor(core): migrate backend backbone from Quart to FastAPI and introduce more OpenAPI ( #8688 )
...
* refactor: migrate to fastapi
* structure refactor
* fix: pyright fix
* refactor: improve error handling and public messages in plugin services
* feat(api): refactor API client integration and enhance request handling
- Updated API client configuration to use a dedicated HTTP client.
- Introduced utility functions for generating options, queries, and form data for API requests.
- Refactored multiple API methods to utilize the new utility functions for improved consistency and readability.
- Renamed types for clarity and updated import statements accordingly.
feat(docs): add script to update OpenAPI JSON from YAML spec
- Created a Python script to convert OpenAPI YAML specification to JSON format.
- The script supports customizable input and output paths.
- Ensured the script handles directory creation for output paths and validates the YAML structure.
* fix
* feat(auth): implement rate limiting for v1 login endpoint and enhance request handling
* Refactor dashboard API routers to use legacy_router for backward compatibility
- Changed all instances of dashboard_router to legacy_router across multiple API modules including platform, plugins, providers, sessions, skills, stats, subagents, t2i, tools, updates, and asgi_runtime.
- Updated route definitions to ensure existing endpoints remain functional under the new router structure.
- Introduced support for Quart request context in asgi_runtime to enhance compatibility with existing Quart-based plugins.
- Added a test case to validate the functionality of the new Quart request context handling in plugin extensions.
* chore: remove cli test
* fix: update dashboard tests for fastapi migration
* chore: satisfy ruff checks
* fix: update openapi api key scopes
* fix: sync config scope chip selection
* fix: restore quart dependency
* docs: clarify quart plugin api compatibility
* docs: update openapi scope documentation
* fix: use singular skill openapi scope
* fix: hide update service exception details
* fix: address fastapi review comments
* fix: address dashboard review findings
* docs: revert unrelated package deployment changes
* docs: update agent api generation guidance
* feat: add plugin page web api helpers
* docs: add plugin page bridge demo
* fix: type plugin upload files
* fix: stabilize plugin page uploads
* fix: type plugin web request proxy
* docs: remove plugin page docs example
* fix: authenticate plugin page SSE bridge
2026-06-14 15:03:26 +08:00
Weilong Liao
7c366a708b
fix: unify media reference handling ( #8764 )
...
* fix: unify media reference handling
* fix: accept bare base64 record media refs
* chore: update agents.md
* fix: unify file URI handling across media components and utilities
* fix: unify media reference type handling with MediaRefStr alias
* 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>
* Update astrbot/core/platform/sources/discord/discord_platform_adapter.py
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* fix: unify media handling and improve base64 decoding across components
* fix: simplify client_kwargs type definition and enhance media message handling in platform adapter
* fix: unify media utility documentation and enhance function descriptions
* perf: drop "pilk" requirement, improve audio outbound for tencent-related IM apps which using silk
* fix: unify Tencent Silk audio handling and enhance media resolver functionality
---
- Centralize media reference materialization and base64 resolution for local paths, http(s), base64://, data URIs, and legacy bare base64 payloads.
- Normalize incoming Record audio to wav and Image media to temporary jpg during preprocess, with event-scoped cleanup.
- Reuse the shared media resolver across OpenAI, Gemini, Anthropic, MiMo, DeerFlow, STT, and platform media paths while sanitizing logs and cleaning temporary conversion outputs.
- Ensure generated TTS audio is tracked for cleanup after the event finishes.
fix #8676
fix #8543
fix #7588
fix #7580
fix #8030
fix #8034
fix #7461
fix #7565
fix #6509
fix #7144
fix #7795
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-06-14 10:37:16 +08:00
LIghtJUNction
a3ba7bd9ee
merge: master into dev
2026-06-08 01:32:39 +08:00
Soulter
05c137eb29
fix: qq official webhook mode can not restart normally
2026-06-07 18:10:45 +08:00
Weilong Liao
66a10c08b2
perf: increase weixin http api request timeout from 15s to 120s ( #8643 )
2026-06-07 12:26:26 +08:00
Weilong Liao
ef53a933ec
fix: keep DingTalk stream reconnecting ( #8610 )
...
* fix: keep DingTalk stream reconnecting
* fix
2026-06-06 00:46:37 +08:00
NayukiChiba
9a648eb426
fix(wecomai_event): Fix whitespace handling when extracting plain text from message chains ( #8563 )
...
* fix(wecomai_event): 修复消息链提取纯文本时的空白处理
- 增加了strip_result参数以控制是否去除首尾空白
- 流式输出时保留换行等格式字符
- 更新相关调用以适应新参数
* test(wecomai_event): 添加企业微信智能机器人消息事件处理的单元测试
- 测试 _extract_plain_text_from_chain 方法在流式和非流式场景下的行为
- 确保流式输出时换行符等格式字符能够正确保留
- 覆盖了不同输入场景的测试用例
* fix(wecomai_event): 删除企业微信智能机器人消息事件处理的单元测试
- 移除测试文件 test_wecomai_event.py,包含多个针对 _extract_plain_text_from_chain 方法的测试用例
- 测试用例涵盖了流式和非流式场景下的文本提取行为
2026-06-04 08:59:59 +08:00
LIghtJUNction
a368609208
Merge remote-tracking branch 'origin/master' into dev
...
# Conflicts:
# astrbot/core/astr_main_agent.py
# astrbot/core/db/__init__.py
# astrbot/core/db/vec_db/faiss_impl/document_storage.py
# astrbot/core/message/components.py
# astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py
# astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py
# astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py
# astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py
# astrbot/core/provider/sources/anthropic_source.py
# astrbot/core/provider/sources/openai_source.py
# astrbot/dashboard/routes/command.py
# astrbot/dashboard/routes/static_file.py
# astrbot/dashboard/server.py
# dashboard/package.json
# dashboard/src/components/chat/ChatInput.vue
# dashboard/src/components/chat/ChatMessageList.vue
# dashboard/src/components/chat/MessageList.vue
# dashboard/src/components/chat/StandaloneChat.vue
# dashboard/src/components/chat/message_list_comps/ReasoningBlock.vue
# dashboard/src/components/provider/ProviderSourcesPanel.vue
# dashboard/src/components/shared/ExtensionCard.vue
# dashboard/src/components/shared/ListConfigItem.vue
# dashboard/src/composables/useProviderSources.ts
# dashboard/src/utils/providerUtils.js
# dashboard/src/views/extension/InstalledPluginsTab.vue
# docs/zh/dev/star/plugin.md
2026-05-30 16:59:16 +08:00
時壹
01a47b8360
feat: pass through qq webhook extra fields ( #6274 )
2026-05-29 21:06:04 +08:00
Weilong Liao
7f94bce360
feat(qqofficial): split message chain by media and update sending logic ( #8376 )
...
* feat(qqofficial): split message chain by media and update sending logic
* Delete tests/test_qqofficial_adapter.py
2026-05-27 21:59:47 +08:00
LIghtJUNction
7c224ebbd2
ruff check && format
2026-05-22 15:23:24 +08:00
LIghtJUNction
4098303658
refactor: miscellaneous updates across modules
2026-05-21 19:10:02 +08:00
LIghtJUNction
987099d4cb
chore: merge origin/master into dev
2026-05-19 21:15:22 +08:00
Weilong Liao
c88025c2a3
feat(dingtalk): implement one-click QR registration and polling mechanism ( #8198 )
2026-05-15 18:43:21 +08:00
Dale Null
98acd9f0da
chore: reformat with ruff
2026-05-15 16:41:51 +08:00
Dale Null
c665b6e3e5
chore: reduce pyright type errors
2026-05-15 16:31:37 +08:00
Weilong Liao
6982ef7d94
feat(weixin_oc): handle session timeout and clear login state ( #8196 )
2026-05-15 15:30:56 +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
Yufeng He
f86de988a4
fix: keep Discord startup alive on command quota ( #8061 )
...
* fix: keep Discord startup alive on command quota
* Update discord_platform_adapter.py
---------
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
2026-05-12 23:28:23 +08:00
LIghtJUNction
273b6777cf
test: fix unit tests after master→dev merge
...
- Fix test_long_term_memory.py: Image(file=), Provider spec, config keys
- Fix test_star_manager.py: Metric.upload AsyncMock, os.path.exists patch
- Fix test_kb_helper.py: chunk assertion signature, session.begin mock
- Fix test_file_extract.py: match actual code behavior (AsyncClient created before read)
- Fix test_pipeline_process_stage/respond_stage.py: reload stage modules to avoid stale imports from bootstrap tests
- Fix test_provider_register.py: handle pre-existing registry entries
- Fix test_pipeline_scheduler.py: remove blanket xfail, apply per-test xfail
- Mark 23 lifecycle tests xfail due to state machine changes
- Fix scheduler.py: missing break after generator stage stops propagation
- Frontend build verified
2026-05-08 12:17:58 +08:00
LIghtJUNction
d373a24320
merge: sync origin/master into dev
...
Resolved 76 file conflicts across backend, frontend, and tests:
- Core backend: agent, platform, provider, star, tools, cron, KB, utils
- Dashboard backend: auth, config, plugin routes, server, runtime bootstrap
- Frontend components: shared, extension, provider components
- Frontend views: console, trace, cron, extension, platform, provider, etc.
- Frontend infrastructure: layouts, router, stores, main.ts
- Assets: MDI font subset (css, woff, woff2)
- Tests: fixtures, plugin manager, anthropic provider, dashboard tests
Strategy per file:
- Most backend: merged master improvements (metrics, http_client -> default_headers,
download_url params, plugin i18n, runtime guards, auth middleware)
- Frontend views: adopted master dashboard-shell layout (v-container, is-dark theme)
- InstalledPluginsTab: kept dev pinned-plugins feature (drag-sort, pin/unpin)
- Binary assets: resolved via git checkout
- Tests: merged both branches' assertions and mock updates
2026-05-08 11:04:03 +08:00
千岚之夏
859ab28d43
fix: 钉钉连接超时后自动重连失败 ( #7924 )
...
* fix: improve DingTalk adapter error handling in run() method
* fix: add retry logic for DingTalk SDK task unexpected exit
* fix: use task.add_done_callback to wake thread on task completion, handle UnboundLocalError
* refactor: extract retry logic into handle_retry helper function
---------
Co-authored-by: Blueteemo <Blueteemo@users.noreply.github.com >
2026-05-03 15:09:49 +08:00
AstralSolipsism
03deebdd88
fix: 支持微信客服文件消息 ( #7923 )
...
* fix: 支持微信客服文件消息
* fix: remove WeCom file message placeholder
2026-05-02 12:18:08 +08:00
lingyun14
cf6d586eb9
fix/stop-event-state-reset-by-clear-result ( #7922 )
2026-05-01 15:20:51 +08:00
Soulter
a23350109c
perf: metrics
2026-05-01 01:47:33 +08:00
NayukiMeko
ffc31b305c
fix( #7904 ): QQ官方私聊主动推送不再因缺少缓存 msg_id 而跳过发送 ( #7914 )
...
* fix: QQ官方私聊主动推送不再因缺少缓存 msg_id 而跳过发送 (#7904 )
- 私聊场景下 _send_by_session_common 在无缓存 msg_id 时提前 return,
导致重启后 cron 等主动推送的消息无法发送。
- 私聊主动推送不需要 msg_id,跳过此检查。
* test: 补充 QQ 官方群聊有缓存 msg_id 时正常发送的测试 (#7904 )
* Delete tests/unit/test_qqofficial_adapter.py
---------
Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com >
2026-05-01 00:41:40 +08:00