sdd-mcp-server 3.5.1 → 5.0.0

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 (124) hide show
  1. package/README.md +92 -683
  2. package/agents/architect.md +15 -93
  3. package/agents/implementer.md +16 -141
  4. package/agents/planner.md +16 -84
  5. package/agents/reviewer.md +16 -239
  6. package/agents/security-auditor.md +16 -114
  7. package/agents/tdd-guide.md +17 -228
  8. package/dist/adapters/cli/SDDToolAdapter.d.ts +14 -8
  9. package/dist/adapters/cli/SDDToolAdapter.js +188 -405
  10. package/dist/adapters/cli/SDDToolAdapter.js.map +1 -1
  11. package/dist/application/services/ContextCompactionService.d.ts +88 -16
  12. package/dist/application/services/ContextCompactionService.js +474 -187
  13. package/dist/application/services/ContextCompactionService.js.map +1 -1
  14. package/dist/application/services/ProjectService.js +3 -3
  15. package/dist/application/services/ProjectService.js.map +1 -1
  16. package/dist/application/services/SpecPathResolver.d.ts +24 -0
  17. package/dist/application/services/SpecPathResolver.js +70 -0
  18. package/dist/application/services/SpecPathResolver.js.map +1 -0
  19. package/dist/application/services/WorkflowEngineService.d.ts +214 -50
  20. package/dist/application/services/WorkflowEngineService.js +1447 -292
  21. package/dist/application/services/WorkflowEngineService.js.map +1 -1
  22. package/dist/application/services/WorkflowErrors.d.ts +16 -0
  23. package/dist/application/services/WorkflowErrors.js +53 -0
  24. package/dist/application/services/WorkflowErrors.js.map +1 -0
  25. package/dist/application/services/WorkflowValidationService.d.ts +25 -46
  26. package/dist/application/services/WorkflowValidationService.js +284 -627
  27. package/dist/application/services/WorkflowValidationService.js.map +1 -1
  28. package/dist/cli/install-skills.d.ts +3 -9
  29. package/dist/cli/install-skills.js +129 -174
  30. package/dist/cli/install-skills.js.map +1 -1
  31. package/dist/cli/install-target.d.ts +42 -8
  32. package/dist/cli/install-target.js +27 -9
  33. package/dist/cli/install-target.js.map +1 -1
  34. package/dist/cli/sdd-mcp-cli.d.ts +1 -1
  35. package/dist/cli/sdd-mcp-cli.js +7 -6
  36. package/dist/cli/sdd-mcp-cli.js.map +1 -1
  37. package/dist/cli/tool-support/claude-code.js +17 -34
  38. package/dist/cli/tool-support/claude-code.js.map +1 -1
  39. package/dist/cli/tool-support/codex.d.ts +0 -53
  40. package/dist/cli/tool-support/codex.js +10 -94
  41. package/dist/cli/tool-support/codex.js.map +1 -1
  42. package/dist/cli/tool-support/index.d.ts +3 -2
  43. package/dist/cli/tool-support/index.js +3 -1
  44. package/dist/cli/tool-support/index.js.map +1 -1
  45. package/dist/cli/tool-support/mcp-registration.d.ts +22 -0
  46. package/dist/cli/tool-support/mcp-registration.js +275 -0
  47. package/dist/cli/tool-support/mcp-registration.js.map +1 -0
  48. package/dist/cli/tool-support/omp.d.ts +5 -0
  49. package/dist/cli/tool-support/omp.js +47 -0
  50. package/dist/cli/tool-support/omp.js.map +1 -0
  51. package/dist/cli/tool-support/root-guidance.d.ts +2 -9
  52. package/dist/cli/tool-support/root-guidance.js +44 -37
  53. package/dist/cli/tool-support/root-guidance.js.map +1 -1
  54. package/dist/cli/tool-support/target-agent-renderer.d.ts +1 -0
  55. package/dist/cli/tool-support/target-agent-renderer.js +37 -4
  56. package/dist/cli/tool-support/target-agent-renderer.js.map +1 -1
  57. package/dist/cli/tool-support/target-installer.d.ts +9 -3
  58. package/dist/cli/tool-support/target-installer.js +100 -26
  59. package/dist/cli/tool-support/target-installer.js.map +1 -1
  60. package/dist/cli/utils/preserving-writer.d.ts +56 -0
  61. package/dist/cli/utils/preserving-writer.js +603 -10
  62. package/dist/cli/utils/preserving-writer.js.map +1 -1
  63. package/dist/domain/ports.d.ts +4 -0
  64. package/dist/domain/types.d.ts +52 -7
  65. package/dist/domain/types.js +5 -4
  66. package/dist/domain/types.js.map +1 -1
  67. package/dist/index.d.ts +13 -10
  68. package/dist/index.js +16 -1199
  69. package/dist/index.js.map +1 -1
  70. package/dist/infrastructure/adapters/NodeFileSystemAdapter.d.ts +3 -0
  71. package/dist/infrastructure/adapters/NodeFileSystemAdapter.js +10 -0
  72. package/dist/infrastructure/adapters/NodeFileSystemAdapter.js.map +1 -1
  73. package/dist/infrastructure/mcp/CapabilityNegotiator.js +3 -3
  74. package/dist/infrastructure/mcp/CapabilityNegotiator.js.map +1 -1
  75. package/dist/infrastructure/mcp/MCPServer.js +13 -13
  76. package/dist/infrastructure/mcp/MCPServer.js.map +1 -1
  77. package/dist/infrastructure/mcp/ToolRegistry.d.ts +5 -1
  78. package/dist/infrastructure/mcp/ToolRegistry.js +11 -4
  79. package/dist/infrastructure/mcp/ToolRegistry.js.map +1 -1
  80. package/dist/infrastructure/mcp/sddToolDefinitions.d.ts +6 -0
  81. package/dist/infrastructure/mcp/sddToolDefinitions.js +110 -0
  82. package/dist/infrastructure/mcp/sddToolDefinitions.js.map +1 -0
  83. package/dist/infrastructure/schemas/project.schema.d.ts +2 -2
  84. package/dist/infrastructure/schemas/project.schema.js +2 -2
  85. package/dist/infrastructure/schemas/project.schema.js.map +1 -1
  86. package/dist/shared/version.d.ts +3 -0
  87. package/dist/shared/version.js +4 -0
  88. package/dist/shared/version.js.map +1 -0
  89. package/dist/utils/atomicWrite.d.ts +8 -35
  90. package/dist/utils/atomicWrite.js +24 -57
  91. package/dist/utils/atomicWrite.js.map +1 -1
  92. package/dist/utils/withFilesystemLock.d.ts +22 -0
  93. package/dist/utils/withFilesystemLock.js +219 -0
  94. package/dist/utils/withFilesystemLock.js.map +1 -0
  95. package/mcp-server.js +5 -2883
  96. package/package.json +8 -3
  97. package/scripts/context-usage-report.mjs +602 -0
  98. package/sdd-entry.js +17 -6
  99. package/skills/sdd-commit/REFERENCE.md +31 -0
  100. package/skills/sdd-commit/SKILL.md +17 -273
  101. package/skills/sdd-design/REFERENCE.md +51 -0
  102. package/skills/sdd-design/SKILL.md +25 -262
  103. package/skills/sdd-implement/REFERENCE.md +30 -0
  104. package/skills/sdd-implement/SKILL.md +27 -284
  105. package/skills/sdd-requirements/REFERENCE.md +39 -0
  106. package/skills/sdd-requirements/SKILL.md +28 -132
  107. package/skills/sdd-review/REFERENCE.md +26 -0
  108. package/skills/sdd-review/SKILL.md +17 -181
  109. package/skills/sdd-security-check/REFERENCE.md +19 -0
  110. package/skills/sdd-security-check/SKILL.md +18 -184
  111. package/skills/sdd-steering/REFERENCE.md +25 -0
  112. package/skills/sdd-steering/SKILL.md +18 -216
  113. package/skills/sdd-steering-custom/REFERENCE.md +27 -0
  114. package/skills/sdd-steering-custom/SKILL.md +19 -203
  115. package/skills/sdd-tasks/REFERENCE.md +25 -0
  116. package/skills/sdd-tasks/SKILL.md +27 -244
  117. package/skills/sdd-test-gen/REFERENCE.md +15 -0
  118. package/skills/sdd-test-gen/SKILL.md +17 -287
  119. package/skills/simple-task/REFERENCE.md +22 -0
  120. package/skills/simple-task/SKILL.md +17 -138
  121. package/templates/CLAUDE.md +13 -31
  122. package/templates/codex-AGENTS.md +7 -9
  123. package/rules/git-workflow.md +0 -92
  124. package/rules/sdd-workflow.md +0 -116
