@xdxer/dingtalk-agent 0.1.4-beta.1 → 0.1.4-beta.11

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.
Files changed (278) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.en.md +397 -0
  3. package/README.md +500 -47
  4. package/dist/bin/dingtalk-agent.js +1263 -351
  5. package/dist/bin/dingtalk-agent.js.map +1 -1
  6. package/dist/src/actions.js +98 -14
  7. package/dist/src/actions.js.map +1 -1
  8. package/dist/src/agent-audit.js +460 -0
  9. package/dist/src/agent-audit.js.map +1 -0
  10. package/dist/src/agent-bindings.js +132 -0
  11. package/dist/src/agent-bindings.js.map +1 -0
  12. package/dist/src/agent-definition.js +182 -0
  13. package/dist/src/agent-definition.js.map +1 -0
  14. package/dist/src/agent-enhance.js +678 -0
  15. package/dist/src/agent-enhance.js.map +1 -0
  16. package/dist/src/agent-platform.js +158 -0
  17. package/dist/src/agent-platform.js.map +1 -0
  18. package/dist/src/bootstrap.js +125 -17
  19. package/dist/src/bootstrap.js.map +1 -1
  20. package/dist/src/config.js +1 -7
  21. package/dist/src/config.js.map +1 -1
  22. package/dist/src/development-workspace.js +736 -0
  23. package/dist/src/development-workspace.js.map +1 -0
  24. package/dist/src/doctor.js +49 -22
  25. package/dist/src/doctor.js.map +1 -1
  26. package/dist/src/dws.js +145 -0
  27. package/dist/src/dws.js.map +1 -1
  28. package/dist/src/eval-evidence.js +193 -0
  29. package/dist/src/eval-evidence.js.map +1 -0
  30. package/dist/src/init.js +1 -1
  31. package/dist/src/init.js.map +1 -1
  32. package/dist/src/invocation.js +36 -0
  33. package/dist/src/invocation.js.map +1 -0
  34. package/dist/src/lab.js +679 -0
  35. package/dist/src/lab.js.map +1 -0
  36. package/dist/src/lease.js +100 -0
  37. package/dist/src/lease.js.map +1 -0
  38. package/dist/src/map.js +157 -0
  39. package/dist/src/map.js.map +1 -0
  40. package/dist/src/memory/candidates.js +451 -0
  41. package/dist/src/memory/candidates.js.map +1 -0
  42. package/dist/src/memory/completion-evidence.js +536 -0
  43. package/dist/src/memory/completion-evidence.js.map +1 -0
  44. package/dist/src/memory/operational.js +263 -0
  45. package/dist/src/memory/operational.js.map +1 -0
  46. package/dist/src/memory/remote-state.js +478 -0
  47. package/dist/src/memory/remote-state.js.map +1 -0
  48. package/dist/src/memory/task-checkpoints.js +204 -0
  49. package/dist/src/memory/task-checkpoints.js.map +1 -0
  50. package/dist/src/multica-deploy.js +1480 -0
  51. package/dist/src/multica-deploy.js.map +1 -0
  52. package/dist/src/multica-provider.js +685 -0
  53. package/dist/src/multica-provider.js.map +1 -0
  54. package/dist/src/opencode-evals.js +1062 -0
  55. package/dist/src/opencode-evals.js.map +1 -0
  56. package/dist/src/opencode-provider.js +531 -0
  57. package/dist/src/opencode-provider.js.map +1 -0
  58. package/dist/src/opencode-workspace.js +197 -0
  59. package/dist/src/opencode-workspace.js.map +1 -0
  60. package/dist/src/perception.js +225 -0
  61. package/dist/src/perception.js.map +1 -0
  62. package/dist/src/personal-event-evals.js +595 -0
  63. package/dist/src/personal-event-evals.js.map +1 -0
  64. package/dist/src/promotion.js +786 -0
  65. package/dist/src/promotion.js.map +1 -0
  66. package/dist/src/remote-semantic-state-live-evals.js +888 -0
  67. package/dist/src/remote-semantic-state-live-evals.js.map +1 -0
  68. package/dist/src/remote-semantic-state-worker.js +38 -0
  69. package/dist/src/remote-semantic-state-worker.js.map +1 -0
  70. package/dist/src/remote-state-evals.js +501 -0
  71. package/dist/src/remote-state-evals.js.map +1 -0
  72. package/dist/src/response-gate.js +51 -0
  73. package/dist/src/response-gate.js.map +1 -0
  74. package/dist/src/robot-evals.js +770 -0
  75. package/dist/src/robot-evals.js.map +1 -0
  76. package/dist/src/sessions.js +66 -105
  77. package/dist/src/sessions.js.map +1 -1
  78. package/dist/src/setup.js +14 -12
  79. package/dist/src/setup.js.map +1 -1
  80. package/dist/src/skill-manager.js +128 -203
  81. package/dist/src/skill-manager.js.map +1 -1
  82. package/dist/src/skills.js.map +1 -1
  83. package/dist/src/storage-evals.js +26 -0
  84. package/dist/src/storage-evals.js.map +1 -0
  85. package/dist/src/types.js.map +1 -1
  86. package/dist/src/upgrade.js +137 -0
  87. package/dist/src/upgrade.js.map +1 -0
  88. package/dist/src/waits.js +5 -1
  89. package/dist/src/waits.js.map +1 -1
  90. package/dist/src/workspace.js +28 -3
  91. package/dist/src/workspace.js.map +1 -1
  92. package/docs/INSTALLATION.md +119 -14
  93. package/docs/SECOND-AGENT-ACCEPTANCE.md +62 -0
  94. package/docs/architecture/agent-memory-topology.png +0 -0
  95. package/docs/architecture/agent-memory-topology.svg +132 -0
  96. package/docs/architecture/general-agent-kernel-topology.png +0 -0
  97. package/docs/architecture/general-agent-kernel-topology.svg +149 -0
  98. package/docs/architecture/provider-bound-development-workspace.png +0 -0
  99. package/docs/architecture/provider-bound-development-workspace.svg +141 -0
  100. package/docs/architecture/task-completion-gate.png +0 -0
  101. package/docs/architecture/task-completion-gate.svg +191 -0
  102. package/docs/schemas/agent-audit-load-evidence.schema.json +14 -0
  103. package/docs/schemas/agent-audit.schema.json +92 -0
  104. package/docs/schemas/agent-bindings.schema.json +54 -0
  105. package/docs/schemas/agent-definition.schema.json +78 -0
  106. package/docs/schemas/agent-enhancement-plan.schema.json +88 -0
  107. package/docs/schemas/agent-enhancement-receipt.schema.json +37 -0
  108. package/docs/schemas/agent-platform.schema.json +13 -0
  109. package/docs/schemas/enriched-invocation.schema.json +46 -0
  110. package/docs/schemas/eval-candidate-plan.schema.json +28 -0
  111. package/docs/schemas/eval-candidate-result.schema.json +20 -0
  112. package/docs/schemas/eval-candidate.schema.json +30 -0
  113. package/docs/schemas/invocation.schema.json +19 -0
  114. package/docs/schemas/memory-candidate-proposal.schema.json +18 -0
  115. package/docs/schemas/memory-candidate.schema.json +76 -0
  116. package/docs/schemas/memory-publish-target.schema.json +25 -0
  117. package/docs/schemas/multica-deployment-list.schema.json +29 -0
  118. package/docs/schemas/multica-deployment-operation.schema.json +51 -0
  119. package/docs/schemas/multica-deployment-plan.schema.json +70 -0
  120. package/docs/schemas/multica-deployment-receipt.schema.json +87 -0
  121. package/docs/schemas/multica-deployment-status.schema.json +23 -0
  122. package/docs/schemas/multica-workspace-inspection.schema.json +77 -0
  123. package/docs/schemas/multica-workspace-plan.schema.json +68 -0
  124. package/docs/schemas/multica-workspace-resource-list.schema.json +27 -0
  125. package/docs/schemas/multica-workspace-status.schema.json +34 -0
  126. package/docs/schemas/observation.schema.json +21 -0
  127. package/docs/schemas/operational-memory-provider.schema.json +36 -0
  128. package/docs/schemas/operational-memory-record.schema.json +24 -0
  129. package/docs/schemas/perception-input.schema.json +56 -0
  130. package/docs/schemas/project.schema.json +113 -0
  131. package/docs/schemas/promotion-list.schema.json +36 -0
  132. package/docs/schemas/promotion-plan.schema.json +60 -0
  133. package/docs/schemas/promotion-policy.schema.json +29 -0
  134. package/docs/schemas/promotion-receipt.schema.json +43 -0
  135. package/docs/schemas/promotion-status.schema.json +23 -0
  136. package/docs/schemas/release-readiness.schema.json +66 -0
  137. package/docs/schemas/remote-semantic-state-live-eval.schema.json +60 -0
  138. package/docs/schemas/remote-semantic-state-manifest.schema.json +79 -0
  139. package/docs/schemas/remote-semantic-state-provider.schema.json +98 -0
  140. package/docs/schemas/response-gate.schema.json +20 -0
  141. package/docs/schemas/task-checkpoint.schema.json +71 -0
  142. package/docs/schemas/task-completion-evidence.schema.json +154 -0
  143. package/docs/schemas/workspace-doctor.schema.json +56 -0
  144. package/docs/schemas/workspace-state.schema.json +39 -0
  145. package/evals/baselines/2026-07-16/opencode-basic-010-completion-summary.json +123 -0
  146. package/evals/baselines/2026-07-16/opencode-basic-skill-required-summary.json +69 -0
  147. package/evals/baselines/2026-07-16/opencode-multi-surface-summary.json +63 -0
  148. package/evals/baselines/2026-07-16/remote-state-live-summary.json +70 -0
  149. package/evals/baselines/2026-07-17/agent-enhance-opencode-dogfood-summary.json +98 -0
  150. package/evals/baselines/2026-07-17/personal-event-live-readiness-summary.json +68 -0
  151. package/examples/agents/fde-coach/AGENTS.md +26 -0
  152. package/examples/agents/fde-coach/MEMORY.md +3 -0
  153. package/examples/agents/fde-coach/fields/default/field.json +24 -0
  154. package/examples/agents/fde-coach/knowledge/INDEX.md +4 -0
  155. package/examples/agents/fde-coach/skills/fde-coach/SKILL.md +13 -0
  156. package/examples/agents/release-manager/AGENTS.md +26 -0
  157. package/examples/agents/release-manager/MEMORY.md +3 -0
  158. package/examples/agents/release-manager/fields/default/field.json +24 -0
  159. package/examples/agents/release-manager/knowledge/INDEX.md +4 -0
  160. package/examples/agents/release-manager/skills/release-manager/SKILL.md +13 -0
  161. package/lab/README.md +109 -0
  162. package/lab/agent-eval/catalog.json +91 -0
  163. package/lab/agent-eval/classic-failures.json +177 -0
  164. package/lab/agent-eval/completion-gate-regression.json +99 -0
  165. package/lab/agent-eval/personal-event-live.example.json +94 -0
  166. package/lab/agent-eval/remote-semantic-state-live.example.json +70 -0
  167. package/lab/agent-eval/remote-semantic-state-provider.fixture.json +47 -0
  168. package/lab/agent-eval/remote-state-workspace/AGENTS.md +8 -0
  169. package/lab/agent-eval/remote-state-workspace/opencode.json +7 -0
  170. package/lab/agent-eval/remote-state-workspace/skills/remote-state-operator/SKILL.md +13 -0
  171. package/lab/agent-eval/remote-state.example.json +31 -0
  172. package/lab/agent-eval/workspace/AGENTS.md +7 -0
  173. package/lab/agent-eval/workspace/MEMORY.md +4 -0
  174. package/lab/agent-eval/workspace/artifacts/pending-review.md +3 -0
  175. package/lab/agent-eval/workspace/knowledge/INDEX.md +4 -0
  176. package/lab/agent-eval/workspace/opencode.json +20 -0
  177. package/lab/manifest.example.json +27 -0
  178. package/lab/manifest.personal-event.example.json +27 -0
  179. package/lab/project-workspace/README.md +11 -0
  180. package/lab/project-workspace/fake-multica-provider.mjs +266 -0
  181. package/lab/project-workspace/multica-deploy.fixture.json +29 -0
  182. package/lab/project-workspace/multica-readonly.fixture.json +69 -0
  183. package/lab/project-workspace/observation.fixture.json +14 -0
  184. package/lab/project-workspace/opencode-provider-suite.json +65 -0
  185. package/lab/project-workspace/project.fixture.json +44 -0
  186. package/lab/project-workspace/promotion-policy.fixture.json +15 -0
  187. package/lab/robot-eval/pool.example.json +30 -0
  188. package/lab/robot-eval/suite.json +123 -0
  189. package/lab/robot-eval/workspace/AGENTS.md +21 -0
  190. package/lab/robot-eval/workspace/MEMORY.md +3 -0
  191. package/lab/robot-eval/workspace/knowledge/INDEX.md +5 -0
  192. package/lab/robot-eval/workspace/opencode.json +22 -0
  193. package/lab/schemas/agent-eval-catalog.schema.json +47 -0
  194. package/lab/schemas/lab-manifest.schema.json +70 -0
  195. package/lab/schemas/personal-event-eval.schema.json +91 -0
  196. package/lab/schemas/remote-state-eval.schema.json +66 -0
  197. package/lab/schemas/robot-eval-suite.schema.json +184 -0
  198. package/lab/schemas/robot-pool.schema.json +56 -0
  199. package/package.json +26 -14
  200. package/skills/dingtalk-agent-boot-multica/SKILL.md +40 -0
  201. package/skills/dingtalk-agent-compose/SKILL.md +110 -0
  202. package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +26 -0
  203. package/skills/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +13 -0
  204. package/skills/dingtalk-agent-compose/assets/agent.bindings.local.template.json +13 -0
  205. package/skills/dingtalk-agent-compose/assets/opencode.template.json +12 -0
  206. package/skills/dingtalk-agent-compose/assets/role-skill.template.md +24 -0
  207. package/skills/dingtalk-agent-compose/evals/evals.json +94 -0
  208. package/skills/dingtalk-agent-compose/references/agent-definition-contract.md +55 -0
  209. package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +65 -0
  210. package/skills/dingtalk-agent-compose/references/storage-routing.md +20 -0
  211. package/skills/dingtalk-agent-deploy/SKILL.md +60 -0
  212. package/skills/dingtalk-agent-deploy/references/multica-deployment-contract.md +49 -0
  213. package/skills/dingtalk-agent-deploy/references/promotion-observation-contract.md +49 -0
  214. package/skills/dingtalk-agent-eval/SKILL.md +116 -0
  215. package/skills/dingtalk-agent-eval/assets/eval-catalog.template.json +18 -0
  216. package/skills/dingtalk-agent-eval/evals/evals.json +61 -0
  217. package/skills/dingtalk-agent-eval/references/eval-topology.md +34 -0
  218. package/skills/dingtalk-agent-eval/references/evidence-contract.md +31 -0
  219. package/skills/dingtalk-agent-eval/references/scenario-taxonomy.md +25 -0
  220. package/skills/dingtalk-agent-eval/references/storage-modes.md +75 -0
  221. package/skills/dingtalk-basic-behavior/SKILL.md +63 -3
  222. package/skills/dingtalk-basic-behavior/assets/memory-candidate-proposal.json +10 -0
  223. package/skills/dingtalk-basic-behavior/assets/{task-checkpoint.md → task-checkpoint.json} +2 -21
  224. package/skills/dingtalk-basic-behavior/references/action-contract.md +2 -0
  225. package/skills/dingtalk-basic-behavior/references/memory-and-evolution.md +15 -1
  226. package/skills/dingtalk-basic-behavior/references/perception-and-gates.md +28 -0
  227. package/skills/dingtalk-basic-behavior/references/task-lifecycle.md +32 -7
  228. package/dist/src/boot.js +0 -70
  229. package/dist/src/boot.js.map +0 -1
  230. package/dist/src/duty.js +0 -74
  231. package/dist/src/duty.js.map +0 -1
  232. package/dist/src/kb.js +0 -240
  233. package/dist/src/kb.js.map +0 -1
  234. package/dist/src/runs.js +0 -79
  235. package/dist/src/runs.js.map +0 -1
  236. package/docs/ARCHITECTURE.md +0 -217
  237. package/docs/MINIMAL-WORKSPACE-V1.md +0 -172
  238. package/docs/OPEN-SOURCE-REFERENCES.md +0 -107
  239. package/docs/SELF-TEST.md +0 -252
  240. package/docs//345/206/205/347/275/221/345/256/236/347/233/270.md +0 -77
  241. package/evals/baselines/2026-07-14/behavior-summary.json +0 -28
  242. package/evals/baselines/2026-07-14/contract-summary.json +0 -18
  243. package/evals/baselines/2026-07-14/live-canary-summary.json +0 -25
  244. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/SKILL.md +0 -72
  245. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/action-contract.md +0 -31
  246. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/event-to-behavior.md +0 -22
  247. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/memory-and-evolution.md +0 -25
  248. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/runtime-modes.md +0 -34
  249. package/evals/baselines/2026-07-15/task-lifecycle-summary.json +0 -50
  250. package/evals/evals.json +0 -316
  251. package/evals/fixtures/dm-ambiguous-send.json +0 -4
  252. package/evals/fixtures/dm-blocked.json +0 -4
  253. package/evals/fixtures/dm-clear.json +0 -4
  254. package/evals/fixtures/dm-discussion.json +0 -4
  255. package/evals/fixtures/dm-doc-write-no-tool.json +0 -4
  256. package/evals/fixtures/dm-long-task-ack.json +0 -4
  257. package/evals/fixtures/dm-nonblocking-gap.json +0 -4
  258. package/evals/fixtures/dm-structured-task.json +0 -4
  259. package/evals/fixtures/group.json +0 -10
  260. package/evals/fixtures/mentioned.json +0 -3
  261. package/evals/run-contract-evals.mjs +0 -1106
  262. package/evals/run-shadow-evals.mjs +0 -267
  263. package/evals/runners/README.md +0 -66
  264. package/evals/runners/claude-shadow.mjs +0 -533
  265. package/evals/schemas/action-request.schema.json +0 -77
  266. package/evals/shadow-evals.json +0 -133
  267. package/skills/AGENTS.md +0 -104
  268. package/skills//344/273/273/345/212/241.md +0 -48
  269. package/skills//345/237/272/347/241/200/350/241/214/344/270/272.md +0 -44
  270. package/skills//345/277/203/350/267/263.md +0 -79
  271. package/skills//346/266/210/346/201/257.md +0 -50
  272. package/skills//347/237/245/350/257/206.md +0 -55
  273. package/skills//350/257/204/346/265/213.md +0 -62
  274. package/skills//351/222/211/351/222/211.md +0 -64
  275. package/templates/ontology/index.md +0 -24
  276. package/templates/ontology/self/access.md +0 -38
  277. package/templates/ontology/self/role-spec.md +0 -34
  278. package/templates/ontology/self/workspace.md +0 -41
