musubi-sdd 5.0.0 → 5.6.1

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 (232) hide show
  1. package/README.ja.md +106 -48
  2. package/README.md +110 -32
  3. package/bin/musubi-analyze.js +74 -67
  4. package/bin/musubi-browser.js +27 -26
  5. package/bin/musubi-change.js +48 -47
  6. package/bin/musubi-checkpoint.js +10 -7
  7. package/bin/musubi-convert.js +25 -25
  8. package/bin/musubi-costs.js +27 -10
  9. package/bin/musubi-gui.js +52 -46
  10. package/bin/musubi-init.js +1952 -10
  11. package/bin/musubi-orchestrate.js +327 -239
  12. package/bin/musubi-remember.js +69 -56
  13. package/bin/musubi-resolve.js +53 -45
  14. package/bin/musubi-trace.js +51 -22
  15. package/bin/musubi-validate.js +39 -30
  16. package/bin/musubi-workflow.js +33 -34
  17. package/bin/musubi.js +39 -2
  18. package/package.json +1 -1
  19. package/src/agents/agent-loop.js +94 -95
  20. package/src/agents/agentic/code-generator.js +119 -109
  21. package/src/agents/agentic/code-reviewer.js +105 -108
  22. package/src/agents/agentic/index.js +4 -4
  23. package/src/agents/browser/action-executor.js +13 -13
  24. package/src/agents/browser/ai-comparator.js +11 -10
  25. package/src/agents/browser/context-manager.js +6 -6
  26. package/src/agents/browser/index.js +5 -5
  27. package/src/agents/browser/nl-parser.js +31 -46
  28. package/src/agents/browser/screenshot.js +2 -2
  29. package/src/agents/browser/test-generator.js +6 -4
  30. package/src/agents/function-tool.js +71 -65
  31. package/src/agents/index.js +7 -7
  32. package/src/agents/schema-generator.js +98 -94
  33. package/src/analyzers/ast-extractor.js +164 -145
  34. package/src/analyzers/codegraph-auto-update.js +858 -0
  35. package/src/analyzers/complexity-analyzer.js +536 -0
  36. package/src/analyzers/context-optimizer.js +247 -125
  37. package/src/analyzers/impact-analyzer.js +1 -1
  38. package/src/analyzers/large-project-analyzer.js +766 -0
  39. package/src/analyzers/repository-map.js +83 -80
  40. package/src/analyzers/security-analyzer.js +19 -11
  41. package/src/analyzers/stuck-detector.js +19 -17
  42. package/src/converters/index.js +78 -57
  43. package/src/converters/ir/types.js +12 -12
  44. package/src/converters/parsers/musubi-parser.js +134 -126
  45. package/src/converters/parsers/openapi-parser.js +70 -53
  46. package/src/converters/parsers/speckit-parser.js +239 -175
  47. package/src/converters/writers/musubi-writer.js +123 -118
  48. package/src/converters/writers/speckit-writer.js +124 -113
  49. package/src/generators/rust-migration-generator.js +512 -0
  50. package/src/gui/public/index.html +1365 -1211
  51. package/src/gui/server.js +41 -40
  52. package/src/gui/services/file-watcher.js +23 -8
  53. package/src/gui/services/project-scanner.js +26 -20
  54. package/src/gui/services/replanning-service.js +27 -23
  55. package/src/gui/services/traceability-service.js +8 -8
  56. package/src/gui/services/workflow-service.js +14 -7
  57. package/src/index.js +151 -0
  58. package/src/integrations/cicd.js +90 -104
  59. package/src/integrations/codegraph-mcp.js +643 -0
  60. package/src/integrations/documentation.js +142 -103
  61. package/src/integrations/examples.js +95 -80
  62. package/src/integrations/github-client.js +17 -17
  63. package/src/integrations/index.js +5 -5
  64. package/src/integrations/mcp/index.js +21 -21
  65. package/src/integrations/mcp/mcp-context-provider.js +76 -78
  66. package/src/integrations/mcp/mcp-discovery.js +74 -72
  67. package/src/integrations/mcp/mcp-tool-registry.js +99 -94
  68. package/src/integrations/mcp-connector.js +70 -66
  69. package/src/integrations/platforms.js +50 -49
  70. package/src/integrations/tool-discovery.js +37 -31
  71. package/src/llm-providers/anthropic-provider.js +11 -11
  72. package/src/llm-providers/base-provider.js +16 -18
  73. package/src/llm-providers/copilot-provider.js +22 -19
  74. package/src/llm-providers/index.js +26 -25
  75. package/src/llm-providers/ollama-provider.js +11 -11
  76. package/src/llm-providers/openai-provider.js +12 -12
  77. package/src/managers/agent-memory.js +36 -24
  78. package/src/managers/checkpoint-manager.js +4 -8
  79. package/src/managers/delta-spec.js +19 -19
  80. package/src/managers/index.js +13 -4
  81. package/src/managers/memory-condenser.js +35 -45
  82. package/src/managers/repo-skill-manager.js +57 -31
  83. package/src/managers/skill-loader.js +25 -22
  84. package/src/managers/skill-tools.js +36 -72
  85. package/src/managers/workflow.js +30 -22
  86. package/src/monitoring/cost-tracker.js +53 -44
  87. package/src/monitoring/incident-manager.js +123 -103
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +82 -59
  90. package/src/monitoring/quality-dashboard.js +51 -39
  91. package/src/monitoring/release-manager.js +70 -50
  92. package/src/orchestration/agent-skill-binding.js +39 -47
  93. package/src/orchestration/error-handler.js +65 -107
  94. package/src/orchestration/guardrails/base-guardrail.js +26 -24
  95. package/src/orchestration/guardrails/guardrail-rules.js +50 -64
  96. package/src/orchestration/guardrails/index.js +5 -5
  97. package/src/orchestration/guardrails/input-guardrail.js +58 -45
  98. package/src/orchestration/guardrails/output-guardrail.js +104 -81
  99. package/src/orchestration/guardrails/safety-check.js +79 -79
  100. package/src/orchestration/index.js +38 -55
  101. package/src/orchestration/mcp-tool-adapters.js +96 -99
  102. package/src/orchestration/orchestration-engine.js +21 -21
  103. package/src/orchestration/pattern-registry.js +60 -45
  104. package/src/orchestration/patterns/auto.js +34 -47
  105. package/src/orchestration/patterns/group-chat.js +59 -65
  106. package/src/orchestration/patterns/handoff.js +67 -65
  107. package/src/orchestration/patterns/human-in-loop.js +51 -72
  108. package/src/orchestration/patterns/nested.js +25 -40
  109. package/src/orchestration/patterns/sequential.js +35 -34
  110. package/src/orchestration/patterns/swarm.js +63 -56
  111. package/src/orchestration/patterns/triage.js +150 -109
  112. package/src/orchestration/reasoning/index.js +9 -9
  113. package/src/orchestration/reasoning/planning-engine.js +143 -140
  114. package/src/orchestration/reasoning/reasoning-engine.js +206 -144
  115. package/src/orchestration/reasoning/self-correction.js +121 -128
  116. package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
  117. package/src/orchestration/replanning/alternative-generator.js +37 -42
  118. package/src/orchestration/replanning/config.js +63 -59
  119. package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
  120. package/src/orchestration/replanning/index.js +24 -20
  121. package/src/orchestration/replanning/plan-evaluator.js +49 -50
  122. package/src/orchestration/replanning/plan-monitor.js +32 -28
  123. package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
  124. package/src/orchestration/replanning/replan-history.js +33 -26
  125. package/src/orchestration/replanning/replanning-engine.js +106 -108
  126. package/src/orchestration/skill-executor.js +107 -109
  127. package/src/orchestration/skill-registry.js +85 -89
  128. package/src/orchestration/workflow-examples.js +228 -231
  129. package/src/orchestration/workflow-executor.js +65 -68
  130. package/src/orchestration/workflow-orchestrator.js +72 -73
  131. package/src/phase4-integration.js +47 -40
  132. package/src/phase5-integration.js +89 -30
  133. package/src/reporters/coverage-report.js +82 -30
  134. package/src/reporters/hierarchical-reporter.js +498 -0
  135. package/src/reporters/traceability-matrix-report.js +29 -20
  136. package/src/resolvers/issue-resolver.js +43 -31
  137. package/src/steering/advanced-validation.js +133 -124
  138. package/src/steering/auto-updater.js +60 -73
  139. package/src/steering/index.js +6 -6
  140. package/src/steering/quality-metrics.js +41 -35
  141. package/src/steering/steering-auto-update.js +83 -86
  142. package/src/steering/steering-validator.js +98 -106
  143. package/src/steering/template-constraints.js +53 -54
  144. package/src/templates/agents/claude-code/CLAUDE.md +32 -32
  145. package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
  146. package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
  147. package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
  148. package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
  149. package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
  150. package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
  151. package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
  152. package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
  153. package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
  154. package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
  155. package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
  156. package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
  157. package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
  158. package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
  159. package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
  160. package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
  161. package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
  162. package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
  163. package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
  164. package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
  165. package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
  166. package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
  167. package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
  168. package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
  169. package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
  170. package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
  171. package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
  172. package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
  173. package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
  174. package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
  175. package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
  176. package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
  177. package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
  178. package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
  179. package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
  180. package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
  181. package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
  182. package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
  183. package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
  184. package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
  185. package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
  186. package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
  187. package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
  188. package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
  189. package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
  190. package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
  191. package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
  192. package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
  193. package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
  194. package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
  195. package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
  196. package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
  197. package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
  198. package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
  199. package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
  200. package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
  201. package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
  202. package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
  203. package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
  204. package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
  205. package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
  206. package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
  207. package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
  208. package/src/templates/agents/codex/AGENTS.md +74 -42
  209. package/src/templates/agents/cursor/AGENTS.md +74 -42
  210. package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
  211. package/src/templates/agents/github-copilot/AGENTS.md +83 -51
  212. package/src/templates/agents/qwen-code/QWEN.md +74 -42
  213. package/src/templates/agents/windsurf/AGENTS.md +74 -42
  214. package/src/templates/architectures/README.md +41 -0
  215. package/src/templates/architectures/clean-architecture/README.md +113 -0
  216. package/src/templates/architectures/event-driven/README.md +162 -0
  217. package/src/templates/architectures/hexagonal/README.md +130 -0
  218. package/src/templates/index.js +6 -1
  219. package/src/templates/locale-manager.js +16 -16
  220. package/src/templates/shared/delta-spec-template.md +20 -13
  221. package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
  222. package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
  223. package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
  224. package/src/templates/shared/steering/structure.md +95 -0
  225. package/src/templates/skills/browser-agent.md +21 -16
  226. package/src/templates/skills/web-gui.md +8 -0
  227. package/src/templates/template-constraints.js +50 -53
  228. package/src/validators/advanced-validation.js +30 -36
  229. package/src/validators/constitutional-validator.js +77 -73
  230. package/src/validators/critic-system.js +49 -59
  231. package/src/validators/delta-format.js +59 -55
  232. package/src/validators/traceability-validator.js +7 -11
