Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
7164fb3
fix(localagent): 补齐原消息处理状态反馈
haofeng0705 Oct 9, 2026
6d0f561
fix: 空闲会话直接显示思考中,仅前序任务未结束时显示排队
haofeng0705 Oct 9, 2026
dd9affe
fix: 对齐完成标签并将正常无正文回合收尾为收到
haofeng0705 Oct 9, 2026
3d60eac
fix(localagent): preserve quoted message context
haofeng0705 Oct 9, 2026
fc0c9a7
fix(localagent): allow authorized Codex tool requests
haofeng0705 Oct 9, 2026
8682430
fix(localagent): refresh employee policy on resumed Codex turns
haofeng0705 Oct 9, 2026
68e4610
fix(localagent): preserve Codex context when thread resume fails
haofeng0705 Oct 9, 2026
f6b218f
fix(localagent): deliver direct and quoted images to agents
haofeng0705 Oct 9, 2026
8de4642
Merge remote-tracking branch 'origin/main' into codex/localagent-mess…
haofeng0705 Oct 9, 2026
1f492ac
test(localagent): cover image and feedback failure boundaries
haofeng0705 Oct 9, 2026
456593e
Merge commit '9c29509947efd5e7145827c9146816c7543de851' into codex/lo…
haofeng0705 Oct 9, 2026
f4c1487
test(localagent): keep unknown task outcomes unconfirmed
haofeng0705 Oct 9, 2026
b97ff8d
Merge commit '6a3355e4829bf5873446d5a592f2e17aaf16799d' into codex/lo…
haofeng0705 Oct 9, 2026
1c1bb77
refactor(chat): 复用通用发送入口承载数字员工回复
haofeng0705 Oct 10, 2026
d4516ad
fix(chat): 补齐 DSH A2UI 卡片摘要参数
haofeng0705 Oct 10, 2026
b53fc48
fix(dingtalk-tag): local_agent 按已发布可见范围授权
haofeng0705 Oct 10, 2026
2d58895
docs: 记录可见范围实机验收与模型额度阻断
haofeng0705 Oct 10, 2026
1966eaf
refactor(dingtalk-tag): 删除重复的 channel 消息发送指令
haofeng0705 Oct 10, 2026
b09228d
docs: 数字员工发布说明仅保留 release fragment
haofeng0705 Oct 10, 2026
23be75f
Merge pull request #1479 from DingTalk-Real-AI/codex/employee-chat-co…
haofeng0705 Oct 10, 2026
a4b9921
Merge branch 'main' into codex/localagent-message-status
haofeng0705 Oct 10, 2026
b6e860a
fix(dingtalk-tag): 放行已入群的 local_agent 消息
haofeng0705 Oct 10, 2026
e6d14ae
fix(dingtalk-tag): 群聊仅原生提及当前员工时触发
haofeng0705 Oct 10, 2026
e132367
Merge pull request #1480 from DingTalk-Real-AI/codex/employee-chat-co…
haofeng0705 Oct 10, 2026
799b8d8
fix(chat): 在两秒内重试消息回执 1001 错误
haofeng0705 Oct 13, 2026
bd15f79
fix(localagent): 启动前迁移旧绑定主管身份
haofeng0705 Oct 13, 2026
b69b62d
Merge branch 'main' into codex/localagent-message-status
haofeng0705 Oct 13, 2026
74ce7cb
fix(localagent): handle empty upgrade candidates and lease release re…
haofeng0705 Oct 13, 2026
a3c7d48
fix(localagent): trust platform delivery authorization
haofeng0705 Oct 13, 2026
c165fa8
fix(localagent): 按员工身份解析自身消息发送者
haofeng0705 Oct 14, 2026
4c2d1ca
Merge remote-tracking branch 'origin/main' into codex/fix-1476-ci
haofeng0705 Oct 15, 2026
19e6560
fix(ci): 保留数字员工兼容入口并覆盖异常边界
haofeng0705 Oct 15, 2026
33817f2
test(localagent): 隔离绑定锁目录故障夹具
haofeng0705 Oct 15, 2026
56c0847
fix(ci): 修正发布片段格式与回执截止测试同步
haofeng0705 Oct 15, 2026
fe78c81
test(ci): 覆盖绑定重读与正文双重校验
haofeng0705 Oct 15, 2026
b08d356
test(ci): 修复 Windows 图片与路径夹具
haofeng0705 Oct 15, 2026
38af8b7
fix(localagent): 保留兼容 Channel 能力声明
haofeng0705 Oct 15, 2026
27d51a4
fix(ci): 修复 Windows 盘符图片与内嵌资源换行
haofeng0705 Oct 15, 2026
1e33e03
fix(ci): 为 helpers race 分片提供完整运行预算
haofeng0705 Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changes/1475-localagent-message-status.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
category: Fixed
---