package/evals/evals.json DELETED
@@ -1,316 +0,0 @@
1
- {
2
- "skill_name": "基础行为",
3
- "evals": [
4
- {
5
- "id": 1,
6
- "prompt": "消费 mentioned.json,说明应该创建什么 Field/Session/Run,并选择一个合法动作。不得自行构造收件人。",
7
- "expected_output": "事件映射为 im.message.mentioned;默认 Field;允许 ack/reply/ask/silence;回复目标只能来自 conversation_id/message_id/sender_open_dingtalk_id。",
8
- "files": ["evals/fixtures/mentioned.json"],
9
- "expectations": [
10
- "事件类型规范化为 im.message.mentioned",
11
- "允许动作恰好包含 ack、reply、ask、silence",
12
- "权威回复目标完整复用事件中的三个 ID"
13
- ]
14
- },
15
- {
16
- "id": 2,
17
- "prompt": "消费 group.json。消息没有 @ 当前员工,判断是否应回复。",
18
- "expected_output": "映射为 im.message.group;Basic Behavior 只允许 silence,并产生本地回执。",
19
- "files": ["evals/fixtures/group.json"],
20
- "expectations": [
21
- "普通群消息只允许 silence",
22
- "reply 在 CLI 行为闸门被拒绝",
23
- "silence 产生 verified=true 的本地 Receipt"
24
- ]
25
- },
26
- {
27
- "id": 3,
28
- "prompt": "将同一个 mentioned.json 连续 prepare,再模拟 controller 幂等入队并 ack,判断崩溃窗口与重复沙箱是否都可控。",
29
- "expected_output": "复用相同 sessionId/runId;ack 前作为 pending outbox 可重投,controller 按 runId 幂等入队后 ack;ack 后才 launch=false。",
30
- "files": ["evals/fixtures/mentioned.json"],
31
- "expectations": [
32
- "重复事件复用相同 Session/Run,pending 可扫描恢复",
33
- "ack 前重投 duplicate=true 且 launch=true",
34
- "ack 后重复事件 launch=false"
35
- ]
36
- },
37
- {
38
- "id": 4,
39
- "prompt": "在已 prepare 的 Run 中尝试通过 act 指定另一个 conversationId。",
40
- "expected_output": "CLI 没有目标覆盖参数,parse 阶段拒绝;只能引用回复触发消息。",
41
- "files": ["evals/fixtures/mentioned.json"],
42
- "expectations": [
43
- "act 不接受 conversation-id 参数",
44
- "伪造 Run 不在 event index 时被拒绝",
45
- "修改 reply-target 投影后 act fail closed"
46
- ]
47
- },
48
- {
49
- "id": 5,
50
- "prompt": "在事件已被读取后,让 Field/Behavior 物化临时失败;修复配置并执行 dispatch pending。",
51
- "expected_output": "事件先进 durable inbox;物化失败不丢原事件;修复后 pending 能补完同一 Run 并清理 inbox。",
52
- "files": ["evals/fixtures/mentioned.json"],
53
- "expectations": [
54
- "物化失败后 durable inbox 保留一条事件",
55
- "修复后 dispatch pending 恢复出 launch=true 的 Run",
56
- "成功建立 event index 后 inbox 记录被清理"
57
- ]
58
- },
59
- {
60
- "id": 6,
61
- "prompt": "消费真实 DWS 形态的 envelope:data 是 JSON 字符串;再输入损坏的 data。",
62
- "expected_output": "合法 data 必须二次解析并保留 tenant/conversation/message/actor;损坏 data 必须响亮失败,不能当空消息。",
63
- "files": [],
64
- "expectations": [
65
- "data JSON 字符串被二次解析为 DM 事件",
66
- "tenant 与三个回复目标 ID 被完整保留",
67
- "损坏 data fail loud 而不是产生空事件"
68
- ]
69
- },
70
- {
71
- "id": 7,
72
- "prompt": "同 tenant/conversation 中制造两个独立根消息,再制造对第一条的 follow-up;另把同一会话复制到另一 tenant。",
73
- "expected_output": "独立根消息各自一个 Session;follow-up 回到原 Session;tenant 不同必须隔离。",
74
- "files": ["evals/fixtures/mentioned.json"],
75
- "expectations": [
76
- "同会话两个独立事项不会塌成一个 Session",
77
- "rootMessage follow-up 复用原事项 Session 但创建新 Run",
78
- "不同 tenant 即使 conversation/message 相同也不会串 Session"
79
- ]
80
- },
81
- {
82
- "id": 8,
83
- "prompt": "prepare 一个 Run,随后修改工作区里的启用 Skill,再重放同一事件。",
84
- "expected_output": "Run 内存在标准 SKILL.md 和 manifest/hash;当前 Run 永远使用原快照,不热加载工作区修改。",
85
- "files": [],
86
- "expectations": [
87
- "Run 内有标准 Agent Skill 快照与 manifest",
88
- "manifest hash 已写入 Run 控制面",
89
- "修改工作区 Skill 后重放同一事件,Run 快照保持不变"
90
- ]
91
- },
92
- {
93
- "id": 9,
94
- "prompt": "把 Field 配成 robot-connect/connector,然后尝试 act reply 与 silence。",
95
- "expected_output": "connector 是唯一出口 owner;act 外发必须硬拒绝以避免双发,silence 仍可审计。",
96
- "files": [],
97
- "expectations": [
98
- "robot-connect Field 的出口 owner 固定为 connector",
99
- "dingtalk-agent act reply 被出口闸门拒绝",
100
- "silence 仍生成 verified Receipt"
101
- ]
102
- },
103
- {
104
- "id": 10,
105
- "prompt": "对同一个 heartbeat duty 连续触发两拍,并重试第一拍。",
106
- "expected_output": "稳定 heartbeat key 复用同一 Session;每拍有唯一 eventId/Run;同一拍重试仍幂等复用原 Run。",
107
- "files": [],
108
- "expectations": [
109
- "同一 duty 的不同心跳复用 Session",
110
- "不同心跳 occurrence 创建不同 Run 且可以启动",
111
- "同一 occurrence 重试复用原 Run"
112
- ]
113
- },
114
- {
115
- "id": 11,
116
- "prompt": "在 DM Run 中执行 ask,随后由同一人在同一会话回复。验证它不是新事项,而是恢复原 Session。",
117
- "expected_output": "ask Receipt 激活宿主 Wait;回复创建新 Run,但 sessionId 保持不变,并在 context/resume.json 中带回 waitId/sourceRunId。",
118
- "files": [],
119
- "expectations": [
120
- "ask 的 Receipt 激活唯一 Durable Wait",
121
- "同人同会话回复复用原 Session 并创建新 Run",
122
- "恢复投影与 Wait claim 绑定同一个 eventId/runId",
123
- "旧 ask Receipt 重放不会覆盖同 scope 的下一轮 Wait"
124
- ]
125
- },
126
- {
127
- "id": 12,
128
- "prompt": "一个 Session 正在等待 Alice 回复;先让 Bob 在同一会话发消息,再让 Alice 用显式 sessionKey 发起另一事项,最后让 Alice 正常回复。",
129
- "expected_output": "不同 actor 不能消费 Wait;显式 sessionKey 优先;只有 Alice 无显式 causal key 的下一条消息恢复原 Session。",
130
- "files": [],
131
- "expectations": [
132
- "不同 actor 的消息创建新 Session",
133
- "显式 sessionKey 不被自动 Wait 路由覆盖",
134
- "原 actor 的普通回复仍能恢复原 Session"
135
- ]
136
- },
137
- {
138
- "id": 13,
139
- "prompt": "第一个 Session ask 后收到回复并已唤醒新 Run,但新 Run 尚未结束;此时让另一个 Session ask。",
140
- "expected_output": "单链 v1 把 claimed 也视为 open chain;第二个 ask 在 DWS 外发前 fail closed,原链保持不变。",
141
- "files": [],
142
- "expectations": [
143
- "测试确实恢复第一个 Session,并另建第二个 Session",
144
- "第二个并行 ask 被单链 Wait 闸门拒绝",
145
- "权威 Wait 仍处于第一个 Session 的 claimed 状态"
146
- ]
147
- },
148
- {
149
- "id": 14,
150
- "prompt": "Session ask 后先由回复唤醒新 Run,再收到 /stop;让 Behavior 暂时不可用使 stop 在 event-index 前中断,随后新建另一条 Wait 并重放旧 stop。",
151
- "expected_output": "/stop 在 Field/Behavior/Skill 物化前取消 claimed Wait 并提升一次 generation;重放依 eventId→waitId 回到旧 Wait,不能误取消新的 scope head;已唤醒 Run 的副作用被拒绝。",
152
- "files": [],
153
- "expectations": [
154
- "stop 能取消已 claimed 的链,重放只回原 Wait 而不误杀后来新 Wait",
155
- "即使当前 Behavior 不可物化也先落取消闸门,重放不会重复提升 generation",
156
- "已经唤醒但未执行的旧 generation Run 被硬闸门阻止"
157
- ]
158
- },
159
- {
160
- "id": 15,
161
- "prompt": "模拟 ask Receipt 已落盘但 Wait 仍停在 arming 时进程崩溃,再输入同一人的下一条回复。",
162
- "expected_output": "incoming 路由从宿主 Receipt 修复 Wait,再原子 claim 并恢复原 Session;问题正文仍进入 resume 上下文。",
163
- "files": [],
164
- "expectations": [
165
- "测试构造 active 到 arming 的崩溃窗口",
166
- "Receipt 自修复后回复恢复原 Session 并 claim Wait",
167
- "恢复上下文保留 waitId、原问题和新 Run claim"
168
- ]
169
- },
170
- {
171
- "id": 16,
172
- "prompt": "精确构造回复 Event 已 claim Wait、但 event ledger 尚未落盘时崩溃,随后被并发 /stop 取消并重放该回复 Event。",
173
- "expected_output": "取消前先从 claimed head 修复 eventId→waitId binding;回复不能回退成新事项,只能进入原 Session、当前 generation 的 cancel/no-op Run,并且只允许 silence。",
174
- "files": [],
175
- "expectations": [
176
- "回复先 claim、stop 后取消并提升 generation",
177
- "回复重放仍绑定原 Session,标记 suppressed 且只允许 silence",
178
- "reply 被行为闸门拒绝,silence 留下本地 Receipt"
179
- ]
180
- },
181
- {
182
- "id": 17,
183
- "prompt": "让一条普通消息和一条 /stop 第一次查询时都没有匹配 Wait;随后同 scope 新建 Wait,再分别重放旧 Event。",
184
- "expected_output": "首次 NO_MATCH 也被 event ledger 固化;旧普通消息不能误消费新 Wait,旧 stop 不能误取消新 Wait。",
185
- "files": [],
186
- "expectations": [
187
- "普通消息与 stop 的首次 Wait 查询都明确未命中",
188
- "旧普通消息重放仍是 start,新建 Wait 保持 active",
189
- "旧 stop 重放仍是 start,新建 Wait 保持 active"
190
- ]
191
- },
192
- {
193
- "id": 18,
194
- "prompt": "用 contextId 初始化 Workspace,把 memory 配成钉钉文档,并让旧 Field 同时声明另一套 DWS 身份。",
195
- "expected_output": "Trigger 与 dispatch 使用 Workspace contextId;远端文档被读取为 Run 快照;Workspace DWS 身份优先;错误 contextId fail closed。",
196
- "files": [],
197
- "expectations": [
198
- "Trigger 与 dispatch 都带 Workspace contextId",
199
- "dingtalk-doc memory 被读取为本 Run Markdown 快照",
200
- "Workspace DWS 身份覆盖旧 Field 配置,错误 contextId 被拒绝"
201
- ]
202
- },
203
- {
204
- "id": 19,
205
- "prompt": "创建一个 Session 后修改 Workspace 中的 Skill,再用 follow-up 产生新 Run,最后开启另一件事。",
206
- "expected_output": "follow-up 回原 Session 并继续旧 Skill 快照;新事项创建新 Session,才采用更新后的 Skill。",
207
- "files": [],
208
- "expectations": [
209
- "follow-up 复用原 Session 但创建新 Run",
210
- "同一 Session 继续使用原 Skill manifest",
211
- "新 Session 才绑定更新后的 Skill"
212
- ]
213
- },
214
- {
215
- "id": 20,
216
- "prompt": "在一个没有 Workspace 的空目录安装全局 Basic Behavior,重复安装,再制造一个同名陌生 Skill。",
217
- "expected_output": "安装不依赖 init;canonical copy 可被 Codex 发现,Claude 使用相对 symlink;重复安装幂等;陌生同名目录绝不覆盖。",
218
- "files": [],
219
- "expectations": [
220
- "空目录可直接安装 canonical Skill",
221
- "重复安装保持 current 且无漂移",
222
- "Claude exposure 是指向 canonical 的相对 symlink",
223
- "同名陌生 Skill 被 fail closed"
224
- ]
225
- },
226
- {
227
- "id": 21,
228
- "prompt": "在未 init 的本地目录放入 WORKSPACE.md、MEMORY.md 与知识索引,然后 bootstrap。",
229
- "expected_output": "以 Direct Session 发现三个本地挂载,不创建 .dingtalk-agent,也不修改项目文件。",
230
- "files": [],
231
- "expectations": [
232
- "bootstrap 在无 init 时进入 direct mode",
233
- "身份、记忆和知识三个语义槽均被发现",
234
- "本地水合不创建隐藏运行目录"
235
- ]
236
- },
237
- {
238
- "id": 22,
239
- "prompt": "在未 init 的目录用 dingtalk-doc Storage bootstrap,并由 fake DWS 返回在线文档。",
240
- "expected_output": "先 probe ALIDOC/adoc,再拉为隐藏只读快照;只创建显式 state-dir cache,不创建 Workspace manifest。",
241
- "files": [],
242
- "expectations": [
243
- "远端 Storage 不要求 Workspace init",
244
- "钉钉文档被拉成可读 Markdown 快照",
245
- "快照有 manifest,但不偷偷创建 Workspace"
246
- ]
247
- },
248
- {
249
- "id": 23,
250
- "prompt": "不传 contextId 执行一次 init,再重复执行。检查项目可见文件和 Skill 声明。",
251
- "expected_output": "contextId 由目录名稳定派生;第二次只检查不重绑;init 不写 AGENTS/CLAUDE/Ontology/Skill;Workspace 按 Skill name 声明。",
252
- "files": [],
253
- "expectations": [
254
- "contextId 不再是 init 的必填参数",
255
- "重复 init 保持 manifest 不变",
256
- "最小 init 不污染项目级 Agent 文件或复制 Skill",
257
- "Workspace 使用裸 Skill name 而非物理路径"
258
- ]
259
- },
260
- {
261
- "id": 24,
262
- "prompt": "安装受管 Skill 后手工修改内容,再尝试 upgrade/uninstall,最后显式放弃本地修改并卸载。",
263
- "expected_output": "status 识别漂移;默认升级和卸载都保护本地修改;显式 discard 后原子修复;卸载只移除受管 canonical 与准确的 Claude exposure。",
264
- "files": [],
265
- "expectations": [
266
- "受管 Skill 的本地漂移可被检测",
267
- "upgrade 默认不覆盖本地修改",
268
- "uninstall 默认不删除本地修改",
269
- "显式 discard 可修复,随后安全卸载 canonical 与 exposure"
270
- ]
271
- },
272
- {
273
- "id": 25,
274
- "prompt": "把一个钉钉在线电子表格节点作为 dingtalk-doc Storage 传给 bootstrap。",
275
- "expected_output": "DWS probe 发现 extension=axls 后 fail closed,不把表格错误投影成 Markdown,也不创建快照。",
276
- "files": [],
277
- "expectations": [
278
- "非 adoc 节点被 Storage 类型闸门拒绝",
279
- "拒绝发生在写快照之前"
280
- ]
281
- },
282
- {
283
- "id": 26,
284
- "prompt": "在普通 Direct Session、没有可信 Run 的目录执行 act reply。",
285
- "expected_output": "找不到冻结 Run 时必须拒绝外发,也不能为了完成动作自动 init 当前目录。",
286
- "files": [],
287
- "expectations": [
288
- "没有 Prepared Run 时 act reply fail closed",
289
- "失败不会偷偷初始化 Workspace"
290
- ]
291
- },
292
- {
293
- "id": 27,
294
- "prompt": "在一个全新 HOME、空 PATH 中通过绝对 Node 路径运行 dingtalk-agent doctor。",
295
- "expected_output": "doctor 不崩溃,分别指出 CLI PATH、DWS 和认证缺失,并给出 npx setup 与 dws auth login 的确定修复命令。",
296
- "files": [],
297
- "expectations": [
298
- "PATH 缺少 CLI 时 doctor 返回 not ready",
299
- "DWS 缺失与认证不可检查被分别报告",
300
- "诊断包含可复制执行的 npx setup 和 DWS 登录步骤"
301
- ]
302
- },
303
- {
304
- "id": 28,
305
- "prompt": "在隔离 HOME 中通过本地 npm 包执行一次 setup,PATH 里只有 npm 与 fake DWS。",
306
- "expected_output": "setup 把 CLI 安装到 ~/.local/bin,幂等写入 shell PATH,安装 canonical Skill,并让 Claude Code、Codex、OpenCode 与 DWS 检查全部 ready。",
307
- "files": [],
308
- "expectations": [
309
- "用户级 CLI 被安装且可执行 --version",
310
- "shell rc 只追加受管的 ~/.local/bin PATH 块",
311
- "canonical Skill 与 Claude exposure 安装成功,三个 Agent 客户端均可发现",
312
- "DWS 版本和认证检查通过,setup 最终 ready"
313
- ]
314
- }
315
- ]
316
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-ambiguous-send-001\",\"timestamp\":1784077380000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-ambiguous-send-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"把这份评价发给他。\"}"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-blocked-001\",\"timestamp\":1783990860000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-blocked-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"请把附件里的数字汇总成一张表。\"}"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-clear-001\",\"timestamp\":1783990800000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-clear-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"2 + 2 等于多少?请直接回答。\"}"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-discussion-001\",\"timestamp\":1784077200000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-discussion-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"我们是不是应该把这批客户反馈整理成一篇钉钉文档?先给我判断利弊和建议,不要创建任何东西。\"}"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-doc-write-001\",\"timestamp\":1784077440000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-doc-write-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"请创建一篇标题为‘登录链路复盘’的钉钉文档,正文写:本周完成验证码链路改造。创建后把结果告诉我。\"}"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-long-task-001\",\"timestamp\":1784077500000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-long-task-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"请调研三家同类产品最新的企业权限设计,引用官网链接,整理成对比表并给建议。这个任务需要查外部资料,完成后回这里;现在只需确认收到。\"}"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-nonblocking-001\",\"timestamp\":1784077320000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-nonblocking-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"根据这些要点给我一版中文周报初稿,缺失数字统一标‘待补’,不用为格式问我:本周完成登录链路改造;修复导出超时;下周推进移动端筛选;风险是灰度数据还没回来。\"}"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "event_corp_id": "tenant-eval",
3
- "data": "{\"type\":\"user_im_message_receive_o2o\",\"event_id\":\"evt-dm-structured-001\",\"timestamp\":1784077260000,\"conversation_id\":\"cid-eval-dm\",\"message_id\":\"mid-dm-structured-001\",\"sender\":\"测试同事\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$tester\",\"content\":\"请把下面三条反馈整理成 Markdown 表格,列为问题、影响、建议,直接在这里给结果:1. 登录验证码偶发收不到,影响新用户注册,建议增加语音兜底;2. 导出报表很慢,影响财务月结,建议异步导出;3. 移动端筛选会重置,影响销售跟进,建议保留筛选状态。\"}"
4
- }
@@ -1,10 +0,0 @@
1
- {
2
- "type": "user_im_message_receive_group",
3
- "event_id": "evt-group-001",
4
- "timestamp": 1783990860000,
5
- "conversation_id": "cid-project-a",
6
- "message_id": "mid-group-001",
7
- "sender": "Bob",
8
- "sender_open_dingtalk_id": "$:LWCP_v1:$bob",
9
- "content": "午饭吃什么?"
10
- }
@@ -1,3 +0,0 @@
1
- {
2
- "data": "{\"type\":\"user_im_message_receive_at\",\"event_id\":\"evt-mentioned-001\",\"timestamp\":1783990800000,\"conversation_id\":\"cid-project-a\",\"message_id\":\"mid-mentioned-001\",\"sender\":\"Alice\",\"sender_open_dingtalk_id\":\"$:LWCP_v1:$alice\",\"content\":\"@Atlas 请把这次讨论整理成三个待办\"}"
3
- }