@dingtalk-real-ai/dingtalk-connector 0.8.21-beta.0 → 0.8.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.8.21] - 2026-05-19
11
+
12
+ 晋升自 `0.8.21-beta.0` 的 GA 版本,与 beta.0 内容完全一致,经过社区验证后正式发布。
13
+ GA promotion of `0.8.21-beta.0` after community validation; functionally identical to the beta.
14
+
15
+ ### 升级 / Upgrade
16
+
17
+ \`\`\`bash
18
+ npx openclaw@latest add @dingtalk-real-ai/dingtalk-connector@0.8.21
19
+ \`\`\`
20
+
21
+ 以下内容沿用自 `0.8.21-beta.0` 的修复与改进 / Same fixes and improvements as `0.8.21-beta.0`:
22
+
10
23
  ## [0.8.21-beta.0] - 2026-05-17
11
24
 
12
25
  ### 修复 / Fixes
@@ -0,0 +1,154 @@
1
+ # Release Notes - v0.8.21
2
+
3
+ > **GA 正式版** — 晋升自 `0.8.21-beta.0`,经社区验证稳定后发布。
4
+ > **General Availability** — Promoted from `0.8.21-beta.0` after community validation.
5
+
6
+ ## 🎉 本次重点 / Highlights
7
+
8
+ 本版本聚焦 WebSocket 连接稳定性 + 群聊体验,与 `0.8.21-beta.0` 功能完全一致:
9
+
10
+ 1. 修掉本仓 listener 注册时机错乱导致的 ~30s 一次幽灵重连(社区贡献 [#566](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/pull/566))
11
+ 2. 修掉消息处理保活 interval 与 `TIMEOUT_THRESHOLD` 不匹配的兜底失效([#594](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/pull/594))
12
+ 3. 过滤上游 `dingtalk-stream@2.1.4` SDK 直接走 `console.info` 的噪音([#571](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues/571) / [#536](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues/536) / [#573](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues/573))
13
+ 4. 群聊 @ 机器人空回复时,把无信息的「任务执行完成」改为带 `openclaw.json` 修复指引的可操作文案([#589](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/pull/589))
14
+
15
+ This release focuses on WebSocket stability + group-chat UX. Functionally identical to `0.8.21-beta.0`:
16
+
17
+ 1. Fix root cause of ~30s phantom reconnect cycle caused by listener-registration timing (community contribution, #566)
18
+ 2. Fix message-processing keepalive interval mismatch with `TIMEOUT_THRESHOLD` (#594)
19
+ 3. Filter noisy `console.info` calls from upstream `dingtalk-stream@2.1.4` (#571 / #536 / #573)
20
+ 4. Group `@` mention's empty-reply fallback now embeds an actionable `openclaw.json` fix hint (#589)
21
+
22
+ ## 🐛 修复 / Fixes
23
+
24
+ ### WebSocket phantom reconnect 根因修复 (#566)
25
+
26
+ **现象**:约每 30 秒一次的 WebSocket 重连,`Disconnecting.` / `connect success` 成对出现,看起来像连接频繁掉线。
27
+
28
+ **根因**:`setupPongListener` / `setupMessageListener` / `setupCloseListener` 在 `client.connect()` 之前被调用,此时 `client.socket === undefined`,函数体里 `client.socket?.on(...)` 的可选链让调用静默成 no-op——三个 listener 实际从未挂上。
29
+
30
+ - pong listener 缺失 → `lastSocketAvailableTime` 不刷新 → 命中 `TIMEOUT_THRESHOLD = 20s` → `doReconnect()` 触发
31
+ - message listener 缺失 → 服务端真实下发的 disconnect topic 也无法响应
32
+ - close listener 缺失 → socket close 不能立即触发重连
33
+
34
+ **修复**:
35
+ - 删除模块初始化时的 no-op setup 调用
36
+ - 初次 `client.connect()` 成功后立即注册三个 listener
37
+ - `doReconnect()` 里把 setup 挪到 `client.connect()` 之后、`await for OPEN` 之前——避免 keepAlive 期间 ping 的 pong 回来时 listener 还没挂被丢的 race window
38
+
39
+ **致谢**:感谢 [@Majorshi](https://github.com/Majorshi) 提交 [PR #566](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/pull/566),并感谢 [@lizhiyao](https://github.com/lizhiyao) / [@edokeh](https://github.com/edokeh) / [@jeikl](https://github.com/jeikl) 验证修复有效。
40
+
41
+ ### 消息处理保活 interval 兜底 bug (#594)
42
+
43
+ **根因**:`markMessageProcessingStart` 启动的兜底定时器原本 30s 间隔,但 `TIMEOUT_THRESHOLD` 已在 `d90916b` 中从 90s 降到 20s——30s 间隔无法在 AI 长任务期间防住超时(AI 任务跑到约 21s 就可能触发 keepAlive 幽灵重连,下次刷新还要等 9 秒)。
44
+
45
+ **修复**:interval 调整为 15s(< `TIMEOUT_THRESHOLD = 20s`),让保活真正生效。同时清理文件头 docstring 与相关注释里的 stale `90 秒超时` 文案。
46
+
47
+ ### 上游 SDK `console.info` 噪音过滤 (#571 / #536 / #573)
48
+
49
+ **现象**:日志反复出现 `Disconnecting.` / `[time] connect success` 成对刷屏。
50
+
51
+ **修复**:
52
+ - 在 `src/core/connection.ts` 新增 `silenceDingtalkStreamConsoleNoise()`:模块级一次性 patch `console.info`,**只过滤这两条精确字符串**,其他 `console.info` 不受影响
53
+ - 在首个账号连上时通过 `printConnectionNoticeOnce()` 打印一次连接生命周期说明,解释过滤动机以及「高频重连不正常」的预期,多 bot 启动时不重复
54
+ - `setupMessageListener` 收到 `disconnect` topic 时加一行 `logger.debug`,便于排查时查看完整生命周期
55
+
56
+ ## 🩹 改进 / Improvements
57
+
58
+ ### 群聊空回复兜底文案带修复指引 (#589)
59
+
60
+ **现象**:群聊 @ 机器人时只看到「✅ 任务执行完成(无文本输出)」,没有任何模型回复内容。
61
+
62
+ **根因**:当 OpenClaw `messages.groupChat.visibleReplies` 未设为 `"automatic"` 时,上游 `source-reply-delivery-mode.ts` 对群聊默认走 `message_tool_only`:
63
+ - 不调 `onPartialReply` → connector `accumulatedText` 始终为空
64
+ - 大多数情况下也不调 `deliver(final)` → 三处空 final 兜底全部打到原文案
65
+
66
+ **修复**:
67
+ - 新增 `src/utils/empty-reply.ts` 集中兜底文案
68
+ - `reply-dispatcher.ts` 的 `closeStreaming` / `deliver` 空 final 分支:群聊改用带 `openclaw.json` 修复指引的可操作文案
69
+ - 新增 `maybeSendGroupVisibleRepliesIdleNudge`:在 `onIdle` / `onError` 时若本轮无任何用户可见输出(覆盖上游 `message_tool_only` 根本不调 `deliver()` 的盲区),主动 nudge 一条配置指引
70
+ - `core/message-handler.ts` 异步模式同点位分流
71
+ - warn 日志同步打印完整 `openclaw.json` 修复片段
72
+ - **单聊文案保持不变**
73
+
74
+ ### 新群聊兜底文案
75
+
76
+ ```
77
+ ℹ️ 暂未收到模型回复内容。
78
+ 若群聊频繁出现该提示,请联系机器人管理员检查 OpenClaw 配置:
79
+ `messages.groupChat.visibleReplies` 需设为 `"automatic"`
80
+ (详见 README / TROUBLESHOOTING.md)。
81
+ ```
82
+
83
+ ### 用户/运维侧修复
84
+
85
+ `~/.openclaw/openclaw.json` 加上:
86
+
87
+ ```json
88
+ {
89
+ "messages": {
90
+ "groupChat": { "visibleReplies": "automatic" }
91
+ }
92
+ }
93
+ ```
94
+
95
+ 然后 `openclaw gateway restart`。
96
+
97
+ > 跟进调研:插件侧直接覆盖 `sourceReplyDeliveryMode: "automatic"` 让用户不需要改 `openclaw.json` 的方案在 [Issue #591](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues/591) 跟踪。
98
+
99
+ ## 📚 文档 / Docs
100
+
101
+ - **TROUBLESHOOTING.md**:新增「群聊 @ 机器人只返回『任务执行完成(无文本输出)』」条目
102
+ - `silenceDingtalkStreamConsoleNoise` 周边的注释 / 函数命名 / banner 文案统一收紧(#592)
103
+ - 清理 `src/core/connection.ts` 中的 stale `90 秒超时` 文档残留(#594)
104
+
105
+ ## 🔒 兼容性 / Compatibility
106
+
107
+ - **API 无变化**、配置 schema 无变化、导出符号无变化
108
+ - 不影响 #437 的心跳超时检测修复语义
109
+ - 单聊行为完全不变(兜底文案、流式行为都保持原样)
110
+ - 已配置 `messages.groupChat.visibleReplies = "automatic"` 的群聊行为完全不变
111
+
112
+ ## 🧪 验证 / Verification
113
+
114
+ **已验证组合 / Verified combo**:
115
+ - OpenClaw Gateway `2026.5.7`
116
+ - Connector `0.8.21-beta.0` (已晋升为 `0.8.21`)
117
+ - 平台 macOS(darwin 23.2.0)
118
+
119
+ **验证场景**:
120
+ - 单 bot 30s 周期重连已消失
121
+ - 群聊 @ + `messages: {}` → 看到新的可操作指引
122
+ - 群聊 @ + `visibleReplies = "automatic"` → 恢复正常流式
123
+ - 单聊空 final → 文案不变
124
+
125
+ **社区验证**:beta.0(2026-05-17 发布)经过约 2 天社区使用,相关 issue(#571 / #536 / #573 / #545)均确认修复有效。
126
+
127
+ ## 📥 安装升级 / Installation & Upgrade
128
+
129
+ ```bash
130
+ npx openclaw@latest add @dingtalk-real-ai/dingtalk-connector@0.8.21
131
+ ```
132
+
133
+ 或:
134
+
135
+ ```bash
136
+ npm install @dingtalk-real-ai/dingtalk-connector@latest
137
+ ```
138
+
139
+ ## ⏭ 下一步 / Next steps
140
+
141
+ - [Issue #591](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues/591):插件侧 `sourceReplyDeliveryMode` 调研(让用户不再需要改 `openclaw.json`)
142
+ - PR #566 review 中 P2 跟进:抽 `attachSocketListeners()` 单一入口 + listener 注册时机回归测试
143
+
144
+ ## 🔗 相关链接 / Related Links
145
+
146
+ - [完整变更日志 / Full Changelog](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/blob/main/CHANGELOG.md)
147
+ - [Beta release notes (`v0.8.21-beta.0`)](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/blob/main/docs/RELEASE_NOTES_V0.8.21-beta.0.md)
148
+ - 关联 PRs / issues:#566 / #589 / #592 / #594 / #571 / #536 / #573 / #545
149
+
150
+ ---
151
+
152
+ **发布日期 / Release Date**:2026-05-19
153
+ **版本号 / Version**:v0.8.21
154
+ **兼容性 / Compatibility**:OpenClaw Gateway 2026.4.9+
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dingtalk-connector",
3
3
  "name": "DingTalk Channel",
4
- "version": "0.8.21-beta.0",
4
+ "version": "0.8.21",
5
5
  "description": "Official OpenClaw DingTalk channel plugin | 钉钉官方 OpenClaw 插件",
6
6
  "author": "DingTalk Real Team",
7
7
  "main": "index.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dingtalk-real-ai/dingtalk-connector",
3
- "version": "0.8.21-beta.0",
3
+ "version": "0.8.21",
4
4
  "description": "Official OpenClaw DingTalk channel plugin | 钉钉官方 OpenClaw 插件",
5
5
  "type": "module",
6
6
  "exports": {