Skip to content

fix: 完善数字员工回传、交互权限与回执超时提示 - #28

Merged
haofeng0705 merged 8 commits into
mainfrom
codex/employee-chat-convergence
Oct 13, 2026
Merged

haofeng0705 merged 8 commits into
mainfrom
codex/employee-chat-convergence

Conversation

@haofeng0705

@haofeng0705 haofeng0705 commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

问题与结果

数字员工回传统一到 DWS 通用 chat,保留绑定、身份、回执与幂等校验。回复提交后若回执查询耗尽 2 秒预算,原回复可能已送达;现在会向原会话引用原消息尝试发送一次安全故障提示,附 delivery_unknown 和本地排查编号,便于用户反馈。

  • 普通回复固定使用 chat +messages-reply,主管私聊固定使用 chat +messages-send;删除旧 channel 发送回退,启动要求 chatDelivery=true,不兼容时明确提示升级。正文仅经过 stdin。
  • local_agent 私聊按 DEAP 已发布可见范围授权;协商 groupMembershipAccess 后,已入群即可群聊,只订阅原生 @ 当前员工事件。普通群消息不进入模型;查询失败不放行、不消费事件。其他类型保持本地白名单,operator 审批身份独立。
  • 保留 A2UI 审批/问答及文字降级,修复仅向 setup 传上下文的宿主中交互被网页端接管,并支持语义摘要能力探测。
  • 严格识别 DWS stderr 中 code=5/category=internal/reason=delivery_unknown/retryable=false,不从自由文本推断、不透传服务端原始错误、凭据或业务正文。
  • 故障提示使用独立幂等键;发送前审计并持久化领取记录,同一事件在去重账本保留范围内最多尝试一次。提示自身失败/未知不递归、不重发正文;成功也不恢复 ready、不把原任务记成成功。
  • IM 提示、宿主日志和审计使用相同 DE-... 编号;审计增加 diagnosticId/failureCode,记录原回执错误及通知结果。停止与同会话等待覆盖整个通知和审计链。

当前验证

插件 head:5dddb7fa471dd3bdcfd4fd74f7c4e9a62d3644ce。配套 DWS #1476:799b8d8cf6c0e12dbf8df8636e76f5c727758131;DWS binary SHA256:bdad453fa6c704efdb78c9014fe5b1386f822ffdc10162eb24ece5a695a8533b。

macOS arm64、Node 26.4.0、pnpm 11.7.0;隔离工作区,受控短 TMPDIR。DWS_JOINT_BINARY 指向上述二进制,测试仅访问 loopback MCP 和夹具账号。

检查 结果
pnpm run ci(设置 DWS_JOINT_BINARY) 复跑通过:秘密扫描、Prettier、类型检查、368 个测试全部通过,0 跳过;npm tarball 检查通过
新增故障提示回归 22/22;覆盖安全错误识别、并发/重载去重、通知再次失败、审计/账本不可写、错误回执、实际审计落盘与 drain
真实 DWS → 受控 MCP:原回执持续 1001 原正文发送 1 次、回执预算耗尽后通知发送 1 次,通知成功;员工仍失败
真实 DWS → 受控 MCP:通知回执也持续 1001 共发送 2 次,通知结果 unknown,无递归、无原文重发
真实 DWS → 受控 MCP:1001 后恢复 原正文发送 1 次,查询第 2 次成功,无故障提示
本次新提示真实钉钉展示 NOT RUN;未在运行中的员工上注入失败

首次全量测试为 367 通过、1 失败,失败在未改动的 setup 死进程锁并发测试(最大同时进入数 2,期望 1)。当前版本和独立构建的 81b3be51 基线各定向复跑 5 次均通过,相关源码和生成模块完全一致;根因尚未确认,不宣称已复现基线故障。随后完整 CI 368/368 通过,保留首次失败记录。

边界、部署与回滚

  • 本次通知覆盖最终结构化回执未知;其他错误类别、取消、畸形或过大 stderr 不误触发。2 秒是原回执查询预算,独立通知自身也需发送和查询,整体耗时可能更长。
  • 同一 IM 通道完全不可用时,提示也可能无法送达;本地保留诊断证据。fail-closed 后的新消息仍按原策略拒绝,本 PR 不提供自动恢复或每条后续消息的通知保证。
  • 绑定已停止/换绑、审计或账本不可写时不绕过约束。通知领取记录与其他账本一样最多保留 10,000 条;旧账本可读取升级。
  • 两端须配套满足 chatDelivery。删除旧协议的兼容性影响保持显式,不通过回退恢复旧入口。
  • 本次未替换运行中的 10101,也未重发或覆盖已经交付的临时测试包;未合并、未发布。此次新增提示可回滚插件到 81b3be51,DWS 的 2 秒查询逻辑无需回滚。

