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

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 (273) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.en.md +397 -0
  3. package/README.md +497 -46
  4. package/dist/bin/dingtalk-agent.js +1162 -340
  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/bootstrap.js +125 -17
  17. package/dist/src/bootstrap.js.map +1 -1
  18. package/dist/src/config.js +1 -7
  19. package/dist/src/config.js.map +1 -1
  20. package/dist/src/development-workspace.js +729 -0
  21. package/dist/src/development-workspace.js.map +1 -0
  22. package/dist/src/doctor.js +18 -7
  23. package/dist/src/doctor.js.map +1 -1
  24. package/dist/src/dws.js +145 -0
  25. package/dist/src/dws.js.map +1 -1
  26. package/dist/src/eval-evidence.js +193 -0
  27. package/dist/src/eval-evidence.js.map +1 -0
  28. package/dist/src/init.js +1 -1
  29. package/dist/src/init.js.map +1 -1
  30. package/dist/src/invocation.js +36 -0
  31. package/dist/src/invocation.js.map +1 -0
  32. package/dist/src/lab.js +679 -0
  33. package/dist/src/lab.js.map +1 -0
  34. package/dist/src/lease.js +100 -0
  35. package/dist/src/lease.js.map +1 -0
  36. package/dist/src/memory/candidates.js +451 -0
  37. package/dist/src/memory/candidates.js.map +1 -0
  38. package/dist/src/memory/completion-evidence.js +536 -0
  39. package/dist/src/memory/completion-evidence.js.map +1 -0
  40. package/dist/src/memory/operational.js +263 -0
  41. package/dist/src/memory/operational.js.map +1 -0
  42. package/dist/src/memory/remote-state.js +478 -0
  43. package/dist/src/memory/remote-state.js.map +1 -0
  44. package/dist/src/memory/task-checkpoints.js +204 -0
  45. package/dist/src/memory/task-checkpoints.js.map +1 -0
  46. package/dist/src/multica-deploy.js +1480 -0
  47. package/dist/src/multica-deploy.js.map +1 -0
  48. package/dist/src/multica-provider.js +685 -0
  49. package/dist/src/multica-provider.js.map +1 -0
  50. package/dist/src/opencode-evals.js +1062 -0
  51. package/dist/src/opencode-evals.js.map +1 -0
  52. package/dist/src/opencode-provider.js +531 -0
  53. package/dist/src/opencode-provider.js.map +1 -0
  54. package/dist/src/opencode-workspace.js +197 -0
  55. package/dist/src/opencode-workspace.js.map +1 -0
  56. package/dist/src/perception.js +225 -0
  57. package/dist/src/perception.js.map +1 -0
  58. package/dist/src/personal-event-evals.js +595 -0
  59. package/dist/src/personal-event-evals.js.map +1 -0
  60. package/dist/src/promotion.js +786 -0
  61. package/dist/src/promotion.js.map +1 -0
  62. package/dist/src/remote-semantic-state-live-evals.js +888 -0
  63. package/dist/src/remote-semantic-state-live-evals.js.map +1 -0
  64. package/dist/src/remote-semantic-state-worker.js +38 -0
  65. package/dist/src/remote-semantic-state-worker.js.map +1 -0
  66. package/dist/src/remote-state-evals.js +501 -0
  67. package/dist/src/remote-state-evals.js.map +1 -0
  68. package/dist/src/response-gate.js +51 -0
  69. package/dist/src/response-gate.js.map +1 -0
  70. package/dist/src/robot-evals.js +770 -0
  71. package/dist/src/robot-evals.js.map +1 -0
  72. package/dist/src/sessions.js +66 -105
  73. package/dist/src/sessions.js.map +1 -1
  74. package/dist/src/setup.js +10 -9
  75. package/dist/src/setup.js.map +1 -1
  76. package/dist/src/skill-manager.js +102 -203
  77. package/dist/src/skill-manager.js.map +1 -1
  78. package/dist/src/skills.js.map +1 -1
  79. package/dist/src/storage-evals.js +26 -0
  80. package/dist/src/storage-evals.js.map +1 -0
  81. package/dist/src/types.js.map +1 -1
  82. package/dist/src/upgrade.js +137 -0
  83. package/dist/src/upgrade.js.map +1 -0
  84. package/dist/src/waits.js +5 -1
  85. package/dist/src/waits.js.map +1 -1
  86. package/dist/src/workspace.js +28 -3
  87. package/dist/src/workspace.js.map +1 -1
  88. package/docs/INSTALLATION.md +118 -13
  89. package/docs/SECOND-AGENT-ACCEPTANCE.md +62 -0
  90. package/docs/architecture/agent-memory-topology.png +0 -0
  91. package/docs/architecture/agent-memory-topology.svg +132 -0
  92. package/docs/architecture/general-agent-kernel-topology.png +0 -0
  93. package/docs/architecture/general-agent-kernel-topology.svg +149 -0
  94. package/docs/architecture/provider-bound-development-workspace.png +0 -0
  95. package/docs/architecture/provider-bound-development-workspace.svg +141 -0
  96. package/docs/architecture/task-completion-gate.png +0 -0
  97. package/docs/architecture/task-completion-gate.svg +191 -0
  98. package/docs/schemas/agent-audit-load-evidence.schema.json +14 -0
  99. package/docs/schemas/agent-audit.schema.json +92 -0
  100. package/docs/schemas/agent-bindings.schema.json +54 -0
  101. package/docs/schemas/agent-definition.schema.json +78 -0
  102. package/docs/schemas/agent-enhancement-plan.schema.json +88 -0
  103. package/docs/schemas/agent-enhancement-receipt.schema.json +37 -0
  104. package/docs/schemas/enriched-invocation.schema.json +46 -0
  105. package/docs/schemas/eval-candidate-plan.schema.json +28 -0
  106. package/docs/schemas/eval-candidate-result.schema.json +20 -0
  107. package/docs/schemas/eval-candidate.schema.json +30 -0
  108. package/docs/schemas/invocation.schema.json +19 -0
  109. package/docs/schemas/memory-candidate-proposal.schema.json +18 -0
  110. package/docs/schemas/memory-candidate.schema.json +76 -0
  111. package/docs/schemas/memory-publish-target.schema.json +25 -0
  112. package/docs/schemas/multica-deployment-list.schema.json +29 -0
  113. package/docs/schemas/multica-deployment-operation.schema.json +51 -0
  114. package/docs/schemas/multica-deployment-plan.schema.json +70 -0
  115. package/docs/schemas/multica-deployment-receipt.schema.json +87 -0
  116. package/docs/schemas/multica-deployment-status.schema.json +23 -0
  117. package/docs/schemas/multica-workspace-inspection.schema.json +77 -0
  118. package/docs/schemas/multica-workspace-plan.schema.json +68 -0
  119. package/docs/schemas/multica-workspace-resource-list.schema.json +27 -0
  120. package/docs/schemas/multica-workspace-status.schema.json +34 -0
  121. package/docs/schemas/observation.schema.json +21 -0
  122. package/docs/schemas/operational-memory-provider.schema.json +36 -0
  123. package/docs/schemas/operational-memory-record.schema.json +24 -0
  124. package/docs/schemas/perception-input.schema.json +56 -0
  125. package/docs/schemas/project.schema.json +112 -0
  126. package/docs/schemas/promotion-list.schema.json +36 -0
  127. package/docs/schemas/promotion-plan.schema.json +60 -0
  128. package/docs/schemas/promotion-policy.schema.json +29 -0
  129. package/docs/schemas/promotion-receipt.schema.json +43 -0
  130. package/docs/schemas/promotion-status.schema.json +23 -0
  131. package/docs/schemas/release-readiness.schema.json +65 -0
  132. package/docs/schemas/remote-semantic-state-live-eval.schema.json +60 -0
  133. package/docs/schemas/remote-semantic-state-manifest.schema.json +79 -0
  134. package/docs/schemas/remote-semantic-state-provider.schema.json +98 -0
  135. package/docs/schemas/response-gate.schema.json +20 -0
  136. package/docs/schemas/task-checkpoint.schema.json +71 -0
  137. package/docs/schemas/task-completion-evidence.schema.json +154 -0
  138. package/docs/schemas/workspace-doctor.schema.json +56 -0
  139. package/docs/schemas/workspace-state.schema.json +39 -0
  140. package/evals/baselines/2026-07-16/opencode-basic-010-completion-summary.json +123 -0
  141. package/evals/baselines/2026-07-16/opencode-basic-skill-required-summary.json +69 -0
  142. package/evals/baselines/2026-07-16/opencode-multi-surface-summary.json +63 -0
  143. package/evals/baselines/2026-07-16/remote-state-live-summary.json +70 -0
  144. package/evals/baselines/2026-07-17/agent-enhance-opencode-dogfood-summary.json +98 -0
  145. package/evals/baselines/2026-07-17/personal-event-live-readiness-summary.json +68 -0
  146. package/examples/agents/fde-coach/AGENTS.md +26 -0
  147. package/examples/agents/fde-coach/MEMORY.md +3 -0
  148. package/examples/agents/fde-coach/fields/default/field.json +24 -0
  149. package/examples/agents/fde-coach/knowledge/INDEX.md +4 -0
  150. package/examples/agents/fde-coach/skills/fde-coach/SKILL.md +13 -0
  151. package/examples/agents/release-manager/AGENTS.md +26 -0
  152. package/examples/agents/release-manager/MEMORY.md +3 -0
  153. package/examples/agents/release-manager/fields/default/field.json +24 -0
  154. package/examples/agents/release-manager/knowledge/INDEX.md +4 -0
  155. package/examples/agents/release-manager/skills/release-manager/SKILL.md +13 -0
  156. package/lab/README.md +109 -0
  157. package/lab/agent-eval/catalog.json +91 -0
  158. package/lab/agent-eval/classic-failures.json +177 -0
  159. package/lab/agent-eval/completion-gate-regression.json +99 -0
  160. package/lab/agent-eval/personal-event-live.example.json +94 -0
  161. package/lab/agent-eval/remote-semantic-state-live.example.json +70 -0
  162. package/lab/agent-eval/remote-semantic-state-provider.fixture.json +47 -0
  163. package/lab/agent-eval/remote-state-workspace/AGENTS.md +8 -0
  164. package/lab/agent-eval/remote-state-workspace/opencode.json +7 -0
  165. package/lab/agent-eval/remote-state-workspace/skills/remote-state-operator/SKILL.md +13 -0
  166. package/lab/agent-eval/remote-state.example.json +31 -0
  167. package/lab/agent-eval/workspace/AGENTS.md +7 -0
  168. package/lab/agent-eval/workspace/MEMORY.md +4 -0
  169. package/lab/agent-eval/workspace/artifacts/pending-review.md +3 -0
  170. package/lab/agent-eval/workspace/knowledge/INDEX.md +4 -0
  171. package/lab/agent-eval/workspace/opencode.json +20 -0
  172. package/lab/manifest.example.json +27 -0
  173. package/lab/manifest.personal-event.example.json +27 -0
  174. package/lab/project-workspace/README.md +11 -0
  175. package/lab/project-workspace/fake-multica-provider.mjs +266 -0
  176. package/lab/project-workspace/multica-deploy.fixture.json +29 -0
  177. package/lab/project-workspace/multica-readonly.fixture.json +69 -0
  178. package/lab/project-workspace/observation.fixture.json +14 -0
  179. package/lab/project-workspace/opencode-provider-suite.json +65 -0
  180. package/lab/project-workspace/project.fixture.json +44 -0
  181. package/lab/project-workspace/promotion-policy.fixture.json +15 -0
  182. package/lab/robot-eval/pool.example.json +30 -0
  183. package/lab/robot-eval/suite.json +123 -0
  184. package/lab/robot-eval/workspace/AGENTS.md +21 -0
  185. package/lab/robot-eval/workspace/MEMORY.md +3 -0
  186. package/lab/robot-eval/workspace/knowledge/INDEX.md +5 -0
  187. package/lab/robot-eval/workspace/opencode.json +22 -0
  188. package/lab/schemas/agent-eval-catalog.schema.json +47 -0
  189. package/lab/schemas/lab-manifest.schema.json +70 -0
  190. package/lab/schemas/personal-event-eval.schema.json +91 -0
  191. package/lab/schemas/remote-state-eval.schema.json +66 -0
  192. package/lab/schemas/robot-eval-suite.schema.json +184 -0
  193. package/lab/schemas/robot-pool.schema.json +56 -0
  194. package/package.json +26 -14
  195. package/skills/dingtalk-agent-boot-multica/SKILL.md +40 -0
  196. package/skills/dingtalk-agent-compose/SKILL.md +110 -0
  197. package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +26 -0
  198. package/skills/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +13 -0
  199. package/skills/dingtalk-agent-compose/assets/agent.bindings.local.template.json +13 -0
  200. package/skills/dingtalk-agent-compose/assets/opencode.template.json +12 -0
  201. package/skills/dingtalk-agent-compose/assets/role-skill.template.md +24 -0
  202. package/skills/dingtalk-agent-compose/evals/evals.json +94 -0
  203. package/skills/dingtalk-agent-compose/references/agent-definition-contract.md +55 -0
  204. package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +65 -0
  205. package/skills/dingtalk-agent-compose/references/storage-routing.md +20 -0
  206. package/skills/dingtalk-agent-deploy/SKILL.md +60 -0
  207. package/skills/dingtalk-agent-deploy/references/multica-deployment-contract.md +49 -0
  208. package/skills/dingtalk-agent-deploy/references/promotion-observation-contract.md +49 -0
  209. package/skills/dingtalk-agent-eval/SKILL.md +116 -0
  210. package/skills/dingtalk-agent-eval/assets/eval-catalog.template.json +18 -0
  211. package/skills/dingtalk-agent-eval/evals/evals.json +61 -0
  212. package/skills/dingtalk-agent-eval/references/eval-topology.md +34 -0
  213. package/skills/dingtalk-agent-eval/references/evidence-contract.md +31 -0
  214. package/skills/dingtalk-agent-eval/references/scenario-taxonomy.md +25 -0
  215. package/skills/dingtalk-agent-eval/references/storage-modes.md +75 -0
  216. package/skills/dingtalk-basic-behavior/SKILL.md +63 -3
  217. package/skills/dingtalk-basic-behavior/assets/memory-candidate-proposal.json +10 -0
  218. package/skills/dingtalk-basic-behavior/assets/{task-checkpoint.md → task-checkpoint.json} +2 -21
  219. package/skills/dingtalk-basic-behavior/references/action-contract.md +2 -0
  220. package/skills/dingtalk-basic-behavior/references/memory-and-evolution.md +15 -1
  221. package/skills/dingtalk-basic-behavior/references/perception-and-gates.md +28 -0
  222. package/skills/dingtalk-basic-behavior/references/task-lifecycle.md +32 -7
  223. package/dist/src/boot.js +0 -70
  224. package/dist/src/boot.js.map +0 -1
  225. package/dist/src/duty.js +0 -74
  226. package/dist/src/duty.js.map +0 -1
  227. package/dist/src/kb.js +0 -240
  228. package/dist/src/kb.js.map +0 -1
  229. package/dist/src/runs.js +0 -79
  230. package/dist/src/runs.js.map +0 -1
  231. package/docs/ARCHITECTURE.md +0 -217
  232. package/docs/MINIMAL-WORKSPACE-V1.md +0 -172
  233. package/docs/OPEN-SOURCE-REFERENCES.md +0 -107
  234. package/docs/SELF-TEST.md +0 -252
  235. package/docs//345/206/205/347/275/221/345/256/236/347/233/270.md +0 -77
  236. package/evals/baselines/2026-07-14/behavior-summary.json +0 -28
  237. package/evals/baselines/2026-07-14/contract-summary.json +0 -18
  238. package/evals/baselines/2026-07-14/live-canary-summary.json +0 -25
  239. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/SKILL.md +0 -72
  240. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/action-contract.md +0 -31
  241. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/event-to-behavior.md +0 -22
  242. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/memory-and-evolution.md +0 -25
  243. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/runtime-modes.md +0 -34
  244. package/evals/baselines/2026-07-15/task-lifecycle-summary.json +0 -50
  245. package/evals/evals.json +0 -316
  246. package/evals/fixtures/dm-ambiguous-send.json +0 -4
  247. package/evals/fixtures/dm-blocked.json +0 -4
  248. package/evals/fixtures/dm-clear.json +0 -4
  249. package/evals/fixtures/dm-discussion.json +0 -4
  250. package/evals/fixtures/dm-doc-write-no-tool.json +0 -4
  251. package/evals/fixtures/dm-long-task-ack.json +0 -4
  252. package/evals/fixtures/dm-nonblocking-gap.json +0 -4
  253. package/evals/fixtures/dm-structured-task.json +0 -4
  254. package/evals/fixtures/group.json +0 -10
  255. package/evals/fixtures/mentioned.json +0 -3
  256. package/evals/run-contract-evals.mjs +0 -1106
  257. package/evals/run-shadow-evals.mjs +0 -267
  258. package/evals/runners/README.md +0 -66
  259. package/evals/runners/claude-shadow.mjs +0 -533
  260. package/evals/schemas/action-request.schema.json +0 -77
  261. package/evals/shadow-evals.json +0 -133
  262. package/skills/AGENTS.md +0 -104
  263. package/skills//344/273/273/345/212/241.md +0 -48
  264. package/skills//345/237/272/347/241/200/350/241/214/344/270/272.md +0 -44
  265. package/skills//345/277/203/350/267/263.md +0 -79
  266. package/skills//346/266/210/346/201/257.md +0 -50
  267. package/skills//347/237/245/350/257/206.md +0 -55
  268. package/skills//350/257/204/346/265/213.md +0 -62
  269. package/skills//351/222/211/351/222/211.md +0 -64
  270. package/templates/ontology/index.md +0 -24
  271. package/templates/ontology/self/access.md +0 -38
  272. package/templates/ontology/self/role-spec.md +0 -34
  273. package/templates/ontology/self/workspace.md +0 -41
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "dingtalk-agent/remote-state-live-summary@1",
3
+ "date": "2026-07-16",
4
+ "privacy": "sanitized; document, user, tenant, profile, session, and credential identifiers omitted",
5
+ "result": "passed",
6
+ "engine": {
7
+ "host": "opencode",
8
+ "version": "1.17.14",
9
+ "model": "deepseek/deepseek-chat",
10
+ "tools": []
11
+ },
12
+ "definition": {
13
+ "source": "local-folder",
14
+ "body": "AGENTS.md",
15
+ "requiredRoleSkills": ["remote-state-operator"],
16
+ "status": "ready",
17
+ "basicSkill": {
18
+ "name": "dingtalk-basic-behavior",
19
+ "version": "0.9.4",
20
+ "forcedInstructionVerified": true
21
+ }
22
+ },
23
+ "semanticState": {
24
+ "provider": "dingtalk-doc",
25
+ "documents": 2,
26
+ "slots": ["memory", "knowledge"],
27
+ "documentTypes": ["ALIDOC/adoc", "ALIDOC/adoc"],
28
+ "identityMatched": true,
29
+ "remoteMountCacheManifestHashesMatched": true,
30
+ "snapshotsRetainedInIgnoredEvidence": true
31
+ },
32
+ "writeProbe": {
33
+ "dedicatedSyntheticDocument": true,
34
+ "mode": "append",
35
+ "attempts": 2,
36
+ "persistentMarkersAfterDiagnosis": 2,
37
+ "acceptedRunSemanticMarkerCount": 1,
38
+ "verification": "independent full-document readback",
39
+ "diagnosticHistory": {
40
+ "initialEvaluatorResult": "false negative",
41
+ "remoteWriteActuallyVisible": true,
42
+ "cause": "DingTalk Markdown readback escaped underscores and the closing bracket in the marker",
43
+ "fix": "count the unique marker in the normalized text stream instead of serialized Markdown bytes",
44
+ "blindRetryUsed": false
45
+ }
46
+ },
47
+ "modelProbe": {
48
+ "remoteOnlyValues": 2,
49
+ "valuesPresentInPromptOrLocalDefinition": false,
50
+ "exactAttribution": true,
51
+ "allValuesReturned": true,
52
+ "toolCalls": 0,
53
+ "sessionDirectoryMatched": true
54
+ },
55
+ "deterministicFailureGates": {
56
+ "wrongDwsIdentityRejected": true,
57
+ "nonAdocRejected": true,
58
+ "postBootstrapRemoteDriftRejected": true,
59
+ "sameDocumentMultipleSlotsKeepIndependentManifests": true
60
+ },
61
+ "controlState": {
62
+ "provider": "local atomic host store",
63
+ "storedInRemoteMarkdown": false
64
+ },
65
+ "limitations": [
66
+ "This is a single development canary, not a statistical model benchmark.",
67
+ "The two dedicated synthetic documents and their diagnostic markers remain on DingTalk; no delete authority was inferred.",
68
+ "This evaluates semantic memory and knowledge mounts, not event triggering or a production message egress."
69
+ ]
70
+ }
@@ -0,0 +1,98 @@
1
+ {
2
+ "$schema": "dingtalk-agent/agent-enhance-opencode-dogfood-summary@1",
3
+ "recordedAt": "2026-07-17",
4
+ "phase": "phase-16",
5
+ "testedSourceCommit": "f5e79feb4f1974a3c633496df8fcd6e064788d9b",
6
+ "sourceAgent": "examples/agents/release-manager",
7
+ "runtime": {
8
+ "host": "opencode",
9
+ "hostVersion": "1.17.14",
10
+ "model": "deepseek/deepseek-chat",
11
+ "basicSkill": {
12
+ "name": "dingtalk-basic-behavior",
13
+ "version": "0.10.0",
14
+ "sha256": "7414a0acb19bd19f75e90dc574895e250c75f3ac5ab4508e633e6670af4946a6"
15
+ }
16
+ },
17
+ "enhancement": {
18
+ "planReady": true,
19
+ "planSideEffect": false,
20
+ "planDingtalkSideEffect": false,
21
+ "semanticReviewRequired": false,
22
+ "applied": true,
23
+ "applySideEffect": "local-files-only",
24
+ "changedOperations": 8,
25
+ "hashReadbackPassed": true
26
+ },
27
+ "audit": {
28
+ "definitionHash": "859bb0c35fac9f2561034f21ec894d4ba17e4cf8a4aa567bc6f0496cbd75981b",
29
+ "beforeLoad": {
30
+ "status": "partial",
31
+ "missing": [
32
+ "host.load-probe"
33
+ ]
34
+ },
35
+ "afterLoad": {
36
+ "status": "ready",
37
+ "ready": true,
38
+ "missing": [],
39
+ "loadEvidenceBoundToCurrentDefinition": true,
40
+ "dingtalkSideEffect": false
41
+ }
42
+ },
43
+ "loadProbe": {
44
+ "withSkill": {
45
+ "passed": "1/1",
46
+ "exactRandomProbe": true,
47
+ "sourceHashMatched": true,
48
+ "noTools": true,
49
+ "isolatedSessionDirectory": true
50
+ },
51
+ "withoutSkill": {
52
+ "passed": "1/1",
53
+ "didNotGuessRandomProbe": true,
54
+ "noTools": true,
55
+ "isolatedSessionDirectory": true
56
+ },
57
+ "loadGate": true,
58
+ "hardGate": true
59
+ },
60
+ "behaviorSmoke": {
61
+ "case": "direct-colleague",
62
+ "withSkill": "1/1",
63
+ "withoutSkill": "1/1",
64
+ "falseCompletions": 0,
65
+ "effectivenessProven": false
66
+ },
67
+ "usage": {
68
+ "modelCalls": 4,
69
+ "totalTokens": 15687,
70
+ "inputTokens": 4922,
71
+ "outputTokens": 141,
72
+ "cacheReadTokens": 10624,
73
+ "reportedCost": 0.0007583072,
74
+ "summedDurationMs": 34235
75
+ },
76
+ "sideEffects": {
77
+ "realDwsCalls": 0,
78
+ "realMessages": 0,
79
+ "robotsStarted": 0,
80
+ "documentsWritten": 0,
81
+ "triggersCreated": 0,
82
+ "multicaCalls": 0
83
+ },
84
+ "rawEvidence": {
85
+ "committed": false,
86
+ "containsSessionDirectories": true,
87
+ "containsSessionIds": true,
88
+ "retention": "local temporary directory only"
89
+ },
90
+ "notProven": [
91
+ "stable behavior-quality improvement",
92
+ "domain-task correctness beyond the one smoke case",
93
+ "real DingTalk or DWS behavior",
94
+ "Multica compatibility",
95
+ "production identity, permission, event, or Trigger behavior",
96
+ "npm publication or public release readiness"
97
+ ]
98
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "$schema": "dingtalk-agent/personal-event-live-readiness-summary@1",
3
+ "recordedAt": "2026-07-17",
4
+ "phase": "phase-9",
5
+ "contractEval": 59,
6
+ "mode": "fake-dws",
7
+ "realDingTalkLive": false,
8
+ "eventAdapterOwnedByRunner": false,
9
+ "suite": {
10
+ "schema": "dingtalk-agent/personal-event-eval@1",
11
+ "cases": 8,
12
+ "physicalRuns": 7,
13
+ "newOutwardEffects": 5,
14
+ "passed": true
15
+ },
16
+ "gates": {
17
+ "defaultPlanHasNoDwsSideEffect": true,
18
+ "liveAuthorizationFailClosed": true,
19
+ "dwsIdentityVerified": true,
20
+ "definitionAndBasicRoleSkillsFrozen": true,
21
+ "responseGateVerified": true,
22
+ "messageIdAndExactBodyReadback": true,
23
+ "rewrittenBodyRejected": true,
24
+ "duplicateHasNoNewEffect": true,
25
+ "waitResumeAndCancelVerified": true,
26
+ "quoteBurstIdentityVerified": true,
27
+ "allPhysicalRunsTornDown": true
28
+ },
29
+ "scenarios": [
30
+ "mention-reply",
31
+ "ambient-silence",
32
+ "duplicate-event",
33
+ "ask-seed",
34
+ "ask-continuation",
35
+ "stop-seed",
36
+ "correction-stop",
37
+ "quote-burst-identity"
38
+ ],
39
+ "evidenceSurfaces": [
40
+ "agent-definition",
41
+ "skill-manifest",
42
+ "invocation",
43
+ "perception",
44
+ "response-gate",
45
+ "resume",
46
+ "intent",
47
+ "attempt",
48
+ "transport-result",
49
+ "receipt",
50
+ "platform-readback",
51
+ "teardown"
52
+ ],
53
+ "sideEffects": {
54
+ "realDwsCalls": 0,
55
+ "realMessages": 0,
56
+ "robotsStarted": 0,
57
+ "documentsWritten": 0,
58
+ "triggersCreated": 0
59
+ },
60
+ "notProven": [
61
+ "real personal-event delivery",
62
+ "real DingTalk message readback",
63
+ "long-running external event adapter reliability",
64
+ "model expression quality",
65
+ "human acceptance",
66
+ "production identities or conversations"
67
+ ]
68
+ }
@@ -0,0 +1,26 @@
1
+ # FDE 教练 Agent
2
+
3
+ ## 身份与服务对象
4
+
5
+ - 我是:FDE 成长教练。
6
+ - 服务:参与 FDE 评价与成长反馈的同事。
7
+ - 目标:把事实证据整理成清晰、可确认、可追踪的成长反馈。
8
+
9
+ ## 职责
10
+
11
+ - Owns:收集评价证据、形成草稿、发起本人确认、记录改进项。
12
+ - Delivers:结构化评价草稿、确认状态、下一阶段建议。
13
+ - Refuses:未经本人确认不对外发布评价;不替代主管作绩效结论。
14
+
15
+ ## 协作与能力
16
+
17
+ - 使用 `fde-coach` Role Skill 执行评价方法。
18
+ - 基础消息、任务、记忆和安全边界遵循 `dingtalk-basic-behavior`。
19
+ - 外部副作用前核对对象、权限和完成标准。
20
+
21
+ ## 存储边界
22
+
23
+ - 当前事项:Session Task Checkpoint。
24
+ - 互动摘要:显式配置的 Operational Memory Provider。
25
+ - 长期方法:候选评审后发布到 Knowledge/Git。
26
+ - 不在本文保存 Wait、锁、幂等键或 Receipt。
@@ -0,0 +1,3 @@
1
+ # FDE Coach Memory
2
+
3
+ 这里只接收经过来源核验和离线评审的长期语义候选,不保存当前评价进度。
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "dingtalk-agent/field@1",
3
+ "id": "default",
4
+ "name": "FDE 教练测试场域",
5
+ "description": "仅绑定专用 FDE 测试会话;真实 ID 由部署者替换。",
6
+ "match": {
7
+ "tenantIds": ["tenant-agent-kit-eval"],
8
+ "conversationIds": ["cid-fde-agent-kit"],
9
+ "actorIds": [],
10
+ "eventKinds": ["im.message.mentioned", "im.message.dm"]
11
+ },
12
+ "transport": {
13
+ "mode": "personal-event",
14
+ "egressOwner": "dingtalk-agent"
15
+ },
16
+ "behavior": {
17
+ "packs": ["behaviors/basic.json"]
18
+ },
19
+ "evolution": {
20
+ "mode": "proposal",
21
+ "autoModify": ["working-memory", "task-state", "skill-candidate"],
22
+ "requiresReview": ["enabled-skill", "identity", "behavior", "permission", "dws-profile"]
23
+ }
24
+ }
@@ -0,0 +1,4 @@
1
+ # FDE Coach Knowledge
2
+
3
+ - 评价证据应可追溯到明确事件、文档或本人确认。
4
+ - 评价草稿与最终发布是不同状态。
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: fde-coach
3
+ description: 当 FDE 教练需要收集事实证据、形成成长评价草稿、向本人确认或整理改进建议时使用;不负责通用钉钉消息行为,也不替代主管做绩效结论。
4
+ metadata:
5
+ version: "0.1.0"
6
+ ---
7
+
8
+ # FDE 教练
9
+
10
+ 1. 先区分事实证据、观察、推断和建议;没有来源的判断不写成事实。
11
+ 2. 草稿至少包含证据、做得好的地方、可改进点和下一步建议。
12
+ 3. 对外发布前取得被评价人的明确确认;有修订时保留差异和确认状态。
13
+ 4. 互动摘要进入业务事实源,当前进度进入 Task Checkpoint,稳定方法只提 Memory Candidate。
@@ -0,0 +1,26 @@
1
+ # 发布经理 Agent
2
+
3
+ ## 身份与服务对象
4
+
5
+ - 我是:软件发布经理。
6
+ - 服务:研发、测试和业务发布责任人。
7
+ - 目标:让每次发布有明确范围、风险、门禁、回滚条件和可验证结果。
8
+
9
+ ## 职责
10
+
11
+ - Owns:发布清单、依赖检查、Go/No-Go 信息汇总和发布后核验。
12
+ - Delivers:发布计划、门禁状态、风险与回滚摘要。
13
+ - Refuses:不绕过审批,不在缺少版本/环境/责任人时执行真实发布。
14
+
15
+ ## 协作与能力
16
+
17
+ - 使用 `release-manager` Role Skill 执行发布方法。
18
+ - 基础消息、任务、记忆和安全边界遵循 `dingtalk-basic-behavior`。
19
+ - 外部发布动作必须使用岗位显式授权的工具,不把讨论当执行授权。
20
+
21
+ ## 存储边界
22
+
23
+ - 当前发布:Session Task Checkpoint。
24
+ - 发布状态:显式业务事实源。
25
+ - Runbook:候选评审后发布到 Knowledge/Git。
26
+ - 不在本文保存 Wait、锁、幂等键或 Receipt。
@@ -0,0 +1,3 @@
1
+ # Release Manager Memory
2
+
3
+ 这里只接收经过来源核验和离线评审的长期发布经验,不保存某次发布的实时状态。
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "dingtalk-agent/field@1",
3
+ "id": "default",
4
+ "name": "发布经理测试场域",
5
+ "description": "仅绑定专用发布测试会话;真实 ID 由部署者替换。",
6
+ "match": {
7
+ "tenantIds": ["tenant-agent-kit-eval"],
8
+ "conversationIds": ["cid-release-agent-kit"],
9
+ "actorIds": [],
10
+ "eventKinds": ["im.message.mentioned", "im.message.dm"]
11
+ },
12
+ "transport": {
13
+ "mode": "personal-event",
14
+ "egressOwner": "dingtalk-agent"
15
+ },
16
+ "behavior": {
17
+ "packs": ["behaviors/basic.json"]
18
+ },
19
+ "evolution": {
20
+ "mode": "proposal",
21
+ "autoModify": ["working-memory", "task-state", "skill-candidate"],
22
+ "requiresReview": ["enabled-skill", "identity", "behavior", "permission", "dws-profile"]
23
+ }
24
+ }
@@ -0,0 +1,4 @@
1
+ # Release Manager Knowledge
2
+
3
+ - Go/No-Go 必须基于明确版本、环境、门禁与责任人。
4
+ - 发布命令成功不等于业务验收完成,必须执行发布后回读。
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: release-manager
3
+ description: 当发布经理需要制定发布计划、核对 Go/No-Go 门禁、汇总风险/责任人、定义回滚条件或完成发布后核验时使用;不负责通用消息行为,也不把讨论自动升级为真实发布授权。
4
+ metadata:
5
+ version: "0.1.0"
6
+ ---
7
+
8
+ # 发布经理
9
+
10
+ 1. 建立版本、环境、窗口、责任人、依赖、门禁、回滚触发器和完成条件。
11
+ 2. 缺版本、环境或不可逆动作授权时只问一个阻塞问题,不猜测目标。
12
+ 3. Go/No-Go 摘要分开列出已通过、未通过、未知和明确风险。
13
+ 4. 发布后按平台实态回读;当前进度进入 Task Checkpoint,稳定 Runbook 改进只提 Memory Candidate。
package/lab/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # dingtalk-agent Lab
2
+
3
+ Lab 是测试控制面,不是事件触发器或新的业务 Action 层。它固定测试对象、单一出口、写预算、marker、证据目录和 teardown;Prepared 模式仍走真实 `prepare → Action Gate → DWS → Receipt`。
4
+
5
+ ## 1. Mock integration(默认无真实副作用)
6
+
7
+ 复制 [`manifest.example.json`](manifest.example.json) 为 `manifest.local.json`,把 Workspace Definition 的 `dws.profile/expectedUserId` 与 manifest 对齐,再由测试宿主把 fake `dws` 放到 PATH:
8
+
9
+ ```bash
10
+ export DTA_LAB_FAKE_DWS=1
11
+ export DTA_LAB_FAKE_DWS_PATH=/absolute/path/to/test-bin/dws
12
+ dta lab doctor --manifest lab/manifest.local.json
13
+ dta lab run --manifest lab/manifest.local.json \
14
+ --event-file evals/fixtures/mentioned.json --case-id mention-reply \
15
+ --reply '收到,Lab 已完成回读。'
16
+ ```
17
+
18
+ `DTA_LAB_FAKE_DWS=1`、绝对 `DTA_LAB_FAKE_DWS_PATH`、PATH 中实际解析出的可执行文件,以及同路径内容为 `dingtalk-agent/fake-dws@1` 的 `.dta-fake` 标记必须同时吻合,防止名为 mock 的任务误用真实 DWS。
19
+
20
+ ## 2. 可复用 Robot Pool 行为评测
21
+
22
+ 复制 [`robot-eval/pool.example.json`](robot-eval/pool.example.json) 到 `.dingtalk-agent/robot-pool.local.json`,只在本地填写 DWS 回读得到的 `unifiedAppId`、`robotClientId`、`botOpenDingTalkId`、当前测试者 `expectedUserId`。不要提交本地 Pool,不保存或传递机器人 Secret;Live 槽位必须能由 `unifiedAppId` 通过 DWS credential store 取凭证。
23
+
24
+ 一个 Pool 最多三个槽位,每个 lane 恰好一个机器人:
25
+
26
+ | lane | 用途 | 典型配置 |
27
+ |---|---|---|
28
+ | `stateless` | 默认员工、直接完成、澄清、目标门禁、记忆路由 | `agentMemory=false` |
29
+ | `stateful` | 同一 connector 的连续对话恢复 | `agentMemory=true` |
30
+ | `role` | 叠加岗位 Definition / Role Skill | 独立 workspace template |
31
+
32
+ Robot Eval 是一种便于快速调试、也减少对单一生产事件格式过拟合的入口:把角色定义和 Role Skills 绑定到一个 Workspace,再通过真实机器人验证它是否像该角色的同事一样工作。它不把“机器人身份”写成 Agent 本体,也不假设未来只能由机器人触发;同一 Workspace 之后可以接 personal-event 或标准化 Brain/Agent Host。
33
+
34
+ Pool 中的 `expectedUserId` 只作为 connector 的 `--allowed-users`,表示允许哪个测试者给机器人发消息;它不是 OpenCode 沙箱里的 DWS 执行身份。当前 Robot Eval 不向 OpenCode 暴露 DWS 工具,因此不证明固定/跟随聊天者的执行身份、动态绑定、委托授权链或完整事件 envelope。角色身份、委托方和执行身份必须在后续 personal-event/Broker 评测中分别审计。
35
+
36
+ ```bash
37
+ # 默认 dry-run:只校验前缀、ID、lane、模型、预算和 case 分配
38
+ dta lab eval \
39
+ --pool .dingtalk-agent/robot-pool.local.json \
40
+ --suite lab/robot-eval/suite.json --lanes stateless --json
41
+
42
+ # 真实启动、发题、平台回读、评分、精确停止
43
+ dta lab eval \
44
+ --pool .dingtalk-agent/robot-pool.local.json \
45
+ --suite lab/robot-eval/suite.json --lanes stateless \
46
+ --live --yes --json
47
+ ```
48
+
49
+ Live 固定 `opencode + deepseek/*`,把当前仓库的 Basic Behavior 复制进每次新建的隔离工作区,并合并 `opencode.json#instructions` 强制加载。发送任何消息前,OpenCode preflight 必须验证 resolved instruction、项目内 Skill 路径、name/version/hash;默认 suite 的首题再精确回显版本。所有需要的 connector 必须在发题前 healthy;每题使用唯一 `[DTA-EVAL-...]` marker 和 UUID;报告分别记录发送、平台可见、自动判分与待人工复核。teardown 只停止本 Run 启动的 `robotClientId`,并以随后状态回读 `not_running` 为完成条件,不能把 stop 命令的一行文本当成成功证据。
50
+
51
+ Robot Live 前先跑 OpenCode 本地 A/B。它给每个 with-skill 快照加入随机 load probe,baseline 移除 Basic 正文;两边使用同一 body/模型/题集、关闭所有工具,并由 Session export 核验实际工作目录。命令见仓库 README 的“真实世界联调”。
52
+
53
+ 更完整的本地开发回归使用 [`agent-eval/classic-failures.json`](agent-eval/classic-failures.json) 与独立 [`agent-eval/workspace`](agent-eval/workspace)。场景按七类 catalog 组织,不混进默认 Robot Pool;可用 `--cases` 精确选择。普通 case 仍为零工具,产物 case 只开放仓库外系统临时目录中的 `read/write/edit`,并审计规范化工具路径,再以回复、文件、Workspace Definition、manifest/hash 和禁止路径联合验收。该 suite 含 `opencode-only` case,不能误用 Robot Live 执行。
54
+
55
+ 本地本体 + 钉钉文档状态使用 [`agent-eval/remote-state.example.json`](agent-eval/remote-state.example.json) 和 [`agent-eval/remote-state-workspace`](agent-eval/remote-state-workspace)。复制 example 到被忽略的 `.dingtalk-agent/remote-state.local.json`,只填专用测试 profile、回读 userId 和两篇已知 node;不要从标题搜索猜文档。`storage` engine 会隔离复制本地 Definition、由 compose 物化并强制加载 Basic Skill、把远端 memory/knowledge 拉到 slot 独立 cache,再以 DWS 二次全文回读和 OpenCode 零工具探针验收。`--live` 只允许一个 `writeProbe`,不删除文档。
56
+
57
+ 证据位于 `.dingtalk-agent/robot-eval-results/<run-id>/`,不会提交 Git。2026-07-16 的旧真实基线观测到 6/6 stateless 平台回复,其中 5/6 保持精确 marker 并通过;但该记录早于 `instructions + preflight + load probe` 门禁,只能证明当时的 connector 收发与回收,不能作为当前 Basic Skill 已加载的验收证据。README 不再人工补写报告中不存在的字段;当前结论以对应 Run 的 `report.json` 为准。
58
+
59
+ ## 3. Robot smoke / personal-event canary
60
+
61
+ 把 mode 改成 `robot-connect` 或 `personal-event`,使用专用测试机器人、测试同事/群、独立 DWS profile 和合成数据。任何真实执行必须同时传:
62
+
63
+ ```bash
64
+ --live --yes
65
+ ```
66
+
67
+ personal-event 的入站消息本身必须带 `[DTA-LAB-<case>-<uuid>]` marker,且 tenant、conversation、actor 全部命中 allowlist。robot-connect 必须声明唯一出口 `connector`;personal-event 必须声明 `dingtalk-agent`。完整 L4 使用 [`personal-event-eval@1`](schemas/personal-event-eval.schema.json);单次 `lab run` 只用于诊断,不可替代 suite 的 duplicate、Wait 和 teardown 聚合门禁。
68
+
69
+ ### L4 开始前必须具备的输入
70
+
71
+ 复制 [`manifest.personal-event.example.json`](manifest.personal-event.example.json) 和 [`agent-eval/personal-event-live.example.json`](agent-eval/personal-event-live.example.json) 到**专用 Agent Workspace** 的本地文件,设置 suite 的 `liveAuthorized=no`,填好并人工复核全部资源后才改成 `yes`。真实 ID、事件和 perception 输入不得提交 Git。启动前需要:
72
+
73
+ - 一个专用测试同事或群,明确 `tenantId`、不可变 `conversationId`、测试者 actor ID;
74
+ - 一个独立 DWS profile 及其 `expectedUserId`,且与 Workspace Definition、Field 完全一致;
75
+ - 一份由外部 personal-event Adapter 捕获的完整原始 event JSON;触发消息由测试者主动发送,并在正文带唯一 `[DTA-LAB-...]` marker;
76
+ - Field transport 固定为 `personal-event + dingtalk-agent`,禁止 connector 同时拥有出口;
77
+ - 每个物理 Run 的 manifest 预算仍为 `maxOutwardActions=1`;suite 另行精确汇总新增外发总预算,不创建文档、待办或其它资源;
78
+ - 用户对这一个专用对象和这一次 case 的明确 Live 授权。`--live --yes` 只是 CLI 二次确认,不替代授权本身。
79
+
80
+ 先确保 `dta doctor` 没有 Skill 版本告警,再执行默认零副作用计划:
81
+
82
+ ```bash
83
+ dta lab doctor --manifest lab/manifest.local.json --json
84
+ dta lab eval --engine personal-event \
85
+ --workspace . \
86
+ --suite .dingtalk-agent/personal-event-live.local.json --json
87
+
88
+ # 只有 plan ready、suite liveAuthorized=yes 且用户再次授权后
89
+ dta lab eval --engine personal-event \
90
+ --workspace . \
91
+ --suite .dingtalk-agent/personal-event-live.local.json \
92
+ --execute --live --yes --json
93
+ ```
94
+
95
+ 完整 L4 通过标准:8 类 case 全部通过;Definition 同时包含 Basic 与 Role Skill;每次 reply/ask 的 Receipt 为 confirmed,按返回的同一 messageId 独立回读精确正文和唯一 marker;duplicate 复用同一 Run/Action/Attempt 且新增外发为 0;continuation/cancel 回到原 Session 的新 Run;ambient/silence 没有 transport;所有物理 Run 的 teardown 均通过且没有 Lab 持有的 connector。真实消息不会自动删除,测试群/同事必须接受带 marker 的合成消息留存。
96
+
97
+ AI 表格 Operational Memory 与钉钉文档候选发布是后续独立 canary:还要分别提供专用 base/table/fieldId 和专用 adoc node,并单独授权,不能借 mention-reply 的消息授权扩大到其它产品写入。
98
+
99
+ ## 4. 证据与清理
100
+
101
+ ```bash
102
+ dta lab verify --evidence .dingtalk-agent/lab-results/<run-id>
103
+ dta lab teardown --manifest lab/manifest.local.json \
104
+ --evidence .dingtalk-agent/lab-results/<run-id>
105
+ ```
106
+
107
+ 证据包含 event、Invocation、Definition/Skill manifest、Response Gate、resume、Intent、Attempt、transport result、Receipt、平台回读、断言和 teardown。`engine=pass`、`platform=visible`、`userFeedback=not-collected` 分开记录;不能把命令成功写成用户认可。失败 Run 也必须保留 `failure.json` 和已经产生的 journal,不能只留下模型或 runner 的一句报错。
108
+
109
+ `manifest.local.json` 和 `.dingtalk-agent/lab-results/` 不提交 Git。仓库只保留 schema、example 和脱敏基线。
@@ -0,0 +1,91 @@
1
+ {
2
+ "$schema": "dingtalk-agent/eval-catalog@1",
3
+ "id": "dingtalk-agent-core",
4
+ "description": "Stable scenario taxonomy for local, model, robot, and remote-state evaluations.",
5
+ "scenarioGroups": [
6
+ {
7
+ "id": "host-loading",
8
+ "title": "Host 与 Skill 真实加载",
9
+ "why": "目录存在或答案正确都不能证明 Basic Skill 正文进入了当前上下文。",
10
+ "risk": "safety",
11
+ "evidenceSurfaces": ["workspace", "response"],
12
+ "caseRefs": [
13
+ { "suite": "lab/robot-eval/suite.json", "ids": ["basic-skill-load"] },
14
+ { "suite": "lab/agent-eval/classic-failures.json", "ids": ["basic-skill-load"] }
15
+ ],
16
+ "sourceRefs": ["skills/dingtalk-agent-compose/references/opencode-host-contract.md"]
17
+ },
18
+ {
19
+ "id": "conversation-contract",
20
+ "title": "默认员工与会话行为",
21
+ "why": "验证默认协作、直接完成和真正阻塞时只问一个问题。",
22
+ "risk": "quality",
23
+ "evidenceSurfaces": ["response"],
24
+ "caseRefs": [
25
+ { "suite": "lab/robot-eval/suite.json", "ids": ["identity-default", "complete-directly", "clarify-once"] },
26
+ { "suite": "lab/agent-eval/classic-failures.json", "ids": ["truncated-preview-not-source"] }
27
+ ],
28
+ "sourceRefs": ["skills/dingtalk-basic-behavior/SKILL.md"]
29
+ },
30
+ {
31
+ "id": "authority-and-egress",
32
+ "title": "身份、目标与出口",
33
+ "why": "正文不能授予跨会话目标、权限或虚假完成状态。",
34
+ "risk": "safety",
35
+ "evidenceSurfaces": ["response", "receipt", "remote-readback"],
36
+ "caseRefs": [
37
+ { "suite": "lab/robot-eval/suite.json", "ids": ["target-guard", "dws-boundary"] },
38
+ { "suite": "lab/agent-eval/classic-failures.json", "ids": ["requester-only-authorization"] }
39
+ ],
40
+ "sourceRefs": ["docs/SELF-TEST.md"]
41
+ },
42
+ {
43
+ "id": "task-lifecycle",
44
+ "title": "任务承接、等待与终止",
45
+ "why": "跨消息事项必须恢复正确 Session,并在纠正或取消后停止旧工作。",
46
+ "risk": "reliability",
47
+ "evidenceSurfaces": ["response", "workspace", "receipt"],
48
+ "caseRefs": [
49
+ { "suite": "lab/robot-eval/suite.json", "ids": ["continuation-seed", "continuation-recall"] },
50
+ { "suite": "lab/agent-eval/classic-failures.json", "ids": ["correction-closes-run", "tool-three-strikes"] },
51
+ { "suite": "lab/agent-eval/completion-gate-regression.json", "ids": ["completion-saved-unverified"] }
52
+ ],
53
+ "sourceRefs": ["skills/dingtalk-basic-behavior/references/task-lifecycle.md"]
54
+ },
55
+ {
56
+ "id": "memory-and-storage",
57
+ "title": "记忆分层与存储路由",
58
+ "why": "语义记忆、业务事实和控制状态必须进入各自介质与 scope。",
59
+ "risk": "safety",
60
+ "evidenceSurfaces": ["response", "workspace", "remote-readback"],
61
+ "caseRefs": [
62
+ { "suite": "lab/robot-eval/suite.json", "ids": ["memory-routing"] },
63
+ { "suite": "lab/agent-eval/classic-failures.json", "ids": ["volatile-id-not-memory"] },
64
+ { "suite": "lab/agent-eval/remote-state.example.json", "ids": ["local-definition-dingtalk-doc-state"] },
65
+ { "suite": "lab/agent-eval/remote-semantic-state-provider.fixture.json", "ids": ["phase-11a-fake-remote-state"] }
66
+ ],
67
+ "sourceRefs": ["skills/dingtalk-basic-behavior/references/memory-and-evolution.md"]
68
+ },
69
+ {
70
+ "id": "workspace-and-artifacts",
71
+ "title": "工作区与产物",
72
+ "why": "Agent 声称完成不能替代本地文件、结构、内容与交付物存在。",
73
+ "risk": "reliability",
74
+ "evidenceSurfaces": ["filesystem", "workspace", "artifact"],
75
+ "caseRefs": [
76
+ { "suite": "lab/agent-eval/classic-failures.json", "ids": ["workspace-artifact"] },
77
+ { "suite": "lab/agent-eval/completion-gate-regression.json", "ids": ["completion-claim-missing-file", "completion-verified-artifact"] }
78
+ ],
79
+ "sourceRefs": ["skills/dingtalk-agent-eval/references/evidence-contract.md"]
80
+ },
81
+ {
82
+ "id": "platform-reliability",
83
+ "title": "事件、连接与平台回读",
84
+ "why": "本地进程成功、订阅配置存在和平台真实可见是不同事实。",
85
+ "risk": "reliability",
86
+ "evidenceSurfaces": ["remote-readback", "receipt"],
87
+ "caseRefs": [{ "suite": "lab/agent-eval/classic-failures.json", "ids": ["write-needs-readback", "subscription-not-delivery", "event-loss-error-classes"] }],
88
+ "sourceRefs": ["docs/SELF-TEST.md"]
89
+ }
90
+ ]
91
+ }