musubi-sdd 5.1.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 +158 -146
  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 +241 -126
  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 +77 -81
  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 +48 -46
  87. package/src/monitoring/incident-manager.js +116 -106
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +75 -62
  90. package/src/monitoring/quality-dashboard.js +45 -41
  91. package/src/monitoring/release-manager.js +63 -53
  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
package/src/index.js ADDED
@@ -0,0 +1,151 @@
1
+ /**
2
+ * MUSUBI SDD - Main Export Module
3
+ *
4
+ * This file exports all public modules for use as a library.
5
+ */
6
+
7
+ // Helper for optional requires
8
+ function tryRequire(modulePath) {
9
+ try {
10
+ return require(modulePath);
11
+ } catch (e) {
12
+ // Return null if module has missing optional dependencies
13
+ return null;
14
+ }
15
+ }
16
+
17
+ // Analyzers
18
+ const {
19
+ LargeProjectAnalyzer,
20
+ THRESHOLDS: LARGE_PROJECT_THRESHOLDS,
21
+ CHUNK_SIZE,
22
+ } = require('./analyzers/large-project-analyzer');
23
+ const {
24
+ ComplexityAnalyzer,
25
+ THRESHOLDS: COMPLEXITY_THRESHOLDS,
26
+ } = require('./analyzers/complexity-analyzer');
27
+ const { AstExtractor } = require('./analyzers/ast-extractor');
28
+ const { GapDetector } = require('./analyzers/gap-detector');
29
+ const { ImpactAnalyzer } = require('./analyzers/impact-analyzer');
30
+ const { RepositoryMap } = require('./analyzers/repository-map');
31
+ const { SecurityAnalyzer } = require('./analyzers/security-analyzer');
32
+ const { StuckDetector } = require('./analyzers/stuck-detector');
33
+ const { createTraceabilityMatrix } = require('./analyzers/traceability');
34
+
35
+ // Generators
36
+ const {
37
+ RustMigrationGenerator,
38
+ UNSAFE_PATTERNS,
39
+ SECURITY_COMPONENTS,
40
+ } = require('./generators/rust-migration-generator');
41
+ const { DesignGenerator } = require('./generators/design');
42
+ const { RequirementsGenerator } = require('./generators/requirements');
43
+ const { TaskGenerator } = require('./generators/tasks');
44
+
45
+ // Integrations (some have optional dependencies)
46
+ const codegraphModule = tryRequire('./integrations/codegraph-mcp');
47
+ const CodeGraphMCP = codegraphModule ? codegraphModule.CodeGraphMCP : null;
48
+
49
+ const { CICDIntegration } = require('./integrations/cicd');
50
+ const { GitHubClient } = require('./integrations/github-client');
51
+ const { MCPConnector } = require('./integrations/mcp-connector');
52
+
53
+ // Reporters
54
+ const { HierarchicalReporter } = require('./reporters/hierarchical-reporter');
55
+ const { CoverageReporter } = require('./reporters/coverage-report');
56
+ const { TraceabilityMatrixReporter } = require('./reporters/traceability-matrix-report');
57
+
58
+ // Validators
59
+ const { ConstitutionalValidator } = require('./validators/constitutional-validator');
60
+ const { Constitution } = require('./validators/constitution');
61
+ const { DeltaFormatValidator } = require('./validators/delta-format');
62
+ const { TraceabilityValidator } = require('./validators/traceability-validator');
63
+
64
+ // Orchestration
65
+ const { OrchestrationEngine } = require('./orchestration/orchestration-engine');
66
+ const { SkillExecutor } = require('./orchestration/skill-executor');
67
+ const { SkillRegistry } = require('./orchestration/skill-registry');
68
+ const { WorkflowOrchestrator } = require('./orchestration/workflow-orchestrator');
69
+
70
+ // Managers
71
+ const { AgentMemory } = require('./managers/agent-memory');
72
+ const { ChangeManager } = require('./managers/change');
73
+ const { CheckpointManager } = require('./managers/checkpoint-manager');
74
+ const { DeltaSpecManager } = require('./managers/delta-spec');
75
+ const { MemoryCondenser } = require('./managers/memory-condenser');
76
+ const { SkillLoader } = require('./managers/skill-loader');
77
+
78
+ // Monitoring
79
+ const { CostTracker } = require('./monitoring/cost-tracker');
80
+ const { IncidentManager } = require('./monitoring/incident-manager');
81
+ const { QualityDashboard } = require('./monitoring/quality-dashboard');
82
+ const { ReleaseManager } = require('./monitoring/release-manager');
83
+
84
+ // Steering
85
+ const { SteeringValidator } = require('./steering/steering-validator');
86
+ const { SteeringAutoUpdate } = require('./steering/steering-auto-update');
87
+
88
+ module.exports = {
89
+ // Analyzers
90
+ LargeProjectAnalyzer,
91
+ LARGE_PROJECT_THRESHOLDS,
92
+ CHUNK_SIZE,
93
+ ComplexityAnalyzer,
94
+ COMPLEXITY_THRESHOLDS,
95
+ AstExtractor,
96
+ GapDetector,
97
+ ImpactAnalyzer,
98
+ RepositoryMap,
99
+ SecurityAnalyzer,
100
+ StuckDetector,
101
+ createTraceabilityMatrix,
102
+
103
+ // Generators
104
+ RustMigrationGenerator,
105
+ UNSAFE_PATTERNS,
106
+ SECURITY_COMPONENTS,
107
+ DesignGenerator,
108
+ RequirementsGenerator,
109
+ TaskGenerator,
110
+
111
+ // Integrations
112
+ CodeGraphMCP,
113
+ CICDIntegration,
114
+ GitHubClient,
115
+ MCPConnector,
116
+
117
+ // Reporters
118
+ HierarchicalReporter,
119
+ CoverageReporter,
120
+ TraceabilityMatrixReporter,
121
+
122
+ // Validators
123
+ ConstitutionalValidator,
124
+ Constitution,
125
+ DeltaFormatValidator,
126
+ TraceabilityValidator,
127
+
128
+ // Orchestration
129
+ OrchestrationEngine,
130
+ SkillExecutor,
131
+ SkillRegistry,
132
+ WorkflowOrchestrator,
133
+
134
+ // Managers
135
+ AgentMemory,
136
+ ChangeManager,
137
+ CheckpointManager,
138
+ DeltaSpecManager,
139
+ MemoryCondenser,
140
+ SkillLoader,
141
+
142
+ // Monitoring
143
+ CostTracker,
144
+ IncidentManager,
145
+ QualityDashboard,
146
+ ReleaseManager,
147
+
148
+ // Steering
149
+ SteeringValidator,
150
+ SteeringAutoUpdate,
151
+ };
@@ -16,7 +16,7 @@ const CIProvider = {
16
16
  JENKINS: 'jenkins',
17
17
  CIRCLE_CI: 'circle-ci',
18
18
  TRAVIS_CI: 'travis-ci',
19
- BITBUCKET_PIPELINES: 'bitbucket-pipelines'
19
+ BITBUCKET_PIPELINES: 'bitbucket-pipelines',
20
20
  };
