@xdxer/dingtalk-agent 0.1.4 → 0.1.5-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +232 -0
- package/README.en.md +115 -89
- package/README.md +111 -86
- package/dist/bin/dingtalk-agent.js +742 -152
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/actions.js +3 -2
- package/dist/src/actions.js.map +1 -1
- package/dist/src/agent-audit.js +202 -85
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-definition.js +7 -3
- package/dist/src/agent-definition.js.map +1 -1
- package/dist/src/agent-enhance.js +51 -32
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +4 -4
- package/dist/src/agent-platform.js.map +1 -1
- package/dist/src/bootstrap.js +6 -2
- package/dist/src/bootstrap.js.map +1 -1
- package/dist/src/development-workspace.js +210 -34
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +65 -9
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/dws.js +67 -3
- package/dist/src/dws.js.map +1 -1
- package/dist/src/init.js +2 -1
- package/dist/src/init.js.map +1 -1
- package/dist/src/memory/noop-receipt.js +306 -0
- package/dist/src/memory/noop-receipt.js.map +1 -0
- package/dist/src/memory/operational.js +27 -3
- package/dist/src/memory/operational.js.map +1 -1
- package/dist/src/memory/remote-state.js +2 -1
- package/dist/src/memory/remote-state.js.map +1 -1
- package/dist/src/multica-deploy.js +692 -125
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/multica-provider.js +303 -25
- package/dist/src/multica-provider.js.map +1 -1
- package/dist/src/multica-runtime-vocabulary.js +110 -0
- package/dist/src/multica-runtime-vocabulary.js.map +1 -0
- package/dist/src/opencode-evals.js +6 -6
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-provider.js +21 -7
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/opencode-workspace.js +3 -3
- package/dist/src/opencode-workspace.js.map +1 -1
- package/dist/src/personal-event-evals.js +4 -2
- package/dist/src/personal-event-evals.js.map +1 -1
- package/dist/src/promotion.js +2 -1
- package/dist/src/promotion.js.map +1 -1
- package/dist/src/remote-semantic-state-live-evals.js +14 -8
- package/dist/src/remote-semantic-state-live-evals.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -2
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +3 -3
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/schedule-plan.js +380 -0
- package/dist/src/schedule-plan.js.map +1 -0
- package/dist/src/sessions.js +1 -1
- package/dist/src/sessions.js.map +1 -1
- package/dist/src/skill-manager.js +145 -13
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js +2 -0
- package/dist/src/skills.js.map +1 -1
- package/dist/src/tui.js +369 -0
- package/dist/src/tui.js.map +1 -0
- package/dist/src/upgrade.js +113 -33
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/waits.js +2 -1
- package/dist/src/waits.js.map +1 -1
- package/dist/src/workspace.js +12 -7
- package/dist/src/workspace.js.map +1 -1
- package/docs/AGENT-IN-PRODUCTION.md +255 -0
- package/docs/ARCHITECTURE.md +366 -0
- package/docs/INSTALLATION.md +8 -8
- package/docs/PLATFORM-GUARDRAILS.md +188 -0
- package/docs/PRIOR-ART.md +126 -0
- package/docs/SELF-TEST.md +182 -0
- package/docs/architecture/agent-platform-connection-layer.svg +120 -0
- package/docs/architecture/digital-employee-composition.svg +92 -0
- package/docs/architecture/dingtalk-agent-architecture.svg +125 -0
- package/docs/assets/digital-employee-at-work.svg +77 -0
- package/docs/schemas/multica-deployment-plan.schema.json +3 -1
- package/docs/schemas/multica-deployment-receipt.schema.json +17 -3
- package/docs/schemas/multica-deployment-status.schema.json +6 -2
- package/docs/schemas/multica-workspace-inspection.schema.json +16 -0
- package/docs/schemas/multica-workspace-run-plan.schema.json +31 -0
- package/docs/schemas/multica-workspace-run.schema.json +161 -0
- package/docs/schemas/multica-workspace-status.schema.json +2 -0
- package/docs/schemas/project.schema.json +54 -3
- package/docs/schemas/workspace-scaffold.schema.json +38 -0
- package/examples/agents/README.md +45 -0
- package/examples/agents/fde-coach/AGENTS.md +2 -25
- package/examples/agents/fde-coach/agent/AGENTS.md +35 -0
- package/examples/agents/fde-coach/agent.bindings.json +10 -0
- package/examples/agents/release-manager/AGENTS.md +2 -25
- package/examples/agents/release-manager/agent/AGENTS.md +35 -0
- package/examples/agents/release-manager/agent.bindings.json +10 -0
- package/lab/agent-eval/catalog.json +5 -5
- package/lab/agent-eval/classic-failures.json +4 -4
- package/lab/agent-eval/completion-gate-regression.json +9 -9
- package/lab/agent-eval/personal-event-live.example.json +3 -3
- package/lab/agent-eval/remote-semantic-state-live.example.json +1 -1
- package/lab/agent-eval/workspace/opencode.json +2 -2
- package/lab/project-workspace/fake-multica-provider.mjs +171 -17
- package/lab/project-workspace/multica-deploy.fixture.json +2 -2
- package/lab/project-workspace/multica-readonly.fixture.json +4 -16
- package/lab/project-workspace/opencode-provider-suite.json +3 -3
- package/lab/project-workspace/project.fixture.json +2 -6
- package/lab/robot-eval/suite.json +1 -1
- package/lab/robot-eval/workspace/AGENTS.md +1 -1
- package/lab/robot-eval/workspace/opencode.json +2 -2
- package/lab/schemas/personal-event-eval.schema.json +1 -1
- package/package.json +18 -11
- package/skills/README.md +10 -8
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/SKILL.md +49 -24
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/AGENTS.template.md +1 -1
- package/skills/core/dta-agent-compose/assets/REPOSITORY.template.md +10 -0
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +2 -2
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.local.template.json +2 -2
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/hosts/opencode/opencode.template.json +3 -2
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/evals/evals.json +4 -4
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/agent-definition-contract.md +7 -7
- package/skills/core/dta-agent-compose/references/drive-and-schedules.md +166 -0
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/host-loading-contract.md +11 -13
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/claude-code.md +13 -12
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/opencode.md +14 -13
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/SKILL.md +28 -3
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/assets/eval-catalog.template.json +1 -1
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/evals/evals.json +1 -1
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/eval-topology.md +3 -3
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/interactive-debug-channels.md +10 -4
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/SKILL.md +21 -5
- package/skills/core/dta-basic-behavior/references/event-to-behavior.md +38 -0
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/memory-and-evolution.md +3 -1
- package/skills/core/dta-basic-behavior/references/perception-and-gates.md +87 -0
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/risk-authority-and-privacy.md +12 -0
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/truth-and-recovery.md +4 -2
- package/skills/core/dta-people-group-memory/COMPLETENESS.md +36 -0
- package/skills/core/dta-people-group-memory/SKILL.md +69 -0
- package/skills/core/dta-people-group-memory/references/adapters.md +273 -0
- package/skills/core/dta-people-group-memory/references/assembly-guidance.md +40 -0
- package/skills/core/dta-people-group-memory/references/binding.md +110 -0
- package/skills/core/dta-people-group-memory/references/cold-start.md +70 -0
- package/skills/core/dta-people-group-memory/references/config-binding.md +89 -0
- package/skills/core/dta-people-group-memory/references/consent-and-visibility.md +83 -0
- package/skills/core/dta-people-group-memory/references/consolidation.md +162 -0
- package/skills/core/dta-people-group-memory/references/event-ingest.md +103 -0
- package/skills/core/dta-people-group-memory/references/guided-setup.md +70 -0
- package/skills/core/dta-people-group-memory/references/model.md +148 -0
- package/skills/core/dta-people-group-memory/references/storage-port.md +107 -0
- package/skills/platforms/deap/PLATFORM.md +30 -1
- package/skills/platforms/multica-dingtalk/PLATFORM.md +35 -9
- package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/SKILL.md +10 -8
- package/skills/platforms/multica-dingtalk/dta-deploy-multica/references/multica-deployment-contract.md +67 -0
- package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/SKILL.md +81 -11
- package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/bootstrap.sh +2 -2
- package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/multica_ext.py +264 -16
- package/dist/src/map.js +0 -157
- package/dist/src/map.js.map +0 -1
- package/docs/SECOND-AGENT-ACCEPTANCE.md +0 -62
- package/docs/architecture/agent-memory-topology.png +0 -0
- package/docs/architecture/agent-memory-topology.svg +0 -132
- package/docs/architecture/dingtalk-agent-blueprint.png +0 -0
- package/docs/architecture/durable-async-agent-runtime.png +0 -0
- package/docs/architecture/general-agent-kernel-topology.png +0 -0
- package/docs/architecture/provider-bound-development-workspace.png +0 -0
- package/docs/architecture/task-completion-gate.png +0 -0
- package/docs/assets/agent-delivery-lifecycle.svg +0 -103
- package/skills/core/dingtalk-basic-behavior/references/event-to-behavior.md +0 -24
- package/skills/core/dingtalk-basic-behavior/references/perception-and-gates.md +0 -28
- package/skills/platforms/deap/README.md +0 -3
- package/skills/platforms/multica-dingtalk/dingtalk-agent-boot-multica/SKILL.md +0 -40
- package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/references/multica-deployment-contract.md +0 -49
- /package/examples/agents/fde-coach/{skills → agent/skills}/fde-coach/SKILL.md +0 -0
- /package/examples/agents/release-manager/{skills → agent/skills}/release-manager/SKILL.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/role-skill.template.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/evidence-contract.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/failure-to-case.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/local-connector-smoke.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/task-lifecycle.md +0 -0
- /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/promotion-observation-contract.md +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"development-workspace.js","sourceRoot":"","sources":["../../src/development-workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto'\nimport {\n existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync,\n} from 'node:fs'\nimport { basename, dirname, join, parse, relative, resolve } from 'node:path'\nimport { findExecutable } from './doctor.js'\nimport { digest, stableStringify } from './events.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { loadWorkspace, workspacePath, type WorkspaceSpec } from './workspace.js'\nimport { bundledSkillPath } from './skill-manager.js'\n\nexport const PROJECT_FILE = 'dingtalk-agent.json'\nexport const CURRENT_WORKSPACE_FILE = '.dingtalk-agent/current-workspace'\nexport const WORKSPACE_STATE_ROOT = '.dingtalk-agent/state/workspaces'\nexport const LEGACY_WORKSPACE_NAME = 'legacy-prepared'\n\nexport type DevelopmentStage = 'dev' | 'test' | 'staging' | 'prod'\nexport type DeclaredProviderKind = 'opencode' | 'multica'\nexport type DevelopmentProviderKind = DeclaredProviderKind | 'local-prepared'\nexport type DevelopmentWorkspaceStatus =\n | 'declared' | 'resolving' | 'planned' | 'applying' | 'verifying'\n | 'ready' | 'drifted' | 'failed' | 'retired'\n\nexport interface OpenCodeProvider {\n kind: 'opencode'\n model: string\n}\n\nexport interface MulticaProvider {\n kind: 'multica'\n profile: string\n workspaceIdFrom: string\n runtimeIdFrom: string\n agentIdFrom?: string\n}\n\nexport interface WorkspaceStorage {\n memory: string\n knowledge: string\n artifacts?: string\n}\n\nexport interface WorkspaceAuthority {\n dwsProfileFrom: string\n expectedUserIdFrom: string\n}\n\nexport interface DeclaredWorkspace {\n stage: DevelopmentStage\n provider: OpenCodeProvider | MulticaProvider\n storage: WorkspaceStorage\n authority?: WorkspaceAuthority\n}\n\nexport interface AgentProjectManifest {\n $schema: 'dingtalk-agent/project@1'\n name: string\n dtaVersion: string\n agentPlatform?: string\n multicaEndpoint?: string\n agent: {\n definition: string\n displayName?: string\n skills: string[]\n }\n workspaces: Record<string, DeclaredWorkspace>\n}\n\nexport interface DevelopmentWorkspaceState {\n $schema: 'dingtalk-agent/workspace-state@1'\n workspace: string\n provider: DeclaredProviderKind\n status: DevelopmentWorkspaceStatus\n binding: Record<string, string>\n desiredHash: string\n observedHash: string\n lastPlanId: string\n lastReceiptId: string\n lastEvalId: string\n}\n\nexport interface DevelopmentWorkspaceView {\n name: string\n stage: DevelopmentStage\n provider: { kind: DevelopmentProviderKind } & Record<string, string>\n storage: Required<WorkspaceStorage>\n authority: WorkspaceAuthority | null\n sourceHash: string\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n current: boolean\n legacy: boolean\n statePath: string\n state: DevelopmentWorkspaceState | null\n drift: string[]\n configSources: string[]\n}\n\nexport interface AgentProjectInfo {\n $schema: 'dingtalk-agent/info@1'\n root: string\n source: 'manifest' | 'legacy'\n manifest: string\n manifestHash: string\n project: {\n name: string\n displayName: string\n dtaVersion: string\n compatibleWithCli: boolean\n definition: string\n skills: string[]\n }\n currentWorkspace: string\n workspaces: DevelopmentWorkspaceView[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface DevelopmentWorkspaceCheck {\n id: string\n surface: 'project' | 'provider' | 'definition' | 'skills' | 'storage' | 'authority' | 'state'\n level: 'pass' | 'warn' | 'fail'\n blocking: boolean\n summary: string\n evidence: Record<string, unknown>\n fix?: string\n}\n\nexport interface DevelopmentWorkspaceDoctorReport {\n $schema: 'dingtalk-agent/workspace-doctor@1'\n ready: boolean\n workspace: string\n provider: DevelopmentProviderKind\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n checks: DevelopmentWorkspaceCheck[]\n missing: string[]\n configSources: string[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\ninterface LoadedProject {\n root: string\n source: 'manifest' | 'legacy'\n manifestPath: string\n manifestHash: string\n manifest: AgentProjectManifest\n legacy: WorkspaceSpec | null\n}\n\nconst PROJECT_KEYS = new Set(['$schema', 'name', 'dtaVersion', 'agent', 'workspaces'])\nconst PROJECT_OPTIONAL_KEYS = new Set([...PROJECT_KEYS, 'agentPlatform', 'multicaEndpoint'])\nconst AGENT_KEYS = new Set(['definition', 'displayName', 'skills'])\nconst AGENT_REQUIRED_KEYS = new Set(['definition', 'skills'])\nconst WORKSPACE_KEYS = new Set(['stage', 'provider', 'storage', 'authority'])\nconst OPENCODE_KEYS = new Set(['kind', 'model'])\nconst MULTICA_KEYS = new Set([\n 'kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom', 'agentIdFrom',\n])\nconst STORAGE_KEYS = new Set(['memory', 'knowledge', 'artifacts'])\nconst AUTHORITY_KEYS = new Set(['dwsProfileFrom', 'expectedUserIdFrom'])\nconst STATE_KEYS = new Set([\n '$schema', 'workspace', 'provider', 'status', 'binding', 'desiredHash', 'observedHash',\n 'lastPlanId', 'lastReceiptId', 'lastEvalId',\n])\nconst STATE_STATUSES = new Set<DevelopmentWorkspaceStatus>([\n 'declared', 'resolving', 'planned', 'applying', 'verifying',\n 'ready', 'drifted', 'failed', 'retired',\n])\nconst SECRET_KEY = /(?:secret|token|cookie|password|credentials?)$/i\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst ENV_REF = /^env:[A-Z_][A-Z0-9_]*$/\n\nexport function findAgentProjectRoot(start = process.cwd()): string | null {\n let directory = resolve(start)\n if (existsSync(directory) && !statSync(directory).isDirectory()) directory = dirname(directory)\n while (true) {\n if (existsSync(join(directory, PROJECT_FILE)) || existsSync(workspacePath(directory))) {\n return realpathSync(directory)\n }\n const parent = dirname(directory)\n if (parent === directory || directory === parse(directory).root) return null\n directory = parent\n }\n}\n\nexport function inspectAgentProject(\n start = process.cwd(), cliVersion = '',\n): AgentProjectInfo {\n const loaded = loadAgentProject(start)\n const currentWorkspace = readCurrentWorkspace(loaded.root)\n const declared = Object.entries(loaded.manifest.workspaces)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, workspace]) => declaredView(loaded, name, workspace, currentWorkspace))\n if (loaded.legacy && !(LEGACY_WORKSPACE_NAME in loaded.manifest.workspaces)) {\n declared.push(legacyView(loaded, loaded.legacy, currentWorkspace))\n }\n if (currentWorkspace && !declared.some((item) => item.name === currentWorkspace)) {\n throw new Error(`current-workspace 指向未知 Workspace: ${currentWorkspace}`)\n }\n return {\n $schema: 'dingtalk-agent/info@1',\n root: loaded.root,\n source: loaded.source,\n manifest: loaded.manifestPath ? relative(loaded.root, loaded.manifestPath) : '',\n manifestHash: loaded.manifestHash,\n project: {\n name: loaded.manifest.name,\n displayName: loaded.manifest.agent.displayName || loaded.manifest.name,\n dtaVersion: loaded.manifest.dtaVersion,\n compatibleWithCli: !cliVersion || versionSatisfies(cliVersion, loaded.manifest.dtaVersion),\n definition: loaded.manifest.agent.definition,\n skills: [...loaded.manifest.agent.skills],\n },\n currentWorkspace,\n workspaces: declared,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function showDevelopmentWorkspace(\n start: string, name: string, cliVersion = '',\n): DevelopmentWorkspaceView {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n return workspace\n}\n\nexport function doctorDevelopmentWorkspace(\n start: string,\n name: string,\n options: { cliVersion?: string; env?: NodeJS.ProcessEnv } = {},\n): DevelopmentWorkspaceDoctorReport {\n const cliVersion = options.cliVersion || ''\n const env = options.env || process.env\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n const checks: DevelopmentWorkspaceCheck[] = []\n const add = (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence: Record<string, unknown> = {}, fix?: string,\n ) => checks.push({ id, surface, level, blocking, summary, evidence, ...(fix ? { fix } : {}) })\n\n add('project.schema', 'project', 'pass', true, 'Project manifest/schema 可解析', {\n source: info.source, manifestHash: info.manifestHash,\n })\n add('project.version', 'project', info.project.compatibleWithCli ? 'pass' : 'fail', true,\n info.project.compatibleWithCli ? 'Project 声明兼容当前 dta 版本' : 'Project dtaVersion 与当前 CLI 不兼容',\n { required: info.project.dtaVersion, actual: cliVersion || 'unknown' },\n '升级 CLI,或在审阅兼容性后更新 dingtalk-agent.json#dtaVersion')\n\n const definition = inspectLocalFile(info.root, info.project.definition)\n add('definition.file', 'definition', definition.valid ? 'pass' : 'fail', true,\n definition.valid ? 'Agent Definition 位于 Project 内且可读' : 'Agent Definition 缺失、越界或不是文件',\n definition, `修复 ${info.project.definition}`)\n\n for (const [slot, uri] of Object.entries(workspace.storage)) {\n const local = inspectStorageRoute(info.root, uri)\n const blocking = !uri.startsWith('dingtalk-doc:') && !(workspace.legacy && slot === 'artifacts')\n add(`storage.${slot}`, 'storage', local.valid ? 'pass' : blocking ? 'fail' : 'warn', blocking,\n local.valid ? `${slot} Storage route 可解析`\n : uri.startsWith('dingtalk-doc:') ? `${slot} 是远端语义路由,W1 不执行 DWS 回读`\n : `${slot} 本地 Storage route 缺失或越界`,\n { route: uri, ...local }, local.fix)\n }\n\n if (workspace.state) {\n add('state.provider', 'state', workspace.drift.includes('provider') ? 'fail' : 'pass', true,\n workspace.drift.includes('provider') ? 'State Provider 与声明不一致' : 'State Provider 与声明一致',\n { declared: workspace.provider.kind, observed: workspace.state.provider })\n add('state.desired-hash', 'state', workspace.drift.includes('desiredHash') ? 'fail' : 'pass', true,\n workspace.drift.includes('desiredHash') ? 'State desiredHash 已漂移' : 'State desiredHash 与声明一致',\n { desiredHash: workspace.desiredHash, stateDesiredHash: workspace.state.desiredHash })\n add('state.status', 'state', workspace.state.status === 'ready' ? 'pass' : 'fail', true,\n workspace.state.status === 'ready' ? 'Provider state 已回读为 ready'\n : `Provider state 尚未 ready: ${workspace.state.status}`,\n { status: workspace.state.status })\n const observedHashValid = /^[a-f0-9]{64}$/.test(workspace.state.observedHash)\n add('state.observed-hash', 'state', observedHashValid ? 'pass' : 'fail', true,\n observedHashValid ? 'Provider observedHash 是稳定 sha256' : 'ready state 缺少有效 observedHash',\n { configured: Boolean(workspace.state.observedHash) })\n } else {\n const required = !workspace.legacy\n add('state.present', 'state', required ? 'fail' : 'warn', required,\n required ? '尚无 Provider 回读 state;Workspace 只完成声明,尚未就绪'\n : 'Legacy adapter 不要求新的 Provider state', {\n expectedPath: workspace.statePath,\n })\n }\n\n if (workspace.provider.kind === 'opencode') {\n inspectOpenCodeWorkspace(info, workspace, env, add)\n } else if (workspace.provider.kind === 'multica') {\n inspectDeclaredMulticaWorkspace(workspace, env, add)\n } else {\n add('provider.legacy', 'provider', 'pass', true,\n 'Legacy Prepared Workspace 已通过 workspace@1 parser 只读加载', {\n provider: workspace.provider.kind, state: 'adapter-only',\n })\n }\n\n const missing = checks.filter((check) => check.blocking && check.level !== 'pass')\n .map((check) => check.id)\n return {\n $schema: 'dingtalk-agent/workspace-doctor@1',\n ready: missing.length === 0,\n workspace: workspace.name,\n provider: workspace.provider.kind,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n status: workspace.status,\n checks,\n missing,\n configSources: workspace.configSources,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction loadAgentProject(start: string): LoadedProject {\n const root = findAgentProjectRoot(start)\n if (!root) {\n throw new Error(`找不到 ${PROJECT_FILE} 或 ${workspacePath('<project>')};请在 Agent Project 内运行`)\n }\n const manifestPath = join(root, PROJECT_FILE)\n const legacyPath = workspacePath(root)\n if (existsSync(legacyPath) && (\n lstatSync(legacyPath).isSymbolicLink() || !isInside(root, realpathSync(legacyPath))\n )) {\n throw new Error('Legacy workspace manifest 不能是越界符号链接')\n }\n const legacy = existsSync(legacyPath) ? loadWorkspace(root) : null\n if (!existsSync(manifestPath)) {\n if (!legacy) throw new Error(`找不到 ${PROJECT_FILE}`)\n const manifest = syntheticLegacyProject(root, legacy)\n return {\n root, source: 'legacy', manifestPath: '', manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n }\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n let raw: unknown\n let source = ''\n try {\n source = readFileSync(manifestPath, 'utf8')\n raw = JSON.parse(source)\n } catch (error) {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON: ${error.message}`)\n }\n rejectSecretLikeKeys(raw, PROJECT_FILE)\n const manifest = validateProjectManifest(raw, root)\n return {\n root, source: 'manifest', manifestPath: realpathSync(manifestPath), manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n}\n\nfunction validateProjectManifest(value: unknown, root: string): AgentProjectManifest {\n const input = objectValue(value, 'Project manifest')\n assertAllowedKeys(input, PROJECT_OPTIONAL_KEYS, 'Project manifest')\n const missing = [...PROJECT_KEYS].filter((key) => !(key in input))\n if (missing.length) throw new Error(`Project manifest 缺少字段: ${missing.join(', ')}`)\n if (input.$schema !== 'dingtalk-agent/project@1') {\n throw new Error('Project manifest 缺少 dingtalk-agent/project@1 schema')\n }\n const name = stableName(input.name, 'Project name')\n const dtaVersion = requiredString(input.dtaVersion, 'dtaVersion')\n const agentPlatform = input.agentPlatform === undefined\n ? undefined : requiredString(input.agentPlatform, 'agentPlatform')\n const multicaEndpoint = input.multicaEndpoint === undefined\n ? undefined : requiredString(input.multicaEndpoint, 'multicaEndpoint')\n const agentInput = objectValue(input.agent, 'Project agent')\n assertAllowedKeys(agentInput, AGENT_KEYS, 'Project agent')\n const missingAgent = [...AGENT_REQUIRED_KEYS].filter((key) => !(key in agentInput))\n if (missingAgent.length) throw new Error(`Project agent 缺少字段: ${missingAgent.join(', ')}`)\n const definition = safeRelativePath(root, requiredString(agentInput.definition, 'agent.definition'),\n 'agent.definition', false)\n const displayName = agentInput.displayName === undefined\n ? undefined : agentDisplayName(agentInput.displayName, 'agent.displayName')\n if (!Array.isArray(agentInput.skills) || agentInput.skills.length === 0) {\n throw new Error('agent.skills 必须是非空 string[]')\n }\n const skills = agentInput.skills.map((item, index) => stableName(item, `agent.skills[${index}]`))\n if (new Set(skills).size !== skills.length) throw new Error('agent.skills 不能包含重复项')\n if (!skills.includes('dingtalk-basic-behavior')) {\n throw new Error('agent.skills 必须显式包含 dingtalk-basic-behavior')\n }\n const workspaceInput = objectValue(input.workspaces, 'Project workspaces')\n const workspaces: Record<string, DeclaredWorkspace> = {}\n for (const [workspaceName, rawWorkspace] of Object.entries(workspaceInput)) {\n stableName(workspaceName, `Workspace name ${workspaceName}`)\n if (workspaceName === LEGACY_WORKSPACE_NAME) {\n throw new Error(`${LEGACY_WORKSPACE_NAME} 是 legacy adapter 保留名称`)\n }\n workspaces[workspaceName] = validateDeclaredWorkspace(rawWorkspace, root, workspaceName)\n }\n return {\n $schema: 'dingtalk-agent/project@1', name, dtaVersion,\n ...(agentPlatform === undefined ? {} : { agentPlatform }),\n ...(multicaEndpoint === undefined ? {} : { multicaEndpoint }),\n agent: { definition, ...(displayName === undefined ? {} : { displayName }), skills }, workspaces,\n }\n}\n\nfunction validateDeclaredWorkspace(value: unknown, root: string, name: string): DeclaredWorkspace {\n const input = objectValue(value, `Workspace ${name}`)\n assertAllowedKeys(input, WORKSPACE_KEYS, `Workspace ${name}`)\n for (const required of ['stage', 'provider', 'storage']) {\n if (!(required in input)) throw new Error(`Workspace ${name} 缺少字段: ${required}`)\n }\n const stage = requiredString(input.stage, `Workspace ${name}.stage`) as DevelopmentStage\n if (!['dev', 'test', 'staging', 'prod'].includes(stage)) {\n throw new Error(`Workspace ${name}.stage 非法: ${stage}`)\n }\n const providerInput = objectValue(input.provider, `Workspace ${name}.provider`)\n const kind = requiredString(providerInput.kind, `Workspace ${name}.provider.kind`)\n let provider: OpenCodeProvider | MulticaProvider\n if (kind === 'opencode') {\n assertExactKeys(providerInput, OPENCODE_KEYS, `Workspace ${name}.provider`)\n provider = { kind, model: requiredString(providerInput.model, `Workspace ${name}.provider.model`) }\n } else if (kind === 'multica') {\n assertAllowedKeys(providerInput, MULTICA_KEYS, `Workspace ${name}.provider`)\n for (const required of ['kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom']) {\n if (!(required in providerInput)) {\n throw new Error(`Workspace ${name}.provider 缺少字段: ${required}`)\n }\n }\n provider = {\n kind,\n profile: requiredString(providerInput.profile, `Workspace ${name}.provider.profile`),\n workspaceIdFrom: envReference(providerInput.workspaceIdFrom, `${name}.workspaceIdFrom`),\n runtimeIdFrom: envReference(providerInput.runtimeIdFrom, `${name}.runtimeIdFrom`),\n ...(providerInput.agentIdFrom === undefined ? {} : {\n agentIdFrom: envReference(providerInput.agentIdFrom, `${name}.agentIdFrom`),\n }),\n }\n } else {\n throw new Error(`Workspace ${name}.provider.kind 只支持 opencode / multica`)\n }\n const storageInput = objectValue(input.storage, `Workspace ${name}.storage`)\n assertAllowedKeys(storageInput, STORAGE_KEYS, `Workspace ${name}.storage`)\n const memory = storageRoute(storageInput.memory, ['local-md', 'dingtalk-doc'], `${name}.memory`, root)\n const knowledge = storageRoute(\n storageInput.knowledge, ['local-md', 'dingtalk-doc'], `${name}.knowledge`, root,\n )\n const artifacts = storageInput.artifacts === undefined ? undefined\n : storageRoute(storageInput.artifacts, ['local-dir'], `${name}.artifacts`, root)\n let authority: WorkspaceAuthority | undefined\n if (input.authority !== undefined) {\n const authorityInput = objectValue(input.authority, `Workspace ${name}.authority`)\n assertExactKeys(authorityInput, AUTHORITY_KEYS, `Workspace ${name}.authority`)\n authority = {\n dwsProfileFrom: envReference(authorityInput.dwsProfileFrom, `${name}.dwsProfileFrom`),\n expectedUserIdFrom: envReference(\n authorityInput.expectedUserIdFrom, `${name}.expectedUserIdFrom`,\n ),\n }\n }\n if (provider.kind === 'multica' && !authority) {\n throw new Error(`Workspace ${name} 的 multica Provider 必须声明 authority env 来源`)\n }\n return { stage, provider, storage: { memory, knowledge, ...(artifacts ? { artifacts } : {}) },\n ...(authority ? { authority } : {}) }\n}\n\nfunction declaredView(\n loaded: LoadedProject,\n name: string,\n workspace: DeclaredWorkspace,\n currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const artifacts = workspace.storage.artifacts ||\n `local-dir:.dingtalk-agent/artifacts/${name}`\n const storage: Required<WorkspaceStorage> = { ...workspace.storage, artifacts }\n const sourceHash = projectSourceHash(loaded.root, loaded.manifest)\n const desiredHash = digest(stableStringify({\n project: loaded.manifest.name,\n agent: loaded.manifest.agent,\n workspace: name,\n stage: workspace.stage,\n provider: workspace.provider,\n storage,\n authority: workspace.authority || null,\n sourceHash,\n }))\n const statePath = join(loaded.root, WORKSPACE_STATE_ROOT, `${name}.json`)\n const state = existsSync(statePath)\n ? loadDevelopmentWorkspaceState(statePath, name, loaded.root) : null\n const drift: string[] = []\n if (state && state.provider !== workspace.provider.kind) drift.push('provider')\n if (state && state.desiredHash !== desiredHash) drift.push('desiredHash')\n const status: DevelopmentWorkspaceStatus = drift.length ? 'drifted' : state?.status || 'declared'\n return {\n name,\n stage: workspace.stage,\n provider: { ...workspace.provider },\n storage,\n authority: workspace.authority || null,\n sourceHash,\n desiredHash,\n observedHash: state?.observedHash || '',\n status,\n current: currentWorkspace === name,\n legacy: false,\n statePath: relative(loaded.root, statePath),\n state,\n drift,\n configSources: collectConfigSources(workspace),\n }\n}\n\nfunction legacyView(\n loaded: LoadedProject, spec: WorkspaceSpec, currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const storage: Required<WorkspaceStorage> = {\n memory: spec.mounts.memory,\n knowledge: spec.mounts.knowledge,\n artifacts: 'local-dir:.dingtalk-agent/artifacts/legacy-prepared',\n }\n const desiredHash = digest(stableStringify({ provider: 'local-prepared', workspace: spec }))\n return {\n name: LEGACY_WORKSPACE_NAME,\n stage: 'dev',\n provider: { kind: 'local-prepared', contextId: spec.contextId, fieldId: spec.fieldId },\n storage,\n authority: spec.dws.profile || spec.dws.expectedUserId ? {\n dwsProfileFrom: 'legacy:workspace.dws.profile',\n expectedUserIdFrom: 'legacy:workspace.dws.expectedUserId',\n } : null,\n sourceHash: digest(stableStringify({ definition: spec.mounts.profile, skills: spec.skills })),\n desiredHash,\n observedHash: desiredHash,\n status: 'ready',\n current: currentWorkspace === LEGACY_WORKSPACE_NAME,\n legacy: true,\n statePath: relative(loaded.root, workspacePath(loaded.root)),\n state: null,\n drift: [],\n configSources: ['legacy:.dingtalk-agent/workspace.json'],\n }\n}\n\nfunction projectSourceHash(root: string, manifest: AgentProjectManifest): string {\n const sources: Record<string, string> = {\n definition: localContentHash(root, manifest.agent.definition),\n opencode: localContentHash(root, 'opencode.json'),\n }\n for (const name of manifest.agent.skills) {\n const ref = name === 'dingtalk-basic-behavior'\n ? `.agents/skills/${name}` : `skills/${name}`\n sources[`skill:${name}`] = localContentHash(root, ref)\n const exposure = `.agents/skills/${name}`\n sources[`exposure:${name}`] = localContentHash(root, exposure)\n }\n return digest(stableStringify(sources))\n}\n\nfunction localContentHash(root: string, ref: string): string {\n const candidate = resolve(root, ref)\n if (!isInside(root, candidate) || !existsSync(candidate)) return ''\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`Project source 真实路径越界: ${ref}`)\n const stat = lstatSync(actual)\n if (stat.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}`)\n if (stat.isFile()) return sha256(readFileSync(actual))\n if (!stat.isDirectory()) throw new Error(`Project source 类型非法: ${ref}`)\n const entries: Array<{ path: string; hash: string }> = []\n const visit = (directory: string, prefix = ''): void => {\n for (const entry of readdirSorted(directory)) {\n const path = join(directory, entry.name)\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}/${relativePath}`)\n if (entry.isDirectory()) visit(path, relativePath)\n else if (entry.isFile()) entries.push({ path: relativePath, hash: sha256(readFileSync(path)) })\n else throw new Error(`Project source 类型非法: ${ref}/${relativePath}`)\n }\n }\n visit(actual)\n return digest(stableStringify(entries))\n}\n\nfunction readdirSorted(directory: string): import('node:fs').Dirent[] {\n return readdirSync(directory, { withFileTypes: true })\n .sort((a, b) => a.name.localeCompare(b.name))\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction loadDevelopmentWorkspaceState(\n path: string, workspace: string, root: string,\n): DevelopmentWorkspaceState {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`Workspace state 不能是符号链接: ${path}`)\n if (!isInside(root, realpathSync(path))) throw new Error(`Workspace state 真实路径越出 Project: ${path}`)\n let raw: unknown\n try { raw = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`Workspace state 不是合法 JSON: ${error.message}`) }\n rejectSecretLikeKeys(raw, 'Workspace state')\n const input = objectValue(raw, 'Workspace state')\n assertExactKeys(input, STATE_KEYS, 'Workspace state')\n if (input.$schema !== 'dingtalk-agent/workspace-state@1') {\n throw new Error('Workspace state 缺少 dingtalk-agent/workspace-state@1 schema')\n }\n if (input.workspace !== workspace) {\n throw new Error(`Workspace state 名称不一致: ${String(input.workspace)} != ${workspace}`)\n }\n const provider = requiredString(input.provider, 'Workspace state provider') as DeclaredProviderKind\n if (!['opencode', 'multica'].includes(provider)) throw new Error(`Workspace state provider 非法: ${provider}`)\n const status = requiredString(input.status, 'Workspace state status') as DevelopmentWorkspaceStatus\n if (!STATE_STATUSES.has(status)) throw new Error(`Workspace state status 非法: ${status}`)\n const bindingInput = objectValue(input.binding, 'Workspace state binding')\n const binding = Object.fromEntries(Object.entries(bindingInput).map(([key, item]) => [\n key, optionalString(item, `Workspace state binding.${key}`),\n ]))\n return {\n $schema: 'dingtalk-agent/workspace-state@1', workspace, provider, status, binding,\n desiredHash: requiredString(input.desiredHash, 'Workspace state desiredHash'),\n observedHash: optionalString(input.observedHash, 'Workspace state observedHash'),\n lastPlanId: optionalString(input.lastPlanId, 'Workspace state lastPlanId'),\n lastReceiptId: optionalString(input.lastReceiptId, 'Workspace state lastReceiptId'),\n lastEvalId: optionalString(input.lastEvalId, 'Workspace state lastEvalId'),\n }\n}\n\nfunction inspectOpenCodeWorkspace(\n info: AgentProjectInfo,\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('opencode', env)\n add('provider.opencode-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'OpenCode CLI 可执行' : 'PATH 找不到 opencode',\n { executable: executable || '' }, '安装 OpenCode,并确认 opencode --version 可执行')\n add('provider.opencode-model', 'provider', workspace.provider.model ? 'pass' : 'fail', true,\n workspace.provider.model ? 'OpenCode model 已显式声明' : 'OpenCode model 缺失',\n { model: workspace.provider.model || '' })\n\n const basicPath = '.agents/skills/dingtalk-basic-behavior/SKILL.md'\n const basic = inspectLocalFile(info.root, basicPath)\n const canonicalPackageRoot = resolvePackageRoot(import.meta.url)\n const canonicalBasic = inspectLocalFile(\n canonicalPackageRoot,\n relative(canonicalPackageRoot,\n join(bundledSkillPath(canonicalPackageRoot, 'dingtalk-basic-behavior'), 'SKILL.md')),\n )\n const basicMatched = basic.valid && canonicalBasic.valid && basic.hash === canonicalBasic.hash\n add('skills.basic-exposure', 'skills', basicMatched ? 'pass' : 'fail', true,\n basicMatched ? 'Basic Skill exposure 与当前 canonical source 一致'\n : 'Basic Skill exposure 缺失、越界或 hash 漂移',\n { exposure: basic, canonicalHash: canonicalBasic.hash || '' }, `重新物化 ${basicPath}`)\n const configPath = join(info.root, 'opencode.json')\n const configFile = inspectLocalFile(info.root, 'opencode.json')\n let configError = ''\n let instructionCount = 0\n let permission = ''\n let permissions: Record<string, string> = {}\n if (configFile.valid) {\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf8')) as Record<string, any>\n const instructions = Array.isArray(config.instructions) ? config.instructions : []\n instructionCount = instructions.filter((item) => item === basicPath).length\n const skillPermissions = config.permission?.skill\n permissions = skillPermissions && typeof skillPermissions === 'object' &&\n !Array.isArray(skillPermissions)\n ? Object.fromEntries(Object.entries(skillPermissions).map(([key, value]) => [key, String(value)]))\n : {}\n permission = permissions['dingtalk-basic-behavior'] || ''\n } catch (error) { configError = error.message }\n } else configError = configFile.exists ? 'outside-or-not-file' : 'missing'\n const configValid = !configError && instructionCount === 1 && permission === 'allow'\n add('skills.basic-instruction', 'skills', configValid ? 'pass' : 'fail', true,\n configValid ? 'OpenCode config 强制加载且允许 Basic Skill' : 'OpenCode Basic instruction/permission 合同不完整',\n { path: 'opencode.json', error: configError, instructionCount, permission },\n '运行 compose/bind 流程生成唯一 Basic instruction 与 allow permission')\n\n for (const name of info.project.skills.filter((item) => item !== 'dingtalk-basic-behavior')) {\n const source = inspectLocalFile(info.root, `skills/${name}/SKILL.md`)\n const exposure = inspectLocalFile(info.root, `.agents/skills/${name}/SKILL.md`)\n const matched = source.valid && exposure.valid && source.hash === exposure.hash &&\n permissions[name] === 'allow'\n add(`skills.role.${name}`, 'skills', matched ? 'pass' : 'fail', true,\n matched ? `Role Skill ${name} source/exposure hash 与 permission 一致`\n : `Role Skill ${name} source、exposure hash 或 permission 不一致`,\n { source, exposure, permission: permissions[name] || '' }, `运行 compose/bind 流程物化 ${name}`)\n }\n const managedRef = workspace.state?.binding.managedPath || ''\n if (managedRef) {\n const managedHash = localContentHash(info.root, managedRef)\n const matched = Boolean(managedHash && managedHash === workspace.state?.observedHash &&\n workspace.state?.binding.sourceHash === workspace.sourceHash &&\n workspace.state?.binding.model === workspace.provider.model)\n add('provider.managed-integrity', 'provider', matched ? 'pass' : 'fail', true,\n matched ? 'Managed Workspace、source/model 与 observed hash 一致'\n : 'Managed Workspace 缺失或 source/model/observed hash 漂移', {\n path: managedRef,\n actualHash: managedHash,\n expectedHash: workspace.state?.observedHash || '',\n sourceMatched: workspace.state?.binding.sourceHash === workspace.sourceHash,\n modelMatched: workspace.state?.binding.model === workspace.provider.model,\n }, `重新执行 dta workspace create ${workspace.name} --yes`)\n }\n const loadVerified = workspace.state?.status === 'ready' && Boolean(\n workspace.state.lastReceiptId || workspace.state.lastEvalId)\n add('provider.load-proof', 'provider', loadVerified ? 'pass' : 'warn', false,\n loadVerified\n ? 'Provider state 已绑定通过的随机 load/eval 证据;详情见 lastReceiptId/lastEvalId'\n : '尚未取得随机 load probe;先执行 workspace run/eval', {\n executed: Boolean(workspace.state?.lastReceiptId || workspace.state?.lastEvalId),\n lastReceiptId: workspace.state?.lastReceiptId || '',\n lastEvalId: workspace.state?.lastEvalId || '',\n })\n}\n\nfunction inspectDeclaredMulticaWorkspace(\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('multica', env)\n add('provider.multica-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'Multica CLI 可执行' : 'PATH 找不到 multica;仅当前 Multica Workspace 不就绪',\n { executable: executable || '' }, '安装 Multica CLI;其他 Provider Workspace 不受影响')\n const refs = [\n ['workspace-id', workspace.provider.workspaceIdFrom],\n ['runtime-id', workspace.provider.runtimeIdFrom],\n ['dws-profile', workspace.authority?.dwsProfileFrom || ''],\n ['expected-user-id', workspace.authority?.expectedUserIdFrom || ''],\n ] as const\n for (const [id, ref] of refs) {\n const variable = ref.startsWith('env:') ? ref.slice(4) : ''\n const configured = Boolean(variable && env[variable])\n add(`authority.${id}`, 'authority', configured ? 'pass' : 'fail', true,\n configured ? `${id} 来源已解析` : `${id} 环境来源未设置`,\n { source: ref, configured }, `设置 ${ref || '<missing-env-ref>'}`)\n }\n const agentRef = workspace.provider.agentIdFrom || ''\n const agentVariable = agentRef.startsWith('env:') ? agentRef.slice(4) : ''\n const agentConfigured = Boolean(agentVariable && env[agentVariable])\n add('authority.agent-id', 'authority', agentRef && agentConfigured ? 'pass' : 'warn', false,\n agentRef\n ? agentConfigured ? 'agent-id 可信来源已解析' : 'agent-id 来源未设置;只允许列候选,不按名称绑定'\n : '未声明 agent-id;W3 只列候选,W4 create 后必须保存稳定 ID',\n { source: agentRef, configured: agentConfigured },\n agentRef ? `设置 ${agentRef}` : '已有 Agent 时声明 provider.agentIdFrom;新 Agent 由 W4 apply 保存 ID')\n const inspectionId = workspace.state?.binding.inspectionId || ''\n add('provider.remote-inspect', 'provider', 'warn', false,\n inspectionId\n ? '已有脱敏 Multica 只读 inspection;W4 load/smoke 前仍不能 ready'\n : '尚未运行 Multica 只读 inspection;不会创建或更新远端资源', {\n executed: Boolean(inspectionId), inspectionId, remoteWrite: false,\n })\n}\n\nfunction inspectStorageRoute(root: string, uri: string): Record<string, any> {\n if (uri.startsWith('dingtalk-doc:')) {\n return { valid: false, provider: 'dingtalk-doc', local: false, checked: false }\n }\n const separator = uri.indexOf(':')\n const provider = uri.slice(0, separator)\n const ref = uri.slice(separator + 1)\n const inspected = provider === 'local-md'\n ? inspectLocalFile(root, ref)\n : inspectLocalDirectory(root, ref)\n return { ...inspected, provider, local: true, checked: true }\n}\n\nfunction inspectLocalFile(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'file'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内文件 ${ref}` }\n}\n\nfunction inspectLocalDirectory(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'directory'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内目录 ${ref}` }\n}\n\nfunction inspectLocalPath(root: string, ref: string): Record<string, unknown> {\n const candidate = resolve(root, ref)\n const inside = isInside(root, candidate)\n if (!inside || !existsSync(candidate)) {\n return { path: ref, inside, exists: false, type: 'missing' }\n }\n const actual = realpathSync(candidate)\n const actualInside = isInside(root, actual)\n const stat = statSync(actual)\n return {\n path: relative(root, actual), inside: actualInside, exists: true,\n type: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',\n ...(stat.isFile() && actualInside ? { hash: digest(readFileSync(actual, 'utf8')) } : {}),\n }\n}\n\nfunction syntheticLegacyProject(root: string, workspace: WorkspaceSpec): AgentProjectManifest {\n const definition = workspace.mounts.profile.startsWith('local-md:')\n ? workspace.mounts.profile.slice('local-md:'.length) : 'WORKSPACE.md'\n return {\n $schema: 'dingtalk-agent/project@1',\n name: stableName(basename(root) || 'legacy-agent', 'Legacy Project name'),\n dtaVersion: '*',\n agent: { definition, skills: [...workspace.skills] },\n workspaces: {},\n }\n}\n\nfunction readCurrentWorkspace(root: string): string {\n const path = join(root, CURRENT_WORKSPACE_FILE)\n if (!existsSync(path)) return ''\n if (lstatSync(path).isSymbolicLink()) throw new Error('current-workspace 不能是符号链接')\n if (!isInside(root, realpathSync(path))) throw new Error('current-workspace 真实路径越出 Project')\n const value = readFileSync(path, 'utf8').trim()\n return value ? stableName(value, 'current-workspace') : ''\n}\n\nfunction collectConfigSources(workspace: DeclaredWorkspace): string[] {\n const sources = [\n `manifest:provider.kind=${workspace.provider.kind}`,\n `manifest:stage=${workspace.stage}`,\n ]\n if (workspace.provider.kind === 'opencode') sources.push('manifest:provider.model')\n else sources.push(\n 'manifest:provider.profile', workspace.provider.workspaceIdFrom, workspace.provider.runtimeIdFrom,\n ...(workspace.provider.agentIdFrom ? [workspace.provider.agentIdFrom] : []),\n )\n if (workspace.authority) sources.push(\n workspace.authority.dwsProfileFrom, workspace.authority.expectedUserIdFrom,\n )\n return [...new Set(sources)]\n}\n\nfunction storageRoute(\n value: unknown, providers: string[], label: string, root: string,\n): string {\n const text = requiredString(value, label)\n const separator = text.indexOf(':')\n const provider = separator < 0 ? '' : text.slice(0, separator)\n const ref = separator < 0 ? '' : text.slice(separator + 1).trim()\n if (!providers.includes(provider) || !ref) {\n throw new Error(`${label} Storage 非法;允许 ${providers.map((item) => `${item}:<ref>`).join(' / ')}`)\n }\n if (provider.startsWith('local-')) safeRelativePath(root, ref, label, true)\n return `${provider}:${ref}`\n}\n\nfunction safeRelativePath(root: string, input: string, label: string, allowMissing: boolean): string {\n if (input.includes('\\0')) throw new Error(`${label} 包含 NUL`) // defensive for non-POSIX callers\n const candidate = resolve(root, input)\n if (!isInside(root, candidate) || candidate === root) throw new Error(`${label} 必须位于 Project 内: ${input}`)\n if (existsSync(candidate)) {\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`${label} 真实路径越出 Project: ${input}`)\n } else if (!allowMissing && !isInside(root, candidate)) {\n throw new Error(`${label} 越出 Project: ${input}`)\n }\n return relative(root, candidate).split('\\\\').join('/')\n}\n\nfunction envReference(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!ENV_REF.test(text)) throw new Error(`${label} 必须是 env:UPPER_CASE_VAR 引用`)\n return text\n}\n\nfunction stableName(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!NAME.test(text)) throw new Error(`${label} 非法: ${text}`)\n return text\n}\n\nfunction agentDisplayName(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (text.length > 128 || /[\\u0000-\\u001f\\u007f]/.test(text)) {\n throw new Error(`${label} 必须是不超过 128 字符且不含控制字符的显示名`)\n }\n return text\n}\n\nfunction requiredString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new Error(`${label} 必须是非空字符串`)\n return value.trim()\n}\n\nfunction optionalString(value: unknown, label: string): string {\n if (typeof value !== 'string') throw new Error(`${label} 必须是字符串`)\n return value.trim()\n}\n\nfunction objectValue(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`${label} 必须是 JSON object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n assertAllowedKeys(value, allowed, label)\n const missing = [...allowed].filter((key) => !(key in value))\n if (missing.length) throw new Error(`${label} 缺少字段: ${missing.join(', ')}`)\n}\n\nfunction assertAllowedKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n const unknown = Object.keys(value).filter((key) => !allowed.has(key))\n if (unknown.length) throw new Error(`${label} 包含未知字段: ${unknown.join(', ')}`)\n}\n\nfunction rejectSecretLikeKeys(value: unknown, label: string, path: string[] = []): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => rejectSecretLikeKeys(item, label, [...path, String(index)]))\n return\n }\n if (!value || typeof value !== 'object') return\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n const next = [...path, key]\n if (SECRET_KEY.test(key)) {\n throw new Error(`${label} 禁止凭据字段: ${next.join('.')}`)\n }\n rejectSecretLikeKeys(item, label, next)\n }\n}\n\nfunction versionSatisfies(actualInput: string, rangeInput: string): boolean {\n const actual = parseVersion(actualInput)\n const range = rangeInput.trim()\n if (range === '*' || range === 'latest') return true\n const operator = range.startsWith('^') ? '^' : range.startsWith('~') ? '~' : '='\n const expected = parseVersion(operator === '=' ? range : range.slice(1))\n if (!actual || !expected) return false\n if (operator === '=') return actual.join('.') === expected.join('.')\n if (compareVersion(actual, expected) < 0) return false\n if (operator === '~') return actual[0] === expected[0] && actual[1] === expected[1]\n if (expected[0] > 0) return actual[0] === expected[0]\n if (expected[1] > 0) return actual[0] === 0 && actual[1] === expected[1]\n return actual[0] === 0 && actual[1] === 0 && actual[2] === expected[2]\n}\n\nfunction parseVersion(value: string): [number, number, number] | null {\n const match = value.trim().replace(/^v/, '').match(/^(\\d+)\\.(\\d+)\\.(\\d+)/)\n return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : null\n}\n\nfunction compareVersion(a: number[], b: number[]): number {\n for (let index = 0; index < 3; index += 1) {\n if (a[index] !== b[index]) return a[index] - b[index]\n }\n return 0\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":"development-workspace.js","sourceRoot":"","sources":["../../src/development-workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto'\nimport {\n existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync,\n} from 'node:fs'\nimport { basename, dirname, join, parse, relative, resolve } from 'node:path'\nimport { findExecutable } from './doctor.js'\nimport { digest, stableStringify } from './events.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { loadWorkspace, workspacePath, type WorkspaceSpec } from './workspace.js'\nimport { bundledSkillPath, GLOBAL_SKILL_NAME, isBasicSkillName } from './skill-manager.js'\n\nexport const PROJECT_FILE = 'dingtalk-agent.json'\nexport const CURRENT_WORKSPACE_FILE = '.dingtalk-agent/current-workspace'\nexport const WORKSPACE_STATE_ROOT = '.dingtalk-agent/state/workspaces'\nexport const LEGACY_WORKSPACE_NAME = 'legacy-prepared'\n/**\n * Env variables the multica CLI itself interprets as auth/target switches. `MULTICA_AGENT_ID`\n * flips it into agent-identity auth, so a developer token suddenly reads as \"Not\n * authenticated\" — a 100%-reproducible deadlock when a manifest envRef reuses the name.\n * `MULTICA_SERVER_URL` / `MULTICA_TOKEN` silently redirect endpoint or identity out from\n * under the named profile that dta's deploy contract pins (a stray pre-prod URL in the shell\n * must never retarget a production deploy). dta strips these from provider subprocess env;\n * doctor warns when a manifest ref collides with them.\n */\nexport const RESERVED_MULTICA_ENV = [\n 'MULTICA_AGENT_ID', 'MULTICA_SERVER_URL', 'MULTICA_TOKEN',\n] as const\n\nexport type DevelopmentStage = 'dev' | 'test' | 'staging' | 'prod'\nexport type DeclaredProviderKind = 'opencode' | 'multica'\nexport type DevelopmentProviderKind = DeclaredProviderKind | 'local-prepared'\nexport type DevelopmentWorkspaceStatus =\n | 'declared' | 'resolving' | 'planned' | 'applying' | 'verifying'\n | 'ready' | 'drifted' | 'failed' | 'retired'\n\nexport interface OpenCodeProvider {\n kind: 'opencode'\n model: string\n}\n\nexport interface MulticaProvider {\n kind: 'multica'\n profile: string\n workspaceIdFrom: string\n runtimeIdFrom: string\n agentIdFrom?: string\n}\n\nexport interface WorkspaceStorage {\n memory?: string\n knowledge?: string\n artifacts?: string\n}\n\nexport interface WorkspaceAuthority {\n dwsProfileFrom: string\n expectedUserIdFrom: string\n}\n\nexport interface DeclaredWorkspace {\n stage: DevelopmentStage\n provider: OpenCodeProvider | MulticaProvider\n storage: WorkspaceStorage\n authority?: WorkspaceAuthority\n}\n\n/**\n * A declared recurring drive (\"拍\") the digital employee needs — the internalized\n * cron, version-controlled instead of created imperatively on the platform.\n *\n * The clock is dumb: `cron` only opens a window and `wake` carries a category.\n * What the tick actually does and when it is \"done\" lives in the Agent's skills\n * (state-driven), never in this string. The governance fields below document the\n * five answers every well-defined rhythm must have (see the compose Skill's\n * drive-and-schedules reference); they are authoring metadata, not executed.\n *\n * Fields are provider-neutral: a provider adapter maps them (Multica →\n * autopilot cron + execution_mode; other platforms differ or fail closed).\n */\nexport interface DeclaredSchedule {\n name: string\n cron: string // standard 5-field, no seconds, no @daily\n timezone: string // IANA, e.g. Asia/Shanghai\n mode: 'ephemeral' | 'work-item' // ephemeral = run-only; work-item = one work item per fire\n wake?: string // wake-word / category the tick reads to scope itself\n purpose?: string\n completion?: string // ② how \"done\" is derived from data (level-triggered)\n unit?: string // ③ the incremental unit of work per fire\n evidence?: string // ④ what proves it ran (effect, not narration)\n supervision?: string // ⑤ who watches this loop converge\n}\n\n/**\n * A named, version-controlled completion predicate — the single source both the\n * declared schedule (`completion: \"predicate:<id>\"`) and the runtime path\n * (autopilot description marker, receipts) reference by id. Free-text completion\n * criteria can be satisfied by injecting one sentence (\"跑过了\"); a registry id\n * cannot, and two evaluators referencing the same id cannot silently fork\n * (the real incident: two hand-written predicates diverged for 30 hours).\n * Cross-language contract: the registry lives in this manifest JSON — a Python\n * engine references the same predicate by reading the same versioned file.\n */\nexport interface DeclaredPredicate {\n description: string\n source?: string\n}\n\nexport interface AgentProjectManifest {\n $schema: 'dingtalk-agent/project@1'\n name: string\n dtaVersion: string\n agentPlatform?: string\n multicaEndpoint?: string\n agent: {\n definition: string\n skillsRoot?: string\n displayName?: string\n skills: string[]\n }\n predicates?: Record<string, DeclaredPredicate>\n schedules?: DeclaredSchedule[]\n workspaces: Record<string, DeclaredWorkspace>\n}\n\nexport interface DevelopmentWorkspaceState {\n $schema: 'dingtalk-agent/workspace-state@1'\n workspace: string\n provider: DeclaredProviderKind\n status: DevelopmentWorkspaceStatus\n binding: Record<string, string>\n desiredHash: string\n observedHash: string\n lastPlanId: string\n lastReceiptId: string\n lastEvalId: string\n}\n\nexport interface DevelopmentWorkspaceView {\n name: string\n stage: DevelopmentStage\n provider: { kind: DevelopmentProviderKind } & Record<string, string>\n storage: WorkspaceStorage\n authority: WorkspaceAuthority | null\n sourceHash: string\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n current: boolean\n legacy: boolean\n statePath: string\n state: DevelopmentWorkspaceState | null\n drift: string[]\n configSources: string[]\n}\n\nexport type MulticaAgentIdSource =\n | { kind: 'declared'; ref: string }\n | { kind: 'state'; agentId: string }\n | { kind: 'none' }\n\n/**\n * 部署与 schedule 共用的 Agent ID 来源选择:声明的 `provider.agentIdFrom` 优先——\n * 即使 env 当前为空(「已声明未绑定」意为可创建,不落回 state);完全未声明时才回退\n * 首次 deploy 写进 state 的真实 ID。语义与 deploy 的 resolveMulticaTarget 一字不差;\n * schedule 曾自己手写这段并漏掉 state 回退,导致黄金路径(scaffold 故意省略\n * agentIdFrom)下 schedule 整体不可用。来源选择只此一份,防两处漂移。\n */\nexport function multicaAgentIdSource(workspace: DevelopmentWorkspaceView): MulticaAgentIdSource {\n if (workspace.provider.agentIdFrom) {\n return { kind: 'declared', ref: workspace.provider.agentIdFrom }\n }\n const stateAgentId = workspace.state?.binding.agentId || ''\n if (stateAgentId) return { kind: 'state', agentId: stateAgentId }\n return { kind: 'none' }\n}\n\nexport interface AgentProjectInfo {\n $schema: 'dingtalk-agent/info@1'\n root: string\n source: 'manifest' | 'legacy'\n manifest: string\n manifestHash: string\n project: {\n name: string\n displayName: string\n dtaVersion: string\n compatibleWithCli: boolean\n definition: string\n skillsRoot: string\n skills: string[]\n // undefined = 未声明注册表(legacy 项目);{} = 已声明空注册表(引用模式,见 analyzeSchedules)\n predicates?: Record<string, DeclaredPredicate>\n schedules: DeclaredSchedule[]\n }\n currentWorkspace: string\n workspaces: DevelopmentWorkspaceView[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface DevelopmentWorkspaceCheck {\n id: string\n surface: 'project' | 'provider' | 'definition' | 'skills' | 'storage' | 'authority' | 'state'\n level: 'pass' | 'warn' | 'fail'\n blocking: boolean\n summary: string\n evidence: Record<string, unknown>\n fix?: string\n}\n\nexport interface DevelopmentWorkspaceDoctorReport {\n $schema: 'dingtalk-agent/workspace-doctor@1'\n ready: boolean\n workspace: string\n provider: DevelopmentProviderKind\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n checks: DevelopmentWorkspaceCheck[]\n missing: string[]\n configSources: string[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\ninterface LoadedProject {\n root: string\n source: 'manifest' | 'legacy'\n manifestPath: string\n manifestHash: string\n manifest: AgentProjectManifest\n legacy: WorkspaceSpec | null\n}\n\nconst PROJECT_KEYS = new Set(['$schema', 'name', 'dtaVersion', 'agent', 'workspaces'])\nconst PROJECT_OPTIONAL_KEYS = new Set([\n ...PROJECT_KEYS, 'agentPlatform', 'multicaEndpoint', 'predicates', 'schedules',\n])\nconst PREDICATE_KEYS = new Set(['description', 'source'])\nexport const PREDICATE_ID = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/\nconst AGENT_KEYS = new Set(['definition', 'skillsRoot', 'displayName', 'skills'])\nconst AGENT_REQUIRED_KEYS = new Set(['definition', 'skills'])\nconst SCHEDULE_KEYS = new Set(['name', 'cron', 'timezone', 'mode', 'wake', 'purpose',\n 'completion', 'unit', 'evidence', 'supervision'])\nconst SCHEDULE_REQUIRED_KEYS = new Set(['name', 'cron', 'timezone', 'mode'])\nconst SCHEDULE_MODES = new Set(['ephemeral', 'work-item'])\nconst WORKSPACE_KEYS = new Set(['stage', 'provider', 'storage', 'authority'])\nconst OPENCODE_KEYS = new Set(['kind', 'model'])\nconst MULTICA_KEYS = new Set([\n 'kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom', 'agentIdFrom',\n])\nconst STORAGE_KEYS = new Set(['memory', 'knowledge', 'artifacts'])\nconst AUTHORITY_KEYS = new Set(['dwsProfileFrom', 'expectedUserIdFrom'])\n\n/**\n * Per-provider contract. Requirements that used to be hardcoded as\n * `provider.kind === 'multica'` checks live here so a new managed platform\n * (e.g. deap) declares its own shape instead of being special-cased inline.\n */\nexport interface ProviderContract {\n kind: string\n /** Human-readable authority requirement; empty when the provider needs no DWS identity. */\n requiresAuthority: boolean\n}\nexport const PROVIDER_CONTRACTS: Record<string, ProviderContract> = {\n opencode: { kind: 'opencode', requiresAuthority: false },\n multica: { kind: 'multica', requiresAuthority: true },\n}\nconst STATE_KEYS = new Set([\n '$schema', 'workspace', 'provider', 'status', 'binding', 'desiredHash', 'observedHash',\n 'lastPlanId', 'lastReceiptId', 'lastEvalId',\n])\nconst STATE_STATUSES = new Set<DevelopmentWorkspaceStatus>([\n 'declared', 'resolving', 'planned', 'applying', 'verifying',\n 'ready', 'drifted', 'failed', 'retired',\n])\nconst SECRET_KEY = /(?:secret|token|cookie|password|credentials?)$/i\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst ENV_REF = /^env:[A-Z_][A-Z0-9_]*$/\n\nexport function findAgentProjectRoot(start = process.cwd()): string | null {\n let directory = resolve(start)\n if (existsSync(directory) && !statSync(directory).isDirectory()) directory = dirname(directory)\n while (true) {\n if (existsSync(join(directory, PROJECT_FILE)) || existsSync(workspacePath(directory))) {\n return realpathSync(directory)\n }\n const parent = dirname(directory)\n if (parent === directory || directory === parse(directory).root) return null\n directory = parent\n }\n}\n\nexport function inspectAgentProject(\n start = process.cwd(), cliVersion = '',\n): AgentProjectInfo {\n const loaded = loadAgentProject(start)\n const currentWorkspace = readCurrentWorkspace(loaded.root)\n const declared = Object.entries(loaded.manifest.workspaces)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, workspace]) => declaredView(loaded, name, workspace, currentWorkspace))\n if (loaded.legacy && !(LEGACY_WORKSPACE_NAME in loaded.manifest.workspaces)) {\n declared.push(legacyView(loaded, loaded.legacy, currentWorkspace))\n }\n if (currentWorkspace && !declared.some((item) => item.name === currentWorkspace)) {\n throw new Error(`current-workspace 指向未知 Workspace: ${currentWorkspace}`)\n }\n return {\n $schema: 'dingtalk-agent/info@1',\n root: loaded.root,\n source: loaded.source,\n manifest: loaded.manifestPath ? relative(loaded.root, loaded.manifestPath) : '',\n manifestHash: loaded.manifestHash,\n project: {\n name: loaded.manifest.name,\n displayName: loaded.manifest.agent.displayName || loaded.manifest.name,\n dtaVersion: loaded.manifest.dtaVersion,\n compatibleWithCli: !cliVersion || versionSatisfies(cliVersion, loaded.manifest.dtaVersion),\n definition: loaded.manifest.agent.definition,\n skillsRoot: loaded.manifest.agent.skillsRoot || '',\n skills: [...loaded.manifest.agent.skills],\n ...(loaded.manifest.predicates ? { predicates: { ...loaded.manifest.predicates } } : {}),\n schedules: loaded.manifest.schedules ? [...loaded.manifest.schedules] : [],\n },\n currentWorkspace,\n workspaces: declared,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function showDevelopmentWorkspace(\n start: string, name: string, cliVersion = '',\n): DevelopmentWorkspaceView {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n return workspace\n}\n\nexport function doctorDevelopmentWorkspace(\n start: string,\n name: string,\n options: { cliVersion?: string; env?: NodeJS.ProcessEnv } = {},\n): DevelopmentWorkspaceDoctorReport {\n const cliVersion = options.cliVersion || ''\n const env = options.env || process.env\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n const checks: DevelopmentWorkspaceCheck[] = []\n const add = (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence: Record<string, unknown> = {}, fix?: string,\n ) => checks.push({ id, surface, level, blocking, summary, evidence, ...(fix ? { fix } : {}) })\n\n add('project.schema', 'project', 'pass', true, 'Project manifest/schema 可解析', {\n source: info.source, manifestHash: info.manifestHash,\n })\n add('project.version', 'project', info.project.compatibleWithCli ? 'pass' : 'fail', true,\n info.project.compatibleWithCli ? 'Project 声明兼容当前 dta 版本' : 'Project dtaVersion 与当前 CLI 不兼容',\n { required: info.project.dtaVersion, actual: cliVersion || 'unknown' },\n '升级 CLI,或在审阅兼容性后更新 dingtalk-agent.json#dtaVersion')\n\n const definition = inspectLocalFile(info.root, info.project.definition)\n add('definition.file', 'definition', definition.valid ? 'pass' : 'fail', true,\n definition.valid ? 'Agent Definition 位于 Project 内且可读' : 'Agent Definition 缺失、越界或不是文件',\n definition, `修复 ${info.project.definition}`)\n\n for (const [slot, uri] of Object.entries(workspace.storage)) {\n const local = inspectStorageRoute(info.root, uri)\n const blocking = !uri.startsWith('dingtalk-doc:') && !(workspace.legacy && slot === 'artifacts')\n add(`storage.${slot}`, 'storage', local.valid ? 'pass' : blocking ? 'fail' : 'warn', blocking,\n local.valid ? `${slot} Storage route 可解析`\n : uri.startsWith('dingtalk-doc:') ? `${slot} 是远端语义路由,W1 不执行 DWS 回读`\n : `${slot} 本地 Storage route 缺失或越界`,\n { route: uri, ...local }, local.fix)\n }\n\n if (workspace.state) {\n add('state.provider', 'state', workspace.drift.includes('provider') ? 'fail' : 'pass', true,\n workspace.drift.includes('provider') ? 'State Provider 与声明不一致' : 'State Provider 与声明一致',\n { declared: workspace.provider.kind, observed: workspace.state.provider })\n add('state.desired-hash', 'state', workspace.drift.includes('desiredHash') ? 'fail' : 'pass', true,\n workspace.drift.includes('desiredHash') ? 'State desiredHash 已漂移' : 'State desiredHash 与声明一致',\n { desiredHash: workspace.desiredHash, stateDesiredHash: workspace.state.desiredHash })\n add('state.status', 'state', workspace.state.status === 'ready' ? 'pass' : 'fail', true,\n workspace.state.status === 'ready' ? 'Provider state 已回读为 ready'\n : `Provider state 尚未 ready: ${workspace.state.status}`,\n { status: workspace.state.status })\n const observedHashValid = /^[a-f0-9]{64}$/.test(workspace.state.observedHash)\n add('state.observed-hash', 'state', observedHashValid ? 'pass' : 'fail', true,\n observedHashValid ? 'Provider observedHash 是稳定 sha256' : 'ready state 缺少有效 observedHash',\n { configured: Boolean(workspace.state.observedHash) })\n } else {\n const required = !workspace.legacy\n add('state.present', 'state', required ? 'fail' : 'warn', required,\n required ? '尚无 Provider 回读 state;Workspace 只完成声明,尚未就绪'\n : 'Legacy adapter 不要求新的 Provider state', {\n expectedPath: workspace.statePath,\n })\n }\n\n if (workspace.provider.kind === 'opencode') {\n inspectOpenCodeWorkspace(info, workspace, env, add)\n } else if (workspace.provider.kind === 'multica') {\n inspectDeclaredMulticaWorkspace(workspace, env, add)\n } else {\n add('provider.legacy', 'provider', 'pass', true,\n 'Legacy Prepared Workspace 已通过 workspace@1 parser 只读加载', {\n provider: workspace.provider.kind, state: 'adapter-only',\n })\n }\n\n const missing = checks.filter((check) => check.blocking && check.level !== 'pass')\n .map((check) => check.id)\n return {\n $schema: 'dingtalk-agent/workspace-doctor@1',\n ready: missing.length === 0,\n workspace: workspace.name,\n provider: workspace.provider.kind,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n status: workspace.status,\n checks,\n missing,\n configSources: workspace.configSources,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction loadAgentProject(start: string): LoadedProject {\n const root = findAgentProjectRoot(start)\n if (!root) {\n throw new Error(`找不到 ${PROJECT_FILE} 或 ${workspacePath('<project>')};请在 Agent Project 内运行。` +\n '从零开始:先准备 Role Skill,再用 dta agent enhance 生成完整 Agent Project(含 dingtalk-agent.json)')\n }\n const manifestPath = join(root, PROJECT_FILE)\n const legacyPath = workspacePath(root)\n if (existsSync(legacyPath) && (\n lstatSync(legacyPath).isSymbolicLink() || !isInside(root, realpathSync(legacyPath))\n )) {\n throw new Error('Legacy workspace manifest 不能是越界符号链接')\n }\n const legacy = existsSync(legacyPath) ? loadWorkspace(root) : null\n if (!existsSync(manifestPath)) {\n if (!legacy) throw new Error(`找不到 ${PROJECT_FILE}`)\n const manifest = syntheticLegacyProject(root, legacy)\n return {\n root, source: 'legacy', manifestPath: '', manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n }\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n let raw: unknown\n let source = ''\n try {\n source = readFileSync(manifestPath, 'utf8')\n raw = JSON.parse(source)\n } catch (error) {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON: ${error.message}`)\n }\n rejectSecretLikeKeys(raw, PROJECT_FILE)\n const manifest = validateProjectManifest(raw, root)\n return {\n root, source: 'manifest', manifestPath: realpathSync(manifestPath), manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n}\n\nfunction validateCron(expr: string, label: string): string {\n const value = requiredString(expr, label)\n if (value.startsWith('@')) {\n throw new Error(`${label} 不支持 @macro(如 @daily);用标准 5 段 cron`)\n }\n const fields = value.trim().split(/\\s+/)\n if (fields.length !== 5) {\n throw new Error(`${label} 必须是标准 5 段 cron(分 时 日 月 周);得到 ${fields.length} 段: \"${value}\"`)\n }\n return value\n}\n\n// 返回 undefined = manifest 根本没写 predicates;返回 {}(含空对象)= 已声明注册表。\n// 这两个状态必须可区分:显式空注册表意味着「本项目已进入引用模式」,自由文本\n// completion 要阻断(issue #39 的 fail-open 正是把空注册表折成了未声明)。\nfunction validatePredicates(value: unknown): Record<string, DeclaredPredicate> | undefined {\n if (value === undefined) return undefined\n const input = objectValue(value, 'predicates')\n const out: Record<string, DeclaredPredicate> = {}\n for (const [id, raw] of Object.entries(input)) {\n if (!PREDICATE_ID.test(id)) {\n throw new Error(`predicates 的 id 必须是 kebab-case([a-z0-9-],首尾字母数字): \"${id}\"`)\n }\n const entry = objectValue(raw, `predicates.${id}`)\n assertAllowedKeys(entry, PREDICATE_KEYS, `predicates.${id}`)\n const description = requiredString(entry.description, `predicates.${id}.description`)\n const source = entry.source === undefined\n ? undefined : requiredString(entry.source, `predicates.${id}.source`)\n out[id] = { description, ...(source === undefined ? {} : { source }) }\n }\n return out\n}\n\nfunction validateSchedules(value: unknown): DeclaredSchedule[] {\n if (value === undefined) return []\n if (!Array.isArray(value)) throw new Error('schedules 必须是数组')\n const seen = new Set<string>()\n return value.map((raw, index) => {\n const input = objectValue(raw, `schedules[${index}]`)\n assertAllowedKeys(input, SCHEDULE_KEYS, `schedules[${index}]`)\n const missing = [...SCHEDULE_REQUIRED_KEYS].filter((key) => !(key in input))\n if (missing.length) throw new Error(`schedules[${index}] 缺少字段: ${missing.join(', ')}`)\n const name = agentDisplayName(input.name, `schedules[${index}].name`)\n if (seen.has(name)) throw new Error(`schedules 里的 name 不能重复: ${name}`)\n seen.add(name)\n const cron = validateCron(input.cron as string, `schedules[${index}].cron`)\n const timezone = requiredString(input.timezone, `schedules[${index}].timezone`)\n const mode = requiredString(input.mode, `schedules[${index}].mode`)\n if (!SCHEDULE_MODES.has(mode)) {\n throw new Error(`schedules[${index}].mode 只能是 ${[...SCHEDULE_MODES].join(' | ')};得到 \"${mode}\"`)\n }\n const opt = (key: string): string | undefined =>\n input[key] === undefined ? undefined : requiredString(input[key], `schedules[${index}].${key}`)\n return {\n name, cron, timezone, mode: mode as DeclaredSchedule['mode'],\n ...(opt('wake') === undefined ? {} : { wake: opt('wake') }),\n ...(opt('purpose') === undefined ? {} : { purpose: opt('purpose') }),\n ...(opt('completion') === undefined ? {} : { completion: opt('completion') }),\n ...(opt('unit') === undefined ? {} : { unit: opt('unit') }),\n ...(opt('evidence') === undefined ? {} : { evidence: opt('evidence') }),\n ...(opt('supervision') === undefined ? {} : { supervision: opt('supervision') }),\n }\n })\n}\n\nfunction validateProjectManifest(value: unknown, root: string): AgentProjectManifest {\n const input = objectValue(value, 'Project manifest')\n assertAllowedKeys(input, PROJECT_OPTIONAL_KEYS, 'Project manifest')\n const missing = [...PROJECT_KEYS].filter((key) => !(key in input))\n if (missing.length) throw new Error(`Project manifest 缺少字段: ${missing.join(', ')}`)\n if (input.$schema !== 'dingtalk-agent/project@1') {\n throw new Error('Project manifest 缺少 dingtalk-agent/project@1 schema')\n }\n const name = stableName(input.name, 'Project name')\n const dtaVersion = requiredString(input.dtaVersion, 'dtaVersion')\n const agentPlatform = input.agentPlatform === undefined\n ? undefined : requiredString(input.agentPlatform, 'agentPlatform')\n const multicaEndpoint = input.multicaEndpoint === undefined\n ? undefined : requiredString(input.multicaEndpoint, 'multicaEndpoint')\n const agentInput = objectValue(input.agent, 'Project agent')\n assertAllowedKeys(agentInput, AGENT_KEYS, 'Project agent')\n const missingAgent = [...AGENT_REQUIRED_KEYS].filter((key) => !(key in agentInput))\n if (missingAgent.length) throw new Error(`Project agent 缺少字段: ${missingAgent.join(', ')}`)\n const definition = safeRelativePath(root, requiredString(agentInput.definition, 'agent.definition'),\n 'agent.definition', false)\n const skillsRoot = agentInput.skillsRoot === undefined\n ? undefined\n : safeRelativePath(root, requiredString(agentInput.skillsRoot, 'agent.skillsRoot'),\n 'agent.skillsRoot', false)\n const displayName = agentInput.displayName === undefined\n ? undefined : agentDisplayName(agentInput.displayName, 'agent.displayName')\n if (!Array.isArray(agentInput.skills) || agentInput.skills.length === 0) {\n throw new Error('agent.skills 必须是非空 string[]')\n }\n const skills = agentInput.skills.map((item, index) => stableName(item, `agent.skills[${index}]`))\n if (new Set(skills).size !== skills.length) throw new Error('agent.skills 不能包含重复项')\n // 改名过渡期:旧 Basic 名仍算「显式包含 Basic」,但**不做归一化**——用户仓库里\n // check-in 的目录还叫旧名,改写声明会让 projectSkillRef 解析到不存在的路径。\n if (!skills.some(isBasicSkillName)) {\n throw new Error(`agent.skills 必须显式包含 ${GLOBAL_SKILL_NAME}`)\n }\n const workspaceInput = objectValue(input.workspaces, 'Project workspaces')\n const workspaces: Record<string, DeclaredWorkspace> = {}\n for (const [workspaceName, rawWorkspace] of Object.entries(workspaceInput)) {\n stableName(workspaceName, `Workspace name ${workspaceName}`)\n if (workspaceName === LEGACY_WORKSPACE_NAME) {\n throw new Error(`${LEGACY_WORKSPACE_NAME} 是 legacy adapter 保留名称`)\n }\n workspaces[workspaceName] = validateDeclaredWorkspace(rawWorkspace, root, workspaceName)\n }\n const schedules = validateSchedules(input.schedules)\n const predicates = validatePredicates(input.predicates)\n return {\n $schema: 'dingtalk-agent/project@1', name, dtaVersion,\n ...(agentPlatform === undefined ? {} : { agentPlatform }),\n ...(multicaEndpoint === undefined ? {} : { multicaEndpoint }),\n agent: {\n definition,\n ...(skillsRoot === undefined ? {} : { skillsRoot }),\n ...(displayName === undefined ? {} : { displayName }),\n skills,\n },\n ...(predicates !== undefined ? { predicates } : {}),\n ...(schedules.length ? { schedules } : {}),\n workspaces,\n }\n}\n\n/**\n * Resolve the versioned source of a declared Skill.\n *\n * New projects declare one package root (normally agent/skills). Manifests\n * created before skillsRoot keep their historical split layout so an existing\n * code repository can migrate deliberately instead of being rewritten merely\n * because dta was upgraded.\n */\nexport function projectSkillRef(\n project: AgentProjectInfo['project'], name: string,\n): string {\n if (project.skillsRoot) return `${project.skillsRoot}/${name}`\n return isBasicSkillName(name)\n ? `.agents/skills/${name}`\n : `skills/${name}`\n}\n\nfunction manifestSkillRef(manifest: AgentProjectManifest, name: string): string {\n if (manifest.agent.skillsRoot) return `${manifest.agent.skillsRoot}/${name}`\n return isBasicSkillName(name)\n ? `.agents/skills/${name}`\n : `skills/${name}`\n}\n\nfunction validateDeclaredWorkspace(value: unknown, root: string, name: string): DeclaredWorkspace {\n const input = objectValue(value, `Workspace ${name}`)\n assertAllowedKeys(input, WORKSPACE_KEYS, `Workspace ${name}`)\n for (const required of ['stage', 'provider']) {\n if (!(required in input)) throw new Error(`Workspace ${name} 缺少字段: ${required}`)\n }\n const stage = requiredString(input.stage, `Workspace ${name}.stage`) as DevelopmentStage\n if (!['dev', 'test', 'staging', 'prod'].includes(stage)) {\n throw new Error(`Workspace ${name}.stage 非法: ${stage}`)\n }\n const providerInput = objectValue(input.provider, `Workspace ${name}.provider`)\n const kind = requiredString(providerInput.kind, `Workspace ${name}.provider.kind`)\n let provider: OpenCodeProvider | MulticaProvider\n if (kind === 'opencode') {\n assertExactKeys(providerInput, OPENCODE_KEYS, `Workspace ${name}.provider`)\n provider = { kind, model: requiredString(providerInput.model, `Workspace ${name}.provider.model`) }\n } else if (kind === 'multica') {\n assertAllowedKeys(providerInput, MULTICA_KEYS, `Workspace ${name}.provider`)\n for (const required of ['kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom']) {\n if (!(required in providerInput)) {\n throw new Error(`Workspace ${name}.provider 缺少字段: ${required}`)\n }\n }\n provider = {\n kind,\n profile: requiredString(providerInput.profile, `Workspace ${name}.provider.profile`),\n workspaceIdFrom: envReference(providerInput.workspaceIdFrom, `${name}.workspaceIdFrom`),\n runtimeIdFrom: envReference(providerInput.runtimeIdFrom, `${name}.runtimeIdFrom`),\n ...(providerInput.agentIdFrom === undefined ? {} : {\n agentIdFrom: envReference(providerInput.agentIdFrom, `${name}.agentIdFrom`),\n }),\n }\n } else {\n throw new Error(`Workspace ${name}.provider.kind 只支持 opencode / multica`)\n }\n const storageInput = input.storage === undefined\n ? {} : objectValue(input.storage, `Workspace ${name}.storage`)\n assertAllowedKeys(storageInput, STORAGE_KEYS, `Workspace ${name}.storage`)\n if (provider.kind === 'opencode') {\n for (const required of ['memory', 'knowledge']) {\n if (!(required in storageInput)) {\n throw new Error(`Workspace ${name}.storage 缺少字段: ${required}`)\n }\n }\n }\n const memory = storageInput.memory === undefined ? undefined\n : storageRoute(storageInput.memory, ['local-md', 'dingtalk-doc'], `${name}.memory`, root)\n const knowledge = storageInput.knowledge === undefined ? undefined\n : storageRoute(storageInput.knowledge, ['local-md', 'dingtalk-doc'], `${name}.knowledge`, root)\n const artifacts = storageInput.artifacts === undefined ? undefined\n : storageRoute(storageInput.artifacts, ['local-dir'], `${name}.artifacts`, root)\n let authority: WorkspaceAuthority | undefined\n if (input.authority !== undefined) {\n const authorityInput = objectValue(input.authority, `Workspace ${name}.authority`)\n assertExactKeys(authorityInput, AUTHORITY_KEYS, `Workspace ${name}.authority`)\n authority = {\n dwsProfileFrom: envReference(authorityInput.dwsProfileFrom, `${name}.dwsProfileFrom`),\n expectedUserIdFrom: envReference(\n authorityInput.expectedUserIdFrom, `${name}.expectedUserIdFrom`,\n ),\n }\n }\n if (PROVIDER_CONTRACTS[provider.kind]?.requiresAuthority && !authority) {\n throw new Error(\n `Workspace ${name} 的 ${provider.kind} Provider 必须声明 authority.dwsProfileFrom 与 ` +\n `authority.expectedUserIdFrom(都用 env: 引用,不接受字面量)。\\n` +\n `在该 Workspace 下补上,例如:\\n` +\n ` \"authority\": {\\n` +\n ` \"dwsProfileFrom\": \"env:DTA_DWS_PROFILE\",\\n` +\n ` \"expectedUserIdFrom\": \"env:DTA_EXPECTED_USER_ID\"\\n` +\n ` }\\n` +\n `或直接用 dta workspace create ${name} --provider ${provider.kind} 生成完整条目。`,\n )\n }\n return { stage, provider, storage: {\n ...(memory ? { memory } : {}),\n ...(knowledge ? { knowledge } : {}),\n ...(artifacts ? { artifacts } : {}),\n },\n ...(authority ? { authority } : {}) }\n}\n\nfunction declaredView(\n loaded: LoadedProject,\n name: string,\n workspace: DeclaredWorkspace,\n currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const artifacts = workspace.storage.artifacts || (workspace.provider.kind === 'opencode'\n ? `local-dir:.dingtalk-agent/artifacts/${name}` : undefined)\n const storage: WorkspaceStorage = {\n ...workspace.storage,\n ...(artifacts ? { artifacts } : {}),\n }\n const sourceHash = projectSourceHash(loaded.root, loaded.manifest)\n const desiredHash = digest(stableStringify({\n project: loaded.manifest.name,\n agent: loaded.manifest.agent,\n workspace: name,\n stage: workspace.stage,\n provider: workspace.provider,\n storage,\n authority: workspace.authority || null,\n sourceHash,\n }))\n const statePath = join(loaded.root, WORKSPACE_STATE_ROOT, `${name}.json`)\n const state = existsSync(statePath)\n ? loadDevelopmentWorkspaceState(statePath, name, loaded.root) : null\n const drift: string[] = []\n if (state && state.provider !== workspace.provider.kind) drift.push('provider')\n if (state && state.desiredHash !== desiredHash) drift.push('desiredHash')\n const status: DevelopmentWorkspaceStatus = drift.length ? 'drifted' : state?.status || 'declared'\n return {\n name,\n stage: workspace.stage,\n provider: { ...workspace.provider },\n storage,\n authority: workspace.authority || null,\n sourceHash,\n desiredHash,\n observedHash: state?.observedHash || '',\n status,\n current: currentWorkspace === name,\n legacy: false,\n statePath: relative(loaded.root, statePath),\n state,\n drift,\n configSources: collectConfigSources(workspace),\n }\n}\n\nfunction legacyView(\n loaded: LoadedProject, spec: WorkspaceSpec, currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const storage: WorkspaceStorage = {\n memory: spec.mounts.memory,\n knowledge: spec.mounts.knowledge,\n artifacts: 'local-dir:.dingtalk-agent/artifacts/legacy-prepared',\n }\n const desiredHash = digest(stableStringify({ provider: 'local-prepared', workspace: spec }))\n return {\n name: LEGACY_WORKSPACE_NAME,\n stage: 'dev',\n provider: { kind: 'local-prepared', contextId: spec.contextId, fieldId: spec.fieldId },\n storage,\n authority: spec.dws.profile || spec.dws.expectedUserId ? {\n dwsProfileFrom: 'legacy:workspace.dws.profile',\n expectedUserIdFrom: 'legacy:workspace.dws.expectedUserId',\n } : null,\n sourceHash: digest(stableStringify({ definition: spec.mounts.profile, skills: spec.skills })),\n desiredHash,\n observedHash: desiredHash,\n status: 'ready',\n current: currentWorkspace === LEGACY_WORKSPACE_NAME,\n legacy: true,\n statePath: relative(loaded.root, workspacePath(loaded.root)),\n state: null,\n drift: [],\n configSources: ['legacy:.dingtalk-agent/workspace.json'],\n }\n}\n\nfunction projectSourceHash(root: string, manifest: AgentProjectManifest): string {\n const sources: Record<string, string> = {\n definition: localContentHash(root, manifest.agent.definition),\n opencode: localContentHash(root, 'opencode.json'),\n }\n for (const name of manifest.agent.skills) {\n const ref = manifestSkillRef(manifest, name)\n sources[`skill:${name}`] = localContentHash(root, ref)\n }\n return digest(stableStringify(sources))\n}\n\nfunction localContentHash(root: string, ref: string): string {\n const candidate = resolve(root, ref)\n if (!isInside(root, candidate) || !existsSync(candidate)) return ''\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`Project source 真实路径越界: ${ref}`)\n const stat = lstatSync(actual)\n if (stat.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}`)\n if (stat.isFile()) return sha256(readFileSync(actual))\n if (!stat.isDirectory()) throw new Error(`Project source 类型非法: ${ref}`)\n const entries: Array<{ path: string; hash: string }> = []\n const visit = (directory: string, prefix = ''): void => {\n for (const entry of readdirSorted(directory)) {\n const path = join(directory, entry.name)\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}/${relativePath}`)\n if (entry.isDirectory()) visit(path, relativePath)\n else if (entry.isFile()) entries.push({ path: relativePath, hash: sha256(readFileSync(path)) })\n else throw new Error(`Project source 类型非法: ${ref}/${relativePath}`)\n }\n }\n visit(actual)\n return digest(stableStringify(entries))\n}\n\nfunction readdirSorted(directory: string): import('node:fs').Dirent[] {\n return readdirSync(directory, { withFileTypes: true })\n .sort((a, b) => a.name.localeCompare(b.name))\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction loadDevelopmentWorkspaceState(\n path: string, workspace: string, root: string,\n): DevelopmentWorkspaceState {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`Workspace state 不能是符号链接: ${path}`)\n if (!isInside(root, realpathSync(path))) throw new Error(`Workspace state 真实路径越出 Project: ${path}`)\n let raw: unknown\n try { raw = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`Workspace state 不是合法 JSON: ${error.message}`) }\n rejectSecretLikeKeys(raw, 'Workspace state')\n const input = objectValue(raw, 'Workspace state')\n assertExactKeys(input, STATE_KEYS, 'Workspace state')\n if (input.$schema !== 'dingtalk-agent/workspace-state@1') {\n throw new Error('Workspace state 缺少 dingtalk-agent/workspace-state@1 schema')\n }\n if (input.workspace !== workspace) {\n throw new Error(`Workspace state 名称不一致: ${String(input.workspace)} != ${workspace}`)\n }\n const provider = requiredString(input.provider, 'Workspace state provider') as DeclaredProviderKind\n if (!['opencode', 'multica'].includes(provider)) throw new Error(`Workspace state provider 非法: ${provider}`)\n const status = requiredString(input.status, 'Workspace state status') as DevelopmentWorkspaceStatus\n if (!STATE_STATUSES.has(status)) throw new Error(`Workspace state status 非法: ${status}`)\n const bindingInput = objectValue(input.binding, 'Workspace state binding')\n const binding = Object.fromEntries(Object.entries(bindingInput).map(([key, item]) => [\n key, optionalString(item, `Workspace state binding.${key}`),\n ]))\n return {\n $schema: 'dingtalk-agent/workspace-state@1', workspace, provider, status, binding,\n desiredHash: requiredString(input.desiredHash, 'Workspace state desiredHash'),\n observedHash: optionalString(input.observedHash, 'Workspace state observedHash'),\n lastPlanId: optionalString(input.lastPlanId, 'Workspace state lastPlanId'),\n lastReceiptId: optionalString(input.lastReceiptId, 'Workspace state lastReceiptId'),\n lastEvalId: optionalString(input.lastEvalId, 'Workspace state lastEvalId'),\n }\n}\n\nfunction inspectOpenCodeWorkspace(\n info: AgentProjectInfo,\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('opencode', env)\n add('provider.opencode-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'OpenCode CLI 可执行' : 'PATH 找不到 opencode',\n { executable: executable || '' }, '安装 OpenCode,并确认 opencode --version 可执行')\n add('provider.opencode-model', 'provider', workspace.provider.model ? 'pass' : 'fail', true,\n workspace.provider.model ? 'OpenCode model 已显式声明' : 'OpenCode model 缺失',\n { model: workspace.provider.model || '' })\n\n // 路径与 permission 键都跟随**声明的**名字:改名过渡期里 manifest 可能仍写旧名,\n // 而磁盘上的目录、opencode.json 的 permission 键也都还是旧名,三者必须一致。\n const declaredBasic = info.project.skills.find(isBasicSkillName) || GLOBAL_SKILL_NAME\n const basicPath = `${projectSkillRef(info.project, declaredBasic)}/SKILL.md`\n const basic = inspectLocalFile(info.root, basicPath)\n const canonicalPackageRoot = resolvePackageRoot(import.meta.url)\n const canonicalBasic = inspectLocalFile(\n canonicalPackageRoot,\n relative(canonicalPackageRoot,\n join(bundledSkillPath(canonicalPackageRoot, GLOBAL_SKILL_NAME), 'SKILL.md')),\n )\n const basicMatched = basic.valid && canonicalBasic.valid && basic.hash === canonicalBasic.hash\n add('skills.basic-exposure', 'skills', basicMatched ? 'pass' : 'fail', true,\n basicMatched ? 'Agent package 中的 Basic Skill 与当前 canonical source 一致'\n : 'Agent package 的 Basic Skill 缺失、越界或 hash 漂移',\n { source: basic, canonicalHash: canonicalBasic.hash || '' }, `重新装配 ${basicPath}`)\n const configPath = join(info.root, 'opencode.json')\n const configFile = inspectLocalFile(info.root, 'opencode.json')\n let configError = ''\n let instructionCount = 0\n let permission = ''\n let permissions: Record<string, string> = {}\n if (configFile.valid) {\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf8')) as Record<string, any>\n const instructions = Array.isArray(config.instructions) ? config.instructions : []\n instructionCount = instructions.filter((item) => item === basicPath).length\n const skillPermissions = config.permission?.skill\n permissions = skillPermissions && typeof skillPermissions === 'object' &&\n !Array.isArray(skillPermissions)\n ? Object.fromEntries(Object.entries(skillPermissions).map(([key, value]) => [key, String(value)]))\n : {}\n permission = permissions[declaredBasic] || ''\n } catch (error) { configError = error.message }\n } else configError = configFile.exists ? 'outside-or-not-file' : 'missing'\n const configValid = !configError && instructionCount === 1 && permission === 'allow'\n add('skills.basic-instruction', 'skills', configValid ? 'pass' : 'fail', true,\n configValid ? 'OpenCode config 强制加载且允许 Basic Skill' : 'OpenCode Basic instruction/permission 合同不完整',\n { path: 'opencode.json', error: configError, instructionCount, permission },\n '运行 compose/bind 流程生成唯一 Basic instruction 与 allow permission')\n\n for (const name of info.project.skills.filter((item) => !isBasicSkillName(item))) {\n const source = inspectLocalFile(info.root, `${projectSkillRef(info.project, name)}/SKILL.md`)\n const matched = source.valid && permissions[name] === 'allow'\n add(`skills.role.${name}`, 'skills', matched ? 'pass' : 'fail', true,\n matched ? `Role Skill ${name} 单一发布源与 permission 一致`\n : `Role Skill ${name} 发布源缺失或 permission 不一致`,\n { source, permission: permissions[name] || '' }, `运行 compose/bind 流程装配 ${name}`)\n }\n const managedRef = workspace.state?.binding.managedPath || ''\n if (managedRef) {\n const managedHash = localContentHash(info.root, managedRef)\n const matched = Boolean(managedHash && managedHash === workspace.state?.observedHash &&\n workspace.state?.binding.sourceHash === workspace.sourceHash &&\n workspace.state?.binding.model === workspace.provider.model)\n add('provider.managed-integrity', 'provider', matched ? 'pass' : 'fail', true,\n matched ? 'Managed Workspace、source/model 与 observed hash 一致'\n : 'Managed Workspace 缺失或 source/model/observed hash 漂移', {\n path: managedRef,\n actualHash: managedHash,\n expectedHash: workspace.state?.observedHash || '',\n sourceMatched: workspace.state?.binding.sourceHash === workspace.sourceHash,\n modelMatched: workspace.state?.binding.model === workspace.provider.model,\n }, `重新执行 dta workspace create ${workspace.name} --yes`)\n }\n const loadVerified = workspace.state?.status === 'ready' && Boolean(\n workspace.state.lastReceiptId || workspace.state.lastEvalId)\n add('provider.load-proof', 'provider', loadVerified ? 'pass' : 'warn', false,\n loadVerified\n ? 'Provider state 已绑定通过的随机 load/eval 证据;详情见 lastReceiptId/lastEvalId'\n : '尚未取得随机 load probe;先执行 workspace run/eval', {\n executed: Boolean(workspace.state?.lastReceiptId || workspace.state?.lastEvalId),\n lastReceiptId: workspace.state?.lastReceiptId || '',\n lastEvalId: workspace.state?.lastEvalId || '',\n })\n}\n\nfunction inspectDeclaredMulticaWorkspace(\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('multica', env)\n add('provider.multica-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'Multica CLI 可执行' : 'PATH 找不到 multica;仅当前 Multica Workspace 不就绪',\n { executable: executable || '' }, '安装 Multica CLI;其他 Provider Workspace 不受影响')\n const refs = [\n ['workspace-id', workspace.provider.workspaceIdFrom],\n ['runtime-id', workspace.provider.runtimeIdFrom],\n ['dws-profile', workspace.authority?.dwsProfileFrom || ''],\n ['expected-user-id', workspace.authority?.expectedUserIdFrom || ''],\n ] as const\n for (const [id, ref] of refs) {\n const variable = ref.startsWith('env:') ? ref.slice(4) : ''\n const configured = Boolean(variable && env[variable])\n add(`authority.${id}`, 'authority', configured ? 'pass' : 'fail', true,\n configured ? `${id} 来源已解析` : `${id} 环境来源未设置`,\n { source: ref, configured }, `设置 ${ref || '<missing-env-ref>'}`)\n }\n const agentRef = workspace.provider.agentIdFrom || ''\n const agentVariable = agentRef.startsWith('env:') ? agentRef.slice(4) : ''\n const agentConfigured = Boolean(agentVariable && env[agentVariable])\n add('authority.agent-id', 'authority', agentRef && agentConfigured ? 'pass' : 'warn', false,\n agentRef\n ? agentConfigured ? 'agent-id 可信来源已解析' : 'agent-id 来源未设置;只允许列候选,不按名称绑定'\n : '未声明 agent-id;W3 只列候选,W4 create 后必须保存稳定 ID',\n { source: agentRef, configured: agentConfigured },\n agentRef ? `设置 ${agentRef}` : '已有 Agent 时声明 provider.agentIdFrom;新 Agent 由 W4 apply 保存 ID')\n const reservedCollisions = [...refs.map(([, ref]) => ref), agentRef]\n .map((ref) => (ref.startsWith('env:') ? ref.slice(4) : ''))\n .filter((variable) => (RESERVED_MULTICA_ENV as readonly string[]).includes(variable))\n if (reservedCollisions.length) {\n add('authority.env-reserved-collision', 'authority', 'warn', false,\n `envRef 命中 multica CLI 保留变量: ${[...new Set(reservedCollisions)].join(', ')};` +\n '该变量会把 multica CLI 切到 Agent 身份鉴权(dta 调用 provider 时已自动剔除)',\n { reserved: [...new Set(reservedCollisions)] },\n '把 manifest 里的 env 引用改成 DTA_ 前缀命名,避免与 provider CLI 语义撞车')\n }\n const inspectionId = workspace.state?.binding.inspectionId || ''\n add('provider.remote-inspect', 'provider', 'warn', false,\n inspectionId\n ? '已有脱敏 Multica 只读 inspection;W4 load/smoke 前仍不能 ready'\n : '尚未运行 Multica 只读 inspection;不会创建或更新远端资源', {\n executed: Boolean(inspectionId), inspectionId, remoteWrite: false,\n })\n}\n\nfunction inspectStorageRoute(root: string, uri: string): Record<string, any> {\n if (uri.startsWith('dingtalk-doc:')) {\n return { valid: false, provider: 'dingtalk-doc', local: false, checked: false }\n }\n const separator = uri.indexOf(':')\n const provider = uri.slice(0, separator)\n const ref = uri.slice(separator + 1)\n const inspected = provider === 'local-md'\n ? inspectLocalFile(root, ref)\n : inspectLocalDirectory(root, ref)\n return { ...inspected, provider, local: true, checked: true }\n}\n\nfunction inspectLocalFile(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'file'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内文件 ${ref}` }\n}\n\nfunction inspectLocalDirectory(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'directory'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内目录 ${ref}` }\n}\n\nfunction inspectLocalPath(root: string, ref: string): Record<string, unknown> {\n const candidate = resolve(root, ref)\n const inside = isInside(root, candidate)\n if (!inside || !existsSync(candidate)) {\n return { path: ref, inside, exists: false, type: 'missing' }\n }\n const actual = realpathSync(candidate)\n const actualInside = isInside(root, actual)\n const stat = statSync(actual)\n return {\n path: relative(root, actual), inside: actualInside, exists: true,\n type: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',\n ...(stat.isFile() && actualInside ? { hash: digest(readFileSync(actual, 'utf8')) } : {}),\n }\n}\n\nfunction syntheticLegacyProject(root: string, workspace: WorkspaceSpec): AgentProjectManifest {\n const definition = workspace.mounts.profile.startsWith('local-md:')\n ? workspace.mounts.profile.slice('local-md:'.length) : 'WORKSPACE.md'\n return {\n $schema: 'dingtalk-agent/project@1',\n name: stableName(basename(root) || 'legacy-agent', 'Legacy Project name'),\n dtaVersion: '*',\n agent: { definition, skills: [...workspace.skills] },\n workspaces: {},\n }\n}\n\nfunction readCurrentWorkspace(root: string): string {\n const path = join(root, CURRENT_WORKSPACE_FILE)\n if (!existsSync(path)) return ''\n if (lstatSync(path).isSymbolicLink()) throw new Error('current-workspace 不能是符号链接')\n if (!isInside(root, realpathSync(path))) throw new Error('current-workspace 真实路径越出 Project')\n const value = readFileSync(path, 'utf8').trim()\n return value ? stableName(value, 'current-workspace') : ''\n}\n\nfunction collectConfigSources(workspace: DeclaredWorkspace): string[] {\n const sources = [\n `manifest:provider.kind=${workspace.provider.kind}`,\n `manifest:stage=${workspace.stage}`,\n ]\n if (workspace.provider.kind === 'opencode') sources.push('manifest:provider.model')\n else sources.push(\n 'manifest:provider.profile', workspace.provider.workspaceIdFrom, workspace.provider.runtimeIdFrom,\n ...(workspace.provider.agentIdFrom ? [workspace.provider.agentIdFrom] : []),\n )\n if (workspace.authority) sources.push(\n workspace.authority.dwsProfileFrom, workspace.authority.expectedUserIdFrom,\n )\n return [...new Set(sources)]\n}\n\nfunction storageRoute(\n value: unknown, providers: string[], label: string, root: string,\n): string {\n const text = requiredString(value, label)\n const separator = text.indexOf(':')\n const provider = separator < 0 ? '' : text.slice(0, separator)\n const ref = separator < 0 ? '' : text.slice(separator + 1).trim()\n if (!providers.includes(provider) || !ref) {\n throw new Error(`${label} Storage 非法;允许 ${providers.map((item) => `${item}:<ref>`).join(' / ')}`)\n }\n if (provider.startsWith('local-')) safeRelativePath(root, ref, label, true)\n return `${provider}:${ref}`\n}\n\nfunction safeRelativePath(root: string, input: string, label: string, allowMissing: boolean): string {\n if (input.includes('\\0')) throw new Error(`${label} 包含 NUL`) // defensive for non-POSIX callers\n const candidate = resolve(root, input)\n if (!isInside(root, candidate) || candidate === root) throw new Error(`${label} 必须位于 Project 内: ${input}`)\n if (existsSync(candidate)) {\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`${label} 真实路径越出 Project: ${input}`)\n } else if (!allowMissing && !isInside(root, candidate)) {\n throw new Error(`${label} 越出 Project: ${input}`)\n }\n return relative(root, candidate).split('\\\\').join('/')\n}\n\nfunction envReference(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!ENV_REF.test(text)) throw new Error(`${label} 必须是 env:UPPER_CASE_VAR 引用`)\n return text\n}\n\nfunction stableName(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!NAME.test(text)) throw new Error(`${label} 非法: ${text}`)\n return text\n}\n\nfunction agentDisplayName(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (text.length > 128 || /[\\u0000-\\u001f\\u007f]/.test(text)) {\n throw new Error(`${label} 必须是不超过 128 字符且不含控制字符的显示名`)\n }\n return text\n}\n\nfunction requiredString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new Error(`${label} 必须是非空字符串`)\n return value.trim()\n}\n\nfunction optionalString(value: unknown, label: string): string {\n if (typeof value !== 'string') throw new Error(`${label} 必须是字符串`)\n return value.trim()\n}\n\nfunction objectValue(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`${label} 必须是 JSON object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n assertAllowedKeys(value, allowed, label)\n const missing = [...allowed].filter((key) => !(key in value))\n if (missing.length) throw new Error(`${label} 缺少字段: ${missing.join(', ')}`)\n}\n\nfunction assertAllowedKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n const unknown = Object.keys(value).filter((key) => !allowed.has(key))\n if (unknown.length) throw new Error(`${label} 包含未知字段: ${unknown.join(', ')}`)\n}\n\nfunction rejectSecretLikeKeys(value: unknown, label: string, path: string[] = []): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => rejectSecretLikeKeys(item, label, [...path, String(index)]))\n return\n }\n if (!value || typeof value !== 'object') return\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n const next = [...path, key]\n if (SECRET_KEY.test(key)) {\n throw new Error(`${label} 禁止凭据字段: ${next.join('.')}`)\n }\n rejectSecretLikeKeys(item, label, next)\n }\n}\n\nfunction versionSatisfies(actualInput: string, rangeInput: string): boolean {\n const actual = parseVersion(actualInput)\n const range = rangeInput.trim()\n if (range === '*' || range === 'latest') return true\n const operator = range.startsWith('^') ? '^' : range.startsWith('~') ? '~' : '='\n const expected = parseVersion(operator === '=' ? range : range.slice(1))\n if (!actual || !expected) return false\n if (operator === '=') return actual.join('.') === expected.join('.')\n if (compareVersion(actual, expected) < 0) return false\n if (operator === '~') return actual[0] === expected[0] && actual[1] === expected[1]\n if (expected[0] > 0) return actual[0] === expected[0]\n if (expected[1] > 0) return actual[0] === 0 && actual[1] === expected[1]\n return actual[0] === 0 && actual[1] === 0 && actual[2] === expected[2]\n}\n\nfunction parseVersion(value: string): [number, number, number] | null {\n const match = value.trim().replace(/^v/, '').match(/^(\\d+)\\.(\\d+)\\.(\\d+)/)\n return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : null\n}\n\nfunction compareVersion(a: number[], b: number[]): number {\n for (let index = 0; index < 3; index += 1) {\n if (a[index] !== b[index]) return a[index] - b[index]\n }\n return 0\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"]}
|