@xdxer/dingtalk-agent 0.1.4 → 0.1.5-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 (186) hide show
  1. package/CHANGELOG.md +232 -0
  2. package/README.en.md +115 -89
  3. package/README.md +111 -86
  4. package/dist/bin/dingtalk-agent.js +742 -152
  5. package/dist/bin/dingtalk-agent.js.map +1 -1
  6. package/dist/src/actions.js +3 -2
  7. package/dist/src/actions.js.map +1 -1
  8. package/dist/src/agent-audit.js +202 -85
  9. package/dist/src/agent-audit.js.map +1 -1
  10. package/dist/src/agent-definition.js +7 -3
  11. package/dist/src/agent-definition.js.map +1 -1
  12. package/dist/src/agent-enhance.js +51 -32
  13. package/dist/src/agent-enhance.js.map +1 -1
  14. package/dist/src/agent-platform.js +4 -4
  15. package/dist/src/agent-platform.js.map +1 -1
  16. package/dist/src/bootstrap.js +6 -2
  17. package/dist/src/bootstrap.js.map +1 -1
  18. package/dist/src/development-workspace.js +210 -34
  19. package/dist/src/development-workspace.js.map +1 -1
  20. package/dist/src/doctor.js +65 -9
  21. package/dist/src/doctor.js.map +1 -1
  22. package/dist/src/dws.js +67 -3
  23. package/dist/src/dws.js.map +1 -1
  24. package/dist/src/init.js +2 -1
  25. package/dist/src/init.js.map +1 -1
  26. package/dist/src/memory/noop-receipt.js +306 -0
  27. package/dist/src/memory/noop-receipt.js.map +1 -0
  28. package/dist/src/memory/operational.js +27 -3
  29. package/dist/src/memory/operational.js.map +1 -1
  30. package/dist/src/memory/remote-state.js +2 -1
  31. package/dist/src/memory/remote-state.js.map +1 -1
  32. package/dist/src/multica-deploy.js +692 -125
  33. package/dist/src/multica-deploy.js.map +1 -1
  34. package/dist/src/multica-provider.js +303 -25
  35. package/dist/src/multica-provider.js.map +1 -1
  36. package/dist/src/multica-runtime-vocabulary.js +110 -0
  37. package/dist/src/multica-runtime-vocabulary.js.map +1 -0
  38. package/dist/src/opencode-evals.js +6 -6
  39. package/dist/src/opencode-evals.js.map +1 -1
  40. package/dist/src/opencode-provider.js +21 -7
  41. package/dist/src/opencode-provider.js.map +1 -1
  42. package/dist/src/opencode-workspace.js +3 -3
  43. package/dist/src/opencode-workspace.js.map +1 -1
  44. package/dist/src/personal-event-evals.js +4 -2
  45. package/dist/src/personal-event-evals.js.map +1 -1
  46. package/dist/src/promotion.js +2 -1
  47. package/dist/src/promotion.js.map +1 -1
  48. package/dist/src/remote-semantic-state-live-evals.js +14 -8
  49. package/dist/src/remote-semantic-state-live-evals.js.map +1 -1
  50. package/dist/src/remote-state-evals.js +2 -2
  51. package/dist/src/remote-state-evals.js.map +1 -1
  52. package/dist/src/robot-evals.js +3 -3
  53. package/dist/src/robot-evals.js.map +1 -1
  54. package/dist/src/schedule-plan.js +380 -0
  55. package/dist/src/schedule-plan.js.map +1 -0
  56. package/dist/src/sessions.js +1 -1
  57. package/dist/src/sessions.js.map +1 -1
  58. package/dist/src/skill-manager.js +145 -13
  59. package/dist/src/skill-manager.js.map +1 -1
  60. package/dist/src/skills.js +2 -0
  61. package/dist/src/skills.js.map +1 -1
  62. package/dist/src/tui.js +369 -0
  63. package/dist/src/tui.js.map +1 -0
  64. package/dist/src/upgrade.js +113 -33
  65. package/dist/src/upgrade.js.map +1 -1
  66. package/dist/src/waits.js +2 -1
  67. package/dist/src/waits.js.map +1 -1
  68. package/dist/src/workspace.js +12 -7
  69. package/dist/src/workspace.js.map +1 -1
  70. package/docs/AGENT-IN-PRODUCTION.md +255 -0
  71. package/docs/ARCHITECTURE.md +366 -0
  72. package/docs/INSTALLATION.md +8 -8
  73. package/docs/PLATFORM-GUARDRAILS.md +188 -0
  74. package/docs/PRIOR-ART.md +126 -0
  75. package/docs/SELF-TEST.md +182 -0
  76. package/docs/architecture/agent-platform-connection-layer.svg +120 -0
  77. package/docs/architecture/digital-employee-composition.svg +92 -0
  78. package/docs/architecture/dingtalk-agent-architecture.svg +125 -0
  79. package/docs/assets/digital-employee-at-work.svg +77 -0
  80. package/docs/schemas/multica-deployment-plan.schema.json +3 -1
  81. package/docs/schemas/multica-deployment-receipt.schema.json +17 -3
  82. package/docs/schemas/multica-deployment-status.schema.json +6 -2
  83. package/docs/schemas/multica-workspace-inspection.schema.json +16 -0
  84. package/docs/schemas/multica-workspace-run-plan.schema.json +31 -0
  85. package/docs/schemas/multica-workspace-run.schema.json +161 -0
  86. package/docs/schemas/multica-workspace-status.schema.json +2 -0
  87. package/docs/schemas/project.schema.json +54 -3
  88. package/docs/schemas/workspace-scaffold.schema.json +38 -0
  89. package/examples/agents/README.md +45 -0
  90. package/examples/agents/fde-coach/AGENTS.md +2 -25
  91. package/examples/agents/fde-coach/agent/AGENTS.md +35 -0
  92. package/examples/agents/fde-coach/agent.bindings.json +10 -0
  93. package/examples/agents/release-manager/AGENTS.md +2 -25
  94. package/examples/agents/release-manager/agent/AGENTS.md +35 -0
  95. package/examples/agents/release-manager/agent.bindings.json +10 -0
  96. package/lab/agent-eval/catalog.json +5 -5
  97. package/lab/agent-eval/classic-failures.json +4 -4
  98. package/lab/agent-eval/completion-gate-regression.json +9 -9
  99. package/lab/agent-eval/personal-event-live.example.json +3 -3
  100. package/lab/agent-eval/remote-semantic-state-live.example.json +1 -1
  101. package/lab/agent-eval/workspace/opencode.json +2 -2
  102. package/lab/project-workspace/fake-multica-provider.mjs +171 -17
  103. package/lab/project-workspace/multica-deploy.fixture.json +2 -2
  104. package/lab/project-workspace/multica-readonly.fixture.json +4 -16
  105. package/lab/project-workspace/opencode-provider-suite.json +3 -3
  106. package/lab/project-workspace/project.fixture.json +2 -6
  107. package/lab/robot-eval/suite.json +1 -1
  108. package/lab/robot-eval/workspace/AGENTS.md +1 -1
  109. package/lab/robot-eval/workspace/opencode.json +2 -2
  110. package/lab/schemas/personal-event-eval.schema.json +1 -1
  111. package/package.json +18 -11
  112. package/skills/README.md +10 -8
  113. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/SKILL.md +49 -24
  114. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/AGENTS.template.md +1 -1
  115. package/skills/core/dta-agent-compose/assets/REPOSITORY.template.md +10 -0
  116. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +2 -2
  117. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.local.template.json +2 -2
  118. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/hosts/opencode/opencode.template.json +3 -2
  119. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/evals/evals.json +4 -4
  120. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/agent-definition-contract.md +7 -7
  121. package/skills/core/dta-agent-compose/references/drive-and-schedules.md +166 -0
  122. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/host-loading-contract.md +11 -13
  123. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/claude-code.md +13 -12
  124. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/opencode.md +14 -13
  125. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/SKILL.md +28 -3
  126. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/assets/eval-catalog.template.json +1 -1
  127. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/evals/evals.json +1 -1
  128. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/eval-topology.md +3 -3
  129. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/interactive-debug-channels.md +10 -4
  130. package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/SKILL.md +21 -5
  131. package/skills/core/dta-basic-behavior/references/event-to-behavior.md +38 -0
  132. package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/memory-and-evolution.md +3 -1
  133. package/skills/core/dta-basic-behavior/references/perception-and-gates.md +87 -0
  134. package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/risk-authority-and-privacy.md +12 -0
  135. package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/truth-and-recovery.md +4 -2
  136. package/skills/core/dta-people-group-memory/COMPLETENESS.md +36 -0
  137. package/skills/core/dta-people-group-memory/SKILL.md +69 -0
  138. package/skills/core/dta-people-group-memory/references/adapters.md +273 -0
  139. package/skills/core/dta-people-group-memory/references/assembly-guidance.md +40 -0
  140. package/skills/core/dta-people-group-memory/references/binding.md +110 -0
  141. package/skills/core/dta-people-group-memory/references/cold-start.md +70 -0
  142. package/skills/core/dta-people-group-memory/references/config-binding.md +89 -0
  143. package/skills/core/dta-people-group-memory/references/consent-and-visibility.md +83 -0
  144. package/skills/core/dta-people-group-memory/references/consolidation.md +162 -0
  145. package/skills/core/dta-people-group-memory/references/event-ingest.md +103 -0
  146. package/skills/core/dta-people-group-memory/references/guided-setup.md +70 -0
  147. package/skills/core/dta-people-group-memory/references/model.md +148 -0
  148. package/skills/core/dta-people-group-memory/references/storage-port.md +107 -0
  149. package/skills/platforms/deap/PLATFORM.md +30 -1
  150. package/skills/platforms/multica-dingtalk/PLATFORM.md +35 -9
  151. package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/SKILL.md +10 -8
  152. package/skills/platforms/multica-dingtalk/dta-deploy-multica/references/multica-deployment-contract.md +67 -0
  153. package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/SKILL.md +81 -11
  154. package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/bootstrap.sh +2 -2
  155. package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/multica_ext.py +264 -16
  156. package/dist/src/map.js +0 -157
  157. package/dist/src/map.js.map +0 -1
  158. package/docs/SECOND-AGENT-ACCEPTANCE.md +0 -62
  159. package/docs/architecture/agent-memory-topology.png +0 -0
  160. package/docs/architecture/agent-memory-topology.svg +0 -132
  161. package/docs/architecture/dingtalk-agent-blueprint.png +0 -0
  162. package/docs/architecture/durable-async-agent-runtime.png +0 -0
  163. package/docs/architecture/general-agent-kernel-topology.png +0 -0
  164. package/docs/architecture/provider-bound-development-workspace.png +0 -0
  165. package/docs/architecture/task-completion-gate.png +0 -0
  166. package/docs/assets/agent-delivery-lifecycle.svg +0 -103
  167. package/skills/core/dingtalk-basic-behavior/references/event-to-behavior.md +0 -24
  168. package/skills/core/dingtalk-basic-behavior/references/perception-and-gates.md +0 -28
  169. package/skills/platforms/deap/README.md +0 -3
  170. package/skills/platforms/multica-dingtalk/dingtalk-agent-boot-multica/SKILL.md +0 -40
  171. package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/references/multica-deployment-contract.md +0 -49
  172. /package/examples/agents/fde-coach/{skills → agent/skills}/fde-coach/SKILL.md +0 -0
  173. /package/examples/agents/release-manager/{skills → agent/skills}/release-manager/SKILL.md +0 -0
  174. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/role-skill.template.md +0 -0
  175. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/storage-routing.md +0 -0
  176. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/evidence-contract.md +0 -0
  177. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/failure-to-case.md +0 -0
  178. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/local-connector-smoke.md +0 -0
  179. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/scenario-taxonomy.md +0 -0
  180. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/storage-modes.md +0 -0
  181. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
  182. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/task-checkpoint.json +0 -0
  183. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/action-contract.md +0 -0
  184. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/runtime-modes.md +0 -0
  185. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/task-lifecycle.md +0 -0
  186. /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/promotion-observation-contract.md +0 -0
@@ -1 +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"]}
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 { GLOBAL_SKILL_NAME, isBasicSkillName } from './skill-manager.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) ||\n !suite.requiredSkills.some((item: unknown) => isBasicSkillName(String(item || '').trim())) ||\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 必须包含 ${GLOBAL_SKILL_NAME}`)\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"]}
@@ -613,7 +613,8 @@ function emptyDeploymentPlan(target) {
613
613
  deploymentHash: emptyHash(), expected: {
614
614
  workspaceId: '', runtimeId: '', agentId: '', agentName: '', skills: [],
615
615
  definitionHash: emptyHash(), instructionsHash: emptyHash(),
616
- }, operations: [], writeBudget: { forward: 0, rollback: 0 }, blocking: ['unavailable'],
616
+ }, rebindRuntime: false,
617
+ operations: [], writeBudget: { forward: 0, rollback: 0 }, blocking: ['unavailable'],
617
618
  requiresPlanId: true, requiresExplicitYes: true, remoteRead: false, remoteWrite: false,
618
619
  triggerWrite: false, sideEffect: false, dingtalkSideEffect: false,
619
620
  };