@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
@@ -12,6 +12,7 @@ import { verifyPreparedDefinition } from './agent-definition.js';
12
12
  import { verifyEnrichedInvocation } from './perception.js';
13
13
  import { verifyResponseGate } from './response-gate.js';
14
14
  import { acquireSessionEffectLock, armWait, completeWaitFromReceipt, markWaitTransportAccepted, reconcileWaitFromReceipt, } from './waits.js';
15
+ import { err } from './tui.js';
15
16
  const OUTWARD = new Set(['ack', 'reply', 'ask']);
16
17
  const TERMINAL = new Set(['reply', 'ask', 'silence']);
17
18
  const KINDS = new Set(['ack', 'reply', 'ask', 'silence']);
@@ -602,7 +603,7 @@ function persistArtifact(context, actionPath, name, value) {
602
603
  writeJsonAtomic(join(mirrorDir, name), value);
603
604
  }
604
605
  catch (e) {
605
- console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`);
606
+ console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`));
606
607
  }
607
608
  }
608
609
  function persistReceipt(context, actionPath, receipt) {
@@ -614,7 +615,7 @@ function mirrorJson(path, value) {
614
615
  writeJsonAtomic(path, value);
615
616
  }
616
617
  catch (e) {
617
- console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`);
618
+ console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`));
618
619
  }
619
620
  }