21
21
 
22
22
  const ProviderConfig = {
@@ -26,7 +26,7 @@ const ProviderConfig = {
26
26
  format: 'yaml',
27
27
  supportsMatrix: true,
28
28
  supportsCache: true,
29
- supportsArtifacts: true
29
+ supportsArtifacts: true,
30
30
  },
31
31
  [CIProvider.GITLAB_CI]: {
32
32
  name: 'GitLab CI',
@@ -34,7 +34,7 @@ const ProviderConfig = {
34
34
  format: 'yaml',
35
35
  supportsMatrix: true,
36
36
  supportsCache: true,
37
- supportsArtifacts: true
37
+ supportsArtifacts: true,
38
38
  },
39
39
  [CIProvider.AZURE_PIPELINES]: {
40
40
  name: 'Azure Pipelines',
@@ -42,7 +42,7 @@ const ProviderConfig = {
42
42
  format: 'yaml',
43
43
  supportsMatrix: true,
44
44
  supportsCache: true,
45
- supportsArtifacts: true
45
+ supportsArtifacts: true,
46
46
  },
47
47
  [CIProvider.JENKINS]: {
48
48
  name: 'Jenkins',
@@ -50,7 +50,7 @@ const ProviderConfig = {
50
50
  format: 'groovy',
51
51
  supportsMatrix: true,
52
52
  supportsCache: false,
53
- supportsArtifacts: true
53
+ supportsArtifacts: true,
54
54
  },
55
55
  [CIProvider.CIRCLE_CI]: {
56
56
  name: 'CircleCI',
@@ -58,7 +58,7 @@ const ProviderConfig = {
58
58
  format: 'yaml',
59
59
  supportsMatrix: true,
60
60
  supportsCache: true,
61
- supportsArtifacts: true
61
+ supportsArtifacts: true,
62
62
  },
63
63
  [CIProvider.TRAVIS_CI]: {
64
64
  name: 'Travis CI',
@@ -66,7 +66,7 @@ const ProviderConfig = {
66
66
  format: 'yaml',
67
67
  supportsMatrix: true,
68
68
  supportsCache: true,
69
- supportsArtifacts: false
69
+ supportsArtifacts: false,
70
70
  },
71
71
  [CIProvider.BITBUCKET_PIPELINES]: {
72
72
  name: 'Bitbucket Pipelines',
@@ -74,8 +74,8 @@ const ProviderConfig = {
74
74
  format: 'yaml',
75
75
  supportsMatrix: false,
76
76
  supportsCache: true,
77
- supportsArtifacts: true
78
- }
77
+ supportsArtifacts: true,
78
+ },
79
79
  };
80
80
 
81
81
  // ============================================================================
@@ -88,7 +88,7 @@ const JobType = {
88
88
  SYNC: 'sync',
89
89
  TEST: 'test',
90
90
  REPORT: 'report',
91
- DEPLOY: 'deploy'
91
+ DEPLOY: 'deploy',
92
92
  };
93
93
 
94
94
  const JobConfig = {
@@ -96,38 +96,38 @@ const JobConfig = {
96
96
  name: 'Validate Steering',
97
97
  description: 'Validate steering files and constitution compliance',
98
98
  command: 'npx musubi validate',
99
- required: true
99
+ required: true,
100
100
  },
101
101
  [JobType.ANALYZE]: {
102
102
  name: 'Analyze Codebase',
103
103
  description: 'Analyze codebase structure and patterns',
104
104
  command: 'npx musubi analyze',
105
- required: false
105
+ required: false,
106
106
  },
107
107
  [JobType.SYNC]: {
108
108
  name: 'Sync Steering',
109
109
  description: 'Synchronize steering files across platforms',
110
110
  command: 'npx musubi sync',
111
- required: false
111
+ required: false,
112
112
  },
113
113
  [JobType.TEST]: {
114
114
  name: 'Run Tests',
115
115
  description: 'Execute test suite with validation',
116
116
  command: 'npm test',
117
- required: true
117
+ required: true,
118
118
  },
119
119
  [JobType.REPORT]: {
120
120
  name: 'Generate Report',
121
121
  description: 'Generate quality metrics report',
122
122
  command: 'npx musubi gaps --format json',
123
- required: false
123
+ required: false,
124
124
  },
125
125
  [JobType.DEPLOY]: {
126
126
  name: 'Deploy Documentation',
127
127
  description: 'Deploy generated documentation',
128
128
  command: 'npx musubi share --deploy',
129
- required: false
130
- }
129
+ required: false,
130
+ },
131
131
  };
132
132
 
133
133
  // ============================================================================
@@ -143,7 +143,7 @@ class WorkflowGenerator {
143
143
  branch: options.branch || 'main',
144
144
  jobs: options.jobs || [JobType.VALIDATE, JobType.TEST],
145
145
  cacheEnabled: options.cacheEnabled !== false,
146
- ...options
146
+ ...options,
147
147
  };
148
148
  }
149
149
 
@@ -170,7 +170,7 @@ class WorkflowGenerator {
170
170
 
171
171
  generateGitHubActions() {
172
172
  const jobs = {};
173
-
173
+
174
174
  for (const jobType of this.options.jobs) {
175
175
  const jobConfig = JobConfig[jobType];
176
176
  jobs[jobType] = this.createGitHubJob(jobType, jobConfig);
@@ -180,9 +180,9 @@ class WorkflowGenerator {
180
180
  name: 'MUSUBI SDD Validation',
181
181
  on: {
182
182
  push: { branches: [this.options.branch] },
183
- pull_request: { branches: [this.options.branch] }
183
+ pull_request: { branches: [this.options.branch] },
184
184
  },
185
- jobs
185
+ jobs,
186
186
  };
187
187
 
188
188
  return this.toYaml(workflow);
@@ -194,8 +194,8 @@ class WorkflowGenerator {
194
194
  {
195
195
  name: 'Setup Node.js',
196
196
  uses: 'actions/setup-node@v4',
197
- with: { 'node-version': this.options.nodeVersion }
198
- }
197
+ with: { 'node-version': this.options.nodeVersion },
198
+ },
199
199
  ];
200
200
 
201
201
  if (this.options.cacheEnabled) {
@@ -204,8 +204,8 @@ class WorkflowGenerator {
204
204
  uses: 'actions/cache@v4',
205
205
  with: {
206
206
  path: 'node_modules',
207
- key: "${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}"
208
- }
207
+ key: "${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}",
208
+ },
209
209
  });
210
210
  }
211
211
 
@@ -220,59 +220,36 @@ class WorkflowGenerator {
220
220
  uses: 'actions/upload-artifact@v4',
221
221
  with: {
222
222
  name: 'musubi-report',
223
- path: 'musubi-report.json'
224
- }
223
+ path: 'musubi-report.json',
224
+ },
225
225
  });
226
226
  }
