@xdxer/dingtalk-agent 0.1.4-beta.9 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +198 -0
- package/README.en.md +98 -326
- package/README.md +95 -673
- package/dist/bin/dingtalk-agent.js +200 -18
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +1014 -89
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +41 -8
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +299 -0
- package/dist/src/agent-platform.js.map +1 -0
- package/dist/src/config.js +1 -7
- package/dist/src/config.js.map +1 -1
- package/dist/src/development-workspace.js +31 -5
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +74 -15
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/host-detect.js +146 -0
- package/dist/src/host-detect.js.map +1 -0
- package/dist/src/instruction-path.js +270 -0
- package/dist/src/instruction-path.js.map +1 -0
- package/dist/src/map.js +157 -0
- package/dist/src/map.js.map +1 -0
- package/dist/src/multica-deploy.js +78 -20
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/multica-provider.js +1 -1
- package/dist/src/multica-provider.js.map +1 -1
- package/dist/src/opencode-evals.js +710 -225
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-isolation.js +124 -0
- package/dist/src/opencode-isolation.js.map +1 -0
- package/dist/src/opencode-provider.js +1 -0
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/opencode-workspace.js +21 -10
- package/dist/src/opencode-workspace.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -1
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +2 -1
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/setup.js +6 -5
- package/dist/src/setup.js.map +1 -1
- package/dist/src/skill-manager.js +141 -12
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js +2 -1
- package/dist/src/skills.js.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/upgrade.js +23 -27
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/version.js +73 -0
- package/dist/src/version.js.map +1 -0
- package/docs/INSTALLATION.md +3 -3
- package/docs/assets/agent-delivery-lifecycle.svg +103 -0
- package/docs/schemas/agent-platform.schema.json +13 -0
- package/docs/schemas/project.schema.json +3 -0
- package/docs/schemas/release-readiness.schema.json +2 -1
- package/evals/README.md +17 -0
- package/lab/README.md +3 -3
- package/lab/agent-eval/catalog.json +5 -5
- package/lab/agent-eval/classic-failures.json +9 -9
- package/lab/agent-eval/completion-gate-regression.json +6 -6
- package/lab/agent-eval/remote-state-workspace/opencode.json +1 -1
- package/lab/agent-eval/workspace/AGENTS.md +1 -1
- package/lab/project-workspace/fake-multica-provider.mjs +17 -6
- package/lab/project-workspace/opencode-provider-suite.json +1 -1
- package/lab/robot-eval/suite.json +1 -1
- package/lab/robot-eval/workspace/AGENTS.md +1 -1
- package/lab/schemas/agent-eval-catalog.schema.json +1 -1
- package/package.json +13 -12
- package/skills/README.md +23 -0
- package/skills/core/dingtalk-agent-compose/SKILL.md +151 -0
- package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +35 -0
- package/skills/core/dingtalk-agent-compose/assets/role-skill.template.md +32 -0
- package/skills/core/dingtalk-agent-compose/evals/evals.json +129 -0
- package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/agent-definition-contract.md +3 -3
- package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +58 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +48 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +77 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/SKILL.md +31 -7
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/assets/eval-catalog.template.json +1 -1
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/evals/evals.json +22 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/eval-topology.md +14 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/evidence-contract.md +21 -0
- package/skills/core/dingtalk-agent-eval/references/failure-to-case.md +35 -0
- package/skills/core/dingtalk-agent-eval/references/interactive-debug-channels.md +93 -0
- package/skills/core/dingtalk-agent-eval/references/local-connector-smoke.md +75 -0
- package/skills/core/dingtalk-basic-behavior/SKILL.md +87 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/memory-and-evolution.md +12 -0
- package/skills/core/dingtalk-basic-behavior/references/risk-authority-and-privacy.md +62 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/task-lifecycle.md +15 -3
- package/skills/core/dingtalk-basic-behavior/references/truth-and-recovery.md +65 -0
- package/skills/platforms/deap/PLATFORM.md +3 -0
- package/skills/platforms/deap/README.md +3 -0
- package/skills/platforms/multica-dingtalk/PLATFORM.md +40 -0
- package/skills/{dingtalk-agent-boot-multica → platforms/multica-dingtalk/dingtalk-agent-boot-multica}/SKILL.md +4 -4
- package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/SKILL.md +1 -1
- package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +282 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/bootstrap.sh +78 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +1180 -0
- package/skills/dingtalk-agent-compose/SKILL.md +0 -110
- package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +0 -26
- package/skills/dingtalk-agent-compose/assets/role-skill.template.md +0 -24
- package/skills/dingtalk-agent-compose/evals/evals.json +0 -94
- package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +0 -65
- package/skills/dingtalk-basic-behavior/SKILL.md +0 -146
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.local.template.json +0 -0
- /package/skills/{dingtalk-agent-compose/assets → core/dingtalk-agent-compose/assets/hosts/opencode}/opencode.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/event-to-behavior.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/perception-and-gates.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/multica-deployment-contract.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/promotion-observation-contract.md +0 -0
|
@@ -420,7 +420,7 @@ function resolveMulticaTarget(start, name, env, cliVersion, agentIdOverride = ''
|
|
|
420
420
|
}
|
|
421
421
|
return {
|
|
422
422
|
root: info.root,
|
|
423
|
-
projectName: info.project.
|
|
423
|
+
projectName: info.project.displayName,
|
|
424
424
|
skills: [...new Set([...info.project.skills, MULTICA_BOOT_SKILL])].sort(),
|
|
425
425
|
workspace,
|
|
426
426
|
profile: provider.profile,
|
|
@@ -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.name,\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'\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"]}
|