@@ -17,7 +17,7 @@ const ProjectType = {
17
17
  MICROSERVICE: 'microservice',
18
18
  FULLSTACK: 'fullstack',
19
19
  MOBILE: 'mobile',
20
- DESKTOP: 'desktop'
20
+ DESKTOP: 'desktop',
21
21
  };
22
22
 
23
23
  const FrameworkPreset = {
@@ -29,7 +29,7 @@ const FrameworkPreset = {
29
29
  FASTIFY: 'fastify',
30
30
  NESTJS: 'nestjs',
31
31
  ELECTRON: 'electron',
32
- REACT_NATIVE: 'react-native'
32
+ REACT_NATIVE: 'react-native',
33
33
  };
34
34
 
35
35
  // ============================================================================
@@ -80,17 +80,17 @@ class ProjectTemplate {
80
80
  test: 'jest',
81
81
  lint: 'eslint src',
82
82
  validate: 'npx musubi validate',
83
- ...this.scripts
83
+ ...this.scripts,
84
84
  },
85
85
  dependencies: {
86
86
  'musubi-sdd': '^3.0.0',
87
- ...this.dependencies
87
+ ...this.dependencies,
88
88
  },
89
89
  devDependencies: {
90
90
  jest: '^29.0.0',
91
91
  eslint: '^8.0.0',
92
- ...this.devDependencies
93
- }
92
+ ...this.devDependencies,
93
+ },
94
94
  };