227
227
 
228
228
  return {
229
229
  'runs-on': 'ubuntu-latest',
230
- steps
230
+ steps,
231
231
  };
232
232
  }
233
233
 
234
234
  generateGitLabCI() {
235
- const lines = [
236
- 'image: node:' + this.options.nodeVersion,
237
- '',
238
- 'stages:'
239
- ];
235
+ const lines = ['image: node:' + this.options.nodeVersion, '', 'stages:'];
240
236
 
241
237
  for (const jobType of this.options.jobs) {
242
238
  lines.push(` - ${jobType}`);
243
239
  }
244
240
 
245
241
  if (this.options.cacheEnabled) {
246
- lines.push(
247
- '',
248
- 'cache:',
249
- ' paths:',
250
- ' - node_modules/'
251
- );
242
+ lines.push('', 'cache:', ' paths:', ' - node_modules/');
252
243
  }
253
244
 
254
- lines.push(
255
- '',
256
- 'before_script:',
257
- ' - npm ci',
258
- ''
259
- );
245
+ lines.push('', 'before_script:', ' - npm ci', '');
260
246
 
261
247
  for (const jobType of this.options.jobs) {
262
248
  const jobConfig = JobConfig[jobType];
263
- lines.push(
264
- `${jobType}:`,
265
- ` stage: ${jobType}`,
266
- ' script:',
267
- ` - ${jobConfig.command}`
268
- );
249
+ lines.push(`${jobType}:`, ` stage: ${jobType}`, ' script:', ` - ${jobConfig.command}`);
269
250
 
270
251
  if (jobType === JobType.REPORT) {
271
- lines.push(
272
- ' artifacts:',
273
- ' paths:',
274
- ' - musubi-report.json'
275
- );
252
+ lines.push(' artifacts:', ' paths:', ' - musubi-report.json');
276
253
  }
277
254
 
278
255
  lines.push('');
@@ -286,36 +263,40 @@ class WorkflowGenerator {
286
263
  const jobConfig = JobConfig[jobType];
287
264
  return {
288
265
  stage: jobType.charAt(0).toUpperCase() + jobType.slice(1),
289
- jobs: [{
290
- job: jobType,
291
- pool: { vmImage: 'ubuntu-latest' },
292
- steps: [
293
- { task: 'NodeTool@0', inputs: { versionSpec: this.options.nodeVersion } },
294
- { script: 'npm ci', displayName: 'Install dependencies' },
295
- { script: jobConfig.command, displayName: jobConfig.name }
296
- ]
297
- }]
266
+ jobs: [
267
+ {
268
+ job: jobType,
269
+ pool: { vmImage: 'ubuntu-latest' },
270
+ steps: [
271
+ { task: 'NodeTool@0', inputs: { versionSpec: this.options.nodeVersion } },
272
+ { script: 'npm ci', displayName: 'Install dependencies' },
273
+ { script: jobConfig.command, displayName: jobConfig.name },
274
+ ],
275
+ },
276
+ ],
298
277
  };
299
278
  });
300
279
 
301
280
  const pipeline = {
302
281
  trigger: [this.options.branch],
303
- stages
282
+ stages,
304
283
  };
305
284
 
306
285
  return this.toYaml(pipeline);
307
286
  }
