@xdxer/dingtalk-agent 0.1.4-beta.8 → 0.1.4
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.
- package/CHANGELOG.md +233 -0
- package/README.en.md +167 -0
- package/README.md +101 -248
- package/dist/bin/dingtalk-agent.js +1255 -25
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/actions.js +98 -14
- package/dist/src/actions.js.map +1 -1
- package/dist/src/agent-audit.js +1385 -0
- package/dist/src/agent-audit.js.map +1 -0
- package/dist/src/agent-bindings.js +132 -0
- package/dist/src/agent-bindings.js.map +1 -0
- package/dist/src/agent-definition.js +182 -0
- package/dist/src/agent-definition.js.map +1 -0
- package/dist/src/agent-enhance.js +711 -0
- package/dist/src/agent-enhance.js.map +1 -0
- package/dist/src/agent-platform.js +299 -0
- package/dist/src/agent-platform.js.map +1 -0
- package/dist/src/bootstrap.js +125 -17
- package/dist/src/bootstrap.js.map +1 -1
- package/dist/src/config.js +1 -7
- package/dist/src/config.js.map +1 -1
- package/dist/src/development-workspace.js +755 -0
- package/dist/src/development-workspace.js.map +1 -0
- package/dist/src/doctor.js +74 -15
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/dws.js +145 -0
- package/dist/src/dws.js.map +1 -1
- package/dist/src/eval-evidence.js +193 -0
- package/dist/src/eval-evidence.js.map +1 -0
- package/dist/src/host-detect.js +146 -0
- package/dist/src/host-detect.js.map +1 -0
- package/dist/src/instruction-path.js +270 -0
- package/dist/src/instruction-path.js.map +1 -0
- package/dist/src/invocation.js +36 -0
- package/dist/src/invocation.js.map +1 -0
- package/dist/src/lab.js +679 -0
- package/dist/src/lab.js.map +1 -0
- package/dist/src/lease.js +100 -0
- package/dist/src/lease.js.map +1 -0
- package/dist/src/map.js +157 -0
- package/dist/src/map.js.map +1 -0
- package/dist/src/memory/candidates.js +451 -0
- package/dist/src/memory/candidates.js.map +1 -0
- package/dist/src/memory/completion-evidence.js +536 -0
- package/dist/src/memory/completion-evidence.js.map +1 -0
- package/dist/src/memory/operational.js +263 -0
- package/dist/src/memory/operational.js.map +1 -0
- package/dist/src/memory/remote-state.js +478 -0
- package/dist/src/memory/remote-state.js.map +1 -0
- package/dist/src/memory/task-checkpoints.js +204 -0
- package/dist/src/memory/task-checkpoints.js.map +1 -0
- package/dist/src/multica-deploy.js +1538 -0
- package/dist/src/multica-deploy.js.map +1 -0
- package/dist/src/multica-provider.js +685 -0
- package/dist/src/multica-provider.js.map +1 -0
- package/dist/src/opencode-evals.js +1547 -0
- package/dist/src/opencode-evals.js.map +1 -0
- package/dist/src/opencode-isolation.js +124 -0
- package/dist/src/opencode-isolation.js.map +1 -0
- package/dist/src/opencode-provider.js +532 -0
- package/dist/src/opencode-provider.js.map +1 -0
- package/dist/src/opencode-workspace.js +208 -0
- package/dist/src/opencode-workspace.js.map +1 -0
- package/dist/src/perception.js +225 -0
- package/dist/src/perception.js.map +1 -0
- package/dist/src/personal-event-evals.js +595 -0
- package/dist/src/personal-event-evals.js.map +1 -0
- package/dist/src/promotion.js +786 -0
- package/dist/src/promotion.js.map +1 -0
- package/dist/src/remote-semantic-state-live-evals.js +888 -0
- package/dist/src/remote-semantic-state-live-evals.js.map +1 -0
- package/dist/src/remote-semantic-state-worker.js +38 -0
- package/dist/src/remote-semantic-state-worker.js.map +1 -0
- package/dist/src/remote-state-evals.js +502 -0
- package/dist/src/remote-state-evals.js.map +1 -0
- package/dist/src/response-gate.js +51 -0
- package/dist/src/response-gate.js.map +1 -0
- package/dist/src/robot-evals.js +771 -0
- package/dist/src/robot-evals.js.map +1 -0
- package/dist/src/sessions.js +66 -105
- package/dist/src/sessions.js.map +1 -1
- package/dist/src/setup.js +6 -5
- package/dist/src/setup.js.map +1 -1
- package/dist/src/skill-manager.js +162 -24
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js +2 -1
- package/dist/src/skills.js.map +1 -1
- package/dist/src/storage-evals.js +26 -0
- package/dist/src/storage-evals.js.map +1 -0
- package/dist/src/types.js.map +1 -1
- package/dist/src/upgrade.js +23 -27
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/version.js +73 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/waits.js +5 -1
- package/dist/src/waits.js.map +1 -1
- package/dist/src/workspace.js +28 -3
- package/dist/src/workspace.js.map +1 -1
- package/docs/INSTALLATION.md +50 -3
- package/docs/SECOND-AGENT-ACCEPTANCE.md +62 -0
- package/docs/architecture/agent-memory-topology.png +0 -0
- package/docs/architecture/agent-memory-topology.svg +132 -0
- package/docs/architecture/general-agent-kernel-topology.png +0 -0
- package/docs/architecture/general-agent-kernel-topology.svg +149 -0
- package/docs/architecture/provider-bound-development-workspace.png +0 -0
- package/docs/architecture/provider-bound-development-workspace.svg +141 -0
- package/docs/architecture/task-completion-gate.png +0 -0
- package/docs/architecture/task-completion-gate.svg +191 -0
- package/docs/assets/agent-delivery-lifecycle.svg +103 -0
- package/docs/schemas/agent-audit-load-evidence.schema.json +14 -0
- package/docs/schemas/agent-audit.schema.json +92 -0
- package/docs/schemas/agent-bindings.schema.json +54 -0
- package/docs/schemas/agent-definition.schema.json +78 -0
- package/docs/schemas/agent-enhancement-plan.schema.json +88 -0
- package/docs/schemas/agent-enhancement-receipt.schema.json +37 -0
- package/docs/schemas/agent-platform.schema.json +13 -0
- package/docs/schemas/enriched-invocation.schema.json +46 -0
- package/docs/schemas/eval-candidate-plan.schema.json +28 -0
- package/docs/schemas/eval-candidate-result.schema.json +20 -0
- package/docs/schemas/eval-candidate.schema.json +30 -0
- package/docs/schemas/invocation.schema.json +19 -0
- package/docs/schemas/memory-candidate-proposal.schema.json +18 -0
- package/docs/schemas/memory-candidate.schema.json +76 -0
- package/docs/schemas/memory-publish-target.schema.json +25 -0
- package/docs/schemas/multica-deployment-list.schema.json +29 -0
- package/docs/schemas/multica-deployment-operation.schema.json +51 -0
- package/docs/schemas/multica-deployment-plan.schema.json +70 -0
- package/docs/schemas/multica-deployment-receipt.schema.json +87 -0
- package/docs/schemas/multica-deployment-status.schema.json +23 -0
- package/docs/schemas/multica-workspace-inspection.schema.json +77 -0
- package/docs/schemas/multica-workspace-plan.schema.json +68 -0
- package/docs/schemas/multica-workspace-resource-list.schema.json +27 -0
- package/docs/schemas/multica-workspace-status.schema.json +34 -0
- package/docs/schemas/observation.schema.json +21 -0
- package/docs/schemas/operational-memory-provider.schema.json +36 -0
- package/docs/schemas/operational-memory-record.schema.json +24 -0
- package/docs/schemas/perception-input.schema.json +56 -0
- package/docs/schemas/project.schema.json +115 -0
- package/docs/schemas/promotion-list.schema.json +36 -0
- package/docs/schemas/promotion-plan.schema.json +60 -0
- package/docs/schemas/promotion-policy.schema.json +29 -0
- package/docs/schemas/promotion-receipt.schema.json +43 -0
- package/docs/schemas/promotion-status.schema.json +23 -0
- package/docs/schemas/release-readiness.schema.json +66 -0
- package/docs/schemas/remote-semantic-state-live-eval.schema.json +60 -0
- package/docs/schemas/remote-semantic-state-manifest.schema.json +79 -0
- package/docs/schemas/remote-semantic-state-provider.schema.json +98 -0
- package/docs/schemas/response-gate.schema.json +20 -0
- package/docs/schemas/task-checkpoint.schema.json +71 -0
- package/docs/schemas/task-completion-evidence.schema.json +154 -0
- package/docs/schemas/workspace-doctor.schema.json +56 -0
- package/docs/schemas/workspace-state.schema.json +39 -0
- package/evals/README.md +17 -0
- package/evals/baselines/2026-07-16/opencode-basic-010-completion-summary.json +123 -0
- package/evals/baselines/2026-07-16/opencode-basic-skill-required-summary.json +69 -0
- package/evals/baselines/2026-07-16/opencode-multi-surface-summary.json +63 -0
- package/evals/baselines/2026-07-16/remote-state-live-summary.json +70 -0
- package/evals/baselines/2026-07-17/agent-enhance-opencode-dogfood-summary.json +98 -0
- package/evals/baselines/2026-07-17/personal-event-live-readiness-summary.json +68 -0
- package/examples/agents/fde-coach/AGENTS.md +26 -0
- package/examples/agents/fde-coach/MEMORY.md +3 -0
- package/examples/agents/fde-coach/fields/default/field.json +24 -0
- package/examples/agents/fde-coach/knowledge/INDEX.md +4 -0
- package/examples/agents/fde-coach/skills/fde-coach/SKILL.md +13 -0
- package/examples/agents/release-manager/AGENTS.md +26 -0
- package/examples/agents/release-manager/MEMORY.md +3 -0
- package/examples/agents/release-manager/fields/default/field.json +24 -0
- package/examples/agents/release-manager/knowledge/INDEX.md +4 -0
- package/examples/agents/release-manager/skills/release-manager/SKILL.md +13 -0
- package/lab/README.md +109 -0
- package/lab/agent-eval/catalog.json +91 -0
- package/lab/agent-eval/classic-failures.json +177 -0
- package/lab/agent-eval/completion-gate-regression.json +99 -0
- package/lab/agent-eval/personal-event-live.example.json +94 -0
- package/lab/agent-eval/remote-semantic-state-live.example.json +70 -0
- package/lab/agent-eval/remote-semantic-state-provider.fixture.json +47 -0
- package/lab/agent-eval/remote-state-workspace/AGENTS.md +8 -0
- package/lab/agent-eval/remote-state-workspace/opencode.json +7 -0
- package/lab/agent-eval/remote-state-workspace/skills/remote-state-operator/SKILL.md +13 -0
- package/lab/agent-eval/remote-state.example.json +31 -0
- package/lab/agent-eval/workspace/AGENTS.md +7 -0
- package/lab/agent-eval/workspace/MEMORY.md +4 -0
- package/lab/agent-eval/workspace/artifacts/pending-review.md +3 -0
- package/lab/agent-eval/workspace/knowledge/INDEX.md +4 -0
- package/lab/agent-eval/workspace/opencode.json +20 -0
- package/lab/manifest.example.json +27 -0
- package/lab/manifest.personal-event.example.json +27 -0
- package/lab/project-workspace/README.md +11 -0
- package/lab/project-workspace/fake-multica-provider.mjs +277 -0
- package/lab/project-workspace/multica-deploy.fixture.json +29 -0
- package/lab/project-workspace/multica-readonly.fixture.json +69 -0
- package/lab/project-workspace/observation.fixture.json +14 -0
- package/lab/project-workspace/opencode-provider-suite.json +65 -0
- package/lab/project-workspace/project.fixture.json +44 -0
- package/lab/project-workspace/promotion-policy.fixture.json +15 -0
- package/lab/robot-eval/pool.example.json +30 -0
- package/lab/robot-eval/suite.json +123 -0
- package/lab/robot-eval/workspace/AGENTS.md +21 -0
- package/lab/robot-eval/workspace/MEMORY.md +3 -0
- package/lab/robot-eval/workspace/knowledge/INDEX.md +5 -0
- package/lab/robot-eval/workspace/opencode.json +22 -0
- package/lab/schemas/agent-eval-catalog.schema.json +47 -0
- package/lab/schemas/lab-manifest.schema.json +70 -0
- package/lab/schemas/personal-event-eval.schema.json +91 -0
- package/lab/schemas/remote-state-eval.schema.json +66 -0
- package/lab/schemas/robot-eval-suite.schema.json +184 -0
- package/lab/schemas/robot-pool.schema.json +56 -0
- package/package.json +28 -9
- package/skills/README.md +23 -0
- package/skills/core/dingtalk-agent-compose/SKILL.md +151 -0
- package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +35 -0
- package/skills/core/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +13 -0
- package/skills/core/dingtalk-agent-compose/assets/agent.bindings.local.template.json +13 -0
- package/skills/core/dingtalk-agent-compose/assets/hosts/opencode/opencode.template.json +12 -0
- package/skills/core/dingtalk-agent-compose/assets/role-skill.template.md +32 -0
- package/skills/core/dingtalk-agent-compose/evals/evals.json +129 -0
- package/skills/core/dingtalk-agent-compose/references/agent-definition-contract.md +55 -0
- package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +58 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +48 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +77 -0
- package/skills/core/dingtalk-agent-compose/references/storage-routing.md +20 -0
- package/skills/core/dingtalk-agent-eval/SKILL.md +140 -0
- package/skills/core/dingtalk-agent-eval/assets/eval-catalog.template.json +18 -0
- package/skills/core/dingtalk-agent-eval/evals/evals.json +83 -0
- package/skills/core/dingtalk-agent-eval/references/eval-topology.md +48 -0
- package/skills/core/dingtalk-agent-eval/references/evidence-contract.md +52 -0
- package/skills/core/dingtalk-agent-eval/references/failure-to-case.md +35 -0
- package/skills/core/dingtalk-agent-eval/references/interactive-debug-channels.md +93 -0
- package/skills/core/dingtalk-agent-eval/references/local-connector-smoke.md +75 -0
- package/skills/core/dingtalk-agent-eval/references/scenario-taxonomy.md +25 -0
- package/skills/core/dingtalk-agent-eval/references/storage-modes.md +75 -0
- package/skills/core/dingtalk-basic-behavior/SKILL.md +87 -0
- package/skills/core/dingtalk-basic-behavior/assets/memory-candidate-proposal.json +10 -0
- package/skills/{dingtalk-basic-behavior/assets/task-checkpoint.md → core/dingtalk-basic-behavior/assets/task-checkpoint.json} +2 -21
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/action-contract.md +2 -0
- package/skills/core/dingtalk-basic-behavior/references/memory-and-evolution.md +53 -0
- package/skills/core/dingtalk-basic-behavior/references/perception-and-gates.md +28 -0
- package/skills/core/dingtalk-basic-behavior/references/risk-authority-and-privacy.md +62 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/task-lifecycle.md +47 -10
- package/skills/core/dingtalk-basic-behavior/references/truth-and-recovery.md +65 -0
- package/skills/platforms/deap/PLATFORM.md +3 -0
- package/skills/platforms/deap/README.md +3 -0
- package/skills/platforms/multica-dingtalk/PLATFORM.md +40 -0
- package/skills/platforms/multica-dingtalk/dingtalk-agent-boot-multica/SKILL.md +40 -0
- package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/SKILL.md +60 -0
- package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/references/multica-deployment-contract.md +49 -0
- package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/references/promotion-observation-contract.md +49 -0
- package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +282 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/bootstrap.sh +78 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +1180 -0
- package/skills/dingtalk-basic-behavior/SKILL.md +0 -86
- package/skills/dingtalk-basic-behavior/references/memory-and-evolution.md +0 -27
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/event-to-behavior.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/runtime-modes.md +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promotion.js","sourceRoot":"","sources":["../../src/promotion.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from 'node:crypto'\nimport {\n existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync,\n renameSync, writeFileSync,\n} from 'node:fs'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport {\n inspectAgentProject, showDevelopmentWorkspace,\n type DevelopmentStage, type DevelopmentWorkspaceView,\n} from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\nimport {\n applyMulticaDeployment, planMulticaDeployment, statusMulticaDeployment,\n type MulticaDeploymentOptions, type MulticaDeploymentPlan,\n type MulticaDeploymentReceipt,\n} from './multica-deploy.js'\n\nexport const PROMOTION_POLICY_SCHEMA = 'dingtalk-agent/promotion-policy@1'\nexport const PROMOTION_PLAN_SCHEMA = 'dingtalk-agent/promotion-plan@1'\nexport const PROMOTION_RECEIPT_SCHEMA = 'dingtalk-agent/promotion-receipt@1'\nexport const OBSERVATION_SCHEMA = 'dingtalk-agent/observation@1'\nexport const EVAL_CANDIDATE_SCHEMA = 'dingtalk-agent/eval-candidate@1'\n\nconst PROMOTION_ROOT = '.dingtalk-agent/development-workspace-evidence/promotions'\nconst CANDIDATE_ROOT = '.dingtalk-agent/eval-candidates'\nconst HASH = /^[a-f0-9]{64}$/\nconst SAFE_ID = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst STAGE_RANK: Record<DevelopmentStage, number> = { dev: 0, test: 1, staging: 2, prod: 3 }\nconst SURFACES = new Set(['response', 'filesystem', 'workspace', 'artifact'])\n\nexport interface PromotionRoute {\n id: string\n fromWorkspace: string\n toWorkspace: string\n suite: string\n minimumRuns: number\n requiredCases: string[]\n requiredSurfaces: Array<'response' | 'filesystem' | 'workspace' | 'artifact'>\n requireBehaviorGate: boolean\n}\n\nexport interface PromotionPolicy {\n $schema: 'dingtalk-agent/promotion-policy@1'\n routes: PromotionRoute[]\n}\n\ninterface EvalGateEvidence {\n runId: string\n evidencePath: string\n evidenceHash: string\n planHash: string\n suiteHash: string\n reportHash: string\n suiteId: string\n model: string\n runs: number\n configurations: string[]\n caseIds: string[]\n requiredSurfaces: string[]\n loadGate: boolean\n hardGate: boolean\n falseCompletionGate: boolean\n behaviorGate: boolean\n}\n\nexport interface PromotionPlan {\n $schema: 'dingtalk-agent/promotion-plan@1'\n planId: string\n routeId: string\n policyPath: string\n policyHash: string\n source: {\n workspace: string\n stage: DevelopmentStage\n sourceHash: string\n desiredHash: string\n observedHash: string\n definitionHash: string\n skills: Array<{ name: string; hash: string }>\n }\n eval: EvalGateEvidence\n target: {\n workspace: string\n stage: DevelopmentStage\n desiredHash: string\n deploymentHash: string\n deploymentPlanId: string\n }\n deployment: MulticaDeploymentPlan\n blocking: string[]\n requiresPlanId: true\n requiresExplicitYes: true\n remoteRead: false\n remoteWrite: false\n localWrite: false\n triggerWrite: false\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface PromotionReceipt {\n $schema: 'dingtalk-agent/promotion-receipt@1'\n promotionId: string\n receiptId: string\n planId: string\n routeId: string\n policyHash: string\n status: 'promoted' | 'verifying' | 'failed'\n passed: boolean\n idempotent: boolean\n source: PromotionPlan['source']\n eval: EvalGateEvidence\n target: PromotionPlan['target'] & {\n deploymentReceiptId: string\n deploymentOperationId: string\n deploymentReceiptPath: string\n deploymentReceiptHash: string\n observedHash: string\n }\n linkHash: string\n failures: string[]\n evidencePath: string\n remoteRead: boolean\n remoteWrite: boolean\n localWrite: true\n triggerWrite: false\n sideEffect: 'multica-read-write' | 'multica-read' | 'none'\n dingtalkSideEffect: false\n}\n\nexport interface PromotionStatus {\n $schema: 'dingtalk-agent/promotion-status@1'\n available: boolean\n promotionId: string\n status: 'promoted' | 'verifying' | 'failed' | 'missing'\n passed: boolean\n integrity: boolean\n receipt: PromotionReceipt | null\n remoteRead: false\n remoteWrite: false\n localWrite: false\n triggerWrite: false\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface ObservationInput {\n $schema: 'dingtalk-agent/observation@1'\n observedAt: string\n observedHash: string\n category: 'behavior' | 'safety' | 'reliability' | 'quality'\n risk: 'low' | 'medium' | 'high' | 'critical'\n capability: string\n outcome: 'pass' | 'fail' | 'mixed' | 'unknown'\n summary: string\n expected: string\n actual: string\n sourceRefs: string[]\n redacted: true\n}\n\nexport interface EvalCandidate {\n $schema: 'dingtalk-agent/eval-candidate@1'\n candidateId: string\n status: 'proposed'\n eligibleForSuite: false\n reviewRequired: true\n published: false\n promotion: {\n promotionId: string\n receiptId: string\n receiptHash: string\n linkHash: string\n }\n source: PromotionReceipt['source']\n eval: {\n runId: string\n evidenceHash: string\n suiteId: string\n }\n target: {\n workspace: string\n deploymentReceiptId: string\n deploymentHash: string\n observedHash: string\n }\n observation: ObservationInput\n observationHash: string\n candidateHash: string\n evidencePath: string\n remoteRead: false\n remoteWrite: false\n localWrite: true\n triggerWrite: false\n sideEffect: 'local-eval-candidate'\n dingtalkSideEffect: false\n}\n\nexport interface EvalCandidatePlan {\n $schema: 'dingtalk-agent/eval-candidate-plan@1'\n candidateId: string\n promotionId: string\n observedHash: string\n observationHash: string\n candidatePath: string\n writeBudget: { local: 1 }\n reviewRequired: true\n eligibleForSuite: false\n remoteRead: false\n remoteWrite: false\n localWrite: false\n triggerWrite: false\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface EvalCandidateResult {\n $schema: 'dingtalk-agent/eval-candidate-result@1'\n applied: boolean\n idempotent: boolean\n candidate: EvalCandidate\n remoteRead: false\n remoteWrite: false\n localWrite: boolean\n triggerWrite: false\n sideEffect: false | 'local-eval-candidate'\n dingtalkSideEffect: false\n}\n\nexport function planPromotion(\n start: string,\n policyRef: string,\n routeId: string,\n options: { env?: NodeJS.ProcessEnv; cliVersion?: string } = {},\n): PromotionPlan {\n const info = inspectAgentProject(start, options.cliVersion || '')\n const { policy, policyPath, policyHash } = loadPolicy(info.root, policyRef)\n const route = policy.routes.find((item) => item.id === routeId)\n if (!route) throw new Error(`Promotion route 不存在: ${routeId}`)\n const source = showDevelopmentWorkspace(info.root, route.fromWorkspace, options.cliVersion || '')\n const target = showDevelopmentWorkspace(info.root, route.toWorkspace, options.cliVersion || '')\n const blocking: string[] = []\n if (source.legacy || source.provider.kind !== 'opencode') blocking.push('source.provider-not-opencode')\n if (target.legacy || target.provider.kind !== 'multica') blocking.push('target.provider-not-multica')\n if (target.stage === 'prod') blocking.push('target.prod-requires-separate-live-gate')\n if (STAGE_RANK[target.stage] < STAGE_RANK[source.stage]) blocking.push('target.stage-downgrade')\n if (source.sourceHash !== target.sourceHash) blocking.push('project.source-hash-mismatch')\n\n let evalEvidence: EvalGateEvidence | null = null\n try { evalEvidence = loadEvalGate(info.root, source, route) }\n catch (error) { blocking.push(`eval.${errorCategory(error)}`) }\n\n let deployment: MulticaDeploymentPlan\n try {\n deployment = planMulticaDeployment(info.root, target.name, {\n env: options.env, cliVersion: options.cliVersion,\n })\n blocking.push(...deployment.blocking.map((item) => `deployment.${item}`))\n } catch (error) {\n blocking.push(`deployment.${errorCategory(error)}`)\n deployment = emptyDeploymentPlan(target)\n }\n\n const sourceSkills = deployment.expected.skills.map((item) => ({ name: item.name, hash: item.hash }))\n const sourceBinding: PromotionPlan['source'] = {\n workspace: source.name,\n stage: source.stage,\n sourceHash: source.sourceHash,\n desiredHash: source.desiredHash,\n observedHash: source.observedHash,\n definitionHash: deployment.expected.definitionHash || emptyHash(),\n skills: sourceSkills,\n }\n const targetBinding: PromotionPlan['target'] = {\n workspace: target.name,\n stage: target.stage,\n desiredHash: target.desiredHash,\n deploymentHash: deployment.deploymentHash || emptyHash(),\n deploymentPlanId: deployment.planId,\n }\n const resolvedEval = evalEvidence || emptyEvalEvidence(route)\n const uniqueBlocking = [...new Set(blocking)].sort()\n const planId = `promotion_plan_${digest(stableStringify({\n routeId, policyHash, source: sourceBinding, eval: resolvedEval,\n target: targetBinding, deploymentPlanId: deployment.planId, blocking: uniqueBlocking,\n })).slice(0, 24)}`\n return {\n $schema: PROMOTION_PLAN_SCHEMA,\n planId,\n routeId,\n policyPath,\n policyHash,\n source: sourceBinding,\n eval: resolvedEval,\n target: targetBinding,\n deployment,\n blocking: uniqueBlocking,\n requiresPlanId: true,\n requiresExplicitYes: true,\n remoteRead: false,\n remoteWrite: false,\n localWrite: false,\n triggerWrite: false,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function applyPromotion(\n start: string,\n policyRef: string,\n routeId: string,\n options: MulticaDeploymentOptions = {},\n): PromotionReceipt {\n if (!options.yes || !options.planId) {\n throw new Error('promote 会调用 Multica deploy;必须显式传当前 --plan-id 和 --yes')\n }\n const info = inspectAgentProject(start, options.cliVersion || '')\n const plan = planPromotion(info.root, policyRef, routeId, {\n env: options.env, cliVersion: options.cliVersion,\n })\n if (plan.planId !== options.planId) {\n throw new Error(`promotion plan 已失效;期望当前 planId ${plan.planId}`)\n }\n if (plan.blocking.length) throw new Error(`promotion 前置条件不完整: ${plan.blocking.join(', ')}`)\n const deployment = applyMulticaDeployment(info.root, plan.target.workspace, {\n ...options,\n planId: plan.deployment.planId,\n yes: true,\n })\n const deploymentReceiptPath = safeProjectPath(info.root, deployment.evidencePath, true)\n const deploymentReceiptHash = sha256(readFileSync(deploymentReceiptPath))\n const promoted = deployment.status === 'ready' && deployment.passed && deployment.providerReady &&\n deployment.deploymentHash === plan.target.deploymentHash && Boolean(deployment.observedHash)\n const status: PromotionReceipt['status'] = promoted ? 'promoted'\n : ['verifying', 'reconciling'].includes(deployment.status) ? 'verifying' : 'failed'\n const target = {\n ...plan.target,\n deploymentReceiptId: deployment.receiptId,\n deploymentOperationId: deployment.operationId,\n deploymentReceiptPath: deployment.evidencePath,\n deploymentReceiptHash,\n observedHash: deployment.observedHash,\n }\n const linkHash = promotionLinkHash(plan.source, plan.eval, target)\n const promotionId = `promotion_${digest(stableStringify({\n routeId, planId: plan.planId, deploymentReceiptId: deployment.receiptId, linkHash,\n })).slice(0, 24)}`\n const receiptId = `promotion_receipt_${digest(stableStringify({ promotionId, status, linkHash })).slice(0, 24)}`\n const receipt: PromotionReceipt = {\n $schema: PROMOTION_RECEIPT_SCHEMA,\n promotionId,\n receiptId,\n planId: plan.planId,\n routeId,\n policyHash: plan.policyHash,\n status,\n passed: promoted,\n idempotent: deployment.idempotent,\n source: plan.source,\n eval: plan.eval,\n target,\n linkHash,\n failures: promoted ? [] : [...deployment.failures],\n evidencePath: promotionReceiptPath(receiptId),\n remoteRead: deployment.remoteRead,\n remoteWrite: deployment.remoteWrite,\n localWrite: true,\n triggerWrite: false,\n sideEffect: deployment.sideEffect,\n dingtalkSideEffect: false,\n }\n persistPromotion(info.root, receipt)\n return receipt\n}\n\nexport function statusPromotion(start: string, promotionId = ''): PromotionStatus {\n const info = inspectAgentProject(start)\n const loaded = loadPromotion(info.root, promotionId)\n if (!loaded) return {\n $schema: 'dingtalk-agent/promotion-status@1', available: false,\n promotionId: '', status: 'missing', passed: false, integrity: true, receipt: null,\n remoteRead: false, remoteWrite: false, localWrite: false, triggerWrite: false,\n sideEffect: false, dingtalkSideEffect: false,\n }\n verifyPromotionDependencies(info.root, loaded.receipt, loaded.receiptHash)\n return {\n $schema: 'dingtalk-agent/promotion-status@1', available: true,\n promotionId: loaded.receipt.promotionId,\n status: loaded.receipt.status,\n passed: loaded.receipt.passed,\n integrity: true,\n receipt: loaded.receipt,\n remoteRead: false, remoteWrite: false, localWrite: false, triggerWrite: false,\n sideEffect: false, dingtalkSideEffect: false,\n }\n}\n\nexport function listPromotions(start: string): Record<string, unknown> {\n const info = inspectAgentProject(start)\n const directory = safeProjectPath(info.root, join(PROMOTION_ROOT, 'bindings'), false)\n const promotions: Array<Record<string, unknown>> = []\n if (existsSync(directory)) {\n for (const entry of readdirSync(directory, { withFileTypes: true })\n .filter((item) => item.isFile() && item.name.endsWith('.json'))\n .sort((a, b) => a.name.localeCompare(b.name))) {\n const promotionId = entry.name.slice(0, -5)\n const status = statusPromotion(info.root, promotionId)\n if (!status.receipt) continue\n promotions.push({\n promotionId, receiptId: status.receipt.receiptId, routeId: status.receipt.routeId,\n status: status.receipt.status, passed: status.receipt.passed,\n sourceHash: status.receipt.source.sourceHash,\n evalEvidenceHash: status.receipt.eval.evidenceHash,\n deploymentHash: status.receipt.target.deploymentHash,\n observedHash: status.receipt.target.observedHash,\n })\n }\n }\n return {\n $schema: 'dingtalk-agent/promotion-list@1', promotions,\n remoteRead: false, remoteWrite: false, localWrite: false, triggerWrite: false,\n sideEffect: false, dingtalkSideEffect: false,\n }\n}\n\nexport function planObservation(\n start: string, promotionId: string, inputRef: string,\n): EvalCandidatePlan {\n const info = inspectAgentProject(start)\n const loaded = loadPromotion(info.root, promotionId)\n if (!loaded) throw new Error(`Promotion 不存在: ${promotionId}`)\n verifyPromotionDependencies(info.root, loaded.receipt, loaded.receiptHash)\n if (!loaded.receipt.passed || loaded.receipt.status !== 'promoted') {\n throw new Error('只有已 promoted 且完整性通过的 Receipt 可以生成 Eval candidate')\n }\n const observation = loadObservation(info.root, inputRef)\n if (observation.observedHash !== loaded.receipt.target.observedHash) {\n throw new Error('Observation observedHash 与 Promotion 远端 observedHash 不一致')\n }\n const observationHash = digest(stableStringify(observation))\n const candidateId = `eval_candidate_${digest(stableStringify({\n promotionId, receiptHash: loaded.receiptHash, observationHash,\n })).slice(0, 24)}`\n return {\n $schema: 'dingtalk-agent/eval-candidate-plan@1',\n candidateId,\n promotionId,\n observedHash: observation.observedHash,\n observationHash,\n candidatePath: candidatePath(candidateId),\n writeBudget: { local: 1 },\n reviewRequired: true,\n eligibleForSuite: false,\n remoteRead: false, remoteWrite: false, localWrite: false, triggerWrite: false,\n sideEffect: false, dingtalkSideEffect: false,\n }\n}\n\nexport function applyObservation(\n start: string,\n promotionId: string,\n inputRef: string,\n options: { yes?: boolean } = {},\n): EvalCandidateResult {\n if (!options.yes) throw new Error('observe 会写入本地 Eval candidate;必须显式传 --yes')\n const info = inspectAgentProject(start)\n const plan = planObservation(info.root, promotionId, inputRef)\n const loaded = loadPromotion(info.root, promotionId)\n if (!loaded) throw new Error(`Promotion 不存在: ${promotionId}`)\n const observation = loadObservation(info.root, inputRef)\n const candidateBase = {\n $schema: EVAL_CANDIDATE_SCHEMA as EvalCandidate['$schema'],\n candidateId: plan.candidateId,\n status: 'proposed' as const,\n eligibleForSuite: false as const,\n reviewRequired: true as const,\n published: false as const,\n promotion: {\n promotionId,\n receiptId: loaded.receipt.receiptId,\n receiptHash: loaded.receiptHash,\n linkHash: loaded.receipt.linkHash,\n },\n source: loaded.receipt.source,\n eval: {\n runId: loaded.receipt.eval.runId,\n evidenceHash: loaded.receipt.eval.evidenceHash,\n suiteId: loaded.receipt.eval.suiteId,\n },\n target: {\n workspace: loaded.receipt.target.workspace,\n deploymentReceiptId: loaded.receipt.target.deploymentReceiptId,\n deploymentHash: loaded.receipt.target.deploymentHash,\n observedHash: loaded.receipt.target.observedHash,\n },\n observation,\n observationHash: plan.observationHash,\n evidencePath: plan.candidatePath,\n remoteRead: false as const,\n remoteWrite: false as const,\n localWrite: true as const,\n triggerWrite: false as const,\n sideEffect: 'local-eval-candidate' as const,\n dingtalkSideEffect: false as const,\n }\n const candidateHash = digest(stableStringify(candidateBase))\n const candidate: EvalCandidate = { ...candidateBase, candidateHash }\n const path = safeProjectPath(info.root, plan.candidatePath, false)\n if (existsSync(path)) {\n const previous = JSON.parse(readFileSync(path, 'utf8'))\n if (stableStringify(previous) !== stableStringify(candidate)) {\n throw new Error('Eval candidate ID 已存在但内容不一致')\n }\n return {\n $schema: 'dingtalk-agent/eval-candidate-result@1', applied: false, idempotent: true,\n candidate, remoteRead: false, remoteWrite: false, localWrite: false,\n triggerWrite: false, sideEffect: false, dingtalkSideEffect: false,\n }\n }\n atomicJson(path, candidate)\n const readback = JSON.parse(readFileSync(path, 'utf8'))\n if (stableStringify(readback) !== stableStringify(candidate)) {\n throw new Error('Eval candidate 写后回读不一致')\n }\n return {\n $schema: 'dingtalk-agent/eval-candidate-result@1', applied: true, idempotent: false,\n candidate, remoteRead: false, remoteWrite: false, localWrite: true,\n triggerWrite: false, sideEffect: 'local-eval-candidate', dingtalkSideEffect: false,\n }\n}\n\nfunction loadEvalGate(\n root: string, source: DevelopmentWorkspaceView, route: PromotionRoute,\n): EvalGateEvidence {\n if (!source.state || source.state.status !== 'ready') throw new Error('source-not-ready')\n const binding = source.state.binding\n for (const key of [\n 'managedPath', 'sourceHash', 'evalRunId', 'evalEvidencePath', 'evalPlanHash',\n 'evalSuiteHash', 'evalReportHash', 'evalSuiteId', 'evalModel', 'evalSourceHash',\n 'evalDesiredHash', 'evalObservedHash',\n ]) if (!binding[key]) throw new Error(`binding-${key}-missing`)\n if (binding.sourceHash !== source.sourceHash || binding.evalSourceHash !== source.sourceHash ||\n binding.evalDesiredHash !== source.desiredHash || source.state.desiredHash !== source.desiredHash) {\n throw new Error('source-hash-drift')\n }\n const managed = safeProjectPath(root, binding.managedPath, true)\n const actualObservedHash = hashTree(managed)\n if (actualObservedHash !== source.observedHash || actualObservedHash !== binding.evalObservedHash ||\n source.state.observedHash !== actualObservedHash) throw new Error('observed-hash-drift')\n const policySuitePath = safeProjectPath(root, route.suite, true)\n const policySuite = readJson(policySuitePath, 'Promotion policy suite')\n const policySuiteHash = digest(stableStringify(policySuite))\n if (policySuiteHash !== binding.evalSuiteHash) throw new Error('designated-suite-drift')\n const evidenceRoot = safeProjectPath(root, binding.evalEvidencePath, true)\n if (!lstatSync(evidenceRoot).isDirectory() || lstatSync(evidenceRoot).isSymbolicLink()) {\n throw new Error('evidence-root-invalid')\n }\n const planPath = safeProjectPath(root, join(binding.evalEvidencePath, 'plan.json'), true)\n const suitePath = safeProjectPath(root, join(binding.evalEvidencePath, 'suite.json'), true)\n const reportPath = safeProjectPath(root, join(binding.evalEvidencePath, 'report.json'), true)\n if (sha256(readFileSync(planPath)) !== binding.evalPlanHash ||\n sha256(readFileSync(reportPath)) !== binding.evalReportHash) throw new Error('evidence-byte-drift')\n const plan = readJson(planPath, 'OpenCode Eval plan')\n const suite = readJson(suitePath, 'OpenCode Eval suite')\n const report = readJson(reportPath, 'OpenCode Eval report')\n if (digest(stableStringify(suite)) !== binding.evalSuiteHash ||\n stableStringify(suite) !== stableStringify(policySuite)) throw new Error('suite-evidence-drift')\n if (plan.$schema !== 'dingtalk-agent/opencode-eval-plan@1' ||\n report.$schema !== 'dingtalk-agent/opencode-eval-report@1' ||\n report.runId !== binding.evalRunId || report.evidencePath !== binding.evalEvidencePath ||\n plan.suite !== suite.id || suite.id !== binding.evalSuiteId ||\n report.engine?.model !== source.provider.model || report.engine?.model !== binding.evalModel) {\n throw new Error('evidence-binding-mismatch')\n }\n const runs = Number(plan.runsPerConfiguration)\n const configurations = stringList(plan.configurations, 'Eval plan configurations')\n const planCases = Array.isArray(plan.cases) ? plan.cases : []\n const planCaseIds = planCases.map((item) => String(item?.id || ''))\n if (!Number.isInteger(runs) || runs < route.minimumRuns || runs > 10 ||\n configurations.length !== 2 || new Set(configurations).size !== configurations.length) {\n throw new Error('runs-or-configurations')\n }\n if (!route.requiredCases.every((id) => planCaseIds.includes(id))) throw new Error('required-case-missing')\n if (report.passed !== true || report.summary?.loadGate !== true ||\n report.summary?.hardGate !== true || report.summary?.falseCompletionGate !== true ||\n report.summary?.behaviorScoresValid !== true ||\n (route.requireBehaviorGate && report.summary?.behaviorGate !== true)) {\n throw new Error('hard-gate-failed')\n }\n for (const configuration of configurations) {\n const gate = report.summary?.configurationLoadGates?.[configuration]\n if (!gate?.passed || gate.passedRuns !== runs || gate.totalRuns !== runs) {\n throw new Error('configuration-load-gate-failed')\n }\n }\n const results = Array.isArray(report.results) ? report.results : []\n const expectedResults = planCaseIds.length * configurations.length * runs\n if (results.length !== expectedResults || results.some((item) =>\n !item.hardGatePassed || !item.safetyPassed || item.falseCompletion)) {\n throw new Error('result-hard-gate-failed')\n }\n for (const caseId of route.requiredCases) {\n for (const configuration of configurations) {\n const selected = results.filter((item) => item.id === caseId && item.configuration === configuration)\n if (selected.length !== runs) throw new Error('required-case-result-count')\n for (const surface of route.requiredSurfaces) {\n if (!selected.every((item) => item.surfaceResults?.[surface]?.declared === true &&\n item.surfaceResults?.[surface]?.passed === true)) throw new Error(`surface-${surface}-failed`)\n }\n }\n }\n const evidenceHash = digest(stableStringify({\n runId: binding.evalRunId,\n evidencePath: binding.evalEvidencePath,\n planHash: binding.evalPlanHash,\n suiteHash: binding.evalSuiteHash,\n reportHash: binding.evalReportHash,\n sourceHash: binding.evalSourceHash,\n desiredHash: binding.evalDesiredHash,\n observedHash: binding.evalObservedHash,\n }))\n return {\n runId: binding.evalRunId,\n evidencePath: binding.evalEvidencePath,\n evidenceHash,\n planHash: binding.evalPlanHash,\n suiteHash: binding.evalSuiteHash,\n reportHash: binding.evalReportHash,\n suiteId: binding.evalSuiteId,\n model: binding.evalModel,\n runs,\n configurations,\n caseIds: [...route.requiredCases],\n requiredSurfaces: [...route.requiredSurfaces],\n loadGate: true,\n hardGate: true,\n falseCompletionGate: true,\n behaviorGate: report.summary.behaviorGate === true,\n }\n}\n\nfunction loadPolicy(\n root: string, ref: string,\n): { policy: PromotionPolicy; policyPath: string; policyHash: string } {\n const path = safeProjectPath(root, ref, true)\n if (lstatSync(path).isSymbolicLink() || !lstatSync(path).isFile()) {\n throw new Error('Promotion policy 必须是 Project 内真实文件')\n }\n const input = readJson(path, 'Promotion policy')\n exactKeys(input, ['$schema', 'routes'], 'Promotion policy')\n if (input.$schema !== PROMOTION_POLICY_SCHEMA || !Array.isArray(input.routes) ||\n input.routes.length < 1 || input.routes.length > 32) throw new Error('Promotion policy schema/routes 非法')\n const ids = new Set<string>()\n const routes = input.routes.map((value, index) => {\n const item = objectValue(value, `Promotion route ${index}`)\n exactKeys(item, [\n 'id', 'fromWorkspace', 'toWorkspace', 'suite', 'minimumRuns',\n 'requiredCases', 'requiredSurfaces', 'requireBehaviorGate',\n ], `Promotion route ${index}`)\n const id = safeId(item.id, 'Promotion route id')\n if (ids.has(id)) throw new Error(`Promotion route 重复: ${id}`)\n ids.add(id)\n const requiredCases = uniqueSafeIds(item.requiredCases, 'Promotion requiredCases', 30)\n const requiredSurfaces = stringList(item.requiredSurfaces, 'Promotion requiredSurfaces')\n if (!requiredSurfaces.length || requiredSurfaces.some((surface) => !SURFACES.has(surface)) ||\n new Set(requiredSurfaces).size !== requiredSurfaces.length) throw new Error('Promotion requiredSurfaces 非法')\n if (!Number.isInteger(item.minimumRuns) || item.minimumRuns < 1 || item.minimumRuns > 10 ||\n typeof item.requireBehaviorGate !== 'boolean') throw new Error('Promotion route gate 配置非法')\n const suite = stringField(item.suite, 'Promotion suite')\n safeProjectPath(root, suite, true)\n return {\n id,\n fromWorkspace: safeId(item.fromWorkspace, 'Promotion fromWorkspace'),\n toWorkspace: safeId(item.toWorkspace, 'Promotion toWorkspace'),\n suite,\n minimumRuns: item.minimumRuns,\n requiredCases,\n requiredSurfaces: requiredSurfaces as PromotionRoute['requiredSurfaces'],\n requireBehaviorGate: item.requireBehaviorGate,\n }\n })\n const policy: PromotionPolicy = { $schema: PROMOTION_POLICY_SCHEMA, routes }\n return {\n policy,\n policyPath: relative(realpathSync(root), path),\n policyHash: digest(stableStringify(policy)),\n }\n}\n\nfunction loadObservation(root: string, ref: string): ObservationInput {\n const path = safeProjectPath(root, ref, true)\n if (lstatSync(path).isSymbolicLink() || !lstatSync(path).isFile()) {\n throw new Error('Observation input 必须是 Project 内真实文件')\n }\n const input = readJson(path, 'Observation input')\n exactKeys(input, [\n '$schema', 'observedAt', 'observedHash', 'category', 'risk', 'capability',\n 'outcome', 'summary', 'expected', 'actual', 'sourceRefs', 'redacted',\n ], 'Observation input')\n if (input.$schema !== OBSERVATION_SCHEMA || input.redacted !== true ||\n !['behavior', 'safety', 'reliability', 'quality'].includes(String(input.category)) ||\n !['low', 'medium', 'high', 'critical'].includes(String(input.risk)) ||\n !['pass', 'fail', 'mixed', 'unknown'].includes(String(input.outcome))) {\n throw new Error('Observation schema/category/risk/outcome/redacted 非法')\n }\n const observedAt = stringField(input.observedAt, 'Observation observedAt')\n if (Number.isNaN(Date.parse(observedAt)) || new Date(observedAt).toISOString() !== observedAt) {\n throw new Error('Observation observedAt 必须是规范 ISO 时间')\n }\n const observedHash = hashField(input.observedHash, 'Observation observedHash')\n const capability = boundedString(input.capability, 'Observation capability', 100)\n const summary = boundedString(input.summary, 'Observation summary', 500)\n const expected = boundedString(input.expected, 'Observation expected', 1000)\n const actual = boundedString(input.actual, 'Observation actual', 1000)\n const sourceRefs = stringList(input.sourceRefs, 'Observation sourceRefs')\n if (sourceRefs.length > 10 || sourceRefs.some((item) => item.length > 200)) {\n throw new Error('Observation sourceRefs 超出预算')\n }\n assertRedactedObservation([capability, summary, expected, actual, ...sourceRefs])\n return {\n $schema: OBSERVATION_SCHEMA,\n observedAt,\n observedHash,\n category: input.category as ObservationInput['category'],\n risk: input.risk as ObservationInput['risk'],\n capability,\n outcome: input.outcome as ObservationInput['outcome'],\n summary,\n expected,\n actual,\n sourceRefs,\n redacted: true,\n }\n}\n\nfunction persistPromotion(root: string, receipt: PromotionReceipt): void {\n const receiptPath = safeProjectPath(root, receipt.evidencePath, false)\n atomicJson(receiptPath, receipt)\n const receiptHash = sha256(readFileSync(receiptPath))\n const pointer = {\n $schema: 'dingtalk-agent/promotion-pointer@1',\n promotionId: receipt.promotionId,\n receiptId: receipt.receiptId,\n receiptPath: receipt.evidencePath,\n receiptHash,\n }\n atomicJson(safeProjectPath(root, promotionBindingPath(receipt.promotionId), false), pointer)\n atomicJson(safeProjectPath(root, join(PROMOTION_ROOT, 'latest.json'), false), pointer)\n}\n\nfunction loadPromotion(\n root: string, promotionId = '',\n): { receipt: PromotionReceipt; receiptHash: string } | null {\n const pointerPath = safeProjectPath(root, promotionId\n ? promotionBindingPath(safeResourceId(promotionId, 'promotionId'))\n : join(PROMOTION_ROOT, 'latest.json'), false)\n if (!existsSync(pointerPath)) return null\n const pointer = readJson(pointerPath, 'Promotion pointer')\n exactKeys(pointer, ['$schema', 'promotionId', 'receiptId', 'receiptPath', 'receiptHash'], 'Promotion pointer')\n if (pointer.$schema !== 'dingtalk-agent/promotion-pointer@1') throw new Error('Promotion pointer schema 非法')\n const expectedPromotionId = safeResourceId(pointer.promotionId, 'pointer promotionId')\n if (promotionId && expectedPromotionId !== promotionId) throw new Error('Promotion pointer ID 不一致')\n const receiptPath = safeProjectPath(root, stringField(pointer.receiptPath, 'pointer receiptPath'), true)\n const receiptHash = sha256(readFileSync(receiptPath))\n if (receiptHash !== hashField(pointer.receiptHash, 'pointer receiptHash')) {\n throw new Error('Promotion Receipt hash 不一致')\n }\n const receipt = readJson(receiptPath, 'Promotion Receipt') as unknown as PromotionReceipt\n if (receipt.$schema !== PROMOTION_RECEIPT_SCHEMA || receipt.promotionId !== expectedPromotionId ||\n receipt.receiptId !== pointer.receiptId || receipt.evidencePath !== pointer.receiptPath) {\n throw new Error('Promotion Receipt 绑定不一致')\n }\n return { receipt, receiptHash }\n}\n\nfunction verifyPromotionDependencies(root: string, receipt: PromotionReceipt, receiptHash: string): void {\n if (receipt.linkHash !== promotionLinkHash(receipt.source, receipt.eval, receipt.target)) {\n throw new Error('Promotion source/eval/target link hash 不一致')\n }\n const evalPlan = safeProjectPath(root, join(receipt.eval.evidencePath, 'plan.json'), true)\n const evalSuite = safeProjectPath(root, join(receipt.eval.evidencePath, 'suite.json'), true)\n const evalReport = safeProjectPath(root, join(receipt.eval.evidencePath, 'report.json'), true)\n if (sha256(readFileSync(evalPlan)) !== receipt.eval.planHash ||\n digest(stableStringify(readJson(evalSuite, 'Promotion Eval suite'))) !== receipt.eval.suiteHash ||\n sha256(readFileSync(evalReport)) !== receipt.eval.reportHash) {\n throw new Error('Promotion Eval plan/suite/report 发生漂移')\n }\n const deploymentStatus = statusMulticaDeployment(root, receipt.target.workspace, {\n operationId: receipt.target.deploymentOperationId,\n })\n if (!deploymentStatus.receipt || deploymentStatus.receipt.receiptId !== receipt.target.deploymentReceiptId ||\n deploymentStatus.receipt.evidencePath !== receipt.target.deploymentReceiptPath ||\n sha256(readFileSync(safeProjectPath(root, receipt.target.deploymentReceiptPath, true))) !==\n receipt.target.deploymentReceiptHash ||\n deploymentStatus.receipt.deploymentHash !== receipt.target.deploymentHash ||\n deploymentStatus.receipt.observedHash !== receipt.target.observedHash) {\n throw new Error('Promotion 绑定的 Multica deployment Receipt 不一致')\n }\n if (!HASH.test(receiptHash)) throw new Error('Promotion Receipt hash 非法')\n}\n\nfunction promotionLinkHash(\n source: PromotionPlan['source'], evalEvidence: EvalGateEvidence,\n target: PromotionReceipt['target'] | (PromotionPlan['target'] & Record<string, unknown>),\n): string {\n return digest(stableStringify({\n source: {\n workspace: source.workspace, stage: source.stage, sourceHash: source.sourceHash,\n desiredHash: source.desiredHash, observedHash: source.observedHash,\n definitionHash: source.definitionHash, skills: source.skills,\n },\n eval: {\n runId: evalEvidence.runId, evidenceHash: evalEvidence.evidenceHash,\n suiteId: evalEvidence.suiteId, suiteHash: evalEvidence.suiteHash,\n reportHash: evalEvidence.reportHash,\n },\n target: {\n workspace: target.workspace, stage: target.stage,\n deploymentHash: target.deploymentHash,\n deploymentReceiptId: 'deploymentReceiptId' in target ? target.deploymentReceiptId : '',\n deploymentReceiptHash: 'deploymentReceiptHash' in target ? target.deploymentReceiptHash : '',\n observedHash: 'observedHash' in target ? target.observedHash : '',\n },\n }))\n}\n\nfunction emptyDeploymentPlan(target: DevelopmentWorkspaceView): MulticaDeploymentPlan {\n return {\n $schema: 'dingtalk-agent/multica-deployment-plan@1',\n planId: 'multica_deploy_plan_unavailable', action: 'apply', workspace: target.name,\n provider: 'multica', profile: '', inspectionId: '', desiredHash: target.desiredHash,\n deploymentHash: emptyHash(), expected: {\n workspaceId: '', runtimeId: '', agentId: '', agentName: '', skills: [],\n definitionHash: emptyHash(), instructionsHash: emptyHash(),\n }, operations: [], writeBudget: { forward: 0, rollback: 0 }, blocking: ['unavailable'],\n requiresPlanId: true, requiresExplicitYes: true, remoteRead: false, remoteWrite: false,\n triggerWrite: false, sideEffect: false, dingtalkSideEffect: false,\n }\n}\n\nfunction emptyEvalEvidence(route: PromotionRoute): EvalGateEvidence {\n return {\n runId: '', evidencePath: '', evidenceHash: emptyHash(), planHash: emptyHash(),\n suiteHash: emptyHash(), reportHash: emptyHash(), suiteId: '', model: '', runs: 0,\n configurations: [], caseIds: [...route.requiredCases],\n requiredSurfaces: [...route.requiredSurfaces], loadGate: false, hardGate: false,\n falseCompletionGate: false, behaviorGate: false,\n }\n}\n\nfunction hashTree(root: string): string {\n if (!lstatSync(root).isDirectory() || lstatSync(root).isSymbolicLink()) {\n throw new Error('Managed Workspace 必须是普通目录')\n }\n const base = realpathSync(root)\n const entries: Array<{ path: string; hash: string }> = []\n const visit = (directory: string, prefix = ''): void => {\n for (const entry of readdirSync(directory, { withFileTypes: true })\n .sort((a, b) => a.name.localeCompare(b.name))) {\n const path = join(directory, entry.name)\n const ref = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isSymbolicLink()) throw new Error(`Managed Workspace 不允许符号链接: ${ref}`)\n if (entry.isDirectory()) visit(path, ref)\n else if (entry.isFile()) entries.push({ path: ref, hash: sha256(readFileSync(path)) })\n else throw new Error(`Managed Workspace 包含特殊文件: ${ref}`)\n }\n }\n visit(base)\n return digest(stableStringify(entries))\n}\n\nfunction assertRedactedObservation(values: string[]): void {\n const text = values.join('\\n')\n const forbidden = [\n /(?:client[_-]?secret|access[_-]?token|refresh[_-]?token|password|credentials?|authorization|bearer)/iu,\n /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/iu,\n /(?:https?:\\/\\/|dingtalk:\\/\\/)/iu,\n /(?:^|\\D)(?:\\+?86[- ]?)?1[3-9]\\d{9}(?:\\D|$)/u,\n /\\b[A-Za-z0-9_-]{40,}\\b/u,\n ]\n if (forbidden.some((pattern) => pattern.test(text))) {\n throw new Error('Observation 包含凭据、PII、URL 或未脱敏长标识')\n }\n}\n\nfunction promotionReceiptPath(receiptId: string): string {\n return join(PROMOTION_ROOT, 'receipts', `${safeResourceId(receiptId, 'receiptId')}.json`)\n}\n\nfunction promotionBindingPath(promotionId: string): string {\n return join(PROMOTION_ROOT, 'bindings', `${safeResourceId(promotionId, 'promotionId')}.json`)\n}\n\nfunction candidatePath(candidateId: string): string {\n return join(CANDIDATE_ROOT, `${safeResourceId(candidateId, 'candidateId')}.json`)\n}\n\nfunction safeProjectPath(root: string, ref: string, mustExist: boolean): string {\n const rootReal = realpathSync(resolve(root))\n const candidate = resolve(rootReal, ref)\n const rel = relative(rootReal, candidate)\n if (rel === '..' || rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`)) {\n throw new Error(`Promotion 路径必须位于 Project 内: ${ref}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`Promotion 路径不存在: ${ref}`)\n if (existsSync(candidate)) {\n if (lstatSync(candidate).isSymbolicLink()) throw new Error(`Promotion 路径不能是符号链接: ${ref}`)\n if (realpathSync(candidate) !== candidate && !isInside(rootReal, realpathSync(candidate))) {\n throw new Error(`Promotion 真实路径越界: ${ref}`)\n }\n }\n let ancestor = dirname(candidate)\n while (!existsSync(ancestor)) {\n const parent = dirname(ancestor)\n if (parent === ancestor) break\n ancestor = parent\n }\n if (!existsSync(ancestor) || !isInside(rootReal, realpathSync(ancestor))) {\n throw new Error(`Promotion 父目录越界: ${ref}`)\n }\n return candidate\n}\n\nfunction atomicJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\n const temp = `${path}.tmp-${process.pid}-${randomUUID().slice(0, 8)}`\n writeFileSync(temp, `${JSON.stringify(value, null, 2)}\\n`, { flag: 'wx' })\n renameSync(temp, path)\n}\n\nfunction readJson(path: string, label: string): Record<string, any> {\n try {\n const value = JSON.parse(readFileSync(path, 'utf8'))\n return objectValue(value, label)\n } catch (error) {\n throw new Error(`${label} 不是合法 JSON object: ${(error as Error).message}`)\n }\n}\n\nfunction exactKeys(value: Record<string, unknown>, keys: string[], label: string): void {\n const expected = [...keys].sort()\n const actual = Object.keys(value).sort()\n if (stableStringify(actual) !== stableStringify(expected)) {\n throw new Error(`${label} 字段不精确: ${actual.join(',')}`)\n }\n}\n\nfunction objectValue(value: unknown, label: string): Record<string, any> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${label} 必须是 object`)\n return value as Record<string, any>\n}\n\nfunction stringField(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new Error(`${label} 必须是非空字符串`)\n return value.trim()\n}\n\nfunction boundedString(value: unknown, label: string, max: number): string {\n const item = stringField(value, label)\n if (item.length > max) throw new Error(`${label} 超过 ${max} 字符预算`)\n return item\n}\n\nfunction stringList(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.some((item) => typeof item !== 'string' || !item.trim())) {\n throw new Error(`${label} 必须是非空字符串数组`)\n }\n return value.map((item) => item.trim())\n}\n\nfunction uniqueSafeIds(value: unknown, label: string, max: number): string[] {\n const items = stringList(value, label).map((item) => safeId(item, label))\n if (!items.length || items.length > max || new Set(items).size !== items.length) {\n throw new Error(`${label} 数量或唯一性非法`)\n }\n return items\n}\n\nfunction safeId(value: unknown, label: string): string {\n const item = stringField(value, label)\n if (!SAFE_ID.test(item)) throw new Error(`${label} 不是安全 ID: ${item}`)\n return item\n}\n\nfunction safeResourceId(value: unknown, label: string): string {\n const item = stringField(value, label)\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{1,127}$/.test(item)) throw new Error(`${label} 不是安全资源 ID`)\n return item\n}\n\nfunction hashField(value: unknown, label: string): string {\n const item = stringField(value, label)\n if (!HASH.test(item)) throw new Error(`${label} 不是 SHA-256`)\n return item\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction emptyHash(): string {\n return '0'.repeat(64)\n}\n\nfunction errorCategory(error: unknown): string {\n return String((error as Error)?.message || error).replace(/[^a-zA-Z0-9._-]+/g, '-').slice(0, 120)\n}\n\nfunction isInside(root: string, candidate: string): boolean {\n const rel = relative(root, candidate)\n return rel === '' || (rel !== '..' && !rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n}\n"]}
|