邹永赫
9cc27becff
fix: use execv for stable backend reboot args
2026-02-10 17:18:33 +09:00
邹永赫
ba884f7643
refactor: align ssl helper namespace and confirm usage
2026-02-10 16:30:47 +09:00
邹永赫
191b0c5f18
refactor: simplify runtime tls bootstrap and tighten confirm typing
2026-02-10 16:03:39 +09:00
邹永赫
7bac4adc54
perf: reuse TLS context and avoid repeated frozen pip patch
2026-02-10 10:31:01 +09:00
邹永赫
6b5591abaf
fix: harden frozen pip patch and unify TLS connector
2026-02-10 09:56:51 +09:00
邹永赫
b57312ac4b
fix: use certifi CA bundle for runtime SSL requests
2026-02-10 01:46:28 +09:00
邹永赫
f1ad258949
fix: patch pip distlib finder for frozen electron runtime
2026-02-10 01:30:21 +09:00
エイカク
1addd5b2ab
perf: 稳定源码与 Electron 打包环境下的 pip 安装行为,并修复非 Electron 环境下点击 WebUI 更新按钮时出现跳转对话框的问题 ( #4996 )
...
* fix: handle pip install execution in frozen runtime
* fix: harden pip subprocess fallback handling
* fix: scope global data root to packaged electron runtime
* refactor: inline frozen runtime check for electron guard
* fix: prefer current interpreter for source pip installs
* fix: avoid resolving venv python symlink for pip
* refactor: share runtime environment detection utilities
* fix: improve error message when pip module is unavailable
* fix: raise ImportError when pip module is unavailable
* fix: preserve ImportError semantics for missing pip
* fix: 修复非electron app环境更新时仍然显示electron更新对话框的问题
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-09 23:12:18 +08:00
Soulter
da4bb6549c
feat: enhance persona tool management and update UI localization for subagent orchestration ( #4990 )
...
* feat: enhance persona tool management and update UI localization for subagent orchestration
* fix: remove debug logging for final ProviderRequest in build_main_agent function
2026-02-09 22:38:05 +08:00
Soulter
7193454d50
feat: enhance WecomAIBotAdapter and WecomAIBotMessageEvent for improved streaming message handling ( #5000 )
...
fixes : #3965
2026-02-09 22:30:24 +08:00
Soulter
d204b92877
feat: 企业微信智能机器人支持主动消息推送以及发送视频、文件等消息类型支持 ( #4999 )
2026-02-09 22:16:44 +08:00
Soulter
04faf26140
feat: 企业微信应用 支持主动消息推送,并优化企微应用、微信公众号、微信客服音频相关的处理 ( #4998 )
2026-02-09 22:15:11 +08:00
エイカク
2afb08d8b2
fix: handle pip install execution in frozen runtime ( #4985 )
...
* fix: handle pip install execution in frozen runtime
* fix: harden pip subprocess fallback handling
2026-02-09 15:19:01 +08:00
Soulter
06b2c7cb16
feat: enhance Dingtalk adapter with active push message and image, video, audio message type ( #4986 )
2026-02-09 15:17:55 +08:00
Dt8333
7dd95d8a59
chore: auto ann fix by ruff ( #4903 )
...
* chore: auto fix by ruff
* refactor: 统一修正返回类型注解为 None/bool 以匹配实现
* refactor: 将 _get_next_page 改为异步并移除多余的请求错误抛出
* refactor: 将 get_client 的返回类型改为 object
* style: 为 LarkMessageEvent 的相关方法添加返回类型注解 None
---------
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
2026-02-09 00:22:24 +08:00
Soulter
e1b71540c7
chore: bump version to 4.14.8 and bump faiss-cpu version up to date
2026-02-09 00:19:12 +08:00
Soulter
0553f84d6c
chore: bump version to 4.14.7
2026-02-08 23:20:34 +08:00
鸦羽
eca3ede7b0
fix: dedupe preset messages ( #4961 )
2026-02-08 22:18:13 +08:00
エイカク
a7e580407c
feat: supports electron app ( #4952 )
...
* feat: add desktop wrapper with frontend-only packaging
* docs: add desktop build docs and track dashboard lockfile
* fix: track desktop lockfile for npm ci
* fix: allow custom install directory for windows installer
* chore: migrate desktop workflow to pnpm
* fix(desktop): build AppImage only on Linux
* fix(desktop): harden packaged startup and backend bundling
* fix(desktop): adapt packaged restart and plugin dependency flow
* fix(desktop): prevent backend respawn race on quit
* fix(desktop): prefer pyproject version for desktop packaging
* fix(desktop): improve startup loading UX and reduce flicker
* ci: add desktop multi-platform release workflow
* ci: fix desktop release build and mac runner labels
* ci: disable electron-builder auto publish in desktop build
* ci: avoid electron-builder publish path in build matrix
* ci: normalize desktop release artifact names
* ci: exclude blockmap files from desktop release assets
* ci: prefix desktop release assets with AstrBot and purge blockmaps
* feat: add electron bridge types and expose backend control methods in preload script
* Update startup screen assets and styles
- Changed the icon from PNG to SVG format for better scalability.
- Updated the border color from #d0d0d0 to #eeeeee for a softer appearance.
- Adjusted the width of the startup screen from 460px to 360px for improved responsiveness.
* Update .gitignore to include package.json
* chore: remove desktop gitkeep ignore exceptions
* docs: update desktop troubleshooting for current runtime behavior
* refactor(desktop): modularize runtime and harden startup flow
---------
Co-authored-by: Soulter <905617992@qq.com >
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
2026-02-08 21:49:54 +08:00
DD斩首
dbe8e33c4b
feat(telegram): 添加媒体组(相册)支持 / add media group (album) support ( #4893 )
...
* feat(telegram): 添加媒体组(相册)支持 / add media group (album) support
## 功能说明
支持 Telegram 的媒体组消息(相册),将多张图片/视频合并为一条消息处理,而不是分散成多条消息。
## 主要改动
### 1. 初始化媒体组缓存 (__init__)
- 添加 `media_group_cache` 字典存储待处理的媒体组消息
- 使用 2.5 秒超时收集媒体组消息(基于社区最佳实践)
- 最大等待时间 10 秒(防止永久等待)
### 2. 消息处理流程 (message_handler)
- 检测 `media_group_id` 判断是否为媒体组消息
- 媒体组消息走特殊处理流程,避免分散处理
### 3. 媒体组消息缓存 (handle_media_group_message)
- 缓存收到的媒体组消息
- 使用 APScheduler 实现防抖(debounce)机制
- 每收到新消息时重置超时计时器
- 超时后触发统一处理
### 4. 媒体组合并处理 (process_media_group)
- 从缓存中取出所有媒体项
- 使用第一条消息作为基础(保留文本、回复等信息)
- 依次添加所有图片、视频、文档到消息链
- 将合并后的消息发送到处理流程
## 技术方案论证
Telegram Bot API 在处理媒体组时的设计限制:
1. 将媒体组的每个消息作为独立的 update 发送
2. 每个 update 带有相同的 `media_group_id`
3. **不提供**组的总数、结束标志或一次性完整组的机制
因此,bot 必须自行收集消息,并通过硬编码超时(timeout/delay)等待可能延迟到达的消息。
这是目前唯一可靠的方案,被官方实现、主流框架和开发者社区广泛采用。
### 官方和社区证据:
- **Telegram Bot API 服务器实现(tdlib)**:明确指出缺少结束标志或总数信息
https://github.com/tdlib/telegram-bot-api/issues/643
- **Telegram Bot API 服务器 issue**:讨论媒体组处理的不便性,推荐使用超时机制
https://github.com/tdlib/telegram-bot-api/issues/339
- **Telegraf(Node.js 框架)**:专用媒体组中间件使用 timeout 控制等待时间
https://github.com/DieTime/telegraf-media-group
- **StackOverflow 讨论**:无法一次性获取媒体组所有文件,必须手动收集
https://stackoverflow.com/questions/50180048/telegram-api-get-all-uploaded-photos-by-media-group-id
- **python-telegram-bot 社区**:确认媒体组消息单独到达,需手动处理
https://github.com/python-telegram-bot/python-telegram-bot/discussions/3143
- **Telegram Bot API 官方文档**:仅定义 `media_group_id` 为可选字段,不提供获取完整组的接口
https://core.telegram.org/bots/api#message
## 实现细节
- 使用 2.5 秒超时收集媒体组消息(基于社区最佳实践)
- 最大等待时间 10 秒(防止永久等待)
- 采用防抖(debounce)机制:每收到新消息重置计时器
- 利用 APScheduler 实现延迟处理和任务调度
## 测试验证
- ✅ 发送 5 张图片相册,成功合并为一条消息
- ✅ 保留原始文本说明和回复信息
- ✅ 支持图片、视频、文档混合的媒体组
- ✅ 日志显示 Processing media group <media_group_id> with 5 items
## 代码变更
- 文件:astrbot/core/platform/sources/telegram/tg_adapter.py
- 新增代码:124 行
- 新增方法:handle_media_group_message(), process_media_group()
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
* refactor(telegram): 优化媒体组处理性能和可靠性
根据代码审查反馈改进:
1. 实现 media_group_max_wait 防止无限延迟
- 跟踪媒体组创建时间,超过最大等待时间立即处理
- 最坏情况下 10 秒内必定处理,防止消息持续到达导致无限延迟
2. 移除手动 job 查找优化性能
- 删除 O(N) 的 get_jobs() 循环扫描
- 依赖 replace_existing=True 自动替换任务
3. 重用 convert_message 减少代码重复
- 统一所有媒体类型转换逻辑
- 未来添加新媒体类型只需修改一处
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
* fix(telegram): handle missing message in media group processing and improve logging messages
---------
Co-authored-by: Ubuntu <ubuntu@localhost.localdomain >
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com >
Co-authored-by: Soulter <905617992@qq.com >
2026-02-08 13:22:45 +08:00
Gao Jinzhe
952023db30
feat: 允许 LLM 预览工具返回的图片并自主决定是否发送 ( #4895 )
...
* feat: 允许 LLM 预览工具返回的图片并自主决定是否发送
* 复用 send_message_to_user 替代独立的图片发送工具
* feat: implement _HandleFunctionToolsResult class for improved tool response handling
* docs: add path handling guidelines to AGENTS.md
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-08 13:16:16 +08:00
Helian Nuits
4e0b5063c6
feat(ComponentPanel): implement permission management for dashboard ( #4887 )
...
* feat(backend): add permission update api
* feat(useCommandActions): add updatePermission action and translations
* feat(dashboard): implement permission editing ui
* style: fix import sorting in command.py
* refactor(backend): extract permission update logic to service
* feat(i18n): add success and failure messages for command updates
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-08 12:27:32 +08:00
搁浅
30d1d55e3c
feat: add provider-souce-level proxy ( #4949 )
...
* feat: 添加 Provider 级别代理支持及请求失败日志
* refactor: simplify provider source configuration structure
* refactor: move env proxy fallback logic to log_connection_failure
* refactor: update client proxy handling and add terminate method for cleanup
* refactor: update no_proxy configuration to remove redundant subnet
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-08 12:22:01 +08:00
Soulter
1e9026d44c
chore: bump version to 4.14.6
2026-02-08 10:43:25 +08:00
letr
e48950d260
fix: localize provider source config UI ( #4933 )
...
* fix: localize provider source ui
* feat: localize provider metadata keys
* chore: add provider metadata translations
* chore: format provider i18n changes
* fix: preserve metadata fields in i18n conversion
* fix: internationalize platform config and dialog
* fix: add Weixin official account platform icon
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-08 10:40:26 +08:00
Soulter
5e5207da95
perf: optimize webchat and wecom ai queue lifecycle ( #4941 )
...
* perf: optimize webchat and wecom ai queue lifecycle
* perf: enhance webchat back queue management with conversation ID support
2026-02-07 14:03:33 +08:00
Soulter
def8b730b7
fix: correct spelling of 'temporary' in SharedPreferences class
2026-02-07 14:01:08 +08:00
Soulter
22a109c2ae
feat: implement feishu / lark media file handling utilities for file, audio and video processing ( #4938 )
...
* feat: implement media file handling utilities for audio and video processing
* feat: refactor file upload handling for audio and video in LarkMessageEvent
* feat: add cleanup for failed audio and video conversion outputs in media_utils
* feat: add utility methods for sending messages and uploading files in LarkMessageEvent
2026-02-07 12:40:05 +08:00
Soulter
6416707e35
chore: bump version to 4.14.5 ( #4930 )
2026-02-07 00:55:16 +08:00
Soulter
4658998b85
fix: messages[x] assistant content must contain at least one part ( #4928 )
...
* fix: messages[x] assistant content must contain at least one part
fixes : #4876
* ruff format
2026-02-07 00:33:07 +08:00
can
d233fb8b1e
feat: add bocha web search tool ( #4902 )
...
* add bocha web search tool
* Revert "add bocha web search tool"
This reverts commit 1b36d75a17 .
* add bocha web search tool
* fix: correct temporary_cache spelling and update supported tools for web search
* ruff
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-06 21:43:42 +08:00
boushi1111
d69592aaa8
fix: TypeError when MCP schema type is a list ( #4867 )
...
* Fix TypeError when MCP schema type is a list
Fixes crash in Gemini native tools with VRChat MCP.
* Refactor: avoid modifying schema in place per feedback
* Fix formatting and cleanup comments
2026-02-05 22:51:29 +08:00
Dt8333
f3397f6f08
fix: pyright lint ( #4874 )
...
* feat: 将 MessageSession 的 platform_id 改为 init=False,实例化时无需传入
Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat >
* refactor: 将 isinstance 检查改为元组、将默认模型值设为空字符串、将类型注解改为 Any 并导入
* refactor: 为 _serialize_job 增加返回类型注解 dict
* fix: 使用 cast 获取百度 AIP 的 msg 并对 psutil_addr 引入 type: ignore
Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat >
* refactor: 引入 _AddrWithPort 协议并替换 conn.laddr 的 cast
Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat >
* fix: 在构建 AstrBotMessage 时对 ctx.channel 可能为 None 进行兜底处理
Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat >
---------
Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat >
2026-02-05 21:54:12 +08:00
Xican
2876c43387
fix: 修复特定提供商导致的定时任务执行失败的问题 ( #4872 )
...
* fix: 修复特定提供商导致的定时任务执行失败的问题
* ruff format
---------
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
2026-02-05 10:14:31 +08:00
Soulter
464882f206
chore: bump version to 4.14.4
2026-02-04 23:21:08 +08:00
Soulter
6736fb85c2
fix: conversation token usage calculate wrongly and fix tool call infinitely ( #4869 )
2026-02-04 23:18:32 +08:00
Soulter
1f75255950
chore: bump version to 4.14.3
2026-02-04 20:31:19 +08:00
Soulter
a954e75547
fix: add apply_reset parameter to build_main_agent and handle coroutine reset in InternalAgentSubStage
2026-02-04 20:25:31 +08:00
advent259141
d2b9997620
chore: bump version to 4.14.2
2026-02-04 17:42:41 +08:00
Gao Jinzhe
36432c4361
fix: 修复插件热重载时平台适配器未清理导致注册冲突的问题 ( #4859 )
2026-02-04 15:06:03 +08:00
Soulter
c643e3c093
chore: ruff format
2026-02-03 23:40:23 +08:00
Soulter
ff46eef3b2
chore: bump version to 4.14.1
2026-02-03 23:35:21 +08:00
Soulter
a0c364aa81
fix: active reply function does not work caused by event.request_llm() outdated
2026-02-03 23:34:42 +08:00
Soulter
96e61a4a92
chore: bump version to 4.14.0
2026-02-03 22:08:29 +08:00
Soulter
387bba093e
fix: missing 2 required positional arguments: 'filter1' and 'filter2' ( #4840 )
...
fixes : #4777
2026-02-03 20:37:18 +08:00
Soulter
93277ffac9
fix: improve skills bundle extraction process to prevent overwriting existing files
2026-02-03 16:54:53 +08:00
Soulter
c091053ea8
fix: skills bundle unzip failed in sandbox
2026-02-03 16:34:07 +08:00
Soulter
25ca7bd71e
fix: add missing newline for code readability in _apply_local_env_tools function
2026-02-03 16:09:17 +08:00
Soulter
093b37e04b
feat: add computer use runtime config and handling for skills execution ( #4831 )
...
* feat: add computer use runtime configuration and handling for skills execution
* fix: improve user notification for disabled Computer Use feature in skills execution
2026-02-03 16:08:15 +08:00
SJ
cd6bef4d78
fix: MCP tools being filtered out when a specific plugin set is configured in the WebUI ( #4825 )
...
* fix: preserve MCP tools in _plugin_tool_fix filter
Tools without handler_module_path (such as MCP tools and built-in tools)
were being incorrectly skipped during plugin-based tool filtering.
This fix ensures that tools without plugin association are preserved,
as they should not be affected by plugin-level filtering logic.
* fix: retain MCP tools in _plugin_tool_fix function
---------
Co-authored-by: idiotsj <idiotsj@users.noreply.github.com >
Co-authored-by: Soulter <905617992@qq.com >
2026-02-03 10:53:20 +08:00