308
287
 
309
288
  generateJenkinsfile() {
310
- const stages = this.options.jobs.map(jobType => {
311
- const jobConfig = JobConfig[jobType];
312
- return `
289
+ const stages = this.options.jobs
290
+ .map(jobType => {
291
+ const jobConfig = JobConfig[jobType];
292
+ return `
313
293
  stage('${jobConfig.name}') {
314
294
  steps {
315
295
  sh '${jobConfig.command}'
316
296
  }
317
297
  }`;
318
- }).join('\n');
298
+ })
299
+ .join('\n');
319
300
 
320
301
  return `pipeline {
321
302
  agent any
@@ -343,7 +324,7 @@ ${stages}
343
324
 
344
325
  generateCircleCI() {
345
326
  const jobs = {};
346
-
327
+
347
328
  for (const jobType of this.options.jobs) {
348
329
  const jobConfig = JobConfig[jobType];
349
330
  jobs[jobType] = {
@@ -352,9 +333,14 @@ ${stages}
352
333
  'checkout',
353
334
  { restore_cache: { keys: ['v1-deps-{{ checksum "package-lock.json" }}'] } },
354
335
  { run: 'npm ci' },
355
- { save_cache: { paths: ['node_modules'], key: 'v1-deps-{{ checksum "package-lock.json" }}' } },
356
- { run: { name: jobConfig.name, command: jobConfig.command } }
357
- ]
336
+ {
337
+ save_cache: {
338
+ paths: ['node_modules'],
339
+ key: 'v1-deps-{{ checksum "package-lock.json" }}',
340
+ },
341
+ },
342
+ { run: { name: jobConfig.name, command: jobConfig.command } },
343
+ ],
358
344
  };
359
345
  }
360
346
 
@@ -363,9 +349,9 @@ ${stages}
363
349
  jobs,
364
350
  workflows: {
365
351
  musubi: {
366
- jobs: this.options.jobs.map(j => ({ [j]: {} }))
367
- }
368
- }
352
+ jobs: this.options.jobs.map(j => ({ [j]: {} })),
353
+ },
354
+ },
369
355
  };
