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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.en.md +92 -63
  3. package/README.md +92 -63
  4. package/dist/bin/dingtalk-agent.js +142 -15
  5. package/dist/bin/dingtalk-agent.js.map +1 -1
  6. package/dist/src/agent-audit.js +69 -55
  7. package/dist/src/agent-audit.js.map +1 -1
  8. package/dist/src/agent-enhance.js +49 -30
  9. package/dist/src/agent-enhance.js.map +1 -1
  10. package/dist/src/agent-platform.js +1 -0
  11. package/dist/src/agent-platform.js.map +1 -1
  12. package/dist/src/bootstrap.js +6 -2
  13. package/dist/src/bootstrap.js.map +1 -1
  14. package/dist/src/development-workspace.js +108 -18
  15. package/dist/src/development-workspace.js.map +1 -1
  16. package/dist/src/multica-deploy.js +128 -18
  17. package/dist/src/multica-deploy.js.map +1 -1
  18. package/dist/src/multica-provider.js +157 -2
  19. package/dist/src/multica-provider.js.map +1 -1
  20. package/dist/src/opencode-provider.js +17 -5
  21. package/dist/src/opencode-provider.js.map +1 -1
  22. package/dist/src/schedule-plan.js +105 -0
  23. package/dist/src/schedule-plan.js.map +1 -0
  24. package/dist/src/skills.js +2 -0
  25. package/dist/src/skills.js.map +1 -1
  26. package/dist/src/workspace.js +11 -6
  27. package/dist/src/workspace.js.map +1 -1
  28. package/docs/ARCHITECTURE.md +142 -24
  29. package/docs/INSTALLATION.md +1 -1
  30. package/docs/PRIOR-ART.md +4 -0
  31. package/docs/SELF-TEST.md +1 -1
  32. package/docs/architecture/agent-platform-connection-layer.svg +120 -0
  33. package/docs/architecture/digital-employee-composition.svg +92 -0
  34. package/docs/architecture/dingtalk-agent-architecture.svg +125 -0
  35. package/docs/assets/digital-employee-at-work.svg +77 -0
  36. package/docs/schemas/multica-workspace-run.schema.json +150 -33
  37. package/docs/schemas/project.schema.json +27 -0
  38. package/docs/schemas/workspace-scaffold.schema.json +37 -0
  39. package/examples/agents/README.md +9 -7
  40. package/examples/agents/fde-coach/AGENTS.md +2 -34
  41. package/examples/agents/fde-coach/agent/AGENTS.md +35 -0
  42. package/examples/agents/fde-coach/agent.bindings.json +10 -0
  43. package/examples/agents/release-manager/AGENTS.md +2 -34
  44. package/examples/agents/release-manager/agent/AGENTS.md +35 -0
  45. package/examples/agents/release-manager/agent.bindings.json +10 -0
  46. package/lab/project-workspace/fake-multica-provider.mjs +43 -8
  47. package/lab/project-workspace/opencode-provider-suite.json +1 -1
  48. package/lab/robot-eval/suite.json +1 -1
  49. package/package.json +2 -2
  50. package/skills/core/dingtalk-agent-compose/SKILL.md +25 -18
  51. package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +1 -1
  52. package/skills/core/dingtalk-agent-compose/assets/REPOSITORY.template.md +10 -0
  53. package/skills/core/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +2 -2
  54. package/skills/core/dingtalk-agent-compose/assets/agent.bindings.local.template.json +2 -2
  55. package/skills/core/dingtalk-agent-compose/assets/hosts/opencode/opencode.template.json +2 -1
  56. package/skills/core/dingtalk-agent-compose/evals/evals.json +1 -1
  57. package/skills/core/dingtalk-agent-compose/references/agent-definition-contract.md +6 -6
  58. package/skills/core/dingtalk-agent-compose/references/drive-and-schedules.md +124 -0
  59. package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +10 -12
  60. package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +13 -12
  61. package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +13 -12
  62. package/skills/core/dingtalk-basic-behavior/SKILL.md +11 -7
  63. package/skills/core/dingtalk-basic-behavior/references/event-to-behavior.md +15 -1
  64. package/skills/core/dingtalk-basic-behavior/references/perception-and-gates.md +5 -0
  65. package/skills/core/dingtalk-basic-behavior/references/risk-authority-and-privacy.md +12 -0
  66. package/skills/platforms/deap/PLATFORM.md +30 -1
  67. package/skills/platforms/multica-dingtalk/PLATFORM.md +25 -0
  68. package/skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica/SKILL.md +3 -2
  69. package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +15 -0
  70. package/docs/assets/agent-delivery-lifecycle.svg +0 -103
  71. /package/examples/agents/fde-coach/{skills → agent/skills}/fde-coach/SKILL.md +0 -0
  72. /package/examples/agents/release-manager/{skills → agent/skills}/release-manager/SKILL.md +0 -0
