shuiping233
f5ba1a026a
perf: Implement Pydantic data models for the KOOK adapter to enhance data retrieval and message schema validation ( #5719 )
...
* refactor: 给kook适配器添加kook事件数据类
* format: 使用StrEnum替换kook适配器中的(str,enum)
2026-03-17 18:05:58 +08:00
lppsuixn
2c49ac0dcf
Refactor _extract_session_id for chat type handling ( #5775 )
...
Update session ID extraction to handle group and single chat types.
2026-03-16 15:27:16 +08:00
時壹
2f51916a73
fix: deduplicate repeated QQ webhook retry callbacks ( #6320 )
2026-03-15 22:18:37 +08:00
Trainingcqy
6d055e81e9
fix: GIF sent as static image in Telegram adapter ( #6329 )
...
* fix(telegram): route GIF files to send_animation instead of send_photo
* fix: narrow exception in _is_gif to OSError
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* refactor: simplify image send dispatch in send_with_client
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* refactor: simplify image dispatch in _process_chain_items
* ruff format
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Soulter <905617992@qq.com >
2026-03-15 21:33:30 +08:00
qingyun
18a99a25c2
fix(platform): parse QQ official face messages to readable text ( #6355 )
...
Fixes #6294
QQ official bot receives emoji/sticker messages as raw XML-like tags:
`<faceType=4,faceId="",ext="eyJ0ZXh0IjoiW+a7oeWktOmXruWPt10ifQ==">`
This made the LLM unable to understand the emoji content.
Changes:
- Added `_parse_face_message()` method to parse face message format
- Decode base64 `ext` field to get emoji description text
- Replace face tags with `[表情:描述]` format for readability
Example:
- Input: `<faceType=4,faceId="",ext="eyJ0ZXh0IjoiW+a7oeWktOmXruWPt10ifQ==">`
- Output: `[表情:[满头问号]]`
Co-authored-by: ccsang <ccsang@users.noreply.github.com >
2026-03-15 21:05:47 +08:00
Sakari
f8d075b5d3
fix(telegram): avoid treating normal replies as topic threads ( #6174 )
2026-03-14 18:27:13 +08:00
MousseC
89fbd75e7a
perf(OneBot): add a whitespace after At component ( #6238 )
...
修复 At 组件后的空格在发送时被 strip 移除的问题。在消息解析时检测 At 组件并在其后额外插入空格。
2026-03-14 18:12:55 +08:00
2ndelement
e6c1164755
perf(QQ Official API): improve streaming message delivery reliability and proactive media sending ( #6131 )
...
* fix(qqofficial): fix streaming message delivery for C2C
* fix(qqofficial): rewrite send_streaming for C2C vs non-C2C split
* fix(qqofficial): add _extract_response_message_id for safe id extraction
* fix(qqofficial): flush stream segment on tool-call break signal
* fix(qqofficial): downgrade rich-media to non-stream send in C2C
* fix(qqofficial): auto-append \n to final stream chunk (state=10)
* fix(qqofficial): propagate stream param to all _send_with_markdown_fallback call sites
* fix(qqofficial): retry on STREAM_MARKDOWN_NEWLINE_ERROR with newline fix
* fix(qqofficial): handle None/non-dict response in post_c2c_message gracefully
* fix(qqofficial): remove msg_id from video/file media payloads in send_by_session
QQ API rejects msg_id on proactive media (video/file, msg_type=7) messages
sent via the tool-call path, returning "请求参数msg_id无效或越权". The
msg_id passive-reply credential is consumed by the first send and cannot be
reused for subsequent media uploads in the same session.
Remove msg_id from the payload after setting msg_type=7 for video and file
sends, for both FRIEND_MESSAGE (C2C) and GROUP_MESSAGE paths.
* fix(qqofficial): replace deprecated get_event_loop() with get_running_loop()
asyncio.get_event_loop() is deprecated since Python 3.10 and raises a
DeprecationWarning (or errors) when called from inside a running coroutine
without a current event loop set on the thread. Replace both call-sites
in the streaming throttle logic with asyncio.get_running_loop(), which is
the correct API to use inside an already-running async context.
Co-Authored-By: Claude Sonnet <noreply@anthropic.com >
---------
Co-authored-by: 2ndelement <2ndelement@users.noreply.github.com >
Co-authored-by: Claude Sonnet <noreply@anthropic.com >
2026-03-13 00:24:15 +08:00
DOHEX
3e2cb6a2ab
fix(telegram): remove deprecated normalize_whitespace param from ( #6044 )
...
telegramify_markdown.markdownify calls
2026-03-12 00:34:07 +08:00
Soulter
5c3643c54c
feat: added support for file, voice, and video messages for QQ Official Bot (including WebSocket mode). ( #6063 )
2026-03-12 00:26:08 +08:00
camera-2018
ec21cb13d3
feat(lark): supports CardKit streaming output for feishu ( #5777 )
...
* feat(lark): 支持飞书 CardKit 流式输出
* refactor(lark): extract streaming fallback logic and deduplicate final text update
* fix(lark): 修复流式输出竞态条件及增强健壮性
- 修复 sender loop 中 delta 快照竟态: await 期间 delta 被 generator
更新导致 last_sent 记录了未发送的值, 造成输出卡在最后一段
- send_streaming 入口增加 platform_meta 守卫, 未启用时直接回退
- _fallback_send_streaming 移除对已耗尽 generator 的 super() 调用,
改为内联父类副作用 (Metric.upload + _has_send_oper)
- Metric.upload 统一改为 await, 确保指标上报在方法返回前完成
- 装饰器 support_streaming_message 改为 False, 与 meta() 动态配置对齐
- i18n hint 补充提示: 需在「AI 配置 → 其他配置」中开启流式输出
* chore(lark): 收口配置
* docs(lark): update streaming output instructions and client version requirements
---------
Co-authored-by: bread-ovo <2570425204@qq.com >
Co-authored-by: Soulter <905617992@qq.com >
2026-03-10 19:40:46 +08:00
Soulter
654112ca86
feat(wecomai): implement long connection mode and update configuration options ( #5930 )
2026-03-09 11:10:32 +08:00
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
whatevertogo
8c935981bb
fix: align aiocqhttp poke payload with onebot v11 ( #5773 )
...
Co-authored-by: whatevertogo <whatevertogo@users.noreply.github.com >
2026-03-05 23:02:26 +08:00
camera-2018
7cf77adbc8
feat(telegram): supports sendMessageDraft API ( #5726 )
...
* feat(telegram): 使用 sendMessageDraft API 实现私聊流式输出
- 新增 _send_message_draft 方法封装 Telegram Bot API sendMessageDraft
- 私聊流式输出使用 sendMessageDraft 推送草稿动画,群聊保留 edit_message_text 回退
- 使用独立异步发送循环 (_draft_sender_loop) 按固定间隔推送最新缓冲区内容,
完全解耦 token 到达速度与 API 网络延迟
- 流式结束后发送真实消息保留最终内容(draft 是临时的)
- 使用模块级递增 draft_id 替代随机生成,确保 Telegram 端动画连续性
* fix(telegram): convert draft text to Markdown before sending message draft
* chore(telegram): telegram 适配器重构
- 提取公共方法
- 有新 token 到达时触发流式
- 生成结束后清除draft内容
- 默认draft发送md格式
* style(telegram): ruff format
* style(telegram): ruff check
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-03-05 11:20:28 +08:00
Soulter
bbf61239ad
fix(kook): remove debug logging for received messages and heartbeat responses
2026-03-03 15:54:45 +08:00
時壹
2a7745c767
fix: only allow HTTPS URLs to pass through directly in LINE adapter ( #5697 )
2026-03-03 15:14:08 +08:00
shuiping233
866e546b59
feat: integrates KOOK platform adapter ( #5658 )
...
* feat: 将kook适配器插件并入astrbot官方适配器目录中
* refactor: 重命名函数名为 _warp_message
* refactor: 使用Protocol替换Union类型
* bugfix: 修复base64前缀处理问题
* refactor: 抛出的错误不再包含"[kook]"
* refactor: 添加读取本地文件时的路径安全检查
* refactor: 卡片消息解析失败时会打印错误信息
* refactor: 添加处理接收卡片消息内的图片url时的安全校验
* refactor: 安全处理ws需要重连的情况
* Revert "refactor: 使用Protocol替换Union类型"
This reverts commit 58e0dceeb20c3d7dddb16f623fd3bbdcfa632173.
* feat: 添加获取机器人名称的实现
* refactor: 让send_by_session发送主动消息时正确传入当前消息链的文本消息内容
* refactor: 统一处理适配器配置相关内容,处理仪表盘出传入配置,并添加仪表盘的kook适配器配置页面的i18n文本
* unittest: 添加kook适配器的单元测试,虽然没覆盖多少单测
* unittest: TEST_DATA_DIR用更安全的路径
* refactor: KookConfig使用了更好的默认值处理方式
* refactor: 移除kook_adapter 的config字段重复定义
* refactor: 隐藏获取kook gateway时url里的token,防止把token打印出来
* refactor: KookConfig.pretty_jsons使用*来屏蔽token内容
* bugfix: 修复主动发送消息时,调用了父方法`send_by_session`可能导致指标被重复上传的bug
* refactor: 优化upload_asset的路径处理报错
* bugfix: 修复kook ws心跳间隔可能会出现负数时间的bug
* refactor: KookClient移到KookPlatformAdapter.__init__里初始化
* bugfix: 修复处理base64 url 多替换了/而报错的bug
* refactor: kook适配器上传文件失败时,会抛出错误
* chore: 移除一条注释
* refactor: 移除没用的return
* refactor: 即使消息链中有消息发送失败了,也尽可能将其他消息发送出去,并把报错信息也发送出去
* refactor: 增强上传任务失败时的错误处理,使其发生错误时尽力而为发送其余消息
* refactor: 发送到消息频道的报错消息加了个⚠️ ,小巧思这块?
* refactor: 咱们在写适配器啊,要什么小巧思呢,小巧思给上游插件开发弄不好么)
* refactor: enhance Kook adapter with kmarkdown parsing and improve file URL handling
* refactor: extract card message parsing logic into a separate method
* feat: add kook_bot_nickname configuration to ignore messages from specific nicknames
* refactor: remove commented-out code and clean up file upload error handling
* fix: remove redundant prefix handling for file URLs in asset upload
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-03-03 15:08:16 +08:00
LIghtJUNction
b8c73430fb
Revert "可选后端,实现前后端分离" ( #5536 )
2026-02-27 22:02:37 +08:00
LIghtJUNction
3141ed52bd
Merge branch 'feat/optional-backend' into master
2026-02-27 21:53:56 +08:00
Soulter
63ff234f10
feat: implement websockets transport mode selection for chat ( #5410 )
...
* feat: implement websockets transport mode selection for chat
- Added transport mode selection (SSE/WebSocket) in the chat component.
- Updated conversation sidebar to include transport mode options.
- Integrated transport mode handling in message sending logic.
- Refactored message sending functions to support both SSE and WebSocket.
- Enhanced WebSocket connection management and message handling.
- Updated localization files for transport mode labels.
- Configured Vite to support WebSocket proxying.
* feat(webchat): refactor message parsing logic and integrate new parsing function
* feat(chat): add websocket API key extraction and scope validation
2026-02-27 14:02:10 +08:00
Soulter
476c01469f
fix(line): line adapter does not appear in the add platform dialog
...
fixes : #5477
2026-02-26 15:26:37 +08:00
CCCCCCTV
3eb15089af
fix(telegram): avoid duplicate message_thread_id in streaming ( #5430 )
2026-02-25 19:53:17 +08:00
Dt8333
c5b23d12a8
fix: 修复Pyright静态类型检查报错 ( #5437 )
...
* refactor: 修正 Sqlite 查询、下载回调、接口重构与类型调整
* feat: 为 OneBotClient 增加 CallAction 协议与异步调用支持
2026-02-25 19:49:16 +08:00
時壹
78660da995
fix: clear markdown field when sending media messages via QQ Official Platform ( #5445 )
...
* fix: clear markdown field when sending media messages via QQ Official API
* refactor: use pop() to remove markdown key instead of setting None
2026-02-25 19:45:27 +08:00
Soulter
c24de24ca4
chore: ruff format
2026-02-24 23:12:18 +08:00
Yunhao Cao
b54b4c79ed
fix: Telegram voice message format (OGG instead of WAV) causing issues with OpenAI STT API ( #5389 )
2026-02-24 23:11:56 +08:00
Soulter
a5ae27cae0
fix(aiocqhttp): enhance shutdown process for aiocqhttp adapter ( #5412 )
2026-02-24 22:07:42 +08:00
Helian Nuits
29dbd085d4
fix(core): 优化 File 组件处理逻辑并增强 OneBot 驱动层路径兼容性 ( #5391 )
...
* fix(core): 优化 File 组件处理逻辑并增强 OneBot 驱动层路径兼容性
原因 (Necessity):
1. 内核一致性:AstrBot 内核的 Record 和 Video 组件均具备识别 `file:///` 协议头的逻辑,但 File 组件此前缺失此功能,导致行为不统一。
2. OneBot 协议合规:OneBot 11 标准要求本地文件路径必须使用 `file:///` 协议头。此前驱动层未对裸路径进行自动转换,导致发送本地文件时常触发 retcode 1200 (识别URL失败) 错误。
3. 容器环境适配:在 Docker 等路径隔离环境下,裸路径更容易因驱动或协议端的解析歧义而失效。
更改 (Changes):
- [astrbot/core/message/components.py]:
- 在 File.get_file() 中增加对 `file:///` 前缀的识别与剥离逻辑,使其与 Record/Video 组件行为对齐。
- [astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py]:
- 在发送文件前增加自动修正逻辑:若路径为绝对路径且未包含协议头,驱动层将自动补全 `file:///` 前缀。
- 对 http、base64 及已有协议头,确保不干扰原有的正常传输逻辑。
影响 (Impact):
- 以完全兼容的方式增强了文件发送的鲁棒性。
- 解决了插件在发送日志等本地生成的压缩包时,因路径格式不规范导致的发送失败问题。
* refactor(core): 根据 cr 建议,规范化文件 URI 生成与解析逻辑,优化跨平台兼容性
原因 (Necessity):
1. 修复原生路径与 URI 转换在 Windows 下的不对称问题。
2. 规范化 file: 协议头处理,确保符合 RFC 标准并能在 Linux/Windows 间稳健切换。
3. 增强协议判定准确度,防止对普通绝对路径的误处理。
更改 (Changes):
- [astrbot/core/platform/sources/aiocqhttp]:
- 弃用手动拼接,改用 `pathlib.Path.as_uri()` 生成标准 URI。
- 将协议检测逻辑从前缀匹配优化为包含性检测 ("://")。
- [astrbot/core/message/components]:
- 重构 `File.get_file` 解析逻辑,支持对称处理 2/3 斜杠格式。
- 针对 Windows 环境增加了对 `file:///C:/` 格式的自动修正,避免 `os.path` 识别失效。
- [data/plugins/astrbot_plugin_logplus]:
- 在直接 API 调用中同步应用 URI 规范化处理。
影响 (Impact):
- 解决 Docker 环境中因路径不规范导致的 "识别URL失败" 报错。
- 提升了本体框架在 Windows 系统下的文件操作鲁棒性。
2026-02-24 21:03:06 +08:00
whatevertogo
5af5ad9e36
test: add comprehensive tests for message event handling ( #5355 )
...
* test: add comprehensive tests for message event handling
- Add AstrMessageEvent unit tests (688 lines)
- Add AstrBotMessage unit tests
- Enhance smoke tests with message event scenarios
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
* fix: improve message type handling and add defensive tests
---------
Co-authored-by: whatevertogo <whatevertogo@users.noreply.github.com >
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-02-23 23:36:39 +08:00
Soulter
a56e43d17e
fix: chatui cannot persist file segment ( #5386 )
2026-02-23 22:02:49 +08:00
Soulter
3678688433
chore: ruff format
2026-02-22 16:51:46 +08:00
Lovely Moe Moli
0c03177840
fix: 修复 aiohttp 版本过新导致 qq-botpy 报错的问题 ( #5316 )
2026-02-22 16:45:28 +08:00
evpeople
478cc32de1
Feat/telegram command alias register #5233 ( #5234 )
...
* feat: support registering command aliases for Telegram
Now when registering commands with aliases, all aliases will be
registered as Telegram bot commands in addition to the main command.
Example:
@register_command(command_name="draw", alias={"画", "gen"})
Now /draw, /画, and /gen will all appear in the Telegram command menu.
* feat(telegram): add duplicate command name warning when registering commands
Log a warning when duplicate command names are detected during Telegram
command registration to help identify configuration conflicts.
2026-02-21 23:30:46 +08:00
Lovely Moe Moli
144a53f4b3
fix: qq official guild message send error ( #5287 )
...
* fix: qq official guild message send error
* Update astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-21 17:24:25 +08:00
Dream Tokenizer
bf3fa3e918
fix: 改进微信公众号被动回复处理机制,引入缓冲与分片回复,并优化超时行为 ( #5224 )
...
* 修复wechat official 被动回复功能
* ruff format
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-19 17:42:38 +08:00
Chiu Chun-Hsien
a2b61e2ab8
refactor: extract Voice_messages_forbidden fallback into shared helper with typed BadRequest exception ( #5204 )
...
- Add _send_voice_with_fallback helper to deduplicate voice forbidden handling
- Catch telegram.error.BadRequest instead of bare Exception with string matching
- Add text field to Record component to preserve TTS source text
- Store original text in Record during TTS conversion for use as document caption
- Skip _send_chat_action when chat_id is empty to avoid unnecessary warnings
2026-02-18 21:45:19 +08:00
Soulter
3476afce41
feat: supports send markdown message in qqofficial ( #5173 )
...
* feat: supports send markdown message in qqofficial
closes : #1093 #918 #4180 #4264
* ruff format
2026-02-18 00:35:52 +08:00
Soulter
f44961d065
feat: add LINE platform support with adapter and configuration ( #5085 )
2026-02-13 13:01:48 +08:00
stevessr
473e01aadd
feat: add i18n supports for custom platform adapters ( #5045 )
...
* Feat: 为插件提供的适配器的元数据&i18n提供数据通路
* chore: update docstrings with pull request references
Added references to pull request 5045 in docstrings.
---------
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
2026-02-12 21:49:12 +08:00
Soulter
d2de0ea5ad
feat: QQ 官方机器人平台支持主动推送消息、私聊场景下支持接收文件 ( #5066 )
...
* feat: QQ 官方机器人平台支持主动推送消息、私聊场景下支持接收文件
* feat: enhance QQOfficialWebhook to remember session scenes for group, channel, and friend messages
2026-02-12 19:07:53 +08:00
evpeople
30a0098b2a
feat: add send_chat_action for Telegram platform adapter ( #5037 )
...
* feat: add send_chat_action for Telegram platform adapter
Add typing/upload indicator when sending messages via Telegram.
- Added _send_chat_action helper method for sending chat actions
- Send appropriate action (typing, upload_photo, upload_document, upload_voice)
before sending different message types
- Support streaming mode with typing indicator
- Support supergroup with message_thread_id
* refactor(telegram): extract chat action helpers and add throttling
- Add ACTION_BY_TYPE mapping for message type to action priority
- Add _get_chat_action_for_chain() to determine action from message chain
- Add _send_media_with_action() for upload → send → restore typing pattern
- Add _ensure_typing() helper for typing status
- Add chat action throttling (0.5s) in streaming mode to avoid rate limits
- Update type annotation to ChatAction | str for better static checking
* feat(telegram): implement send_typing method for Telegram platform
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-12 14:46:06 +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
エイカク
a8dda20a30
fix: 提升打包版桌面端启动稳定性并优化插件依赖处理 ( #5031 )
...
* fix(desktop): rotate electron and backend logs
* refactor(desktop): centralize log rotation defaults and debug fs errors
* fix(desktop): harden rotation fs ops and buffer backend log writes
* refactor(desktop): extract buffered logger and reduce sync stat calls
* refactor(desktop): simplify rotation flow and harden logger config
* fix(desktop): make app logging async and flush-safe
* fix: harden app log path switching and debug-gated rotation errors
* fix: cap buffered log chunk size during path switch
* fix: avoid redundant plugin reinstall and upgrade electron
* fix: stop webchat tasks cleanly and bind packaged backend to localhost
* fix: unify platform shutdown and await webchat listener cleanup
* fix: improve startup logs for dashboard and onebot listeners
* fix: revert extra startup service logs
* fix: harden plugin import recovery and webchat listener cleanup
* fix: pin dashboard ci node version to 24.13.0
* fix: avoid duplicate webchat listener cleanup on terminate
* refactor: clarify platform task lifecycle management
* fix: continue platform shutdown when terminate fails
2026-02-12 01:04:04 +08:00
Soulter
80e1231e9a
feat: adding support for media and quoted message attachments for feishu ( #5018 )
2026-02-11 13:26:27 +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