- **数字员工本地 Agent 状态反馈** (#1475) — 在原消息上显示排队、思考、已完成、失败或待核查状态;执行失败时发送明确提示,正常结束但无回复文字时仅贴“收到”,并将表情更新与正文投递分开记录,避免提前显示完成或因表情失败重复执行。
- **数字员工引用上下文** (#1475) — 本地 Agent 接收引用回复时同时获得被引用的消息内容,避免只能看到当前问题;保留普通输入、会话指令及原有授权范围。
- **数字员工 Codex 本地任务** (#1475) — 修复内置 Codex 误用群聊机器人的附件问答限制,允许按用户请求和现有权限使用本地技能与 CLI,保留沙箱配置,并避免会话恢复失败后静默新建、丢失上下文。
- **数字员工图片输入** (#1475) — 自动下载直发或引用图片并交给本地 Agent,Codex 使用原生图片输入,避免只有 mediaId 无法识别;下载失败明确提示并保留失败状态。
5 changes: 5 additions & 0 deletions .changes/1476-receipt-1001-retry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
category: Fixed
---

- **数字员工回执查询** — 等待发送回执时,对 `im/query_message_send_status` 返回的结构化错误码 `1001` 重查原发送任务,兼容回执尚未落库的短暂窗口;查询和等待共享最多 2 秒预算,到期报告送达状态未知,不重新发送消息。
5 changes: 5 additions & 0 deletions .changes/1476-self-identity-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
category: Fixed
---

- **数字员工自身消息识别** — connect 使用员工自己的登录身份精确解析自身开放 ID,避免发布详情与入站事件的身份作用域不同而产生自回复。旧配置没有员工 Profile 作用域标记时,原生 worker 和 DSH 启动阶段只解析自身一次;失败拒绝启动,不依赖主管、不逐消息查询、不修改原绑定、模型、权限或会话。
5 changes: 5 additions & 0 deletions .changes/1476-visibility-upgrade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
category: Fixed
---

- **数字员工平台入站权限** — 正式绑定的 local_agent 直接使用平台保证的私聊投递和群内 @ 权限,不再逐消息查询可见范围、通讯录或部门;其他本地通道保持白名单。旧绑定缺少主管 Profile 也可正常启动,删除仅用于可见范围的主管迁移和启动阻断。新绑定不再写入该历史字段,固定 operator 审批、绑定版本与解绑检查保留。DSH 通过 bindingAccessPolicy 能力读取明确访问策略,需配套新版插件。
5 changes: 5 additions & 0 deletions .changes/1476-windows-ci.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
category: Fixed
---

- **Windows 图片与卡片契约** — Markdown 本地图片识别盘符路径及标准 file URI;内嵌 A2UI 解释资源在检出时保持 LF,避免摘要因换行转换失配。修正数字员工工作目录、附件及导出路径的跨平台测试夹具。
8 changes: 8 additions & 0 deletions .changes/employee-chat-convergence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
category: Changed
---

- **数字员工回复复用 chat** — 通用发送与引用回复增加 stdin 正文、投递回执和绑定上下文校验;本地数字员工 worker 使用通用 chat 回传,保留已发布的 `channel reply` / `channel operator-private` 兼容入口,新宿主改用通用 chat,配套 DSH 要求 `chatDelivery=true`,缺失时提示升级;双方须配套升级。
- **A2UI 审批卡片兼容** — 发卡命令支持 `--summary` 自定义聊天预览,满足 DSH 数字员工的卡片能力探测;省略时继续使用原有默认摘要。

local_agent 私聊权限读取 DEAP 已发布可见范围(成员及部门子树);群聊以已入群为准,不叠加个人可见范围或本地群白名单,并修复空白名单漏订阅群内 @ 消息;群聊仅原生 @ 当前员工才触发,普通消息不进入模型。DSH 按 groupMembershipAccess 能力传递群上下文;其他场景保留本地白名单。DWS/DSH 共用绑定查询判定,固定管理 Profile,查询失败不回退放行。
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ internal/runtimepayload/assets/*.payload binary
skills/multi/dingtalk-aicard/references/protocol/*.json text eol=lf
# Preserve the upstream README byte-for-byte for Cobra provenance checks.
third_party/cobra/README.md whitespace=-blank-at-eol

# 内嵌解释资源由 validator 固定原始字节摘要,Windows 检出也保持 LF。
internal/card/a2ui/*.json text eol=lf
20 changes: 10 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1174,13 +1174,13 @@ jobs:
go test -v -count=1 -timeout=10m "${packages[@]}"
exit 0
fi
# cli/smoke own heavy NewRootCommand / Schema assembly under -race;
# give them a dedicated package timeout on slower hosted runners.
# 18m (was 15m): the five schema-cache concurrency regressions run
# under -race again, adding ~16s plus hosted-runner variance.
# cli/smoke 的 Schema 装配和 helpers 的命令矩阵、图片压缩在
# -race 下耗时较长;helpers 在 run 38711691277 耗尽了 12m。
# 给这些分片 18m,保留完整测试集合和 race 检测。
timeout_budget=12m
if [ "$TEST_SHARD" = "cli" ] ||
[ "$TEST_SHARD" = "smoke" ]; then
[ "$TEST_SHARD" = "smoke" ] ||
[ "$TEST_SHARD" = "helpers" ]; then
timeout_budget=18m
fi
go test -v -race -count=1 -timeout="$timeout_budget" "${packages[@]}"
Expand Down Expand Up @@ -1250,13 +1250,13 @@ jobs:
exit 0
;;
esac
# cli/smoke own heavy NewRootCommand / Schema assembly under -race;
# give them a dedicated package timeout on slower hosted runners.
# 18m (was 15m): the five schema-cache concurrency regressions run
# under -race again, adding ~16s plus hosted-runner variance.
# cli/smoke 的 Schema 装配和 helpers 的命令矩阵、图片压缩在
# -race 下耗时较长;helpers 在 run 38711691277 耗尽了 12m。
# 给这些分片 18m,保留完整测试集合和 race 检测。
timeout_budget=12m
if [ "$TEST_SHARD" = "cli" ] ||
[ "$TEST_SHARD" = "smoke" ]; then
[ "$TEST_SHARD" = "smoke" ] ||
[ "$TEST_SHARD" = "helpers" ]; then
timeout_budget=18m
fi
go test -v -race -count=1 -timeout="$timeout_budget" "${packages[@]}"
Expand Down
36 changes: 36 additions & 0 deletions docs/acceptance/employee-chat-convergence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 数字员工发送收敛与本地联合验收

通用 `chat +messages-reply` 和 `chat +messages-send` 承载数字员工的消息发送。`channel capabilities` 和 `channel binding` 继续负责能力发现与绑定读取;已发布的 `channel reply` 和 `channel operator-private` 保留兼容入口,复用统一发送回执;新版宿主发送使用 chat。

## 调用约定

- `--body-stdin`:正文参数显式为 `-`,从标准输入读取最多 256 KiB 正文。未启用时,`-` 仍为字面量。
- `--wait-delivery`:个人文本、Markdown 或普通引用回复查询发送任务的回执,输出 `openMessageId`、`conversationId`、`deliveryStatus`、`idempotencyKey`。遵循命令现有输出契约;未来统一 envelope 时字段位于 `data`。
- `--employee-context`:JSON 含 `agentUuid`、`channel`、`bindingRevision`;要求显式 Profile、stdin、回执与幂等键。读取和发送前核对绑定仍为 bound/running,私聊目标必须是 connect 固定的主管。
- chat 原有用户确认保持生效。connect 已授权的宿主通过 `--yes` 执行自动回传;上下文只是绑定约束,不能代替授权。
- 正式绑定的 `local_agent` 由平台保证私聊投递权限、群内 @ 可回复;本地不重复查询可见范围。其他场景保留本地白名单,聊天权限不能替代固定主管审批身份。

DSH 启动要求 `capabilities.chatDelivery=true` 与 `capabilities.bindingAccessPolicy=true`;缺少能力时明确提示升级 DWS 并停止启动。发送失败或回执未知不会切换协议重发。DWS 自带 worker 与自身版本同步,直接使用通用 chat。

## 本地验收方法

在 DSH 仓库运行:

```sh
DWS_JOINT_BINARY=/absolute/path/to/built/dws node --test test/digital-employee-chat-delivery.test.mjs
```

使用真实 DWS 子进程、隔离 Profile/绑定目录、虚构凭据及本机 HTTP MCP。覆盖普通回复、主管私聊、未知状态不重发、过期绑定、停止运行、错误主管、查原消息期间绑定变化、源消息会话不符;拒绝场景断言发送调用数为零。另有仅声明新版能力的 DWS 接入、旧版拒绝启动与无重发测试。

该验收不发送真实钉钉业务消息,也不证明云端账号权限或真实业务 E2E。


## 平台入站权限联合验收

- `channel binding --stdin` 在启动时返回本地权威绑定及 `accessPolicy`,不接收 sender 或 conversationType,不返回 allowed。正式服务端绑定为 `platform`,无回执的本地通道为 `local_allowlist`。损坏、过期、解绑或未完成服务端操作的绑定不授权启动。
- 平台确认:移出私聊可见范围后停止投递;群内 @ 可回复;从 local_agent 修改类型后停止旧绑定投递、需重新绑定。本地测试只验证对此投递契约的消费,不宣称模拟验证了平台行为。
- 单元回归覆盖旧绑定缺主管字段也可租约启动、原生启动不枚举账号和查询远端、受管私聊及群 @ 不查可见范围、普通群消息和自身消息忽略、非受管通道仍执行白名单、主管历史字段不升级授权、过期 revision/解绑/损坏绑定拒绝。
- 旧的主管字段迁移、可见范围成员解析及部门展开代码已删除。新绑定不再保存 supervisorProfile,旧字段仅兼容读取;固定 operator 审批和当前主管管理权限不变。
- DSH 内部 `connect --local-lease` 在宿主确认 `released` 并成功移除隔离标记后输出统一成功结果 `status:released`、退出码 0;未确认释放仍失败并保留隔离标记。
- `platform` 必须返回 `selfOpenDingTalkId` 供插件排除自身消息;新绑定从已验证的 adapter 配置读取。旧 DSH 配置缺自身 ID 时只在启动阶段用员工 Profile 查询自己一次,核对 token 精确身份并在返回前重核绑定;不要求主管登录、不写新迁移字段。回归覆盖错配 token、查询失败、旧 adapter 版本和查询期间换绑。
- 真正钉钉业务 E2E 需要另外记录真实入站、模型执行、回复回执和 IM 读回;本轮修改前的 1010/10101 记录不代表本版本已完成现场验收。
Loading
Loading