@xdxer/dingtalk-agent 0.1.4-beta.7 → 0.1.4-beta.9

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 (265) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.en.md +395 -0
  3. package/README.md +466 -36
  4. package/dist/bin/dingtalk-agent.js +1071 -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/development-workspace.js +729 -0
  19. package/dist/src/development-workspace.js.map +1 -0
  20. package/dist/src/dws.js +145 -0
  21. package/dist/src/dws.js.map +1 -1
  22. package/dist/src/eval-evidence.js +193 -0
  23. package/dist/src/eval-evidence.js.map +1 -0
  24. package/dist/src/init.js +1 -1
  25. package/dist/src/init.js.map +1 -1
  26. package/dist/src/invocation.js +36 -0
  27. package/dist/src/invocation.js.map +1 -0
  28. package/dist/src/lab.js +679 -0
  29. package/dist/src/lab.js.map +1 -0
  30. package/dist/src/lease.js +100 -0
  31. package/dist/src/lease.js.map +1 -0
  32. package/dist/src/memory/candidates.js +451 -0
  33. package/dist/src/memory/candidates.js.map +1 -0
  34. package/dist/src/memory/completion-evidence.js +536 -0
  35. package/dist/src/memory/completion-evidence.js.map +1 -0
  36. package/dist/src/memory/operational.js +263 -0
  37. package/dist/src/memory/operational.js.map +1 -0
  38. package/dist/src/memory/remote-state.js +478 -0
  39. package/dist/src/memory/remote-state.js.map +1 -0
  40. package/dist/src/memory/task-checkpoints.js +204 -0
  41. package/dist/src/memory/task-checkpoints.js.map +1 -0
  42. package/dist/src/multica-deploy.js +1480 -0
  43. package/dist/src/multica-deploy.js.map +1 -0
  44. package/dist/src/multica-provider.js +685 -0
  45. package/dist/src/multica-provider.js.map +1 -0
  46. package/dist/src/opencode-evals.js +1062 -0
  47. package/dist/src/opencode-evals.js.map +1 -0
  48. package/dist/src/opencode-provider.js +531 -0
  49. package/dist/src/opencode-provider.js.map +1 -0
  50. package/dist/src/opencode-workspace.js +197 -0
  51. package/dist/src/opencode-workspace.js.map +1 -0
  52. package/dist/src/perception.js +225 -0
  53. package/dist/src/perception.js.map +1 -0
  54. package/dist/src/personal-event-evals.js +595 -0
  55. package/dist/src/personal-event-evals.js.map +1 -0
  56. package/dist/src/promotion.js +786 -0
  57. package/dist/src/promotion.js.map +1 -0
  58. package/dist/src/remote-semantic-state-live-evals.js +888 -0
  59. package/dist/src/remote-semantic-state-live-evals.js.map +1 -0
  60. package/dist/src/remote-semantic-state-worker.js +38 -0
  61. package/dist/src/remote-semantic-state-worker.js.map +1 -0
  62. package/dist/src/remote-state-evals.js +501 -0
  63. package/dist/src/remote-state-evals.js.map +1 -0
  64. package/dist/src/response-gate.js +51 -0
  65. package/dist/src/response-gate.js.map +1 -0
  66. package/dist/src/robot-evals.js +770 -0
  67. package/dist/src/robot-evals.js.map +1 -0
  68. package/dist/src/sessions.js +66 -105
  69. package/dist/src/sessions.js.map +1 -1
  70. package/dist/src/skill-manager.js +25 -16
  71. package/dist/src/skill-manager.js.map +1 -1
  72. package/dist/src/skills.js.map +1 -1
  73. package/dist/src/storage-evals.js +26 -0
  74. package/dist/src/storage-evals.js.map +1 -0
  75. package/dist/src/types.js.map +1 -1
  76. package/dist/src/waits.js +5 -1
  77. package/dist/src/waits.js.map +1 -1
  78. package/dist/src/workspace.js +28 -3
  79. package/dist/src/workspace.js.map +1 -1
  80. package/docs/INSTALLATION.md +47 -0
  81. package/docs/SECOND-AGENT-ACCEPTANCE.md +62 -0
  82. package/docs/architecture/agent-memory-topology.png +0 -0
  83. package/docs/architecture/agent-memory-topology.svg +132 -0
  84. package/docs/architecture/general-agent-kernel-topology.png +0 -0
  85. package/docs/architecture/general-agent-kernel-topology.svg +149 -0
  86. package/docs/architecture/provider-bound-development-workspace.png +0 -0
  87. package/docs/architecture/provider-bound-development-workspace.svg +141 -0
  88. package/docs/architecture/task-completion-gate.png +0 -0
  89. package/docs/architecture/task-completion-gate.svg +191 -0
  90. package/docs/schemas/agent-audit-load-evidence.schema.json +14 -0
  91. package/docs/schemas/agent-audit.schema.json +92 -0
  92. package/docs/schemas/agent-bindings.schema.json +54 -0
  93. package/docs/schemas/agent-definition.schema.json +78 -0
  94. package/docs/schemas/agent-enhancement-plan.schema.json +88 -0
  95. package/docs/schemas/agent-enhancement-receipt.schema.json +37 -0
  96. package/docs/schemas/enriched-invocation.schema.json +46 -0
  97. package/docs/schemas/eval-candidate-plan.schema.json +28 -0
  98. package/docs/schemas/eval-candidate-result.schema.json +20 -0
  99. package/docs/schemas/eval-candidate.schema.json +30 -0
  100. package/docs/schemas/invocation.schema.json +19 -0
  101. package/docs/schemas/memory-candidate-proposal.schema.json +18 -0
  102. package/docs/schemas/memory-candidate.schema.json +76 -0
  103. package/docs/schemas/memory-publish-target.schema.json +25 -0
  104. package/docs/schemas/multica-deployment-list.schema.json +29 -0
  105. package/docs/schemas/multica-deployment-operation.schema.json +51 -0
  106. package/docs/schemas/multica-deployment-plan.schema.json +70 -0
  107. package/docs/schemas/multica-deployment-receipt.schema.json +87 -0
  108. package/docs/schemas/multica-deployment-status.schema.json +23 -0
  109. package/docs/schemas/multica-workspace-inspection.schema.json +77 -0
  110. package/docs/schemas/multica-workspace-plan.schema.json +68 -0
  111. package/docs/schemas/multica-workspace-resource-list.schema.json +27 -0
  112. package/docs/schemas/multica-workspace-status.schema.json +34 -0
  113. package/docs/schemas/observation.schema.json +21 -0
  114. package/docs/schemas/operational-memory-provider.schema.json +36 -0
  115. package/docs/schemas/operational-memory-record.schema.json +24 -0
  116. package/docs/schemas/perception-input.schema.json +56 -0
  117. package/docs/schemas/project.schema.json +112 -0
  118. package/docs/schemas/promotion-list.schema.json +36 -0
  119. package/docs/schemas/promotion-plan.schema.json +60 -0
  120. package/docs/schemas/promotion-policy.schema.json +29 -0
  121. package/docs/schemas/promotion-receipt.schema.json +43 -0
  122. package/docs/schemas/promotion-status.schema.json +23 -0
  123. package/docs/schemas/release-readiness.schema.json +65 -0
  124. package/docs/schemas/remote-semantic-state-live-eval.schema.json +60 -0
  125. package/docs/schemas/remote-semantic-state-manifest.schema.json +79 -0
  126. package/docs/schemas/remote-semantic-state-provider.schema.json +98 -0
  127. package/docs/schemas/response-gate.schema.json +20 -0
  128. package/docs/schemas/task-checkpoint.schema.json +71 -0
  129. package/docs/schemas/task-completion-evidence.schema.json +154 -0
  130. package/docs/schemas/workspace-doctor.schema.json +56 -0
  131. package/docs/schemas/workspace-state.schema.json +39 -0
  132. package/evals/baselines/2026-07-16/opencode-basic-010-completion-summary.json +123 -0
  133. package/evals/baselines/2026-07-16/opencode-basic-skill-required-summary.json +69 -0
  134. package/evals/baselines/2026-07-16/opencode-multi-surface-summary.json +63 -0
  135. package/evals/baselines/2026-07-16/remote-state-live-summary.json +70 -0
  136. package/evals/baselines/2026-07-17/agent-enhance-opencode-dogfood-summary.json +98 -0
  137. package/evals/baselines/2026-07-17/personal-event-live-readiness-summary.json +68 -0
  138. package/examples/agents/fde-coach/AGENTS.md +26 -0
  139. package/examples/agents/fde-coach/MEMORY.md +3 -0
  140. package/examples/agents/fde-coach/fields/default/field.json +24 -0
  141. package/examples/agents/fde-coach/knowledge/INDEX.md +4 -0
  142. package/examples/agents/fde-coach/skills/fde-coach/SKILL.md +13 -0
  143. package/examples/agents/release-manager/AGENTS.md +26 -0
  144. package/examples/agents/release-manager/MEMORY.md +3 -0
  145. package/examples/agents/release-manager/fields/default/field.json +24 -0
  146. package/examples/agents/release-manager/knowledge/INDEX.md +4 -0
  147. package/examples/agents/release-manager/skills/release-manager/SKILL.md +13 -0
  148. package/lab/README.md +109 -0
  149. package/lab/agent-eval/catalog.json +91 -0
  150. package/lab/agent-eval/classic-failures.json +177 -0
  151. package/lab/agent-eval/completion-gate-regression.json +99 -0
  152. package/lab/agent-eval/personal-event-live.example.json +94 -0
  153. package/lab/agent-eval/remote-semantic-state-live.example.json +70 -0
  154. package/lab/agent-eval/remote-semantic-state-provider.fixture.json +47 -0
  155. package/lab/agent-eval/remote-state-workspace/AGENTS.md +8 -0
  156. package/lab/agent-eval/remote-state-workspace/opencode.json +7 -0
  157. package/lab/agent-eval/remote-state-workspace/skills/remote-state-operator/SKILL.md +13 -0
  158. package/lab/agent-eval/remote-state.example.json +31 -0
  159. package/lab/agent-eval/workspace/AGENTS.md +7 -0
  160. package/lab/agent-eval/workspace/MEMORY.md +4 -0
  161. package/lab/agent-eval/workspace/artifacts/pending-review.md +3 -0
  162. package/lab/agent-eval/workspace/knowledge/INDEX.md +4 -0
  163. package/lab/agent-eval/workspace/opencode.json +20 -0
  164. package/lab/manifest.example.json +27 -0
  165. package/lab/manifest.personal-event.example.json +27 -0
  166. package/lab/project-workspace/README.md +11 -0
  167. package/lab/project-workspace/fake-multica-provider.mjs +266 -0
  168. package/lab/project-workspace/multica-deploy.fixture.json +29 -0
  169. package/lab/project-workspace/multica-readonly.fixture.json +69 -0
  170. package/lab/project-workspace/observation.fixture.json +14 -0
  171. package/lab/project-workspace/opencode-provider-suite.json +65 -0
  172. package/lab/project-workspace/project.fixture.json +44 -0
  173. package/lab/project-workspace/promotion-policy.fixture.json +15 -0
  174. package/lab/robot-eval/pool.example.json +30 -0
  175. package/lab/robot-eval/suite.json +123 -0
  176. package/lab/robot-eval/workspace/AGENTS.md +21 -0
  177. package/lab/robot-eval/workspace/MEMORY.md +3 -0
  178. package/lab/robot-eval/workspace/knowledge/INDEX.md +5 -0
  179. package/lab/robot-eval/workspace/opencode.json +22 -0
  180. package/lab/schemas/agent-eval-catalog.schema.json +47 -0
  181. package/lab/schemas/lab-manifest.schema.json +70 -0
  182. package/lab/schemas/personal-event-eval.schema.json +91 -0
  183. package/lab/schemas/remote-state-eval.schema.json +66 -0
  184. package/lab/schemas/robot-eval-suite.schema.json +184 -0
  185. package/lab/schemas/robot-pool.schema.json +56 -0
  186. package/package.json +30 -14
  187. package/skills/dingtalk-agent-boot-multica/SKILL.md +40 -0
  188. package/skills/dingtalk-agent-compose/SKILL.md +110 -0
  189. package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +26 -0
  190. package/skills/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +13 -0
  191. package/skills/dingtalk-agent-compose/assets/agent.bindings.local.template.json +13 -0
  192. package/skills/dingtalk-agent-compose/assets/opencode.template.json +12 -0
  193. package/skills/dingtalk-agent-compose/assets/role-skill.template.md +24 -0
  194. package/skills/dingtalk-agent-compose/evals/evals.json +94 -0
  195. package/skills/dingtalk-agent-compose/references/agent-definition-contract.md +55 -0
  196. package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +65 -0
  197. package/skills/dingtalk-agent-compose/references/storage-routing.md +20 -0
  198. package/skills/dingtalk-agent-deploy/SKILL.md +60 -0
  199. package/skills/dingtalk-agent-deploy/references/multica-deployment-contract.md +49 -0
  200. package/skills/dingtalk-agent-deploy/references/promotion-observation-contract.md +49 -0
  201. package/skills/dingtalk-agent-eval/SKILL.md +116 -0
  202. package/skills/dingtalk-agent-eval/assets/eval-catalog.template.json +18 -0
  203. package/skills/dingtalk-agent-eval/evals/evals.json +61 -0
  204. package/skills/dingtalk-agent-eval/references/eval-topology.md +34 -0
  205. package/skills/dingtalk-agent-eval/references/evidence-contract.md +31 -0
  206. package/skills/dingtalk-agent-eval/references/scenario-taxonomy.md +25 -0
  207. package/skills/dingtalk-agent-eval/references/storage-modes.md +75 -0
  208. package/skills/dingtalk-basic-behavior/SKILL.md +63 -3
  209. package/skills/dingtalk-basic-behavior/assets/memory-candidate-proposal.json +10 -0
  210. package/skills/dingtalk-basic-behavior/assets/{task-checkpoint.md → task-checkpoint.json} +2 -21
  211. package/skills/dingtalk-basic-behavior/references/action-contract.md +2 -0
  212. package/skills/dingtalk-basic-behavior/references/memory-and-evolution.md +15 -1
  213. package/skills/dingtalk-basic-behavior/references/perception-and-gates.md +28 -0
  214. package/skills/dingtalk-basic-behavior/references/task-lifecycle.md +32 -7
  215. package/dist/src/boot.js +0 -70
  216. package/dist/src/boot.js.map +0 -1
  217. package/dist/src/duty.js +0 -74
  218. package/dist/src/duty.js.map +0 -1
  219. package/dist/src/kb.js +0 -240
  220. package/dist/src/kb.js.map +0 -1
  221. package/dist/src/runs.js +0 -79
  222. package/dist/src/runs.js.map +0 -1
  223. package/docs/ARCHITECTURE.md +0 -219
  224. package/docs/MINIMAL-WORKSPACE-V1.md +0 -172
  225. package/docs/OPEN-SOURCE-REFERENCES.md +0 -107
  226. package/docs/SELF-TEST.md +0 -252
  227. package/docs//345/206/205/347/275/221/345/256/236/347/233/270.md +0 -77
  228. package/evals/baselines/2026-07-14/behavior-summary.json +0 -28
  229. package/evals/baselines/2026-07-14/contract-summary.json +0 -18
  230. package/evals/baselines/2026-07-14/live-canary-summary.json +0 -25
  231. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/SKILL.md +0 -72
  232. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/action-contract.md +0 -31
  233. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/event-to-behavior.md +0 -22
  234. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/memory-and-evolution.md +0 -25
  235. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/runtime-modes.md +0 -34
  236. package/evals/baselines/2026-07-15/task-lifecycle-summary.json +0 -50
  237. package/evals/evals.json +0 -339
  238. package/evals/fixtures/dm-ambiguous-send.json +0 -4
  239. package/evals/fixtures/dm-blocked.json +0 -4
  240. package/evals/fixtures/dm-clear.json +0 -4
  241. package/evals/fixtures/dm-discussion.json +0 -4
  242. package/evals/fixtures/dm-doc-write-no-tool.json +0 -4
  243. package/evals/fixtures/dm-long-task-ack.json +0 -4
  244. package/evals/fixtures/dm-nonblocking-gap.json +0 -4
  245. package/evals/fixtures/dm-structured-task.json +0 -4
  246. package/evals/fixtures/group.json +0 -10
  247. package/evals/fixtures/mentioned.json +0 -3
  248. package/evals/run-contract-evals.mjs +0 -1169
  249. package/evals/run-shadow-evals.mjs +0 -267
  250. package/evals/runners/README.md +0 -66
  251. package/evals/runners/claude-shadow.mjs +0 -533
  252. package/evals/schemas/action-request.schema.json +0 -77
  253. package/evals/shadow-evals.json +0 -133
  254. package/skills/AGENTS.md +0 -104
  255. package/skills//344/273/273/345/212/241.md +0 -48
  256. package/skills//345/237/272/347/241/200/350/241/214/344/270/272.md +0 -44
  257. package/skills//345/277/203/350/267/263.md +0 -79
  258. package/skills//346/266/210/346/201/257.md +0 -50
  259. package/skills//347/237/245/350/257/206.md +0 -55
  260. package/skills//350/257/204/346/265/213.md +0 -62
  261. package/skills//351/222/211/351/222/211.md +0 -64
  262. package/templates/ontology/index.md +0 -24
  263. package/templates/ontology/self/access.md +0 -38
  264. package/templates/ontology/self/role-spec.md +0 -34
  265. package/templates/ontology/self/workspace.md +0 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal-event-evals.js","sourceRoot":"","sources":["../../src/personal-event-evals.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync,\n writeFileSync,\n} from 'node:fs'\nimport { randomUUID } from 'node:crypto'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport { must as loadConfig } from './config.js'\nimport { digest, normalizeEvent, stableStringify } from './events.js'\nimport {\n doctorLab, loadLabManifest, runLab, teardownLab, verifyLab,\n type LabManifest,\n} from './lab.js'\nimport { isCancelCommand } from './waits.js'\nimport { readJson } from './sessions.js'\nimport * as dws from './dws.js'\n\nconst SCENARIOS = new Set([\n 'host-loading', 'conversation-contract', 'authority-and-egress', 'task-lifecycle',\n 'memory-and-storage', 'workspace-and-artifacts', 'platform-reliability',\n])\nconst ACTIONS = new Set(['reply', 'ask', 'silence'])\nconst INVOCATION_MODES = new Set(['mention', 'dm', 'ambient', 'continuation'])\nconst RESPONSE_DECISIONS = new Set(['engage', 'silent', 'inspect'])\nconst RESUME_MODES = new Set(['start', 'resume', 'cancel'])\nconst SILENCE_REASONS = new Set([\n 'unmentioned', 'already_answered', 'no_value', 'policy_denied', 'unsupported',\n 'heartbeat_noop',\n])\n\ninterface PersonalEventCase {\n id: string\n scenario: string\n risk: 'safety' | 'reliability' | 'quality'\n eventFile?: string\n perceptionFile?: string\n action: 'reply' | 'ask' | 'silence'\n text?: string\n silenceReason?: string\n duplicateOf?: string\n continuationOf?: string\n expected: {\n invocationMode: 'mention' | 'dm' | 'ambient' | 'continuation'\n responseDecision: 'engage' | 'silent' | 'inspect'\n resumeMode: 'start' | 'resume' | 'cancel'\n newOutwardEffects: 0 | 1\n markerCount: 0 | 1\n perception?: Array<'quote' | 'burst' | 'identity'>\n }\n sourceRefs: string[]\n}\n\ninterface PersonalEventSuite {\n $schema: 'dingtalk-agent/personal-event-eval@1'\n id: string\n liveAuthorized: 'yes' | 'no'\n manifest: string\n evidenceRoot: string\n requiredSkills: string[]\n maxOutwardActions: number\n cases: PersonalEventCase[]\n}\n\nexport interface PersonalEventEvalOptions {\n execute?: boolean\n live?: boolean\n yes?: boolean\n out?: string\n}\n\ninterface PreparedCase {\n spec: PersonalEventCase\n rawEvent: Record<string, unknown>\n perception?: Record<string, unknown>\n marker: string\n}\n\n/**\n * Phase 9 只编排可信 personal-event → Prepared Run → Action Gate → DWS → readback。\n * 事件订阅仍由外部 Adapter 负责,模型表达也继续由 L1/OpenCode 单独评测。\n */\nexport function runPersonalEventEvaluation(\n root: string,\n workspacePath: string,\n suitePath: string,\n options: PersonalEventEvalOptions = {},\n): Record<string, any> {\n const workspace = safeInside(root, workspacePath, true, 'Workspace')\n const suiteFile = safeInside(root, suitePath, true, 'suite')\n const suite = validateSuite(readJsonFile(suiteFile, 'personal-event suite'))\n const manifest = loadLabManifest(workspace, suite.manifest)\n if (!['mock-integration', 'personal-event'].includes(manifest.mode)) {\n throw new Error('personal-event eval 只接受 mock-integration 或 personal-event manifest')\n }\n if (resolve(workspace, suite.evidenceRoot) === resolve(workspace, manifest.evidenceRoot)) {\n throw new Error('personal-event eval evidenceRoot 必须与单 case Lab evidenceRoot 分开')\n }\n const doctor = doctorLab(workspace, suite.manifest)\n if (!doctor.ready) throw new Error(`personal-event Lab preflight 失败: ${summarizeDoctor(doctor)}`)\n\n const prepared = prepareCases(workspace, suite, manifest)\n const expectedOutward = prepared.reduce((sum, item) =>\n sum + (item.spec.duplicateOf ? 0 : item.spec.expected.newOutwardEffects), 0)\n if (expectedOutward !== suite.maxOutwardActions) {\n throw new Error(\n `personal-event suite outward budget 不一致: cases=${expectedOutward}, suite=${suite.maxOutwardActions}`,\n )\n }\n const physicalRuns = prepared.filter((item) => !item.spec.duplicateOf).length\n if (physicalRuns > manifest.budgets.maxRuns) {\n throw new Error(`personal-event suite 需要 ${physicalRuns} 个 Run,超过 manifest ${manifest.budgets.maxRuns}`)\n }\n\n const plan = {\n $schema: 'dingtalk-agent/personal-event-eval-plan@1',\n ready: manifest.mode === 'mock-integration' || suite.liveAuthorized === 'yes',\n executeRequired: true,\n sideEffect: false,\n dingtalkSideEffect: false,\n id: suite.id,\n workspace: relative(realpathSync(root), workspace) || '.',\n suite: relative(realpathSync(root), suiteFile),\n mode: manifest.mode,\n liveAuthorized: suite.liveAuthorized,\n egressOwner: manifest.egressOwner,\n eventAdapter: 'external-dws-event-consume',\n triggerOwnedByDta: false,\n executionGate: manifest.mode === 'mock-integration'\n ? '--execute --yes with verified fake DWS'\n : 'suite.liveAuthorized=yes + --execute --live --yes',\n maxOutwardActions: suite.maxOutwardActions,\n physicalRuns,\n requiredSkills: suite.requiredSkills,\n cases: prepared.map((item) => ({\n id: item.spec.id,\n scenario: item.spec.scenario,\n risk: item.spec.risk,\n action: item.spec.action,\n duplicateOf: item.spec.duplicateOf || null,\n continuationOf: item.spec.continuationOf || null,\n expected: item.spec.expected,\n marker: manifest.mode === 'personal-event' ? '<validated-live-marker>' : '<generated-at-run>',\n })),\n gates: [\n 'suite liveAuthorized + CLI execute/live/yes',\n 'manifest/workspace identity and single egress',\n 'tenant/conversation/actor allowlist',\n 'Definition and Basic/Role Skill snapshot',\n 'Response Gate and expected action',\n 'Intent/Attempt/Receipt journal',\n 'same message id + exact text independent readback',\n 'duplicate Receipt replay with unchanged attempt',\n 'Wait resume/cancel Session continuity',\n 'teardown with no Lab-owned connector',\n ],\n doctor,\n }\n if (!options.execute) return plan\n\n const mock = manifest.mode === 'mock-integration'\n if (mock) {\n if (options.live) throw new Error('mock personal-event eval 不接受 --live')\n } else {\n if (suite.liveAuthorized !== 'yes') {\n throw new Error('personal-event Live 未授权:suite.liveAuthorized 必须是 yes')\n }\n if (!options.live || !options.yes) {\n throw new Error('personal-event Live 必须同时传 --execute --live --yes')\n }\n }\n if (!options.yes) throw new Error('personal-event eval 执行必须显式传 --yes')\n\n const evaluationId = `personal_event_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidenceRoot = safeEvidenceRoot(workspace, options.out || suite.evidenceRoot)\n const evaluationRoot = join(evidenceRoot, evaluationId)\n mkdirSync(evaluationRoot, { recursive: true })\n writeJson(join(evaluationRoot, 'plan.json'), plan)\n writeJson(join(evaluationRoot, 'suite.redacted.json'), redactSuite(suite))\n\n const cfg = loadConfig(workspace)\n const results: Record<string, any>[] = []\n const completed = new Map<string, Record<string, any>>()\n const uniqueEvidence = new Set<string>()\n const teardowns: Record<string, any>[] = []\n let outwardEffects = 0\n let failure: Record<string, unknown> | null = null\n let activeCaseId = 'pre-case'\n let identityVerified = false\n\n try {\n activeCaseId = 'identity-preflight'\n const identityReadback = dws.getSelf(manifest.dws.profile) as Record<string, unknown>\n writeJson(join(evaluationRoot, 'identity-readback.json'), identityReadback)\n const actualUserId = findString(identityReadback, ['userId', 'userid', 'user_id'])\n if (!actualUserId || actualUserId !== manifest.dws.expectedUserId) {\n throw new Error('personal-event DWS 执行身份与 manifest expectedUserId 不一致')\n }\n identityVerified = true\n for (const item of prepared) {\n activeCaseId = item.spec.id\n const relation = item.spec.duplicateOf\n ? (completed.get(item.spec.duplicateOf) || null)\n : item.spec.continuationOf\n ? (completed.get(item.spec.continuationOf) || null)\n : null\n if ((item.spec.duplicateOf || item.spec.continuationOf) && !relation) {\n throw new Error(`case=${item.spec.id} 引用的前置 case 没有完成`)\n }\n const source = item.spec.duplicateOf\n ? prepared.find((candidate) => candidate.spec.id === item.spec.duplicateOf)!\n : item\n const sourceSpec = source.spec\n const beforeAttemptHash = relation?.evidencePath\n ? fileHash(join(relation.evidencePath, 'action-attempt.json')) : ''\n let output: Record<string, any>\n try {\n output = runLab(workspace, cfg, suite.manifest, source.rawEvent, {\n caseId: sourceSpec.id,\n action: sourceSpec.action,\n replyText: sourceSpec.text,\n silenceReason: sourceSpec.silenceReason,\n perception: source.perception,\n useEventCorrelation: true,\n markerOverride: mock\n ? (item.spec.duplicateOf ? relation?.marker : item.marker)\n : undefined,\n live: mock ? false : options.live,\n yes: true,\n }) as Record<string, any>\n } catch (error) {\n const failedEvidence = String((error as any).evidencePath || '')\n if (failedEvidence) uniqueEvidence.add(failedEvidence)\n throw error\n }\n uniqueEvidence.add(output.evidencePath)\n const result = evaluateCase(\n workspace, suite, item.spec, output, relation, beforeAttemptHash)\n results.push(result)\n completed.set(item.spec.id, result)\n outwardEffects += result.newOutwardEffects\n writeJson(join(evaluationRoot, 'cases', `${safeName(item.spec.id)}.json`), result)\n if (!result.passed) throw new Error(`case=${item.spec.id} 硬门禁失败`)\n if (outwardEffects > suite.maxOutwardActions) {\n throw new Error(`personal-event outward budget 超限: ${outwardEffects}/${suite.maxOutwardActions}`)\n }\n }\n } catch (error) {\n failure = {\n stage: activeCaseId,\n error: String((error as Error).message || error),\n occurredAt: new Date().toISOString(),\n }\n writeJson(join(evaluationRoot, 'failure.json'), failure)\n } finally {\n for (const evidencePath of uniqueEvidence) {\n try {\n const teardown = teardownLab(workspace, suite.manifest, evidencePath)\n const verified = verifyLab(workspace, evidencePath)\n teardowns.push({ evidencePath: relative(workspace, evidencePath), teardown, verified })\n } catch (error) {\n teardowns.push({\n evidencePath: relative(workspace, evidencePath),\n error: String((error as Error).message || error),\n })\n }\n }\n writeJson(join(evaluationRoot, 'teardown.json'), teardowns)\n }\n\n const teardownPassed = teardowns.length === physicalRuns &&\n teardowns.every((item) => item.teardown?.passed === true && item.verified?.passed === true)\n const allPassed = !failure && results.length === suite.cases.length &&\n results.every((item) => item.passed) && outwardEffects === suite.maxOutwardActions &&\n teardownPassed\n const report = {\n $schema: 'dingtalk-agent/personal-event-eval-report@1',\n passed: allPassed,\n sideEffect: mock ? 'fake-dws-only' : 'dedicated-personal-event-resources',\n dingtalkSideEffect: !mock,\n evaluationId,\n evidencePath: relative(workspace, evaluationRoot),\n mode: manifest.mode,\n liveAuthorized: suite.liveAuthorized,\n eventAdapter: 'external-dws-event-consume',\n triggerOwnedByDta: false,\n identityVerified,\n outwardEffects,\n maxOutwardActions: suite.maxOutwardActions,\n results,\n teardown: { passed: teardownPassed, results: teardowns },\n failure,\n limitations: [\n 'Event subscription/capture is external and is not created by this runner.',\n 'Scripted actions validate the kernel and platform path; model expression remains an L1/OpenCode gate.',\n 'User feedback is not inferred from delivery receipts.',\n ],\n }\n writeJson(join(evaluationRoot, 'report.json'), report)\n return report\n}\n\nfunction prepareCases(\n workspace: string,\n suite: PersonalEventSuite,\n manifest: LabManifest,\n): PreparedCase[] {\n const prepared: PreparedCase[] = []\n const byId = new Map<string, PreparedCase>()\n for (const spec of suite.cases) {\n if (spec.duplicateOf) {\n const source = byId.get(spec.duplicateOf)\n if (!source) throw new Error(`case=${spec.id} duplicateOf 必须引用前面的 case`)\n prepared.push({ ...source, spec, marker: source.marker })\n byId.set(spec.id, prepared.at(-1)!)\n continue\n }\n if (!spec.eventFile) throw new Error(`case=${spec.id} 缺少 eventFile`)\n const eventPath = safeInside(workspace, spec.eventFile, true, `case=${spec.id} eventFile`)\n const rawEvent = readJsonFile(eventPath, `case=${spec.id} event`) as Record<string, unknown>\n const event = normalizeEvent(rawEvent)\n const marker = extractMarker(event.message.text)\n if (manifest.mode === 'personal-event') {\n const markers = event.message.text.match(/\\[DTA-LAB-[^\\]\\r\\n]{1,180}\\]/gu) || []\n if (markers.length !== 1 || !marker.startsWith(`${manifest.markerPrefix}${spec.id}-`)) {\n throw new Error(`case=${spec.id} Live event 必须有且只有一个绑定 case id 的 marker`)\n }\n }\n assertAllowlisted(manifest, event, spec.id)\n let perception: Record<string, unknown> | undefined\n if (spec.perceptionFile) {\n perception = readJsonFile(\n safeInside(workspace, spec.perceptionFile, true, `case=${spec.id} perceptionFile`),\n `case=${spec.id} perception`,\n ) as Record<string, unknown>\n }\n if (spec.expected.resumeMode === 'cancel' && !isCancelCommand(event.message.text)) {\n throw new Error(`case=${spec.id} 期望 cancel,但 event 不是显式 /stop 或 /cancel`)\n }\n const item = {\n spec, rawEvent, perception,\n marker: marker || `${manifest.markerPrefix}${spec.id}-${randomUUID()}]`,\n }\n prepared.push(item)\n byId.set(spec.id, item)\n }\n assertCoverage(prepared)\n return prepared\n}\n\nfunction evaluateCase(\n workspace: string,\n suite: PersonalEventSuite,\n spec: PersonalEventCase,\n output: Record<string, any>,\n relation: Record<string, any> | null,\n beforeAttemptHash: string,\n): Record<string, any> {\n const evidencePath = String(output.evidencePath || '')\n const invocation = readJson(join(evidencePath, 'invocation.json'))\n const enriched = readJson(join(evidencePath, 'enriched-invocation.json'))\n const responseGate = readJson(join(evidencePath, 'response-gate.json'))\n const resume = readJson(join(evidencePath, 'resume.json'))\n const definition = readJson(join(evidencePath, 'agent-definition.json'))\n const skillManifest = readJson(join(evidencePath, 'skill-manifest.json'))\n const receipt = readJson(join(evidencePath, 'action-receipt.json'))\n const assertions = readJson(join(evidencePath, 'assertions.json'))\n const attemptHash = fileHash(join(evidencePath, 'action-attempt.json'))\n const skillNames = new Set((skillManifest.entries || []).map((entry: any) => entry.name))\n const perceptionChecks = (spec.expected.perception || []).map((name) => ({\n name,\n passed: enriched.enrichments?.[name]?.status === 'available',\n status: enriched.enrichments?.[name]?.status || 'missing',\n }))\n const checks = [\n {\n id: 'lab-assertions', passed: assertions.passed === true,\n detail: stableStringify(assertions.checks || []),\n },\n {\n id: 'invocation-mode', passed: invocation.mode === spec.expected.invocationMode,\n detail: `${invocation.mode}/${spec.expected.invocationMode}`,\n },\n {\n id: 'response-gate', passed: responseGate.decision === spec.expected.responseDecision,\n detail: `${responseGate.decision}/${spec.expected.responseDecision}`,\n },\n {\n id: 'resume-mode', passed: resume.mode === spec.expected.resumeMode,\n detail: `${resume.mode}/${spec.expected.resumeMode}`,\n },\n {\n id: 'definition-and-skills', passed: Boolean(definition.hash) &&\n suite.requiredSkills.every((name) => skillNames.has(name)),\n detail: `${definition.hash || 'missing'}; ${[...skillNames].join(',')}`,\n },\n {\n id: 'receipt', passed: receipt.outcome === 'confirmed' && receipt.verified === true &&\n receipt.kind === spec.action,\n detail: `${receipt.kind}/${receipt.outcome}/${String(receipt.verified)}`,\n },\n {\n id: 'marker-readback', passed: assertions.markerCount === spec.expected.markerCount,\n detail: `${assertions.markerCount}/${spec.expected.markerCount}`,\n },\n {\n id: 'perception', passed: perceptionChecks.every((item) => item.passed),\n detail: stableStringify(perceptionChecks),\n },\n ]\n if (spec.duplicateOf) {\n checks.push({\n id: 'duplicate-receipt',\n passed: output.dispatch?.duplicate === true && receipt.duplicate === true &&\n output.dispatch?.runId === relation?.runId && receipt.actionId === relation?.actionId &&\n beforeAttemptHash === attemptHash,\n detail: stableStringify({\n dispatchDuplicate: output.dispatch?.duplicate, receiptDuplicate: receipt.duplicate,\n runId: output.dispatch?.runId, expectedRunId: relation?.runId,\n actionId: receipt.actionId, expectedActionId: relation?.actionId,\n beforeAttemptHash, attemptHash,\n }),\n })\n }\n if (spec.continuationOf) {\n checks.push({\n id: 'session-continuity',\n passed: output.dispatch?.sessionId === relation?.sessionId &&\n output.dispatch?.runId !== relation?.runId,\n detail: `${relation?.sessionId}/${relation?.runId} -> ${output.dispatch?.sessionId}/${output.dispatch?.runId}`,\n })\n }\n return {\n id: spec.id,\n scenario: spec.scenario,\n risk: spec.risk,\n passed: checks.every((item) => item.passed),\n action: spec.action,\n marker: output.marker,\n markerCount: assertions.markerCount,\n newOutwardEffects: spec.duplicateOf ? 0 : spec.expected.newOutwardEffects,\n sessionId: output.dispatch?.sessionId,\n runId: output.dispatch?.runId,\n actionId: receipt.actionId,\n duplicate: Boolean(receipt.duplicate),\n definitionHash: definition.hash,\n skillManifestHash: skillManifest.hash,\n invocationMode: invocation.mode,\n responseDecision: responseGate.decision,\n resumeMode: resume.mode,\n attemptHash,\n evidencePath,\n evidenceRelative: relative(workspace, evidencePath),\n checks,\n }\n}\n\nfunction validateSuite(value: unknown): PersonalEventSuite {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('personal-event suite 必须是 JSON object')\n }\n const suite = value as Record<string, any>\n if (suite.$schema !== 'dingtalk-agent/personal-event-eval@1') {\n throw new Error('personal-event suite schema 非法')\n }\n if (!String(suite.id || '').trim() || !String(suite.manifest || '').trim() ||\n !String(suite.evidenceRoot || '').trim()) {\n throw new Error('personal-event suite 缺少 id/manifest/evidenceRoot')\n }\n if (!['yes', 'no'].includes(suite.liveAuthorized)) {\n throw new Error('personal-event suite liveAuthorized 必须是 yes 或 no')\n }\n if (!Array.isArray(suite.requiredSkills) || !suite.requiredSkills.includes('dingtalk-basic-behavior') ||\n suite.requiredSkills.some((item: unknown) => !String(item || '').trim()) ||\n new Set(suite.requiredSkills).size !== suite.requiredSkills.length) {\n throw new Error('personal-event suite requiredSkills 必须包含 dingtalk-basic-behavior')\n }\n if (!Number.isInteger(suite.maxOutwardActions) || suite.maxOutwardActions < 1 ||\n suite.maxOutwardActions > 20) {\n throw new Error('personal-event suite maxOutwardActions 必须为 1..20')\n }\n if (!Array.isArray(suite.cases) || !suite.cases.length || suite.cases.length > 20) {\n throw new Error('personal-event suite cases 必须为 1..20')\n }\n const ids = new Set<string>()\n const prior = new Map<string, Record<string, any>>()\n for (const item of suite.cases) {\n if (!item || typeof item !== 'object' || Array.isArray(item) ||\n !/^[a-z0-9][a-z0-9._-]*$/.test(String(item.id || '')) || ids.has(item.id)) {\n throw new Error(`personal-event case id 非法或重复: ${item?.id || 'missing'}`)\n }\n ids.add(item.id)\n if (!SCENARIOS.has(item.scenario) || !['safety', 'reliability', 'quality'].includes(item.risk) ||\n !ACTIONS.has(item.action)) {\n throw new Error(`case=${item.id} scenario/risk/action 非法`)\n }\n if (item.duplicateOf && item.continuationOf) {\n throw new Error(`case=${item.id} 不能同时声明 duplicateOf 和 continuationOf`)\n }\n const sourceId = item.duplicateOf || item.continuationOf\n const source = sourceId ? prior.get(sourceId) : null\n if (sourceId && !source) {\n throw new Error(`case=${item.id} 必须引用前面已经声明的 case: ${sourceId}`)\n }\n if (item.duplicateOf && (item.action !== source?.action ||\n item.expected?.invocationMode !== source?.expected?.invocationMode ||\n item.expected?.responseDecision !== source?.expected?.responseDecision ||\n item.expected?.resumeMode !== source?.expected?.resumeMode)) {\n throw new Error(`case=${item.id} duplicateOf 必须保持原 action/invocation/decision/resume`)\n }\n if (item.continuationOf && source?.action !== 'ask') {\n throw new Error(`case=${item.id} continuationOf 必须引用 ask case`)\n }\n if (!item.duplicateOf && !String(item.eventFile || '').trim()) {\n throw new Error(`case=${item.id} 缺少 eventFile`)\n }\n if (item.action !== 'silence' && !String(item.text || '').trim()) {\n throw new Error(`case=${item.id} reply/ask 必须声明 text`)\n }\n if (item.action === 'silence' && !SILENCE_REASONS.has(String(item.silenceReason || ''))) {\n throw new Error(`case=${item.id} silence 必须声明合法 silenceReason`)\n }\n if (!item.expected || !INVOCATION_MODES.has(item.expected.invocationMode) ||\n !RESPONSE_DECISIONS.has(item.expected.responseDecision) ||\n !RESUME_MODES.has(item.expected.resumeMode) ||\n ![0, 1].includes(item.expected.newOutwardEffects) ||\n ![0, 1].includes(item.expected.markerCount)) {\n throw new Error(`case=${item.id} expected 非法`)\n }\n const shouldOutward = item.action === 'reply' || item.action === 'ask'\n if (!item.duplicateOf && Number(shouldOutward) !== item.expected.newOutwardEffects) {\n throw new Error(`case=${item.id} newOutwardEffects 与 action 不一致`)\n }\n if (item.expected.markerCount !== Number(shouldOutward)) {\n throw new Error(`case=${item.id} markerCount 与 action 不一致`)\n }\n if (!Array.isArray(item.sourceRefs) || !item.sourceRefs.length) {\n throw new Error(`case=${item.id} 必须声明 sourceRefs`)\n }\n if (item.expected.perception !== undefined &&\n (!Array.isArray(item.expected.perception) ||\n item.expected.perception.some((name: unknown) => !['quote', 'burst', 'identity'].includes(String(name))))) {\n throw new Error(`case=${item.id} expected.perception 非法`)\n }\n prior.set(item.id, item)\n }\n return suite as PersonalEventSuite\n}\n\nfunction assertCoverage(cases: PreparedCase[]): void {\n const mentionReply = cases.some((item) => item.spec.action === 'reply' &&\n item.spec.expected.invocationMode === 'mention' && !item.spec.duplicateOf)\n const ambientSilence = cases.some((item) => item.spec.action === 'silence' &&\n item.spec.expected.invocationMode === 'ambient')\n const duplicate = cases.some((item) => Boolean(item.spec.duplicateOf))\n const continuation = cases.some((item) => Boolean(item.spec.continuationOf) &&\n item.spec.expected.resumeMode === 'resume')\n const cancel = cases.some((item) => Boolean(item.spec.continuationOf) &&\n item.spec.expected.resumeMode === 'cancel')\n const perception = cases.some((item) =>\n ['quote', 'burst', 'identity'].every((name) =>\n item.spec.expected.perception?.includes(name as 'quote' | 'burst' | 'identity')))\n const missing = Object.entries({ mentionReply, ambientSilence, duplicate, continuation, cancel, perception })\n .filter(([, value]) => !value).map(([name]) => name)\n if (missing.length) throw new Error(`personal-event suite 缺少经典场景: ${missing.join(', ')}`)\n}\n\nfunction assertAllowlisted(manifest: LabManifest, event: any, caseId: string): void {\n const actorIds = [event.actor.id, event.actor.userId, event.actor.openDingTalkId].filter(Boolean)\n if (!manifest.allowlist.tenantIds.includes(event.tenant.id) ||\n !manifest.allowlist.conversationIds.includes(event.conversation.id) ||\n !actorIds.some((id) => manifest.allowlist.actorIds.includes(id))) {\n throw new Error(`case=${caseId} event tenant/conversation/actor 不在 manifest allowlist`)\n }\n}\n\nfunction redactSuite(suite: PersonalEventSuite): Record<string, unknown> {\n return {\n ...suite,\n manifest: '<gitignored-local-manifest>',\n cases: suite.cases.map((item) => ({\n ...item,\n eventFile: item.eventFile ? '<gitignored-event-file>' : undefined,\n perceptionFile: item.perceptionFile ? '<gitignored-perception-file>' : undefined,\n text: item.text ? `<redacted:${digest(item.text).slice(0, 10)}>` : undefined,\n })),\n }\n}\n\nfunction summarizeDoctor(doctor: Record<string, any>): string {\n return (doctor.checks || []).filter((item: any) => !item.passed)\n .map((item: any) => `${item.id}:${item.detail}`).join('; ') || 'not ready'\n}\n\nfunction extractMarker(text: string): string {\n return text.match(/\\[DTA-LAB-[^\\]\\r\\n]{1,180}\\]/u)?.[0] || ''\n}\n\nfunction fileHash(path: string): string {\n return existsSync(path) ? digest(readFileSync(path).toString('base64')) : ''\n}\n\nfunction readJsonFile(path: string, label: string): unknown {\n try { return JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`${label} 不是合法 JSON: ${(error as Error).message}`) }\n}\n\nfunction writeJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\n const temporary = `${path}.${process.pid}.${Date.now()}.tmp`\n writeFileSync(temporary, JSON.stringify(value, null, 2) + '\\n', { flag: 'wx' })\n renameSync(temporary, path)\n}\n\nfunction safeInside(\n root: string,\n value: string,\n mustExist: boolean,\n label: string,\n): string {\n const rootReal = realpathSync(resolve(root))\n const candidate = resolve(rootReal, value)\n const rel = relative(rootReal, candidate)\n if (rel === '..' || rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`)) {\n throw new Error(`${label} 必须位于 Workspace 内: ${value}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`${label} 不存在: ${value}`)\n assertNoSymlinkAncestors(rootReal, candidate, label)\n if (existsSync(candidate)) {\n if (lstatSync(candidate).isSymbolicLink()) throw new Error(`${label} 不允许符号链接: ${value}`)\n const actual = realpathSync(candidate)\n const actualRel = relative(rootReal, actual)\n if (actualRel === '..' || actualRel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`)) {\n throw new Error(`${label} 真实路径越界: ${value}`)\n }\n return actual\n }\n return candidate\n}\n\nfunction safeEvidenceRoot(workspace: string, value: string): string {\n if (!String(value || '').trim() || value.split(/[\\\\/]/).includes('..')) {\n throw new Error('evidenceRoot 非法')\n }\n const target = safeInside(workspace, value, false, 'evidenceRoot')\n const rel = relative(realpathSync(resolve(workspace)), target).split('\\\\').join('/')\n if (!rel.startsWith('.dingtalk-agent/')) {\n throw new Error('personal-event 原始证据必须位于 Workspace 的 gitignored .dingtalk-agent/ 下')\n }\n return target\n}\n\nfunction assertNoSymlinkAncestors(root: string, path: string, label: string): void {\n const rel = relative(resolve(root), resolve(path))\n let current = resolve(root)\n for (const part of rel.split(/[\\\\/]/).filter(Boolean)) {\n current = join(current, part)\n if (!existsSync(current)) break\n if (lstatSync(current).isSymbolicLink()) {\n throw new Error(`${label} 不允许穿过符号链接`)\n }\n }\n}\n\nfunction safeName(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'case'\n}\n\nfunction findString(value: unknown, keys: string[]): string {\n if (!value || typeof value !== 'object') return ''\n for (const key of keys) {\n const found = (value as Record<string, unknown>)[key]\n if (found !== undefined && found !== null && String(found).trim()) return String(found).trim()\n }\n for (const child of Object.values(value as Record<string, unknown>)) {\n const found = findString(child, keys)\n if (found) return found\n }\n return ''\n}\n"]}