620
621
  function transportName(kind) {
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["// Basic Behavior 的四个原子动作(TypeScript source)。\n// Sandbox 中的 context/ 是可读投影;真正的 target/profile/policy/state 来自 sandbox 外 event index。\n\nimport { existsSync, mkdirSync, realpathSync, readdirSync } from 'node:fs'\nimport { dirname, join, resolve, parse, basename } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { digest, stableStringify } from './events.js'\nimport {\n acquireControlLock, acquireExecutionLock, readJson, writeJsonAtomic,\n} from './sessions.js'\nimport * as cfgmod from './config.js'\nimport * as dws from './dws.js'\nimport { verifySkillSnapshot } from './skills.js'\nimport { verifyPreparedDefinition } from './agent-definition.js'\nimport { verifyEnrichedInvocation } from './perception.js'\nimport { verifyResponseGate } from './response-gate.js'\nimport {\n acquireSessionEffectLock, armWait, completeWaitFromReceipt,\n markWaitTransportAccepted, reconcileWaitFromReceipt,\n} from './waits.js'\n\nconst OUTWARD = new Set(['ack', 'reply', 'ask'])\nconst TERMINAL = new Set(['reply', 'ask', 'silence'])\nconst KINDS = new Set(['ack', 'reply', 'ask', 'silence'])\nconst SILENCE_REASONS = new Set([\n 'unmentioned', 'already_answered', 'no_value', 'policy_denied', 'unsupported',\n 'heartbeat_noop',\n])\n\nclass ActionUncertainError extends Error {\n receipt: Record<string, any>\n\n constructor(message: string, receipt: Record<string, any>) {\n super(message)\n this.name = 'ActionUncertainError'\n this.receipt = receipt\n }\n}\n\nexport function findRun(start = process.cwd(), explicit = '') {\n const picked = explicit || process.env.DTA_RUN || start\n let dir = resolve(picked)\n while (true) {\n if (existsSync(join(dir, 'run.json'))) return dir\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) break\n dir = parent\n }\n throw new Error('找不到当前 Run;请在 prepare 返回的 cwd 中执行,或设置 DTA_RUN/--run')\n}\n\nexport function previewAction(runPath, kind, options = {}) {\n const context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const nextState = validate(context, kind)\n return {\n type: 'dingtalk-agent.action.preview',\n runId: context.run.id,\n kind,\n fromState: context.run.state,\n toState: nextState,\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n profile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n payload,\n authorityHash: context.index.authorityHash,\n persisted: false,\n sideEffect: false,\n }\n}\n\nexport function executeAction(runPath, kind, options = {}) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n let context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const actionId = `act_${digest(`${context.run.id}\\0${kind}\\0${JSON.stringify(payload)}`).slice(0, 20)}`\n let actionPath = join(context.controlActionRoot, actionId)\n let receiptPath = join(actionPath, 'receipt.json')\n\n // Session effect lock 把 cancel 与外部副作用线性化;先拿到锁的一方定义先后。\n // event execution lock 仍负责同一个 Run 的 Action 幂等,control lock 只做短时 RMW。\n const releaseSessionEffect = acquireSessionEffectLock(context.root, context.sessionPath)\n try {\n const release = acquireExecutionLock(context.indexPath)\n try {\n context = loadContext(runPath)\n reconcileReceipts(context)\n context = loadContext(runPath)\n actionPath = join(context.controlActionRoot, actionId)\n receiptPath = join(actionPath, 'receipt.json')\n if (existsSync(receiptPath)) {\n const receipt = readJson(receiptPath)\n reconcileReceiptWait(context, receipt)\n return replayReceipt(context, receipt)\n }\n assertNoOtherUnresolvedAttempt(context, actionId)\n const nextState = validate(context, kind)\n mkdirSync(actionPath, { recursive: true })\n const intentPath = join(actionPath, 'intent.json')\n const attemptPath = join(actionPath, 'attempt.json')\n let intent\n if (existsSync(intentPath)) {\n intent = readJson(intentPath)\n if (intent.kind !== kind || JSON.stringify(intent.payload) !== JSON.stringify(payload)) {\n throw new Error(`Action intent 碰撞: ${actionId}`)\n }\n } else {\n intent = {\n $schema: 'dingtalk-agent/action-intent@1',\n id: actionId,\n runId: context.run.id,\n kind,\n createdAt: new Date().toISOString(),\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n dwsProfile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n uuid: OUTWARD.has(kind) ? randomUUID() : null,\n payload,\n authorityHash: context.index.authorityHash,\n }\n persistArtifact(context, actionPath, 'intent.json', intent)\n }\n\n if (kind === 'silence') {\n const receipt = finish(context, intent, nextState, {\n outcome: 'confirmed', verified: true, verification: 'local-no-side-effect',\n })\n persistReceipt(context, actionPath, receipt)\n completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n\n verifyExecutionIdentity(context, intent, actionPath)\n const wait = kind === 'ask' ? ensureAskWait(context, actionId, payload.text) : null\n\n if (kind === 'ack' && existsSync(attemptPath)) {\n const receipt = uncertain(context, intent,\n 'ack 已有 attempt 但没有 receipt;表情动作无服务端幂等键,拒绝盲重试')\n persistReceipt(context, actionPath, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n if (!existsSync(attemptPath)) {\n persistArtifact(context, actionPath, 'attempt.json', {\n actionId, startedAt: new Date().toISOString(),\n })\n }\n\n let result\n let checked\n try {\n const transportResultPath = join(actionPath, 'transport-result.json')\n if (existsSync(transportResultPath)) {\n // DWS 已返回且结果已落盘时,从本地继续验证;绝不为了补 Receipt 再发一次。\n result = readJson(transportResultPath)\n } else {\n result = kind === 'ack'\n ? dws.ackMessage(context.target, {\n emoji: payload.emoji, profile: intent.dwsProfile,\n })\n : dws.replyMessage(context.target, payload.text, {\n uuid: intent.uuid, profile: intent.dwsProfile,\n })\n persistArtifact(context, actionPath, 'transport-result.json', result)\n }\n if (kind === 'ask') markWaitTransportAccepted(\n context.root, cfgmod.must(context.root), wait, result)\n checked = verify(kind, context.target, result, intent.dwsProfile, payload.text || '')\n if (checked.data !== undefined) {\n persistArtifact(context, actionPath, 'verification.json', checked.data)\n }\n } catch (e) {\n const receipt = uncertain(context, intent, String(e.message || e))\n persistReceipt(context, actionPath, receipt)\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n projectReceipt(context, receipt)\n throw new ActionUncertainError(\n `动作结果不确定,禁止自动重发;action=${actionId}: ${e.message || e}`,\n receipt,\n )\n }\n\n const receipt = finish(context, intent, nextState, checked)\n persistReceipt(context, actionPath, receipt) // 事实先落盘\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n if (kind === 'reply') completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt) // 再更新 control/run 投影\n return receipt\n } finally {\n release()\n }\n } finally {\n releaseSessionEffect()\n }\n}\n\n/**\n * 权威数据只从 event index 读取。Run 目录里的静态上下文发生漂移时 fail closed;\n * 动态 run.json 只是可修复投影,不能反过来阻塞已落盘的 Receipt。\n * 这也让 --run /任意伪造目录 无法获得 DWS 外发能力。\n */\nfunction loadContext(runPath) {\n const actualRunPath = realpathSync(resolve(runPath))\n const projection = readJson(join(actualRunPath, 'run.json'))\n const root = process.env.DTA_ROOT\n ? resolve(process.env.DTA_ROOT)\n : cfgmod.findRoot(actualRunPath)\n if (!root) throw new Error('找不到 control store;act 必须由能访问 DTA_ROOT 的宿主侧执行')\n const cfg = cfgmod.must(root)\n const indexRoot = resolve(root, cfg.runtime?.eventIndexRoot || '.dingtalk-agent/event-index')\n const indexPath = join(indexRoot, `${digest(projection.eventId)}.json`)\n if (!existsSync(indexPath)) throw new Error('当前 Run 不在 event index 中;拒绝任意/伪造 --run')\n const index = readJson(indexPath)\n if (!index.authority || !index.control ||\n digest(stableStringify(index.authority)) !== index.authorityHash) {\n throw new Error('event index 的权威快照损坏,禁止执行')\n }\n if (realpathSync(index.runPath) !== actualRunPath ||\n index.runId !== index.control.id || index.eventId !== projection.eventId) {\n throw new Error('Run 与 event index 身份不一致,拒绝执行')\n }\n\n if (stableStringify(projection) !== stableStringify(index.control)) {\n mirrorJson(join(actualRunPath, 'run.json'), index.control)\n }\n const drift: string[] = []\n const targetProjection = readJson(join(actualRunPath, 'context', 'reply-target.json'))\n if (stableStringify(targetProjection) !== stableStringify(index.authority.replyTarget)) drift.push('reply-target.json')\n const policyProjection = readJson(join(actualRunPath, 'policy', 'allowed-actions.json'))\n if (stableStringify(policyProjection) !== stableStringify(index.authority.policy)) drift.push('allowed-actions.json')\n const fieldProjection = readJson(join(actualRunPath, 'context', 'field.json'))\n if (stableStringify(fieldProjection.dws || {}) !== stableStringify(index.authority.dws || {})) drift.push('field.dws')\n if (stableStringify(fieldProjection.transport || {}) !== stableStringify(index.authority.transport || {})) drift.push('field.transport')\n const behaviorProjection = readJson(join(actualRunPath, 'context', 'behavior.json'))\n if (behaviorProjection.hash !== index.authority.behaviorHash) drift.push('behavior.json')\n const eventProjection = readJson(join(actualRunPath, 'event.json'))\n if (digest(stableStringify(eventProjection)) !== index.authority.eventHash) drift.push('event.json')\n if (index.authority.resume) {\n const resumeProjection = readJson(join(actualRunPath, 'context', 'resume.json'))\n if (stableStringify(resumeProjection) !== stableStringify(index.authority.resume)) {\n drift.push('resume.json')\n }\n }\n if (index.authority.invocation) {\n const invocationProjection = readJson(join(actualRunPath, 'context', 'invocation.json'))\n if (stableStringify(invocationProjection) !== stableStringify(index.authority.invocation)) {\n drift.push('invocation.json')\n }\n }\n try {\n const enriched = readJson(join(actualRunPath, 'context', 'enriched-invocation.json'))\n verifyEnrichedInvocation(enriched, index.authority.enrichedInvocationHash)\n } catch (e) { drift.push(`enriched-invocation(${e.message})`) }\n try {\n const responseGate = readJson(join(actualRunPath, 'context', 'response-gate.json'))\n verifyResponseGate(responseGate, index.authority.responseGate?.hash || '')\n if (stableStringify(responseGate) !== stableStringify(index.authority.responseGate)) {\n drift.push('response-gate.json')\n }\n } catch (e) { drift.push(`response-gate(${e.message})`) }\n try { verifySkillSnapshot(actualRunPath, index.authority.skillManifestHash) }\n catch (e) { drift.push(`skill-snapshot(${e.message})`) }\n try { verifyPreparedDefinition(actualRunPath, index.authority.agentDefinitionHash) }\n catch (e) { drift.push(`agent-definition(${e.message})`) }\n if (drift.length) throw new Error(`Sandbox 权威投影被修改: ${drift.join(', ')};禁止执行`)\n\n const session = readJson(join(index.sessionPath, 'session.json'))\n const currentGeneration = validGeneration(session.generation, 'session.json')\n const runGeneration = validGeneration(\n index.authority.sessionGeneration ?? index.control.sessionGeneration, 'event index')\n if (currentGeneration !== runGeneration) {\n throw new Error(\n `Session generation 已失效:run=${runGeneration}, current=${currentGeneration};` +\n '该事项已被 /stop 或 /cancel 取消,禁止继续副作用')\n }\n\n const controlActionRoot = join(indexRoot, 'actions', index.runId)\n mkdirSync(controlActionRoot, { recursive: true })\n return {\n run: index.control,\n field: { dws: index.authority.dws || {}, transport: index.authority.transport || {} },\n policy: index.authority.policy,\n target: index.authority.replyTarget,\n authority: index.authority,\n index,\n indexPath,\n controlActionRoot,\n runPath: actualRunPath,\n sessionPath: index.sessionPath,\n event: eventProjection,\n root,\n }\n}\n\nfunction ensureAskWait(context, actionId, questionText = '') {\n return armWait(context.root, cfgmod.must(context.root), {\n fieldId: context.run.fieldId,\n sessionId: context.run.sessionId,\n sessionPath: context.sessionPath,\n sourceRunId: context.run.id,\n actionId,\n questionText,\n event: context.event,\n target: context.target,\n })\n}\n\nfunction reconcileAskWait(context, actionId, receipt, questionText = '') {\n const wait = ensureAskWait(context, actionId, questionText)\n return reconcileWaitFromReceipt(context.root, cfgmod.must(context.root), wait, receipt)\n}\n\nfunction reconcileReceiptWait(context, receipt) {\n if (receipt.kind === 'ask') {\n const intentPath = join(context.controlActionRoot, receipt.actionId, 'intent.json')\n const intent = existsSync(intentPath) ? readJson(intentPath) : null\n return reconcileAskWait(context, receipt.actionId, receipt, intent?.payload?.text || '')\n }\n if ((receipt.kind === 'reply' || receipt.kind === 'silence') &&\n receipt.outcome !== 'uncertain') {\n return completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n }\n return null\n}\n\nfunction normalizePayload(kind, options, policy) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n if (kind === 'ack') return { emoji: '收到' }\n if (kind === 'silence') {\n const reason = String(options.reason || 'no_value').trim()\n if (!SILENCE_REASONS.has(reason)) {\n throw new Error(`silence reason 必须是: ${[...SILENCE_REASONS].join(' / ')}`)\n }\n return { reason }\n }\n const text = String(options.text || '').trim()\n if (!text) throw new Error(`${kind} 需要 --text 或 --text-file`)\n const max = Number(policy.limits?.maxTextCharacters || 4000)\n if (text.length > max) throw new Error(`正文 ${text.length} 字,超过 Basic Behavior 上限 ${max}`)\n return { text }\n}\n\nfunction validate(context, kind) {\n const { run, policy, target } = context\n if (!(policy.allowedActions || []).includes(kind)) {\n throw new Error(`事件 ${run.eventKind} 不允许 ${kind};允许: ${(policy.allowedActions || []).join(', ')}`)\n }\n if (OUTWARD.has(kind) && (!target?.conversationId || !target?.messageId || !target?.senderOpenDingTalkId)) {\n throw new Error('Run 没有完整固定回复目标,禁止外发')\n }\n if (OUTWARD.has(kind)) {\n if (context.field.transport.egressOwner !== 'dingtalk-agent') {\n throw new Error(`Field 的出口属于 ${context.field.transport.egressOwner || 'unknown'},禁止 act 外发以避免双发`)\n }\n const profile = context.field.dws.profile || ''\n const expected = context.field.dws.expectedUserId || ''\n if (!profile) throw new Error('Workspace 没有固定 dws.profile,禁止依赖“当前登录身份”外发')\n if (profile.includes(',')) throw new Error('一个 Run 只能固定一个 dws.profile,禁止多组织广播式执行')\n if (!expected) throw new Error('Workspace 没有 expectedUserId,无法核对 DWS 实际执行身份')\n }\n const transition = policy.stateMachine?.transitions?.[run.state]?.[kind]\n if (!transition) throw new Error(`状态 ${run.state} 不接受动作 ${kind}`)\n const counts = run.actionCounts || {}\n const limits = policy.limits || {}\n if (kind === 'ack' && Number(counts.ack || 0) >= Number(limits.maxAckPerRun || 1)) {\n throw new Error('本 Run 已 ack,禁止重复刷表情')\n }\n if (OUTWARD.has(kind) && Number(counts.outward || 0) >= Number(limits.maxOutwardActionsPerRun || 2)) {\n throw new Error('本 Run 的外发预算已用完')\n }\n if (TERMINAL.has(kind) && Number(counts.terminal || 0) >= Number(limits.maxTerminalMessagesPerRun || 1)) {\n throw new Error('本 Run 已产生终态动作')\n }\n return transition\n}\n\nfunction verifyExecutionIdentity(context, intent, actionPath) {\n // profile 同名重新登录会换掉真实凭据身份;因此每个外发 Action 都现查,不跨 Action 缓存。\n const data = dws.getSelf(intent.dwsProfile)\n const userId = String(findValue(data, ['userId', 'user_id', 'userid']) || '')\n if (!userId) throw new Error('dws contact user get-self 没有返回 userId,禁止外发')\n if (userId !== String(intent.expectedUserId)) {\n throw new Error(`DWS 执行身份不符:expected=${intent.expectedUserId}, actual=${userId}`)\n }\n const verified = { profile: intent.dwsProfile, userId, verifiedAt: new Date().toISOString(), data }\n persistArtifact(context, actionPath, 'identity.json', verified)\n return verified\n}\n\nfunction verify(kind, target, result, profile, expectedText = '') {\n if (kind === 'ack') {\n const data = dws.readMessageEmotions(target.messageId, profile)\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reaction-readback-cannot-prove-current-actor', data }\n }\n const taskId = findValue(result, ['openTaskId', 'open_task_id'])\n if (taskId) {\n const sendStatus = dws.querySendStatus(taskId, profile)\n const sentId = findValue(sendStatus, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (!sentId) {\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'query-send-status-without-message-id', data: { sendStatus } }\n }\n return verifyMessageReadback(sentId, expectedText, profile, { sendStatus })\n }\n const messageId = findValue(result, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (messageId) {\n return verifyMessageReadback(messageId, expectedText, profile)\n }\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reply-result-has-no-queryable-id', data: result }\n}\n\n/**\n * 发送接口返回 messageId 只证明平台受理了一个对象;独立回读还必须同时看到\n * 同一 messageId 和本次正文。否则旧消息、空壳对象或被改写正文都不能签发\n * confirmed Receipt。\n */\nfunction verifyMessageReadback(\n messageId,\n expectedText,\n profile,\n prior: Record<string, unknown> = {},\n) {\n const messageReadback = dws.readMessagesByIds(messageId, profile)\n const seenId = containsScalar(messageReadback, String(messageId))\n const seenText = Boolean(expectedText) && containsExactText(messageReadback, String(expectedText))\n const data = { ...prior, messageReadback }\n return seenId && seenText\n ? {\n outcome: 'confirmed', verified: true,\n verification: Object.keys(prior).length\n ? 'query-send-status-plus-message-readback'\n : 'message-id-plus-text-readback',\n messageId: String(messageId),\n data,\n }\n : {\n outcome: 'accepted-unverified', verified: false,\n verification: !seenId ? 'message-readback-id-miss' : 'message-readback-text-miss',\n messageId: String(messageId),\n data,\n }\n}\n\nfunction containsScalar(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value !== 'object') return String(value) === expected\n if (Array.isArray(value)) return value.some((item) => containsScalar(item, expected))\n return Object.values(value).some((item) => containsScalar(item, expected))\n}\n\nfunction containsExactText(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value === 'string') {\n if (value === expected) return true\n try {\n const parsed = JSON.parse(value)\n return parsed !== value && containsExactText(parsed, expected)\n } catch { return false }\n }\n if (Array.isArray(value)) return value.some((item) => containsExactText(item, expected))\n if (typeof value === 'object') {\n return Object.values(value).some((item) => containsExactText(item, expected))\n }\n return false\n}\n\nfunction finish(context, intent, nextState, checked) {\n return {\n $schema: 'dingtalk-agent/action-receipt@1',\n actionId: intent.id,\n runId: intent.runId,\n kind: intent.kind,\n completedAt: new Date().toISOString(),\n fromState: context.run.state,\n toState: nextState,\n ...checked,\n }\n}\n\nfunction uncertain(context, intent, reason) {\n return finish(context, intent, 'needs-reconciliation', {\n outcome: 'uncertain', verified: false, verification: reason,\n })\n}\n\nfunction replayReceipt(context, receipt) {\n projectReceipt(context, receipt)\n return { ...receipt, duplicate: true }\n}\n\nfunction projectReceipt(context, receipt) {\n const release = acquireControlLock(context.indexPath)\n try {\n const latest = readJson(context.indexPath)\n if (digest(stableStringify(latest.authority)) !== latest.authorityHash) {\n throw new Error('投影 Receipt 时 authority hash 不一致')\n }\n const current = latest.control\n const applied = new Set(current.appliedActionIds || [])\n if (applied.has(receipt.actionId)) {\n mirrorJson(join(context.runPath, 'run.json'), current)\n context.index = latest\n context.run = current\n return current\n }\n // 兼容旧 control:若计数已表明该 kind 投影过,只回填 actionId,不重复计数/转移。\n if (Number(current.actionCounts?.[receipt.kind] || 0) > 0) {\n const next = { ...current, appliedActionIds: [...applied, receipt.actionId] }\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n }\n if (current.state !== receipt.fromState) {\n throw new Error(`Receipt 状态冲突: control=${current.state}, receipt=${receipt.fromState}→${receipt.toState}`)\n }\n const next = {\n ...current,\n updatedAt: receipt.completedAt,\n state: receipt.toState,\n appliedActionIds: [...applied, receipt.actionId],\n }\n bump(next, receipt.kind)\n if (receipt.toState === 'needs-reconciliation') next.status = 'blocked'\n else if (receipt.toState === 'waiting-input') next.status = receipt.verified ? 'waiting-input' : 'waiting-input-unverified'\n else if (receipt.toState === 'ignored') next.status = 'completed'\n else if (receipt.toState === 'completed') next.status = receipt.verified ? 'completed' : 'completed-unverified'\n else next.status = 'active'\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n } finally {\n release()\n }\n}\n\n/** 已有 Receipt 是真值;新动作前先把“Receipt 已落盘、control 未更新”的窗口收敛。 */\nfunction reconcileReceipts(context) {\n const receipts: Array<Record<string, any>> = []\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue\n const path = join(context.controlActionRoot, entry.name, 'receipt.json')\n if (existsSync(path)) receipts.push(readJson(path))\n }\n receipts.sort((a, b) => String(a.completedAt).localeCompare(String(b.completedAt)))\n for (const receipt of receipts) {\n reconcileReceiptWait(context, receipt)\n projectReceipt(context, receipt)\n }\n}\n\n/** 旧 Action 可能已命中 DWS 但尚无 Receipt;此时换文本会生成新 actionId,必须 fail closed。 */\nfunction assertNoOtherUnresolvedAttempt(context, currentActionId) {\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === currentActionId) continue\n const path = join(context.controlActionRoot, entry.name)\n if (existsSync(join(path, 'attempt.json')) && !existsSync(join(path, 'receipt.json'))) {\n throw new Error(`Run 存在未对账 Action ${entry.name};禁止更换正文再外发,请先 reconcile`)\n }\n }\n}\n\nfunction bump(run, kind) {\n run.actionCounts = { ack: 0, reply: 0, ask: 0, silence: 0, outward: 0, terminal: 0,\n ...(run.actionCounts || {}) }\n run.actionCounts[kind]++\n if (OUTWARD.has(kind)) run.actionCounts.outward++\n if (TERMINAL.has(kind)) run.actionCounts.terminal++\n}\n\nfunction persistArtifact(context, actionPath, name, value) {\n writeJsonAtomic(join(actionPath, name), value)\n const mirrorDir = join(context.runPath, 'actions', basename(actionPath))\n try {\n mkdirSync(mirrorDir, { recursive: true })\n writeJsonAtomic(join(mirrorDir, name), value)\n } catch (e) {\n console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`)\n }\n}\n\nfunction persistReceipt(context, actionPath, receipt) {\n persistArtifact(context, actionPath, 'receipt.json', receipt)\n mirrorJson(join(context.runPath, 'receipts', `${receipt.actionId}.json`), receipt)\n}\n\nfunction mirrorJson(path, value) {\n try { writeJsonAtomic(path, value) }\n catch (e) { console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`) }\n}\n\nfunction transportName(kind) {\n if (kind === 'ack') return 'dws.chat.message.add-emoji'\n if (kind === 'reply' || kind === 'ask') return 'dws.chat.message.reply'\n return 'local.silence'\n}\n\nfunction findValue(value, keys) {\n if (!value || typeof value !== 'object') return ''\n for (const key of keys) if (value[key]) return value[key]\n for (const child of Object.values(value)) {\n const found = findValue(child, keys)\n if (found) return found\n }\n return ''\n}\n\nfunction validGeneration(value, label) {\n const n = Number(value ?? 1)\n if (!Number.isInteger(n) || n < 1) throw new Error(`${label} 的 Session generation 非法`)\n return n\n}\n"]}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["// Basic Behavior 的四个原子动作(TypeScript source)。\n// Sandbox 中的 context/ 是可读投影;真正的 target/profile/policy/state 来自 sandbox 外 event index。\n\nimport { existsSync, mkdirSync, realpathSync, readdirSync } from 'node:fs'\nimport { dirname, join, resolve, parse, basename } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { digest, stableStringify } from './events.js'\nimport {\n acquireControlLock, acquireExecutionLock, readJson, writeJsonAtomic,\n} from './sessions.js'\nimport * as cfgmod from './config.js'\nimport * as dws from './dws.js'\nimport { verifySkillSnapshot } from './skills.js'\nimport { verifyPreparedDefinition } from './agent-definition.js'\nimport { verifyEnrichedInvocation } from './perception.js'\nimport { verifyResponseGate } from './response-gate.js'\nimport {\n acquireSessionEffectLock, armWait, completeWaitFromReceipt,\n markWaitTransportAccepted, reconcileWaitFromReceipt,\n} from './waits.js'\nimport { err } from './tui.js'\n\nconst OUTWARD = new Set(['ack', 'reply', 'ask'])\nconst TERMINAL = new Set(['reply', 'ask', 'silence'])\nconst KINDS = new Set(['ack', 'reply', 'ask', 'silence'])\nconst SILENCE_REASONS = new Set([\n 'unmentioned', 'already_answered', 'no_value', 'policy_denied', 'unsupported',\n 'heartbeat_noop',\n])\n\nclass ActionUncertainError extends Error {\n receipt: Record<string, any>\n\n constructor(message: string, receipt: Record<string, any>) {\n super(message)\n this.name = 'ActionUncertainError'\n this.receipt = receipt\n }\n}\n\nexport function findRun(start = process.cwd(), explicit = '') {\n const picked = explicit || process.env.DTA_RUN || start\n let dir = resolve(picked)\n while (true) {\n if (existsSync(join(dir, 'run.json'))) return dir\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) break\n dir = parent\n }\n throw new Error('找不到当前 Run;请在 prepare 返回的 cwd 中执行,或设置 DTA_RUN/--run')\n}\n\nexport function previewAction(runPath, kind, options = {}) {\n const context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const nextState = validate(context, kind)\n return {\n type: 'dingtalk-agent.action.preview',\n runId: context.run.id,\n kind,\n fromState: context.run.state,\n toState: nextState,\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n profile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n payload,\n authorityHash: context.index.authorityHash,\n persisted: false,\n sideEffect: false,\n }\n}\n\nexport function executeAction(runPath, kind, options = {}) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n let context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const actionId = `act_${digest(`${context.run.id}\\0${kind}\\0${JSON.stringify(payload)}`).slice(0, 20)}`\n let actionPath = join(context.controlActionRoot, actionId)\n let receiptPath = join(actionPath, 'receipt.json')\n\n // Session effect lock 把 cancel 与外部副作用线性化;先拿到锁的一方定义先后。\n // event execution lock 仍负责同一个 Run 的 Action 幂等,control lock 只做短时 RMW。\n const releaseSessionEffect = acquireSessionEffectLock(context.root, context.sessionPath)\n try {\n const release = acquireExecutionLock(context.indexPath)\n try {\n context = loadContext(runPath)\n reconcileReceipts(context)\n context = loadContext(runPath)\n actionPath = join(context.controlActionRoot, actionId)\n receiptPath = join(actionPath, 'receipt.json')\n if (existsSync(receiptPath)) {\n const receipt = readJson(receiptPath)\n reconcileReceiptWait(context, receipt)\n return replayReceipt(context, receipt)\n }\n assertNoOtherUnresolvedAttempt(context, actionId)\n const nextState = validate(context, kind)\n mkdirSync(actionPath, { recursive: true })\n const intentPath = join(actionPath, 'intent.json')\n const attemptPath = join(actionPath, 'attempt.json')\n let intent\n if (existsSync(intentPath)) {\n intent = readJson(intentPath)\n if (intent.kind !== kind || JSON.stringify(intent.payload) !== JSON.stringify(payload)) {\n throw new Error(`Action intent 碰撞: ${actionId}`)\n }\n } else {\n intent = {\n $schema: 'dingtalk-agent/action-intent@1',\n id: actionId,\n runId: context.run.id,\n kind,\n createdAt: new Date().toISOString(),\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n dwsProfile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n uuid: OUTWARD.has(kind) ? randomUUID() : null,\n payload,\n authorityHash: context.index.authorityHash,\n }\n persistArtifact(context, actionPath, 'intent.json', intent)\n }\n\n if (kind === 'silence') {\n const receipt = finish(context, intent, nextState, {\n outcome: 'confirmed', verified: true, verification: 'local-no-side-effect',\n })\n persistReceipt(context, actionPath, receipt)\n completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n\n verifyExecutionIdentity(context, intent, actionPath)\n const wait = kind === 'ask' ? ensureAskWait(context, actionId, payload.text) : null\n\n if (kind === 'ack' && existsSync(attemptPath)) {\n const receipt = uncertain(context, intent,\n 'ack 已有 attempt 但没有 receipt;表情动作无服务端幂等键,拒绝盲重试')\n persistReceipt(context, actionPath, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n if (!existsSync(attemptPath)) {\n persistArtifact(context, actionPath, 'attempt.json', {\n actionId, startedAt: new Date().toISOString(),\n })\n }\n\n let result\n let checked\n try {\n const transportResultPath = join(actionPath, 'transport-result.json')\n if (existsSync(transportResultPath)) {\n // DWS 已返回且结果已落盘时,从本地继续验证;绝不为了补 Receipt 再发一次。\n result = readJson(transportResultPath)\n } else {\n result = kind === 'ack'\n ? dws.ackMessage(context.target, {\n emoji: payload.emoji, profile: intent.dwsProfile,\n })\n : dws.replyMessage(context.target, payload.text, {\n uuid: intent.uuid, profile: intent.dwsProfile,\n })\n persistArtifact(context, actionPath, 'transport-result.json', result)\n }\n if (kind === 'ask') markWaitTransportAccepted(\n context.root, cfgmod.must(context.root), wait, result)\n checked = verify(kind, context.target, result, intent.dwsProfile, payload.text || '')\n if (checked.data !== undefined) {\n persistArtifact(context, actionPath, 'verification.json', checked.data)\n }\n } catch (e) {\n const receipt = uncertain(context, intent, String(e.message || e))\n persistReceipt(context, actionPath, receipt)\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n projectReceipt(context, receipt)\n throw new ActionUncertainError(\n `动作结果不确定,禁止自动重发;action=${actionId}: ${e.message || e}`,\n receipt,\n )\n }\n\n const receipt = finish(context, intent, nextState, checked)\n persistReceipt(context, actionPath, receipt) // 事实先落盘\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n if (kind === 'reply') completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt) // 再更新 control/run 投影\n return receipt\n } finally {\n release()\n }\n } finally {\n releaseSessionEffect()\n }\n}\n\n/**\n * 权威数据只从 event index 读取。Run 目录里的静态上下文发生漂移时 fail closed;\n * 动态 run.json 只是可修复投影,不能反过来阻塞已落盘的 Receipt。\n * 这也让 --run /任意伪造目录 无法获得 DWS 外发能力。\n */\nfunction loadContext(runPath) {\n const actualRunPath = realpathSync(resolve(runPath))\n const projection = readJson(join(actualRunPath, 'run.json'))\n const root = process.env.DTA_ROOT\n ? resolve(process.env.DTA_ROOT)\n : cfgmod.findRoot(actualRunPath)\n if (!root) throw new Error('找不到 control store;act 必须由能访问 DTA_ROOT 的宿主侧执行')\n const cfg = cfgmod.must(root)\n const indexRoot = resolve(root, cfg.runtime?.eventIndexRoot || '.dingtalk-agent/event-index')\n const indexPath = join(indexRoot, `${digest(projection.eventId)}.json`)\n if (!existsSync(indexPath)) throw new Error('当前 Run 不在 event index 中;拒绝任意/伪造 --run')\n const index = readJson(indexPath)\n if (!index.authority || !index.control ||\n digest(stableStringify(index.authority)) !== index.authorityHash) {\n throw new Error('event index 的权威快照损坏,禁止执行')\n }\n if (realpathSync(index.runPath) !== actualRunPath ||\n index.runId !== index.control.id || index.eventId !== projection.eventId) {\n throw new Error('Run 与 event index 身份不一致,拒绝执行')\n }\n\n if (stableStringify(projection) !== stableStringify(index.control)) {\n mirrorJson(join(actualRunPath, 'run.json'), index.control)\n }\n const drift: string[] = []\n const targetProjection = readJson(join(actualRunPath, 'context', 'reply-target.json'))\n if (stableStringify(targetProjection) !== stableStringify(index.authority.replyTarget)) drift.push('reply-target.json')\n const policyProjection = readJson(join(actualRunPath, 'policy', 'allowed-actions.json'))\n if (stableStringify(policyProjection) !== stableStringify(index.authority.policy)) drift.push('allowed-actions.json')\n const fieldProjection = readJson(join(actualRunPath, 'context', 'field.json'))\n if (stableStringify(fieldProjection.dws || {}) !== stableStringify(index.authority.dws || {})) drift.push('field.dws')\n if (stableStringify(fieldProjection.transport || {}) !== stableStringify(index.authority.transport || {})) drift.push('field.transport')\n const behaviorProjection = readJson(join(actualRunPath, 'context', 'behavior.json'))\n if (behaviorProjection.hash !== index.authority.behaviorHash) drift.push('behavior.json')\n const eventProjection = readJson(join(actualRunPath, 'event.json'))\n if (digest(stableStringify(eventProjection)) !== index.authority.eventHash) drift.push('event.json')\n if (index.authority.resume) {\n const resumeProjection = readJson(join(actualRunPath, 'context', 'resume.json'))\n if (stableStringify(resumeProjection) !== stableStringify(index.authority.resume)) {\n drift.push('resume.json')\n }\n }\n if (index.authority.invocation) {\n const invocationProjection = readJson(join(actualRunPath, 'context', 'invocation.json'))\n if (stableStringify(invocationProjection) !== stableStringify(index.authority.invocation)) {\n drift.push('invocation.json')\n }\n }\n try {\n const enriched = readJson(join(actualRunPath, 'context', 'enriched-invocation.json'))\n verifyEnrichedInvocation(enriched, index.authority.enrichedInvocationHash)\n } catch (e) { drift.push(`enriched-invocation(${e.message})`) }\n try {\n const responseGate = readJson(join(actualRunPath, 'context', 'response-gate.json'))\n verifyResponseGate(responseGate, index.authority.responseGate?.hash || '')\n if (stableStringify(responseGate) !== stableStringify(index.authority.responseGate)) {\n drift.push('response-gate.json')\n }\n } catch (e) { drift.push(`response-gate(${e.message})`) }\n try { verifySkillSnapshot(actualRunPath, index.authority.skillManifestHash) }\n catch (e) { drift.push(`skill-snapshot(${e.message})`) }\n try { verifyPreparedDefinition(actualRunPath, index.authority.agentDefinitionHash) }\n catch (e) { drift.push(`agent-definition(${e.message})`) }\n if (drift.length) throw new Error(`Sandbox 权威投影被修改: ${drift.join(', ')};禁止执行`)\n\n const session = readJson(join(index.sessionPath, 'session.json'))\n const currentGeneration = validGeneration(session.generation, 'session.json')\n const runGeneration = validGeneration(\n index.authority.sessionGeneration ?? index.control.sessionGeneration, 'event index')\n if (currentGeneration !== runGeneration) {\n throw new Error(\n `Session generation 已失效:run=${runGeneration}, current=${currentGeneration};` +\n '该事项已被 /stop 或 /cancel 取消,禁止继续副作用')\n }\n\n const controlActionRoot = join(indexRoot, 'actions', index.runId)\n mkdirSync(controlActionRoot, { recursive: true })\n return {\n run: index.control,\n field: { dws: index.authority.dws || {}, transport: index.authority.transport || {} },\n policy: index.authority.policy,\n target: index.authority.replyTarget,\n authority: index.authority,\n index,\n indexPath,\n controlActionRoot,\n runPath: actualRunPath,\n sessionPath: index.sessionPath,\n event: eventProjection,\n root,\n }\n}\n\nfunction ensureAskWait(context, actionId, questionText = '') {\n return armWait(context.root, cfgmod.must(context.root), {\n fieldId: context.run.fieldId,\n sessionId: context.run.sessionId,\n sessionPath: context.sessionPath,\n sourceRunId: context.run.id,\n actionId,\n questionText,\n event: context.event,\n target: context.target,\n })\n}\n\nfunction reconcileAskWait(context, actionId, receipt, questionText = '') {\n const wait = ensureAskWait(context, actionId, questionText)\n return reconcileWaitFromReceipt(context.root, cfgmod.must(context.root), wait, receipt)\n}\n\nfunction reconcileReceiptWait(context, receipt) {\n if (receipt.kind === 'ask') {\n const intentPath = join(context.controlActionRoot, receipt.actionId, 'intent.json')\n const intent = existsSync(intentPath) ? readJson(intentPath) : null\n return reconcileAskWait(context, receipt.actionId, receipt, intent?.payload?.text || '')\n }\n if ((receipt.kind === 'reply' || receipt.kind === 'silence') &&\n receipt.outcome !== 'uncertain') {\n return completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n }\n return null\n}\n\nfunction normalizePayload(kind, options, policy) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n if (kind === 'ack') return { emoji: '收到' }\n if (kind === 'silence') {\n const reason = String(options.reason || 'no_value').trim()\n if (!SILENCE_REASONS.has(reason)) {\n throw new Error(`silence reason 必须是: ${[...SILENCE_REASONS].join(' / ')}`)\n }\n return { reason }\n }\n const text = String(options.text || '').trim()\n if (!text) throw new Error(`${kind} 需要 --text 或 --text-file`)\n const max = Number(policy.limits?.maxTextCharacters || 4000)\n if (text.length > max) throw new Error(`正文 ${text.length} 字,超过 Basic Behavior 上限 ${max}`)\n return { text }\n}\n\nfunction validate(context, kind) {\n const { run, policy, target } = context\n if (!(policy.allowedActions || []).includes(kind)) {\n throw new Error(`事件 ${run.eventKind} 不允许 ${kind};允许: ${(policy.allowedActions || []).join(', ')}`)\n }\n if (OUTWARD.has(kind) && (!target?.conversationId || !target?.messageId || !target?.senderOpenDingTalkId)) {\n throw new Error('Run 没有完整固定回复目标,禁止外发')\n }\n if (OUTWARD.has(kind)) {\n if (context.field.transport.egressOwner !== 'dingtalk-agent') {\n throw new Error(`Field 的出口属于 ${context.field.transport.egressOwner || 'unknown'},禁止 act 外发以避免双发`)\n }\n const profile = context.field.dws.profile || ''\n const expected = context.field.dws.expectedUserId || ''\n if (!profile) throw new Error('Workspace 没有固定 dws.profile,禁止依赖“当前登录身份”外发')\n if (profile.includes(',')) throw new Error('一个 Run 只能固定一个 dws.profile,禁止多组织广播式执行')\n if (!expected) throw new Error('Workspace 没有 expectedUserId,无法核对 DWS 实际执行身份')\n }\n const transition = policy.stateMachine?.transitions?.[run.state]?.[kind]\n if (!transition) throw new Error(`状态 ${run.state} 不接受动作 ${kind}`)\n const counts = run.actionCounts || {}\n const limits = policy.limits || {}\n if (kind === 'ack' && Number(counts.ack || 0) >= Number(limits.maxAckPerRun || 1)) {\n throw new Error('本 Run 已 ack,禁止重复刷表情')\n }\n if (OUTWARD.has(kind) && Number(counts.outward || 0) >= Number(limits.maxOutwardActionsPerRun || 2)) {\n throw new Error('本 Run 的外发预算已用完')\n }\n if (TERMINAL.has(kind) && Number(counts.terminal || 0) >= Number(limits.maxTerminalMessagesPerRun || 1)) {\n throw new Error('本 Run 已产生终态动作')\n }\n return transition\n}\n\nfunction verifyExecutionIdentity(context, intent, actionPath) {\n // profile 同名重新登录会换掉真实凭据身份;因此每个外发 Action 都现查,不跨 Action 缓存。\n const data = dws.getSelf(intent.dwsProfile)\n const userId = String(findValue(data, ['userId', 'user_id', 'userid']) || '')\n if (!userId) throw new Error('dws contact user get-self 没有返回 userId,禁止外发')\n if (userId !== String(intent.expectedUserId)) {\n throw new Error(`DWS 执行身份不符:expected=${intent.expectedUserId}, actual=${userId}`)\n }\n const verified = { profile: intent.dwsProfile, userId, verifiedAt: new Date().toISOString(), data }\n persistArtifact(context, actionPath, 'identity.json', verified)\n return verified\n}\n\nfunction verify(kind, target, result, profile, expectedText = '') {\n if (kind === 'ack') {\n const data = dws.readMessageEmotions(target.messageId, profile)\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reaction-readback-cannot-prove-current-actor', data }\n }\n const taskId = findValue(result, ['openTaskId', 'open_task_id'])\n if (taskId) {\n const sendStatus = dws.querySendStatus(taskId, profile)\n const sentId = findValue(sendStatus, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (!sentId) {\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'query-send-status-without-message-id', data: { sendStatus } }\n }\n return verifyMessageReadback(sentId, expectedText, profile, { sendStatus })\n }\n const messageId = findValue(result, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (messageId) {\n return verifyMessageReadback(messageId, expectedText, profile)\n }\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reply-result-has-no-queryable-id', data: result }\n}\n\n/**\n * 发送接口返回 messageId 只证明平台受理了一个对象;独立回读还必须同时看到\n * 同一 messageId 和本次正文。否则旧消息、空壳对象或被改写正文都不能签发\n * confirmed Receipt。\n */\nfunction verifyMessageReadback(\n messageId,\n expectedText,\n profile,\n prior: Record<string, unknown> = {},\n) {\n const messageReadback = dws.readMessagesByIds(messageId, profile)\n const seenId = containsScalar(messageReadback, String(messageId))\n const seenText = Boolean(expectedText) && containsExactText(messageReadback, String(expectedText))\n const data = { ...prior, messageReadback }\n return seenId && seenText\n ? {\n outcome: 'confirmed', verified: true,\n verification: Object.keys(prior).length\n ? 'query-send-status-plus-message-readback'\n : 'message-id-plus-text-readback',\n messageId: String(messageId),\n data,\n }\n : {\n outcome: 'accepted-unverified', verified: false,\n verification: !seenId ? 'message-readback-id-miss' : 'message-readback-text-miss',\n messageId: String(messageId),\n data,\n }\n}\n\nfunction containsScalar(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value !== 'object') return String(value) === expected\n if (Array.isArray(value)) return value.some((item) => containsScalar(item, expected))\n return Object.values(value).some((item) => containsScalar(item, expected))\n}\n\nfunction containsExactText(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value === 'string') {\n if (value === expected) return true\n try {\n const parsed = JSON.parse(value)\n return parsed !== value && containsExactText(parsed, expected)\n } catch { return false }\n }\n if (Array.isArray(value)) return value.some((item) => containsExactText(item, expected))\n if (typeof value === 'object') {\n return Object.values(value).some((item) => containsExactText(item, expected))\n }\n return false\n}\n\nfunction finish(context, intent, nextState, checked) {\n return {\n $schema: 'dingtalk-agent/action-receipt@1',\n actionId: intent.id,\n runId: intent.runId,\n kind: intent.kind,\n completedAt: new Date().toISOString(),\n fromState: context.run.state,\n toState: nextState,\n ...checked,\n }\n}\n\nfunction uncertain(context, intent, reason) {\n return finish(context, intent, 'needs-reconciliation', {\n outcome: 'uncertain', verified: false, verification: reason,\n })\n}\n\nfunction replayReceipt(context, receipt) {\n projectReceipt(context, receipt)\n return { ...receipt, duplicate: true }\n}\n\nfunction projectReceipt(context, receipt) {\n const release = acquireControlLock(context.indexPath)\n try {\n const latest = readJson(context.indexPath)\n if (digest(stableStringify(latest.authority)) !== latest.authorityHash) {\n throw new Error('投影 Receipt 时 authority hash 不一致')\n }\n const current = latest.control\n const applied = new Set(current.appliedActionIds || [])\n if (applied.has(receipt.actionId)) {\n mirrorJson(join(context.runPath, 'run.json'), current)\n context.index = latest\n context.run = current\n return current\n }\n // 兼容旧 control:若计数已表明该 kind 投影过,只回填 actionId,不重复计数/转移。\n if (Number(current.actionCounts?.[receipt.kind] || 0) > 0) {\n const next = { ...current, appliedActionIds: [...applied, receipt.actionId] }\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n }\n if (current.state !== receipt.fromState) {\n throw new Error(`Receipt 状态冲突: control=${current.state}, receipt=${receipt.fromState}→${receipt.toState}`)\n }\n const next = {\n ...current,\n updatedAt: receipt.completedAt,\n state: receipt.toState,\n appliedActionIds: [...applied, receipt.actionId],\n }\n bump(next, receipt.kind)\n if (receipt.toState === 'needs-reconciliation') next.status = 'blocked'\n else if (receipt.toState === 'waiting-input') next.status = receipt.verified ? 'waiting-input' : 'waiting-input-unverified'\n else if (receipt.toState === 'ignored') next.status = 'completed'\n else if (receipt.toState === 'completed') next.status = receipt.verified ? 'completed' : 'completed-unverified'\n else next.status = 'active'\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n } finally {\n release()\n }\n}\n\n/** 已有 Receipt 是真值;新动作前先把“Receipt 已落盘、control 未更新”的窗口收敛。 */\nfunction reconcileReceipts(context) {\n const receipts: Array<Record<string, any>> = []\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue\n const path = join(context.controlActionRoot, entry.name, 'receipt.json')\n if (existsSync(path)) receipts.push(readJson(path))\n }\n receipts.sort((a, b) => String(a.completedAt).localeCompare(String(b.completedAt)))\n for (const receipt of receipts) {\n reconcileReceiptWait(context, receipt)\n projectReceipt(context, receipt)\n }\n}\n\n/** 旧 Action 可能已命中 DWS 但尚无 Receipt;此时换文本会生成新 actionId,必须 fail closed。 */\nfunction assertNoOtherUnresolvedAttempt(context, currentActionId) {\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === currentActionId) continue\n const path = join(context.controlActionRoot, entry.name)\n if (existsSync(join(path, 'attempt.json')) && !existsSync(join(path, 'receipt.json'))) {\n throw new Error(`Run 存在未对账 Action ${entry.name};禁止更换正文再外发,请先 reconcile`)\n }\n }\n}\n\nfunction bump(run, kind) {\n run.actionCounts = { ack: 0, reply: 0, ask: 0, silence: 0, outward: 0, terminal: 0,\n ...(run.actionCounts || {}) }\n run.actionCounts[kind]++\n if (OUTWARD.has(kind)) run.actionCounts.outward++\n if (TERMINAL.has(kind)) run.actionCounts.terminal++\n}\n\nfunction persistArtifact(context, actionPath, name, value) {\n writeJsonAtomic(join(actionPath, name), value)\n const mirrorDir = join(context.runPath, 'actions', basename(actionPath))\n try {\n mkdirSync(mirrorDir, { recursive: true })\n writeJsonAtomic(join(mirrorDir, name), value)\n } catch (e) {\n console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`))\n }\n}\n\nfunction persistReceipt(context, actionPath, receipt) {\n persistArtifact(context, actionPath, 'receipt.json', receipt)\n mirrorJson(join(context.runPath, 'receipts', `${receipt.actionId}.json`), receipt)\n}\n\nfunction mirrorJson(path, value) {\n try { writeJsonAtomic(path, value) }\n catch (e) {\n console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`))\n }\n}\n\nfunction transportName(kind) {\n if (kind === 'ack') return 'dws.chat.message.add-emoji'\n if (kind === 'reply' || kind === 'ask') return 'dws.chat.message.reply'\n return 'local.silence'\n}\n\nfunction findValue(value, keys) {\n if (!value || typeof value !== 'object') return ''\n for (const key of keys) if (value[key]) return value[key]\n for (const child of Object.values(value)) {\n const found = findValue(child, keys)\n if (found) return found\n }\n return ''\n}\n\nfunction validGeneration(value, label) {\n const n = Number(value ?? 1)\n if (!Number.isInteger(n) || n < 1) throw new Error(`${label} 的 Session generation 非法`)\n return n\n}\n"]}