370
356
 
371
357
  return this.toYaml(config);
@@ -380,7 +366,7 @@ ${stages}
380
366
  'cache:',
381
367
  ' npm: true',
382
368
  '',
383
- 'script:'
369
+ 'script:',
384
370
  ];
385
371
 
386
372
  for (const jobType of this.options.jobs) {
@@ -398,8 +384,8 @@ ${stages}
398
384
  step: {
399
385
  name: jobConfig.name,
400
386
  caches: ['node'],
401
- script: ['npm ci', jobConfig.command]
402
- }
387
+ script: ['npm ci', jobConfig.command],
388
+ },
403
389
  };
404
390
  });
405
391
 
@@ -408,9 +394,9 @@ ${stages}
408
394
  pipelines: {
409
395
  default: steps,
410
396
  branches: {
411
- [this.options.branch]: steps
412
- }
413
- }
397
+ [this.options.branch]: steps,
398
+ },
399
+ },
414
400
  };
415
401
 
416
402
  return this.toYaml(pipelines);
@@ -454,7 +440,7 @@ class PreCommitGenerator {
454
440
  this.options = {
455
441
  hooks: options.hooks || ['validate', 'lint'],
456
442
  packageManager: options.packageManager || 'npm',
457
- ...options
443
+ ...options,
458
444
  };
459
445
  }
460
446
 
@@ -462,7 +448,7 @@ class PreCommitGenerator {
462
448
  return {
463
449
  'pre-commit': this.generatePreCommit(),
464
450
  'husky-config': this.generateHuskyConfig(),
465
- 'lint-staged': this.generateLintStaged()
451
+ 'lint-staged': this.generateLintStaged(),
466
452
  };
467
453
  }
468
454
 
@@ -500,8 +486,8 @@ echo "✅ Pre-commit checks passed!"
500
486
  generateHuskyConfig() {
501
487
  return {
502
488
  hooks: {
503
- 'pre-commit': 'npx lint-staged && npx musubi validate'
504
- }
489
+ 'pre-commit': 'npx lint-staged && npx musubi validate',
490
+ },
505
491
  };