95
95
  }
96
96
 
@@ -266,7 +266,7 @@ Regular retrospectives and refinement.
266
266
  framework: this.framework,
267
267
  files: Array.from(this.files.keys()),
268
268
  dependencies: this.dependencies,
269
- devDependencies: this.devDependencies
269
+ devDependencies: this.devDependencies,
270
270
  };
271
271
  }
272
272
  }
@@ -283,53 +283,67 @@ class ProjectCatalog {
283
283
 
284
284
  registerDefaults() {
285
285
  // Basic API Example
286
- this.register(new ProjectTemplate({
287
- id: 'musubi-api-example',
288
- name: 'MUSUBI API Example',
289
- description: 'A REST API example using MUSUBI SDD',
290
- type: ProjectType.API_SERVER,
291
- framework: FrameworkPreset.EXPRESS
292
- }).addDependency('express', '^4.18.0')
293
- .addScript('dev', 'nodemon src/index.js'));
286
+ this.register(
287
+ new ProjectTemplate({
288
+ id: 'musubi-api-example',
289
+ name: 'MUSUBI API Example',
290
+ description: 'A REST API example using MUSUBI SDD',
291
+ type: ProjectType.API_SERVER,
292
+ framework: FrameworkPreset.EXPRESS,
293
+ })
294
+ .addDependency('express', '^4.18.0')
295
+ .addScript('dev', 'nodemon src/index.js')
296
+ );
294
297
 
295
298
  // CLI Tool Example
296
- this.register(new ProjectTemplate({
297
- id: 'musubi-cli-example',
298
- name: 'MUSUBI CLI Example',
299
- description: 'A CLI tool example using MUSUBI SDD',
300
- type: ProjectType.CLI_TOOL
301
- }).addDependency('commander', '^11.0.0')
302
- .addDependency('chalk', '^5.0.0'));
299
+ this.register(
300
+ new ProjectTemplate({
301
+ id: 'musubi-cli-example',
302
+ name: 'MUSUBI CLI Example',
303
+ description: 'A CLI tool example using MUSUBI SDD',
304
+ type: ProjectType.CLI_TOOL,
305
+ })
306
+ .addDependency('commander', '^11.0.0')
307
+ .addDependency('chalk', '^5.0.0')
308
+ );
303
309
 
304
310
  // Library Example
305
- this.register(new ProjectTemplate({
306
- id: 'musubi-lib-example',
307
- name: 'MUSUBI Library Example',
308
- description: 'A reusable library example using MUSUBI SDD',
309
- type: ProjectType.LIBRARY
310
- }).addScript('build', 'npm run lint && npm test'));
311
+ this.register(
312
+ new ProjectTemplate({
313
+ id: 'musubi-lib-example',
314
+ name: 'MUSUBI Library Example',
315
+ description: 'A reusable library example using MUSUBI SDD',
316
+ type: ProjectType.LIBRARY,
317
+ }).addScript('build', 'npm run lint && npm test')
318
+ );
311
319
 
312
320
  // Full-Stack Example
313
- this.register(new ProjectTemplate({
314
- id: 'musubi-fullstack-example',
315
- name: 'MUSUBI Full-Stack Example',
316
- description: 'A full-stack application using MUSUBI SDD',
317
- type: ProjectType.FULLSTACK,
318
- framework: FrameworkPreset.NEXTJS
319
- }).addDependency('next', '^14.0.0')
320
- .addDependency('react', '^18.0.0')
321
- .addScript('dev', 'next dev')
322
- .addScript('build', 'next build'));
321
+ this.register(
322
+ new ProjectTemplate({
323
+ id: 'musubi-fullstack-example',
324
+ name: 'MUSUBI Full-Stack Example',
325
+ description: 'A full-stack application using MUSUBI SDD',
326
+ type: ProjectType.FULLSTACK,
327
+ framework: FrameworkPreset.NEXTJS,
328
+ })
329
+ .addDependency('next', '^14.0.0')
330
+ .addDependency('react', '^18.0.0')
331
+ .addScript('dev', 'next dev')
332
+ .addScript('build', 'next build')
333
+ );
323
334
 
324
335
  // Microservice Example
325
- this.register(new ProjectTemplate({
326
- id: 'musubi-microservice-example',
327
- name: 'MUSUBI Microservice Example',
328
- description: 'A microservice example using MUSUBI SDD',
329
- type: ProjectType.MICROSERVICE,
330
- framework: FrameworkPreset.FASTIFY
331
- }).addDependency('fastify', '^4.0.0')
332
- .addScript('dev', 'nodemon src/index.js'));
336
+ this.register(
337
+ new ProjectTemplate({
338
+ id: 'musubi-microservice-example',
339
+ name: 'MUSUBI Microservice Example',
340
+ description: 'A microservice example using MUSUBI SDD',
341
+ type: ProjectType.MICROSERVICE,
342
+ framework: FrameworkPreset.FASTIFY,
343
+ })
344
+ .addDependency('fastify', '^4.0.0')
345
+ .addScript('dev', 'nodemon src/index.js')
346
+ );
333
347
  }
334
348
 
335
349
  register(template) {
@@ -347,18 +361,16 @@ class ProjectCatalog {
347
361
  name: t.name,
348
362
  description: t.description,
349
363
  type: t.type,
350
- framework: t.framework
364
+ framework: t.framework,
351
365
  }));