@@ -10,7 +10,8 @@ import { resolvePackageRoot } from './package-root.js';
10
10
  import { bundledSkillPath } from './skill-manager.js';
11
11
  const NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/;
12
12
  const BASIC = 'dingtalk-basic-behavior';
13
- const BASIC_INSTRUCTION = '.agents/skills/dingtalk-basic-behavior/SKILL.md';
13
+ const DEFAULT_DEFINITION = 'agent/AGENTS.md';
14
+ const DEFAULT_SKILLS_ROOT = 'agent/skills';
14
15
  const DIRECTORY_HASH = digest('dingtalk-agent/directory@1');
15
16
  const TEMPLATE_MARKER = /<(?:Agent 名称|岗位\/角色|人群、团队或工作场域|长期目标|主动负责的事项|可观察的交付物|明确不做或必须升级确认的事项|岗位稳定的输入、判断、交付与验收范式|何时自行推进、何时交给谁|本体级常见错误 [12]|纠偏动作 [12]|Role Skill names|role-skill-name|Role Skill 名称|岗位职责或工作流|领域判断、输入与交付物|相邻职责或明确交接边界|岗位特有的禁区或必须升级条件|领域输入|领域方法\/SOP|领域常见错误|领域纠偏动作|可观察结果 [12]|route)>/u;