@@ -1,40 +1,47 @@
1
- import * as fs from 'fs';
2
- export function buildTableSection(title, subtitle, basePath, items, pathFormatter) {
3
- if (items.length === 0)
4
- return '';
5
- let section = `### ${title} (\`${basePath}/\`)\n\n`;
6
- section += `${subtitle}\n\n`;
7
- section += `| ${title.slice(0, -1)} | Description | Path |\n`;
8
- section += '|-------|-------------|------|\n';
9
- for (const item of items) {
10
- section += `| ${item.name} | ${item.description || '—'} | \`${pathFormatter(item)}\` |\n`;
11
- }
12
- section += '\n';
13
- return section;
14
- }
15
- export function buildSteeringSection(basePath, docs) {
16
- if (docs.length === 0)
17
- return '';
18
- let section = `### Steering (\`${basePath}/\`)\n\n`;
19
- section += 'Project-specific context documents:\n\n';
20
- for (const doc of docs) {
21
- section += `- \`${basePath}/${doc}\`\n`;
22
- }
23
- section += '\n';
24
- return section;
25
- }
26
- export function buildGuidanceSection(title, basePath) {
27
- if (!basePath)
28
- return '';
29
- return `### ${title} (\`${basePath}/\`)\n\nRead the relevant guidance files from this directory on demand.\n\n`;
30
- }
31
- export async function listMarkdownFiles(directory) {
32
- try {
33
- const entries = await fs.promises.readdir(directory);
34
- return entries.filter(file => file.endsWith('.md'));
35
- }
36
- catch {
37
- return [];
1
+ const TITLES = {
2
+ skills: 'Skills',
3
+ steering: 'Steering',
4
+ rules: 'Rules',
5
+ contexts: 'Contexts',
6
+ agents: 'Agents',
7
+ hooks: 'Hooks',
8
+ };
9
+ export function buildCompactRootGuidance(target, paths, selected, preamble) {
10
+ const invocation = target === 'codex' ? '$' : target === 'omp' ? '/skill:' : '/';
11
+ const heading = preamble?.split(/\r?\n/).find(line => line.trim())?.trim();
12
+ const routing = target === 'omp'
13
+ ? [
14
+ 'High-level work runs inline on Sol/medium by default. Project Sol/xhigh advisors are explicit opt-in.',
15
+ 'When explicitly invoked, use one advisor without nested delegation; on failure, record one fallback and continue inline without retrying.',
16
+ ]
17
+ : target === 'claude-code'
18
+ ? [
19
+ 'High-level planning, architecture, review, and security execute in the current turn on Opus.',
20
+ 'Implementation and TDD execute in the current turn on Sonnet; do not spawn a redundant specialist.',
21
+ ]
22
+ : [
23
+ 'High-level planning, architecture, review, and security may use one configured Sol/xhigh custom agent.',
24
+ 'Implementation and TDD run inline on Sol/medium; on advisor failure, record one fallback and continue inline without retrying.',
25
+ ];
26
+ const lines = [
27
+ heading || `# SDD guidance for ${target}`,
28
+ '',
29
+ '## Workflow',
30
+ '',
31
+ `After installation, reload or restart the host and accept project trust. Use \`${invocation}simple-task <description>\` for small changes. For formal work, invoke \`${invocation}sdd-requirements <feature-name>\`, then \`${invocation}sdd-design\`, \`${invocation}sdd-tasks\`, and \`${invocation}sdd-implement\` after each explicit approval.`,
32
+ 'Skills automatically restore durable workflow state and approved compact context; users do not call MCP tools or paste workflow JSON.',
33
+ '',
34
+ ];
35
+ if (selected.size > 0) {
36
+ lines.push('## On-demand directories', '');
37
+ for (const component of ['skills', 'rules', 'contexts', 'agents', 'hooks', 'steering']) {
38
+ if (!selected.has(component))
39
+ continue;
40
+ lines.push(`- ${TITLES[component]}: \`${paths[component]}/\``);
41
+ }
42
+ lines.push('');
38
43
  }
44
+ lines.push('## Model routing', '', ...routing, '');
45
+ return `${lines.join('\n').trim()}\n`;
39
46
  }
40
47
  //# sourceMappingURL=root-guidance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"root-guidance.js","sourceRoot":"","sources":["../../../src/cli/tool-support/root-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAQzB,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,QAAgB,EAChB,QAAgB,EAChB,KAAqB,EACrB,aAA6C;IAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,IAAI,OAAO,GAAG,OAAO,KAAK,OAAO,QAAQ,UAAU,CAAC;IACpD,OAAO,IAAI,GAAG,QAAQ,MAAM,CAAC;IAC7B,OAAO,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC;IAC9D,OAAO,IAAI,kCAAkC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,IAAI,GAAG,QAAQ,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5F,CAAC;IACD,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,IAAc;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,IAAI,OAAO,GAAG,mBAAmB,QAAQ,UAAU,CAAC;IACpD,OAAO,IAAI,yCAAyC,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,OAAO,QAAQ,IAAI,GAAG,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,QAA4B;IAC9E,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,OAAO,KAAK,OAAO,QAAQ,6EAA6E,CAAC;AAClH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"root-guidance.js","sourceRoot":"","sources":["../../../src/cli/tool-support/root-guidance.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAA4C;IACtD,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,UAAU,wBAAwB,CACtC,MAAqB,EACrB,KAA2B,EAC3B,QAAoC,EACpC,QAAiB;IAEjB,MAAM,UAAU,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,MAAM,OAAO,GAAG,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,KAAK,KAAK;QAC9B,CAAC,CAAC;YACA,uGAAuG;YACvG,2IAA2I;SAC5I;QACD,CAAC,CAAC,MAAM,KAAK,aAAa;YACxB,CAAC,CAAC;gBACA,8FAA8F;gBAC9F,oGAAoG;aACrG;YACD,CAAC,CAAC;gBACA,wGAAwG;gBACxG,gIAAgI;aACjI,CAAC;IACN,MAAM,KAAK,GAAG;QACZ,OAAO,IAAI,sBAAsB,MAAM,EAAE;QACzC,EAAE;QACF,aAAa;QACb,EAAE;QACF,kFAAkF,UAAU,4EAA4E,UAAU,6CAA6C,UAAU,mBAAmB,UAAU,sBAAsB,UAAU,+CAA+C;QACrV,uIAAuI;QACvI,EAAE;KACH,CAAC;IACF,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAU,EAAE,CAAC;YAChG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,IAAI,CACR,kBAAkB,EAClB,EAAE,EACF,GAAG,OAAO,EACV,EAAE,CACH,CAAC;IACF,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACxC,CAAC"}
@@ -9,3 +9,4 @@ export interface SourceAgent {
9
9
  export declare function parseSourceAgent(content: string): SourceAgent;
10
10
  export declare function renderClaudeCodeAgent(agent: SourceAgent): string;
11
11
  export declare function renderCodexAgent(agent: SourceAgent): string;
12
+ export declare function renderOmpAgent(agent: SourceAgent): string;
@@ -22,17 +22,50 @@ export function parseSourceAgent(content) {
22
22
  };
23
23
  }
24
24
  export function renderClaudeCodeAgent(agent) {
25
- const model = ROLE_MODEL_ROUTES[agent.role].claudeCode.model;
26
- return `---\nname: ${agent.name}\ndescription: ${agent.description}\nrole: ${agent.role}\nexpertise: ${agent.expertise}\nmodel: ${model}\n---\n\n${agent.instructions}\n`;
25
+ const route = ROLE_MODEL_ROUTES[agent.role];
26
+ const readOnly = route.taskClass === 'advisor';
27
+ const tools = readOnly ? 'Read, Grep, Glob' : 'Read, Grep, Glob, Edit, Write, Bash';
28
+ const maxTurns = readOnly ? 12 : 24;
29
+ return `---\nname: ${agent.name}\ndescription: ${agent.description}\nrole: ${agent.role}\nexpertise: ${agent.expertise}\nmodel: ${route.claudeCode.model}\ntools: ${tools}\nmaxTurns: ${maxTurns}\n---\n\n${agent.instructions}\n`;
27
30
  }
28
31
  export function renderCodexAgent(agent) {
29
- const route = ROLE_MODEL_ROUTES[agent.role].codex;
32
+ const roleRoute = ROLE_MODEL_ROUTES[agent.role];
33
+ const route = roleRoute.codex;
34
+ const readOnly = roleRoute.taskClass === 'advisor';
35
+ const instructions = `${agent.instructions}\n\nDo not delegate or spawn another agent. Return only decisions, affected artifacts, verification evidence, and unresolved blockers; at most 2,048 estimated tokens.`;
30
36
  return [
31
37
  `name = ${JSON.stringify(agent.name)}`,
32
38
  `description = ${JSON.stringify(agent.description)}`,
33
39
  `model = ${JSON.stringify(route.model)}`,
34
40
  `model_reasoning_effort = ${JSON.stringify(route.reasoningEffort)}`,
35
- `developer_instructions = ${JSON.stringify(agent.instructions)}`,
41
+ `sandbox_mode = ${JSON.stringify(readOnly ? 'read-only' : 'workspace-write')}`,
42
+ `max_turns = ${readOnly ? 12 : 24}`,
43
+ `developer_instructions = ${JSON.stringify(instructions)}`,
44
+ '',
45
+ ].join('\n');
46
+ }
47
+ export function renderOmpAgent(agent) {
48
+ const route = ROLE_MODEL_ROUTES[agent.role].omp;
49
+ const readOnly = ROLE_MODEL_ROUTES[agent.role].taskClass === 'advisor';
50
+ const tools = readOnly
51
+ ? ['read', 'grep', 'glob']
52
+ : ['read', 'grep', 'glob', 'edit', 'write', 'bash'];
53
+ const maxTurns = readOnly ? 12 : 24;
54
+ return [
55
+ '---',
56
+ `name: ${agent.name}`,
57
+ `description: ${agent.description}`,
58
+ `model: ${route.model}`,
59
+ `thinkingLevel: ${route.thinkingLevel}`,
60
+ 'tools:',
61
+ ...tools.map(tool => ` - ${tool}`),
62
+ `maxTurns: ${maxTurns}`,
63
+ '---',
64
+ '',
65
+ agent.instructions,
66
+ '',
67
+ 'Return only: decisions, affected artifacts, verification evidence, and unresolved blockers.',
68
+ 'Do not delegate or spawn another agent. Keep the result at most 2,048 estimated tokens.',
36
69
  '',
37
70
  ].join('\n');
38
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"target-agent-renderer.js","sourceRoot":"","sources":["../../../src/cli/tool-support/target-agent-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"target-agent-renderer.js","sourceRoot":"","sources":["../../../src/cli/tool-support/target-agent-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,sBAAsB,CAAC;AAU9B,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,IAAI,CAAC;YAAE,SAAS;QAC7B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,iBAAiB,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IAC7G,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAChC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC9C,IAAI,EAAE,IAAiB;QACvB,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QAC1C,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qCAAqC,CAAC;IACpF,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,OAAO,cAAc,KAAK,CAAC,IAAI,kBAAkB,KAAK,CAAC,WAAW,WAAW,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,UAAU,CAAC,KAAK,YAAY,KAAK,eAAe,QAAQ,YAAY,KAAK,CAAC,YAAY,IAAI,CAAC;AACrO,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC;IACnD,MAAM,YAAY,GAAG,GAAG,KAAK,CAAC,YAAY,wKAAwK,CAAC;IACnN,OAAO;QACL,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACtC,iBAAiB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;QACpD,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACxC,4BAA4B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;QACnE,kBAAkB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE;QAC9E,eAAe,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,4BAA4B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;QAC1D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IAChD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;IACvE,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1B,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,OAAO;QACL,KAAK;QACL,SAAS,KAAK,CAAC,IAAI,EAAE;QACrB,gBAAgB,KAAK,CAAC,WAAW,EAAE;QACnC,UAAU,KAAK,CAAC,KAAK,EAAE;QACvB,kBAAkB,KAAK,CAAC,aAAa,EAAE;QACvC,QAAQ;QACR,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;QACnC,aAAa,QAAQ,EAAE;QACvB,KAAK;QACL,EAAE;QACF,KAAK,CAAC,YAAY;QAClB,EAAE;QACF,6FAA6F;QAC7F,yFAAyF;QACzF,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,QAA6B,EAAE,GAAW;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -3,7 +3,7 @@ import type { RulesManager } from '../../rules/RulesManager.js';
3
3
  import type { ContextManager } from '../../contexts/ContextManager.js';
4
4
  import type { AgentManager } from '../../agents/AgentManager.js';
5
5
  import type { HookLoader } from '../../hooks/HookLoader.js';
6
- import type { ComponentType, InstallTarget, ResolvedInstallPaths, TargetInstallReport } from '../install-target.js';
6
+ import { type ComponentType, type InstallProfile, type InstallTarget, type ResolvedInstallPaths, type TargetInstallReport } from '../install-target.js';
7
7
  import { PreservingWriter } from '../utils/preserving-writer.js';
8
8
  export interface TargetSources {
9
9
  skillManager: SkillManager;
@@ -19,22 +19,28 @@ export interface BaseTargetInstallRequest {
19
19
  components: readonly ComponentType[];
20
20
  sources: TargetSources;
21
21
  writer?: PreservingWriter;
22
+ profile?: InstallProfile;
23
+ refreshGenerated?: boolean;
22
24
  }
23
25
  export declare class TargetInstallSession {
24
26
  readonly target: InstallTarget;
25
27
  readonly projectRoot: string;
26
28
  readonly writer: PreservingWriter;
27
29
  readonly report: TargetInstallReport;
28
- constructor(target: InstallTarget, projectRoot: string, writer: PreservingWriter);
30
+ constructor(target: InstallTarget, projectRoot: string, writer: PreservingWriter, profile: InstallProfile, components: readonly ComponentType[], refreshGenerated?: boolean);
29
31
  resolve(configuredPath: string): string;
30
32
  label(destination: string): string;
31
33
  write(component: ComponentType | 'root', name: string, destination: string, content: string): Promise<void>;
32
34
  copy(component: ComponentType | 'root', name: string, source: string, destination: string): Promise<void>;
33
35
  copySkills(sourceManager: SkillManager, configuredPath: string): Promise<void>;
34
36
  copySteering(source: string, configuredPath: string): Promise<void>;
35
- fail(component: ComponentType | 'root', name: string, destination: string, error: unknown): void;
37
+ complete(paths: ResolvedInstallPaths): Promise<TargetInstallReport>;
38
+ fail(component: ComponentType | 'root' | 'runtime', name: string, destination: string, error: unknown): void;
39
+ private copySkillTree;
36
40
  }
37
41
  export declare function copyFlatComponents(session: TargetInstallSession, component: 'rules' | 'contexts', configuredPath: string, descriptors: Array<{
38
42
  name: string;
39
43
  path: string;
40
44
  }>): Promise<void>;
45
+ export declare function renderTargetRule(target: InstallTarget, fileName: string, source: string): string;
46
+ export declare function renderTargetSkill(target: InstallTarget, skillName: string, source: string): string;
@@ -1,16 +1,18 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ import { ROLE_MODEL_ROUTES, SKILL_AGENT_ROUTES, } from '../install-target.js';
3
4
  import { validateChildName, validateDestinationPath } from '../utils/preserving-writer.js';
4
5
  export class TargetInstallSession {
5
6
  target;
6
7
  projectRoot;
7
8
  writer;
8
9
  report;
9
- constructor(target, projectRoot, writer) {
10
+ constructor(target, projectRoot, writer, profile, components, refreshGenerated = false) {
10
11
  this.target = target;
11
12
  this.projectRoot = projectRoot;
12
13
  this.writer = writer;
13
- this.report = { target, installed: [], skipped: [], failed: [] };
14
+ this.report = { target, installed: [], skipped: [], failed: [], conflicts: [], warnings: [] };
15
+ writer.beginTarget(target, profile, components, refreshGenerated);
14
16
  }
15
17
  resolve(configuredPath) {
16
18
  return path.resolve(this.projectRoot, configuredPath);
@@ -22,8 +24,10 @@ export class TargetInstallSession {
22
24
  async write(component, name, destination, content) {
23
25
  try {
24
26
  validateDestinationPath(this.projectRoot, destination);
25
- const outcome = await this.writer.writeIfAbsent(destination, content);
26
- this.report[outcome].push(this.label(destination));
27
+ const result = await this.writer.writeManaged(this.target, component, name, destination, content);
28
+ this.report[result.outcome].push(this.label(destination));
29
+ if (result.conflict)
30
+ this.report.conflicts.push(result.conflict);
27
31
  }
28
32
  catch (error) {
29
33
  this.fail(component, name, destination, error);
@@ -31,9 +35,7 @@ export class TargetInstallSession {
31
35
  }
32
36
  async copy(component, name, source, destination) {
33
37
  try {
34
- validateDestinationPath(this.projectRoot, destination);
35
- const outcome = await this.writer.copyIfAbsent(source, destination);
36
- this.report[outcome].push(this.label(destination));
38
+ await this.write(component, name, destination, await fs.promises.readFile(source, 'utf8'));
37
39
  }
38
40
  catch (error) {
39
41
  this.fail(component, name, destination, error);
@@ -41,26 +43,12 @@ export class TargetInstallSession {
41
43
  }
42
44
  async copySkills(sourceManager, configuredPath) {
43
45
  const destinationRoot = this.resolve(configuredPath);
44
- const skills = await sourceManager.listSkills();
45
- for (const skill of skills) {
46
+ for (const skill of await sourceManager.listSkills()) {
46
47
  try {
47
48
  validateChildName(skill.name);
48
- const destination = path.join(destinationRoot, skill.name);
49
- validateDestinationPath(this.projectRoot, destination);
50
- const result = await this.writer.copyTreePreserving(skill.path, destination);
51
- for (const item of result.installed) {
52
- this.report.installed.push(this.label(path.join(destination, item)));
53
- }
54
- for (const item of result.skipped ?? []) {
55
- this.report.skipped.push(this.label(path.join(destination, item)));
56
- }
57
- for (const failure of result.failed) {
58
- this.report.failed.push({
59
- component: 'skills',
60
- name: `${skill.name}/${failure.name}`,
61
- path: failure.path ?? path.join(destination, failure.name),
62
- error: failure.error,
63
- });
49
+ await this.copySkillTree(skill.name, skill.path, path.join(destinationRoot, skill.name), '');
50
+ if (this.target === 'codex') {
51
+ await this.write('skills', `${skill.name}/agents/openai.yaml`, path.join(destinationRoot, skill.name, 'agents', 'openai.yaml'), renderCodexSkillPolicy(skill.name));
64
52
  }
65
53
  }
66
54
  catch (error) {
@@ -90,6 +78,21 @@ export class TargetInstallSession {
90
78
  await this.copy('steering', entry.name, path.join(source, entry.name), path.join(this.resolve(configuredPath), entry.name));
91
79
  }
92
80
  }
81
+ async complete(paths) {
82
+ try {
83
+ this.writer.requireRuntimeRegistration(this.target, paths);
84
+ this.report.conflicts.push(...await this.writer.finalizeTarget(this.target));
85
+ const runtime = this.writer.takeRuntimeResult(this.target);
86
+ this.report.installed.push(...runtime.installed);
87
+ this.report.skipped.push(...runtime.skipped);
88
+ this.report.warnings.push(...runtime.warnings);
89
+ }
90
+ catch (error) {
91
+ await this.writer.rollbackUncommitted(this.target);
92
+ this.fail('runtime', 'sdd-mcp', this.resolve(paths.runtimeConfig), error);
93
+ }
94
+ return this.report;
95
+ }
93
96
  fail(component, name, destination, error) {
94
97
  const failure = {
95
98
  component,
@@ -99,6 +102,26 @@ export class TargetInstallSession {
99
102
  };
100
103
  this.report.failed.push(failure);
101
104
  }
105
+ async copySkillTree(skillName, source, destination, relative) {
106
+ validateDestinationPath(this.projectRoot, destination);
107
+ const entries = await fs.promises.readdir(source, { withFileTypes: true });
108
+ for (const entry of entries) {
109
+ validateChildName(entry.name);
110
+ const sourcePath = path.join(source, entry.name);
111
+ const destinationPath = path.join(destination, entry.name);
112
+ const nested = relative ? `${relative}/${entry.name}` : entry.name;
113
+ if (entry.isDirectory()) {
114
+ await this.copySkillTree(skillName, sourcePath, destinationPath, nested);
115
+ }
116
+ else if (entry.isFile()) {
117
+ const sourceContent = await fs.promises.readFile(sourcePath, 'utf8');
118
+ const content = entry.name === 'SKILL.md'
119
+ ? renderTargetSkill(this.target, skillName, sourceContent)
120
+ : sourceContent;
121
+ await this.write('skills', `${skillName}/${nested}`, destinationPath, content);
122
+ }
123
+ }
124
+ }
102
125
  }
103
126
  export async function copyFlatComponents(session, component, configuredPath, descriptors) {
104
127
  const destinationRoot = session.resolve(configuredPath);
@@ -106,11 +129,62 @@ export async function copyFlatComponents(session, component, configuredPath, des
106
129
  const fileName = path.basename(descriptor.path);
107
130
  try {
108
131
  validateChildName(fileName);
109
- await session.copy(component, descriptor.name, descriptor.path, path.join(destinationRoot, fileName));
132
+ const source = await fs.promises.readFile(descriptor.path, 'utf8');
133
+ const content = component === 'rules' ? renderTargetRule(session.target, fileName, source) : source;
134
+ await session.write(component, descriptor.name, path.join(destinationRoot, fileName), content);
110
135
  }
111
136
  catch (error) {
112
137
  session.fail(component, descriptor.name, path.join(destinationRoot, fileName), error);
113
138
  }
114
139
  }
115
140
  }
141
+ const RULE_SCOPES = {
142
+ 'coding-style.md': ['**/*.{js,jsx,ts,tsx,py,go,rs,java,kt,c,cc,cpp,h,hpp}', '**/*.{json,yaml,yml,toml}'],
143
+ 'error-handling.md': ['**/*.{js,jsx,ts,tsx,py,go,rs,java,kt,c,cc,cpp,h,hpp}'],
144
+ 'security.md': ['**/*.{js,jsx,ts,tsx,py,go,rs,java,kt,c,cc,cpp,h,hpp,json,yaml,yml,toml}'],
145
+ 'testing.md': ['**/{test,tests,spec,__tests__}/**/*', '**/*.{test,spec}.{js,jsx,ts,tsx,py}', '**/src/**/*'],
146
+ };
147
+ export function renderTargetRule(target, fileName, source) {
148
+ const globs = RULE_SCOPES[fileName] ?? ['**/*'];
149
+ const body = stripFrontmatter(source).trim();
150
+ if (target === 'claude-code') {
151
+ return `---\npaths:\n${globs.map(glob => ` - ${JSON.stringify(glob)}`).join('\n')}\n---\n\n${body}\n`;
152
+ }
153
+ if (target === 'omp') {
154
+ return `---\ndescription: SDD ${path.basename(fileName, '.md')} guidance\nglobs:\n${globs.map(glob => ` - ${JSON.stringify(glob)}`).join('\n')}\nalwaysApply: false\n---\n\n${body}\n`;
155
+ }
156
+ return `${body}\n`;
157
+ }
158
+ export function renderTargetSkill(target, skillName, source) {
159
+ const role = SKILL_AGENT_ROUTES[skillName];
160
+ const extra = ['disable-model-invocation: true'];
161
+ let execution = '';
162
+ if (role && target === 'claude-code') {
163
+ extra.push(`model: ${ROLE_MODEL_ROUTES[role].claudeCode.model}`);
164
+ execution = '\nExecute in this turn; do not spawn a second specialist.\n';
165
+ }
166
+ else if (role && target === 'omp' && ROLE_MODEL_ROUTES[role].taskClass === 'advisor') {
167
+ execution = `\nRun inline by default. The project advisor at .omp/agents/${role}.md is explicit opt-in only; if the user invokes it, allow one specialistDepth: 1 handoff without nesting or retry.\n`;
168
+ }
169
+ else if (role && target === 'codex' && ROLE_MODEL_ROUTES[role].taskClass === 'advisor') {
170
+ execution = `\nRequest the configured ${role} custom agent once with specialistDepth: 1; nested delegation is prohibited. If unavailable, record the fallback and continue inline.\n`;
171
+ }
172
+ const match = source.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
173
+ if (!match)
174
+ return `---\n${extra.join('\n')}\n---\n\n${source.trim()}${execution}\n`;
175
+ const metadata = match[1].split(/\r?\n/).filter(line => !/^(disable-model-invocation|model):/.test(line));
176
+ return `---\n${metadata.join('\n')}\n${extra.join('\n')}\n---\n\n${match[2].trim()}${execution}\n`;
177
+ }
178
+ function renderCodexSkillPolicy(skillName) {
179
+ const role = SKILL_AGENT_ROUTES[skillName];
180
+ const route = role ? ROLE_MODEL_ROUTES[role] : undefined;
181
+ const description = route?.taskClass === 'advisor'
182
+ ? `Explicitly invoke the configured ${role} agent once; nested delegation is prohibited.`
183
+ : 'Execute inline in the current turn.';
184
+ return `policy:\n allow_implicit_invocation: false\ninterface:\n description: ${JSON.stringify(description)}\n`;
185
+ }
186
+ function stripFrontmatter(content) {
187
+ const match = content.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?([\s\S]*)$/);
188
+ return match ? match[1] : content;
189
+ }
116
190
  //# sourceMappingURL=target-installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"target-installer.js","sourceRoot":"","sources":["../../../src/cli/tool-support/target-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"target-installer.js","sourceRoot":"","sources":["../../../src/cli/tool-support/target-installer.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,69 @@
1
1
  import type { InstallResult } from '../../shared/BaseManager.js';
2
+ import { type ComponentType, type InstallConflict, type InstallProfile, type InstallTarget, type ResolvedInstallPaths } from '../install-target.js';
2
3
  export type WriteOutcome = 'installed' | 'skipped';
4
+ export interface ManagedWriteResult {
5
+ outcome: WriteOutcome;
6
+ conflict?: InstallConflict;
7
+ }
8
+ /** Explicit v3.5.1 package-owned files which v4 no longer renders. */
9
+ export declare const LEGACY_V351_TOMBSTONES: Readonly<Record<InstallTarget, readonly string[]>>;
3
10
  export declare function validateChildName(name: string): void;
4
11
  export declare function validateDestinationPath(projectRoot: string, destination: string): void;
5
12
  export declare class PreservingWriter {
6
13
  private readonly projectRoot;
14
+ private readonly generated;
15
+ private readonly profiles;
16
+ private readonly selectedComponents;
17
+ private readonly refreshTargets;
18
+ private readonly pendingShared;
19
+ private readonly runtimePaths;
20
+ private readonly runtimeResults;
21
+ private activeLeaseAssert?;
22
+ private readonly pendingWrites;
23
+ private readonly committedTargets;
24
+ private readonly preservedModifiedFiles;
25
+ private backupStamp?;
7
26
  constructor(projectRoot: string);
27
+ beginTarget(target: InstallTarget, profile: InstallProfile, components: readonly ComponentType[], refreshGenerated?: boolean): void;
28
+ withInstallLock<T>(action: () => Promise<T>): Promise<T>;
29
+ requireRuntimeRegistration(target: InstallTarget, paths: ResolvedInstallPaths): void;
30
+ takeRuntimeResult(target: InstallTarget): {
31
+ installed: string[];
32
+ skipped: string[];
33
+ warnings: string[];
34
+ };
35
+ rollbackUncommitted(target: InstallTarget, assertHeld?: (() => Promise<void>) | undefined): Promise<void>;
36
+ writeManaged(target: InstallTarget, component: ComponentType | 'root', name: string, filePath: string, content: string): Promise<ManagedWriteResult>;
37
+ installRuntimeRegistration(target: InstallTarget, paths?: ResolvedInstallPaths): Promise<{
38
+ installed: string[];
39
+ skipped: string[];
40
+ warnings: string[];
41
+ }>;
42
+ finalizeTarget(target: InstallTarget): Promise<InstallConflict[]>;
43
+ finalizeTargetLocked(target: InstallTarget, assertHeld: () => Promise<void>): Promise<InstallConflict[]>;
44
+ private commitTargetLocked;
45
+ recordShared(filePath: string, component: 'steering' | 'gitignore', mutable: boolean): Promise<void>;
8
46
  writeIfAbsent(filePath: string, content: string): Promise<WriteOutcome>;
9
47
  copyIfAbsent(source: string, destination: string): Promise<WriteOutcome>;
10
48
  copyTreePreserving(source: string, destination: string): Promise<InstallResult>;
11
49
  private copyTree;
50
+ private generatedFor;
51
+ private backup;
52
+ private verifyPendingOwnership;
53
+ private verifyOwnedFile;
54
+ private get manifestPath();
55
+ private readManifest;
56
+ private readManifestSnapshot;
57
+ private parseManifest;
58
+ private requireManifestRecord;
59
+ private requireManifestRelativePath;
60
+ private validateManifestRelativePath;
61
+ private replaceManagedBytesCas;
62
+ private replaceBytesCas;
63
+ private removeBytesCas;
64
+ private relative;
65
+ private trackPendingWrite;
66
+ private markTargetCommitted;
67
+ private requireActiveLease;
12
68
  private validateDestination;
13
69
  }