352
366
  }
353
367
 
354
368
  byType(type) {
355
- return Array.from(this.templates.values())
356
- .filter(t => t.type === type);
369
+ return Array.from(this.templates.values()).filter(t => t.type === type);
357
370
  }
358
371
 
359
372
  byFramework(framework) {
360
- return Array.from(this.templates.values())
361
- .filter(t => t.framework === framework);
373
+ return Array.from(this.templates.values()).filter(t => t.framework === framework);
362
374
  }
363
375
  }
364
376
 
@@ -374,7 +386,7 @@ const LaunchCategory = {
374
386
  SECURITY: 'security',
375
387
  PERFORMANCE: 'performance',
376
388
  ACCESSIBILITY: 'accessibility',
377
- COMPLIANCE: 'compliance'
389
+ COMPLIANCE: 'compliance',
378
390
  };
379
391
 
380
392
  class LaunchChecklist {
@@ -391,14 +403,14 @@ class LaunchChecklist {
391
403
  category: LaunchCategory.CODE_QUALITY,
392
404
  title: 'ESLint passes with no errors',
393
405
  command: 'npm run lint',
394
- required: true
406
+ required: true,
395
407
  });
396
408
 
397
409
  this.addItem({
398
410
  id: 'no-console',
399
411
  category: LaunchCategory.CODE_QUALITY,
400
412
  title: 'No console.log statements in production code',
401
- required: false
413
+ required: false,
402
414
  });
