@xdxer/dingtalk-agent 0.1.4-beta.14 → 0.1.4-beta.16

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 (47) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.en.md +97 -328
  3. package/README.md +94 -676
  4. package/dist/bin/dingtalk-agent.js +26 -5
  5. package/dist/bin/dingtalk-agent.js.map +1 -1
  6. package/dist/src/agent-audit.js +1005 -88
  7. package/dist/src/agent-audit.js.map +1 -1
  8. package/dist/src/agent-enhance.js +38 -6
  9. package/dist/src/agent-enhance.js.map +1 -1
  10. package/dist/src/agent-platform.js +49 -2
  11. package/dist/src/agent-platform.js.map +1 -1
  12. package/dist/src/development-workspace.js +4 -1
  13. package/dist/src/development-workspace.js.map +1 -1
  14. package/dist/src/instruction-path.js +270 -0
  15. package/dist/src/instruction-path.js.map +1 -0
  16. package/dist/src/opencode-evals.js +708 -224
  17. package/dist/src/opencode-evals.js.map +1 -1
  18. package/dist/src/opencode-isolation.js +124 -0
  19. package/dist/src/opencode-isolation.js.map +1 -0
  20. package/dist/src/opencode-provider.js +1 -0
  21. package/dist/src/opencode-provider.js.map +1 -1
  22. package/dist/src/opencode-workspace.js +21 -10
  23. package/dist/src/opencode-workspace.js.map +1 -1
  24. package/docs/assets/agent-delivery-lifecycle.svg +103 -0
  25. package/docs/schemas/project.schema.json +1 -0
  26. package/evals/README.md +17 -0
  27. package/lab/README.md +3 -3
  28. package/lab/agent-eval/classic-failures.json +7 -7
  29. package/lab/agent-eval/remote-state-workspace/opencode.json +1 -1
  30. package/lab/agent-eval/workspace/AGENTS.md +1 -1
  31. package/lab/robot-eval/suite.json +1 -1
  32. package/lab/robot-eval/workspace/AGENTS.md +1 -1
  33. package/package.json +2 -2
  34. package/skills/core/dingtalk-agent-compose/SKILL.md +21 -10
  35. package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +24 -15
  36. package/skills/core/dingtalk-agent-compose/assets/role-skill.template.md +14 -6
  37. package/skills/core/dingtalk-agent-compose/evals/evals.json +17 -5
  38. package/skills/core/dingtalk-agent-compose/references/agent-definition-contract.md +3 -3
  39. package/skills/core/dingtalk-agent-compose/references/opencode-host-contract.md +17 -9
  40. package/skills/core/dingtalk-basic-behavior/SKILL.md +52 -111
  41. package/skills/core/dingtalk-basic-behavior/references/memory-and-evolution.md +12 -0
  42. package/skills/core/dingtalk-basic-behavior/references/risk-authority-and-privacy.md +62 -0
  43. package/skills/core/dingtalk-basic-behavior/references/task-lifecycle.md +15 -3
  44. package/skills/core/dingtalk-basic-behavior/references/truth-and-recovery.md +65 -0
  45. package/skills/platforms/multica-dingtalk/PLATFORM.md +1 -1
  46. package/dist/src/map.js +0 -157
  47. package/dist/src/map.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-enhance.js","sourceRoot":"","sources":["../../src/agent-enhance.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync,\n renameSync, rmSync, statSync, writeFileSync,\n} from 'node:fs'\nimport { basename, dirname, join, relative, resolve } from 'node:path'\nimport { auditAgent } from './agent-audit.js'\nimport { loadAgentBindings, type AgentBindings } from './agent-bindings.js'\nimport { inspectAgentProject } from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { bundledSkillPath } from './skill-manager.js'\n\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst BASIC = 'dingtalk-basic-behavior'\nconst BASIC_INSTRUCTION = '.agents/skills/dingtalk-basic-behavior/SKILL.md'\nconst DIRECTORY_HASH = digest('dingtalk-agent/directory@1')\nconst TEMPLATE_MARKER = /<(?:Agent 名称|岗位\\/角色|人群、团队或工作场域|长期目标|主动负责的事项|可观察的交付物|明确不做或必须升级确认的事项|Role Skill names|role-skill-name|Role Skill 名称|岗位职责或工作流|领域判断、输入与交付物|领域输入|领域方法\\/SOP|可观察结果 [12]|route)>/u\n\nexport interface AgentEnhanceOptions {\n bindings?: string\n projectName?: string\n roleSkills?: string[]\n model?: string\n memory?: string\n knowledge?: string\n artifacts?: string\n stateDir?: string\n profile?: string\n expectedUserId?: string\n cliVersion?: string\n planId?: string\n yes?: boolean\n}\n\nexport interface AgentEnhanceOperation {\n id: string\n kind: 'create-file' | 'update-file' | 'create-directory' | 'replace-directory' | 'preserve'\n path: string\n beforeHash: string\n afterHash: string\n backupRequired: boolean\n reason: string\n}\n\nexport interface AgentEnhancePlan {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1'\n planId: string\n ready: boolean\n status: 'ready' | 'blocked'\n sideEffect: false\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n source: { kind: 'git-checkout' | 'local-folder'; revision: string }\n projectName: string\n roleSkills: string[]\n bindings: string\n baselineHash: string\n desiredHash: string\n operations: AgentEnhanceOperation[]\n blockers: string[]\n warnings: string[]\n semanticReview: {\n required: boolean\n files: string[]\n why: string\n }\n apply: { command: string; requiresCurrentPlanId: true }\n verification: { commands: string[] }\n}\n\nexport interface AgentEnhanceReceipt {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1'\n status: 'applied'\n operationId: string\n planId: string\n sideEffect: 'local-files-only'\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n backupRoot: string\n idempotent: boolean\n changes: AgentEnhanceOperation[]\n audit: {\n status: 'ready' | 'partial'\n ready: boolean\n missing: string[]\n commands: string[]\n }\n}\n\ninterface TreePayload {\n files: Map<string, Buffer>\n hash: string\n}\n\ninterface BuiltEnhancement {\n plan: AgentEnhancePlan\n files: Map<string, string>\n trees: Map<string, TreePayload>\n directories: Set<string>\n bindingsValue: AgentBindings\n}\n\nexport function planAgentEnhancement(\n root: string, options: AgentEnhanceOptions = {},\n): AgentEnhancePlan {\n return buildEnhancement(root, options).plan\n}\n\nexport function applyAgentEnhancement(\n root: string, options: AgentEnhanceOptions,\n): AgentEnhanceReceipt {\n if (!options.yes) throw new Error('agent enhance apply 必须显式传 --yes')\n if (!String(options.planId || '').trim()) {\n throw new Error('agent enhance apply 必须传当前 dry-run 返回的 --plan-id')\n }\n const built = buildEnhancement(root, options)\n const { plan } = built\n if (!plan.ready) throw new Error(`agent enhance plan 被阻塞: ${plan.blockers.join('; ')}`)\n if (options.planId !== plan.planId) {\n throw new Error(`agent enhance planId 已过期或不匹配: expected=${plan.planId}`)\n }\n const changes = plan.operations.filter((item) => item.kind !== 'preserve')\n const operationId = `agent_enhance_${Date.now()}_${randomUUID().slice(0, 8)}`\n const backupRelative = changes.some((item) => item.backupRequired)\n ? join('.dingtalk-agent', 'backups', 'agent-enhance', operationId) : ''\n const backupRoot = backupRelative ? resolve(plan.root, backupRelative) : ''\n const backedUp = new Set<string>()\n const created = new Set<string>()\n let audit: ReturnType<typeof auditAgent>\n\n try {\n if (backupRoot) {\n for (const operation of changes.filter((item) => item.backupRequired)) {\n const source = safeTarget(plan.root, operation.path)\n const destination = resolve(backupRoot, operation.path)\n copyEntry(source, destination)\n backedUp.add(operation.path)\n }\n writeAtomic(join(backupRoot, 'manifest.json'), JSON.stringify({\n $schema: 'dingtalk-agent/agent-enhancement-backup@1',\n operationId, planId: plan.planId,\n entries: [...backedUp].sort().map((path) => ({\n path,\n hash: stateHash(safeTarget(plan.root, path)),\n })),\n }, null, 2) + '\\n')\n }\n for (const operation of changes) {\n const target = safeTarget(plan.root, operation.path)\n if (!existsSync(target)) created.add(operation.path)\n if (operation.kind === 'create-directory') {\n mkdirSync(target, { recursive: true })\n } else if (operation.kind === 'create-file' || operation.kind === 'update-file') {\n writeAtomic(target, built.files.get(operation.path)!)\n } else if (operation.kind === 'replace-directory') {\n rmSync(target, { recursive: true, force: true })\n writeTree(target, built.trees.get(operation.path)!)\n }\n const actual = operation.kind === 'create-directory'\n ? (existsSync(target) && lstatSync(target).isDirectory() && !lstatSync(target).isSymbolicLink()\n ? DIRECTORY_HASH : '')\n : stateHash(target)\n if (actual !== operation.afterHash) {\n throw new Error(`写后 hash 不一致: ${operation.path}`)\n }\n }\n const bindingsPath = safeTarget(plan.root, plan.bindings)\n const loaded = loadAgentBindings(plan.root, relative(plan.root, bindingsPath))\n audit = auditAgent(plan.root, {\n bootstrap: { context: loaded.context },\n bindings: { path: loaded.path, hash: loaded.hash },\n requiredSkills: plan.roleSkills,\n })\n } catch (error) {\n rollback(plan.root, [...changes].reverse(), backupRoot, backedUp, created)\n throw new Error(`agent enhance 失败,已按备份回滚: ${error.message}`)\n }\n return {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1',\n status: 'applied', operationId, planId: plan.planId,\n sideEffect: 'local-files-only', dingtalkSideEffect: false, triggerSideEffect: false,\n root: plan.root,\n backupRoot: backupRoot ? relative(plan.root, backupRoot).split('\\\\').join('/') : '',\n idempotent: changes.length === 0,\n changes,\n audit: {\n status: audit.status, ready: audit.ready, missing: audit.missing,\n commands: audit.verification.commands,\n },\n }\n}\n\nfunction buildEnhancement(root: string, options: AgentEnhanceOptions): BuiltEnhancement {\n const rootReal = realpathSync(resolve(root))\n assertDirectory(rootReal, 'Agent root')\n const packageRoot = resolvePackageRoot(import.meta.url)\n const bindingsRef = safeRelative(options.bindings || 'agent.bindings.json', 'bindings')\n const existingProjectPath = join(rootReal, 'dingtalk-agent.json')\n const existingProject = existsSync(existingProjectPath)\n ? readValidatedProject(rootReal, options.cliVersion || '') : null\n const inferredName = normalizeName(basename(rootReal))\n const projectName = String(options.projectName || existingProject?.name || inferredName).trim()\n const blockers: string[] = []\n const warnings: string[] = []\n if (!NAME.test(projectName)) blockers.push('缺少合法 project name;请传 --project-name <stable-name>')\n if (!options.projectName && !existingProject) {\n warnings.push(`project name 由目录名推导为 ${projectName || '(invalid)'}`)\n }\n\n const discovered = discoverRoleSkills(rootReal)\n const requested = (options.roleSkills || []).map((item) => item.trim()).filter(Boolean)\n const roleCandidates = [...new Set([...discovered.names, ...requested])].sort()\n const invalidRoles = roleCandidates.filter((name) => !NAME.test(name) || name === BASIC)\n const roleSkills = roleCandidates.filter((name) => NAME.test(name) && name !== BASIC)\n if (invalidRoles.length) blockers.push(`Role Skill name 非法: ${invalidRoles.join(', ')}`)\n if (!roleSkills.length && !invalidRoles.length) {\n blockers.push('没有发现 Role Skill;请传 --role-skill <name>')\n }\n\n const files = new Map<string, string>()\n const trees = new Map<string, TreePayload>()\n const directories = new Set<string>()\n const semanticFiles: string[] = []\n const bindingsPath = join(rootReal, bindingsRef)\n const existingBindings = existsSync(bindingsPath)\n ? loadAgentBindings(rootReal, bindingsRef).value : null\n const existingLocalWorkspace = existingProject?.workspaces?.['local-dev'] || null\n if (existingLocalWorkspace && existingLocalWorkspace.provider?.kind !== 'opencode') {\n blockers.push('现有 local-dev 不是 OpenCode workspace;拒绝覆盖其 Provider')\n }\n const bindingsValue: AgentBindings = {\n $schema: 'dingtalk-agent/agent-bindings@1',\n agent: existingBindings?.agent || 'local-dir:.',\n skills: existingBindings?.skills || 'local-dir:skills',\n memory: options.memory || existingBindings?.memory ||\n existingLocalWorkspace?.storage?.memory || 'local-md:MEMORY.md',\n knowledge: options.knowledge || existingBindings?.knowledge ||\n existingLocalWorkspace?.storage?.knowledge || 'local-md:knowledge/INDEX.md',\n artifacts: options.artifacts || existingBindings?.artifacts ||\n existingLocalWorkspace?.storage?.artifacts || 'local-dir:.dingtalk-agent/artifacts',\n stateDir: options.stateDir || existingBindings?.stateDir || '.dingtalk-agent',\n authority: {\n profile: options.profile ?? existingBindings?.authority.profile ?? '',\n expectedUserId: options.expectedUserId ?? existingBindings?.authority.expectedUserId ?? '',\n },\n }\n validateBindingsCandidate(rootReal, bindingsValue)\n const remote = [bindingsValue.memory, bindingsValue.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))\n if (remote && (!bindingsValue.authority.profile || !bindingsValue.authority.expectedUserId)) {\n blockers.push('远端 memory/knowledge 需要同时提供 --profile 与 --expected-user-id')\n }\n\n const agentsPath = join(rootReal, 'AGENTS.md')\n if (!existsSync(agentsPath)) {\n const body = readAsset(packageRoot, 'AGENTS.template.md')\n .replace('<Agent 名称>', projectName || '<Agent 名称>')\n .replace('<Role Skill names>', roleSkills.join(', ') || '<Role Skill names>')\n files.set('AGENTS.md', body)\n semanticFiles.push('AGENTS.md')\n } else {\n assertRegularFile(agentsPath, 'AGENTS.md')\n const body = readFileSync(agentsPath, 'utf8')\n files.set('AGENTS.md', body)\n if (TEMPLATE_MARKER.test(body)) semanticFiles.push('AGENTS.md')\n }\n\n for (const name of roleSkills) {\n const rolePath = `skills/${name}`\n const source = join(rootReal, rolePath)\n let tree: TreePayload\n if (existsSync(source)) {\n tree = readTree(source, `Role Skill ${name}`)\n const skillBody = tree.files.get('SKILL.md')?.toString('utf8') || ''\n const actualName = frontmatterName(skillBody)\n if (actualName !== name) blockers.push(`Role Skill ${name} frontmatter name=${actualName || '(missing)'}`)\n if (TEMPLATE_MARKER.test(skillBody)) semanticFiles.push(`${rolePath}/SKILL.md`)\n } else {\n const body = readAsset(packageRoot, 'role-skill.template.md')\n .replaceAll('<role-skill-name>', name)\n .replace('<Role Skill 名称>', name)\n tree = treeFromFiles(new Map([['SKILL.md', Buffer.from(body)]]))\n trees.set(rolePath, tree)\n semanticFiles.push(`${rolePath}/SKILL.md`)\n }\n trees.set(`.agents/skills/${name}`, tree)\n }\n\n trees.set(`.agents/skills/${BASIC}`, readTree(\n bundledSkillPath(packageRoot, BASIC), 'Canonical Basic Skill'))\n files.set(bindingsRef, JSON.stringify(bindingsValue, null, 2) + '\\n')\n\n const project = desiredProject(existingProject, {\n projectName, roleSkills, model: options.model || 'deepseek/deepseek-chat',\n modelExplicit: options.model !== undefined,\n cliVersion: options.cliVersion || '', bindings: bindingsValue,\n })\n files.set('dingtalk-agent.json', JSON.stringify(project, null, 2) + '\\n')\n files.set('opencode.json', JSON.stringify(desiredOpenCode(rootReal, roleSkills), null, 2) + '\\n')\n files.set('.gitignore', desiredGitignore(rootReal, bindingsValue.stateDir))\n\n for (const [label, route] of Object.entries({\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n })) {\n if (!route.startsWith('local-md:')) continue\n const ref = safeRelative(route.slice('local-md:'.length), `${label} route`)\n const path = join(rootReal, ref)\n if (!existsSync(path)) {\n files.set(ref, `# ${label === 'memory' ? 'Memory' : 'Knowledge'}\\n\\n`)\n } else assertRegularFile(path, `${label} route`)\n }\n const artifactRef = safeLocalRoute(bindingsValue.artifacts, 'local-dir', 'artifacts')\n if (resolve(rootReal, artifactRef) === rootReal) {\n throw new Error('artifacts 必须是 Agent 根目录内的独立目录,不能等于根目录')\n }\n directories.add(artifactRef)\n directories.add(safeRelative(bindingsValue.stateDir, 'stateDir'))\n\n const operations = buildOperations(rootReal, files, trees, directories)\n const baselineHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, beforeHash: item.beforeHash,\n }))))\n const desiredHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, afterHash: item.afterHash,\n }))))\n const source = sourceIdentity(rootReal)\n const planSeed = {\n schema: 'dingtalk-agent/agent-enhancement-plan@1', baselineHash, desiredHash,\n root: rootReal, source, projectName, roleSkills, bindings: bindingsRef,\n options: {\n model: options.model || 'deepseek/deepseek-chat',\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n artifacts: bindingsValue.artifacts, stateDir: bindingsValue.stateDir,\n profileConfigured: Boolean(bindingsValue.authority.profile),\n expectedUserConfigured: Boolean(bindingsValue.authority.expectedUserId),\n },\n }\n const planId = `aep_${digest(stableStringify(planSeed)).slice(0, 32)}`\n const roleArgument = roleSkills.join(',') || '<role-skill>'\n const common = [\n ...(options.projectName ? ['--project-name', shellArg(options.projectName)] : []),\n ...(roleSkills.length ? ['--role-skill', shellArg(roleSkills.join(','))] : []),\n ...(options.model ? ['--model', shellArg(options.model)] : []),\n ...(options.memory ? ['--memory', shellArg(options.memory)] : []),\n ...(options.knowledge ? ['--knowledge', shellArg(options.knowledge)] : []),\n ...(options.artifacts ? ['--artifacts', shellArg(options.artifacts)] : []),\n ...(options.stateDir ? ['--state-dir', shellArg(options.stateDir)] : []),\n ...(options.profile !== undefined ? ['--profile', '\"$DTA_DWS_PROFILE\"'] : []),\n ...(options.expectedUserId !== undefined\n ? ['--expected-user-id', '\"$DTA_EXPECTED_USER_ID\"'] : []),\n ...(bindingsRef !== 'agent.bindings.json' ? ['--bindings', shellArg(bindingsRef)] : []),\n ].join(' ')\n const applyCommand = `dta agent enhance ${common}${common ? ' ' : ''}--plan-id ${planId} --yes --json`\n const plan: AgentEnhancePlan = {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1', planId,\n ready: blockers.length === 0, status: blockers.length ? 'blocked' : 'ready',\n sideEffect: false, dingtalkSideEffect: false, triggerSideEffect: false,\n root: rootReal,\n source, projectName, roleSkills, bindings: bindingsRef,\n baselineHash, desiredHash, operations, blockers, warnings,\n semanticReview: {\n required: semanticFiles.length > 0,\n files: [...new Set(semanticFiles)].sort(),\n why: semanticFiles.length\n ? 'CLI 只补结构,不替开发者虚构身份、职责、交付物或领域 SOP;请由 compose Skill 完成语义评审。'\n : '现有本体与 Role Skill 未命中模板占位符。',\n },\n apply: { command: applyCommand, requiresCurrentPlanId: true },\n verification: { commands: [\n `dta bootstrap --bindings ${shellArg(bindingsRef)} --json`,\n `dta agent audit --bindings ${shellArg(bindingsRef)} --require-skill ${shellArg(roleArgument)} --json`,\n `dta workspace create local-dev --dry-run --json`,\n ] },\n }\n return { plan, files, trees, directories, bindingsValue }\n}\n\nfunction desiredProject(existing: Record<string, any> | null, input: {\n projectName: string; roleSkills: string[]; model: string; modelExplicit: boolean\n cliVersion: string; bindings: AgentBindings\n}): Record<string, any> {\n if (existing) {\n const next = structuredClone(existing)\n next.name = input.projectName\n next.agent.skills = [...new Set([BASIC, ...(next.agent.skills || []), ...input.roleSkills])]\n const local = next.workspaces['local-dev']\n if (!local) {\n next.workspaces['local-dev'] = localOpenCodeWorkspace(input)\n } else if (local.provider?.kind === 'opencode') {\n if (input.modelExplicit) local.provider.model = input.model\n local.storage = {\n ...local.storage,\n memory: input.bindings.memory,\n knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n local.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n } else {\n delete local.authority\n }\n }\n return next\n }\n const version = input.cliVersion.match(/^(\\d+\\.\\d+\\.\\d+)/)?.[1] || '0.1.0'\n return {\n $schema: 'dingtalk-agent/project@1', name: input.projectName,\n dtaVersion: `^${version}`,\n agent: { definition: 'AGENTS.md', skills: [BASIC, ...input.roleSkills] },\n workspaces: { 'local-dev': localOpenCodeWorkspace(input) },\n }\n}\n\nfunction localOpenCodeWorkspace(input: {\n model: string\n bindings: AgentBindings\n}): Record<string, any> {\n const workspace: Record<string, any> = {\n stage: 'dev', provider: { kind: 'opencode', model: input.model },\n storage: {\n memory: input.bindings.memory, knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n },\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n workspace.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n }\n return workspace\n}\n\nfunction desiredOpenCode(root: string, roles: string[]): Record<string, any> {\n const path = join(root, 'opencode.json')\n let value: Record<string, any> = { $schema: 'https://opencode.ai/config.json' }\n if (existsSync(path)) {\n assertRegularFile(path, 'opencode.json')\n try { value = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`opencode.json 不是合法 JSON: ${error.message}`) }\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('opencode.json 必须是 JSON object')\n }\n }\n if (value.instructions !== undefined && !Array.isArray(value.instructions)) {\n throw new Error('opencode.json#instructions 必须是 array;拒绝覆盖未知结构')\n }\n if ((value.instructions || []).some((item: unknown) => typeof item !== 'string')) {\n throw new Error('opencode.json#instructions 只能包含字符串;拒绝静默删除未知条目')\n }\n const instructions = (value.instructions || []) as string[]\n value.instructions = [...instructions.filter((item: string) => item !== BASIC_INSTRUCTION), BASIC_INSTRUCTION]\n const permission = value.permission === undefined ? {} : value.permission\n if (!permission || typeof permission !== 'object' || Array.isArray(permission)) {\n throw new Error('opencode.json#permission 必须是 object;拒绝覆盖未知结构')\n }\n const skill = permission.skill === undefined ? {} : permission.skill\n if (!skill || typeof skill !== 'object' || Array.isArray(skill)) {\n throw new Error('opencode.json#permission.skill 必须是 object;拒绝覆盖未知结构')\n }\n value.permission = { ...permission, skill: {\n ...skill, [BASIC]: 'allow', ...Object.fromEntries(roles.map((name) => [name, 'allow'])),\n } }\n return value\n}\n\nfunction buildOperations(\n root: string, files: Map<string, string>, trees: Map<string, TreePayload>, directories: Set<string>,\n): AgentEnhanceOperation[] {\n const operations: AgentEnhanceOperation[] = []\n for (const [path, body] of [...files.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n const beforeHash = stateHash(target)\n const afterHash = digest(Buffer.from(body).toString('base64'))\n operations.push({\n id: `file:${path}`,\n kind: !existsSync(target) ? 'create-file' : beforeHash === afterHash ? 'preserve' : 'update-file',\n path, beforeHash, afterHash,\n backupRequired: existsSync(target) && beforeHash !== afterHash,\n reason: fileReason(path),\n })\n }\n for (const [path, tree] of [...trees.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`受管 Skill exposure 必须是普通目录,拒绝覆盖: ${path}`)\n }\n const beforeHash = stateHash(target)\n operations.push({\n id: `tree:${path}`,\n kind: beforeHash === tree.hash ? 'preserve' : 'replace-directory',\n path, beforeHash, afterHash: tree.hash,\n backupRequired: existsSync(target) && beforeHash !== tree.hash,\n reason: path.startsWith('.agents/') ? '物化目标 Host 的精确 Skill exposure' : '补齐缺失的 Role Skill 模板',\n })\n }\n for (const path of [...directories].sort()) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`本地路由必须是普通目录: ${path}`)\n }\n operations.push({\n id: `directory:${path}`, kind: existsSync(target) ? 'preserve' : 'create-directory',\n path, beforeHash: existsSync(target) ? DIRECTORY_HASH : '', afterHash: DIRECTORY_HASH,\n backupRequired: false, reason: '建立本地 state/artifact 路由,不投影控制状态到远端',\n })\n }\n return operations.sort((a, b) => a.path.localeCompare(b.path))\n}\n\nfunction readValidatedProject(root: string, cliVersion: string): Record<string, any> {\n inspectAgentProject(root, cliVersion)\n return JSON.parse(readFileSync(join(root, 'dingtalk-agent.json'), 'utf8'))\n}\n\nfunction discoverRoleSkills(root: string): { names: string[] } {\n const base = join(root, 'skills')\n if (!existsSync(base)) return { names: [] }\n if (!lstatSync(base).isDirectory() || lstatSync(base).isSymbolicLink()) {\n throw new Error('skills 必须是 Agent 根目录内的普通目录')\n }\n const names: string[] = []\n for (const entry of readdirSync(base, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || entry.name === BASIC) continue\n const file = join(base, entry.name, 'SKILL.md')\n if (!existsSync(file)) continue\n assertRegularFile(file, `Role Skill ${entry.name}`)\n const name = frontmatterName(readFileSync(file, 'utf8'))\n if (name !== entry.name) throw new Error(`Role Skill 目录与 frontmatter name 不一致: ${entry.name}/${name || '(missing)'}`)\n names.push(name)\n }\n return { names }\n}\n\nfunction validateBindingsCandidate(root: string, value: AgentBindings): void {\n for (const [label, route] of Object.entries({\n agent: value.agent, skills: value.skills, memory: value.memory,\n knowledge: value.knowledge, artifacts: value.artifacts,\n })) {\n const separator = route.indexOf(':')\n if (separator < 1 || !route.slice(separator + 1).trim()) throw new Error(`${label} route 非法`)\n if (!route.startsWith('local-')) continue\n safeRelative(route.slice(separator + 1), `${label} route`)\n }\n safeRelative(value.stateDir, 'stateDir')\n if (resolve(root, value.stateDir) === root) throw new Error('stateDir 不能等于 Agent 根目录')\n}\n\nfunction desiredGitignore(root: string, stateDir: string): string {\n const path = join(root, '.gitignore')\n const state = safeRelative(stateDir, 'stateDir')\n const entries = ['.dingtalk-agent/']\n if (state !== '.dingtalk-agent' && !state.startsWith('.dingtalk-agent/')) {\n entries.push(`${state.replace(/\\/+$/, '')}/`)\n }\n if (!existsSync(path)) return `${entries.join('\\n')}\\n`\n assertRegularFile(path, '.gitignore')\n let body = readFileSync(path, 'utf8')\n const lines = new Set(body.split(/\\r?\\n/).map((line) => line.trim().replace(/\\/+$/, '')))\n for (const entry of entries) {\n if (lines.has(entry.replace(/\\/+$/, ''))) continue\n body = `${body}${body && !body.endsWith('\\n') ? '\\n' : ''}${entry}\\n`\n lines.add(entry.replace(/\\/+$/, ''))\n }\n return body\n}\n\nfunction sourceIdentity(root: string): AgentEnhancePlan['source'] {\n const git = join(root, '.git')\n if (!existsSync(git)) return { kind: 'local-folder', revision: '' }\n let gitDirectory = git\n if (!lstatSync(git).isDirectory()) {\n const ref = readFileSync(git, 'utf8').trim().match(/^gitdir:\\s*(.+)$/)?.[1]\n if (!ref) return { kind: 'git-checkout', revision: '' }\n gitDirectory = resolve(root, ref)\n }\n if (!gitDirectory || !existsSync(gitDirectory) || !statSync(gitDirectory).isDirectory()) {\n return { kind: 'git-checkout', revision: '' }\n }\n let revision = ''\n const head = join(gitDirectory, 'HEAD')\n if (existsSync(head) && statSync(head).isFile()) {\n const headValue = readFileSync(head, 'utf8').trim()\n const ref = headValue.match(/^ref:\\s*(.+)$/)?.[1] || ''\n if (!ref) revision = headValue\n else {\n const commonDirFile = join(gitDirectory, 'commondir')\n const commonDir = existsSync(commonDirFile)\n ? resolve(gitDirectory, readFileSync(commonDirFile, 'utf8').trim()) : gitDirectory\n const refPath = join(commonDir, ref)\n if (existsSync(refPath)) revision = readFileSync(refPath, 'utf8').trim()\n else {\n const packed = join(commonDir, 'packed-refs')\n if (existsSync(packed)) {\n revision = readFileSync(packed, 'utf8').split(/\\r?\\n/)\n .find((line) => line.endsWith(` ${ref}`))?.split(' ')[0] || ''\n }\n }\n }\n }\n return { kind: 'git-checkout', revision }\n}\n\nfunction fileReason(path: string): string {\n if (path === 'AGENTS.md') return '补齐本体结构;语义内容仍需开发者评审'\n if (path === 'agent.bindings.json') return '固化本体、语义存储与宿主私有状态路由'\n if (path === 'dingtalk-agent.json') return '把目录升级为可发现、可版本化的 Agent Project'\n if (path === 'opencode.json') return '合并唯一 Basic instruction 与 Role Skill permission'\n if (path === '.gitignore') return '防止私有 state、Receipt 与原始证据进入 Git'\n return '补齐本地语义介质入口'\n}\n\nfunction readAsset(packageRoot: string, name: string): string {\n return readFileSync(join(bundledSkillPath(packageRoot, 'dingtalk-agent-compose'), 'assets', name), 'utf8')\n}\n\nfunction readTree(path: string, label: string): TreePayload {\n if (!existsSync(path) || !lstatSync(path).isDirectory() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通目录: ${path}`)\n }\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`${label} 不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n if (!files.has('SKILL.md')) throw new Error(`${label} 缺少 SKILL.md`)\n return treeFromFiles(files)\n}\n\nfunction treeFromFiles(files: Map<string, Buffer>): TreePayload {\n const index = [...files.entries()].sort(([a], [b]) => a.localeCompare(b))\n .map(([path, body]) => ({ path, hash: digest(body.toString('base64')) }))\n return { files, hash: digest(stableStringify(index)) }\n}\n\nfunction writeTree(target: string, tree: TreePayload): void {\n mkdirSync(target, { recursive: true })\n for (const [path, body] of tree.files) {\n const out = resolve(target, path)\n if (!isInside(target, out)) throw new Error(`Skill tree path 越界: ${path}`)\n mkdirSync(dirname(out), { recursive: true })\n writeFileSync(out, body, { flag: 'wx' })\n }\n}\n\nfunction copyEntry(source: string, destination: string): void {\n if (!existsSync(source)) throw new Error(`备份源不存在: ${source}`)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, {\n recursive: lstatSync(source).isDirectory(), errorOnExist: true,\n filter: (path) => {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`备份拒绝 symlink: ${path}`)\n return true\n },\n })\n}\n\nfunction rollback(\n root: string, operations: AgentEnhanceOperation[], backupRoot: string,\n backedUp: Set<string>, created: Set<string>,\n): void {\n for (const operation of operations) {\n const target = safeTarget(root, operation.path)\n if (created.has(operation.path)) rmSync(target, { recursive: true, force: true })\n else if (backedUp.has(operation.path)) {\n rmSync(target, { recursive: true, force: true })\n copyEntry(resolve(backupRoot, operation.path), target)\n }\n }\n}\n\nfunction stateHash(path: string): string {\n if (!existsSync(path)) return ''\n const stat = lstatSync(path)\n if (stat.isSymbolicLink()) throw new Error(`受管路径不允许 symlink: ${path}`)\n if (stat.isFile()) return digest(readFileSync(path).toString('base64'))\n if (!stat.isDirectory()) throw new Error(`受管路径类型不支持: ${path}`)\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`受管目录不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n return treeFromFiles(files).hash\n}\n\nfunction writeAtomic(path: string, body: string): void {\n mkdirSync(dirname(path), { recursive: true })\n const temporary = `${path}.${process.pid}.${Date.now()}.tmp`\n writeFileSync(temporary, body, { flag: 'wx' })\n renameSync(temporary, path)\n}\n\nfunction assertDirectory(path: string, label: string): void {\n if (!existsSync(path) || !statSync(path).isDirectory()) throw new Error(`${label} 不存在或不是目录`)\n}\n\nfunction assertRegularFile(path: string, label: string): void {\n if (!existsSync(path) || !lstatSync(path).isFile() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通文件`)\n }\n}\n\nfunction safeTarget(root: string, path: string): string {\n const ref = safeRelative(path, 'managed path')\n const target = resolve(root, ref)\n if (!isInside(root, target)) throw new Error(`受管路径越出 Agent root: ${path}`)\n let current = root\n for (const part of ref.split('/').slice(0, -1)) {\n current = join(current, part)\n if (existsSync(current) && lstatSync(current).isSymbolicLink()) {\n throw new Error(`受管路径不能穿过 symlink: ${path}`)\n }\n }\n return target\n}\n\nfunction safeRelative(value: string, label: string): string {\n const text = String(value || '').trim().split('\\\\').join('/')\n if (!text || text.startsWith('/') || text.split('/').some((item) => !item || item === '..')) {\n throw new Error(`${label} 必须是 Agent 根目录内的相对路径: ${value}`)\n }\n return text.replace(/^\\.\\//, '')\n}\n\nfunction safeLocalRoute(route: string, provider: string, label: string): string {\n if (!route.startsWith(`${provider}:`)) throw new Error(`${label} 必须使用 ${provider}`)\n return safeRelative(route.slice(provider.length + 1), label)\n}\n\nfunction frontmatterName(body: string): string {\n const block = body.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/)?.[1] || ''\n return block.match(/^name:\\s*[\"']?([^\"'\\r\\n]+)[\"']?\\s*$/m)?.[1]?.trim() || ''\n}\n\nfunction normalizeName(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 64)\n}\n\nfunction shellArg(value: string): string {\n return /^[A-Za-z0-9_./:=@^+-]+$/.test(value) ? value : `'${value.replaceAll(\"'\", `'\"'\"'`)}'`\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":"agent-enhance.js","sourceRoot":"","sources":["../../src/agent-enhance.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync,\n renameSync, rmSync, statSync, writeFileSync,\n} from 'node:fs'\nimport { basename, dirname, join, relative, resolve } from 'node:path'\nimport { auditAgent } from './agent-audit.js'\nimport { loadAgentBindings, type AgentBindings } from './agent-bindings.js'\nimport { inspectAgentProject } from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\nimport { instructionTargetsPath, instructionUsesGlob } from './instruction-path.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { bundledSkillPath } from './skill-manager.js'\n\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst BASIC = 'dingtalk-basic-behavior'\nconst BASIC_INSTRUCTION = '.agents/skills/dingtalk-basic-behavior/SKILL.md'\nconst DIRECTORY_HASH = digest('dingtalk-agent/directory@1')\nconst TEMPLATE_MARKER = /<(?:Agent 名称|岗位\\/角色|人群、团队或工作场域|长期目标|主动负责的事项|可观察的交付物|明确不做或必须升级确认的事项|岗位稳定的输入、判断、交付与验收范式|何时自行推进、何时交给谁|本体级常见错误 [12]|纠偏动作 [12]|Role Skill names|role-skill-name|Role Skill 名称|岗位职责或工作流|领域判断、输入与交付物|相邻职责或明确交接边界|岗位特有的禁区或必须升级条件|领域输入|领域方法\\/SOP|领域常见错误|领域纠偏动作|可观察结果 [12]|route)>/u\n\nexport interface AgentEnhanceOptions {\n bindings?: string\n projectName?: string\n roleSkills?: string[]\n model?: string\n memory?: string\n knowledge?: string\n artifacts?: string\n stateDir?: string\n profile?: string\n expectedUserId?: string\n cliVersion?: string\n planId?: string\n yes?: boolean\n}\n\nexport interface AgentEnhanceOperation {\n id: string\n kind: 'create-file' | 'update-file' | 'create-directory' | 'replace-directory' | 'preserve'\n path: string\n beforeHash: string\n afterHash: string\n backupRequired: boolean\n reason: string\n}\n\nexport interface AgentEnhancePlan {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1'\n planId: string\n ready: boolean\n status: 'ready' | 'blocked'\n sideEffect: false\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n source: { kind: 'git-checkout' | 'local-folder'; revision: string }\n projectName: string\n roleSkills: string[]\n bindings: string\n baselineHash: string\n desiredHash: string\n operations: AgentEnhanceOperation[]\n blockers: string[]\n warnings: string[]\n semanticReview: {\n required: boolean\n files: string[]\n why: string\n }\n apply: { command: string; requiresCurrentPlanId: true }\n verification: { commands: string[] }\n}\n\nexport interface AgentEnhanceReceipt {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1'\n status: 'applied'\n operationId: string\n planId: string\n sideEffect: 'local-files-only'\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n backupRoot: string\n idempotent: boolean\n changes: AgentEnhanceOperation[]\n audit: {\n status: 'ready' | 'partial'\n ready: boolean\n missing: string[]\n commands: string[]\n }\n}\n\ninterface TreePayload {\n files: Map<string, Buffer>\n hash: string\n}\n\ninterface BuiltEnhancement {\n plan: AgentEnhancePlan\n files: Map<string, string>\n trees: Map<string, TreePayload>\n directories: Set<string>\n bindingsValue: AgentBindings\n}\n\nexport function planAgentEnhancement(\n root: string, options: AgentEnhanceOptions = {},\n): AgentEnhancePlan {\n return buildEnhancement(root, options).plan\n}\n\nexport function applyAgentEnhancement(\n root: string, options: AgentEnhanceOptions,\n): AgentEnhanceReceipt {\n if (!options.yes) throw new Error('agent enhance apply 必须显式传 --yes')\n if (!String(options.planId || '').trim()) {\n throw new Error('agent enhance apply 必须传当前 dry-run 返回的 --plan-id')\n }\n const built = buildEnhancement(root, options)\n const { plan } = built\n if (!plan.ready) throw new Error(`agent enhance plan 被阻塞: ${plan.blockers.join('; ')}`)\n if (options.planId !== plan.planId) {\n throw new Error(`agent enhance planId 已过期或不匹配: expected=${plan.planId}`)\n }\n const changes = plan.operations.filter((item) => item.kind !== 'preserve')\n const operationId = `agent_enhance_${Date.now()}_${randomUUID().slice(0, 8)}`\n const backupRelative = changes.some((item) => item.backupRequired)\n ? join('.dingtalk-agent', 'backups', 'agent-enhance', operationId) : ''\n const backupRoot = backupRelative ? resolve(plan.root, backupRelative) : ''\n const backedUp = new Set<string>()\n const created = new Set<string>()\n let audit: ReturnType<typeof auditAgent>\n\n try {\n if (backupRoot) {\n for (const operation of changes.filter((item) => item.backupRequired)) {\n const source = safeTarget(plan.root, operation.path)\n const destination = resolve(backupRoot, operation.path)\n copyEntry(source, destination)\n backedUp.add(operation.path)\n }\n writeAtomic(join(backupRoot, 'manifest.json'), JSON.stringify({\n $schema: 'dingtalk-agent/agent-enhancement-backup@1',\n operationId, planId: plan.planId,\n entries: [...backedUp].sort().map((path) => ({\n path,\n hash: stateHash(safeTarget(plan.root, path)),\n })),\n }, null, 2) + '\\n')\n }\n for (const operation of changes) {\n const target = safeTarget(plan.root, operation.path)\n if (!existsSync(target)) created.add(operation.path)\n if (operation.kind === 'create-directory') {\n mkdirSync(target, { recursive: true })\n } else if (operation.kind === 'create-file' || operation.kind === 'update-file') {\n writeAtomic(target, built.files.get(operation.path)!)\n } else if (operation.kind === 'replace-directory') {\n rmSync(target, { recursive: true, force: true })\n writeTree(target, built.trees.get(operation.path)!)\n }\n const actual = operation.kind === 'create-directory'\n ? (existsSync(target) && lstatSync(target).isDirectory() && !lstatSync(target).isSymbolicLink()\n ? DIRECTORY_HASH : '')\n : stateHash(target)\n if (actual !== operation.afterHash) {\n throw new Error(`写后 hash 不一致: ${operation.path}`)\n }\n }\n const bindingsPath = safeTarget(plan.root, plan.bindings)\n const loaded = loadAgentBindings(plan.root, relative(plan.root, bindingsPath))\n audit = auditAgent(plan.root, {\n bootstrap: { context: loaded.context },\n bindings: { path: loaded.path, hash: loaded.hash },\n requiredSkills: plan.roleSkills,\n })\n } catch (error) {\n rollback(plan.root, [...changes].reverse(), backupRoot, backedUp, created)\n throw new Error(`agent enhance 失败,已按备份回滚: ${error.message}`)\n }\n return {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1',\n status: 'applied', operationId, planId: plan.planId,\n sideEffect: 'local-files-only', dingtalkSideEffect: false, triggerSideEffect: false,\n root: plan.root,\n backupRoot: backupRoot ? relative(plan.root, backupRoot).split('\\\\').join('/') : '',\n idempotent: changes.length === 0,\n changes,\n audit: {\n status: audit.status, ready: audit.ready, missing: audit.missing,\n commands: audit.verification.commands,\n },\n }\n}\n\nfunction buildEnhancement(root: string, options: AgentEnhanceOptions): BuiltEnhancement {\n const rootReal = realpathSync(resolve(root))\n assertDirectory(rootReal, 'Agent root')\n const packageRoot = resolvePackageRoot(import.meta.url)\n const bindingsRef = safeRelative(options.bindings || 'agent.bindings.json', 'bindings')\n const existingProjectPath = join(rootReal, 'dingtalk-agent.json')\n const existingProject = existsSync(existingProjectPath)\n ? readValidatedProject(rootReal, options.cliVersion || '') : null\n const inferredName = normalizeName(basename(rootReal))\n const projectName = String(options.projectName || existingProject?.name || inferredName).trim()\n const blockers: string[] = []\n const warnings: string[] = []\n if (existingProject && existingProject.agent?.definition !== 'AGENTS.md') {\n blockers.push(\n `现有 agent.definition=${existingProject.agent?.definition || '(missing)'};` +\n 'compose 当前只装配 OpenCode 项目根 AGENTS.md 原生 rule,拒绝生成双本体 Agent',\n )\n }\n const managedGlobInstructions = conflictingManagedInstructionGlobs(\n rootReal, existingProject?.agent?.definition || 'AGENTS.md')\n if (managedGlobInstructions.length) {\n blockers.push(\n 'opencode.json#instructions 中有 glob/extglob 可能命中本体或 Basic;' +\n `请改成可证明不重叠的模式或精确路径: ${managedGlobInstructions.join(', ')}`,\n )\n }\n if (!NAME.test(projectName)) blockers.push('缺少合法 project name;请传 --project-name <stable-name>')\n if (!options.projectName && !existingProject) {\n warnings.push(`project name 由目录名推导为 ${projectName || '(invalid)'}`)\n }\n\n const discovered = discoverRoleSkills(rootReal)\n const requested = (options.roleSkills || []).map((item) => item.trim()).filter(Boolean)\n const roleCandidates = [...new Set([...discovered.names, ...requested])].sort()\n const invalidRoles = roleCandidates.filter((name) => !NAME.test(name) || name === BASIC)\n const roleSkills = roleCandidates.filter((name) => NAME.test(name) && name !== BASIC)\n if (invalidRoles.length) blockers.push(`Role Skill name 非法: ${invalidRoles.join(', ')}`)\n if (!roleSkills.length && !invalidRoles.length) {\n blockers.push('没有发现 Role Skill;请传 --role-skill <name>')\n }\n\n const files = new Map<string, string>()\n const trees = new Map<string, TreePayload>()\n const directories = new Set<string>()\n const semanticFiles: string[] = []\n const bindingsPath = join(rootReal, bindingsRef)\n const existingBindings = existsSync(bindingsPath)\n ? loadAgentBindings(rootReal, bindingsRef).value : null\n const existingLocalWorkspace = existingProject?.workspaces?.['local-dev'] || null\n if (existingLocalWorkspace && existingLocalWorkspace.provider?.kind !== 'opencode') {\n blockers.push('现有 local-dev 不是 OpenCode workspace;拒绝覆盖其 Provider')\n }\n const bindingsValue: AgentBindings = {\n $schema: 'dingtalk-agent/agent-bindings@1',\n agent: existingBindings?.agent || 'local-dir:.',\n skills: existingBindings?.skills || 'local-dir:skills',\n memory: options.memory || existingBindings?.memory ||\n existingLocalWorkspace?.storage?.memory || 'local-md:MEMORY.md',\n knowledge: options.knowledge || existingBindings?.knowledge ||\n existingLocalWorkspace?.storage?.knowledge || 'local-md:knowledge/INDEX.md',\n artifacts: options.artifacts || existingBindings?.artifacts ||\n existingLocalWorkspace?.storage?.artifacts || 'local-dir:.dingtalk-agent/artifacts',\n stateDir: options.stateDir || existingBindings?.stateDir || '.dingtalk-agent',\n authority: {\n profile: options.profile ?? existingBindings?.authority.profile ?? '',\n expectedUserId: options.expectedUserId ?? existingBindings?.authority.expectedUserId ?? '',\n },\n }\n validateBindingsCandidate(rootReal, bindingsValue)\n const remote = [bindingsValue.memory, bindingsValue.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))\n if (remote && (!bindingsValue.authority.profile || !bindingsValue.authority.expectedUserId)) {\n blockers.push('远端 memory/knowledge 需要同时提供 --profile 与 --expected-user-id')\n }\n\n const agentsPath = join(rootReal, 'AGENTS.md')\n if (!existsSync(agentsPath)) {\n const body = readAsset(packageRoot, 'AGENTS.template.md')\n .replace('<Agent 名称>', projectName || '<Agent 名称>')\n .replace('<Role Skill names>', roleSkills.join(', ') || '<Role Skill names>')\n files.set('AGENTS.md', body)\n semanticFiles.push('AGENTS.md')\n } else {\n assertRegularFile(agentsPath, 'AGENTS.md')\n const body = readFileSync(agentsPath, 'utf8')\n files.set('AGENTS.md', body)\n if (TEMPLATE_MARKER.test(body)) semanticFiles.push('AGENTS.md')\n }\n\n for (const name of roleSkills) {\n const rolePath = `skills/${name}`\n const source = join(rootReal, rolePath)\n let tree: TreePayload\n if (existsSync(source)) {\n tree = readTree(source, `Role Skill ${name}`)\n const skillBody = tree.files.get('SKILL.md')?.toString('utf8') || ''\n const actualName = frontmatterName(skillBody)\n if (actualName !== name) blockers.push(`Role Skill ${name} frontmatter name=${actualName || '(missing)'}`)\n if (TEMPLATE_MARKER.test(skillBody)) semanticFiles.push(`${rolePath}/SKILL.md`)\n } else {\n const body = readAsset(packageRoot, 'role-skill.template.md')\n .replaceAll('<role-skill-name>', name)\n .replace('<Role Skill 名称>', name)\n tree = treeFromFiles(new Map([['SKILL.md', Buffer.from(body)]]))\n trees.set(rolePath, tree)\n semanticFiles.push(`${rolePath}/SKILL.md`)\n }\n trees.set(`.agents/skills/${name}`, tree)\n }\n\n trees.set(`.agents/skills/${BASIC}`, readTree(\n bundledSkillPath(packageRoot, BASIC), 'Canonical Basic Skill'))\n files.set(bindingsRef, JSON.stringify(bindingsValue, null, 2) + '\\n')\n\n const project = desiredProject(existingProject, {\n projectName, roleSkills, model: options.model || 'deepseek/deepseek-chat',\n modelExplicit: options.model !== undefined,\n cliVersion: options.cliVersion || '', bindings: bindingsValue,\n })\n files.set('dingtalk-agent.json', JSON.stringify(project, null, 2) + '\\n')\n files.set('opencode.json', JSON.stringify(desiredOpenCode(\n rootReal, roleSkills, project.agent.definition,\n ), null, 2) + '\\n')\n files.set('.gitignore', desiredGitignore(rootReal, bindingsValue.stateDir))\n\n for (const [label, route] of Object.entries({\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n })) {\n if (!route.startsWith('local-md:')) continue\n const ref = safeRelative(route.slice('local-md:'.length), `${label} route`)\n const path = join(rootReal, ref)\n if (!existsSync(path)) {\n files.set(ref, `# ${label === 'memory' ? 'Memory' : 'Knowledge'}\\n\\n`)\n } else assertRegularFile(path, `${label} route`)\n }\n const artifactRef = safeLocalRoute(bindingsValue.artifacts, 'local-dir', 'artifacts')\n if (resolve(rootReal, artifactRef) === rootReal) {\n throw new Error('artifacts 必须是 Agent 根目录内的独立目录,不能等于根目录')\n }\n directories.add(artifactRef)\n directories.add(safeRelative(bindingsValue.stateDir, 'stateDir'))\n\n const operations = buildOperations(rootReal, files, trees, directories)\n const baselineHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, beforeHash: item.beforeHash,\n }))))\n const desiredHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, afterHash: item.afterHash,\n }))))\n const source = sourceIdentity(rootReal)\n const planSeed = {\n schema: 'dingtalk-agent/agent-enhancement-plan@1', baselineHash, desiredHash,\n root: rootReal, source, projectName, roleSkills, bindings: bindingsRef,\n options: {\n model: options.model || 'deepseek/deepseek-chat',\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n artifacts: bindingsValue.artifacts, stateDir: bindingsValue.stateDir,\n profileConfigured: Boolean(bindingsValue.authority.profile),\n expectedUserConfigured: Boolean(bindingsValue.authority.expectedUserId),\n },\n }\n const planId = `aep_${digest(stableStringify(planSeed)).slice(0, 32)}`\n const roleArgument = roleSkills.join(',') || '<role-skill>'\n const common = [\n ...(options.projectName ? ['--project-name', shellArg(options.projectName)] : []),\n ...(roleSkills.length ? ['--role-skill', shellArg(roleSkills.join(','))] : []),\n ...(options.model ? ['--model', shellArg(options.model)] : []),\n ...(options.memory ? ['--memory', shellArg(options.memory)] : []),\n ...(options.knowledge ? ['--knowledge', shellArg(options.knowledge)] : []),\n ...(options.artifacts ? ['--artifacts', shellArg(options.artifacts)] : []),\n ...(options.stateDir ? ['--state-dir', shellArg(options.stateDir)] : []),\n ...(options.profile !== undefined ? ['--profile', '\"$DTA_DWS_PROFILE\"'] : []),\n ...(options.expectedUserId !== undefined\n ? ['--expected-user-id', '\"$DTA_EXPECTED_USER_ID\"'] : []),\n ...(bindingsRef !== 'agent.bindings.json' ? ['--bindings', shellArg(bindingsRef)] : []),\n ].join(' ')\n const applyCommand = `dta agent enhance ${common}${common ? ' ' : ''}--plan-id ${planId} --yes --json`\n const plan: AgentEnhancePlan = {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1', planId,\n ready: blockers.length === 0, status: blockers.length ? 'blocked' : 'ready',\n sideEffect: false, dingtalkSideEffect: false, triggerSideEffect: false,\n root: rootReal,\n source, projectName, roleSkills, bindings: bindingsRef,\n baselineHash, desiredHash, operations, blockers, warnings,\n semanticReview: {\n required: semanticFiles.length > 0,\n files: [...new Set(semanticFiles)].sort(),\n why: semanticFiles.length\n ? 'CLI 只补结构,不替开发者虚构本体定义、岗位底线、做事范式、常犯错误或领域 SOP;请由 compose Skill 完成语义评审。'\n : '现有本体与 Role Skill 未命中模板占位符。',\n },\n apply: { command: applyCommand, requiresCurrentPlanId: true },\n verification: { commands: [\n `dta bootstrap --bindings ${shellArg(bindingsRef)} --json`,\n `dta agent audit --bindings ${shellArg(bindingsRef)} --require-skill ${shellArg(roleArgument)} --json`,\n `dta workspace create local-dev --dry-run --json`,\n ] },\n }\n return { plan, files, trees, directories, bindingsValue }\n}\n\nfunction desiredProject(existing: Record<string, any> | null, input: {\n projectName: string; roleSkills: string[]; model: string; modelExplicit: boolean\n cliVersion: string; bindings: AgentBindings\n}): Record<string, any> {\n if (existing) {\n const next = structuredClone(existing)\n next.name = input.projectName\n next.agent.skills = [...new Set([BASIC, ...(next.agent.skills || []), ...input.roleSkills])]\n const local = next.workspaces['local-dev']\n if (!local) {\n next.workspaces['local-dev'] = localOpenCodeWorkspace(input)\n } else if (local.provider?.kind === 'opencode') {\n if (input.modelExplicit) local.provider.model = input.model\n local.storage = {\n ...local.storage,\n memory: input.bindings.memory,\n knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n local.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n } else {\n delete local.authority\n }\n }\n return next\n }\n const version = input.cliVersion.match(/^(\\d+\\.\\d+\\.\\d+)/)?.[1] || '0.1.0'\n return {\n $schema: 'dingtalk-agent/project@1', name: input.projectName,\n dtaVersion: `^${version}`,\n agent: { definition: 'AGENTS.md', skills: [BASIC, ...input.roleSkills] },\n workspaces: { 'local-dev': localOpenCodeWorkspace(input) },\n }\n}\n\nfunction localOpenCodeWorkspace(input: {\n model: string\n bindings: AgentBindings\n}): Record<string, any> {\n const workspace: Record<string, any> = {\n stage: 'dev', provider: { kind: 'opencode', model: input.model },\n storage: {\n memory: input.bindings.memory, knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n },\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n workspace.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n }\n return workspace\n}\n\nfunction desiredOpenCode(\n root: string, roles: string[], definitionInstruction: string,\n): Record<string, any> {\n const path = join(root, 'opencode.json')\n let value: Record<string, any> = { $schema: 'https://opencode.ai/config.json' }\n if (existsSync(path)) {\n assertRegularFile(path, 'opencode.json')\n try { value = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`opencode.json 不是合法 JSON: ${error.message}`) }\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('opencode.json 必须是 JSON object')\n }\n }\n if (value.instructions !== undefined && !Array.isArray(value.instructions)) {\n throw new Error('opencode.json#instructions 必须是 array;拒绝覆盖未知结构')\n }\n if ((value.instructions || []).some((item: unknown) => typeof item !== 'string')) {\n throw new Error('opencode.json#instructions 只能包含字符串;拒绝静默删除未知条目')\n }\n const definition = safeRelative(definitionInstruction, 'agent.definition')\n const instructions = (value.instructions || []) as string[]\n value.instructions = [\n ...instructions.filter((item: string) =>\n !instructionTargetsPath(root, item, definition) &&\n !instructionTargetsPath(root, item, BASIC_INSTRUCTION)),\n BASIC_INSTRUCTION,\n ]\n const permission = value.permission === undefined ? {} : value.permission\n if (!permission || typeof permission !== 'object' || Array.isArray(permission)) {\n throw new Error('opencode.json#permission 必须是 object;拒绝覆盖未知结构')\n }\n const skill = permission.skill === undefined ? {} : permission.skill\n if (!skill || typeof skill !== 'object' || Array.isArray(skill)) {\n throw new Error('opencode.json#permission.skill 必须是 object;拒绝覆盖未知结构')\n }\n value.permission = { ...permission, skill: {\n ...skill, [BASIC]: 'allow', ...Object.fromEntries(roles.map((name) => [name, 'allow'])),\n } }\n return value\n}\n\nfunction conflictingManagedInstructionGlobs(\n root: string, definitionInstruction: string,\n): string[] {\n const path = join(root, 'opencode.json')\n if (!existsSync(path)) return []\n try {\n const value = JSON.parse(readFileSync(path, 'utf8')) as Record<string, unknown>\n if (!Array.isArray(value.instructions)) return []\n const definition = safeRelative(definitionInstruction, 'agent.definition')\n return value.instructions.filter((item): item is string => typeof item === 'string')\n .filter((item) => instructionUsesGlob(item) && (\n instructionTargetsPath(root, item, definition) ||\n instructionTargetsPath(root, item, BASIC_INSTRUCTION)))\n } catch { return [] }\n}\n\nfunction buildOperations(\n root: string, files: Map<string, string>, trees: Map<string, TreePayload>, directories: Set<string>,\n): AgentEnhanceOperation[] {\n const operations: AgentEnhanceOperation[] = []\n for (const [path, body] of [...files.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n const beforeHash = stateHash(target)\n const afterHash = digest(Buffer.from(body).toString('base64'))\n operations.push({\n id: `file:${path}`,\n kind: !existsSync(target) ? 'create-file' : beforeHash === afterHash ? 'preserve' : 'update-file',\n path, beforeHash, afterHash,\n backupRequired: existsSync(target) && beforeHash !== afterHash,\n reason: fileReason(path),\n })\n }\n for (const [path, tree] of [...trees.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`受管 Skill exposure 必须是普通目录,拒绝覆盖: ${path}`)\n }\n const beforeHash = stateHash(target)\n operations.push({\n id: `tree:${path}`,\n kind: beforeHash === tree.hash ? 'preserve' : 'replace-directory',\n path, beforeHash, afterHash: tree.hash,\n backupRequired: existsSync(target) && beforeHash !== tree.hash,\n reason: path.startsWith('.agents/') ? '物化目标 Host 的精确 Skill exposure' : '补齐缺失的 Role Skill 模板',\n })\n }\n for (const path of [...directories].sort()) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`本地路由必须是普通目录: ${path}`)\n }\n operations.push({\n id: `directory:${path}`, kind: existsSync(target) ? 'preserve' : 'create-directory',\n path, beforeHash: existsSync(target) ? DIRECTORY_HASH : '', afterHash: DIRECTORY_HASH,\n backupRequired: false, reason: '建立本地 state/artifact 路由,不投影控制状态到远端',\n })\n }\n return operations.sort((a, b) => a.path.localeCompare(b.path))\n}\n\nfunction readValidatedProject(root: string, cliVersion: string): Record<string, any> {\n inspectAgentProject(root, cliVersion)\n return JSON.parse(readFileSync(join(root, 'dingtalk-agent.json'), 'utf8'))\n}\n\nfunction discoverRoleSkills(root: string): { names: string[] } {\n const base = join(root, 'skills')\n if (!existsSync(base)) return { names: [] }\n if (!lstatSync(base).isDirectory() || lstatSync(base).isSymbolicLink()) {\n throw new Error('skills 必须是 Agent 根目录内的普通目录')\n }\n const names: string[] = []\n for (const entry of readdirSync(base, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || entry.name === BASIC) continue\n const file = join(base, entry.name, 'SKILL.md')\n if (!existsSync(file)) continue\n assertRegularFile(file, `Role Skill ${entry.name}`)\n const name = frontmatterName(readFileSync(file, 'utf8'))\n if (name !== entry.name) throw new Error(`Role Skill 目录与 frontmatter name 不一致: ${entry.name}/${name || '(missing)'}`)\n names.push(name)\n }\n return { names }\n}\n\nfunction validateBindingsCandidate(root: string, value: AgentBindings): void {\n for (const [label, route] of Object.entries({\n agent: value.agent, skills: value.skills, memory: value.memory,\n knowledge: value.knowledge, artifacts: value.artifacts,\n })) {\n const separator = route.indexOf(':')\n if (separator < 1 || !route.slice(separator + 1).trim()) throw new Error(`${label} route 非法`)\n if (!route.startsWith('local-')) continue\n safeRelative(route.slice(separator + 1), `${label} route`)\n }\n safeRelative(value.stateDir, 'stateDir')\n if (resolve(root, value.stateDir) === root) throw new Error('stateDir 不能等于 Agent 根目录')\n}\n\nfunction desiredGitignore(root: string, stateDir: string): string {\n const path = join(root, '.gitignore')\n const state = safeRelative(stateDir, 'stateDir')\n const entries = ['.dingtalk-agent/']\n if (state !== '.dingtalk-agent' && !state.startsWith('.dingtalk-agent/')) {\n entries.push(`${state.replace(/\\/+$/, '')}/`)\n }\n if (!existsSync(path)) return `${entries.join('\\n')}\\n`\n assertRegularFile(path, '.gitignore')\n let body = readFileSync(path, 'utf8')\n const lines = new Set(body.split(/\\r?\\n/).map((line) => line.trim().replace(/\\/+$/, '')))\n for (const entry of entries) {\n if (lines.has(entry.replace(/\\/+$/, ''))) continue\n body = `${body}${body && !body.endsWith('\\n') ? '\\n' : ''}${entry}\\n`\n lines.add(entry.replace(/\\/+$/, ''))\n }\n return body\n}\n\nfunction sourceIdentity(root: string): AgentEnhancePlan['source'] {\n const git = join(root, '.git')\n if (!existsSync(git)) return { kind: 'local-folder', revision: '' }\n let gitDirectory = git\n if (!lstatSync(git).isDirectory()) {\n const ref = readFileSync(git, 'utf8').trim().match(/^gitdir:\\s*(.+)$/)?.[1]\n if (!ref) return { kind: 'git-checkout', revision: '' }\n gitDirectory = resolve(root, ref)\n }\n if (!gitDirectory || !existsSync(gitDirectory) || !statSync(gitDirectory).isDirectory()) {\n return { kind: 'git-checkout', revision: '' }\n }\n let revision = ''\n const head = join(gitDirectory, 'HEAD')\n if (existsSync(head) && statSync(head).isFile()) {\n const headValue = readFileSync(head, 'utf8').trim()\n const ref = headValue.match(/^ref:\\s*(.+)$/)?.[1] || ''\n if (!ref) revision = headValue\n else {\n const commonDirFile = join(gitDirectory, 'commondir')\n const commonDir = existsSync(commonDirFile)\n ? resolve(gitDirectory, readFileSync(commonDirFile, 'utf8').trim()) : gitDirectory\n const refPath = join(commonDir, ref)\n if (existsSync(refPath)) revision = readFileSync(refPath, 'utf8').trim()\n else {\n const packed = join(commonDir, 'packed-refs')\n if (existsSync(packed)) {\n revision = readFileSync(packed, 'utf8').split(/\\r?\\n/)\n .find((line) => line.endsWith(` ${ref}`))?.split(' ')[0] || ''\n }\n }\n }\n }\n return { kind: 'git-checkout', revision }\n}\n\nfunction fileReason(path: string): string {\n if (path === 'AGENTS.md') return '补齐本体结构;语义内容仍需开发者评审'\n if (path === 'agent.bindings.json') return '固化本体、语义存储与宿主私有状态路由'\n if (path === 'dingtalk-agent.json') return '把目录升级为可发现、可版本化的 Agent Project'\n if (path === 'opencode.json') return '移除冗余 AGENTS instruction,并合并唯一 Basic instruction 与 Role Skill permission'\n if (path === '.gitignore') return '防止私有 state、Receipt 与原始证据进入 Git'\n return '补齐本地语义介质入口'\n}\n\nfunction readAsset(packageRoot: string, name: string): string {\n return readFileSync(join(bundledSkillPath(packageRoot, 'dingtalk-agent-compose'), 'assets', name), 'utf8')\n}\n\nfunction readTree(path: string, label: string): TreePayload {\n if (!existsSync(path) || !lstatSync(path).isDirectory() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通目录: ${path}`)\n }\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`${label} 不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n if (!files.has('SKILL.md')) throw new Error(`${label} 缺少 SKILL.md`)\n return treeFromFiles(files)\n}\n\nfunction treeFromFiles(files: Map<string, Buffer>): TreePayload {\n const index = [...files.entries()].sort(([a], [b]) => a.localeCompare(b))\n .map(([path, body]) => ({ path, hash: digest(body.toString('base64')) }))\n return { files, hash: digest(stableStringify(index)) }\n}\n\nfunction writeTree(target: string, tree: TreePayload): void {\n mkdirSync(target, { recursive: true })\n for (const [path, body] of tree.files) {\n const out = resolve(target, path)\n if (!isInside(target, out)) throw new Error(`Skill tree path 越界: ${path}`)\n mkdirSync(dirname(out), { recursive: true })\n writeFileSync(out, body, { flag: 'wx' })\n }\n}\n\nfunction copyEntry(source: string, destination: string): void {\n if (!existsSync(source)) throw new Error(`备份源不存在: ${source}`)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, {\n recursive: lstatSync(source).isDirectory(), errorOnExist: true,\n filter: (path) => {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`备份拒绝 symlink: ${path}`)\n return true\n },\n })\n}\n\nfunction rollback(\n root: string, operations: AgentEnhanceOperation[], backupRoot: string,\n backedUp: Set<string>, created: Set<string>,\n): void {\n for (const operation of operations) {\n const target = safeTarget(root, operation.path)\n if (created.has(operation.path)) rmSync(target, { recursive: true, force: true })\n else if (backedUp.has(operation.path)) {\n rmSync(target, { recursive: true, force: true })\n copyEntry(resolve(backupRoot, operation.path), target)\n }\n }\n}\n\nfunction stateHash(path: string): string {\n if (!existsSync(path)) return ''\n const stat = lstatSync(path)\n if (stat.isSymbolicLink()) throw new Error(`受管路径不允许 symlink: ${path}`)\n if (stat.isFile()) return digest(readFileSync(path).toString('base64'))\n if (!stat.isDirectory()) throw new Error(`受管路径类型不支持: ${path}`)\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`受管目录不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n return treeFromFiles(files).hash\n}\n\nfunction writeAtomic(path: string, body: string): void {\n mkdirSync(dirname(path), { recursive: true })\n const temporary = `${path}.${process.pid}.${Date.now()}.tmp`\n writeFileSync(temporary, body, { flag: 'wx' })\n renameSync(temporary, path)\n}\n\nfunction assertDirectory(path: string, label: string): void {\n if (!existsSync(path) || !statSync(path).isDirectory()) throw new Error(`${label} 不存在或不是目录`)\n}\n\nfunction assertRegularFile(path: string, label: string): void {\n if (!existsSync(path) || !lstatSync(path).isFile() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通文件`)\n }\n}\n\nfunction safeTarget(root: string, path: string): string {\n const ref = safeRelative(path, 'managed path')\n const target = resolve(root, ref)\n if (!isInside(root, target)) throw new Error(`受管路径越出 Agent root: ${path}`)\n let current = root\n for (const part of ref.split('/').slice(0, -1)) {\n current = join(current, part)\n if (existsSync(current) && lstatSync(current).isSymbolicLink()) {\n throw new Error(`受管路径不能穿过 symlink: ${path}`)\n }\n }\n return target\n}\n\nfunction safeRelative(value: string, label: string): string {\n const text = String(value || '').trim().split('\\\\').join('/')\n if (!text || text.startsWith('/') || text.split('/').some((item) => !item || item === '..')) {\n throw new Error(`${label} 必须是 Agent 根目录内的相对路径: ${value}`)\n }\n return text.replace(/^\\.\\//, '')\n}\n\nfunction safeLocalRoute(route: string, provider: string, label: string): string {\n if (!route.startsWith(`${provider}:`)) throw new Error(`${label} 必须使用 ${provider}`)\n return safeRelative(route.slice(provider.length + 1), label)\n}\n\nfunction frontmatterName(body: string): string {\n const block = body.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/)?.[1] || ''\n return block.match(/^name:\\s*[\"']?([^\"'\\r\\n]+)[\"']?\\s*$/m)?.[1]?.trim() || ''\n}\n\nfunction normalizeName(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 64)\n}\n\nfunction shellArg(value: string): string {\n return /^[A-Za-z0-9_./:=@^+-]+$/.test(value) ? value : `'${value.replaceAll(\"'\", `'\"'\"'`)}'`\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"]}
@@ -23,6 +23,8 @@ export const MANAGED_AGENT_PLATFORMS = [
23
23
  { role: 'ops', name: 'multica-external', purpose: '平台运维执行体:供给/绑定机器人/观测/调度(纯 HTTPS)' },
24
24
  ],
25
25
  commands: ['deploy', 'promote', 'observe'],
26
+ suggestedEndpoint: 'https://pre-fde-workbench.dingtalk.com',
27
+ endpointEnv: 'MULTICA_SERVER_URL',
26
28
  },
