@xdxer/dingtalk-agent 0.1.5-beta.1 → 0.1.5-beta.2

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 (42) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.en.md +5 -2
  3. package/README.md +5 -2
  4. package/dist/bin/dingtalk-agent.js +16 -5
  5. package/dist/bin/dingtalk-agent.js.map +1 -1
  6. package/dist/src/agent-platform.js +0 -1
  7. package/dist/src/agent-platform.js.map +1 -1
  8. package/dist/src/development-workspace.js +25 -8
  9. package/dist/src/development-workspace.js.map +1 -1
  10. package/dist/src/doctor.js +6 -1
  11. package/dist/src/doctor.js.map +1 -1
  12. package/dist/src/multica-deploy.js +265 -50
  13. package/dist/src/multica-deploy.js.map +1 -1
  14. package/dist/src/multica-provider.js +1 -2
  15. package/dist/src/multica-provider.js.map +1 -1
  16. package/dist/src/opencode-provider.js +3 -1
  17. package/dist/src/opencode-provider.js.map +1 -1
  18. package/dist/src/skill-manager.js +2 -3
  19. package/dist/src/skill-manager.js.map +1 -1
  20. package/docs/ARCHITECTURE.md +12 -0
  21. package/docs/schemas/multica-deployment-receipt.schema.json +2 -2
  22. package/docs/schemas/multica-workspace-run-plan.schema.json +31 -0
  23. package/docs/schemas/multica-workspace-run.schema.json +44 -0
  24. package/docs/schemas/project.schema.json +10 -2
  25. package/lab/project-workspace/fake-multica-provider.mjs +39 -10
  26. package/lab/project-workspace/multica-readonly.fixture.json +0 -12
  27. package/lab/project-workspace/project.fixture.json +0 -4
  28. package/lab/robot-eval/suite.json +1 -1
  29. package/package.json +1 -2
  30. package/skills/README.md +0 -1
  31. package/skills/core/dingtalk-agent-compose/SKILL.md +5 -5
  32. package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +1 -1
  33. package/skills/core/dingtalk-agent-compose/references/agent-definition-contract.md +1 -1
  34. package/skills/core/dingtalk-agent-eval/SKILL.md +1 -1
  35. package/skills/core/dingtalk-agent-eval/references/interactive-debug-channels.md +9 -3
  36. package/skills/core/dingtalk-basic-behavior/SKILL.md +15 -3
  37. package/skills/core/dingtalk-basic-behavior/references/perception-and-gates.md +54 -0
  38. package/skills/core/dingtalk-basic-behavior/references/truth-and-recovery.md +4 -2
  39. package/skills/platforms/multica-dingtalk/PLATFORM.md +6 -5
  40. package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/SKILL.md +4 -4
  41. package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/references/multica-deployment-contract.md +14 -6
  42. package/skills/platforms/multica-dingtalk/dingtalk-agent-boot-multica/SKILL.md +0 -40
@@ -5,7 +5,6 @@ import { dirname, join, relative, resolve } from 'node:path';
5
5
  import { WORKSPACE_STATE_ROOT, inspectAgentProject, showDevelopmentWorkspace, } from './development-workspace.js';
6
6
  import { digest, stableStringify } from './events.js';
7
7
  export const MULTICA_EVIDENCE_ROOT = '.dingtalk-agent/development-workspace-evidence';