403
415
 
404
416
  // Documentation
@@ -406,21 +418,21 @@ class LaunchChecklist {
406
418
  id: 'readme-complete',
407
419
  category: LaunchCategory.DOCUMENTATION,
408
420
  title: 'README.md is complete and up-to-date',
409
- required: true
421
+ required: true,
410
422
  });
411
423
 
412
424
  this.addItem({
413
425
  id: 'agents-md',
414
426
  category: LaunchCategory.DOCUMENTATION,
415
427
  title: 'AGENTS.md exists and is configured',
416
- required: true
428
+ required: true,
417
429
  });
418
430
 
419
431
  this.addItem({
420
432
  id: 'api-docs',
421
433
  category: LaunchCategory.DOCUMENTATION,
422
434
  title: 'API documentation is generated',
423
- required: false
435
+ required: false,
424
436
  });
425
437
 
426
438
  // Testing
@@ -429,14 +441,14 @@ class LaunchChecklist {
429
441
  category: LaunchCategory.TESTING,
430
442
  title: 'All tests pass',
431
443
  command: 'npm test',
432
- required: true
444
+ required: true,
433
445
  });
434
446
 
435
447
  this.addItem({
436
448
  id: 'coverage-threshold',
437
449
  category: LaunchCategory.TESTING,
438
450
  title: 'Test coverage meets threshold (80%+)',
439
- required: true
451
+ required: true,
440
452
  });
441
453
 
442
454
  // CI/CD
@@ -444,14 +456,14 @@ class LaunchChecklist {
444
456
  id: 'ci-configured',
445
457
  category: LaunchCategory.CI_CD,
446
458
  title: 'CI pipeline is configured',
447
- required: true
459
+ required: true,
448
460
  });
449
461
 
450
462
  this.addItem({
451
463
  id: 'auto-deploy',
452
464
  category: LaunchCategory.CI_CD,
453
465
  title: 'Automatic deployment is set up',
454
- required: false
466
+ required: false,
455
467
  });
456
468
 
457
469
  // Security
@@ -459,7 +471,7 @@ class LaunchChecklist {
459
471
  id: 'no-secrets',
460
472
  category: LaunchCategory.SECURITY,
461
473
  title: 'No secrets in source code',
462
- required: true
474
+ required: true,
463
475
  });
464
476
 
465
477
  this.addItem({
@@ -467,7 +479,7 @@ class LaunchChecklist {
467
479
  category: LaunchCategory.SECURITY,
468
480
  title: 'npm audit shows no critical vulnerabilities',
469
481
  command: 'npm audit',
470
- required: true
482
+ required: true,
471
483
  });
472
484
 
473
485
  // Compliance
@@ -476,21 +488,21 @@ class LaunchChecklist {
476
488
  category: LaunchCategory.COMPLIANCE,
477
489
  title: 'MUSUBI validation passes',
478
490
  command: 'npx musubi validate',
479
- required: true
491
+ required: true,
480
492
  });
481
493
 