@haofeng0705 haofeng0705 changed the title refactor: 数字员工发送复用 DWS chat 并保留旧协议兼容 fix: 收敛数字员工回传、A2UI 交互与 DEAP 访问权限 Oct 10, 2026
@haofeng0705 haofeng0705 changed the title fix: 收敛数字员工回传、A2UI 交互与 DEAP 访问权限 fix: 完善数字员工回传、交互权限与回执超时提示 Oct 13, 2026
@haofeng0705
haofeng0705 merged commit 1d6cde5 into main Oct 13, 2026
8 checks passed
@haofeng0705
haofeng0705 deleted the codex/employee-chat-convergence branch October 13, 2026 08:06
haofeng0705 added a commit that referenced this pull request Oct 14, 2026
## 问题与结果

平台已保证受管 local_agent 私聊可见即可聊、群聊原生 @ 可回复;撤销权限或切换类型后停止原绑定投递。插件此前逐条调用 DWS
查询可见范围,重复鉴权并引入主管登录与通讯录接口依赖。现在在启动时确定访问策略,平台消息直接交给任务队列,其他场景继续本地白名单。

## 实现

- 启动统一执行能力探测、绑定身份/代数/运行期望校验,要求 `bindingAccessPolicy=true` 和明确的
`platform` / `local_allowlist`。未知或缺失策略拒绝启动;不从配置自填或空白名单推断平台授权。
- 受管平台入站不再调用 visibility 或逐条查询 binding,群聊只订阅原生 @;其他本地场景保留原白名单与群消息触发规则。
- 从已验证的绑定响应取得员工自身开放 ID,在模型处理前过滤自身消息,包含未进入插件发送账本的消息;去重、回复顺序、审计和租约保留。
- 删除仅为主管查询身份迁移存在的错误解析与恢复提示。绑定验证完成前不记录 runtime_start ready。固定主管审批身份不变。
- 更新协议、旧绑定、启动失败、白名单、群 @、自身消息和真实 CLI 联合回归,以及用户文档。

配套 [DWS
#1476](https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/pull/1476):`c165fa8483efcc0d4a88f7a59434d80288787f90`。插件最终提交:`d09a0118dba57b148035087f7b86c29b51e87f73`。本
PR 基于已合并的 #28,版本号仍由正式 release workflow 管理。

## 验证

- 前一组合(DWS a3c7d486c / 插件 67b3fb8)的 `pnpm run ci`:**387 pass / 0 fail /
0 skip**;敏感信息扫描、格式、类型检查和打包校验全部通过,tarball 251 files / 1,178,207 bytes。
- 真实 DWS 子进程联合测试覆盖:旧受管绑定缺主管字段的 lease 启动/释放;平台连续两条私聊与群
@;仅历史主管字段的非受管绑定继续白名单;自身消息、重复事件和非 @ 群消息过滤;1001 回执恢复、超时故障提示和提示失败不递归。
- 平台未知策略、能力缺失、绑定不符和缺少合法自身 ID 均拒绝启动;绑定验证失败不会记录 ready 审计。
- `git diff --check` 通过;独立代码审查未发现阻断项。
- 本地 Node 26 / pnpm 11,测试输出放隔离目录;初始夹具 ESM 和 Unix socket
路径问题通过明确测试目录解决,未修改生产运行路径。
- 插件精确提交的远端 8 项检查全部通过,包含 Linux/macOS/Windows 测试和 DSH 打包/宿主集成。

补充最终组合验证:2026-10-14 使用官方 DSH 0.2.0-rc.2、DWS c165fa848 和插件
d09a011,数字员工完成两轮真实钉钉问答;核对入站、同一会话续接、引用回复正文和送达回执,两轮均正确,未观察到额外自回复任务。

最终插件提交远端 8 项 CI 全部通过。本机全量曾出现 4 项超时,其中生命周期/A2UI 独立复跑通过,运行时卡片夹具仍有 1
项超时;不把该次本地全量标为通过。历史会话从 DWH 迁入官方 DSH 后存在 cwd 与工作区归属不一致,影响侧栏分组,该问题不在本 PR
范围。

平台授权语义由平台方确认。npm 由正式 release workflow 发布。

## 风险与回滚

两端需配套升级;旧 DWS 缺少明确策略能力时拒绝启动。正常停止后回退两端,保留绑定、会话和账本,不手删 lease guard 或重试状态。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant