whatevertogo
3fd6c4c8a6
fix: 修复 asyncio 事件循环相关问题 ( #5774 )
...
* fix: 修复 asyncio 事件循环相关的问题
1. components.py: 修复异常处理结构错误
- 将 except Exception 移到正确的内部 try 块
- 确保 _download_file() 异常能被正确捕获和记录
2. session_lock.py: 修复跨事件循环 Lock 绑定问题
- 添加 _access_lock_loop_id 追踪事件循环
- 当事件循环变化时重新创建 Lock
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix: 根据代码审查反馈修复问题
1. components.py: 移除 asyncio.set_event_loop() 调用
- 创建临时 event loop 时不再设置为全局
- 避免干扰其他 asyncio 使用
2. session_lock.py: 简化延迟初始化逻辑
- 移除 loop-ID 追踪和 _get_lock 方法
- 使用 setdefault 简化 session lock 创建
- 保留延迟初始化行为
3. wecomai_queue_mgr.py: 使用 time.monotonic() 替代 loop.time()
- 同步方法不再依赖活动的 event loop
- 避免在非异步上下文中抛出 RuntimeError
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix: 优化 asyncio 事件循环管理,使用安全的方式创建和关闭事件循环
* fix: 根据代码审查反馈改进异常处理和事件循环使用
- main.py: 显式处理 check_dashboard_files() 返回 None 的情况
- components.py: 使用 logger.exception 保留异常堆栈信息
- star_manager.py: 添加 Future 异常回调处理 __del__ 执行异常
- bay_manager.py: 缓存事件循环引用避免重复调用
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* refactor: 简化 SessionLockManager 使用 defaultdict 和 setdefault
- 使用 defaultdict(asyncio.Lock) 简化锁的懒创建
- 使用 setdefault 简化 _get_loop_state 逻辑
- 减少 get + if 分支,提升可读性
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix: 降低 webui_dir 检查失败时的日志级别为 warning
改为警告而非退出,允许程序在无 WebUI 的情况下继续运行
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* refactor: 重构事件循环锁管理,简化锁状态管理逻辑
* 新增对 SessionLockManager 的多事件循环隔离测试
* fix: 修复测试中的变量声明和断言,确保事件循环管理器的正确性
* fix: 修复插件删除时异常处理逻辑,确保正确记录错误信息
* fix: 新增针对多个事件循环的 OneBot 实例的测试,确保锁对象在不同事件循环间不共享
---------
Co-authored-by: whatevertogo <whatevertogo@users.noreply.github.com >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 01:00:13 +09:00
Soulter
537849c1e7
fix(dingtalk): text is ignored; cannot send file actively ( #5921 )
2026-03-08 23:31:11 +08:00
Soulter
7f3c0fdeb2
fix: cannot receive image, file in dingtalk ( #5920 )
...
fixes : #5916 #5786
2026-03-08 23:18:56 +08:00
Soulter
9d93bda3fe
feat: temporary file handling and introduce TempDirCleaner ( #5026 )
...
* feat: temporary file handling and introduce TempDirCleaner
- Updated various modules to use `get_astrbot_temp_path()` instead of `get_astrbot_data_path()` for temporary file storage.
- Renamed temporary files for better identification and organization.
- Introduced `TempDirCleaner` to manage the size of the temporary directory, ensuring it does not exceed a specified limit by deleting the oldest files.
- Added configuration option for maximum temporary directory size in the dashboard.
- Implemented tests for `TempDirCleaner` to verify cleanup functionality and size management.
* ruff
2026-02-12 01:04:48 +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
bddf7b8623
feat: add proactive messaging support and enhance message handling in SendMessageToUserTool
2026-02-01 16:49:10 +08:00
jiangman202506
c09bbfb8ac
fix: streaming response for DingTalk ( #4590 )
...
closes : #4384
* #4384 钉钉消息回复卡片模板
* chore: ruff format
* chore: ruff format
---------
Co-authored-by: ManJiang <man.jiang@jg-robust.com >
Co-authored-by: Soulter <905617992@qq.com >
2026-01-21 12:48:45 +08:00
Soulter
fc61f7ad32
fix: unique session config cannot be applied in non-default astrbot config ( #4232 )
...
* fix: unique session config cannot be applied in non-default astrbot config
fixes : #4195
* perf: sesison id
2025-12-28 15:01:43 +08:00
Soulter
f0fff68947
fix: at sender users not working in dingtalk ( #4219 )
...
fixes : #4218
2025-12-27 11:26:39 +08:00
Soulter
8a0b7717cc
feat: supports webhook mode for Lark platform ( #4016 )
...
* feat: add Lark platform support with unified webhook configuration
* fix: update token verification logic in LarkWebhookServer
* feat: implement event deduplication and cleanup for Lark webhook events
2025-12-12 22:12:13 +08:00
Dt8333
f624971613
chore: fix bunches of type checking errors ( #3213 )
...
* chore(core.utils): 🚨 修正错误Lint
* chore(core.provider): 🚨 修复基类错误Lint
* chore(core.utils): 补全session_get()的重载
* chore(core.provider): 🚨 修正实现错误Lint
* chore(core.platform): 🚨 修正platform基类和webchat的错误Lint
* chore(core.platform): 修正错误实现Lint
* fix(core.provider): 修复循环调用和错误assert
* chore(core.platform): 修复部分实现Lint
* chore(core.provider): 补充Dify.text_chat_stream的参数类型
* chore(core.pipeline): 🚨 修复错误Lint
* fix(core.slack): 补充遗漏导入
* chore(core.utils): 修复错误的session_get声明
* chore(core.platform): 移除Lark adapter import中的wildcard
* chore(core.db): 修复声明和部分逻辑
* chore(core.db): 添加typings,使faiss参数能被正确识别。
* chore(core): 修复声明
* chore(core): 修改声明
* chore: 补充faiss声明
* chore(dashboard): 修改实现,减少报错
* chore(package): 修改部分声明与实现,减少报错
* chore(core): 添加Handler的overload,以去除部分assert同时通过类型检查
* chore(core.pipeline): 修改Pipeline Scheduler的execute,将判断属性改为判断类型,通过静态类型检查
* chore(core.config): 添加类型标注,通过类型检查
* chore(core.message): 为File._download_file添加检查,通过类型检查
* fix: 将断言改为条件判断以实现优雅关闭的容错性
* refactor: 移除 discord 客户端中的 assert,改用 if None 判断并抛出异常
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: DiscordPlatformAdapter 对 self.client.user 为 None 做日志并返回,移除断言
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 增强 Lark 相关空值/异常检查并完善日志输出
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 将断言替换为条件检查并加入日志与错误处理
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* chore: 移除LLM生成的无用注释
* refactor: 使用 File.get_file 替换下载逻辑并移除 assert,提供默认 filename
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: Slack Socket 未初始化抛出运行时异常,图片 URL 判空改为非空判断
* refactor: 将 WeChatPadProAdapter 的断言改为空值判断并添加日志
* refactor: 使用 isinstance 替代断言实现类型判断,便于静态检查
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 去除cast,直接使用字段与字典访问,修正端口解析
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 使用 match-case 重构 ProviderManager 加载并通过类型检查抛出 TypeError
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: group_name_display 时若 group 对象为空则记录错误并返回
* fix: 将 _get_current_persona_id 的 assert 替换成 if guard 并返回 None
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 优化插件目录存在性检查及图片URL非空验证,更新JSON排序配置
* fix: 将 datetime_str 的 assert 替换为显式检查并抛出异常
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除 cast,改为运行时检查并在找不到调度器时跳过
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除 cast,改用 isinstance 检查 FaissVecDB 并警告
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 删除 typing.cast 导入,并在获取文件绝对路径前校验 file_
* refactor: 移除 typing.cast,简化内容安全检查调用
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 将 PlatformMetadata.id 设为必填并在注册时传入 id,移除 cast
* refactor: 移除 cast,改用 HasInitialize 与 isinstance 进行初始化
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 为 ProviderManager.initialize 增加ID类型判断,避免 None 导致 get 失败
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 为 OTTSProvider 与 AzureNativeProvider 引入 _client 与 client 属性改进上下文管理
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 为 Whisper 自托管源添加模型未初始化校验并直接调用 transcribe
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除未使用的 cast 导入并简化 platform_name 赋值
* refactor: 引入 cast 并对 id 使用 cast(str, ...) 提升类型安全
* fix: 将 _id_to_sid 返回改为 str,空值返回空串;对 id 与 message_id 使用 cast
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 重构 Discord 处理逻辑:强制 类型转换、优先斜杠指令并优化提及判断
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 统一对 id 获取执行 cast,并在微信消息解析失败时抛错
* Revert "fix: 去除cast,直接使用字段与字典访问,修正端口解析"
This reverts commit 1cbfdf9d1b .
* fix: 百炼 Rerank 会话关闭时返回空结果;初始化 request.prompt 避免空值拼接
* fix: 统一处理搜索结果链接为字符串,新增 _get_url 助手并适配 Bing/Sogo
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 调整 call_handler 泛型、Discord 通道注解及 FishAudioTTS API 请求类型
* refactor: 使用 col(...) 替代列引用并对结果进行 CursorResult 强转
* chore: ruff format
---------
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
Co-authored-by: Soulter <905617992@qq.com >
2025-12-09 14:13:47 +08:00
Soulter
5714944eef
feat: unified platform webhook url ( #3889 )
...
* feat: unified platform webhook url
* chore: ruff format
* fix: 修复 Telegram 语音使用 Whisper API 报错 (#3884 )
* Update whisper_api_source.py
* chore: ruff format
---------
Co-authored-by: Soulter <905617992@qq.com >
* Update astrbot/dashboard/routes/platform.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Update astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* chore: ruff format
* fix: update webhook dialog descriptions for clarity in English and Chinese locales
* fix: update webhook URL paths to include '/api' prefix for consistency across the application
---------
Co-authored-by: 易推倒白毛 <zhaixingbi@gmail.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-12-03 15:44:52 +08:00
Dt8333
a130db5cf4
fix: 将 Graceful shutdown 的异常改为 KeyboardInterrupt ( #3855 )
2025-11-30 20:31:17 +08:00
Dt8333
2c8470e8ac
fix(core.platform): make DingTalk user-ID compliant with UMO ( #3634 )
2025-11-15 17:31:03 +08:00
Dt8333
6ac43c600e
perf: improve streaming fallback strategy for streaming-unsupported platform ( #3547 )
...
* feat: 修改tool_loop_agent_runner,新增stream_to_general属性。
Co-authored-by: aider (openai/gemini-2.5-flash-preview) <aider@aider.chat >
* refactor: 优化text_chat_stream,直接yield完整信息
Co-authored-by: aider (openai/gemini-2.5-flash-preview) <aider@aider.chat >
* feat(core): ✨ 添加streaming_fallback选项,允许进行流式请求和非流式输出
添加了streaming_fallback配置,默认为false。在PlatformMetadata中新增字段用于标识是否支持真流式输出。在LLMRequest中添加判断是否启用Fallback。
#3431 #2793 #3014
* refactor(core): 将stream_to_general移出toolLoopAgentRunner
* refactor(core.platform): 修改metadata中的属性名称
* fix: update streaming provider settings descriptions and add conditions
* fix: update streaming configuration to use unsupported_streaming_strategy and adjust related logic
* fix: remove support_streaming_message flag from WecomAIBotAdapter registration
* fix: update hint for non-streaming platform handling in configuration
* fix(core.pipeline): Update astrbot/core/pipeline/process_stage/method/llm_request.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* fix(core.pipeline): Update astrbot/core/pipeline/process_stage/method/llm_request.py
---------
Co-authored-by: aider (openai/gemini-2.5-flash-preview) <aider@aider.chat >
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
Co-authored-by: Soulter <905617992@qq.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-11-12 18:01:20 +08:00
LIghtJUNction
0b7fc29ac4
style: add ruff lint module of isort and pyupgrade, and some ruff check fix ( #3214 )
...
Co-authored-by: Dt8333 <25431943+Dt8333@users.noreply.github.com >
Co-authored-by: Soulter <905617992@qq.com >
2025-11-01 13:26:19 +08:00
再吃颗电池吧
2ce653caad
perf: modify the at logic in the DingTalk adapter ( #3186 )
...
* feat 初次提交
* fix: Modify the At logic in the DingTalk adapter.
* del uv.lock
* 添加at_users为空判断
* 优化钉钉at的处理逻辑,不用重复判断机器人是否is_in_at_list
* fix: refine handling of mentioned users in group messages
---------
Co-authored-by: linyiming <linyiming@example.com >
Co-authored-by: Soulter <905617992@qq.com >
2025-10-30 14:15:01 +08:00
Soulter
7740e1e131
ci: add ci stage of code format checking ( #2750 )
...
* style: ruff format
* ci(dashboard-ci): ensure GitHub Release action only runs on push events
* ci(code-format): ruff format and ruff check
2025-09-14 18:05:58 +08:00
xiewoc
5872f1e017
feat: 支持官方 QQ 接口发送语音 ( #2525 )
...
* Update dingtalk_event.py
* Add files via upload
* Add files via upload
* Update qqofficial_platform_adapter.py
* Add files via upload
* chore: clean comments
* chore: clean code
---------
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
2025-08-26 20:40:59 +08:00
Zhalslar
c7891385ca
Update dingtalk_event.py
2025-06-14 21:44:37 +08:00
Zhalslar
2059ddcadf
Update dingtalk_event.py
2025-06-14 21:39:33 +08:00
Zhalslar
ba1b68df20
Update dingtalk_event.py
2025-06-14 21:23:45 +08:00
Raven95676
c111da4681
refactor: 修改框架路径获取方式,规范化路径拼接
2025-05-06 17:30:34 +08:00
Raven95676
3753fce912
perf: 为发送流式消息的Fallback可选
2025-04-15 21:21:02 +08:00
Raven95676
19c9177d7b
chore: 移除对dingtalk、lark、wecom的fallback
2025-04-13 17:03:06 +08:00
Raven95676
bb6e892657
feat: 重构发送流以提高代码可读性
2025-04-13 11:19:40 +08:00
Raven95676
b6963c1bf9
perf: 为不支持流式输出的平台提供fallback。
2025-04-13 02:21:42 +08:00
zhx
b62b1f3870
feat: 添加插件能针对不同消息平台开启关闭的功能
...
Squashed:
chore: merge master branch
chore: merge from master branch
chore: rename updateAllPlatformCompatibility to update_all_platform_compatibility for consistency
Reviewed by:
@Raven95676 @Soulter
2025-04-09 17:27:44 +08:00
Soulter
9b36a5c8a6
✨ feat: 增加全平台对流式输出的处理逻辑
2025-04-06 13:43:23 +08:00
Soulter
849913276d
🎈 perf: 钉钉支持 Markdown 渲染输出
...
fixes : #1104
2025-04-05 16:29:14 +08:00
Soulter
3f514fceca
🎨 style: format codes
2025-03-22 19:07:47 +08:00
Soulter
c610719a44
✨ feat: 为各平台适配器支持优雅关闭
2025-03-22 19:02:49 +08:00
Soulter
30d3062944
🎈 perf: 优化钉钉在配置错误之后堵塞整个线程的问题 #885
...
a.k.a 帮钉钉擦屁股
2025-03-22 15:44:42 +08:00
Soulter
1989d615d2
🌈 style: format codes
2025-03-09 17:48:59 +08:00
Soulter
239412d265
✨ feat: 支持接入钉钉 #643
2025-03-09 17:47:51 +08:00