8
- export const MULTICA_BOOT_SKILL = 'dingtalk-agent-boot-multica';
9
8
  class MulticaReadFailure extends Error {
10
9
  category;
11
10
  constructor(category) {
@@ -421,7 +420,7 @@ function resolveMulticaTarget(start, name, env, cliVersion, agentIdOverride = ''
421
420
  return {
422
421
  root: info.root,
423
422
  projectName: info.project.displayName,
424
- skills: [...new Set([...info.project.skills, MULTICA_BOOT_SKILL])].sort(),
423
+ skills: [...new Set(info.project.skills)].sort(),
425
424
  workspace,
426
425
  profile: provider.profile,
427
426
  workspaceId,
@@ -1 +1 @@
1
- {"version":3,"file":"multica-provider.js","sourceRoot":"","sources":["../../src/multica-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto'\nimport { spawnSync } from 'node:child_process'\nimport {\n existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync,\n} from 'node:fs'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport {\n WORKSPACE_STATE_ROOT, inspectAgentProject, showDevelopmentWorkspace,\n type DevelopmentWorkspaceState, type DevelopmentWorkspaceView,\n} from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\n\nexport const MULTICA_EVIDENCE_ROOT = '.dingtalk-agent/development-workspace-evidence'\nexport const MULTICA_BOOT_SKILL = 'dingtalk-agent-boot-multica'\n\nexport interface MulticaWorkspacePlan {\n $schema: 'dingtalk-agent/multica-workspace-plan@1'\n planId: string\n workspace: string\n provider: 'multica'\n profile: string\n desiredHash: string\n currentState: string\n expected: {\n workspaceId: string\n runtimeId: string\n agentId: string\n skills: string[]\n }\n observed: {\n workspaceId: string\n runtimeId: string\n agentId: string\n skillSetHash: string\n }\n diff: string[]\n blocking: string[]\n operations: Array<{ id: string; argv: string[] }>\n writes: []\n remoteRead: false\n remoteWrite: false\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface MulticaReadCall {\n id: string\n argv: string[]\n exitCode: number\n stdoutHash: string\n stderrHash: string\n passed: boolean\n}\n\nexport interface MulticaResourceSummary {\n workspace: { id: string; name: string; slug: string } | null\n runtime: {\n id: string; workspaceId: string; name: string; provider: string; status: string\n } | null\n agent: {\n id: string; workspaceId: string; runtimeId: string; name: string; status: string; archived: boolean\n } | null\n agentCandidates: Array<{ id: string; name: string; archived: boolean }>\n catalogSkills: Array<{ id: string; workspaceId: string; name: string }>\n assignedSkills: Array<{ id: string; name: string; enabled: boolean }>\n}\n\nexport interface MulticaWorkspaceInspection {\n $schema: 'dingtalk-agent/multica-workspace-inspection@1'\n passed: boolean\n readyForApply: boolean\n providerReady: false\n inspectionId: string\n workspace: string\n provider: 'multica'\n profile: string\n cliVersion: string\n desiredHash: string\n observedHash: string\n expected: MulticaWorkspacePlan['expected']\n auth: { authenticated: boolean; principalHash: string; serverHash: string }\n resources: MulticaResourceSummary\n diff: string[]\n failures: string[]\n calls: MulticaReadCall[]\n evidencePath: string\n remoteRead: true\n remoteWrite: false\n sideEffect: 'remote-read'\n dingtalkSideEffect: false\n}\n\nexport interface MulticaWorkspaceStatus {\n $schema: 'dingtalk-agent/multica-workspace-status@1'\n workspace: string\n provider: 'multica'\n available: boolean\n inspectionId: string\n passed: boolean\n readyForApply: boolean\n providerReady: false\n evidencePath: string\n evidenceIntegrity: boolean\n stateMatched: boolean\n desiredHash: string\n observedHash: string\n diff: string[]\n failures: string[]\n remoteRead: false\n remoteWrite: false\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface MulticaResourceList {\n $schema: 'dingtalk-agent/multica-workspace-resource-list@1'\n passed: boolean\n workspace: string\n provider: 'multica'\n profile: string\n inspectionId: string\n resources: MulticaResourceSummary\n failures: string[]\n calls: MulticaReadCall[]\n remoteRead: true\n remoteWrite: false\n sideEffect: 'remote-read'\n dingtalkSideEffect: false\n}\n\nexport interface MulticaReadOptions {\n execute?: boolean\n yes?: boolean\n command?: string\n env?: NodeJS.ProcessEnv\n timeoutMs?: number\n out?: string\n cliVersion?: string\n /** Internal composition hook: W4 reuses W3 readback without clobbering ready state. */\n persist?: boolean\n /** Internal composition hook for the first readback after an Agent create. */\n agentIdOverride?: string\n}\n\ninterface ResolvedMulticaTarget {\n root: string\n projectName: string\n skills: string[]\n workspace: DevelopmentWorkspaceView\n profile: string\n workspaceId: string\n runtimeId: string\n agentId: string\n blocking: string[]\n}\n\ninterface ReadResult {\n stdout: string\n stderr: string\n}\n\nclass MulticaReadFailure extends Error {\n constructor(readonly category: string) {\n super(category)\n }\n}\n\nexport function planMulticaWorkspace(\n start: string, name: string, options: MulticaReadOptions = {},\n): MulticaWorkspacePlan {\n const target = resolveMulticaTarget(\n start, name, options.env || process.env, options.cliVersion || '', options.agentIdOverride,\n )\n const state = target.workspace.state\n const expected = {\n workspaceId: target.workspaceId,\n runtimeId: target.runtimeId,\n agentId: target.agentId,\n skills: [...target.skills].sort(),\n }\n const observed = {\n workspaceId: state?.binding.remoteWorkspaceId || '',\n runtimeId: state?.binding.runtimeId || '',\n agentId: state?.binding.agentId || '',\n skillSetHash: state?.binding.observedSkillSetHash || '',\n }\n const expectedSkillSetHash = digest(stableStringify(expected.skills))\n const diff: string[] = []\n if (observed.workspaceId !== expected.workspaceId) diff.push('workspace.scope')\n if (observed.runtimeId !== expected.runtimeId) diff.push('runtime.binding')\n if (expected.agentId) {\n if (observed.agentId !== expected.agentId) diff.push('agent.binding')\n } else if (!observed.agentId) diff.push('agent.create')\n if (observed.skillSetHash !== expectedSkillSetHash) diff.push('skills.assignments')\n const operations = readOperations(target)\n const planId = `multica_plan_${digest(stableStringify({\n workspace: name,\n desiredHash: target.workspace.desiredHash,\n expected,\n observed,\n diff: [...diff].sort(),\n blocking: [...target.blocking].sort(),\n operations,\n })).slice(0, 24)}`\n return {\n $schema: 'dingtalk-agent/multica-workspace-plan@1',\n planId,\n workspace: name,\n provider: 'multica',\n profile: target.profile,\n desiredHash: target.workspace.desiredHash,\n currentState: target.workspace.status,\n expected,\n observed,\n diff: [...diff].sort(),\n blocking: [...target.blocking].sort(),\n operations,\n writes: [],\n remoteRead: false,\n remoteWrite: false,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function inspectMulticaWorkspace(\n start: string, name: string, options: MulticaReadOptions = {},\n): MulticaWorkspacePlan | MulticaWorkspaceInspection {\n const plan = planMulticaWorkspace(start, name, options)\n if (!options.execute) return plan\n requireReadConfirmation(options, 'workspace inspect')\n if (plan.blocking.length) {\n throw new Error(`Multica inspect 前置条件不完整: ${plan.blocking.join(', ')}`)\n }\n return executeInspection(start, name, plan, options, options.persist !== false)\n}\n\nexport function listMulticaWorkspaceResources(\n start: string, name: string, options: MulticaReadOptions = {},\n): MulticaWorkspacePlan | MulticaResourceList {\n const plan = planMulticaWorkspace(start, name, options)\n if (!options.execute) return plan\n requireReadConfirmation(options, 'workspace remote-list')\n if (plan.blocking.length) {\n throw new Error(`Multica remote-list 前置条件不完整: ${plan.blocking.join(', ')}`)\n }\n const inspection = executeInspection(start, name, plan, options, false)\n return {\n $schema: 'dingtalk-agent/multica-workspace-resource-list@1',\n passed: inspection.passed,\n workspace: inspection.workspace,\n provider: 'multica',\n profile: inspection.profile,\n inspectionId: inspection.inspectionId,\n resources: inspection.resources,\n failures: inspection.failures,\n calls: inspection.calls,\n remoteRead: true,\n remoteWrite: false,\n sideEffect: 'remote-read',\n dingtalkSideEffect: false,\n }\n}\n\nexport function statusMulticaWorkspace(\n start: string, name: string, cliVersion = '',\n): MulticaWorkspaceStatus {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireMulticaWorkspace(info.root, name, cliVersion)\n const latestPath = latestPointerPath(info.root, name)\n if (!existsSync(latestPath)) return emptyStatus(workspace)\n const pointer = readJsonObject(latestPath, 'Multica inspection latest pointer')\n if (pointer.$schema !== 'dingtalk-agent/multica-inspection-pointer@1') {\n throw new Error('Multica inspection latest pointer schema 非法')\n }\n const evidencePath = stringField(pointer.evidencePath, 'pointer.evidencePath')\n const reportPath = safeProjectPath(info.root, evidencePath, true)\n const reportSource = readFileSync(reportPath, 'utf8')\n const evidenceIntegrity = sha256(reportSource) === stringField(pointer.reportHash, 'pointer.reportHash')\n const report = JSON.parse(reportSource) as MulticaWorkspaceInspection\n if (report.$schema !== 'dingtalk-agent/multica-workspace-inspection@1' || report.workspace !== name) {\n throw new Error('Multica inspection report 与 Workspace 不匹配')\n }\n assertRedacted(report)\n const state = workspace.state\n const stateMatched = Boolean(evidenceIntegrity && report.passed && state &&\n state.provider === 'multica' && ['verifying', 'ready'].includes(state.status) &&\n state.desiredHash === workspace.desiredHash && state.observedHash === report.observedHash &&\n state.binding.inspectionId === report.inspectionId &&\n state.binding.evidencePath === evidencePath)\n return {\n $schema: 'dingtalk-agent/multica-workspace-status@1',\n workspace: name,\n provider: 'multica',\n available: true,\n inspectionId: report.inspectionId,\n passed: report.passed,\n readyForApply: report.readyForApply && stateMatched,\n providerReady: false,\n evidencePath,\n evidenceIntegrity,\n stateMatched,\n desiredHash: workspace.desiredHash,\n observedHash: report.observedHash,\n diff: [...report.diff],\n failures: [...report.failures],\n remoteRead: false,\n remoteWrite: false,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction executeInspection(\n start: string,\n name: string,\n plan: MulticaWorkspacePlan,\n options: MulticaReadOptions,\n persist: boolean,\n): MulticaWorkspaceInspection {\n const env = options.env || process.env\n const target = resolveMulticaTarget(\n start, name, env, options.cliVersion || '', options.agentIdOverride,\n )\n const command = options.command || env.DTA_MULTICA_BIN || 'multica'\n const timeoutMs = positiveTimeout(options.timeoutMs)\n if (persist) {\n const plannedEvidence = options.out || join(\n MULTICA_EVIDENCE_ROOT, safeName(name), 'multica-inspections', 'planned.json',\n )\n safeProjectPath(target.root, plannedEvidence, false)\n latestPointerPath(target.root, name)\n safeProjectPath(target.root, join(WORKSPACE_STATE_ROOT, `${name}.json`), false)\n }\n const calls: MulticaReadCall[] = []\n const failures: string[] = []\n const diff: string[] = []\n let cliVersion = ''\n let principalHash = ''\n let serverHash = ''\n let resources = emptyResources()\n\n try {\n const version = runRead(command, ['--version'], 'cli.version', target.root, env, timeoutMs, calls)\n cliVersion = parseMulticaVersion(version.stdout || version.stderr)\n\n const config = runRead(command, profileArgs(target, ['config', 'show']),\n 'profile.config', target.root, env, timeoutMs, calls)\n const parsedConfig = parseConfig(config.stdout, target.profile)\n serverHash = parsedConfig.server ? digest(parsedConfig.server) : ''\n if (parsedConfig.workspaceId && parsedConfig.workspaceId !== target.workspaceId) {\n throw new MulticaReadFailure('scope.profile-workspace-mismatch')\n }\n\n const auth = runRead(command, profileArgs(target, ['auth', 'status']),\n 'auth.status', target.root, env, timeoutMs, calls)\n const principal = parseAuth(auth.stdout + '\\n' + auth.stderr)\n if (!principal) throw new MulticaReadFailure('auth.not-authenticated')\n principalHash = digest(principal)\n\n const workspaceList = jsonArray(runRead(command,\n profileArgs(target, ['workspace', 'list', '--output', 'json']),\n 'workspace.list', target.root, env, timeoutMs, calls).stdout, 'workspace list')\n const workspaceMatches = workspaceList.filter((item) => idOf(item) === target.workspaceId)\n if (workspaceMatches.length !== 1) throw new MulticaReadFailure('scope.workspace-list-mismatch')\n\n const workspaceGet = jsonObject(runRead(command,\n profileArgs(target, ['workspace', 'get', target.workspaceId, '--output', 'json']),\n 'workspace.get', target.root, env, timeoutMs, calls).stdout, 'workspace get')\n if (idOf(workspaceGet) !== target.workspaceId) {\n throw new MulticaReadFailure('scope.workspace-get-mismatch')\n }\n resources.workspace = {\n id: resourceId(idOf(workspaceGet), 'workspace.id'),\n name: safeDisplay(workspaceGet.name),\n slug: safeDisplay(workspaceGet.slug),\n }\n\n const runtimes = jsonArray(runRead(command,\n scopedArgs(target, ['runtime', 'list', '--output', 'json']),\n 'runtime.list', target.root, env, timeoutMs, calls).stdout, 'runtime list')\n const runtimeMatches = runtimes.filter((item) => idOf(item) === target.runtimeId)\n if (runtimeMatches.length !== 1) throw new MulticaReadFailure('scope.runtime-mismatch')\n const runtime = runtimeMatches[0]\n const runtimeWorkspace = optionalField(runtime.workspace_id)\n if (runtimeWorkspace && runtimeWorkspace !== target.workspaceId) {\n throw new MulticaReadFailure('scope.runtime-workspace-mismatch')\n }\n resources.runtime = {\n id: resourceId(idOf(runtime), 'runtime.id'),\n workspaceId: runtimeWorkspace || target.workspaceId,\n name: safeDisplay(runtime.name),\n provider: safeDisplay(runtime.provider),\n status: safeDisplay(runtime.status),\n }\n\n const agents = jsonArray(runRead(command,\n scopedArgs(target, ['agent', 'list', '--include-archived', '--output', 'json']),\n 'agent.list', target.root, env, timeoutMs, calls).stdout, 'agent list')\n resources.agentCandidates = agents\n .filter((item) => optionalField(item.name) === target.projectName)\n .map((item) => ({\n id: resourceId(idOf(item), 'agent candidate.id'),\n name: safeDisplay(item.name),\n archived: Boolean(optionalField(item.archived_at)),\n }))\n .sort((a, b) => a.id.localeCompare(b.id))\n\n const catalog = jsonArray(runRead(command,\n scopedArgs(target, ['skill', 'list', '--output', 'json']),\n 'skill.list', target.root, env, timeoutMs, calls).stdout, 'skill list')\n resources.catalogSkills = catalog.map((item) => ({\n id: resourceId(idOf(item), 'skill.id'),\n workspaceId: optionalField(item.workspace_id) || target.workspaceId,\n name: safeDisplay(item.name),\n })).sort(compareNamedResource)\n if (resources.catalogSkills.some((item) => item.workspaceId !== target.workspaceId)) {\n throw new MulticaReadFailure('scope.skill-workspace-mismatch')\n }\n\n if (target.agentId) {\n const agentMatches = agents.filter((item) => idOf(item) === target.agentId)\n if (agentMatches.length !== 1) throw new MulticaReadFailure('scope.agent-list-mismatch')\n const agent = jsonObject(runRead(command,\n scopedArgs(target, ['agent', 'get', target.agentId, '--output', 'json']),\n 'agent.get', target.root, env, timeoutMs, calls).stdout, 'agent get')\n const agentWorkspace = optionalField(agent.workspace_id)\n const agentRuntime = optionalField(agent.runtime_id)\n if (idOf(agent) !== target.agentId || agentWorkspace !== target.workspaceId ||\n agentRuntime !== target.runtimeId) {\n throw new MulticaReadFailure('scope.agent-binding-mismatch')\n }\n resources.agent = {\n id: target.agentId,\n workspaceId: agentWorkspace,\n runtimeId: agentRuntime,\n name: safeDisplay(agent.name),\n status: safeDisplay(agent.status),\n archived: Boolean(optionalField(agent.archived_at)),\n }\n const assigned = jsonArray(runRead(command,\n scopedArgs(target, ['agent', 'skills', 'list', target.agentId, '--output', 'json']),\n 'agent.skills', target.root, env, timeoutMs, calls).stdout, 'agent skills list')\n resources.assignedSkills = assigned.map((item) => ({\n id: resourceId(idOf(item), 'assigned skill.id'),\n name: safeDisplay(item.name),\n enabled: item.enabled === undefined ? true : Boolean(item.enabled),\n })).sort(compareNamedResource)\n } else if (resources.agentCandidates.length > 0) {\n throw new MulticaReadFailure('agent.unbound-name-candidates')\n } else {\n diff.push('agent.create')\n }\n\n for (const name of target.skills) {\n const candidates = resources.catalogSkills.filter((item) => item.name === name)\n if (candidates.length > 1) throw new MulticaReadFailure(`skills.duplicate:${name}`)\n if (candidates.length === 0) {\n diff.push(`skill.create:${name}`)\n continue\n }\n if (target.agentId && !resources.assignedSkills.some((item) =>\n item.id === candidates[0].id && item.enabled)) {\n diff.push(`skill.assign:${name}`)\n }\n }\n } catch (error) {\n failures.push(error instanceof MulticaReadFailure ? error.category : 'provider.read-failed')\n }\n\n const canonical = {\n cliVersion,\n profile: target.profile,\n principalHash,\n serverHash,\n expected: plan.expected,\n resources,\n }\n const observedHash = digest(stableStringify(canonical))\n const passed = failures.length === 0\n const inspectionId = `multica_inspect_${digest(stableStringify({\n desiredHash: target.workspace.desiredHash,\n observedHash,\n passed,\n diff: [...diff].sort(),\n failures,\n })).slice(0, 24)}`\n const defaultEvidencePath = join(\n MULTICA_EVIDENCE_ROOT, safeName(name), 'multica-inspections', `${inspectionId}.json`,\n )\n const evidencePath = options.out\n ? relative(target.root, safeProjectPath(target.root, options.out, false))\n : defaultEvidencePath\n const report: MulticaWorkspaceInspection = {\n $schema: 'dingtalk-agent/multica-workspace-inspection@1',\n passed,\n readyForApply: passed,\n providerReady: false,\n inspectionId,\n workspace: name,\n provider: 'multica',\n profile: target.profile,\n cliVersion,\n desiredHash: target.workspace.desiredHash,\n observedHash,\n expected: plan.expected,\n auth: { authenticated: Boolean(principalHash), principalHash, serverHash },\n resources,\n diff: [...diff].sort(),\n failures: [...failures].sort(),\n calls,\n evidencePath,\n remoteRead: true,\n remoteWrite: false,\n sideEffect: 'remote-read',\n dingtalkSideEffect: false,\n }\n assertRedacted(report)\n if (persist) persistInspection(target, plan, report)\n return report\n}\n\nfunction persistInspection(\n target: ResolvedMulticaTarget,\n plan: MulticaWorkspacePlan,\n report: MulticaWorkspaceInspection,\n): void {\n const reportPath = safeProjectPath(target.root, report.evidencePath, false)\n atomicJson(reportPath, report)\n const reportSource = readFileSync(reportPath, 'utf8')\n const pointer = {\n $schema: 'dingtalk-agent/multica-inspection-pointer@1',\n inspectionId: report.inspectionId,\n evidencePath: report.evidencePath,\n reportHash: sha256(reportSource),\n }\n atomicJson(latestPointerPath(target.root, target.workspace.name), pointer)\n if (!report.passed) return\n const expectedSkillSetHash = digest(stableStringify([...target.skills].sort()))\n const observedSkillSetHash = digest(stableStringify(report.resources.assignedSkills\n .filter((item) => item.enabled).map((item) => item.name).sort()))\n const state: DevelopmentWorkspaceState = {\n $schema: 'dingtalk-agent/workspace-state@1',\n workspace: target.workspace.name,\n provider: 'multica',\n status: 'verifying',\n binding: {\n profile: target.profile,\n remoteWorkspaceId: target.workspaceId,\n runtimeId: target.runtimeId,\n agentId: target.agentId,\n cliVersion: report.cliVersion,\n principalHash: report.auth.principalHash,\n serverHash: report.auth.serverHash,\n inspectionId: report.inspectionId,\n evidencePath: report.evidencePath,\n sourceHash: target.workspace.sourceHash,\n expectedSkillSetHash,\n observedSkillSetHash,\n },\n desiredHash: target.workspace.desiredHash,\n observedHash: report.observedHash,\n lastPlanId: plan.planId,\n lastReceiptId: '',\n lastEvalId: '',\n }\n atomicJson(safeProjectPath(\n target.root, join(WORKSPACE_STATE_ROOT, `${target.workspace.name}.json`), false,\n ), state)\n}\n\nfunction resolveMulticaTarget(\n start: string, name: string, env: NodeJS.ProcessEnv, cliVersion: string,\n agentIdOverride = '',\n): ResolvedMulticaTarget {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireMulticaWorkspace(info.root, name, cliVersion)\n const provider = workspace.provider\n const blocking: string[] = []\n const resolveRef = (ref: string, label: string, optional = false): string => {\n if (!ref) return ''\n const variable = ref.startsWith('env:') ? ref.slice(4) : ''\n const value = variable ? String(env[variable] || '').trim() : ''\n if (!value) {\n if (!optional) blocking.push(label)\n return ''\n }\n try { return resourceId(value, label) } catch { blocking.push(`${label}.invalid`); return '' }\n }\n const workspaceId = resolveRef(provider.workspaceIdFrom, 'workspace-id')\n const runtimeId = resolveRef(provider.runtimeIdFrom, 'runtime-id')\n let agentId = ''\n if (agentIdOverride) {\n try { agentId = resourceId(agentIdOverride, 'agent-id-override') }\n catch { blocking.push('agent-id-override.invalid') }\n } else if (provider.agentIdFrom) agentId = resolveRef(provider.agentIdFrom, 'agent-id')\n else if (workspace.state?.binding.agentId) {\n try { agentId = resourceId(workspace.state.binding.agentId, 'state.agent-id') }\n catch { blocking.push('state.agent-id.invalid') }\n }\n return {\n root: info.root,\n projectName: info.project.displayName,\n skills: [...new Set([...info.project.skills, MULTICA_BOOT_SKILL])].sort(),\n workspace,\n profile: provider.profile,\n workspaceId,\n runtimeId,\n agentId,\n blocking,\n }\n}\n\nfunction requireMulticaWorkspace(start: string, name: string, cliVersion: string): DevelopmentWorkspaceView {\n const workspace = showDevelopmentWorkspace(start, name, cliVersion)\n if (workspace.provider.kind !== 'multica' || workspace.legacy) {\n throw new Error(`Workspace ${name} 不是 multica Provider;W3 不执行 ${workspace.provider.kind}`)\n }\n return workspace\n}\n\nfunction readOperations(target: ResolvedMulticaTarget): Array<{ id: string; argv: string[] }> {\n const operations = [\n { id: 'cli.version', argv: ['--version'] },\n { id: 'profile.config', argv: profileArgs(target, ['config', 'show']) },\n { id: 'auth.status', argv: profileArgs(target, ['auth', 'status']) },\n { id: 'workspace.list', argv: profileArgs(target, ['workspace', 'list', '--output', 'json']) },\n { id: 'workspace.get', argv: profileArgs(target,\n ['workspace', 'get', target.workspaceId || '<workspace-id>', '--output', 'json']) },\n { id: 'runtime.list', argv: scopedArgs(target, ['runtime', 'list', '--output', 'json']) },\n { id: 'agent.list', argv: scopedArgs(target,\n ['agent', 'list', '--include-archived', '--output', 'json']) },\n { id: 'skill.list', argv: scopedArgs(target, ['skill', 'list', '--output', 'json']) },\n ]\n if (target.agentId) operations.push(\n { id: 'agent.get', argv: scopedArgs(target,\n ['agent', 'get', target.agentId, '--output', 'json']) },\n { id: 'agent.skills', argv: scopedArgs(target,\n ['agent', 'skills', 'list', target.agentId, '--output', 'json']) },\n )\n return operations\n}\n\nfunction profileArgs(target: ResolvedMulticaTarget, args: string[]): string[] {\n return ['--profile', target.profile, ...args]\n}\n\nfunction scopedArgs(target: ResolvedMulticaTarget, args: string[]): string[] {\n return ['--profile', target.profile, '--workspace-id', target.workspaceId || '<workspace-id>', ...args]\n}\n\nfunction runRead(\n command: string,\n argv: string[],\n id: string,\n cwd: string,\n env: NodeJS.ProcessEnv,\n timeoutMs: number,\n calls: MulticaReadCall[],\n): ReadResult {\n const run = spawnSync(command, argv, {\n cwd,\n env,\n encoding: 'utf8',\n timeout: timeoutMs,\n maxBuffer: 16 * 1024 * 1024,\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n const stdout = String(run.stdout || '')\n const stderr = String(run.stderr || '')\n const exitCode = typeof run.status === 'number' ? run.status : 1\n const passed = !run.error && exitCode === 0\n calls.push({\n id,\n argv: argv.map(safeArg),\n exitCode,\n stdoutHash: sha256(stdout),\n stderrHash: sha256(stderr),\n passed,\n })\n if (!passed) throw new MulticaReadFailure(`command.${id}`)\n return { stdout, stderr }\n}\n\nfunction parseMulticaVersion(value: string): string {\n const match = value.match(/\\bmultica\\s+([0-9]+\\.[0-9]+\\.[0-9]+(?:[-+][A-Za-z0-9.-]+)?)/i)\n if (!match) throw new MulticaReadFailure('cli.version-invalid')\n return match[1]\n}\n\nfunction parseConfig(value: string, profile: string): { server: string; workspaceId: string } {\n const fields = new Map<string, string>()\n for (const line of value.split(/\\r?\\n/)) {\n const match = line.match(/^([^:]+):\\s*(.*)$/)\n if (match) fields.set(match[1].trim().toLowerCase(), match[2].trim())\n }\n if ((fields.get('profile') || '') !== profile) throw new MulticaReadFailure('profile.mismatch')\n const normalize = (item: string | undefined): string => item && item !== '(not set)' ? item : ''\n return {\n server: normalize(fields.get('server_url')),\n workspaceId: normalize(fields.get('workspace_id')),\n }\n}\n\nfunction parseAuth(value: string): string {\n if (/not authenticated|invalid or expired/i.test(value)) return ''\n const user = value.split(/\\r?\\n/).find((line) => /^User:\\s+/i.test(line.trim())) || ''\n const server = value.split(/\\r?\\n/).find((line) => /^Server:\\s+/i.test(line.trim())) || ''\n const token = value.split(/\\r?\\n/).find((line) => /^Token:\\s+/i.test(line.trim())) || ''\n return user && server && token ? `${user.trim()}|${server.trim()}` : ''\n}\n\nfunction jsonArray(value: string, label: string): Record<string, unknown>[] {\n let parsed: unknown\n try { parsed = JSON.parse(value) } catch { throw new MulticaReadFailure(`json.${label}`) }\n if (!Array.isArray(parsed) || parsed.some((item) => !item || typeof item !== 'object' || Array.isArray(item))) {\n throw new MulticaReadFailure(`shape.${label}`)\n }\n return parsed as Record<string, unknown>[]\n}\n\nfunction jsonObject(value: string, label: string): Record<string, unknown> {\n let parsed: unknown\n try { parsed = JSON.parse(value) } catch { throw new MulticaReadFailure(`json.${label}`) }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new MulticaReadFailure(`shape.${label}`)\n }\n return parsed as Record<string, unknown>\n}\n\nfunction readJsonObject(path: string, label: string): Record<string, unknown> {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`${label} 不能是符号链接`)\n return jsonObject(readFileSync(path, 'utf8'), label)\n}\n\nfunction idOf(value: Record<string, unknown>): string {\n return optionalField(value.id)\n}\n\nfunction stringField(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value) throw new Error(`${label} 必须是非空字符串`)\n return value\n}\n\nfunction optionalField(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction resourceId(value: string, label: string): string {\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{1,127}$/.test(value) ||\n /^(?:mul_|mcn_|sk-|bearer)/i.test(value)) {\n throw new Error(`${label} 不是安全的稳定资源 ID`)\n }\n return value\n}\n\nfunction safeDisplay(value: unknown): string {\n const text = typeof value === 'string' ? value : ''\n if (!text) return ''\n if (/(?:mul_|mcn_|sk-[A-Za-z0-9]|bearer\\s|access[_-]?token|client[_-]?secret|password)/i.test(text)) {\n return `[redacted:${digest(text).slice(0, 12)}]`\n }\n return text.length > 160 ? `${text.slice(0, 157)}...` : text\n}\n\nfunction safeArg(value: string): string {\n return safeDisplay(value)\n}\n\nfunction compareNamedResource(\n a: { name: string; id: string }, b: { name: string; id: string },\n): number {\n return a.name.localeCompare(b.name) || a.id.localeCompare(b.id)\n}\n\nfunction emptyResources(): MulticaResourceSummary {\n return {\n workspace: null,\n runtime: null,\n agent: null,\n agentCandidates: [],\n catalogSkills: [],\n assignedSkills: [],\n }\n}\n\nfunction emptyStatus(workspace: DevelopmentWorkspaceView): MulticaWorkspaceStatus {\n return {\n $schema: 'dingtalk-agent/multica-workspace-status@1',\n workspace: workspace.name,\n provider: 'multica',\n available: false,\n inspectionId: '',\n passed: false,\n readyForApply: false,\n providerReady: false,\n evidencePath: '',\n evidenceIntegrity: false,\n stateMatched: false,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n diff: [],\n failures: ['inspection.missing'],\n remoteRead: false,\n remoteWrite: false,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction latestPointerPath(root: string, name: string): string {\n return safeProjectPath(root, join(\n MULTICA_EVIDENCE_ROOT, safeName(name), 'multica-inspections', 'latest.json',\n ), false)\n}\n\nfunction safeName(value: string): string {\n if (!/^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/.test(value)) {\n throw new Error(`Workspace name 非法: ${value}`)\n }\n return value\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(`Multica Provider 路径必须位于 Project 内: ${ref}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`Multica evidence 不存在: ${ref}`)\n if (existsSync(candidate)) {\n if (lstatSync(candidate).isSymbolicLink()) {\n throw new Error(`Multica Provider 路径不能是符号链接: ${ref}`)\n }\n if (!isInside(rootReal, realpathSync(candidate))) {\n throw new Error(`Multica Provider 真实路径越出 Project: ${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(`Multica Provider 父目录真实路径越出 Project: ${ref}`)\n }\n return candidate\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\nfunction atomicJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\n const temp = `${path}.tmp-${process.pid}`\n const source = `${JSON.stringify(value, null, 2)}\\n`\n writeFileSync(temp, source, { mode: 0o600 })\n renameSync(temp, path)\n if (readFileSync(path, 'utf8') !== source) throw new Error(`原子写后回读不一致: ${path}`)\n}\n\nfunction assertRedacted(value: unknown): void {\n const source = JSON.stringify(value)\n if (/(?:mul_|mcn_|sk-[A-Za-z0-9]|bearer\\s|access[_-]?token|client[_-]?secret|password)/i.test(source)) {\n throw new Error('Multica inspection 脱敏失败:检测到疑似凭据')\n }\n}\n\nfunction positiveTimeout(value: number | undefined): number {\n if (value === undefined) return 30_000\n if (!Number.isFinite(value) || value < 100 || value > 300_000) {\n throw new Error('Multica read timeout 必须在 100..300000 ms')\n }\n return Math.floor(value)\n}\n\nfunction requireReadConfirmation(options: MulticaReadOptions, command: string): void {\n if (!options.execute || !options.yes) {\n throw new Error(`${command} 会读取当前 Multica 身份和远端 scope;必须同时传 --execute --yes`)\n }\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n"]}
1
+ {"version":3,"file":"multica-provider.js","sourceRoot":"","sources":["../../src/multica-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto'\nimport { spawnSync } from 'node:child_process'\nimport {\n existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync,\n} from 'node:fs'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport {\n WORKSPACE_STATE_ROOT, inspectAgentProject, showDevelopmentWorkspace,\n type DevelopmentWorkspaceState, type DevelopmentWorkspaceView,\n} from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\n\nexport const MULTICA_EVIDENCE_ROOT = '.dingtalk-agent/development-workspace-evidence'\n\nexport interface MulticaWorkspacePlan {\n $schema: 'dingtalk-agent/multica-workspace-plan@1'\n planId: string\n workspace: string\n provider: 'multica'\n profile: string\n desiredHash: string\n currentState: string\n expected: {\n workspaceId: string\n runtimeId: string\n agentId: string\n skills: string[]\n }\n observed: {\n workspaceId: string\n runtimeId: string\n agentId: string\n skillSetHash: string\n }\n diff: string[]\n blocking: string[]\n operations: Array<{ id: string; argv: string[] }>\n writes: []\n remoteRead: false\n remoteWrite: false\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface MulticaReadCall {\n id: string\n argv: string[]\n exitCode: number\n stdoutHash: string\n stderrHash: string\n passed: boolean\n}\n\nexport interface MulticaResourceSummary {\n workspace: { id: string; name: string; slug: string } | null\n runtime: {\n id: string; workspaceId: string; name: string; provider: string; status: string\n } | null\n agent: {\n id: string; workspaceId: string; runtimeId: string; name: string; status: string; archived: boolean\n } | null\n agentCandidates: Array<{ id: string; name: string; archived: boolean }>\n catalogSkills: Array<{ id: string; workspaceId: string; name: string }>\n assignedSkills: Array<{ id: string; name: string; enabled: boolean }>\n}\n\nexport interface MulticaWorkspaceInspection {\n $schema: 'dingtalk-agent/multica-workspace-inspection@1'\n passed: boolean\n readyForApply: boolean\n providerReady: false\n inspectionId: string\n workspace: string\n provider: 'multica'\n profile: string\n cliVersion: string\n desiredHash: string\n observedHash: string\n expected: MulticaWorkspacePlan['expected']\n auth: { authenticated: boolean; principalHash: string; serverHash: string }\n resources: MulticaResourceSummary\n diff: string[]\n failures: string[]\n calls: MulticaReadCall[]\n evidencePath: string\n remoteRead: true\n remoteWrite: false\n sideEffect: 'remote-read'\n dingtalkSideEffect: false\n}\n\nexport interface MulticaWorkspaceStatus {\n $schema: 'dingtalk-agent/multica-workspace-status@1'\n workspace: string\n provider: 'multica'\n available: boolean\n inspectionId: string\n passed: boolean\n readyForApply: boolean\n providerReady: false\n evidencePath: string\n evidenceIntegrity: boolean\n stateMatched: boolean\n desiredHash: string\n observedHash: string\n diff: string[]\n failures: string[]\n remoteRead: false\n remoteWrite: false\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface MulticaResourceList {\n $schema: 'dingtalk-agent/multica-workspace-resource-list@1'\n passed: boolean\n workspace: string\n provider: 'multica'\n profile: string\n inspectionId: string\n resources: MulticaResourceSummary\n failures: string[]\n calls: MulticaReadCall[]\n remoteRead: true\n remoteWrite: false\n sideEffect: 'remote-read'\n dingtalkSideEffect: false\n}\n\nexport interface MulticaReadOptions {\n execute?: boolean\n yes?: boolean\n command?: string\n env?: NodeJS.ProcessEnv\n timeoutMs?: number\n out?: string\n cliVersion?: string\n /** Internal composition hook: W4 reuses W3 readback without clobbering ready state. */\n persist?: boolean\n /** Internal composition hook for the first readback after an Agent create. */\n agentIdOverride?: string\n}\n\ninterface ResolvedMulticaTarget {\n root: string\n projectName: string\n skills: string[]\n workspace: DevelopmentWorkspaceView\n profile: string\n workspaceId: string\n runtimeId: string\n agentId: string\n blocking: string[]\n}\n\ninterface ReadResult {\n stdout: string\n stderr: string\n}\n\nclass MulticaReadFailure extends Error {\n constructor(readonly category: string) {\n super(category)\n }\n}\n\nexport function planMulticaWorkspace(\n start: string, name: string, options: MulticaReadOptions = {},\n): MulticaWorkspacePlan {\n const target = resolveMulticaTarget(\n start, name, options.env || process.env, options.cliVersion || '', options.agentIdOverride,\n )\n const state = target.workspace.state\n const expected = {\n workspaceId: target.workspaceId,\n runtimeId: target.runtimeId,\n agentId: target.agentId,\n skills: [...target.skills].sort(),\n }\n const observed = {\n workspaceId: state?.binding.remoteWorkspaceId || '',\n runtimeId: state?.binding.runtimeId || '',\n agentId: state?.binding.agentId || '',\n skillSetHash: state?.binding.observedSkillSetHash || '',\n }\n const expectedSkillSetHash = digest(stableStringify(expected.skills))\n const diff: string[] = []\n if (observed.workspaceId !== expected.workspaceId) diff.push('workspace.scope')\n if (observed.runtimeId !== expected.runtimeId) diff.push('runtime.binding')\n if (expected.agentId) {\n if (observed.agentId !== expected.agentId) diff.push('agent.binding')\n } else if (!observed.agentId) diff.push('agent.create')\n if (observed.skillSetHash !== expectedSkillSetHash) diff.push('skills.assignments')\n const operations = readOperations(target)\n const planId = `multica_plan_${digest(stableStringify({\n workspace: name,\n desiredHash: target.workspace.desiredHash,\n expected,\n observed,\n diff: [...diff].sort(),\n blocking: [...target.blocking].sort(),\n operations,\n })).slice(0, 24)}`\n return {\n $schema: 'dingtalk-agent/multica-workspace-plan@1',\n planId,\n workspace: name,\n provider: 'multica',\n profile: target.profile,\n desiredHash: target.workspace.desiredHash,\n currentState: target.workspace.status,\n expected,\n observed,\n diff: [...diff].sort(),\n blocking: [...target.blocking].sort(),\n operations,\n writes: [],\n remoteRead: false,\n remoteWrite: false,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function inspectMulticaWorkspace(\n start: string, name: string, options: MulticaReadOptions = {},\n): MulticaWorkspacePlan | MulticaWorkspaceInspection {\n const plan = planMulticaWorkspace(start, name, options)\n if (!options.execute) return plan\n requireReadConfirmation(options, 'workspace inspect')\n if (plan.blocking.length) {\n throw new Error(`Multica inspect 前置条件不完整: ${plan.blocking.join(', ')}`)\n }\n return executeInspection(start, name, plan, options, options.persist !== false)\n}\n\nexport function listMulticaWorkspaceResources(\n start: string, name: string, options: MulticaReadOptions = {},\n): MulticaWorkspacePlan | MulticaResourceList {\n const plan = planMulticaWorkspace(start, name, options)\n if (!options.execute) return plan\n requireReadConfirmation(options, 'workspace remote-list')\n if (plan.blocking.length) {\n throw new Error(`Multica remote-list 前置条件不完整: ${plan.blocking.join(', ')}`)\n }\n const inspection = executeInspection(start, name, plan, options, false)\n return {\n $schema: 'dingtalk-agent/multica-workspace-resource-list@1',\n passed: inspection.passed,\n workspace: inspection.workspace,\n provider: 'multica',\n profile: inspection.profile,\n inspectionId: inspection.inspectionId,\n resources: inspection.resources,\n failures: inspection.failures,\n calls: inspection.calls,\n remoteRead: true,\n remoteWrite: false,\n sideEffect: 'remote-read',\n dingtalkSideEffect: false,\n }\n}\n\nexport function statusMulticaWorkspace(\n start: string, name: string, cliVersion = '',\n): MulticaWorkspaceStatus {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireMulticaWorkspace(info.root, name, cliVersion)\n const latestPath = latestPointerPath(info.root, name)\n if (!existsSync(latestPath)) return emptyStatus(workspace)\n const pointer = readJsonObject(latestPath, 'Multica inspection latest pointer')\n if (pointer.$schema !== 'dingtalk-agent/multica-inspection-pointer@1') {\n throw new Error('Multica inspection latest pointer schema 非法')\n }\n const evidencePath = stringField(pointer.evidencePath, 'pointer.evidencePath')\n const reportPath = safeProjectPath(info.root, evidencePath, true)\n const reportSource = readFileSync(reportPath, 'utf8')\n const evidenceIntegrity = sha256(reportSource) === stringField(pointer.reportHash, 'pointer.reportHash')\n const report = JSON.parse(reportSource) as MulticaWorkspaceInspection\n if (report.$schema !== 'dingtalk-agent/multica-workspace-inspection@1' || report.workspace !== name) {\n throw new Error('Multica inspection report 与 Workspace 不匹配')\n }\n assertRedacted(report)\n const state = workspace.state\n const stateMatched = Boolean(evidenceIntegrity && report.passed && state &&\n state.provider === 'multica' && ['verifying', 'ready'].includes(state.status) &&\n state.desiredHash === workspace.desiredHash && state.observedHash === report.observedHash &&\n state.binding.inspectionId === report.inspectionId &&\n state.binding.evidencePath === evidencePath)\n return {\n $schema: 'dingtalk-agent/multica-workspace-status@1',\n workspace: name,\n provider: 'multica',\n available: true,\n inspectionId: report.inspectionId,\n passed: report.passed,\n readyForApply: report.readyForApply && stateMatched,\n providerReady: false,\n evidencePath,\n evidenceIntegrity,\n stateMatched,\n desiredHash: workspace.desiredHash,\n observedHash: report.observedHash,\n diff: [...report.diff],\n failures: [...report.failures],\n remoteRead: false,\n remoteWrite: false,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction executeInspection(\n start: string,\n name: string,\n plan: MulticaWorkspacePlan,\n options: MulticaReadOptions,\n persist: boolean,\n): MulticaWorkspaceInspection {\n const env = options.env || process.env\n const target = resolveMulticaTarget(\n start, name, env, options.cliVersion || '', options.agentIdOverride,\n )\n const command = options.command || env.DTA_MULTICA_BIN || 'multica'\n const timeoutMs = positiveTimeout(options.timeoutMs)\n if (persist) {\n const plannedEvidence = options.out || join(\n MULTICA_EVIDENCE_ROOT, safeName(name), 'multica-inspections', 'planned.json',\n )\n safeProjectPath(target.root, plannedEvidence, false)\n latestPointerPath(target.root, name)\n safeProjectPath(target.root, join(WORKSPACE_STATE_ROOT, `${name}.json`), false)\n }\n const calls: MulticaReadCall[] = []\n const failures: string[] = []\n const diff: string[] = []\n let cliVersion = ''\n let principalHash = ''\n let serverHash = ''\n let resources = emptyResources()\n\n try {\n const version = runRead(command, ['--version'], 'cli.version', target.root, env, timeoutMs, calls)\n cliVersion = parseMulticaVersion(version.stdout || version.stderr)\n\n const config = runRead(command, profileArgs(target, ['config', 'show']),\n 'profile.config', target.root, env, timeoutMs, calls)\n const parsedConfig = parseConfig(config.stdout, target.profile)\n serverHash = parsedConfig.server ? digest(parsedConfig.server) : ''\n if (parsedConfig.workspaceId && parsedConfig.workspaceId !== target.workspaceId) {\n throw new MulticaReadFailure('scope.profile-workspace-mismatch')\n }\n\n const auth = runRead(command, profileArgs(target, ['auth', 'status']),\n 'auth.status', target.root, env, timeoutMs, calls)\n const principal = parseAuth(auth.stdout + '\\n' + auth.stderr)\n if (!principal) throw new MulticaReadFailure('auth.not-authenticated')\n principalHash = digest(principal)\n\n const workspaceList = jsonArray(runRead(command,\n profileArgs(target, ['workspace', 'list', '--output', 'json']),\n 'workspace.list', target.root, env, timeoutMs, calls).stdout, 'workspace list')\n const workspaceMatches = workspaceList.filter((item) => idOf(item) === target.workspaceId)\n if (workspaceMatches.length !== 1) throw new MulticaReadFailure('scope.workspace-list-mismatch')\n\n const workspaceGet = jsonObject(runRead(command,\n profileArgs(target, ['workspace', 'get', target.workspaceId, '--output', 'json']),\n 'workspace.get', target.root, env, timeoutMs, calls).stdout, 'workspace get')\n if (idOf(workspaceGet) !== target.workspaceId) {\n throw new MulticaReadFailure('scope.workspace-get-mismatch')\n }\n resources.workspace = {\n id: resourceId(idOf(workspaceGet), 'workspace.id'),\n name: safeDisplay(workspaceGet.name),\n slug: safeDisplay(workspaceGet.slug),\n }\n\n const runtimes = jsonArray(runRead(command,\n scopedArgs(target, ['runtime', 'list', '--output', 'json']),\n 'runtime.list', target.root, env, timeoutMs, calls).stdout, 'runtime list')\n const runtimeMatches = runtimes.filter((item) => idOf(item) === target.runtimeId)\n if (runtimeMatches.length !== 1) throw new MulticaReadFailure('scope.runtime-mismatch')\n const runtime = runtimeMatches[0]\n const runtimeWorkspace = optionalField(runtime.workspace_id)\n if (runtimeWorkspace && runtimeWorkspace !== target.workspaceId) {\n throw new MulticaReadFailure('scope.runtime-workspace-mismatch')\n }\n resources.runtime = {\n id: resourceId(idOf(runtime), 'runtime.id'),\n workspaceId: runtimeWorkspace || target.workspaceId,\n name: safeDisplay(runtime.name),\n provider: safeDisplay(runtime.provider),\n status: safeDisplay(runtime.status),\n }\n\n const agents = jsonArray(runRead(command,\n scopedArgs(target, ['agent', 'list', '--include-archived', '--output', 'json']),\n 'agent.list', target.root, env, timeoutMs, calls).stdout, 'agent list')\n resources.agentCandidates = agents\n .filter((item) => optionalField(item.name) === target.projectName)\n .map((item) => ({\n id: resourceId(idOf(item), 'agent candidate.id'),\n name: safeDisplay(item.name),\n archived: Boolean(optionalField(item.archived_at)),\n }))\n .sort((a, b) => a.id.localeCompare(b.id))\n\n const catalog = jsonArray(runRead(command,\n scopedArgs(target, ['skill', 'list', '--output', 'json']),\n 'skill.list', target.root, env, timeoutMs, calls).stdout, 'skill list')\n resources.catalogSkills = catalog.map((item) => ({\n id: resourceId(idOf(item), 'skill.id'),\n workspaceId: optionalField(item.workspace_id) || target.workspaceId,\n name: safeDisplay(item.name),\n })).sort(compareNamedResource)\n if (resources.catalogSkills.some((item) => item.workspaceId !== target.workspaceId)) {\n throw new MulticaReadFailure('scope.skill-workspace-mismatch')\n }\n\n if (target.agentId) {\n const agentMatches = agents.filter((item) => idOf(item) === target.agentId)\n if (agentMatches.length !== 1) throw new MulticaReadFailure('scope.agent-list-mismatch')\n const agent = jsonObject(runRead(command,\n scopedArgs(target, ['agent', 'get', target.agentId, '--output', 'json']),\n 'agent.get', target.root, env, timeoutMs, calls).stdout, 'agent get')\n const agentWorkspace = optionalField(agent.workspace_id)\n const agentRuntime = optionalField(agent.runtime_id)\n if (idOf(agent) !== target.agentId || agentWorkspace !== target.workspaceId ||\n agentRuntime !== target.runtimeId) {\n throw new MulticaReadFailure('scope.agent-binding-mismatch')\n }\n resources.agent = {\n id: target.agentId,\n workspaceId: agentWorkspace,\n runtimeId: agentRuntime,\n name: safeDisplay(agent.name),\n status: safeDisplay(agent.status),\n archived: Boolean(optionalField(agent.archived_at)),\n }\n const assigned = jsonArray(runRead(command,\n scopedArgs(target, ['agent', 'skills', 'list', target.agentId, '--output', 'json']),\n 'agent.skills', target.root, env, timeoutMs, calls).stdout, 'agent skills list')\n resources.assignedSkills = assigned.map((item) => ({\n id: resourceId(idOf(item), 'assigned skill.id'),\n name: safeDisplay(item.name),\n enabled: item.enabled === undefined ? true : Boolean(item.enabled),\n })).sort(compareNamedResource)\n } else if (resources.agentCandidates.length > 0) {\n throw new MulticaReadFailure('agent.unbound-name-candidates')\n } else {\n diff.push('agent.create')\n }\n\n for (const name of target.skills) {\n const candidates = resources.catalogSkills.filter((item) => item.name === name)\n if (candidates.length > 1) throw new MulticaReadFailure(`skills.duplicate:${name}`)\n if (candidates.length === 0) {\n diff.push(`skill.create:${name}`)\n continue\n }\n if (target.agentId && !resources.assignedSkills.some((item) =>\n item.id === candidates[0].id && item.enabled)) {\n diff.push(`skill.assign:${name}`)\n }\n }\n } catch (error) {\n failures.push(error instanceof MulticaReadFailure ? error.category : 'provider.read-failed')\n }\n\n const canonical = {\n cliVersion,\n profile: target.profile,\n principalHash,\n serverHash,\n expected: plan.expected,\n resources,\n }\n const observedHash = digest(stableStringify(canonical))\n const passed = failures.length === 0\n const inspectionId = `multica_inspect_${digest(stableStringify({\n desiredHash: target.workspace.desiredHash,\n observedHash,\n passed,\n diff: [...diff].sort(),\n failures,\n })).slice(0, 24)}`\n const defaultEvidencePath = join(\n MULTICA_EVIDENCE_ROOT, safeName(name), 'multica-inspections', `${inspectionId}.json`,\n )\n const evidencePath = options.out\n ? relative(target.root, safeProjectPath(target.root, options.out, false))\n : defaultEvidencePath\n const report: MulticaWorkspaceInspection = {\n $schema: 'dingtalk-agent/multica-workspace-inspection@1',\n passed,\n readyForApply: passed,\n providerReady: false,\n inspectionId,\n workspace: name,\n provider: 'multica',\n profile: target.profile,\n cliVersion,\n desiredHash: target.workspace.desiredHash,\n observedHash,\n expected: plan.expected,\n auth: { authenticated: Boolean(principalHash), principalHash, serverHash },\n resources,\n diff: [...diff].sort(),\n failures: [...failures].sort(),\n calls,\n evidencePath,\n remoteRead: true,\n remoteWrite: false,\n sideEffect: 'remote-read',\n dingtalkSideEffect: false,\n }\n assertRedacted(report)\n if (persist) persistInspection(target, plan, report)\n return report\n}\n\nfunction persistInspection(\n target: ResolvedMulticaTarget,\n plan: MulticaWorkspacePlan,\n report: MulticaWorkspaceInspection,\n): void {\n const reportPath = safeProjectPath(target.root, report.evidencePath, false)\n atomicJson(reportPath, report)\n const reportSource = readFileSync(reportPath, 'utf8')\n const pointer = {\n $schema: 'dingtalk-agent/multica-inspection-pointer@1',\n inspectionId: report.inspectionId,\n evidencePath: report.evidencePath,\n reportHash: sha256(reportSource),\n }\n atomicJson(latestPointerPath(target.root, target.workspace.name), pointer)\n if (!report.passed) return\n const expectedSkillSetHash = digest(stableStringify([...target.skills].sort()))\n const observedSkillSetHash = digest(stableStringify(report.resources.assignedSkills\n .filter((item) => item.enabled).map((item) => item.name).sort()))\n const state: DevelopmentWorkspaceState = {\n $schema: 'dingtalk-agent/workspace-state@1',\n workspace: target.workspace.name,\n provider: 'multica',\n status: 'verifying',\n binding: {\n profile: target.profile,\n remoteWorkspaceId: target.workspaceId,\n runtimeId: target.runtimeId,\n agentId: target.agentId,\n cliVersion: report.cliVersion,\n principalHash: report.auth.principalHash,\n serverHash: report.auth.serverHash,\n inspectionId: report.inspectionId,\n evidencePath: report.evidencePath,\n sourceHash: target.workspace.sourceHash,\n expectedSkillSetHash,\n observedSkillSetHash,\n },\n desiredHash: target.workspace.desiredHash,\n observedHash: report.observedHash,\n lastPlanId: plan.planId,\n lastReceiptId: '',\n lastEvalId: '',\n }\n atomicJson(safeProjectPath(\n target.root, join(WORKSPACE_STATE_ROOT, `${target.workspace.name}.json`), false,\n ), state)\n}\n\nfunction resolveMulticaTarget(\n start: string, name: string, env: NodeJS.ProcessEnv, cliVersion: string,\n agentIdOverride = '',\n): ResolvedMulticaTarget {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireMulticaWorkspace(info.root, name, cliVersion)\n const provider = workspace.provider\n const blocking: string[] = []\n const resolveRef = (ref: string, label: string, optional = false): string => {\n if (!ref) return ''\n const variable = ref.startsWith('env:') ? ref.slice(4) : ''\n const value = variable ? String(env[variable] || '').trim() : ''\n if (!value) {\n if (!optional) blocking.push(label)\n return ''\n }\n try { return resourceId(value, label) } catch { blocking.push(`${label}.invalid`); return '' }\n }\n const workspaceId = resolveRef(provider.workspaceIdFrom, 'workspace-id')\n const runtimeId = resolveRef(provider.runtimeIdFrom, 'runtime-id')\n let agentId = ''\n if (agentIdOverride) {\n try { agentId = resourceId(agentIdOverride, 'agent-id-override') }\n catch { blocking.push('agent-id-override.invalid') }\n } else if (provider.agentIdFrom) agentId = resolveRef(provider.agentIdFrom, 'agent-id')\n else if (workspace.state?.binding.agentId) {\n try { agentId = resourceId(workspace.state.binding.agentId, 'state.agent-id') }\n catch { blocking.push('state.agent-id.invalid') }\n }\n return {\n root: info.root,\n projectName: info.project.displayName,\n skills: [...new Set(info.project.skills)].sort(),\n workspace,\n profile: provider.profile,\n workspaceId,\n runtimeId,\n agentId,\n blocking,\n }\n}\n\nfunction requireMulticaWorkspace(start: string, name: string, cliVersion: string): DevelopmentWorkspaceView {\n const workspace = showDevelopmentWorkspace(start, name, cliVersion)\n if (workspace.provider.kind !== 'multica' || workspace.legacy) {\n throw new Error(`Workspace ${name} 不是 multica Provider;W3 不执行 ${workspace.provider.kind}`)\n }\n return workspace\n}\n\nfunction readOperations(target: ResolvedMulticaTarget): Array<{ id: string; argv: string[] }> {\n const operations = [\n { id: 'cli.version', argv: ['--version'] },\n { id: 'profile.config', argv: profileArgs(target, ['config', 'show']) },\n { id: 'auth.status', argv: profileArgs(target, ['auth', 'status']) },\n { id: 'workspace.list', argv: profileArgs(target, ['workspace', 'list', '--output', 'json']) },\n { id: 'workspace.get', argv: profileArgs(target,\n ['workspace', 'get', target.workspaceId || '<workspace-id>', '--output', 'json']) },\n { id: 'runtime.list', argv: scopedArgs(target, ['runtime', 'list', '--output', 'json']) },\n { id: 'agent.list', argv: scopedArgs(target,\n ['agent', 'list', '--include-archived', '--output', 'json']) },\n { id: 'skill.list', argv: scopedArgs(target, ['skill', 'list', '--output', 'json']) },\n ]\n if (target.agentId) operations.push(\n { id: 'agent.get', argv: scopedArgs(target,\n ['agent', 'get', target.agentId, '--output', 'json']) },\n { id: 'agent.skills', argv: scopedArgs(target,\n ['agent', 'skills', 'list', target.agentId, '--output', 'json']) },\n )\n return operations\n}\n\nfunction profileArgs(target: ResolvedMulticaTarget, args: string[]): string[] {\n return ['--profile', target.profile, ...args]\n}\n\nfunction scopedArgs(target: ResolvedMulticaTarget, args: string[]): string[] {\n return ['--profile', target.profile, '--workspace-id', target.workspaceId || '<workspace-id>', ...args]\n}\n\nfunction runRead(\n command: string,\n argv: string[],\n id: string,\n cwd: string,\n env: NodeJS.ProcessEnv,\n timeoutMs: number,\n calls: MulticaReadCall[],\n): ReadResult {\n const run = spawnSync(command, argv, {\n cwd,\n env,\n encoding: 'utf8',\n timeout: timeoutMs,\n maxBuffer: 16 * 1024 * 1024,\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n const stdout = String(run.stdout || '')\n const stderr = String(run.stderr || '')\n const exitCode = typeof run.status === 'number' ? run.status : 1\n const passed = !run.error && exitCode === 0\n calls.push({\n id,\n argv: argv.map(safeArg),\n exitCode,\n stdoutHash: sha256(stdout),\n stderrHash: sha256(stderr),\n passed,\n })\n if (!passed) throw new MulticaReadFailure(`command.${id}`)\n return { stdout, stderr }\n}\n\nfunction parseMulticaVersion(value: string): string {\n const match = value.match(/\\bmultica\\s+([0-9]+\\.[0-9]+\\.[0-9]+(?:[-+][A-Za-z0-9.-]+)?)/i)\n if (!match) throw new MulticaReadFailure('cli.version-invalid')\n return match[1]\n}\n\nfunction parseConfig(value: string, profile: string): { server: string; workspaceId: string } {\n const fields = new Map<string, string>()\n for (const line of value.split(/\\r?\\n/)) {\n const match = line.match(/^([^:]+):\\s*(.*)$/)\n if (match) fields.set(match[1].trim().toLowerCase(), match[2].trim())\n }\n if ((fields.get('profile') || '') !== profile) throw new MulticaReadFailure('profile.mismatch')\n const normalize = (item: string | undefined): string => item && item !== '(not set)' ? item : ''\n return {\n server: normalize(fields.get('server_url')),\n workspaceId: normalize(fields.get('workspace_id')),\n }\n}\n\nfunction parseAuth(value: string): string {\n if (/not authenticated|invalid or expired/i.test(value)) return ''\n const user = value.split(/\\r?\\n/).find((line) => /^User:\\s+/i.test(line.trim())) || ''\n const server = value.split(/\\r?\\n/).find((line) => /^Server:\\s+/i.test(line.trim())) || ''\n const token = value.split(/\\r?\\n/).find((line) => /^Token:\\s+/i.test(line.trim())) || ''\n return user && server && token ? `${user.trim()}|${server.trim()}` : ''\n}\n\nfunction jsonArray(value: string, label: string): Record<string, unknown>[] {\n let parsed: unknown\n try { parsed = JSON.parse(value) } catch { throw new MulticaReadFailure(`json.${label}`) }\n if (!Array.isArray(parsed) || parsed.some((item) => !item || typeof item !== 'object' || Array.isArray(item))) {\n throw new MulticaReadFailure(`shape.${label}`)\n }\n return parsed as Record<string, unknown>[]\n}\n\nfunction jsonObject(value: string, label: string): Record<string, unknown> {\n let parsed: unknown\n try { parsed = JSON.parse(value) } catch { throw new MulticaReadFailure(`json.${label}`) }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new MulticaReadFailure(`shape.${label}`)\n }\n return parsed as Record<string, unknown>\n}\n\nfunction readJsonObject(path: string, label: string): Record<string, unknown> {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`${label} 不能是符号链接`)\n return jsonObject(readFileSync(path, 'utf8'), label)\n}\n\nfunction idOf(value: Record<string, unknown>): string {\n return optionalField(value.id)\n}\n\nfunction stringField(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value) throw new Error(`${label} 必须是非空字符串`)\n return value\n}\n\nfunction optionalField(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction resourceId(value: string, label: string): string {\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{1,127}$/.test(value) ||\n /^(?:mul_|mcn_|sk-|bearer)/i.test(value)) {\n throw new Error(`${label} 不是安全的稳定资源 ID`)\n }\n return value\n}\n\nfunction safeDisplay(value: unknown): string {\n const text = typeof value === 'string' ? value : ''\n if (!text) return ''\n if (/(?:mul_|mcn_|sk-[A-Za-z0-9]|bearer\\s|access[_-]?token|client[_-]?secret|password)/i.test(text)) {\n return `[redacted:${digest(text).slice(0, 12)}]`\n }\n return text.length > 160 ? `${text.slice(0, 157)}...` : text\n}\n\nfunction safeArg(value: string): string {\n return safeDisplay(value)\n}\n\nfunction compareNamedResource(\n a: { name: string; id: string }, b: { name: string; id: string },\n): number {\n return a.name.localeCompare(b.name) || a.id.localeCompare(b.id)\n}\n\nfunction emptyResources(): MulticaResourceSummary {\n return {\n workspace: null,\n runtime: null,\n agent: null,\n agentCandidates: [],\n catalogSkills: [],\n assignedSkills: [],\n }\n}\n\nfunction emptyStatus(workspace: DevelopmentWorkspaceView): MulticaWorkspaceStatus {\n return {\n $schema: 'dingtalk-agent/multica-workspace-status@1',\n workspace: workspace.name,\n provider: 'multica',\n available: false,\n inspectionId: '',\n passed: false,\n readyForApply: false,\n providerReady: false,\n evidencePath: '',\n evidenceIntegrity: false,\n stateMatched: false,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n diff: [],\n failures: ['inspection.missing'],\n remoteRead: false,\n remoteWrite: false,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction latestPointerPath(root: string, name: string): string {\n return safeProjectPath(root, join(\n MULTICA_EVIDENCE_ROOT, safeName(name), 'multica-inspections', 'latest.json',\n ), false)\n}\n\nfunction safeName(value: string): string {\n if (!/^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/.test(value)) {\n throw new Error(`Workspace name 非法: ${value}`)\n }\n return value\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(`Multica Provider 路径必须位于 Project 内: ${ref}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`Multica evidence 不存在: ${ref}`)\n if (existsSync(candidate)) {\n if (lstatSync(candidate).isSymbolicLink()) {\n throw new Error(`Multica Provider 路径不能是符号链接: ${ref}`)\n }\n if (!isInside(rootReal, realpathSync(candidate))) {\n throw new Error(`Multica Provider 真实路径越出 Project: ${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(`Multica Provider 父目录真实路径越出 Project: ${ref}`)\n }\n return candidate\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\nfunction atomicJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\n const temp = `${path}.tmp-${process.pid}`\n const source = `${JSON.stringify(value, null, 2)}\\n`\n writeFileSync(temp, source, { mode: 0o600 })\n renameSync(temp, path)\n if (readFileSync(path, 'utf8') !== source) throw new Error(`原子写后回读不一致: ${path}`)\n}\n\nfunction assertRedacted(value: unknown): void {\n const source = JSON.stringify(value)\n if (/(?:mul_|mcn_|sk-[A-Za-z0-9]|bearer\\s|access[_-]?token|client[_-]?secret|password)/i.test(source)) {\n throw new Error('Multica inspection 脱敏失败:检测到疑似凭据')\n }\n}\n\nfunction positiveTimeout(value: number | undefined): number {\n if (value === undefined) return 30_000\n if (!Number.isFinite(value) || value < 100 || value > 300_000) {\n throw new Error('Multica read timeout 必须在 100..300000 ms')\n }\n return Math.floor(value)\n}\n\nfunction requireReadConfirmation(options: MulticaReadOptions, command: string): void {\n if (!options.execute || !options.yes) {\n throw new Error(`${command} 会读取当前 Multica 身份和远端 scope;必须同时传 --execute --yes`)\n }\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n"]}
@@ -317,6 +317,8 @@ function materializeProject(root, target, workspace) {
317
317
  copyProjectEntry(root, target, `.agents/skills/${name}`);
318
318
  }
319
319
  for (const route of [workspace.storage.memory, workspace.storage.knowledge]) {
320
+ if (!route)
321
+ continue;
320
322
  if (!route.startsWith('local-md:'))
321
323
  continue;
322
324
  copyProjectEntry(root, target, route.slice('local-md:'.length));
@@ -436,7 +438,7 @@ function managedWorkspacePath(root, name) {
436
438
  }
437
439
  function artifactStoragePath(root, workspace) {
438
440
  const route = workspace.storage.artifacts;
439
- if (!route.startsWith('local-dir:')) {
441
+ if (!route || !route.startsWith('local-dir:')) {
440
442
  throw new Error(`Workspace ${workspace.name} Artifact route 必须是 local-dir`);
441
443
  }
442
444
  return safeProjectPath(root, route.slice('local-dir:'.length), false);
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-provider.js","sourceRoot":"","sources":["../../src/opencode-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from 'node:crypto'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync,\n realpathSync, renameSync, rmdirSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport {\n CURRENT_WORKSPACE_FILE, WORKSPACE_STATE_ROOT,\n inspectAgentProject, showDevelopmentWorkspace,\n type DevelopmentWorkspaceState, type DevelopmentWorkspaceView,\n} from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\nimport {\n prepareOpenCodeEvalAgent, runOpenCodeEvaluation, runOpenCodePrompt,\n type OpenCodeEvalOptions, type OpenCodeExecution,\n} from './opencode-evals.js'\nimport {\n bindRequiredBasicSkill, verifyRequiredBasicSkill, type OpenCodeSkillPreflight,\n} from './opencode-workspace.js'\n\nexport const OPENCODE_WORKSPACE_ROOT = '.dingtalk-agent/development-workspaces'\nexport const OPENCODE_EVIDENCE_ROOT = '.dingtalk-agent/development-workspace-evidence'\n\nexport interface OpenCodeWorkspacePlan {\n $schema: 'dingtalk-agent/opencode-workspace-plan@1'\n planId: string\n workspace: string\n provider: 'opencode'\n model: string\n action: 'create' | 'rebuild' | 'noop'\n root: string\n managedPath: string\n sourceHash: string\n desiredHash: string\n observedHash: string\n currentState: string\n writes: string[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface OpenCodeWorkspaceApplyResult extends Omit<OpenCodeWorkspacePlan, '$schema' | 'sideEffect'> {\n $schema: 'dingtalk-agent/opencode-workspace-apply@1'\n applied: boolean\n idempotent: boolean\n status: 'verifying' | 'ready'\n observedHash: string\n binding: Record<string, string>\n sideEffect: 'local-managed-workspace'\n dingtalkSideEffect: false\n}\n\nexport interface OpenCodeWorkspaceRunOptions {\n execute?: boolean\n yes?: boolean\n command?: string\n timeoutMs?: number\n out?: string\n}\n\nexport interface OpenCodeWorkspaceEvalOptions extends OpenCodeEvalOptions {}\n\nexport function planOpenCodeWorkspace(\n start: string, name: string, cliVersion = '',\n): OpenCodeWorkspacePlan {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireOpenCodeWorkspace(info.root, name, cliVersion)\n const target = managedWorkspacePath(info.root, name)\n const artifactPath = artifactStoragePath(info.root, workspace)\n const observedHash = existsSync(target) ? hashTree(target) : ''\n const state = workspace.state\n const intact = Boolean(state && state.provider === 'opencode' &&\n state.desiredHash === workspace.desiredHash && state.observedHash === observedHash &&\n state.binding.managedPath === relative(info.root, target) &&\n existsSync(artifactPath) && lstatSync(artifactPath).isDirectory())\n const action = !existsSync(target) ? 'create' : intact ? 'noop' : 'rebuild'\n const planId = `opencode_plan_${digest(stableStringify({\n workspace: name, desiredHash: workspace.desiredHash, observedHash, action,\n })).slice(0, 24)}`\n return {\n $schema: 'dingtalk-agent/opencode-workspace-plan@1',\n planId,\n workspace: name,\n provider: 'opencode',\n model: workspace.provider.model,\n action,\n root: info.root,\n managedPath: relative(info.root, target),\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash,\n currentState: workspace.status,\n writes: action === 'noop' ? [] : [\n relative(info.root, target),\n relative(info.root, artifactPath),\n join(WORKSPACE_STATE_ROOT, `${name}.json`),\n ],\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function applyOpenCodeWorkspace(\n start: string,\n name: string,\n options: { yes?: boolean; command?: string; cliVersion?: string } = {},\n): OpenCodeWorkspaceApplyResult {\n if (!options.yes) throw new Error('workspace create 会写本地 managed Workspace;必须显式传 --yes')\n const cliVersion = options.cliVersion || ''\n const plan = planOpenCodeWorkspace(start, name, cliVersion)\n const workspace = requireOpenCodeWorkspace(plan.root, name, cliVersion)\n const target = resolve(plan.root, plan.managedPath)\n const artifactPath = artifactStoragePath(plan.root, workspace)\n const artifactExisted = existsSync(artifactPath)\n const command = options.command || process.env.DTA_OPENCODE_BIN || 'opencode'\n if (plan.action === 'noop') {\n const binding = workspace.state?.binding || {}\n const stateStatus = workspace.state?.status === 'ready' ? 'ready' : 'verifying'\n return {\n ...plan,\n $schema: 'dingtalk-agent/opencode-workspace-apply@1',\n applied: false,\n idempotent: true,\n status: stateStatus,\n binding,\n sideEffect: 'local-managed-workspace',\n dingtalkSideEffect: false,\n }\n }\n\n mkdirSync(dirname(target), { recursive: true })\n const staging = `${target}.tmp-${process.pid}-${randomUUID().slice(0, 8)}`\n const backup = `${target}.backup-${process.pid}-${randomUUID().slice(0, 8)}`\n const preflightSandbox = mkdtempSync(join(\n tmpdir(), `dta-opencode-workspace-preflight-${safeName(name)}-`,\n ))\n let preflight: OpenCodeSkillPreflight | null = null\n try {\n mkdirSync(staging, { recursive: false })\n materializeProject(plan.root, staging, workspace)\n prepareOpenCodeEvalAgent(staging, 'none')\n bindRequiredBasicSkill(staging)\n cpSync(staging, preflightSandbox, { recursive: true })\n preflight = verifyRequiredBasicSkill(bindRequiredBasicSkill(preflightSandbox), command)\n if (existsSync(target)) renameSync(target, backup)\n renameSync(staging, target)\n mkdirSync(artifactPath, { recursive: true })\n if (existsSync(backup)) rmSync(backup, { recursive: true, force: true })\n } catch (error) {\n rmSync(staging, { recursive: true, force: true })\n if (existsSync(backup)) {\n rmSync(target, { recursive: true, force: true })\n renameSync(backup, target)\n } else if (existsSync(target) && plan.action === 'create') {\n rmSync(target, { recursive: true, force: true })\n }\n if (!artifactExisted && existsSync(artifactPath)) {\n try { rmdirSync(artifactPath) } catch { /* preserve non-empty concurrent writes */ }\n }\n throw error\n } finally {\n rmSync(preflightSandbox, { recursive: true, force: true })\n }\n\n const observedHash = hashTree(target)\n const binding = {\n managedPath: relative(plan.root, target),\n model: workspace.provider.model,\n sourceHash: workspace.sourceHash,\n basicHash: String(preflight?.skill.hash || ''),\n basicVersion: String(preflight?.skill.version || ''),\n configHash: String(preflight?.configHash || ''),\n openCodeVersion: String(preflight?.openCodeVersion || ''),\n }\n writeWorkspaceState(plan.root, {\n $schema: 'dingtalk-agent/workspace-state@1',\n workspace: name,\n provider: 'opencode',\n status: 'verifying',\n binding,\n desiredHash: workspace.desiredHash,\n observedHash,\n lastPlanId: plan.planId,\n lastReceiptId: '',\n lastEvalId: '',\n })\n return {\n ...plan,\n $schema: 'dingtalk-agent/opencode-workspace-apply@1',\n applied: true,\n idempotent: false,\n status: 'verifying',\n observedHash,\n binding,\n sideEffect: 'local-managed-workspace',\n dingtalkSideEffect: false,\n }\n}\n\nexport function useOpenCodeWorkspace(start: string, name: string, cliVersion = ''): Record<string, unknown> {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireOpenCodeWorkspace(info.root, name, cliVersion)\n assertManagedWorkspaceIntact(info.root, workspace)\n const path = join(info.root, CURRENT_WORKSPACE_FILE)\n atomicText(path, `${name}\\n`)\n const readback = readFileSync(path, 'utf8').trim()\n if (readback !== name) throw new Error('current-workspace 写后回读不一致')\n return {\n $schema: 'dingtalk-agent/workspace-selection@1',\n workspace: name,\n provider: 'opencode',\n previous: info.currentWorkspace,\n current: readback,\n sideEffect: 'local-selection',\n dingtalkSideEffect: false,\n }\n}\n\nexport function runOpenCodeWorkspace(\n start: string,\n name: string,\n prompt: string,\n options: OpenCodeWorkspaceRunOptions = {},\n): Record<string, any> {\n if (!prompt.trim()) throw new Error('workspace run prompt 不能为空')\n const info = inspectAgentProject(start)\n const workspace = requireOpenCodeWorkspace(info.root, name)\n const managed = assertManagedWorkspaceIntact(info.root, workspace)\n const timeoutMs = options.timeoutMs ?? 120_000\n if (!Number.isInteger(timeoutMs) || timeoutMs < 10_000 || timeoutMs > 300_000) {\n throw new Error('workspace run timeoutMs 必须为 10000..300000')\n }\n const plan = {\n $schema: 'dingtalk-agent/opencode-workspace-run-plan@1',\n workspace: name,\n provider: 'opencode',\n model: workspace.provider.model,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n promptHash: sha256(prompt),\n loadProbe: 'random-per-run',\n tools: 'none',\n sideEffect: 'model-only',\n dingtalkSideEffect: false,\n }\n if (!options.execute) return { ...plan, ready: true, executeRequired: true }\n if (!options.yes) throw new Error('workspace run 会调用 OpenCode 模型;必须同时传 --execute --yes')\n\n const runId = `opencode_workspace_run_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidence = safeProjectPath(info.root, options.out || join(\n OPENCODE_EVIDENCE_ROOT, name, 'runs', runId), false)\n const sandbox = mkdtempSync(join(tmpdir(), `dta-opencode-workspace-${safeName(name)}-`))\n const command = options.command || process.env.DTA_OPENCODE_BIN || 'opencode'\n let report: Record<string, any>\n try {\n cpSync(managed, sandbox, { recursive: true })\n const probe = randomUUID()\n const skillPath = join(sandbox, '.agents', 'skills', 'dingtalk-basic-behavior', 'SKILL.md')\n const skillBody = readFileSync(skillPath, 'utf8')\n writeFileSync(skillPath, `${skillBody.trimEnd()}\\n\\n<!-- dta-load-probe:${probe} -->\\n`)\n const preflight = verifyRequiredBasicSkill(bindRequiredBasicSkill(sandbox), command)\n const probePrompt =\n '这是加载链路探针。只依据 Basic Skill 正文末尾注释回答;严格输出 `dta-load-probe=<值>`;' +\n '若看不到则输出 `dta-load-probe=not-loaded`。禁止调用工具或解释。'\n const probeExecution = runOpenCodePrompt(\n command, sandbox, workspace.provider.model, probePrompt,\n `DTA Workspace ${name} load probe`, timeoutMs,\n )\n const exactProbe = `dta-load-probe=${probe}`\n const loadPassed = probeExecution.exitCode === 0 && probeExecution.answer.trim() === exactProbe &&\n probeExecution.toolCalls === 0 && probeExecution.directoryMatched\n const marker = `[DTA-WORKSPACE-RUN-${safeName(name)}-${randomUUID()}]`\n const execution = loadPassed ? runOpenCodePrompt(\n command, sandbox, workspace.provider.model,\n `${marker}\\n执行协议:第一行逐字符原样输出 ${marker};从第二行回答用户任务;禁止调用任何工具。\\n${prompt}`,\n `DTA Workspace ${name} run`, timeoutMs,\n ) : emptyExecution('load-probe-failed')\n const exactAttributed = execution.answer.startsWith(marker)\n const answer = exactAttributed ? execution.answer.slice(marker.length).trim() : execution.answer\n const passed = loadPassed && execution.exitCode === 0 && execution.toolCalls === 0 &&\n execution.directoryMatched && exactAttributed\n report = {\n $schema: 'dingtalk-agent/opencode-workspace-run@1',\n passed,\n runId,\n workspace: name,\n provider: 'opencode',\n model: workspace.provider.model,\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n evidencePath: relative(info.root, evidence),\n basic: {\n version: preflight.skill.version,\n sourceHash: workspace.state?.binding.basicHash || '',\n instrumentedHash: preflight.skill.hash,\n },\n loadProbe: executionSummary(probeExecution, {\n expected: exactProbe, exactLoaded: probeExecution.answer.trim() === exactProbe,\n }),\n execution: executionSummary(execution, { marker, exactAttributed, answer }),\n sideEffect: 'model-only',\n dingtalkSideEffect: false,\n }\n mkdirSync(evidence, { recursive: true })\n writeFileSync(join(evidence, 'prompt.txt'), prompt)\n writeFileSync(join(evidence, 'load-probe.stdout.ndjson'), probeExecution.stdout)\n writeFileSync(join(evidence, 'run.stdout.ndjson'), execution.stdout)\n atomicJson(join(evidence, 'report.json'), report)\n writeProviderOutcome(info.root, workspace, passed ? 'ready' : 'failed', {\n lastReceiptId: runId,\n })\n } catch (error) {\n report = {\n ...plan,\n $schema: 'dingtalk-agent/opencode-workspace-run@1',\n passed: false,\n runId,\n evidencePath: relative(info.root, evidence),\n failure: error.message,\n }\n mkdirSync(evidence, { recursive: true })\n atomicJson(join(evidence, 'report.json'), report)\n writeProviderOutcome(info.root, workspace, 'failed', { lastReceiptId: runId })\n } finally {\n rmSync(sandbox, { recursive: true, force: true })\n }\n return report\n}\n\nexport function evalOpenCodeWorkspace(\n start: string,\n name: string,\n suite: string,\n options: OpenCodeWorkspaceEvalOptions = {},\n): Record<string, any> {\n const info = inspectAgentProject(start)\n const workspace = requireOpenCodeWorkspace(info.root, name)\n const managed = assertManagedWorkspaceIntact(info.root, workspace)\n const selectedOut = options.out || join(\n OPENCODE_EVIDENCE_ROOT, name, 'evals',\n `opencode_eval_${Date.now()}_${randomUUID().slice(0, 8)}`,\n )\n const report = runOpenCodeEvaluation(info.root, relative(info.root, managed), suite, {\n ...options,\n model: workspace.provider.model,\n out: selectedOut,\n })\n if (!options.execute) {\n return {\n $schema: 'dingtalk-agent/opencode-workspace-eval-plan@1',\n workspace: name,\n provider: 'opencode',\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n report,\n sideEffect: report.sideEffect,\n dingtalkSideEffect: false,\n }\n }\n const passed = report.passed === true && report.summary?.loadGate === true &&\n report.summary?.hardGate === true\n const evalBinding = bindEvalEvidence(info.root, workspace, report)\n writeProviderOutcome(info.root, workspace, passed ? 'ready' : 'failed', {\n lastEvalId: String(report.runId || ''),\n binding: evalBinding,\n })\n return {\n $schema: 'dingtalk-agent/opencode-workspace-eval@1',\n workspace: name,\n provider: 'opencode',\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n passed,\n report,\n sideEffect: report.sideEffect,\n dingtalkSideEffect: false,\n }\n}\n\nfunction materializeProject(\n root: string, target: string, workspace: DevelopmentWorkspaceView,\n): void {\n const info = inspectAgentProject(root)\n copyProjectEntry(root, target, info.project.definition)\n if (existsSync(join(root, 'opencode.json'))) copyProjectEntry(root, target, 'opencode.json')\n for (const name of info.project.skills) {\n const source = `skills/${name}`\n if (existsSync(join(root, source))) copyProjectEntry(root, target, source)\n copyProjectEntry(root, target, `.agents/skills/${name}`)\n }\n for (const route of [workspace.storage.memory, workspace.storage.knowledge]) {\n if (!route.startsWith('local-md:')) continue\n copyProjectEntry(root, target, route.slice('local-md:'.length))\n }\n bindDefinitionInstruction(target, info.project.definition)\n}\n\nfunction bindDefinitionInstruction(target: string, definition: string): void {\n const path = join(target, 'opencode.json')\n const config = existsSync(path) ? JSON.parse(readFileSync(path, 'utf8')) : {}\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n throw new Error('opencode.json 必须是 JSON object')\n }\n const instructions = Array.isArray(config.instructions)\n ? config.instructions.filter((item: unknown): item is string => typeof item === 'string') : []\n config.instructions = [definition, ...instructions.filter((item: string) => item !== definition)]\n atomicJson(path, config)\n}\n\nfunction copyProjectEntry(root: string, target: string, ref: string): void {\n const source = safeProjectPath(root, ref, true)\n const destination = safeTargetPath(target, ref)\n if (lstatSync(source).isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}`)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, {\n recursive: true,\n filter: (path) => !lstatSync(path).isSymbolicLink(),\n })\n}\n\nfunction requireOpenCodeWorkspace(\n start: string, name: string, cliVersion = '',\n): DevelopmentWorkspaceView {\n const workspace = showDevelopmentWorkspace(start, name, cliVersion)\n if (workspace.provider.kind !== 'opencode' || workspace.legacy) {\n throw new Error(`Workspace ${name} 不是 opencode Provider;W2 不执行 ${workspace.provider.kind}`)\n }\n return workspace\n}\n\nfunction assertManagedWorkspaceIntact(root: string, workspace: DevelopmentWorkspaceView): string {\n const target = managedWorkspacePath(root, workspace.name)\n if (!existsSync(target) || !workspace.state) {\n throw new Error(`Workspace ${workspace.name} 尚未 materialize;先执行 workspace create ${workspace.name} --yes`)\n }\n const expectedRelative = relative(root, target)\n const actualHash = hashTree(target)\n const failures: string[] = []\n if (workspace.state.provider !== 'opencode') failures.push('provider')\n if (workspace.state.binding.managedPath !== expectedRelative) failures.push('managedPath')\n if (workspace.state.binding.sourceHash !== workspace.sourceHash) failures.push('sourceHash')\n if (workspace.state.desiredHash !== workspace.desiredHash) failures.push('desiredHash')\n if (workspace.state.observedHash !== actualHash) failures.push('observedHash')\n if (failures.length) {\n throw new Error(`Workspace ${workspace.name} managed state 漂移: ${failures.join(', ')}`)\n }\n return target\n}\n\nfunction writeProviderOutcome(\n root: string,\n workspace: DevelopmentWorkspaceView,\n status: 'ready' | 'failed',\n patch: {\n lastReceiptId?: string\n lastEvalId?: string\n binding?: Record<string, string>\n },\n): void {\n if (!workspace.state) throw new Error('Provider outcome 缺少 Workspace state')\n const target = assertManagedWorkspaceIntact(root, workspace)\n writeWorkspaceState(root, {\n ...workspace.state,\n status,\n binding: { ...workspace.state.binding, ...(patch.binding || {}) },\n observedHash: hashTree(target),\n lastReceiptId: patch.lastReceiptId ?? workspace.state.lastReceiptId,\n lastEvalId: patch.lastEvalId ?? workspace.state.lastEvalId,\n })\n}\n\nfunction bindEvalEvidence(\n root: string,\n workspace: DevelopmentWorkspaceView,\n report: Record<string, any>,\n): Record<string, string> {\n const runId = String(report.runId || '')\n const evidencePath = String(report.evidencePath || '')\n if (!runId || !evidencePath || report.$schema !== 'dingtalk-agent/opencode-eval-report@1') {\n throw new Error('OpenCode Eval report 缺少可绑定的 runId/evidencePath/schema')\n }\n const evidenceRoot = safeProjectPath(root, evidencePath, true)\n if (!lstatSync(evidenceRoot).isDirectory() || lstatSync(evidenceRoot).isSymbolicLink()) {\n throw new Error('OpenCode Eval evidence root 必须是 Project 内真实目录')\n }\n const planPath = safeProjectPath(root, join(evidencePath, 'plan.json'), true)\n const suitePath = safeProjectPath(root, join(evidencePath, 'suite.json'), true)\n const reportPath = safeProjectPath(root, join(evidencePath, 'report.json'), true)\n const plan = JSON.parse(readFileSync(planPath, 'utf8')) as Record<string, any>\n const suite = JSON.parse(readFileSync(suitePath, 'utf8')) as Record<string, any>\n const persistedReport = JSON.parse(readFileSync(reportPath, 'utf8')) as Record<string, any>\n if (stableStringify(persistedReport) !== stableStringify(report) ||\n String(persistedReport.runId || '') !== runId ||\n String(plan.suite || '') !== String(suite.id || '')) {\n throw new Error('OpenCode Eval evidence 写后回读与内存 report/suite 不一致')\n }\n const target = assertManagedWorkspaceIntact(root, workspace)\n return {\n evalRunId: runId,\n evalEvidencePath: evidencePath,\n evalPlanHash: sha256(readFileSync(planPath)),\n evalSuiteHash: digest(stableStringify(suite)),\n evalReportHash: sha256(readFileSync(reportPath)),\n evalSuiteId: String(suite.id || ''),\n evalModel: String(report.engine?.model || ''),\n evalSourceHash: workspace.sourceHash,\n evalDesiredHash: workspace.desiredHash,\n evalObservedHash: hashTree(target),\n }\n}\n\nfunction writeWorkspaceState(root: string, state: DevelopmentWorkspaceState): void {\n const path = join(root, WORKSPACE_STATE_ROOT, `${state.workspace}.json`)\n atomicJson(path, state)\n const readback = JSON.parse(readFileSync(path, 'utf8'))\n if (stableStringify(readback) !== stableStringify(state)) {\n throw new Error(`Workspace state 写后回读不一致: ${state.workspace}`)\n }\n}\n\nfunction managedWorkspacePath(root: string, name: string): string {\n return safeProjectPath(root, join(OPENCODE_WORKSPACE_ROOT, safeName(name)), false)\n}\n\nfunction artifactStoragePath(root: string, workspace: DevelopmentWorkspaceView): string {\n const route = workspace.storage.artifacts\n if (!route.startsWith('local-dir:')) {\n throw new Error(`Workspace ${workspace.name} Artifact route 必须是 local-dir`)\n }\n return safeProjectPath(root, route.slice('local-dir:'.length), false)\n}\n\nfunction hashTree(root: string): string {\n const rootReal = realpathSync(resolve(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 rel = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isSymbolicLink()) throw new Error(`Managed Workspace 不允许符号链接: ${rel}`)\n if (entry.isDirectory()) visit(path, rel)\n else if (entry.isFile()) entries.push({ path: rel, hash: sha256(readFileSync(path)) })\n else throw new Error(`Managed Workspace 包含特殊文件: ${rel}`)\n }\n }\n visit(rootReal)\n return digest(stableStringify(entries))\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(`OpenCode Provider 路径必须位于 Project 内: ${ref}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`Project source 不存在: ${ref}`)\n if (mustExist && realpathSync(candidate) !== candidate && !isInside(rootReal, realpathSync(candidate))) {\n throw new Error(`Project source 真实路径越界: ${ref}`)\n }\n return candidate\n}\n\nfunction safeTargetPath(target: string, ref: string): string {\n const candidate = resolve(target, ref)\n if (!isInside(resolve(target), candidate) || candidate === resolve(target)) {\n throw new Error(`Materialized path 必须位于 Workspace 内: ${ref}`)\n }\n return candidate\n}\n\nfunction executionSummary(execution: OpenCodeExecution, extra: Record<string, unknown>): Record<string, unknown> {\n return {\n answer: execution.answer,\n rawAnswer: execution.answer,\n ...extra,\n exitCode: execution.exitCode,\n sessionId: execution.sessionId,\n sessionDirectory: execution.sessionDirectory,\n directoryMatched: execution.directoryMatched,\n toolCalls: execution.toolCalls,\n toolNames: execution.toolNames,\n tokens: execution.tokens,\n cost: execution.cost,\n durationMs: execution.durationMs,\n }\n}\n\nfunction emptyExecution(reason: string): OpenCodeExecution {\n return {\n exitCode: null, stdout: '', stderr: reason, answer: '', sessionId: '', toolCalls: 0,\n toolNames: [], toolPaths: [], toolTrace: [], tokens: null, cost: null, durationMs: 0,\n directoryMatched: false, sessionDirectory: '',\n sessionExport: { exitCode: null, stdout: '', stderr: '' },\n }\n}\n\nfunction atomicJson(path: string, value: unknown): void {\n atomicText(path, JSON.stringify(value, null, 2) + '\\n')\n}\n\nfunction atomicText(path: string, body: string): void {\n mkdirSync(dirname(path), { recursive: true })\n const temporary = `${path}.${process.pid}.${randomUUID().slice(0, 8)}.tmp`\n writeFileSync(temporary, body, { flag: 'wx' })\n renameSync(temporary, path)\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction safeName(value: string): string {\n if (!/^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/.test(value)) {\n throw new Error(`Workspace name 非法: ${value}`)\n }\n return value\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"]}
1
+ {"version":3,"file":"opencode-provider.js","sourceRoot":"","sources":["../../src/opencode-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from 'node:crypto'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync,\n realpathSync, renameSync, rmdirSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport {\n CURRENT_WORKSPACE_FILE, WORKSPACE_STATE_ROOT,\n inspectAgentProject, showDevelopmentWorkspace,\n type DevelopmentWorkspaceState, type DevelopmentWorkspaceView,\n} from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\nimport {\n prepareOpenCodeEvalAgent, runOpenCodeEvaluation, runOpenCodePrompt,\n type OpenCodeEvalOptions, type OpenCodeExecution,\n} from './opencode-evals.js'\nimport {\n bindRequiredBasicSkill, verifyRequiredBasicSkill, type OpenCodeSkillPreflight,\n} from './opencode-workspace.js'\n\nexport const OPENCODE_WORKSPACE_ROOT = '.dingtalk-agent/development-workspaces'\nexport const OPENCODE_EVIDENCE_ROOT = '.dingtalk-agent/development-workspace-evidence'\n\nexport interface OpenCodeWorkspacePlan {\n $schema: 'dingtalk-agent/opencode-workspace-plan@1'\n planId: string\n workspace: string\n provider: 'opencode'\n model: string\n action: 'create' | 'rebuild' | 'noop'\n root: string\n managedPath: string\n sourceHash: string\n desiredHash: string\n observedHash: string\n currentState: string\n writes: string[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface OpenCodeWorkspaceApplyResult extends Omit<OpenCodeWorkspacePlan, '$schema' | 'sideEffect'> {\n $schema: 'dingtalk-agent/opencode-workspace-apply@1'\n applied: boolean\n idempotent: boolean\n status: 'verifying' | 'ready'\n observedHash: string\n binding: Record<string, string>\n sideEffect: 'local-managed-workspace'\n dingtalkSideEffect: false\n}\n\nexport interface OpenCodeWorkspaceRunOptions {\n execute?: boolean\n yes?: boolean\n command?: string\n timeoutMs?: number\n out?: string\n}\n\nexport interface OpenCodeWorkspaceEvalOptions extends OpenCodeEvalOptions {}\n\nexport function planOpenCodeWorkspace(\n start: string, name: string, cliVersion = '',\n): OpenCodeWorkspacePlan {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireOpenCodeWorkspace(info.root, name, cliVersion)\n const target = managedWorkspacePath(info.root, name)\n const artifactPath = artifactStoragePath(info.root, workspace)\n const observedHash = existsSync(target) ? hashTree(target) : ''\n const state = workspace.state\n const intact = Boolean(state && state.provider === 'opencode' &&\n state.desiredHash === workspace.desiredHash && state.observedHash === observedHash &&\n state.binding.managedPath === relative(info.root, target) &&\n existsSync(artifactPath) && lstatSync(artifactPath).isDirectory())\n const action = !existsSync(target) ? 'create' : intact ? 'noop' : 'rebuild'\n const planId = `opencode_plan_${digest(stableStringify({\n workspace: name, desiredHash: workspace.desiredHash, observedHash, action,\n })).slice(0, 24)}`\n return {\n $schema: 'dingtalk-agent/opencode-workspace-plan@1',\n planId,\n workspace: name,\n provider: 'opencode',\n model: workspace.provider.model,\n action,\n root: info.root,\n managedPath: relative(info.root, target),\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash,\n currentState: workspace.status,\n writes: action === 'noop' ? [] : [\n relative(info.root, target),\n relative(info.root, artifactPath),\n join(WORKSPACE_STATE_ROOT, `${name}.json`),\n ],\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function applyOpenCodeWorkspace(\n start: string,\n name: string,\n options: { yes?: boolean; command?: string; cliVersion?: string } = {},\n): OpenCodeWorkspaceApplyResult {\n if (!options.yes) throw new Error('workspace create 会写本地 managed Workspace;必须显式传 --yes')\n const cliVersion = options.cliVersion || ''\n const plan = planOpenCodeWorkspace(start, name, cliVersion)\n const workspace = requireOpenCodeWorkspace(plan.root, name, cliVersion)\n const target = resolve(plan.root, plan.managedPath)\n const artifactPath = artifactStoragePath(plan.root, workspace)\n const artifactExisted = existsSync(artifactPath)\n const command = options.command || process.env.DTA_OPENCODE_BIN || 'opencode'\n if (plan.action === 'noop') {\n const binding = workspace.state?.binding || {}\n const stateStatus = workspace.state?.status === 'ready' ? 'ready' : 'verifying'\n return {\n ...plan,\n $schema: 'dingtalk-agent/opencode-workspace-apply@1',\n applied: false,\n idempotent: true,\n status: stateStatus,\n binding,\n sideEffect: 'local-managed-workspace',\n dingtalkSideEffect: false,\n }\n }\n\n mkdirSync(dirname(target), { recursive: true })\n const staging = `${target}.tmp-${process.pid}-${randomUUID().slice(0, 8)}`\n const backup = `${target}.backup-${process.pid}-${randomUUID().slice(0, 8)}`\n const preflightSandbox = mkdtempSync(join(\n tmpdir(), `dta-opencode-workspace-preflight-${safeName(name)}-`,\n ))\n let preflight: OpenCodeSkillPreflight | null = null\n try {\n mkdirSync(staging, { recursive: false })\n materializeProject(plan.root, staging, workspace)\n prepareOpenCodeEvalAgent(staging, 'none')\n bindRequiredBasicSkill(staging)\n cpSync(staging, preflightSandbox, { recursive: true })\n preflight = verifyRequiredBasicSkill(bindRequiredBasicSkill(preflightSandbox), command)\n if (existsSync(target)) renameSync(target, backup)\n renameSync(staging, target)\n mkdirSync(artifactPath, { recursive: true })\n if (existsSync(backup)) rmSync(backup, { recursive: true, force: true })\n } catch (error) {\n rmSync(staging, { recursive: true, force: true })\n if (existsSync(backup)) {\n rmSync(target, { recursive: true, force: true })\n renameSync(backup, target)\n } else if (existsSync(target) && plan.action === 'create') {\n rmSync(target, { recursive: true, force: true })\n }\n if (!artifactExisted && existsSync(artifactPath)) {\n try { rmdirSync(artifactPath) } catch { /* preserve non-empty concurrent writes */ }\n }\n throw error\n } finally {\n rmSync(preflightSandbox, { recursive: true, force: true })\n }\n\n const observedHash = hashTree(target)\n const binding = {\n managedPath: relative(plan.root, target),\n model: workspace.provider.model,\n sourceHash: workspace.sourceHash,\n basicHash: String(preflight?.skill.hash || ''),\n basicVersion: String(preflight?.skill.version || ''),\n configHash: String(preflight?.configHash || ''),\n openCodeVersion: String(preflight?.openCodeVersion || ''),\n }\n writeWorkspaceState(plan.root, {\n $schema: 'dingtalk-agent/workspace-state@1',\n workspace: name,\n provider: 'opencode',\n status: 'verifying',\n binding,\n desiredHash: workspace.desiredHash,\n observedHash,\n lastPlanId: plan.planId,\n lastReceiptId: '',\n lastEvalId: '',\n })\n return {\n ...plan,\n $schema: 'dingtalk-agent/opencode-workspace-apply@1',\n applied: true,\n idempotent: false,\n status: 'verifying',\n observedHash,\n binding,\n sideEffect: 'local-managed-workspace',\n dingtalkSideEffect: false,\n }\n}\n\nexport function useOpenCodeWorkspace(start: string, name: string, cliVersion = ''): Record<string, unknown> {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = requireOpenCodeWorkspace(info.root, name, cliVersion)\n assertManagedWorkspaceIntact(info.root, workspace)\n const path = join(info.root, CURRENT_WORKSPACE_FILE)\n atomicText(path, `${name}\\n`)\n const readback = readFileSync(path, 'utf8').trim()\n if (readback !== name) throw new Error('current-workspace 写后回读不一致')\n return {\n $schema: 'dingtalk-agent/workspace-selection@1',\n workspace: name,\n provider: 'opencode',\n previous: info.currentWorkspace,\n current: readback,\n sideEffect: 'local-selection',\n dingtalkSideEffect: false,\n }\n}\n\nexport function runOpenCodeWorkspace(\n start: string,\n name: string,\n prompt: string,\n options: OpenCodeWorkspaceRunOptions = {},\n): Record<string, any> {\n if (!prompt.trim()) throw new Error('workspace run prompt 不能为空')\n const info = inspectAgentProject(start)\n const workspace = requireOpenCodeWorkspace(info.root, name)\n const managed = assertManagedWorkspaceIntact(info.root, workspace)\n const timeoutMs = options.timeoutMs ?? 120_000\n if (!Number.isInteger(timeoutMs) || timeoutMs < 10_000 || timeoutMs > 300_000) {\n throw new Error('workspace run timeoutMs 必须为 10000..300000')\n }\n const plan = {\n $schema: 'dingtalk-agent/opencode-workspace-run-plan@1',\n workspace: name,\n provider: 'opencode',\n model: workspace.provider.model,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n promptHash: sha256(prompt),\n loadProbe: 'random-per-run',\n tools: 'none',\n sideEffect: 'model-only',\n dingtalkSideEffect: false,\n }\n if (!options.execute) return { ...plan, ready: true, executeRequired: true }\n if (!options.yes) throw new Error('workspace run 会调用 OpenCode 模型;必须同时传 --execute --yes')\n\n const runId = `opencode_workspace_run_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidence = safeProjectPath(info.root, options.out || join(\n OPENCODE_EVIDENCE_ROOT, name, 'runs', runId), false)\n const sandbox = mkdtempSync(join(tmpdir(), `dta-opencode-workspace-${safeName(name)}-`))\n const command = options.command || process.env.DTA_OPENCODE_BIN || 'opencode'\n let report: Record<string, any>\n try {\n cpSync(managed, sandbox, { recursive: true })\n const probe = randomUUID()\n const skillPath = join(sandbox, '.agents', 'skills', 'dingtalk-basic-behavior', 'SKILL.md')\n const skillBody = readFileSync(skillPath, 'utf8')\n writeFileSync(skillPath, `${skillBody.trimEnd()}\\n\\n<!-- dta-load-probe:${probe} -->\\n`)\n const preflight = verifyRequiredBasicSkill(bindRequiredBasicSkill(sandbox), command)\n const probePrompt =\n '这是加载链路探针。只依据 Basic Skill 正文末尾注释回答;严格输出 `dta-load-probe=<值>`;' +\n '若看不到则输出 `dta-load-probe=not-loaded`。禁止调用工具或解释。'\n const probeExecution = runOpenCodePrompt(\n command, sandbox, workspace.provider.model, probePrompt,\n `DTA Workspace ${name} load probe`, timeoutMs,\n )\n const exactProbe = `dta-load-probe=${probe}`\n const loadPassed = probeExecution.exitCode === 0 && probeExecution.answer.trim() === exactProbe &&\n probeExecution.toolCalls === 0 && probeExecution.directoryMatched\n const marker = `[DTA-WORKSPACE-RUN-${safeName(name)}-${randomUUID()}]`\n const execution = loadPassed ? runOpenCodePrompt(\n command, sandbox, workspace.provider.model,\n `${marker}\\n执行协议:第一行逐字符原样输出 ${marker};从第二行回答用户任务;禁止调用任何工具。\\n${prompt}`,\n `DTA Workspace ${name} run`, timeoutMs,\n ) : emptyExecution('load-probe-failed')\n const exactAttributed = execution.answer.startsWith(marker)\n const answer = exactAttributed ? execution.answer.slice(marker.length).trim() : execution.answer\n const passed = loadPassed && execution.exitCode === 0 && execution.toolCalls === 0 &&\n execution.directoryMatched && exactAttributed\n report = {\n $schema: 'dingtalk-agent/opencode-workspace-run@1',\n passed,\n runId,\n workspace: name,\n provider: 'opencode',\n model: workspace.provider.model,\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n evidencePath: relative(info.root, evidence),\n basic: {\n version: preflight.skill.version,\n sourceHash: workspace.state?.binding.basicHash || '',\n instrumentedHash: preflight.skill.hash,\n },\n loadProbe: executionSummary(probeExecution, {\n expected: exactProbe, exactLoaded: probeExecution.answer.trim() === exactProbe,\n }),\n execution: executionSummary(execution, { marker, exactAttributed, answer }),\n sideEffect: 'model-only',\n dingtalkSideEffect: false,\n }\n mkdirSync(evidence, { recursive: true })\n writeFileSync(join(evidence, 'prompt.txt'), prompt)\n writeFileSync(join(evidence, 'load-probe.stdout.ndjson'), probeExecution.stdout)\n writeFileSync(join(evidence, 'run.stdout.ndjson'), execution.stdout)\n atomicJson(join(evidence, 'report.json'), report)\n writeProviderOutcome(info.root, workspace, passed ? 'ready' : 'failed', {\n lastReceiptId: runId,\n })\n } catch (error) {\n report = {\n ...plan,\n $schema: 'dingtalk-agent/opencode-workspace-run@1',\n passed: false,\n runId,\n evidencePath: relative(info.root, evidence),\n failure: error.message,\n }\n mkdirSync(evidence, { recursive: true })\n atomicJson(join(evidence, 'report.json'), report)\n writeProviderOutcome(info.root, workspace, 'failed', { lastReceiptId: runId })\n } finally {\n rmSync(sandbox, { recursive: true, force: true })\n }\n return report\n}\n\nexport function evalOpenCodeWorkspace(\n start: string,\n name: string,\n suite: string,\n options: OpenCodeWorkspaceEvalOptions = {},\n): Record<string, any> {\n const info = inspectAgentProject(start)\n const workspace = requireOpenCodeWorkspace(info.root, name)\n const managed = assertManagedWorkspaceIntact(info.root, workspace)\n const selectedOut = options.out || join(\n OPENCODE_EVIDENCE_ROOT, name, 'evals',\n `opencode_eval_${Date.now()}_${randomUUID().slice(0, 8)}`,\n )\n const report = runOpenCodeEvaluation(info.root, relative(info.root, managed), suite, {\n ...options,\n model: workspace.provider.model,\n out: selectedOut,\n })\n if (!options.execute) {\n return {\n $schema: 'dingtalk-agent/opencode-workspace-eval-plan@1',\n workspace: name,\n provider: 'opencode',\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n report,\n sideEffect: report.sideEffect,\n dingtalkSideEffect: false,\n }\n }\n const passed = report.passed === true && report.summary?.loadGate === true &&\n report.summary?.hardGate === true\n const evalBinding = bindEvalEvidence(info.root, workspace, report)\n writeProviderOutcome(info.root, workspace, passed ? 'ready' : 'failed', {\n lastEvalId: String(report.runId || ''),\n binding: evalBinding,\n })\n return {\n $schema: 'dingtalk-agent/opencode-workspace-eval@1',\n workspace: name,\n provider: 'opencode',\n sourceHash: workspace.sourceHash,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n passed,\n report,\n sideEffect: report.sideEffect,\n dingtalkSideEffect: false,\n }\n}\n\nfunction materializeProject(\n root: string, target: string, workspace: DevelopmentWorkspaceView,\n): void {\n const info = inspectAgentProject(root)\n copyProjectEntry(root, target, info.project.definition)\n if (existsSync(join(root, 'opencode.json'))) copyProjectEntry(root, target, 'opencode.json')\n for (const name of info.project.skills) {\n const source = `skills/${name}`\n if (existsSync(join(root, source))) copyProjectEntry(root, target, source)\n copyProjectEntry(root, target, `.agents/skills/${name}`)\n }\n for (const route of [workspace.storage.memory, workspace.storage.knowledge]) {\n if (!route) continue\n if (!route.startsWith('local-md:')) continue\n copyProjectEntry(root, target, route.slice('local-md:'.length))\n }\n bindDefinitionInstruction(target, info.project.definition)\n}\n\nfunction bindDefinitionInstruction(target: string, definition: string): void {\n const path = join(target, 'opencode.json')\n const config = existsSync(path) ? JSON.parse(readFileSync(path, 'utf8')) : {}\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n throw new Error('opencode.json 必须是 JSON object')\n }\n const instructions = Array.isArray(config.instructions)\n ? config.instructions.filter((item: unknown): item is string => typeof item === 'string') : []\n config.instructions = [definition, ...instructions.filter((item: string) => item !== definition)]\n atomicJson(path, config)\n}\n\nfunction copyProjectEntry(root: string, target: string, ref: string): void {\n const source = safeProjectPath(root, ref, true)\n const destination = safeTargetPath(target, ref)\n if (lstatSync(source).isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}`)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, {\n recursive: true,\n filter: (path) => !lstatSync(path).isSymbolicLink(),\n })\n}\n\nfunction requireOpenCodeWorkspace(\n start: string, name: string, cliVersion = '',\n): DevelopmentWorkspaceView {\n const workspace = showDevelopmentWorkspace(start, name, cliVersion)\n if (workspace.provider.kind !== 'opencode' || workspace.legacy) {\n throw new Error(`Workspace ${name} 不是 opencode Provider;W2 不执行 ${workspace.provider.kind}`)\n }\n return workspace\n}\n\nfunction assertManagedWorkspaceIntact(root: string, workspace: DevelopmentWorkspaceView): string {\n const target = managedWorkspacePath(root, workspace.name)\n if (!existsSync(target) || !workspace.state) {\n throw new Error(`Workspace ${workspace.name} 尚未 materialize;先执行 workspace create ${workspace.name} --yes`)\n }\n const expectedRelative = relative(root, target)\n const actualHash = hashTree(target)\n const failures: string[] = []\n if (workspace.state.provider !== 'opencode') failures.push('provider')\n if (workspace.state.binding.managedPath !== expectedRelative) failures.push('managedPath')\n if (workspace.state.binding.sourceHash !== workspace.sourceHash) failures.push('sourceHash')\n if (workspace.state.desiredHash !== workspace.desiredHash) failures.push('desiredHash')\n if (workspace.state.observedHash !== actualHash) failures.push('observedHash')\n if (failures.length) {\n throw new Error(`Workspace ${workspace.name} managed state 漂移: ${failures.join(', ')}`)\n }\n return target\n}\n\nfunction writeProviderOutcome(\n root: string,\n workspace: DevelopmentWorkspaceView,\n status: 'ready' | 'failed',\n patch: {\n lastReceiptId?: string\n lastEvalId?: string\n binding?: Record<string, string>\n },\n): void {\n if (!workspace.state) throw new Error('Provider outcome 缺少 Workspace state')\n const target = assertManagedWorkspaceIntact(root, workspace)\n writeWorkspaceState(root, {\n ...workspace.state,\n status,\n binding: { ...workspace.state.binding, ...(patch.binding || {}) },\n observedHash: hashTree(target),\n lastReceiptId: patch.lastReceiptId ?? workspace.state.lastReceiptId,\n lastEvalId: patch.lastEvalId ?? workspace.state.lastEvalId,\n })\n}\n\nfunction bindEvalEvidence(\n root: string,\n workspace: DevelopmentWorkspaceView,\n report: Record<string, any>,\n): Record<string, string> {\n const runId = String(report.runId || '')\n const evidencePath = String(report.evidencePath || '')\n if (!runId || !evidencePath || report.$schema !== 'dingtalk-agent/opencode-eval-report@1') {\n throw new Error('OpenCode Eval report 缺少可绑定的 runId/evidencePath/schema')\n }\n const evidenceRoot = safeProjectPath(root, evidencePath, true)\n if (!lstatSync(evidenceRoot).isDirectory() || lstatSync(evidenceRoot).isSymbolicLink()) {\n throw new Error('OpenCode Eval evidence root 必须是 Project 内真实目录')\n }\n const planPath = safeProjectPath(root, join(evidencePath, 'plan.json'), true)\n const suitePath = safeProjectPath(root, join(evidencePath, 'suite.json'), true)\n const reportPath = safeProjectPath(root, join(evidencePath, 'report.json'), true)\n const plan = JSON.parse(readFileSync(planPath, 'utf8')) as Record<string, any>\n const suite = JSON.parse(readFileSync(suitePath, 'utf8')) as Record<string, any>\n const persistedReport = JSON.parse(readFileSync(reportPath, 'utf8')) as Record<string, any>\n if (stableStringify(persistedReport) !== stableStringify(report) ||\n String(persistedReport.runId || '') !== runId ||\n String(plan.suite || '') !== String(suite.id || '')) {\n throw new Error('OpenCode Eval evidence 写后回读与内存 report/suite 不一致')\n }\n const target = assertManagedWorkspaceIntact(root, workspace)\n return {\n evalRunId: runId,\n evalEvidencePath: evidencePath,\n evalPlanHash: sha256(readFileSync(planPath)),\n evalSuiteHash: digest(stableStringify(suite)),\n evalReportHash: sha256(readFileSync(reportPath)),\n evalSuiteId: String(suite.id || ''),\n evalModel: String(report.engine?.model || ''),\n evalSourceHash: workspace.sourceHash,\n evalDesiredHash: workspace.desiredHash,\n evalObservedHash: hashTree(target),\n }\n}\n\nfunction writeWorkspaceState(root: string, state: DevelopmentWorkspaceState): void {\n const path = join(root, WORKSPACE_STATE_ROOT, `${state.workspace}.json`)\n atomicJson(path, state)\n const readback = JSON.parse(readFileSync(path, 'utf8'))\n if (stableStringify(readback) !== stableStringify(state)) {\n throw new Error(`Workspace state 写后回读不一致: ${state.workspace}`)\n }\n}\n\nfunction managedWorkspacePath(root: string, name: string): string {\n return safeProjectPath(root, join(OPENCODE_WORKSPACE_ROOT, safeName(name)), false)\n}\n\nfunction artifactStoragePath(root: string, workspace: DevelopmentWorkspaceView): string {\n const route = workspace.storage.artifacts\n if (!route || !route.startsWith('local-dir:')) {\n throw new Error(`Workspace ${workspace.name} Artifact route 必须是 local-dir`)\n }\n return safeProjectPath(root, route.slice('local-dir:'.length), false)\n}\n\nfunction hashTree(root: string): string {\n const rootReal = realpathSync(resolve(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 rel = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isSymbolicLink()) throw new Error(`Managed Workspace 不允许符号链接: ${rel}`)\n if (entry.isDirectory()) visit(path, rel)\n else if (entry.isFile()) entries.push({ path: rel, hash: sha256(readFileSync(path)) })\n else throw new Error(`Managed Workspace 包含特殊文件: ${rel}`)\n }\n }\n visit(rootReal)\n return digest(stableStringify(entries))\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(`OpenCode Provider 路径必须位于 Project 内: ${ref}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`Project source 不存在: ${ref}`)\n if (mustExist && realpathSync(candidate) !== candidate && !isInside(rootReal, realpathSync(candidate))) {\n throw new Error(`Project source 真实路径越界: ${ref}`)\n }\n return candidate\n}\n\nfunction safeTargetPath(target: string, ref: string): string {\n const candidate = resolve(target, ref)\n if (!isInside(resolve(target), candidate) || candidate === resolve(target)) {\n throw new Error(`Materialized path 必须位于 Workspace 内: ${ref}`)\n }\n return candidate\n}\n\nfunction executionSummary(execution: OpenCodeExecution, extra: Record<string, unknown>): Record<string, unknown> {\n return {\n answer: execution.answer,\n rawAnswer: execution.answer,\n ...extra,\n exitCode: execution.exitCode,\n sessionId: execution.sessionId,\n sessionDirectory: execution.sessionDirectory,\n directoryMatched: execution.directoryMatched,\n toolCalls: execution.toolCalls,\n toolNames: execution.toolNames,\n tokens: execution.tokens,\n cost: execution.cost,\n durationMs: execution.durationMs,\n }\n}\n\nfunction emptyExecution(reason: string): OpenCodeExecution {\n return {\n exitCode: null, stdout: '', stderr: reason, answer: '', sessionId: '', toolCalls: 0,\n toolNames: [], toolPaths: [], toolTrace: [], tokens: null, cost: null, durationMs: 0,\n directoryMatched: false, sessionDirectory: '',\n sessionExport: { exitCode: null, stdout: '', stderr: '' },\n }\n}\n\nfunction atomicJson(path: string, value: unknown): void {\n atomicText(path, JSON.stringify(value, null, 2) + '\\n')\n}\n\nfunction atomicText(path: string, body: string): void {\n mkdirSync(dirname(path), { recursive: true })\n const temporary = `${path}.${process.pid}.${randomUUID().slice(0, 8)}.tmp`\n writeFileSync(temporary, body, { flag: 'wx' })\n renameSync(temporary, path)\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction safeName(value: string): string {\n if (!/^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/.test(value)) {\n throw new Error(`Workspace name 非法: ${value}`)\n }\n return value\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"]}