506
492
  }
507
493
 
@@ -521,11 +507,11 @@ echo "✅ Pre-commit checks passed!"
521
507
 
522
508
  generatePackageJsonScripts() {
523
509
  return {
524
- 'prepare': 'husky install',
525
- 'lint': 'eslint src tests',
510
+ prepare: 'husky install',
511
+ lint: 'eslint src tests',
526
512
  'lint:fix': 'eslint src tests --fix',
527
- 'validate': 'npx musubi validate',
528
- 'validate:all': 'npx musubi validate --all'
513
+ validate: 'npx musubi validate',
514
+ 'validate:all': 'npx musubi validate --all',
529
515
  };
530
516
  }
531
517
  }
@@ -627,7 +613,7 @@ class PipelineValidator {
627
613
  return {
628
614
  valid: this.errors.length === 0,
629
615
  errors: [...this.errors],
630
- warnings: [...this.warnings]
616
+ warnings: [...this.warnings],
631
617
  };
632
618
  }
633
619
  }
@@ -649,8 +635,8 @@ class CICDManager extends EventEmitter {
649
635
  const detected = [];
650
636
 
651
637
  for (const [provider, config] of Object.entries(ProviderConfig)) {
652
- const hasConfig = files.some(f =>
653
- f.includes(config.configFile) || f.endsWith(config.configFile.split('/').pop())
638
+ const hasConfig = files.some(
639
+ f => f.includes(config.configFile) || f.endsWith(config.configFile.split('/').pop())
654
640
  );
655
641
  if (hasConfig) {
656
642
  detected.push(provider);
@@ -667,7 +653,7 @@ class CICDManager extends EventEmitter {
667
653
 
668
654
  getGenerator(provider, options = {}) {
669
655
  const key = `${provider}-${JSON.stringify(options)}`;
670
-
656
+
671
657
  if (!this.generators.has(key)) {
672
658
  this.generators.set(key, new WorkflowGenerator(provider, options));
673
659
  }
@@ -678,17 +664,17 @@ class CICDManager extends EventEmitter {
678
664
  generate(provider, options = {}) {
679
665
  const generator = this.getGenerator(provider, options);
680
666
  const content = generator.generate();
681
-
667
+
682
668
  this.emit('generated', { provider, content });
683
669
  return {
684
670
  file: ProviderConfig[provider].configFile,
685
- content
671
+ content,
686
672
  };
687
673
  }
688
674
 
689
675
  generateAll(options = {}) {
690
676
  const results = new Map();
691
-
677
+
692
678
  for (const provider of Object.values(CIProvider)) {
693
679
  try {
694
680
  const result = this.generate(provider, options);
@@ -719,7 +705,7 @@ class CICDManager extends EventEmitter {
719
705
  listProviders() {
720
706
  return Object.entries(ProviderConfig).map(([id, config]) => ({
721
707
  id,
722
- ...config
708
+ ...config,
723
709
  }));
724
710
  }
725
711
 
@@ -739,7 +725,7 @@ class CICDManager extends EventEmitter {
739
725
  jobs,
740
726
  nodeVersion: projectInfo.nodeVersion || '20',
741
727
  branch: projectInfo.defaultBranch || 'main',
742
- cacheEnabled: true
728
+ cacheEnabled: true,
743
729
  };
744
730
  }
745
731
 
@@ -747,7 +733,7 @@ class CICDManager extends EventEmitter {
747
733
  return {
748
734
  projectRoot: this.projectRoot,
749
735
  detectedProvider: this.detectedProvider,
750
- availableProviders: Object.keys(CIProvider)
736
+ availableProviders: Object.keys(CIProvider),
751
737
  };
752
738
  }
753
739
  }
@@ -770,13 +756,13 @@ module.exports = {
770
756
  ProviderConfig,
771
757
  JobType,
772
758
  JobConfig,
773
-
759
+
774
760
  // Classes
775
761
  WorkflowGenerator,
776
762
  PreCommitGenerator,
777
763
  PipelineValidator,
778
764
  CICDManager,
779
-
765
+
780
766
  // Factory
781
- createCICDManager
767
+ createCICDManager,
782
768
  };