482
494
  this.addItem({
483
495
  id: 'constitution-compliance',
484
496
  category: LaunchCategory.COMPLIANCE,
485
497
  title: 'Constitution compliance score is A or B',
486
- required: true
498
+ required: true,
487
499
  });
488
500
  }
489
501
 
490
502
  addItem(item) {
491
503
  this.items.push({
492
504
  ...item,
493
- checked: false
505
+ checked: false,
494
506
  });
495
507
  return this;
496
508
  }
@@ -523,7 +535,7 @@ class LaunchChecklist {
523
535
  percentage: Math.round((checked / total) * 100),
524
536
  required: required.length,
525
537
  requiredChecked,
526
- readyToLaunch: requiredChecked === required.length
538
+ readyToLaunch: requiredChecked === required.length,
527
539
  };
528
540
  }
529
541
 
@@ -541,17 +553,20 @@ class LaunchChecklist {
541
553
 
542
554
  toMarkdown() {
543
555
  let md = `# Launch Checklist: ${this.projectName}\n\n`;
544
-
556
+
545
557
  const status = this.getStatus();
546
558
  md += `**Progress:** ${status.checked}/${status.total} (${status.percentage}%)\n`;
547
559
  md += `**Required:** ${status.requiredChecked}/${status.required}\n`;
548
560
  md += `**Ready to Launch:** ${status.readyToLaunch ? '✅ Yes' : '❌ No'}\n\n`;
549
561
 
550
562
  const categories = [...new Set(this.items.map(i => i.category))];
551
-
563
+
552
564
  for (const category of categories) {
553
- md += `## ${category.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')}\n\n`;
554
-
565
+ md += `## ${category
566
+ .split('-')
567
+ .map(w => w.charAt(0).toUpperCase() + w.slice(1))
568
+ .join(' ')}\n\n`;
569
+
555
570
  for (const item of this.getByCategory(category)) {
556
571
  const checkbox = item.checked ? '[x]' : '[ ]';
557
572
  const required = item.required ? ' **(required)**' : '';
@@ -570,7 +585,7 @@ class LaunchChecklist {
570
585
  return {
571
586
  projectName: this.projectName,
572
587
  status: this.getStatus(),
573
- items: this.items
588
+ items: this.items,
574
589
  };
575
590
  }
576
591
  }
@@ -590,7 +605,7 @@ class ReleaseManager extends EventEmitter {
590
605
 
591
606
  bumpVersion(type = 'patch') {
592
607
  const [major, minor, patch] = this.version.split('.').map(Number);
593
-
608
+
594
609
  switch (type) {
595
610
  case 'major':
596
611
  this.version = `${major + 1}.0.0`;
@@ -729,9 +744,9 @@ class ReleaseManager extends EventEmitter {
729
744
  valid: status.readyToLaunch,
730
745
  progress: status.percentage,
731
746
  blockers: uncheckedRequired.map(i => i.title),
732
- message: status.readyToLaunch
733
- ? 'Ready for release!'
734
- : `${uncheckedRequired.length} required items remaining`
747
+ message: status.readyToLaunch
748
+ ? 'Ready for release!'
749
+ : `${uncheckedRequired.length} required items remaining`,
735
750
  };
736
751
  }
737
752
 
@@ -740,7 +755,7 @@ class ReleaseManager extends EventEmitter {
740
755
  version: this.version,
741
756
  projectRoot: this.projectRoot,
742
757
  checklist: this.checklist.toJSON(),
743
- templates: this.catalog.list()
758
+ templates: this.catalog.list(),
744
759
  };
745
760
  }
746
761
  }
@@ -774,16 +789,16 @@ module.exports = {
774
789
  ProjectType,
775
790
  FrameworkPreset,
776
791
  LaunchCategory,
777
-
792
+
778
793
  // Classes
779
794
  ProjectTemplate,
780
795
  ProjectCatalog,
781
796
  LaunchChecklist,
782
797
  ReleaseManager,
783
-
798
+
784
799
  // Factories
785
800
  createProjectTemplate,
786
801
  createProjectCatalog,
787
802
  createLaunchChecklist,
788
- createReleaseManager
803
+ createReleaseManager,
789
804
  };
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * MUSUBI GitHub Client
3
- *
3
+ *
4
4
  * GitHub API 統合クライアント
5
- *
5
+ *
6
6
  * @module src/integrations/github-client
7
7
  * @see REQ-P0-B006
8
8
  */
@@ -23,11 +23,11 @@ class GitHubClient {
23
23
  this.token = options.token || process.env.GITHUB_TOKEN;
24
24
  this.owner = options.owner;
25
25
  this.repo = options.repo;
26
-
26
+
27
27
  if (!this.token) {
28
28
  console.warn('GitHubClient: No GITHUB_TOKEN provided. API calls may fail.');
29
29
  }
30
-
30
+
31
31
  this.octokit = new Octokit({
32
32
  auth: this.token,
33
33
  });
@@ -35,7 +35,7 @@ class GitHubClient {
35
35
 
36
36
  /**
37
37
  * Issue を取得
38
- * @param {number} issueNumber
38
+ * @param {number} issueNumber
39
39
  * @returns {Promise<Object>}
40
40
  */
41
41
  async getIssue(issueNumber) {
@@ -49,7 +49,7 @@ class GitHubClient {
49
49
 
50
50
  /**
51
51
  * Issue のコメントを取得
52
- * @param {number} issueNumber
52
+ * @param {number} issueNumber
53
53
  * @returns {Promise<Object[]>}
54
54
  */
55
55
  async getIssueComments(issueNumber) {
@@ -63,8 +63,8 @@ class GitHubClient {
63
63
 
64
64
  /**
65
65
  * Issue にコメントを追加
66
- * @param {number} issueNumber
67
- * @param {string} body
66
+ * @param {number} issueNumber
67
+ * @param {string} body
68
68
  * @returns {Promise<Object>}
69
69
  */
70
70
  async addIssueComment(issueNumber, body) {
@@ -79,8 +79,8 @@ class GitHubClient {
79
79
 
80
80
  /**
81
81
  * Issue にラベルを追加
82
- * @param {number} issueNumber
83
- * @param {string[]} labels
82
+ * @param {number} issueNumber
83
+ * @param {string[]} labels
84
84
  * @returns {Promise<Object>}
85
85
  */
86
86
  async addLabels(issueNumber, labels) {
@@ -95,7 +95,7 @@ class GitHubClient {
95
95
 
96
96
  /**
97
97
  * ブランチを作成
98
- * @param {string} branchName
98
+ * @param {string} branchName
99
99
  * @param {string} baseBranch - ベースブランチ (default: 'main')
100
100
  * @returns {Promise<Object>}
101
101
  */
@@ -128,7 +128,7 @@ class GitHubClient {
128
128
  */
129
129
  async createOrUpdateFile(path, content, message, branch) {
130
130
  let sha;
131
-
131
+
132
132
  // 既存ファイルの SHA を取得(更新の場合に必要)
133
133
  try {
134
134
  const { data: existingFile } = await this.octokit.repos.getContent({
@@ -181,8 +181,8 @@ class GitHubClient {
181
181
 
182
182
  /**
183
183
  * PR にレビュアーを追加
184
- * @param {number} pullNumber
185
- * @param {string[]} reviewers
184
+ * @param {number} pullNumber
185
+ * @param {string[]} reviewers
186
186
  * @returns {Promise<Object>}
187
187
  */
188
188
  async addReviewers(pullNumber, reviewers) {
@@ -197,7 +197,7 @@ class GitHubClient {
197
197
 
198
198
  /**
199
199
  * Issue を Close
200
- * @param {number} issueNumber
200
+ * @param {number} issueNumber
201
201
  * @returns {Promise<Object>}
202
202
  */
203
203
  async closeIssue(issueNumber) {
@@ -261,7 +261,7 @@ class GitHubClient {
261
261
 
262
262
  /**
263
263
  * URL からリポジトリ情報を抽出
264
- * @param {string} url
264
+ * @param {string} url
265
265
  * @returns {Object|null}
266
266
  */
267
267
  function parseGitHubUrl(url) {
@@ -277,7 +277,7 @@ function parseGitHubUrl(url) {
277
277
 
278
278
  /**
279
279
  * Issue URL から番号を抽出
280
- * @param {string} url
280
+ * @param {string} url
281
281
  * @returns {number|null}
282
282
  */
283
283
  function parseIssueNumber(url) {
@@ -13,17 +13,17 @@ const toolDiscovery = require('./tool-discovery');
13
13
  module.exports = {
14
14
  // Multi-Platform Support
15
15
  ...platforms,
16
-
16
+
17
17
  // CI/CD Integration
18
18
  ...cicd,
19
-
19
+
20
20
  // Documentation Generator
21
21
  ...documentation,
22
-
22
+
23
23
  // Example Projects & Launch
24
24
  ...examples,
25
-
25
+
26
26
  // MCP Integration (Sprint 3.4)
27
27
  ...mcpConnector,
28
- ...toolDiscovery
28
+ ...toolDiscovery,
29
29
  };
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * MUSUBI MCP Integration
3
- *
3
+ *
4
4
  * Unified exports for MCP (Model Context Protocol) integration.
5
5
  * Provides discovery, tool registration, and context management.
6
- *
6
+ *
7
7
  * @module integrations/mcp
8
8
  */
9
9
 
@@ -57,13 +57,13 @@ function createMCPIntegration(options = {}) {
57
57
  const discovery = createMCPDiscovery(options.discovery);
58
58
  const registry = createMCPToolRegistry(options.registry);
59
59
  const context = new MCPContextProvider(options.context);
60
-
60
+
61
61
  // Set connector if provided
62
62
  if (options.connector) {
63
63
  registry.setConnector(options.connector);
64
64
  context.setConnector(options.connector);
65
65
  }
66
-
66
+
67
67
  // Wire up discovery to registry
68
68
  discovery.on('server:discovered', async ({ server }) => {
69
69
  try {
@@ -74,12 +74,12 @@ function createMCPIntegration(options = {}) {
74
74
  // Silently handle - server might not be running
75
75
  }
76
76
  });
77
-
77
+
78
78
  return {
79
79
  discovery,
80
80
  registry,
81
81
  context,
82
-
82
+
83
83
  /**
84
84
  * Initialize the MCP integration
85
85
  * @param {Object} [initOptions]
@@ -89,18 +89,18 @@ function createMCPIntegration(options = {}) {
89
89
  async initialize(initOptions = {}) {
90
90
  const autoDiscover = initOptions.autoDiscover ?? true;
91
91
  const watchChanges = initOptions.watchChanges ?? false;
92
-
92
+
93
93
  if (autoDiscover) {
94
94
  await discovery.discover();
95
95
  }
96
-
96
+
97
97
  if (watchChanges && discovery.watch) {
98
98
  discovery.watch();
99
99
  }
100
-
100
+
101
101
  return this.getStatus();
102
102
  },
103
-
103
+
104
104
  /**
105
105
  * Get all tools from the registry
106
106
  * @returns {Object[]}
@@ -108,7 +108,7 @@ function createMCPIntegration(options = {}) {
108
108
  getTools() {
109
109
  return registry.getAllTools();
110
110
  },
111
-
111
+
112
112
  /**
113
113
  * Get tool definitions in Agent Loop format
114
114
  * @returns {Object[]}
@@ -117,10 +117,10 @@ function createMCPIntegration(options = {}) {
117
117
  return registry.getAllTools().map(tool => ({
118
118
  name: tool.name,
119
119
  description: tool.description,
120
- inputSchema: tool.inputSchema
120
+ inputSchema: tool.inputSchema,
121
121
  }));
122
122
  },
123
-
123
+
124
124
  /**
125
125
  * Build context for a request
126
126
  * @param {Object} contextOptions
@@ -129,7 +129,7 @@ function createMCPIntegration(options = {}) {
129
129
  async buildContext(contextOptions) {
130
130
  return context.buildContext(contextOptions);
131
131
  },
132
-
132
+
133
133
  /**
134
134
  * Get integration status
135
135
  * @returns {Object}
@@ -138,10 +138,10 @@ function createMCPIntegration(options = {}) {
138
138
  return {
139
139
  discovery: discovery.getSummary(),
140
140
  registry: registry.getStats(),
141
- context: context.getStats()
141
+ context: context.getStats(),
142
142
  };
143
143
  },
144
-
144
+
145
145
  /**
146
146
  * Clean up resources
147
147
  */
@@ -151,7 +151,7 @@ function createMCPIntegration(options = {}) {
151
151
  }
152
152
  registry.clear();
153
153
  context.clear();
154
- }
154
+ },
155
155
  };
156
156
  }
157
157
 
@@ -161,15 +161,15 @@ module.exports = {
161
161
  createMCPDiscovery,
162
162
  discoverMCPServers,
163
163
  CONFIG_LOCATIONS,
164
-
164
+
165
165
  // Tool Registry
166
166
  MCPToolRegistry,
167
167
  createMCPToolRegistry,
168
-
168
+
169
169
  // Context Provider
170
170
  MCPContextProvider,
171
171
  createMCPContextProvider,
172
-
172
+
173
173
  // Integration
174
- createMCPIntegration
174
+ createMCPIntegration,
175
175
  };