musubix2 0.3.8 → 0.4.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 (144) hide show
  1. package/.claude/.musubix-managed +1 -0
  2. package/.claude/skills/code-generator/SKILL.md +145 -0
  3. package/.claude/skills/code-generator/scripts/explain.sh +4 -0
  4. package/.claude/skills/code-generator/scripts/generate.sh +4 -0
  5. package/.claude/skills/code-generator/scripts/scaffold.sh +4 -0
  6. package/.claude/skills/code-generator/scripts/synthesis.sh +4 -0
  7. package/.claude/skills/constitution-enforcer/SKILL.md +133 -0
  8. package/.claude/skills/constitution-enforcer/scripts/check.sh +4 -0
  9. package/.claude/skills/constitution-enforcer/scripts/validate.sh +4 -0
  10. package/.claude/skills/design-generator/SKILL.md +136 -0
  11. package/.claude/skills/design-generator/scripts/c4.sh +4 -0
  12. package/.claude/skills/design-generator/scripts/decision.sh +4 -0
  13. package/.claude/skills/design-generator/scripts/generate.sh +4 -0
  14. package/.claude/skills/design-generator/scripts/verify.sh +4 -0
  15. package/.claude/skills/orchestrator/SKILL.md +565 -0
  16. package/.claude/skills/orchestrator/scripts/knowledge.sh +4 -0
  17. package/.claude/skills/orchestrator/scripts/learn.sh +4 -0
  18. package/.claude/skills/orchestrator/scripts/repl.sh +4 -0
  19. package/.claude/skills/orchestrator/scripts/research.sh +4 -0
  20. package/.claude/skills/orchestrator/scripts/security.sh +4 -0
  21. package/.claude/skills/orchestrator/scripts/skills.sh +4 -0
  22. package/.claude/skills/orchestrator/scripts/status.sh +4 -0
  23. package/.claude/skills/orchestrator/scripts/watch.sh +4 -0
  24. package/.claude/skills/orchestrator/scripts/workflow.sh +4 -0
  25. package/.claude/skills/requirements-analyst/SKILL.md +158 -0
  26. package/.claude/skills/requirements-analyst/scripts/analyze.sh +5 -0
  27. package/.claude/skills/requirements-analyst/scripts/interview-answer.sh +4 -0
  28. package/.claude/skills/requirements-analyst/scripts/interview-generate.sh +4 -0
  29. package/.claude/skills/requirements-analyst/scripts/interview.sh +9 -0
  30. package/.claude/skills/requirements-analyst/scripts/validate.sh +5 -0
  31. package/.claude/skills/requirements-analyst/scripts/wizard.sh +4 -0
  32. package/.claude/skills/review-orchestrator/SKILL.md +162 -0
  33. package/.claude/skills/review-orchestrator/review-orchestrator.prompt.md +45 -0
  34. package/.claude/skills/review-orchestrator/scripts/review.sh +13 -0
  35. package/.claude/skills/test-engineer/SKILL.md +139 -0
  36. package/.claude/skills/test-engineer/scripts/generate.sh +4 -0
  37. package/.claude/skills/traceability-auditor/SKILL.md +114 -0
  38. package/.claude/skills/traceability-auditor/scripts/matrix.sh +4 -0
  39. package/.claude/skills/traceability-auditor/scripts/verify-detailed.sh +4 -0
  40. package/.claude/skills/traceability-auditor/scripts/verify.sh +4 -0
  41. package/dist/application/install/claude-setup-transaction.d.ts +28 -0
  42. package/dist/application/install/claude-setup-transaction.d.ts.map +1 -0
  43. package/dist/application/install/claude-setup-transaction.js +113 -0
  44. package/dist/application/install/claude-setup-transaction.js.map +1 -0
  45. package/dist/application/install/claude-skill-index-builder.d.ts +8 -0
  46. package/dist/application/install/claude-skill-index-builder.d.ts.map +1 -0
  47. package/dist/application/install/claude-skill-index-builder.js +18 -0
  48. package/dist/application/install/claude-skill-index-builder.js.map +1 -0
  49. package/dist/application/install/copilot-setup-service.d.ts +20 -0
  50. package/dist/application/install/copilot-setup-service.d.ts.map +1 -0
  51. package/dist/application/install/copilot-setup-service.js +56 -0
  52. package/dist/application/install/copilot-setup-service.js.map +1 -0
  53. package/dist/application/install/index.d.ts +10 -0
  54. package/dist/application/install/index.d.ts.map +1 -0
  55. package/dist/application/install/index.js +10 -0
  56. package/dist/application/install/index.js.map +1 -0
  57. package/dist/application/install/install-planner.d.ts +8 -0
  58. package/dist/application/install/install-planner.d.ts.map +1 -0
  59. package/dist/application/install/install-planner.js +24 -0
  60. package/dist/application/install/install-planner.js.map +1 -0
  61. package/dist/application/install/mcp-config-generator.d.ts +12 -0
  62. package/dist/application/install/mcp-config-generator.d.ts.map +1 -0
  63. package/dist/application/install/mcp-config-generator.js +36 -0
  64. package/dist/application/install/mcp-config-generator.js.map +1 -0
  65. package/dist/application/install/mcp-launch-resolver.d.ts +5 -0
  66. package/dist/application/install/mcp-launch-resolver.d.ts.map +1 -0
  67. package/dist/application/install/mcp-launch-resolver.js +23 -0
  68. package/dist/application/install/mcp-launch-resolver.js.map +1 -0
  69. package/dist/application/install/platform-detector.d.ts +7 -0
  70. package/dist/application/install/platform-detector.d.ts.map +1 -0
  71. package/dist/application/install/platform-detector.js +60 -0
  72. package/dist/application/install/platform-detector.js.map +1 -0
  73. package/dist/application/install/update-service.d.ts +9 -0
  74. package/dist/application/install/update-service.d.ts.map +1 -0
  75. package/dist/application/install/update-service.js +28 -0
  76. package/dist/application/install/update-service.js.map +1 -0
  77. package/dist/application/install/workspace-merge-service.d.ts +9 -0
  78. package/dist/application/install/workspace-merge-service.d.ts.map +1 -0
  79. package/dist/application/install/workspace-merge-service.js +100 -0
  80. package/dist/application/install/workspace-merge-service.js.map +1 -0
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +8164 -3142
  83. package/dist/cli.js.map +1 -1
  84. package/dist/domain/install/index.d.ts +2 -0
  85. package/dist/domain/install/index.d.ts.map +1 -0
  86. package/dist/domain/install/index.js +2 -0
  87. package/dist/domain/install/index.js.map +1 -0
  88. package/dist/domain/install/types.d.ts +140 -0
  89. package/dist/domain/install/types.d.ts.map +1 -0
  90. package/dist/domain/install/types.js +6 -0
  91. package/dist/domain/install/types.js.map +1 -0
  92. package/dist/infrastructure/assets/package-asset-catalog.d.ts +10 -0
  93. package/dist/infrastructure/assets/package-asset-catalog.d.ts.map +1 -0
  94. package/dist/infrastructure/assets/package-asset-catalog.js +28 -0
  95. package/dist/infrastructure/assets/package-asset-catalog.js.map +1 -0
  96. package/dist/infrastructure/assets/package-root-locator.d.ts +4 -0
  97. package/dist/infrastructure/assets/package-root-locator.d.ts.map +1 -0
  98. package/dist/infrastructure/assets/package-root-locator.js +22 -0
  99. package/dist/infrastructure/assets/package-root-locator.js.map +1 -0
  100. package/dist/infrastructure/templates/template-renderer.d.ts +11 -0
  101. package/dist/infrastructure/templates/template-renderer.d.ts.map +1 -0
  102. package/dist/infrastructure/templates/template-renderer.js +41 -0
  103. package/dist/infrastructure/templates/template-renderer.js.map +1 -0
  104. package/dist/infrastructure/workspace/workspace-root-resolver.d.ts +8 -0
  105. package/dist/infrastructure/workspace/workspace-root-resolver.d.ts.map +1 -0
  106. package/dist/infrastructure/workspace/workspace-root-resolver.js +10 -0
  107. package/dist/infrastructure/workspace/workspace-root-resolver.js.map +1 -0
  108. package/dist/infrastructure/workspace/workspace-writer.d.ts +5 -0
  109. package/dist/infrastructure/workspace/workspace-writer.d.ts.map +1 -0
  110. package/dist/infrastructure/workspace/workspace-writer.js +92 -0
  111. package/dist/infrastructure/workspace/workspace-writer.js.map +1 -0
  112. package/dist/interface/cli/confirmation-resolver.d.ts +6 -0
  113. package/dist/interface/cli/confirmation-resolver.d.ts.map +1 -0
  114. package/dist/interface/cli/confirmation-resolver.js +42 -0
  115. package/dist/interface/cli/confirmation-resolver.js.map +1 -0
  116. package/dist/interface/cli/dry-run-reporter.d.ts +8 -0
  117. package/dist/interface/cli/dry-run-reporter.d.ts.map +1 -0
  118. package/dist/interface/cli/dry-run-reporter.js +44 -0
  119. package/dist/interface/cli/dry-run-reporter.js.map +1 -0
  120. package/dist/interface/cli/init-command-handler.d.ts +29 -0
  121. package/dist/interface/cli/init-command-handler.d.ts.map +1 -0
  122. package/dist/interface/cli/init-command-handler.js +166 -0
  123. package/dist/interface/cli/init-command-handler.js.map +1 -0
  124. package/dist/interface/cli/init-mode-resolver.d.ts +10 -0
  125. package/dist/interface/cli/init-mode-resolver.d.ts.map +1 -0
  126. package/dist/interface/cli/init-mode-resolver.js +11 -0
  127. package/dist/interface/cli/init-mode-resolver.js.map +1 -0
  128. package/dist/interface/cli/mcp-cli-launcher.d.ts +8 -0
  129. package/dist/interface/cli/mcp-cli-launcher.d.ts.map +1 -0
  130. package/dist/interface/cli/mcp-cli-launcher.js +20 -0
  131. package/dist/interface/cli/mcp-cli-launcher.js.map +1 -0
  132. package/dist/interface/cli/postinstall-bootstrap.d.ts +9 -0
  133. package/dist/interface/cli/postinstall-bootstrap.d.ts.map +1 -0
  134. package/dist/interface/cli/postinstall-bootstrap.js +51 -0
  135. package/dist/interface/cli/postinstall-bootstrap.js.map +1 -0
  136. package/dist/interface/cli/sse-transport-bridge.d.ts +13 -0
  137. package/dist/interface/cli/sse-transport-bridge.d.ts.map +1 -0
  138. package/dist/interface/cli/sse-transport-bridge.js +15 -0
  139. package/dist/interface/cli/sse-transport-bridge.js.map +1 -0
  140. package/dist/templates/claude-md.md +44 -0
  141. package/dist/templates/copilot-instructions.md +44 -0
  142. package/dist/templates/mcp/claude.json +8 -0
  143. package/dist/templates/mcp/copilot.json +9 -0
  144. package/package.json +7 -4
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ # Detailed traceability verification
3
+ set -e
4
+ npx musubix trace:verify "$@"
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ # Verify traceability
3
+ set -e
4
+ npx musubix trace "$@"
@@ -0,0 +1,28 @@
1
+ import type { GeneratedFile, GeneratedDirectory, InstallContext, TransactionResult } from '../../domain/install/types.js';
2
+ import { PackageAssetCatalog } from '../../infrastructure/assets/package-asset-catalog.js';
3
+ import { PackageRootLocator } from '../../infrastructure/assets/package-root-locator.js';
4
+ import { TemplateRenderer } from '../../infrastructure/templates/template-renderer.js';
5
+ import { WorkspaceWriter } from '../../infrastructure/workspace/workspace-writer.js';
6
+ import { McpConfigGenerator } from './mcp-config-generator.js';
7
+ import { WorkspaceMergeService } from './workspace-merge-service.js';
8
+ import { ClaudeSkillIndexBuilder } from './claude-skill-index-builder.js';
9
+ export interface ClaudeSetupArtifacts {
10
+ claudeMd: GeneratedFile;
11
+ skills: GeneratedDirectory;
12
+ mcpConfig: GeneratedFile;
13
+ marker: GeneratedFile;
14
+ }
15
+ export declare class ClaudeSetupTransaction {
16
+ private readonly catalog;
17
+ private readonly renderer;
18
+ private readonly mcpGen;
19
+ private readonly merger;
20
+ private readonly writer;
21
+ private readonly indexBuilder;
22
+ private readonly locator;
23
+ constructor(catalog: PackageAssetCatalog, renderer: TemplateRenderer, mcpGen: McpConfigGenerator, merger: WorkspaceMergeService, writer: WorkspaceWriter, indexBuilder: ClaudeSkillIndexBuilder, locator: PackageRootLocator);
24
+ prepare(context: InstallContext): Promise<ClaudeSetupArtifacts>;
25
+ execute(context: InstallContext, artifacts: ClaudeSetupArtifacts, dryRun: boolean): Promise<TransactionResult>;
26
+ private readAsset;
27
+ }
28
+ //# sourceMappingURL=claude-setup-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-setup-transaction.d.ts","sourceRoot":"","sources":["../../../src/application/install/claude-setup-transaction.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EAGlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBANP,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,uBAAuB,EACrC,OAAO,EAAE,kBAAkB;IAGxC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkE/D,OAAO,CACX,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,iBAAiB,CAAC;IA+B7B,OAAO,CAAC,SAAS;CAQlB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * P2-07 / DES-INS-004: Atomic Claude setup with rollback on I/O failure.
3
+ */
4
+ import { readFileSync } from 'node:fs';
5
+ import { resolve } from 'node:path';
6
+ export class ClaudeSetupTransaction {
7
+ catalog;
8
+ renderer;
9
+ mcpGen;
10
+ merger;
11
+ writer;
12
+ indexBuilder;
13
+ locator;
14
+ constructor(catalog, renderer, mcpGen, merger, writer, indexBuilder, locator) {
15
+ this.catalog = catalog;
16
+ this.renderer = renderer;
17
+ this.mcpGen = mcpGen;
18
+ this.merger = merger;
19
+ this.writer = writer;
20
+ this.indexBuilder = indexBuilder;
21
+ this.locator = locator;
22
+ }
23
+ async prepare(context) {
24
+ const entries = await this.catalog.list('claude');
25
+ const pkgRoot = this.locator.resolve(import.meta.url);
26
+ // Build skill index for CLAUDE.md
27
+ const indexItems = entries.map(e => ({
28
+ name: e.skillName,
29
+ summary: e.skillName,
30
+ triggers: [],
31
+ path: `.claude/skills/${e.skillName}/SKILL.md`,
32
+ }));
33
+ // Override skill section in project context
34
+ const enrichedContext = {
35
+ ...context.project,
36
+ constitutionSummary: context.project.constitutionSummary,
37
+ };
38
+ // Render CLAUDE.md with skill index
39
+ let claudeContent = await this.renderer.render('claude-md', enrichedContext);
40
+ const skillSection = this.indexBuilder.build(indexItems);
41
+ claudeContent = claudeContent.replace(/\{\{SKILL_SECTION\}\}/g, skillSection || context.project.skillNames.map(n => `- **${n}**`).join('\n'));
42
+ const claudeMd = {
43
+ path: 'CLAUDE.md',
44
+ content: claudeContent,
45
+ managed: true,
46
+ };
47
+ // Skills directory
48
+ const skillFiles = entries.map(e => ({
49
+ path: `.claude/skills/${e.skillName}/SKILL.md`,
50
+ content: this.readAsset(pkgRoot, e),
51
+ managed: false,
52
+ }));
53
+ const skills = {
54
+ basePath: '.claude/skills',
55
+ files: skillFiles,
56
+ };
57
+ // MCP config
58
+ const mcpDoc = await this.mcpGen.buildClaudeConfig(context.projectPath);
59
+ const mcpConfig = {
60
+ path: mcpDoc.path,
61
+ content: JSON.stringify(mcpDoc.json, null, 2) + '\n',
62
+ managed: false,
63
+ };
64
+ // Managed marker
65
+ const marker = {
66
+ path: '.claude/.musubix-managed',
67
+ content: JSON.stringify({
68
+ generator: 'musubix2',
69
+ version: '0.4.0',
70
+ timestamp: new Date().toISOString(),
71
+ }),
72
+ managed: false,
73
+ };
74
+ return { claudeMd, skills, mcpConfig, marker };
75
+ }
76
+ async execute(context, artifacts, dryRun) {
77
+ const allArtifacts = [
78
+ artifacts.claudeMd,
79
+ artifacts.skills,
80
+ artifacts.mcpConfig,
81
+ artifacts.marker,
82
+ ];
83
+ try {
84
+ const snapshot = {
85
+ existingFiles: new Map(),
86
+ projectRoot: context.projectPath,
87
+ };
88
+ const ops = await this.merger.plan(snapshot, allArtifacts, context.options.force);
89
+ const summary = await this.writer.execute(ops, dryRun);
90
+ if (summary.errors.length > 0) {
91
+ return { committed: false, rolledBack: true, failures: summary.errors };
92
+ }
93
+ return { committed: true, rolledBack: false, failures: [] };
94
+ }
95
+ catch (err) {
96
+ return {
97
+ committed: false,
98
+ rolledBack: true,
99
+ failures: [err instanceof Error ? err.message : String(err)],
100
+ };
101
+ }
102
+ }
103
+ readAsset(pkgRoot, entry) {
104
+ const fullPath = resolve(pkgRoot, entry.sourcePath.replace(/^\./, ''));
105
+ try {
106
+ return readFileSync(fullPath, 'utf-8');
107
+ }
108
+ catch {
109
+ return `# ${entry.skillName}\n\n_Asset not found during packaging._\n`;
110
+ }
111
+ }
112
+ }
113
+ //# sourceMappingURL=claude-setup-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-setup-transaction.js","sourceRoot":"","sources":["../../../src/application/install/claude-setup-transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * P2-05 / DES-SKL-002: Build skill index section for CLAUDE.md.
3
+ */
4
+ import type { SkillIndexItem } from '../../domain/install/types.js';
5
+ export declare class ClaudeSkillIndexBuilder {
6
+ build(items: SkillIndexItem[]): string;
7
+ }
8
+ //# sourceMappingURL=claude-skill-index-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-skill-index-builder.d.ts","sourceRoot":"","sources":["../../../src/application/install/claude-skill-index-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,qBAAa,uBAAuB;IAClC,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM;CAiBvC"}
@@ -0,0 +1,18 @@
1
+ export class ClaudeSkillIndexBuilder {
2
+ build(items) {
3
+ if (items.length === 0)
4
+ return '';
5
+ const lines = [
6
+ '## スキル一覧',
7
+ '',
8
+ '| スキル | 概要 | 起動条件 | パス |',
9
+ '|--------|------|---------|------|',
10
+ ];
11
+ for (const item of items) {
12
+ const triggers = item.triggers.join(', ') || '—';
13
+ lines.push(`| **${item.name}** | ${item.summary} | ${triggers} | \`${item.path}\` |`);
14
+ }
15
+ return lines.join('\n');
16
+ }
17
+ }
18
+ //# sourceMappingURL=claude-skill-index-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-skill-index-builder.js","sourceRoot":"","sources":["../../../src/application/install/claude-skill-index-builder.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,KAAuB;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,KAAK,GAAa;YACtB,UAAU;YACV,EAAE;YACF,0BAA0B;YAC1B,oCAAoC;SACrC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,OAAO,MAAM,QAAQ,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { GeneratedFile, GeneratedDirectory, InstallContext } from '../../domain/install/types.js';
2
+ import { PackageAssetCatalog } from '../../infrastructure/assets/package-asset-catalog.js';
3
+ import { PackageRootLocator } from '../../infrastructure/assets/package-root-locator.js';
4
+ import { TemplateRenderer } from '../../infrastructure/templates/template-renderer.js';
5
+ import { McpConfigGenerator } from './mcp-config-generator.js';
6
+ export interface CopilotSetupArtifacts {
7
+ instructions: GeneratedFile;
8
+ skills: GeneratedDirectory;
9
+ mcpConfig: GeneratedFile;
10
+ }
11
+ export declare class CopilotSetupService {
12
+ private readonly catalog;
13
+ private readonly renderer;
14
+ private readonly mcpGen;
15
+ private readonly locator;
16
+ constructor(catalog: PackageAssetCatalog, renderer: TemplateRenderer, mcpGen: McpConfigGenerator, locator: PackageRootLocator);
17
+ prepare(context: InstallContext): Promise<CopilotSetupArtifacts>;
18
+ private readAsset;
19
+ }
20
+ //# sourceMappingURL=copilot-setup-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-setup-service.d.ts","sourceRoot":"","sources":["../../../src/application/install/copilot-setup-service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,cAAc,EAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,kBAAkB;IAGxC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkCtE,OAAO,CAAC,SAAS;CAQlB"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * P2-06 / DES-INS-003: Prepare Copilot setup artifacts.
3
+ */
4
+ import { readFileSync } from 'node:fs';
5
+ import { resolve } from 'node:path';
6
+ export class CopilotSetupService {
7
+ catalog;
8
+ renderer;
9
+ mcpGen;
10
+ locator;
11
+ constructor(catalog, renderer, mcpGen, locator) {
12
+ this.catalog = catalog;
13
+ this.renderer = renderer;
14
+ this.mcpGen = mcpGen;
15
+ this.locator = locator;
16
+ }
17
+ async prepare(context) {
18
+ // 1. Render copilot-instructions.md
19
+ const instructionsContent = await this.renderer.render('copilot-instructions', context.project);
20
+ const instructions = {
21
+ path: '.github/copilot-instructions.md',
22
+ content: instructionsContent,
23
+ managed: true,
24
+ };
25
+ // 2. List and copy skills
26
+ const entries = await this.catalog.list('copilot');
27
+ const pkgRoot = this.locator.resolve(import.meta.url);
28
+ const skillFiles = entries.map(e => ({
29
+ path: `.github/skills/${e.skillName}/SKILL.md`,
30
+ content: this.readAsset(pkgRoot, e),
31
+ managed: false,
32
+ }));
33
+ const skills = {
34
+ basePath: '.github/skills',
35
+ files: skillFiles,
36
+ };
37
+ // 3. MCP config
38
+ const mcpDoc = await this.mcpGen.buildCopilotConfig(context.projectPath);
39
+ const mcpConfig = {
40
+ path: mcpDoc.path,
41
+ content: JSON.stringify(mcpDoc.json, null, 2) + '\n',
42
+ managed: false,
43
+ };
44
+ return { instructions, skills, mcpConfig };
45
+ }
46
+ readAsset(pkgRoot, entry) {
47
+ const fullPath = resolve(pkgRoot, entry.sourcePath.replace(/^\./, ''));
48
+ try {
49
+ return readFileSync(fullPath, 'utf-8');
50
+ }
51
+ catch {
52
+ return `# ${entry.skillName}\n\n_Asset not found during packaging._\n`;
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=copilot-setup-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-setup-service.js","sourceRoot":"","sources":["../../../src/application/install/copilot-setup-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,MAAM,OAAO,mBAAmB;IAEX;IACA;IACA;IACA;IAJnB,YACmB,OAA4B,EAC5B,QAA0B,EAC1B,MAA0B,EAC1B,OAA2B;QAH3B,YAAO,GAAP,OAAO,CAAqB;QAC5B,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,WAAM,GAAN,MAAM,CAAoB;QAC1B,YAAO,GAAP,OAAO,CAAoB;IAC3C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,oCAAoC;QACpC,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChG,MAAM,YAAY,GAAkB;YAClC,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,UAAU,GAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,kBAAkB,CAAC,CAAC,SAAS,WAAW;YAC9C,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO,EAAE,KAAK;SACf,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAuB;YACjC,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,UAAU;SAClB,CAAC;QAEF,gBAAgB;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,SAAS,GAAkB;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;YACpD,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7C,CAAC;IAEO,SAAS,CAAC,OAAe,EAAE,KAAiB;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,KAAK,CAAC,SAAS,2CAA2C,CAAC;QACzE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ export { PlatformDetector } from './platform-detector.js';
2
+ export { McpLaunchResolver } from './mcp-launch-resolver.js';
3
+ export { McpConfigGenerator } from './mcp-config-generator.js';
4
+ export { WorkspaceMergeService } from './workspace-merge-service.js';
5
+ export { ClaudeSkillIndexBuilder } from './claude-skill-index-builder.js';
6
+ export { CopilotSetupService } from './copilot-setup-service.js';
7
+ export { ClaudeSetupTransaction } from './claude-setup-transaction.js';
8
+ export { InstallPlanner } from './install-planner.js';
9
+ export { UpdateService } from './update-service.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/application/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { PlatformDetector } from './platform-detector.js';
2
+ export { McpLaunchResolver } from './mcp-launch-resolver.js';
3
+ export { McpConfigGenerator } from './mcp-config-generator.js';
4
+ export { WorkspaceMergeService } from './workspace-merge-service.js';
5
+ export { ClaudeSkillIndexBuilder } from './claude-skill-index-builder.js';
6
+ export { CopilotSetupService } from './copilot-setup-service.js';
7
+ export { ClaudeSetupTransaction } from './claude-setup-transaction.js';
8
+ export { InstallPlanner } from './install-planner.js';
9
+ export { UpdateService } from './update-service.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * P2-08 / DES-INS-001: Build install plan from platform selection and workspace state.
3
+ */
4
+ import type { PlatformSelection, WorkspaceSnapshot, InitOptions, InstallPlan } from '../../domain/install/types.js';
5
+ export declare class InstallPlanner {
6
+ buildPlan(selection: PlatformSelection, _workspaceState: WorkspaceSnapshot, _options: InitOptions): Promise<InstallPlan>;
7
+ }
8
+ //# sourceMappingURL=install-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-planner.d.ts","sourceRoot":"","sources":["../../../src/application/install/install-planner.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EAEZ,MAAM,+BAA+B,CAAC;AAEvC,qBAAa,cAAc;IACnB,SAAS,CACb,SAAS,EAAE,iBAAiB,EAC5B,eAAe,EAAE,iBAAiB,EAClC,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,WAAW,CAAC;CAkCxB"}
@@ -0,0 +1,24 @@
1
+ export class InstallPlanner {
2
+ async buildPlan(selection, _workspaceState, _options) {
3
+ const artifacts = [];
4
+ const warnings = [];
5
+ const transactionalGroups = [];
6
+ if (selection.copilot) {
7
+ artifacts.push({ path: '.github/copilot-instructions.md', platform: 'copilot', category: 'instruction' }, { path: '.github/skills/', platform: 'copilot', category: 'skill' }, { path: '.vscode/mcp.json', platform: 'copilot', category: 'mcp-config' });
8
+ }
9
+ if (selection.claude) {
10
+ transactionalGroups.push('claude-setup');
11
+ artifacts.push({ path: 'CLAUDE.md', platform: 'claude', category: 'instruction', transactionalGroup: 'claude-setup' }, { path: '.claude/skills/', platform: 'claude', category: 'skill', transactionalGroup: 'claude-setup' }, { path: '.mcp.json', platform: 'claude', category: 'mcp-config', transactionalGroup: 'claude-setup' }, { path: '.claude/.musubix-managed', platform: 'claude', category: 'marker', transactionalGroup: 'claude-setup' });
12
+ }
13
+ if (!selection.copilot && !selection.claude) {
14
+ warnings.push('No platform selected. Run with --platform copilot|claude|both.');
15
+ }
16
+ return {
17
+ artifacts,
18
+ transactionalGroups,
19
+ requiresConfirmation: selection.needsConfirmation,
20
+ warnings,
21
+ };
22
+ }
23
+ }
24
+ //# sourceMappingURL=install-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-planner.js","sourceRoot":"","sources":["../../../src/application/install/install-planner.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,SAAS,CACb,SAA4B,EAC5B,eAAkC,EAClC,QAAqB;QAErB,MAAM,SAAS,GAAsB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,mBAAmB,GAAa,EAAE,CAAC;QAEzC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CACZ,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,EACzF,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EACnE,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAC1E,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACzC,SAAS,CAAC,IAAI,CACZ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,EACtG,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,EACtG,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,EACrG,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,CACjH,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAClF,CAAC;QAED,OAAO;YACL,SAAS;YACT,mBAAmB;YACnB,oBAAoB,EAAE,SAAS,CAAC,iBAAiB;YACjD,QAAQ;SACT,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * P2-03 / DES-INS-005: Generate MCP config JSON for Copilot and Claude formats.
3
+ */
4
+ import type { McpConfigDocument } from '../../domain/install/types.js';
5
+ import { McpLaunchResolver } from './mcp-launch-resolver.js';
6
+ export declare class McpConfigGenerator {
7
+ private readonly launchResolver;
8
+ constructor(launchResolver: McpLaunchResolver);
9
+ buildCopilotConfig(projectPath: string): Promise<McpConfigDocument>;
10
+ buildClaudeConfig(projectPath: string): Promise<McpConfigDocument>;
11
+ }
12
+ //# sourceMappingURL=mcp-config-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-generator.d.ts","sourceRoot":"","sources":["../../../src/application/install/mcp-config-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,iBAAiB;IAExD,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBnE,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAczE"}
@@ -0,0 +1,36 @@
1
+ export class McpConfigGenerator {
2
+ launchResolver;
3
+ constructor(launchResolver) {
4
+ this.launchResolver = launchResolver;
5
+ }
6
+ async buildCopilotConfig(projectPath) {
7
+ const launch = await this.launchResolver.resolve(projectPath);
8
+ return {
9
+ path: '.vscode/mcp.json',
10
+ json: {
11
+ servers: {
12
+ musubix2: {
13
+ type: 'stdio',
14
+ command: launch.command,
15
+ args: launch.args,
16
+ },
17
+ },
18
+ },
19
+ };
20
+ }
21
+ async buildClaudeConfig(projectPath) {
22
+ const launch = await this.launchResolver.resolve(projectPath);
23
+ return {
24
+ path: '.mcp.json',
25
+ json: {
26
+ mcpServers: {
27
+ musubix2: {
28
+ command: launch.command,
29
+ args: launch.args,
30
+ },
31
+ },
32
+ },
33
+ };
34
+ }
35
+ }
36
+ //# sourceMappingURL=mcp-config-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-generator.js","sourceRoot":"","sources":["../../../src/application/install/mcp-config-generator.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,cAAiC;QAAjC,mBAAc,GAAd,cAAc,CAAmB;IAAG,CAAC;IAElE,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9D,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE;gBACJ,OAAO,EAAE;oBACP,QAAQ,EAAE;wBACR,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;qBAClB;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9D,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE;gBACJ,UAAU,EAAE;oBACV,QAAQ,EAAE;wBACR,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;qBAClB;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import type { LaunchDefinition } from '../../domain/install/types.js';
2
+ export declare class McpLaunchResolver {
3
+ resolve(projectPath: string): Promise<LaunchDefinition>;
4
+ }
5
+ //# sourceMappingURL=mcp-launch-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-launch-resolver.d.ts","sourceRoot":"","sources":["../../../src/application/install/mcp-launch-resolver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,qBAAa,iBAAiB;IACtB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAe9D"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * P2-02 / DES-INS-005: Resolve MCP launch command — prefer local, fallback to npx.
3
+ */
4
+ import { existsSync } from 'node:fs';
5
+ import { resolve } from 'node:path';
6
+ export class McpLaunchResolver {
7
+ async resolve(projectPath) {
8
+ const localBin = resolve(projectPath, 'node_modules', '.bin', 'musubix2');
9
+ if (existsSync(localBin)) {
10
+ return {
11
+ command: './node_modules/.bin/musubix2',
12
+ args: ['mcp'],
13
+ transport: 'stdio',
14
+ };
15
+ }
16
+ return {
17
+ command: 'npx',
18
+ args: ['musubix2', 'mcp'],
19
+ transport: 'stdio',
20
+ };
21
+ }
22
+ }
23
+ //# sourceMappingURL=mcp-launch-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-launch-resolver.js","sourceRoot":"","sources":["../../../src/application/install/mcp-launch-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,8BAA8B;gBACvC,IAAI,EAAE,CAAC,KAAK,CAAC;gBACb,SAAS,EAAE,OAAO;aACnB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC;YACzB,SAAS,EAAE,OAAO;SACnB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { PlatformSelection, InitOptions } from '../../domain/install/types.js';
2
+ export declare class PlatformDetector {
3
+ detect(projectPath: string, requested: InitOptions['platform']): Promise<PlatformSelection>;
4
+ private gatherHints;
5
+ private hasCommand;
6
+ }
7
+ //# sourceMappingURL=platform-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../../src/application/install/platform-detector.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEnG,qBAAa,gBAAgB;IACrB,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC,iBAAiB,CAAC;IAwC7B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;CAQnB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * P2-01 / DES-INS-002: Detect available platforms from workspace hints and CLI flags.
3
+ */
4
+ import { existsSync } from 'node:fs';
5
+ import { resolve } from 'node:path';
6
+ import { execSync } from 'node:child_process';
7
+ export class PlatformDetector {
8
+ async detect(projectPath, requested) {
9
+ // Explicit flag override
10
+ if (requested !== 'auto') {
11
+ return {
12
+ copilot: requested === 'copilot' || requested === 'both',
13
+ claude: requested === 'claude' || requested === 'both',
14
+ source: 'flag',
15
+ needsConfirmation: false,
16
+ };
17
+ }
18
+ const hints = this.gatherHints(projectPath);
19
+ const copilot = hints.hasVscodeDir;
20
+ // .claude/ with .musubix-managed means self-generated — exclude from detection
21
+ const claude = hints.hasClaudeDir && !hints.hasManagedClaudeMarker;
22
+ if (copilot || claude) {
23
+ return { copilot, claude, source: 'workspace', needsConfirmation: false };
24
+ }
25
+ // claude command exists but no workspace hints → candidate, needs confirmation
26
+ if (hints.hasClaudeCommand) {
27
+ return {
28
+ copilot: false,
29
+ claude: false,
30
+ source: 'candidate',
31
+ needsConfirmation: true,
32
+ };
33
+ }
34
+ // Nothing found — need user prompt
35
+ return {
36
+ copilot: false,
37
+ claude: false,
38
+ source: 'candidate',
39
+ needsConfirmation: true,
40
+ };
41
+ }
42
+ gatherHints(projectPath) {
43
+ return {
44
+ hasVscodeDir: existsSync(resolve(projectPath, '.vscode')),
45
+ hasClaudeDir: existsSync(resolve(projectPath, '.claude')),
46
+ hasManagedClaudeMarker: existsSync(resolve(projectPath, '.claude', '.musubix-managed')),
47
+ hasClaudeCommand: this.hasCommand('claude'),
48
+ };
49
+ }
50
+ hasCommand(cmd) {
51
+ try {
52
+ execSync(`command -v ${cmd}`, { stdio: 'ignore' });
53
+ return true;
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=platform-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-detector.js","sourceRoot":"","sources":["../../../src/application/install/platform-detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,OAAO,gBAAgB;IAC3B,KAAK,CAAC,MAAM,CACV,WAAmB,EACnB,SAAkC;QAElC,yBAAyB;QACzB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM;gBACxD,MAAM,EAAE,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM;gBACtD,MAAM,EAAE,MAAM;gBACd,iBAAiB,EAAE,KAAK;aACzB,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC;QACnC,+EAA+E;QAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAEnE,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;QAC5E,CAAC;QAED,+EAA+E;QAC/E,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,WAAW;gBACnB,iBAAiB,EAAE,IAAI;aACxB,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW;YACnB,iBAAiB,EAAE,IAAI;SACxB,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,WAAmB;QACrC,OAAO;YACL,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACzD,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACzD,sBAAsB,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;YACvF,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;SAC5C,CAAC;IACJ,CAAC;IAEO,UAAU,CAAC,GAAW;QAC5B,IAAI,CAAC;YACH,QAAQ,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { InstallContext, UpdateResult, WriteOperation } from '../../domain/install/types.js';
2
+ import { WorkspaceMergeService } from './workspace-merge-service.js';
3
+ import { WorkspaceWriter } from '../../infrastructure/workspace/workspace-writer.js';
4
+ export declare class UpdateService {
5
+ private readonly writer;
6
+ constructor(_merger: WorkspaceMergeService, writer: WorkspaceWriter);
7
+ run(_context: InstallContext, generatedOps: WriteOperation[]): Promise<UpdateResult>;
8
+ }
9
+ //# sourceMappingURL=update-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-service.d.ts","sourceRoot":"","sources":["../../../src/application/install/update-service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,qBAAa,aAAa;IAGtB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADvB,OAAO,EAAE,qBAAqB,EACb,MAAM,EAAE,eAAe;IAGpC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;CAuB3F"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * P2-09 / DES-UPD-001: Update musubix-managed sections and create .bak backups.
3
+ */
4
+ import { existsSync, copyFileSync } from 'node:fs';
5
+ export class UpdateService {
6
+ writer;
7
+ constructor(_merger, writer) {
8
+ this.writer = writer;
9
+ }
10
+ async run(_context, generatedOps) {
11
+ const backups = [];
12
+ const updatedPaths = [];
13
+ const diffSummary = [];
14
+ const updateOps = generatedOps.filter(op => op.mode === 'append-section' || op.mode === 'merge-json');
15
+ for (const op of updateOps) {
16
+ if (existsSync(op.targetPath)) {
17
+ const bakPath = `${op.targetPath}.bak`;
18
+ copyFileSync(op.targetPath, bakPath);
19
+ backups.push(bakPath);
20
+ diffSummary.push(`${op.targetPath}: ${op.mode}`);
21
+ }
22
+ }
23
+ const summary = await this.writer.execute(updateOps, false);
24
+ updatedPaths.push(...summary.updated);
25
+ return { backups, updatedPaths, diffSummary };
26
+ }
27
+ }
28
+ //# sourceMappingURL=update-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-service.js","sourceRoot":"","sources":["../../../src/application/install/update-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AASnD,MAAM,OAAO,aAAa;IAGL;IAFnB,YACE,OAA8B,EACb,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IACvC,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,QAAwB,EAAE,YAA8B;QAChE,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CACnC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,gBAAgB,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,CAC/D,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,MAAM,CAAC;gBACvC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5D,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { GeneratedArtifacts, WorkspaceSnapshot, WriteOperation } from '../../domain/install/types.js';
2
+ export declare class WorkspaceMergeService {
3
+ plan(snapshot: WorkspaceSnapshot, generated: GeneratedArtifacts, force: boolean): Promise<WriteOperation[]>;
4
+ private planFile;
5
+ private planJsonMerge;
6
+ private planSectionAppend;
7
+ private deepMerge;
8
+ }
9
+ //# sourceMappingURL=workspace-merge-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-merge-service.d.ts","sourceRoot":"","sources":["../../../src/application/install/workspace-merge-service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAGlB,iBAAiB,EACjB,cAAc,EACf,MAAM,+BAA+B,CAAC;AAKvC,qBAAa,qBAAqB;IAC1B,IAAI,CACR,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,cAAc,EAAE,CAAC;IAmB5B,OAAO,CAAC,QAAQ;IA+BhB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,SAAS;CAiBlB"}