27
29
  {
28
30
  name: 'deap',
@@ -152,11 +154,52 @@ export function readPlatformDoc(packageRoot, platformName) {
152
154
  export function statusLabel(status) {
153
155
  return status === 'supported' ? '已支持' : '敬请期待';
154
156
  }
157
+ /**
158
+ * 解析平台 endpoint,与真实执行体(multica_ext.py 读 MULTICA_SERVER_URL/--profile)同源,
159
+ * 不新造命名空间、不静默默认连预发。顺序:
160
+ * MULTICA_SERVER_URL 环境变量 > 项目 config(dingtalk-agent.json#multicaEndpoint /
161
+ * .dingtalk-agent/agent-platform.json.endpoint)> 恰好一个已登录 profile 的 server_url
162
+ * (多个则 ambiguous,不自动挑)> suggestedEndpoint(仅建议,未确认)。
163
+ */
164
+ export function resolveEndpoint(platformName, start = process.cwd(), env = process.env, home = homedir()) {
165
+ const definition = agentPlatformDefinition(platformName);
166
+ const envVar = definition?.endpointEnv || 'MULTICA_SERVER_URL';
167
+ const base = { envVar, candidates: [] };
168
+ const fromEnv = String(env[envVar] || '').trim();
169
+ if (fromEnv)
170
+ return { endpoint: fromEnv, source: 'env', confirmed: true, ...base };
171
+ const fromConfig = projectEndpoint(start);
172
+ if (fromConfig)
173
+ return { endpoint: fromConfig, source: 'project-config', confirmed: true, ...base };
174
+ const serverUrls = [...new Set(multicaTargets(home)
175
+ .map((target) => target.serverUrl.trim()).filter(Boolean))];
176
+ if (serverUrls.length === 1) {
177
+ return { endpoint: serverUrls[0], source: 'profile', confirmed: true, ...base };
178
+ }
179
+ if (serverUrls.length > 1) {
180
+ return { endpoint: '', source: 'ambiguous', confirmed: false, ...base, candidates: serverUrls };
181
+ }
182
+ if (definition?.suggestedEndpoint) {
183
+ return { endpoint: definition.suggestedEndpoint, source: 'suggested', confirmed: false, ...base };
184
+ }
185
+ return { endpoint: '', source: 'none', confirmed: false, ...base };
186
+ }
187
+ function projectEndpoint(start) {
188
+ const projectRoot = findAgentProjectRoot(start);
189
+ if (!projectRoot)
190
+ return '';
191
+ const manifest = readJsonOrNull(join(projectRoot, PROJECT_FILE));
192
+ const fromManifest = typeof manifest?.multicaEndpoint === 'string' ? manifest.multicaEndpoint.trim() : '';
193
+ if (fromManifest)
194
+ return fromManifest;
195
+ const platform = readJsonOrNull(join(projectRoot, AGENT_PLATFORM_FILE));
196
+ return typeof platform?.endpoint === 'string' ? platform.endpoint.trim() : '';
197
+ }
155
198
  /**
156
199
  * 平台工具链就绪检查(只读,不阻断):选择/查看平台归属时提示用户缺什么、怎么补。
157
200
  * 强制门禁仍由 requireSupportedAgentPlatform 与各平台命令自身承担。
158
201
  */
159
- export function agentPlatformReadiness(name, env = process.env, home = homedir()) {
202
+ export function agentPlatformReadiness(name, env = process.env, home = homedir(), start = process.cwd()) {
160
203
  if (name !== 'multica-dingtalk')
161
204
  return [];
162
205
  const checks = [];
@@ -167,11 +210,15 @@ export function agentPlatformReadiness(name, env = process.env, home = homedir()
167
210
  id: 'multica-cli', ok: false, summary: '未找到 multica CLI',
168
211
  hint: '安装:curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash',
169
212
  });
213
+ const ep = resolveEndpoint(name, start, env, home);
214
+ const loginTarget = ep.endpoint || '<endpoint>';
215
+ const suffix = ep.confirmed ? '' : '(未确认,请核对是预发还是生产)';
170
216
  checks.push(hasMulticaToken(home)
171
217
  ? { id: 'multica-login', ok: true, summary: 'Multica 已登录(本地存在 token)' }
172
218
  : {
173
219
  id: 'multica-login', ok: false, summary: 'Multica 尚未登录',
174
- hint: '登录:multica login --server-url <endpoint>(预发环境为 https://pre-fde-workbench.dingtalk.com)',
220
+ hint: `登录:multica login --server-url ${loginTarget} --token <你的 mul_ PAT>` +
221
+ `(endpoint 来源 ${ep.source}${suffix};用 MULTICA_SERVER_URL 或登录别的 profile 可切换)`,
175
222
  });
176
223
  if (['HTTPS_PROXY', 'https_proxy', 'ALL_PROXY', 'all_proxy'].some((key) => env[key])) {
177
224
  checks.push({
@@ -1 +1 @@
1
- {"version":3,"file":"agent-platform.js","sourceRoot":"","sources":["../../src/agent-platform.ts"],"names":[],"mappings":"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","sourcesContent":["// Managed Agent Platform 注册表与工作区归属解析。\n//\n// 一个 Agent 工作区归属于至多一个托管平台;归属解析顺序固定:\n// DTA_AGENT_PLATFORM 环境变量 > dingtalk-agent.json#agentPlatform\n// > .dingtalk-agent/agent-platform.json > 按 Provider 声明推断。\n// 平台相关的方法学不写进 CLI——它们随对应平台的 Skill 包分发,只在用户选择该平台时安装。\n// 平台命令(如 deploy/promote/observe)必须先通过归属门禁;coming-soon 平台一律 fail-closed。\n\nimport { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, parse, resolve } from 'node:path'\n\nimport { findAgentProjectRoot } from './development-workspace.js'\nimport { findExecutable } from './doctor.js'\nimport { installGlobalSkill, type GlobalSkillStatus } from './skill-manager.js'\n\nexport type AgentPlatformStatus = 'supported' | 'coming-soon'\n\nexport interface AgentPlatformSkillBinding {\n role: string\n name: string\n purpose: string\n}\n\nexport interface AgentPlatformDefinition {\n name: string\n label: string\n status: AgentPlatformStatus\n description: string\n skills: AgentPlatformSkillBinding[]\n commands: string[]\n}\n\nexport const MANAGED_AGENT_PLATFORMS: AgentPlatformDefinition[] = [\n {\n name: 'multica-dingtalk',\n label: 'Multica (DingTalk)',\n status: 'supported',\n description: '钉钉 Multica 托管平台:供给、部署、钉钉机器人绑定、观测与调度。',\n skills: [\n { role: 'deploy', name: 'dingtalk-agent-deploy-multica', purpose: '经 dta 稳定 CLI 受控部署/晋级/观测到 Multica' },\n { role: 'boot', name: 'dingtalk-agent-boot-multica', purpose: '部署产物在 Multica Host 内每次任务的启动协议' },\n { role: 'ops', name: 'multica-external', purpose: '平台运维执行体:供给/绑定机器人/观测/调度(纯 HTTPS)' },\n ],\n commands: ['deploy', 'promote', 'observe'],\n },\n {\n name: 'deap',\n label: 'DEAP',\n status: 'coming-soon',\n description: '敬请期待。',\n skills: [],\n commands: [],\n },\n]\n\nexport const AGENT_PLATFORM_FILE = '.dingtalk-agent/agent-platform.json'\nconst PROJECT_FILE = 'dingtalk-agent.json'\n\nexport type AgentPlatformSource = 'env' | 'project-manifest' | 'platform-file' | 'inferred' | 'none'\n\nexport interface AgentPlatformResolution {\n $schema: 'dingtalk-agent/agent-platform-resolution@1'\n platform: string | null\n source: AgentPlatformSource\n file: string\n definition: AgentPlatformDefinition | null\n platforms: AgentPlatformDefinition[]\n}\n\nexport interface AgentPlatformUseResult extends AgentPlatformResolution {\n written: string\n skillInstalls: GlobalSkillStatus[]\n}\n\nexport function agentPlatformDefinition(name: string): AgentPlatformDefinition | null {\n return MANAGED_AGENT_PLATFORMS.find((item) => item.name === name) || null\n}\n\nexport function resolveAgentPlatform(\n start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const fromEnv = String(env.DTA_AGENT_PLATFORM || '').trim()\n if (fromEnv) return resolution(fromEnv, 'env', '')\n\n const projectRoot = findAgentProjectRoot(start)\n if (projectRoot) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (existsSync(manifestPath) && !lstatSync(manifestPath).isSymbolicLink()) {\n const manifest = readJsonOrNull(manifestPath)\n const declared = typeof manifest?.agentPlatform === 'string' ? manifest.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'project-manifest', manifestPath)\n }\n }\n\n const platformPath = findUp(start, AGENT_PLATFORM_FILE)\n if (platformPath) {\n const stored = readJsonOrNull(platformPath)\n const declared = typeof stored?.agentPlatform === 'string' ? stored.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'platform-file', platformPath)\n }\n\n if (projectRoot) {\n const manifest = readJsonOrNull(join(projectRoot, PROJECT_FILE))\n const providers = Object.values(manifest?.workspaces || {})\n .map((workspace: any) => workspace?.provider?.kind)\n if (providers.includes('multica')) {\n return resolution('multica-dingtalk', 'inferred', join(projectRoot, PROJECT_FILE))\n }\n }\n\n return resolution(null, 'none', '')\n}\n\nexport interface AgentPlatformUseOptions {\n packageRoot: string\n home?: string\n env?: NodeJS.ProcessEnv\n installSkills?: boolean\n}\n\nexport function useAgentPlatform(\n start: string, name: string, options: AgentPlatformUseOptions,\n): AgentPlatformUseResult {\n const definition = agentPlatformDefinition(name)\n if (!definition) {\n throw new Error(\n `未知 managed agent platform: ${name}\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => `${item.name}(${statusLabel(item.status)})`).join('、')}`,\n )\n }\n if (definition.status !== 'supported') {\n throw new Error(`${definition.label} 敬请期待——当前版本尚未开放该平台。`)\n }\n\n const projectRoot = findAgentProjectRoot(start)\n let written: string\n if (projectRoot && existsSync(join(projectRoot, PROJECT_FILE))) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n const manifest = readJsonOrNull(manifestPath)\n if (!manifest || typeof manifest !== 'object') {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON,无法写入 agentPlatform 归属`)\n }\n manifest.agentPlatform = definition.name\n writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\\n')\n written = manifestPath\n } else {\n const target = join(resolve(start), AGENT_PLATFORM_FILE)\n mkdirSync(dirname(target), { recursive: true })\n writeFileSync(target, JSON.stringify(\n { $schema: 'dingtalk-agent/agent-platform@1', agentPlatform: definition.name }, null, 2,\n ) + '\\n')\n written = target\n }\n\n const skillInstalls: GlobalSkillStatus[] = []\n if (options.installSkills !== false) {\n for (const skill of definition.skills) {\n skillInstalls.push(installGlobalSkill(options.packageRoot, {\n name: skill.name, home: options.home, env: options.env,\n }))\n }\n }\n\n return { ...resolveAgentPlatform(start, options.env || process.env), written, skillInstalls }\n}\n\n/** deploy/promote/observe 等平台命令的归属门禁:未归属、未知或 coming-soon 一律 fail-closed。 */\nexport function requireSupportedAgentPlatform(\n command: string, start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const resolved = resolveAgentPlatform(start, env)\n if (!resolved.platform) {\n throw new Error(\n `当前工作区未声明 managed agent platform,无法执行 \\`${command}\\`。\\n` +\n '先运行 `dta agent-platform use multica-dingtalk`,或设置 DTA_AGENT_PLATFORM 环境变量。',\n )\n }\n if (!resolved.definition) {\n throw new Error(\n `工作区声明了未知 platform: ${resolved.platform}(来源 ${resolved.source})。\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => item.name).join('、')}`,\n )\n }\n if (resolved.definition.status !== 'supported') {\n throw new Error(`${resolved.definition.label} 敬请期待——\\`${command}\\` 尚未在该平台开放。`)\n }\n if (!resolved.definition.commands.includes(command)) {\n throw new Error(`${resolved.definition.label} 不承接命令 \\`${command}\\`。`)\n }\n return resolved\n}\n\n/** dta 层的平台命令/角色(deploy、boot、ops…)关联到该平台内确切的 Skill 名。 */\nexport function platformSkillForRole(platformName: string, role: string): string | null {\n const definition = agentPlatformDefinition(platformName)\n return definition?.skills.find((item) => item.role === role)?.name || null\n}\n\nconst PLATFORM_DIRS: Record<string, string> = {\n 'multica-dingtalk': 'skills/platforms/multica-dingtalk',\n deap: 'skills/platforms/deap',\n}\n\n/** 平台说明文档(PLATFORM.md)在包内的路径;切换到该平台时应加载让维护者/Agent 知道各技能用途。 */\nexport function platformDocPath(packageRoot: string, platformName: string): string | null {\n const dir = PLATFORM_DIRS[platformName]\n if (!dir) return null\n const path = join(packageRoot, dir, 'PLATFORM.md')\n return existsSync(path) ? path : null\n}\n\nexport function readPlatformDoc(packageRoot: string, platformName: string): string {\n const path = platformDocPath(packageRoot, platformName)\n return path ? readFileSync(path, 'utf8') : ''\n}\n\nexport function statusLabel(status: AgentPlatformStatus): string {\n return status === 'supported' ? '已支持' : '敬请期待'\n}\n\nexport interface AgentPlatformReadinessCheck {\n id: string\n ok: boolean\n summary: string\n hint?: string\n}\n\n/**\n * 平台工具链就绪检查(只读,不阻断):选择/查看平台归属时提示用户缺什么、怎么补。\n * 强制门禁仍由 requireSupportedAgentPlatform 与各平台命令自身承担。\n */\nexport function agentPlatformReadiness(\n name: string, env: NodeJS.ProcessEnv = process.env, home = homedir(),\n): AgentPlatformReadinessCheck[] {\n if (name !== 'multica-dingtalk') return []\n const checks: AgentPlatformReadinessCheck[] = []\n const cli = findExecutable('multica', env)\n checks.push(cli\n ? { id: 'multica-cli', ok: true, summary: `multica CLI 已安装(${cli})` }\n : {\n id: 'multica-cli', ok: false, summary: '未找到 multica CLI',\n hint: '安装:curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash',\n })\n checks.push(hasMulticaToken(home)\n ? { id: 'multica-login', ok: true, summary: 'Multica 已登录(本地存在 token)' }\n : {\n id: 'multica-login', ok: false, summary: 'Multica 尚未登录',\n hint: '登录:multica login --server-url <endpoint>(预发环境为 https://pre-fde-workbench.dingtalk.com)',\n })\n if (['HTTPS_PROXY', 'https_proxy', 'ALL_PROXY', 'all_proxy'].some((key) => env[key])) {\n checks.push({\n id: 'proxy-env', ok: false, summary: '检测到代理环境变量,可能阻断 Multica 直连',\n hint: '连接失败时用 env -u HTTPS_PROXY -u https_proxy -u ALL_PROXY -u all_proxy 运行 multica 与平台脚本',\n })\n }\n return checks\n}\n\nexport interface MulticaTarget {\n profile: string\n serverUrl: string\n workspaceId: string\n}\n\n/**\n * 本机已登录的 Multica 目标清单(default 配置 + 各 profile)。只暴露 endpoint 与\n * workspace 标识,不读取 token 内容。发布前必须把候选交给用户选择,绝不默默用默认配置。\n */\nexport function multicaTargets(home = homedir()): MulticaTarget[] {\n const targets: MulticaTarget[] = []\n const push = (profile: string, path: string) => {\n const config = readJsonOrNull(path)\n if (typeof config?.token === 'string' && config.token.trim()) {\n targets.push({\n profile,\n serverUrl: String(config.server_url || ''),\n workspaceId: String(config.workspace_id || ''),\n })\n }\n }\n push('default', join(home, '.multica', 'config.json'))\n try {\n for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {\n push(entry, join(home, '.multica', 'profiles', entry, 'config.json'))\n }\n } catch { /* profiles 目录不存在 */ }\n return targets\n}\n\nfunction hasMulticaToken(home: string): boolean {\n const candidates = [join(home, '.multica', 'config.json')]\n try {\n for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {\n candidates.push(join(home, '.multica', 'profiles', entry, 'config.json'))\n }\n } catch { /* profiles 目录不存在 */ }\n return candidates.some((path) => {\n const config = readJsonOrNull(path)\n return typeof config?.token === 'string' && config.token.trim().length > 0\n })\n}\n\nfunction resolution(\n name: string | null, source: AgentPlatformSource, file: string,\n): AgentPlatformResolution {\n return {\n $schema: 'dingtalk-agent/agent-platform-resolution@1',\n platform: name,\n source,\n file,\n definition: name ? agentPlatformDefinition(name) : null,\n platforms: MANAGED_AGENT_PLATFORMS,\n }\n}\n\nfunction readJsonOrNull(path: string): any {\n try { return JSON.parse(readFileSync(path, 'utf8')) } catch { return null }\n}\n\nfunction findUp(start: string, relativePath: string): string | null {\n let dir = resolve(start)\n while (true) {\n const candidate = join(dir, relativePath)\n if (existsSync(candidate) && !lstatSync(candidate).isSymbolicLink()) return candidate\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) return null\n dir = parent\n }\n}\n"]}
1
+ {"version":3,"file":"agent-platform.js","sourceRoot":"","sources":["../../src/agent-platform.ts"],"names":[],"mappings":"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","sourcesContent":["// Managed Agent Platform 注册表与工作区归属解析。\n//\n// 一个 Agent 工作区归属于至多一个托管平台;归属解析顺序固定:\n// DTA_AGENT_PLATFORM 环境变量 > dingtalk-agent.json#agentPlatform\n// > .dingtalk-agent/agent-platform.json > 按 Provider 声明推断。\n// 平台相关的方法学不写进 CLI——它们随对应平台的 Skill 包分发,只在用户选择该平台时安装。\n// 平台命令(如 deploy/promote/observe)必须先通过归属门禁;coming-soon 平台一律 fail-closed。\n\nimport { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, parse, resolve } from 'node:path'\n\nimport { findAgentProjectRoot } from './development-workspace.js'\nimport { findExecutable } from './doctor.js'\nimport { installGlobalSkill, type GlobalSkillStatus } from './skill-manager.js'\n\nexport type AgentPlatformStatus = 'supported' | 'coming-soon'\n\nexport interface AgentPlatformSkillBinding {\n role: string\n name: string\n purpose: string\n}\n\nexport interface AgentPlatformDefinition {\n name: string\n label: string\n status: AgentPlatformStatus\n description: string\n skills: AgentPlatformSkillBinding[]\n commands: string[]\n // 现阶段建议的测试 endpoint(不是静默默认直连:真实执行仍 fail-closed,见 resolveEndpoint)。\n // 可被 MULTICA_SERVER_URL 环境变量 / 项目 config / 已登录 profile 覆盖;GA 时改此处或用覆盖切换。\n suggestedEndpoint?: string\n endpointEnv?: string\n}\n\nexport const MANAGED_AGENT_PLATFORMS: AgentPlatformDefinition[] = [\n {\n name: 'multica-dingtalk',\n label: 'Multica (DingTalk)',\n status: 'supported',\n description: '钉钉 Multica 托管平台:供给、部署、钉钉机器人绑定、观测与调度。',\n skills: [\n { role: 'deploy', name: 'dingtalk-agent-deploy-multica', purpose: '经 dta 稳定 CLI 受控部署/晋级/观测到 Multica' },\n { role: 'boot', name: 'dingtalk-agent-boot-multica', purpose: '部署产物在 Multica Host 内每次任务的启动协议' },\n { role: 'ops', name: 'multica-external', purpose: '平台运维执行体:供给/绑定机器人/观测/调度(纯 HTTPS)' },\n ],\n commands: ['deploy', 'promote', 'observe'],\n suggestedEndpoint: 'https://pre-fde-workbench.dingtalk.com',\n endpointEnv: 'MULTICA_SERVER_URL',\n },\n {\n name: 'deap',\n label: 'DEAP',\n status: 'coming-soon',\n description: '敬请期待。',\n skills: [],\n commands: [],\n },\n]\n\nexport const AGENT_PLATFORM_FILE = '.dingtalk-agent/agent-platform.json'\nconst PROJECT_FILE = 'dingtalk-agent.json'\n\nexport type AgentPlatformSource = 'env' | 'project-manifest' | 'platform-file' | 'inferred' | 'none'\n\nexport interface AgentPlatformResolution {\n $schema: 'dingtalk-agent/agent-platform-resolution@1'\n platform: string | null\n source: AgentPlatformSource\n file: string\n definition: AgentPlatformDefinition | null\n platforms: AgentPlatformDefinition[]\n}\n\nexport interface AgentPlatformUseResult extends AgentPlatformResolution {\n written: string\n skillInstalls: GlobalSkillStatus[]\n}\n\nexport function agentPlatformDefinition(name: string): AgentPlatformDefinition | null {\n return MANAGED_AGENT_PLATFORMS.find((item) => item.name === name) || null\n}\n\nexport function resolveAgentPlatform(\n start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const fromEnv = String(env.DTA_AGENT_PLATFORM || '').trim()\n if (fromEnv) return resolution(fromEnv, 'env', '')\n\n const projectRoot = findAgentProjectRoot(start)\n if (projectRoot) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (existsSync(manifestPath) && !lstatSync(manifestPath).isSymbolicLink()) {\n const manifest = readJsonOrNull(manifestPath)\n const declared = typeof manifest?.agentPlatform === 'string' ? manifest.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'project-manifest', manifestPath)\n }\n }\n\n const platformPath = findUp(start, AGENT_PLATFORM_FILE)\n if (platformPath) {\n const stored = readJsonOrNull(platformPath)\n const declared = typeof stored?.agentPlatform === 'string' ? stored.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'platform-file', platformPath)\n }\n\n if (projectRoot) {\n const manifest = readJsonOrNull(join(projectRoot, PROJECT_FILE))\n const providers = Object.values(manifest?.workspaces || {})\n .map((workspace: any) => workspace?.provider?.kind)\n if (providers.includes('multica')) {\n return resolution('multica-dingtalk', 'inferred', join(projectRoot, PROJECT_FILE))\n }\n }\n\n return resolution(null, 'none', '')\n}\n\nexport interface AgentPlatformUseOptions {\n packageRoot: string\n home?: string\n env?: NodeJS.ProcessEnv\n installSkills?: boolean\n}\n\nexport function useAgentPlatform(\n start: string, name: string, options: AgentPlatformUseOptions,\n): AgentPlatformUseResult {\n const definition = agentPlatformDefinition(name)\n if (!definition) {\n throw new Error(\n `未知 managed agent platform: ${name}\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => `${item.name}(${statusLabel(item.status)})`).join('、')}`,\n )\n }\n if (definition.status !== 'supported') {\n throw new Error(`${definition.label} 敬请期待——当前版本尚未开放该平台。`)\n }\n\n const projectRoot = findAgentProjectRoot(start)\n let written: string\n if (projectRoot && existsSync(join(projectRoot, PROJECT_FILE))) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n const manifest = readJsonOrNull(manifestPath)\n if (!manifest || typeof manifest !== 'object') {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON,无法写入 agentPlatform 归属`)\n }\n manifest.agentPlatform = definition.name\n writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\\n')\n written = manifestPath\n } else {\n const target = join(resolve(start), AGENT_PLATFORM_FILE)\n mkdirSync(dirname(target), { recursive: true })\n writeFileSync(target, JSON.stringify(\n { $schema: 'dingtalk-agent/agent-platform@1', agentPlatform: definition.name }, null, 2,\n ) + '\\n')\n written = target\n }\n\n const skillInstalls: GlobalSkillStatus[] = []\n if (options.installSkills !== false) {\n for (const skill of definition.skills) {\n skillInstalls.push(installGlobalSkill(options.packageRoot, {\n name: skill.name, home: options.home, env: options.env,\n }))\n }\n }\n\n return { ...resolveAgentPlatform(start, options.env || process.env), written, skillInstalls }\n}\n\n/** deploy/promote/observe 等平台命令的归属门禁:未归属、未知或 coming-soon 一律 fail-closed。 */\nexport function requireSupportedAgentPlatform(\n command: string, start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const resolved = resolveAgentPlatform(start, env)\n if (!resolved.platform) {\n throw new Error(\n `当前工作区未声明 managed agent platform,无法执行 \\`${command}\\`。\\n` +\n '先运行 `dta agent-platform use multica-dingtalk`,或设置 DTA_AGENT_PLATFORM 环境变量。',\n )\n }\n if (!resolved.definition) {\n throw new Error(\n `工作区声明了未知 platform: ${resolved.platform}(来源 ${resolved.source})。\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => item.name).join('、')}`,\n )\n }\n if (resolved.definition.status !== 'supported') {\n throw new Error(`${resolved.definition.label} 敬请期待——\\`${command}\\` 尚未在该平台开放。`)\n }\n if (!resolved.definition.commands.includes(command)) {\n throw new Error(`${resolved.definition.label} 不承接命令 \\`${command}\\`。`)\n }\n return resolved\n}\n\n/** dta 层的平台命令/角色(deploy、boot、ops…)关联到该平台内确切的 Skill 名。 */\nexport function platformSkillForRole(platformName: string, role: string): string | null {\n const definition = agentPlatformDefinition(platformName)\n return definition?.skills.find((item) => item.role === role)?.name || null\n}\n\nconst PLATFORM_DIRS: Record<string, string> = {\n 'multica-dingtalk': 'skills/platforms/multica-dingtalk',\n deap: 'skills/platforms/deap',\n}\n\n/** 平台说明文档(PLATFORM.md)在包内的路径;切换到该平台时应加载让维护者/Agent 知道各技能用途。 */\nexport function platformDocPath(packageRoot: string, platformName: string): string | null {\n const dir = PLATFORM_DIRS[platformName]\n if (!dir) return null\n const path = join(packageRoot, dir, 'PLATFORM.md')\n return existsSync(path) ? path : null\n}\n\nexport function readPlatformDoc(packageRoot: string, platformName: string): string {\n const path = platformDocPath(packageRoot, platformName)\n return path ? readFileSync(path, 'utf8') : ''\n}\n\nexport function statusLabel(status: AgentPlatformStatus): string {\n return status === 'supported' ? '已支持' : '敬请期待'\n}\n\nexport type EndpointSource = 'env' | 'project-config' | 'profile' | 'suggested' | 'ambiguous' | 'none'\n\nexport interface EndpointResolution {\n endpoint: string\n source: EndpointSource\n // confirmed=true 仅当来自真实来源(env / 项目 config / 恰好一个已登录 profile);\n // suggested(预发建议)与 ambiguous(多目标未选)均为 false —— 发布前仍需用户显式确认,不得据此直连。\n confirmed: boolean\n envVar: string\n candidates: string[]\n}\n\n/**\n * 解析平台 endpoint,与真实执行体(multica_ext.py 读 MULTICA_SERVER_URL/--profile)同源,\n * 不新造命名空间、不静默默认连预发。顺序:\n * MULTICA_SERVER_URL 环境变量 > 项目 config(dingtalk-agent.json#multicaEndpoint /\n * .dingtalk-agent/agent-platform.json.endpoint)> 恰好一个已登录 profile 的 server_url\n * (多个则 ambiguous,不自动挑)> suggestedEndpoint(仅建议,未确认)。\n */\nexport function resolveEndpoint(\n platformName: string, start = process.cwd(),\n env: NodeJS.ProcessEnv = process.env, home = homedir(),\n): EndpointResolution {\n const definition = agentPlatformDefinition(platformName)\n const envVar = definition?.endpointEnv || 'MULTICA_SERVER_URL'\n const base: Omit<EndpointResolution, 'endpoint' | 'source' | 'confirmed'> = { envVar, candidates: [] }\n\n const fromEnv = String(env[envVar] || '').trim()\n if (fromEnv) return { endpoint: fromEnv, source: 'env', confirmed: true, ...base }\n\n const fromConfig = projectEndpoint(start)\n if (fromConfig) return { endpoint: fromConfig, source: 'project-config', confirmed: true, ...base }\n\n const serverUrls = [...new Set(multicaTargets(home)\n .map((target) => target.serverUrl.trim()).filter(Boolean))]\n if (serverUrls.length === 1) {\n return { endpoint: serverUrls[0], source: 'profile', confirmed: true, ...base }\n }\n if (serverUrls.length > 1) {\n return { endpoint: '', source: 'ambiguous', confirmed: false, ...base, candidates: serverUrls }\n }\n\n if (definition?.suggestedEndpoint) {\n return { endpoint: definition.suggestedEndpoint, source: 'suggested', confirmed: false, ...base }\n }\n return { endpoint: '', source: 'none', confirmed: false, ...base }\n}\n\nfunction projectEndpoint(start: string): string {\n const projectRoot = findAgentProjectRoot(start)\n if (!projectRoot) return ''\n const manifest = readJsonOrNull(join(projectRoot, PROJECT_FILE))\n const fromManifest = typeof manifest?.multicaEndpoint === 'string' ? manifest.multicaEndpoint.trim() : ''\n if (fromManifest) return fromManifest\n const platform = readJsonOrNull(join(projectRoot, AGENT_PLATFORM_FILE))\n return typeof platform?.endpoint === 'string' ? platform.endpoint.trim() : ''\n}\n\nexport interface AgentPlatformReadinessCheck {\n id: string\n ok: boolean\n summary: string\n hint?: string\n}\n\n/**\n * 平台工具链就绪检查(只读,不阻断):选择/查看平台归属时提示用户缺什么、怎么补。\n * 强制门禁仍由 requireSupportedAgentPlatform 与各平台命令自身承担。\n */\nexport function agentPlatformReadiness(\n name: string, env: NodeJS.ProcessEnv = process.env, home = homedir(),\n start: string = process.cwd(),\n): AgentPlatformReadinessCheck[] {\n if (name !== 'multica-dingtalk') return []\n const checks: AgentPlatformReadinessCheck[] = []\n const cli = findExecutable('multica', env)\n checks.push(cli\n ? { id: 'multica-cli', ok: true, summary: `multica CLI 已安装(${cli})` }\n : {\n id: 'multica-cli', ok: false, summary: '未找到 multica CLI',\n hint: '安装:curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash',\n })\n const ep = resolveEndpoint(name, start, env, home)\n const loginTarget = ep.endpoint || '<endpoint>'\n const suffix = ep.confirmed ? '' : '(未确认,请核对是预发还是生产)'\n checks.push(hasMulticaToken(home)\n ? { id: 'multica-login', ok: true, summary: 'Multica 已登录(本地存在 token)' }\n : {\n id: 'multica-login', ok: false, summary: 'Multica 尚未登录',\n hint: `登录:multica login --server-url ${loginTarget} --token <你的 mul_ PAT>` +\n `(endpoint 来源 ${ep.source}${suffix};用 MULTICA_SERVER_URL 或登录别的 profile 可切换)`,\n })\n if (['HTTPS_PROXY', 'https_proxy', 'ALL_PROXY', 'all_proxy'].some((key) => env[key])) {\n checks.push({\n id: 'proxy-env', ok: false, summary: '检测到代理环境变量,可能阻断 Multica 直连',\n hint: '连接失败时用 env -u HTTPS_PROXY -u https_proxy -u ALL_PROXY -u all_proxy 运行 multica 与平台脚本',\n })\n }\n return checks\n}\n\nexport interface MulticaTarget {\n profile: string\n serverUrl: string\n workspaceId: string\n}\n\n/**\n * 本机已登录的 Multica 目标清单(default 配置 + 各 profile)。只暴露 endpoint 与\n * workspace 标识,不读取 token 内容。发布前必须把候选交给用户选择,绝不默默用默认配置。\n */\nexport function multicaTargets(home = homedir()): MulticaTarget[] {\n const targets: MulticaTarget[] = []\n const push = (profile: string, path: string) => {\n const config = readJsonOrNull(path)\n if (typeof config?.token === 'string' && config.token.trim()) {\n targets.push({\n profile,\n serverUrl: String(config.server_url || ''),\n workspaceId: String(config.workspace_id || ''),\n })\n }\n }\n push('default', join(home, '.multica', 'config.json'))\n try {\n for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {\n push(entry, join(home, '.multica', 'profiles', entry, 'config.json'))\n }\n } catch { /* profiles 目录不存在 */ }\n return targets\n}\n\nfunction hasMulticaToken(home: string): boolean {\n const candidates = [join(home, '.multica', 'config.json')]\n try {\n for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {\n candidates.push(join(home, '.multica', 'profiles', entry, 'config.json'))\n }\n } catch { /* profiles 目录不存在 */ }\n return candidates.some((path) => {\n const config = readJsonOrNull(path)\n return typeof config?.token === 'string' && config.token.trim().length > 0\n })\n}\n\nfunction resolution(\n name: string | null, source: AgentPlatformSource, file: string,\n): AgentPlatformResolution {\n return {\n $schema: 'dingtalk-agent/agent-platform-resolution@1',\n platform: name,\n source,\n file,\n definition: name ? agentPlatformDefinition(name) : null,\n platforms: MANAGED_AGENT_PLATFORMS,\n }\n}\n\nfunction readJsonOrNull(path: string): any {\n try { return JSON.parse(readFileSync(path, 'utf8')) } catch { return null }\n}\n\nfunction findUp(start: string, relativePath: string): string | null {\n let dir = resolve(start)\n while (true) {\n const candidate = join(dir, relativePath)\n if (existsSync(candidate) && !lstatSync(candidate).isSymbolicLink()) return candidate\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) return null\n dir = parent\n }\n}\n"]}
@@ -11,7 +11,7 @@ export const CURRENT_WORKSPACE_FILE = '.dingtalk-agent/current-workspace';
11
11
  export const WORKSPACE_STATE_ROOT = '.dingtalk-agent/state/workspaces';
12
12
  export const LEGACY_WORKSPACE_NAME = 'legacy-prepared';
13
13
  const PROJECT_KEYS = new Set(['$schema', 'name', 'dtaVersion', 'agent', 'workspaces']);
14
- const PROJECT_OPTIONAL_KEYS = new Set([...PROJECT_KEYS, 'agentPlatform']);
14
+ const PROJECT_OPTIONAL_KEYS = new Set([...PROJECT_KEYS, 'agentPlatform', 'multicaEndpoint']);
15
15
  const AGENT_KEYS = new Set(['definition', 'skills']);
16
16
  const WORKSPACE_KEYS = new Set(['stage', 'provider', 'storage', 'authority']);
17
17
  const OPENCODE_KEYS = new Set(['kind', 'model']);
@@ -200,6 +200,8 @@ function validateProjectManifest(value, root) {
200
200
  const dtaVersion = requiredString(input.dtaVersion, 'dtaVersion');
201
201
  const agentPlatform = input.agentPlatform === undefined
202
202
  ? undefined : requiredString(input.agentPlatform, 'agentPlatform');
203
+ const multicaEndpoint = input.multicaEndpoint === undefined
204
+ ? undefined : requiredString(input.multicaEndpoint, 'multicaEndpoint');
203
205
  const agentInput = objectValue(input.agent, 'Project agent');
204
206
  assertExactKeys(agentInput, AGENT_KEYS, 'Project agent');
205
207
  const definition = safeRelativePath(root, requiredString(agentInput.definition, 'agent.definition'), 'agent.definition', false);
@@ -224,6 +226,7 @@ function validateProjectManifest(value, root) {
224
226
  return {
225
227
  $schema: 'dingtalk-agent/project@1', name, dtaVersion,
226
228
  ...(agentPlatform === undefined ? {} : { agentPlatform }),
229
+ ...(multicaEndpoint === undefined ? {} : { multicaEndpoint }),
227
230
  agent: { definition, skills }, workspaces,
228
231
  };
229
232
  }