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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.en.md +6 -4
  3. package/README.md +6 -4
  4. package/dist/src/agent-audit.js +69 -55
  5. package/dist/src/agent-audit.js.map +1 -1
  6. package/dist/src/agent-enhance.js +49 -30
  7. package/dist/src/agent-enhance.js.map +1 -1
  8. package/dist/src/bootstrap.js +6 -2
  9. package/dist/src/bootstrap.js.map +1 -1
  10. package/dist/src/development-workspace.js +42 -15
  11. package/dist/src/development-workspace.js.map +1 -1
  12. package/dist/src/multica-deploy.js +27 -9
  13. package/dist/src/multica-deploy.js.map +1 -1
  14. package/dist/src/opencode-provider.js +17 -5
  15. package/dist/src/opencode-provider.js.map +1 -1
  16. package/dist/src/skills.js +2 -0
  17. package/dist/src/skills.js.map +1 -1
  18. package/dist/src/workspace.js +11 -6
  19. package/dist/src/workspace.js.map +1 -1
  20. package/docs/ARCHITECTURE.md +10 -7
  21. package/docs/INSTALLATION.md +1 -1
  22. package/docs/schemas/project.schema.json +5 -0
  23. package/examples/agents/README.md +8 -6
  24. package/examples/agents/fde-coach/AGENTS.md +2 -34
  25. package/examples/agents/fde-coach/agent/AGENTS.md +35 -0
  26. package/examples/agents/fde-coach/agent.bindings.json +10 -0
  27. package/examples/agents/release-manager/AGENTS.md +2 -34
  28. package/examples/agents/release-manager/agent/AGENTS.md +35 -0
  29. package/examples/agents/release-manager/agent.bindings.json +10 -0
  30. package/lab/project-workspace/fake-multica-provider.mjs +26 -7
  31. package/lab/robot-eval/suite.json +1 -1
  32. package/package.json +1 -1
  33. package/skills/core/dingtalk-agent-compose/SKILL.md +21 -15
  34. package/skills/core/dingtalk-agent-compose/assets/REPOSITORY.template.md +10 -0
  35. package/skills/core/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +2 -2
  36. package/skills/core/dingtalk-agent-compose/assets/agent.bindings.local.template.json +2 -2
  37. package/skills/core/dingtalk-agent-compose/assets/hosts/opencode/opencode.template.json +2 -1
  38. package/skills/core/dingtalk-agent-compose/evals/evals.json +1 -1
  39. package/skills/core/dingtalk-agent-compose/references/agent-definition-contract.md +6 -6
  40. package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +10 -12
  41. package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +13 -12
  42. package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +13 -12
  43. package/skills/core/dingtalk-basic-behavior/SKILL.md +9 -6
  44. package/skills/core/dingtalk-basic-behavior/references/perception-and-gates.md +2 -0
  45. /package/examples/agents/fde-coach/{skills → agent/skills}/fde-coach/SKILL.md +0 -0
  46. /package/examples/agents/release-manager/{skills → agent/skills}/release-manager/SKILL.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: 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']) {\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.kind === 'multica' && !authority) {\n throw new Error(`Workspace ${name} 的 multica Provider 必须声明 authority env 来源`)\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 = 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 } 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 skillsRoot?: 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: 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 skillsRoot: 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', 'skillsRoot', '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 skillsRoot: loaded.manifest.agent.skillsRoot || '',\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 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 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: {\n definition,\n ...(skillsRoot === undefined ? {} : { skillsRoot }),\n ...(displayName === undefined ? {} : { displayName }),\n skills,\n },\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 name === 'dingtalk-basic-behavior'\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 name === 'dingtalk-basic-behavior'\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.kind === 'multica' && !authority) {\n throw new Error(`Workspace ${name} 的 multica Provider 必须声明 authority env 来源`)\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 const basicPath = `${projectSkillRef(info.project, '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 ? '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['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, `${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 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"]}
@@ -3,7 +3,7 @@ import { spawnSync } from 'node:child_process';
3
3
  import { existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { basename, dirname, join, relative, resolve } from 'node:path';
6
- import { WORKSPACE_STATE_ROOT, inspectAgentProject, showDevelopmentWorkspace, } from './development-workspace.js';
6
+ import { WORKSPACE_STATE_ROOT, inspectAgentProject, projectSkillRef, showDevelopmentWorkspace, } from './development-workspace.js';
7
7
  import { digest, stableStringify } from './events.js';
8
8
  import { MULTICA_EVIDENCE_ROOT, inspectMulticaWorkspace, planMulticaWorkspace, statusMulticaWorkspace, } from './multica-provider.js';
9
9
  export const MULTICA_DEPLOYMENT_SCHEMA = 'dingtalk-agent/multica-deployment-receipt@1';
@@ -499,8 +499,7 @@ function loadDeploymentSource(root) {
499
499
  const definitionHash = sha256(definition);
500
500
  const skillRoots = [];
501
501
  for (const name of info.project.skills) {
502
- const ref = name === 'dingtalk-basic-behavior'
503
- ? `.agents/skills/${name}` : `skills/${name}`;
502
+ const ref = projectSkillRef(info.project, name);
504
503
  skillRoots.push({ name, root: safeProjectPath(root, ref, true) });
505
504
  }
506
505
  if (skillRoots.length > MAX_DEPLOY_SKILLS) {
@@ -711,7 +710,7 @@ function createAndReadSmoke(root, plan, source, agentId, command, env, timeoutMs
711
710
  `required_skills=${JSON.stringify(requiredSkills)}`,
712
711
  'This is a deployment control-plane verification task.',
713
712
  'Use the Host native Skill tool exactly once for every required skill above, in the listed order.',
714
- 'Do not call DWS, Shell, network, or write tools.',
713
+ 'Do not call DWS, network, or business tools. Only the Host Issue control-plane calls needed to read this Issue and persist the exact result are exempt.',
715
714
  `Return exactly this JSON and nothing else: ${expectedResponse}`,
716
715
  ].join('\n'),
717
716
  '--assignee-id', agentId, '--output', 'json',
@@ -778,7 +777,12 @@ function readSmoke(root, plan, marker, issueId, agentId, requiredSkills, command
778
777
  const responseWrites = toolUses.filter((item) => optionalString(item.tool) === 'write')
779
778
  .map((item) => smokeToolInput(item)).filter((input) => safeSmokeResponsePath(optionalString(input.filePath)))
780
779
  .map((input) => optionalString(input.content)).filter(Boolean);
781
- const responseEvidence = [...texts, ...responseWrites].find(matchesResponse) || '';
780
+ const responseShells = toolUses.filter((item) => optionalString(item.tool) === 'bash')
781
+ .map((item) => optionalString(smokeToolInput(item).command))
782
+ .filter((command) => safeCombinedSmokeResponse(command, issueId, marker, requiredSkills))
783
+ .map(() => JSON.stringify({ schema: 'dta-multica-load-smoke@1', marker, loaded: requiredSkills }));
784
+ const responseEvidence = [...texts, ...responseWrites, ...responseShells]
785
+ .find(matchesResponse) || '';
782
786
  const responsePassed = Boolean(responseEvidence);
783
787
  const toolTracePassed = toolUses.every((item) => allowedSmokeToolUse(item, issueId, marker, requiredSkills)) && stableStringify(skillNames) === stableStringify(requiredSkills);
784
788
  const failures = [];
@@ -836,19 +840,30 @@ function allowedSmokeToolUse(item, issueId, marker, requiredSkills) {
836
840
  const cleanupFirstPrefix = 'rm ';
837
841
  const cleanupFirstSuffix = ` && multica issue status ${issueId} in_review`;
838
842
  if (command.startsWith(cleanupFirstPrefix) && command.endsWith(cleanupFirstSuffix)) {
839
- return safeSmokeResponsePath(command.slice(cleanupFirstPrefix.length, command.length - cleanupFirstSuffix.length));
843
+ return safeSmokeCleanup(command.slice(cleanupFirstPrefix.length, command.length - cleanupFirstSuffix.length));
840
844
  }
841
845
  const statusFirstPrefix = `multica issue status ${issueId} in_review && rm `;
842
846
  if (command.startsWith(statusFirstPrefix)) {
843
- return safeSmokeResponsePath(command.slice(statusFirstPrefix.length));
847
+ return safeSmokeCleanup(command.slice(statusFirstPrefix.length));
844
848
  }
845
849
  if (command.startsWith(cleanupFirstPrefix)) {
846
- return safeSmokeResponsePath(command.slice(cleanupFirstPrefix.length));
850
+ return safeSmokeCleanup(command.slice(cleanupFirstPrefix.length));
847
851
  }
852
+ if (safeCombinedSmokeResponse(command, issueId, marker, requiredSkills))
853
+ return true;
848
854
  return false;
849
855
  }
856
+ function safeCombinedSmokeResponse(command, issueId, marker, requiredSkills) {
857
+ const response = JSON.stringify({ schema: 'dta-multica-load-smoke@1', marker, loaded: requiredSkills });
858
+ return command === [
859
+ "cat > ./reply.md << 'REPLY_EOF'",
860
+ response,
861
+ 'REPLY_EOF',
862
+ `multica issue comment add ${issueId} --content-file ./reply.md && rm ./reply.md`,
863
+ ].join('\n');
864
+ }
850
865
  function safeSmokeResponsePath(value) {
851
- const names = new Set(['reply.md', 'result.json']);
866
+ const names = new Set(['reply.md', 'result.md', 'result.json']);
852
867
  if (value.startsWith('./'))
853
868
  return names.has(value.slice(2));
854
869
  if (!value.startsWith('/') || !names.has(value.split('/').at(-1) || ''))
@@ -856,6 +871,9 @@ function safeSmokeResponsePath(value) {
856
871
  return value.split('/').every((part) => !part ||
857
872
  (part !== '.' && part !== '..' && /^[A-Za-z0-9._-]+$/.test(part)));
858
873
  }
874
+ function safeSmokeCleanup(value) {
875
+ return safeSmokeResponsePath(value.startsWith('-f ') ? value.slice(3) : value);
876
+ }
859
877
  function rollbackConfirmed(root, plan, command, env, timeoutMs, calls, rollback, temp) {
860
878
  const report = emptyRollback(true);
861
879
  const attempt = (id, argv) => {