16
17
  export function planAgentEnhancement(root, options = {}) {
@@ -114,11 +115,14 @@ function buildEnhancement(root, options) {
114
115
  const projectName = String(options.projectName || existingProject?.name || inferredName).trim();
115
116
  const blockers = [];
116
117
  const warnings = [];
117
- if (existingProject && existingProject.agent?.definition !== 'AGENTS.md') {
118
- blockers.push(`现有 agent.definition=${existingProject.agent?.definition || '(missing)'};` +
119
- 'compose 当前只装配 OpenCode 项目根 AGENTS.md 原生 rule,拒绝生成双本体 Agent');
120
- }
121
- const managedGlobInstructions = conflictingManagedInstructionGlobs(rootReal, existingProject?.agent?.definition || 'AGENTS.md');
118
+ const definitionRef = existingProject?.agent?.definition || DEFAULT_DEFINITION;
119
+ const declaredSkillsRoot = existingProject?.agent?.skillsRoot || '';
120
+ const skillsRoot = declaredSkillsRoot || (existingProject ? 'skills' : DEFAULT_SKILLS_ROOT);
121
+ const basicRoot = declaredSkillsRoot
122
+ ? `${skillsRoot}/${BASIC}`
123
+ : existingProject ? `.agents/skills/${BASIC}` : `${skillsRoot}/${BASIC}`;
124
+ const basicInstruction = `${basicRoot}/SKILL.md`;
125
+ const managedGlobInstructions = conflictingManagedInstructionGlobs(rootReal, definitionRef, basicInstruction);
122
126
  if (managedGlobInstructions.length) {
123
127
  blockers.push('opencode.json#instructions 中有 glob/extglob 可能命中本体或 Basic;' +
124
128
  `请改成可证明不重叠的模式或精确路径: ${managedGlobInstructions.join(', ')}`);
@@ -128,7 +132,7 @@ function buildEnhancement(root, options) {
128
132
  if (!options.projectName && !existingProject) {
129
133
  warnings.push(`project name 由目录名推导为 ${projectName || '(invalid)'}`);
130
134
  }
131
- const discovered = discoverRoleSkills(rootReal);
135
+ const discovered = discoverRoleSkills(rootReal, skillsRoot);
132
136
  const requested = (options.roleSkills || []).map((item) => item.trim()).filter(Boolean);
133
137
  const roleCandidates = [...new Set([...discovered.names, ...requested])].sort();
134
138
  const invalidRoles = roleCandidates.filter((name) => !NAME.test(name) || name === BASIC);
@@ -151,8 +155,8 @@ function buildEnhancement(root, options) {
151
155
  }
152
156
  const bindingsValue = {
153
157
  $schema: 'dingtalk-agent/agent-bindings@1',
154
- agent: existingBindings?.agent || 'local-dir:.',
155
- skills: existingBindings?.skills || 'local-dir:skills',
158
+ agent: existingBindings?.agent || `local-dir:${dirname(definitionRef) || '.'}`,
159
+ skills: existingBindings?.skills || `local-dir:${skillsRoot}`,
156
160
  memory: options.memory || existingBindings?.memory ||
157
161
  existingLocalWorkspace?.storage?.memory || 'local-md:MEMORY.md',
158
162
  knowledge: options.knowledge || existingBindings?.knowledge ||
@@ -171,23 +175,28 @@ function buildEnhancement(root, options) {
171
175
  if (remote && (!bindingsValue.authority.profile || !bindingsValue.authority.expectedUserId)) {
172
176
  blockers.push('远端 memory/knowledge 需要同时提供 --profile 与 --expected-user-id');
173
177
  }
174
- const agentsPath = join(rootReal, 'AGENTS.md');
178
+ const agentsPath = join(rootReal, definitionRef);
179
+ const repositoryInstructionsPath = join(rootReal, 'AGENTS.md');
180
+ if (!existingProject && definitionRef !== 'AGENTS.md' &&
181
+ !existsSync(repositoryInstructionsPath)) {
182
+ files.set('AGENTS.md', readAsset(packageRoot, 'REPOSITORY.template.md'));
183
+ }
175
184
  if (!existsSync(agentsPath)) {
176
185
  const body = readAsset(packageRoot, 'AGENTS.template.md')
177
186
  .replace('<Agent 名称>', projectName || '<Agent 名称>')
178
187
  .replace('<Role Skill names>', roleSkills.join(', ') || '<Role Skill names>');
179
- files.set('AGENTS.md', body);
180
- semanticFiles.push('AGENTS.md');
188
+ files.set(definitionRef, body);
189
+ semanticFiles.push(definitionRef);
181
190
  }
182
191
  else {
183
- assertRegularFile(agentsPath, 'AGENTS.md');
192
+ assertRegularFile(agentsPath, definitionRef);
184
193
  const body = readFileSync(agentsPath, 'utf8');
185
- files.set('AGENTS.md', body);
194
+ files.set(definitionRef, body);
186
195
  if (TEMPLATE_MARKER.test(body))
187
- semanticFiles.push('AGENTS.md');
196
+ semanticFiles.push(definitionRef);
188
197
  }
189
198
  for (const name of roleSkills) {
190
- const rolePath = `skills/${name}`;
199
+ const rolePath = `${skillsRoot}/${name}`;
191
200
  const source = join(rootReal, rolePath);
192
201
  let tree;
193
202
  if (existsSync(source)) {
@@ -207,9 +216,11 @@ function buildEnhancement(root, options) {
207
216
  trees.set(rolePath, tree);
208
217
  semanticFiles.push(`${rolePath}/SKILL.md`);
209
218
  }
210
- trees.set(`.agents/skills/${name}`, tree);
219
+ if (existingProject && !declaredSkillsRoot) {
220
+ trees.set(`.agents/skills/${name}`, tree);
221
+ }
211
222
  }
212
- trees.set(`.agents/skills/${BASIC}`, readTree(bundledSkillPath(packageRoot, BASIC), 'Canonical Basic Skill'));
223
+ trees.set(basicRoot, readTree(bundledSkillPath(packageRoot, BASIC), 'Canonical Basic Skill'));
213
224
  files.set(bindingsRef, JSON.stringify(bindingsValue, null, 2) + '\n');
214
225
  const project = desiredProject(existingProject, {
215
226
  projectName, roleSkills, model: options.model || 'deepseek/deepseek-chat',
@@ -217,7 +228,7 @@ function buildEnhancement(root, options) {
217
228
  cliVersion: options.cliVersion || '', bindings: bindingsValue,
218
229
  });
219
230
  files.set('dingtalk-agent.json', JSON.stringify(project, null, 2) + '\n');
220
- files.set('opencode.json', JSON.stringify(desiredOpenCode(rootReal, roleSkills, project.agent.definition), null, 2) + '\n');
231
+ files.set('opencode.json', JSON.stringify(desiredOpenCode(rootReal, roleSkills, project.agent.definition, basicInstruction), null, 2) + '\n');
221
232
  files.set('.gitignore', desiredGitignore(rootReal, bindingsValue.stateDir));
222
233
  for (const [label, route] of Object.entries({
223
234
  memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,
@@ -331,7 +342,11 @@ function desiredProject(existing, input) {
331
342
  return {
332
343
  $schema: 'dingtalk-agent/project@1', name: input.projectName,
333
344
  dtaVersion: `^${version}`,
334
- agent: { definition: 'AGENTS.md', skills: [BASIC, ...input.roleSkills] },
345
+ agent: {
346
+ definition: DEFAULT_DEFINITION,
347
+ skillsRoot: DEFAULT_SKILLS_ROOT,
348
+ skills: [BASIC, ...input.roleSkills],
349
+ },
335
350
  workspaces: { 'local-dev': localOpenCodeWorkspace(input) },
336
351
  };
337
352
  }
@@ -352,7 +367,7 @@ function localOpenCodeWorkspace(input) {
352
367
  }
353
368
  return workspace;
354
369
  }
355
- function desiredOpenCode(root, roles, definitionInstruction) {
370
+ function desiredOpenCode(root, roles, definitionInstruction, basicInstruction) {
356
371
  const path = join(root, 'opencode.json');
357
372
  let value = { $schema: 'https://opencode.ai/config.json' };
358
373
  if (existsSync(path)) {
@@ -377,8 +392,9 @@ function desiredOpenCode(root, roles, definitionInstruction) {
377
392
  const instructions = (value.instructions || []);
378
393
  value.instructions = [
379
394
  ...instructions.filter((item) => !instructionTargetsPath(root, item, definition) &&
380
- !instructionTargetsPath(root, item, BASIC_INSTRUCTION)),
381
- BASIC_INSTRUCTION,
395
+ !instructionTargetsPath(root, item, basicInstruction)),
396
+ ...(definition === 'AGENTS.md' ? [] : [definition]),
397
+ basicInstruction,
382
398
  ];
383
399
  const permission = value.permission === undefined ? {} : value.permission;
384
400
  if (!permission || typeof permission !== 'object' || Array.isArray(permission)) {
@@ -393,7 +409,7 @@ function desiredOpenCode(root, roles, definitionInstruction) {
393
409
  } };
394
410
  return value;
395
411
  }
396
- function conflictingManagedInstructionGlobs(root, definitionInstruction) {
412
+ function conflictingManagedInstructionGlobs(root, definitionInstruction, basicInstruction) {
397
413
  const path = join(root, 'opencode.json');
398
414
  if (!existsSync(path))
399
415
  return [];
@@ -404,7 +420,7 @@ function conflictingManagedInstructionGlobs(root, definitionInstruction) {
404
420
  const definition = safeRelative(definitionInstruction, 'agent.definition');
405
421
  return value.instructions.filter((item) => typeof item === 'string')
406
422
  .filter((item) => instructionUsesGlob(item) && (instructionTargetsPath(root, item, definition) ||
407
- instructionTargetsPath(root, item, BASIC_INSTRUCTION)));
423
+ instructionTargetsPath(root, item, basicInstruction)));
408
424
  }
409
425
  catch {
410
426
  return [];
@@ -455,12 +471,12 @@ function readValidatedProject(root, cliVersion) {
455
471
  inspectAgentProject(root, cliVersion);
456
472
  return JSON.parse(readFileSync(join(root, 'dingtalk-agent.json'), 'utf8'));
457
473
  }
458
- function discoverRoleSkills(root) {
459
- const base = join(root, 'skills');
474
+ function discoverRoleSkills(root, skillsRoot) {
475
+ const base = join(root, skillsRoot);
460
476
  if (!existsSync(base))
461
477
  return { names: [] };
462
478
  if (!lstatSync(base).isDirectory() || lstatSync(base).isSymbolicLink()) {
463
- throw new Error('skills 必须是 Agent 根目录内的普通目录');
479
+ throw new Error(`${skillsRoot} 必须是 Agent 根目录内的普通目录`);
464
480
  }
465
481
  const names = [];
466
482
  for (const entry of readdirSync(base, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
@@ -553,14 +569,17 @@ function sourceIdentity(root) {
553
569
  return { kind: 'git-checkout', revision };
554
570
  }
555
571
  function fileReason(path) {
572
+ if (path === DEFAULT_DEFINITION) {
573
+ return '补齐 Agent 交付本体;语义内容仍需开发者评审';
574
+ }
556
575
  if (path === 'AGENTS.md')
557
- return '补齐本体结构;语义内容仍需开发者评审';
576
+ return '区分仓库开发约束与 Agent 交付本体';
558
577
  if (path === 'agent.bindings.json')
559
578
  return '固化本体、语义存储与宿主私有状态路由';
560
579
  if (path === 'dingtalk-agent.json')
561
580
  return '把目录升级为可发现、可版本化的 Agent Project';
562
581
  if (path === 'opencode.json')
563
- return '移除冗余 AGENTS instruction,并合并唯一 Basic instruction 与 Role Skill permission';
582
+ return '绑定唯一 Agent Definition、Basic instruction 与 Role Skill permission';
564
583
  if (path === '.gitignore')
565
584
  return '防止私有 state、Receipt 与原始证据进入 Git';
566
585
  return '补齐本地语义介质入口';
@@ -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 { 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"]}
1
+ {"version":3,"file":"agent-enhance.js","sourceRoot":"","sources":["../../src/agent-enhance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EACL,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EACjF,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAC5C,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAsB,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,IAAI,GAAG,0CAA0C,CAAA;AACvD,MAAM,KAAK,GAAG,yBAAyB,CAAA;AACvC,MAAM,kBAAkB,GAAG,iBAAiB,CAAA;AAC5C,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAA;AAC3D,MAAM,eAAe,GAAG,2QAA2Q,CAAA;AAwFnS,MAAM,UAAU,oBAAoB,CAClC,IAAY,EAAE,UAA+B,EAAE;IAE/C,OAAO,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAY,EAAE,OAA4B;IAE1C,IAAI,CAAC,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IACtB,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvF,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;IAC1E,MAAM,WAAW,GAAG,iBAAiB,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IAC7E,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzE,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,IAAI,KAAoC,CAAA;IAExC,IAAI,CAAC;QACH,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;gBACpD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;gBACvD,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;gBAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5D,OAAO,EAAE,2CAA2C;gBACpD,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;gBAChC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,IAAI;oBACJ,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC7C,CAAC,CAAC;aACJ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;YACpD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACpD,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAC1C,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACxC,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChF,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,CAAA;YACvD,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAClD,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBAChD,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,CAAA;YACrD,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,KAAK,kBAAkB;gBAClD,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE;oBAC7F,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACrB,IAAI,MAAM,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;QAC9E,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;YAC5B,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;YAClD,cAAc,EAAE,IAAI,CAAC,UAAU;SAChC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC1E,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO;QACL,OAAO,EAAE,4CAA4C;QACrD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnD,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK;QACnF,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;QACnF,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QAChC,OAAO;QACP,KAAK,EAAE;YACL,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO;YAChE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,QAAQ;SACtC;KACF,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAA4B;IAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5C,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACvC,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvD,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,IAAI,qBAAqB,EAAE,UAAU,CAAC,CAAA;IACvF,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAA;IACjE,MAAM,eAAe,GAAG,UAAU,CAAC,mBAAmB,CAAC;QACrD,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACnE,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,eAAe,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/F,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,aAAa,GAAG,eAAe,EAAE,KAAK,EAAE,UAAU,IAAI,kBAAkB,CAAA;IAC9E,MAAM,kBAAkB,GAAG,eAAe,EAAE,KAAK,EAAE,UAAU,IAAI,EAAE,CAAA;IACnE,MAAM,UAAU,GAAG,kBAAkB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAA;IAC3F,MAAM,SAAS,GAAG,kBAAkB;QAClC,CAAC,CAAC,GAAG,UAAU,IAAI,KAAK,EAAE;QAC1B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,KAAK,EAAE,CAAA;IAC1E,MAAM,gBAAgB,GAAG,GAAG,SAAS,WAAW,CAAA;IAChD,MAAM,uBAAuB,GAAG,kCAAkC,CAChE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAA;IAC5C,IAAI,uBAAuB,CAAC,MAAM,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CACX,2DAA2D;YAC3D,sBAAsB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3D,CAAA;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAC/F,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,wBAAwB,WAAW,IAAI,WAAW,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAC3D,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvF,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/E,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,CAAA;IACxF,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,CAAA;IACrF,IAAI,YAAY,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxF,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IACrC,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAChD,MAAM,gBAAgB,GAAG,UAAU,CAAC,YAAY,CAAC;QAC/C,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACzD,MAAM,sBAAsB,GAAG,eAAe,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,IAAI,CAAA;IACjF,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QACnF,QAAQ,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,aAAa,GAAkB;QACnC,OAAO,EAAE,iCAAiC;QAC1C,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,aAAa,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,EAAE;QAC9E,MAAM,EAAE,gBAAgB,EAAE,MAAM,IAAI,aAAa,UAAU,EAAE;QAC7D,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,MAAM;YAChD,sBAAsB,EAAE,OAAO,EAAE,MAAM,IAAI,oBAAoB;QACjE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB,EAAE,SAAS;YACzD,sBAAsB,EAAE,OAAO,EAAE,SAAS,IAAI,6BAA6B;QAC7E,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB,EAAE,SAAS;YACzD,sBAAsB,EAAE,OAAO,EAAE,SAAS,IAAI,qCAAqC;QACrF,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,gBAAgB,EAAE,QAAQ,IAAI,iBAAiB;QAC7E,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,gBAAgB,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;YACrE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,gBAAgB,EAAE,SAAS,CAAC,cAAc,IAAI,EAAE;SAC3F;KACF,CAAA;IACD,yBAAyB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC;SAC3D,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAA;IACnD,IAAI,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5F,QAAQ,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAChD,MAAM,0BAA0B,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAC9D,IAAI,CAAC,eAAe,IAAI,aAAa,KAAK,WAAW;QACjD,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,oBAAoB,CAAC;aACtD,OAAO,CAAC,YAAY,EAAE,WAAW,IAAI,YAAY,CAAC;aAClD,OAAO,CAAC,oBAAoB,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAA;QAC/E,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAC9B,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACnC,CAAC;SAAM,CAAC;QACN,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC7C,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAC9B,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,IAAI,EAAE,CAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACvC,IAAI,IAAiB,CAAA;QACrB,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC,CAAA;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;YACpE,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;YAC7C,IAAI,UAAU,KAAK,IAAI;gBAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,IAAI,qBAAqB,UAAU,IAAI,WAAW,EAAE,CAAC,CAAA;YAC1G,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAA;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,wBAAwB,CAAC;iBAC1D,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC;iBACrC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;YACnC,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAChE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YACzB,aAAa,CAAC,IAAI,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,eAAe,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAC3B,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAA;IACjE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAErE,MAAM,OAAO,GAAG,cAAc,CAAC,eAAe,EAAE;QAC9C,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,wBAAwB;QACzE,aAAa,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS;QAC1C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa;KAC9D,CAAC,CAAA;IACF,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACzE,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CACvD,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CACjE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACnB,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE3E,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QAC1C,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS;KACjE,CAAC,EAAE,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAQ;QAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,CAAA;QACxE,CAAC;;YAAM,iBAAiB,CAAC,IAAI,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;IACrF,IAAI,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC5B,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAEjE,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IACvE,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU;KAC7C,CAAC,CAAC,CAAC,CAAC,CAAA;IACL,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS;KAC3C,CAAC,CAAC,CAAC,CAAC,CAAA;IACL,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,yCAAyC,EAAE,YAAY,EAAE,WAAW;QAC5E,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;QACtE,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,wBAAwB;YAChD,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS;YAChE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ;YACpE,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC;YAC3D,sBAAsB,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC;SACxE;KACF,CAAA;IACD,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IACtE,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,cAAc,CAAA;IAC3D,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;YACtC,CAAC,CAAC,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,WAAW,KAAK,qBAAqB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACX,MAAM,YAAY,GAAG,qBAAqB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,MAAM,eAAe,CAAA;IACtG,MAAM,IAAI,GAAqB;QAC7B,OAAO,EAAE,yCAAyC,EAAE,MAAM;QAC1D,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAC3E,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK;QACtE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;QACtD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ;QACzD,cAAc,EAAE;YACd,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;YAClC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;YACzC,GAAG,EAAE,aAAa,CAAC,MAAM;gBACvB,CAAC,CAAC,qEAAqE;gBACvE,CAAC,CAAC,4BAA4B;SACjC;QACD,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE;QAC7D,YAAY,EAAE,EAAE,QAAQ,EAAE;gBACxB,4BAA4B,QAAQ,CAAC,WAAW,CAAC,SAAS;gBAC1D,8BAA8B,QAAQ,CAAC,WAAW,CAAC,oBAAoB,QAAQ,CAAC,YAAY,CAAC,SAAS;gBACtG,iDAAiD;aAClD,EAAE;KACJ,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA;AAC3D,CAAC;AAED,SAAS,cAAc,CAAC,QAAoC,EAAE,KAG7D;IACC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QACtC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC5F,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;QAC9D,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/C,IAAI,KAAK,CAAC,aAAa;gBAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YAC3D,KAAK,CAAC,OAAO,GAAG;gBACd,GAAG,KAAK,CAAC,OAAO;gBAChB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;gBAC7B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;gBACnC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;aACpC,CAAA;YACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;iBAClD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,SAAS,GAAG;oBAChB,cAAc,EAAE,qBAAqB;oBACrC,kBAAkB,EAAE,0BAA0B;iBAC/C,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC,SAAS,CAAA;YACxB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;IAC1E,OAAO;QACL,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW;QAC5D,UAAU,EAAE,IAAI,OAAO,EAAE;QACzB,KAAK,EAAE;YACL,UAAU,EAAE,kBAAkB;YAC9B,UAAU,EAAE,mBAAmB;YAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;SACrC;QACD,UAAU,EAAE,EAAE,WAAW,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE;KAC3D,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAG/B;IACC,MAAM,SAAS,GAAwB;QACrC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QAChE,OAAO,EAAE;YACP,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;YAClE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;SACpC;KACF,CAAA;IACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;SAClD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACpD,SAAS,CAAC,SAAS,GAAG;YACpB,cAAc,EAAE,qBAAqB;YACrC,kBAAkB,EAAE,0BAA0B;SAC/C,CAAA;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,eAAe,CACtB,IAAY,EAAE,KAAe,EAAE,qBAA6B,EAAE,gBAAwB;IAEtF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;IACxC,IAAI,KAAK,GAAwB,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAA;IAC/E,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QACxC,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAAC,CAAC;QACtD,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAAC,CAAC;QAC9E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAClE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAClE,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAA;IAC1E,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAa,CAAA;IAC3D,KAAK,CAAC,YAAY,GAAG;QACnB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CACtC,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;YAC/C,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACxD,GAAG,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACnD,gBAAgB;KACjB,CAAA;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAA;IACzE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAA;IACpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACvE,CAAC;IACD,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE;YACzC,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;SACxF,EAAE,CAAA;IACH,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,kCAAkC,CACzC,IAAY,EAAE,qBAA6B,EAAE,gBAAwB;IAErE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;IACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAA;QAC/E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAA;QACjD,MAAM,UAAU,GAAG,YAAY,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAA;QAC1E,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;aACjF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAC7C,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;YAC9C,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC5D,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAA;IAAC,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CACtB,IAAY,EAAE,KAA0B,EAAE,KAA+B,EAAE,WAAwB;IAEnG,MAAM,UAAU,GAA4B,EAAE,CAAA;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9D,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,QAAQ,IAAI,EAAE;YAClB,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;YACjG,IAAI,EAAE,UAAU,EAAE,SAAS;YAC3B,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,KAAK,SAAS;YAC9D,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;SACzB,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QACpC,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,QAAQ,IAAI,EAAE;YAClB,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB;YACjE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI;YACtC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,KAAK,IAAI,CAAC,IAAI;YAC9D,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,qBAAqB;SAC7F,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;QACzC,CAAC;QACD,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,aAAa,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB;YACnF,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc;YACrF,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC;SACnE,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,UAAkB;IAC5D,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,UAAkB;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,sBAAsB,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5G,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,SAAQ;QACpF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC/B,iBAAiB,CAAC,IAAI,EAAE,cAAc,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QACxD,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC,CAAA;QACrH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,KAAoB;IACnE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QAC1C,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;QAC9D,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS;KACvD,CAAC,EAAE,CAAC;QACH,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAA;QAC7F,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAQ;QACzC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;IAC5D,CAAC;IACD,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACxC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;AACxF,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAAgB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACpC,IAAI,KAAK,KAAK,iBAAiB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvD,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACrC,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACzF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAAE,SAAQ;QAClD,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;QACrE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACnE,IAAI,YAAY,GAAG,GAAG,CAAA;IACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;QACvD,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACxF,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAC/C,CAAC;IACD,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACnD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvD,IAAI,CAAC,GAAG;YAAE,QAAQ,GAAG,SAAS,CAAA;aACzB,CAAC;YACJ,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YACrD,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC;gBACzC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YACpF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;YACpC,IAAI,UAAU,CAAC,OAAO,CAAC;gBAAE,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;iBACnE,CAAC;gBACJ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;gBAC7C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvB,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;yBACnD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAChC,OAAO,2BAA2B,CAAA;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,sBAAsB,CAAA;IACvD,IAAI,IAAI,KAAK,qBAAqB;QAAE,OAAO,oBAAoB,CAAA;IAC/D,IAAI,IAAI,KAAK,qBAAqB;QAAE,OAAO,+BAA+B,CAAA;IAC1E,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,iEAAiE,CAAA;IACtG,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,gCAAgC,CAAA;IAClE,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB,EAAE,IAAY;IAClD,OAAO,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,wBAAwB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;AAC5G,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,aAAa,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAE,EAAE;QAClC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACjH,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7C,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,SAAS,EAAE,CAAC,CAAA;YACjF,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,SAAS,CAAC,CAAA;iBACpC,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;QAC9G,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAA;IACnE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,KAA0B;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,IAAiB;IAClD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAA;QAC1E,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,WAAmB;IACpD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,EAAE,CAAC,CAAA;IAC7D,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE;QAC1B,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI;QAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;YAC9E,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,IAAY,EAAE,UAAmC,EAAE,UAAkB,EACrE,QAAqB,EAAE,OAAoB;IAE3C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;aAC5E,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAChD,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,IAAI,CAAC,cAAc,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;IACtE,IAAI,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAE,EAAE;QAClC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACjH,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7C,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAA;YAC5E,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,SAAS,CAAC,CAAA;iBACpC,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;QAC9G,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAA;AAClC,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAA;IAC5D,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAA;AAC9F,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAa;IACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAA;IAC1E,IAAI,OAAO,GAAG,IAAI,CAAA;IAClB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC7B,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,KAAK,EAAE,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAa;IACpE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,QAAQ,EAAE,CAAC,CAAA;IACnF,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC7E,OAAO,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AAC/E,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAChG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAA;AAC9F,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACrC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAC1G,CAAC","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 DEFAULT_DEFINITION = 'agent/AGENTS.md'\nconst DEFAULT_SKILLS_ROOT = 'agent/skills'\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 const definitionRef = existingProject?.agent?.definition || DEFAULT_DEFINITION\n const declaredSkillsRoot = existingProject?.agent?.skillsRoot || ''\n const skillsRoot = declaredSkillsRoot || (existingProject ? 'skills' : DEFAULT_SKILLS_ROOT)\n const basicRoot = declaredSkillsRoot\n ? `${skillsRoot}/${BASIC}`\n : existingProject ? `.agents/skills/${BASIC}` : `${skillsRoot}/${BASIC}`\n const basicInstruction = `${basicRoot}/SKILL.md`\n const managedGlobInstructions = conflictingManagedInstructionGlobs(\n rootReal, definitionRef, basicInstruction)\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, skillsRoot)\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:${dirname(definitionRef) || '.'}`,\n skills: existingBindings?.skills || `local-dir:${skillsRoot}`,\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, definitionRef)\n const repositoryInstructionsPath = join(rootReal, 'AGENTS.md')\n if (!existingProject && definitionRef !== 'AGENTS.md' &&\n !existsSync(repositoryInstructionsPath)) {\n files.set('AGENTS.md', readAsset(packageRoot, 'REPOSITORY.template.md'))\n }\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(definitionRef, body)\n semanticFiles.push(definitionRef)\n } else {\n assertRegularFile(agentsPath, definitionRef)\n const body = readFileSync(agentsPath, 'utf8')\n files.set(definitionRef, body)\n if (TEMPLATE_MARKER.test(body)) semanticFiles.push(definitionRef)\n }\n\n for (const name of roleSkills) {\n const rolePath = `${skillsRoot}/${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 if (existingProject && !declaredSkillsRoot) {\n trees.set(`.agents/skills/${name}`, tree)\n }\n }\n\n trees.set(basicRoot, 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, basicInstruction,\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: {\n definition: DEFAULT_DEFINITION,\n skillsRoot: DEFAULT_SKILLS_ROOT,\n skills: [BASIC, ...input.roleSkills],\n },\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, basicInstruction: 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, basicInstruction)),\n ...(definition === 'AGENTS.md' ? [] : [definition]),\n basicInstruction,\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, basicInstruction: 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, basicInstruction)))\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, skillsRoot: string): { names: string[] } {\n const base = join(root, skillsRoot)\n if (!existsSync(base)) return { names: [] }\n if (!lstatSync(base).isDirectory() || lstatSync(base).isSymbolicLink()) {\n throw new Error(`${skillsRoot} 必须是 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 === DEFAULT_DEFINITION) {\n return '补齐 Agent 交付本体;语义内容仍需开发者评审'\n }\n if (path === 'AGENTS.md') return '区分仓库开发约束与 Agent 交付本体'\n if (path === 'agent.bindings.json') return '固化本体、语义存储与宿主私有状态路由'\n if (path === 'dingtalk-agent.json') return '把目录升级为可发现、可版本化的 Agent Project'\n if (path === 'opencode.json') return '绑定唯一 Agent Definition、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"]}
@@ -22,6 +22,7 @@ export const MANAGED_AGENT_PLATFORMS = [
22
22
  { role: 'ops', name: 'multica-external', purpose: '平台运维执行体:供给/绑定机器人/观测/调度(纯 HTTPS)' },
23
23
  ],
24
24
  commands: ['deploy', 'promote', 'observe'],
25
+ provider: 'multica',
25
26
  suggestedEndpoint: 'https://fde-workbench.dingtalk.com',
26
27
  endpointEnv: 'MULTICA_SERVER_URL',
27
28
  },