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
@@ -723,7 +723,7 @@ program
723
723
  .option('--no-gaps', 'Exclude gaps analysis')
724
724
  .action(async options => {
725
725
  try {
726
- const { CoverageReporter, ReportFormat } = require('../src/reporters/coverage-report.js');
726
+ const { CoverageReporter } = require('../src/reporters/coverage-report.js');
727
727
 
728
728
  console.log(chalk.bold('\nšŸ“Š Generating Coverage Report\n'));
729
729
 
@@ -762,7 +762,7 @@ program
762
762
  .option('-o, --output <path>', 'Output report path')
763
763
  .action(async options => {
764
764
  try {
765
- const { TraceabilityValidator, Severity } = require('../src/validators/traceability-validator.js');
765
+ const { TraceabilityValidator } = require('../src/validators/traceability-validator.js');
766
766
 
767
767
  const validator = new TraceabilityValidator(process.cwd(), {
768
768
  thresholds: {
@@ -778,14 +778,18 @@ program
778
778
  const result = await validator.validate();
779
779
 
780
780
  if (options.format === 'json') {
781
- const output = JSON.stringify({
782
- passed: result.valid,
783
- coverage: result.coverage,
784
- gaps: result.gaps,
785
- violations: result.violations,
786
- warnings: result.warnings,
787
- timestamp: new Date().toISOString(),
788
- }, null, 2);
781
+ const output = JSON.stringify(
782
+ {
783
+ passed: result.valid,
784
+ coverage: result.coverage,
785
+ gaps: result.gaps,
786
+ violations: result.violations,
787
+ warnings: result.warnings,
788
+ timestamp: new Date().toISOString(),
789
+ },
790
+ null,
791
+ 2
792
+ );
789
793
 
790
794
  if (options.output) {
791
795
  const fs = require('fs-extra');
@@ -917,14 +921,17 @@ program
917
921
  console.log(output);
918
922
  }
919
923
  } else if (options.format === 'html') {
920
- const { TraceabilityMatrixReport, ReportFormat } = require('../src/reporters/traceability-matrix-report.js');
924
+ const {
925
+ TraceabilityMatrixReport,
926
+ ReportFormat,
927
+ } = require('../src/reporters/traceability-matrix-report.js');
921
928
  const reporter = new TraceabilityMatrixReport(process.cwd(), {
922
929
  theme: options.theme,
923
930
  interactive: true,
924
931
  });
925
-
932
+
926
933
  const html = await reporter.generate(result, ReportFormat.HTML);
927
-
934
+
928
935
  if (options.output) {
929
936
  const fs = require('fs-extra');
930
937
  await fs.writeFile(options.output, html, 'utf-8');
@@ -935,15 +942,26 @@ program
935
942
  } else {
936
943
  // Text format
937
944
  console.log(chalk.bold('šŸ“Š Forward Traceability (Requirements → Tests)'));
938
- console.log(chalk.dim(` Complete: ${result.completeness.forwardComplete}/${result.completeness.forwardTotal} (${result.completeness.forwardPercentage}%)`));
945
+ console.log(
946
+ chalk.dim(
947
+ ` Complete: ${result.completeness.forwardComplete}/${result.completeness.forwardTotal} (${result.completeness.forwardPercentage}%)`
948
+ )
949
+ );
939
950
  console.log();
940
951
 
941
952
  console.log(chalk.bold('šŸ”™ Backward Traceability (Tests → Requirements)'));
942
- console.log(chalk.dim(` Complete: ${result.completeness.backwardComplete}/${result.completeness.backwardTotal} (${result.completeness.backwardPercentage}%)`));
953
+ console.log(
954
+ chalk.dim(
955
+ ` Complete: ${result.completeness.backwardComplete}/${result.completeness.backwardTotal} (${result.completeness.backwardPercentage}%)`
956
+ )
957
+ );
943
958
  console.log();
944
959
 
945
960
  // Show orphaned items
946
- const totalOrphaned = Object.values(result.orphaned).reduce((sum, arr) => sum + arr.length, 0);
961
+ const totalOrphaned = Object.values(result.orphaned).reduce(
962
+ (sum, arr) => sum + arr.length,
963
+ 0
964
+ );
947
965
  if (totalOrphaned > 0) {
948
966
  console.log(chalk.yellow.bold(`āš ļø Orphaned Items (${totalOrphaned}):`));
949
967
  ['requirements', 'design', 'tasks', 'code', 'tests'].forEach(cat => {
@@ -977,11 +995,14 @@ program
977
995
  try {
978
996
  console.log(chalk.bold('\nšŸ“Š Generating HTML Traceability Report\n'));
979
997
 
980
- const { TraceabilityMatrixReport, ReportFormat } = require('../src/reporters/traceability-matrix-report.js');
998
+ const {
999
+ TraceabilityMatrixReport,
1000
+ ReportFormat,
1001
+ } = require('../src/reporters/traceability-matrix-report.js');
981
1002
  const analyzer = new TraceabilityAnalyzer(process.cwd());
982
-
1003
+
983
1004
  const traceabilityData = await analyzer.analyzeBidirectional();
984
-
1005
+
985
1006
  const reporter = new TraceabilityMatrixReport(process.cwd(), {
986
1007
  theme: options.theme,
987
1008
  interactive: options.interactive !== false,
@@ -996,9 +1017,17 @@ program
996
1017
  console.log(chalk.green(`āœ“ HTML report generated: ${options.output}`));
997
1018
  console.log();
998
1019
  console.log(chalk.dim('Summary:'));
999
- console.log(chalk.dim(` Forward coverage: ${traceabilityData.completeness.forwardPercentage}%`));
1000
- console.log(chalk.dim(` Backward coverage: ${traceabilityData.completeness.backwardPercentage}%`));
1001
- console.log(chalk.dim(` Orphaned items: ${Object.values(traceabilityData.orphaned).reduce((s, a) => s + a.length, 0)}`));
1020
+ console.log(
1021
+ chalk.dim(` Forward coverage: ${traceabilityData.completeness.forwardPercentage}%`)
1022
+ );
1023
+ console.log(
1024
+ chalk.dim(` Backward coverage: ${traceabilityData.completeness.backwardPercentage}%`)
1025
+ );
1026
+ console.log(
1027
+ chalk.dim(
1028
+ ` Orphaned items: ${Object.values(traceabilityData.orphaned).reduce((s, a) => s + a.length, 0)}`
1029
+ )
1030
+ );
1002
1031
  console.log();
1003
1032
 
1004
1033
  process.exit(0);
@@ -23,7 +23,6 @@ const {
23
23
  createOutputGuardrail,
24
24
  createSafetyCheckGuardrail,
25
25
  GuardrailChain,
26
- SafetyLevel
27
26
  } = require('../src/orchestration/guardrails');
28
27
 
29
28
  const program = new Command();
@@ -130,7 +129,7 @@ program
130
129
  try {
131
130
  // Get content from argument, file, or stdin
132
131
  let inputContent = content;
133
-
132
+
134
133
  if (options.file) {
135
134
  const fs = require('fs');
136
135
  const path = require('path');
@@ -156,20 +155,20 @@ program
156
155
  switch (guardrailType) {
157
156
  case 'input':
158
157
  guardrail = createInputGuardrail('userInput', {
159
- sanitize: true
158
+ sanitize: true,
160
159
  });
161
160
  break;
162
-
161
+
163
162
  case 'output':
164
163
  guardrail = createOutputGuardrail(options.redact ? 'redact' : 'safe');
165
164
  break;
166
-
165
+
167
166
  case 'safety':
168
167
  guardrail = createSafetyCheckGuardrail(options.level, {
169
- enforceConstitution: options.constitutional
168
+ enforceConstitution: options.constitutional,
170
169
  });
171
170
  break;
172
-
171
+
173
172
  default:
174
173
  console.error(chalk.red(`āœ— Unknown guardrail type: ${guardrailType}`));
175
174
  process.exit(1);
@@ -200,7 +199,7 @@ program
200
199
  try {
201
200
  // Get content
202
201
  let inputContent = content;
203
-
202
+
204
203
  if (options.file) {
205
204
  const fs = require('fs');
206
205
  const path = require('path');
@@ -223,7 +222,7 @@ program
223
222
  const chain = new GuardrailChain({
224
223
  name: 'ValidationChain',
225
224
  parallel: options.parallel || false,
226
- stopOnFirstFailure: options.stopOnFailure || false
225
+ stopOnFirstFailure: options.stopOnFailure || false,
227
226
  });
228
227
 
229
228
  // Add default guardrails
@@ -252,7 +251,7 @@ program
252
251
  .action(async options => {
253
252
  try {
254
253
  const validator = new ConstitutionValidator(process.cwd());
255
-
254
+
256
255
  console.log(chalk.dim('šŸ“Š Calculating constitutional compliance score...\n'));
257
256
 
258
257
  const [constitutionResults, gatesResults, complexityResults] = await Promise.all([
@@ -262,12 +261,15 @@ program
262
261
  ]);
263
262
 
264
263
  // Calculate weighted score
265
- const constitutionScore = constitutionResults.passed ? 100 :
266
- Math.max(0, 100 - (constitutionResults.violations?.length || 0) * 10);
267
- const gatesScore = gatesResults.passed ? 100 :
268
- Math.max(0, 100 - (gatesResults.violations?.length || 0) * 15);
269
- const complexityScore = complexityResults.passed ? 100 :
270
- Math.max(0, 100 - (complexityResults.violations?.length || 0) * 5);
264
+ const constitutionScore = constitutionResults.passed
265
+ ? 100
266
+ : Math.max(0, 100 - (constitutionResults.violations?.length || 0) * 10);
267
+ const gatesScore = gatesResults.passed
268
+ ? 100
269
+ : Math.max(0, 100 - (gatesResults.violations?.length || 0) * 15);
270
+ const complexityScore = complexityResults.passed
271
+ ? 100
272
+ : Math.max(0, 100 - (complexityResults.violations?.length || 0) * 5);
271
273
 
272
274
  // Weighted average: Constitution 50%, Gates 30%, Complexity 20%
273
275
  const overallScore = Math.round(
@@ -284,32 +286,35 @@ program
284
286
  breakdown: {
285
287
  constitution: { score: constitutionScore, weight: '50%' },
286
288
  gates: { score: gatesScore, weight: '30%' },
287
- complexity: { score: complexityScore, weight: '20%' }
289
+ complexity: { score: complexityScore, weight: '20%' },
288
290
  },
289
- timestamp: new Date().toISOString()
291
+ timestamp: new Date().toISOString(),
290
292
  };
291
293
 
292
294
  if (options.format === 'json') {
293
295
  console.log(JSON.stringify(result, null, 2));
294
296
  } else {
295
- const scoreBar = 'ā–ˆ'.repeat(Math.floor(overallScore / 10)) +
296
- 'ā–‘'.repeat(10 - Math.floor(overallScore / 10));
297
-
297
+ const scoreBar =
298
+ 'ā–ˆ'.repeat(Math.floor(overallScore / 10)) +
299
+ 'ā–‘'.repeat(10 - Math.floor(overallScore / 10));
300
+
298
301
  console.log(chalk.bold('Constitutional Compliance Score\n'));
299
302
  console.log(chalk.bold('━'.repeat(50)));
300
303
  console.log(`\n${scoreBar} ${chalk.bold(overallScore)}%\n`);
301
-
304
+
302
305
  console.log(chalk.dim('Breakdown:'));
303
306
  console.log(` Constitution (50%): ${constitutionScore}%`);
304
307
  console.log(` Gates (30%): ${gatesScore}%`);
305
308
  console.log(` Complexity (20%): ${complexityScore}%`);
306
-
309
+
307
310
  console.log('\n' + chalk.bold('━'.repeat(50)));
308
-
311
+
309
312
  if (passed) {
310
313
  console.log(chalk.bold.green(`\nāœ“ PASSED (threshold: ${threshold}%)\n`));
311
314
  } else {
312
- console.log(chalk.bold.red(`\nāœ— FAILED (threshold: ${threshold}%, got: ${overallScore}%)\n`));
315
+ console.log(
316
+ chalk.bold.red(`\nāœ— FAILED (threshold: ${threshold}%, got: ${overallScore}%)\n`)
317
+ );
313
318
  }
314
319
  }
315
320
 
@@ -508,10 +513,14 @@ function displayGuardrailResults(result, options) {
508
513
  if (result.violations && result.violations.length > 0) {
509
514
  console.log(chalk.bold.red('Violations:'));
510
515
  result.violations.forEach(violation => {
511
- const severityIcon = violation.severity === 'error' ? 'āœ—' :
512
- violation.severity === 'warning' ? '⚠' : 'ℹ';
513
- const severityColor = violation.severity === 'error' ? chalk.red :
514
- violation.severity === 'warning' ? chalk.yellow : chalk.blue;
516
+ const severityIcon =
517
+ violation.severity === 'error' ? 'āœ—' : violation.severity === 'warning' ? '⚠' : 'ℹ';
518
+ const severityColor =
519
+ violation.severity === 'error'
520
+ ? chalk.red
521
+ : violation.severity === 'warning'
522
+ ? chalk.yellow
523
+ : chalk.blue;
515
524
  console.log(severityColor(` ${severityIcon} [${violation.code}] ${violation.message}`));
516
525
  });
517
526
  console.log();
@@ -562,7 +571,7 @@ function displayChainResults(result, options) {
562
571
 
563
572
  // Show individual guardrail results
564
573
  console.log(chalk.bold('Individual Results:'));
565
- result.results.forEach((r, index) => {
574
+ result.results.forEach((r, _index) => {
566
575
  const icon = r.passed ? chalk.green('āœ“') : chalk.red('āœ—');
567
576
  console.log(` ${icon} ${r.guardrailName} (${r.executionTimeMs}ms)`);
568
577
  });
@@ -2,9 +2,9 @@
2
2
 
3
3
  /**
4
4
  * MUSUBI Workflow CLI
5
- *
5
+ *
6
6
  * Manage workflow state, transitions, and metrics.
7
- *
7
+ *
8
8
  * Commands:
9
9
  * init <feature> - Initialize workflow for a feature
10
10
  * status - Show current workflow status
@@ -32,7 +32,7 @@ const STAGE_ICONS = {
32
32
  testing: '🧪',
33
33
  deployment: 'šŸš€',
34
34
  monitoring: 'šŸ“Š',
35
- retrospective: 'šŸ”„'
35
+ retrospective: 'šŸ”„',
36
36
  };
37
37
 
38
38
  /**
@@ -48,9 +48,11 @@ function formatStage(stage) {
48
48
  */
49
49
  async function showStatus() {
50
50
  const state = await engine.getState();
51
-
51
+
52
52
  if (!state) {
53
- console.log(chalk.yellow('\nāš ļø No active workflow. Use "musubi-workflow init <feature>" to start.'));
53
+ console.log(
54
+ chalk.yellow('\nāš ļø No active workflow. Use "musubi-workflow init <feature>" to start.')
55
+ );
54
56
  return;
55
57
  }
56
58
 
@@ -58,18 +60,18 @@ async function showStatus() {
58
60
  console.log(chalk.white(`Feature: ${chalk.cyan(state.feature)}`));
59
61
  console.log(chalk.white(`Current Stage: ${formatStage(state.currentStage)}`));
60
62
  console.log(chalk.white(`Started: ${new Date(state.startedAt).toLocaleString()}`));
61
-
63
+
62
64
  // Show stage progress
63
65
  console.log(chalk.bold('\nšŸ“ˆ Stage Progress:\n'));
64
-
66
+
65
67
  const allStages = Object.keys(WORKFLOW_STAGES);
66
68
  const currentIndex = allStages.indexOf(state.currentStage);
67
-
69
+
68
70
  allStages.forEach((stage, index) => {
69
71
  const data = state.stages[stage];
70
72
  let status = '';
71
73
  let color = chalk.gray;
72
-
74
+
73
75
  if (data?.status === 'completed') {
74
76
  status = `āœ… Completed (${data.duration})`;
75
77
  color = chalk.green;
@@ -83,7 +85,7 @@ async function showStatus() {
83
85
  status = 'ā³ Pending';
84
86
  color = chalk.gray;
85
87
  }
86
-
88
+
87
89
  console.log(color(` ${formatStage(stage).padEnd(25)} ${status}`));
88
90
  });
89
91
 
@@ -102,18 +104,18 @@ async function showStatus() {
102
104
  */
103
105
  async function showHistory() {
104
106
  const state = await engine.getState();
105
-
107
+
106
108
  if (!state || !state.history) {
107
109
  console.log(chalk.yellow('\nāš ļø No workflow history available.'));
108
110
  return;
109
111
  }
110
112
 
111
113
  console.log(chalk.bold('\nšŸ“œ Workflow History\n'));
112
-
114
+
113
115
  state.history.forEach(event => {
114
116
  const time = new Date(event.timestamp).toLocaleString();
115
117
  let desc = '';
116
-
118
+
117
119
  switch (event.action) {
118
120
  case 'workflow-started':
119
121
  desc = `Started workflow for "${event.feature}" at ${formatStage(event.stage)}`;
@@ -132,7 +134,7 @@ async function showHistory() {
132
134
  default:
133
135
  desc = event.action;
134
136
  }
135
-
137
+
136
138
  console.log(chalk.white(` ${chalk.gray(time)} ${desc}`));
137
139
  });
138
140
  }
@@ -142,9 +144,9 @@ async function showHistory() {
142
144
  */
143
145
  async function showMetrics() {
144
146
  const summary = await engine.getMetricsSummary();
145
-
147
+
146
148
  console.log(chalk.bold('\nšŸ“Š Workflow Metrics Summary\n'));
147
-
149
+
148
150
  if (summary.message) {
149
151
  console.log(chalk.yellow(` ${summary.message}`));
150
152
  return;
@@ -154,7 +156,7 @@ async function showMetrics() {
154
156
  console.log(chalk.white(` Completed: ${summary.completedWorkflows}`));
155
157
  console.log(chalk.white(` Stage Transitions: ${summary.stageTransitions}`));
156
158
  console.log(chalk.white(` Feedback Loops: ${summary.feedbackLoops}`));
157
-
159
+
158
160
  if (summary.averageDuration) {
159
161
  console.log(chalk.white(` Average Duration: ${summary.averageDuration}`));
160
162
  }
@@ -190,10 +192,7 @@ program
190
192
  }
191
193
  });
192
194
 
193
- program
194
- .command('status')
195
- .description('Show current workflow status')
196
- .action(showStatus);
195
+ program.command('status').description('Show current workflow status').action(showStatus);
197
196
 
198
197
  program
199
198
  .command('next [stage]')
@@ -232,7 +231,9 @@ program
232
231
  try {
233
232
  await engine.recordFeedbackLoop(from, to, options.reason);
234
233
  await engine.transitionTo(to, `Feedback: ${options.reason}`);
235
- console.log(chalk.yellow(`\nšŸ”„ Feedback loop recorded: ${formatStage(from)} → ${formatStage(to)}`));
234
+ console.log(
235
+ chalk.yellow(`\nšŸ”„ Feedback loop recorded: ${formatStage(from)} → ${formatStage(to)}`)
236
+ );
236
237
  console.log(chalk.gray(` Reason: ${options.reason}`));
237
238
  } catch (error) {
238
239
  console.error(chalk.red(`\nāŒ Error: ${error.message}`));
@@ -244,21 +245,25 @@ program
244
245
  .command('complete')
245
246
  .description('Complete the current workflow')
246
247
  .option('-n, --notes <notes>', 'Completion notes')
247
- .action(async (options) => {
248
+ .action(async options => {
248
249
  try {
249
250
  const summary = await engine.completeWorkflow(options.notes);
250
-
251
+
251
252
  console.log(chalk.green('\nāœ… Workflow Completed!\n'));
252
253
  console.log(chalk.bold('šŸ“Š Summary:'));
253
254
  console.log(chalk.white(` Feature: ${summary.feature}`));
254
255
  console.log(chalk.white(` Total Duration: ${summary.totalDuration}`));
255
256
  console.log(chalk.white(` Stages: ${summary.stages.length}`));
256
257
  console.log(chalk.white(` Feedback Loops: ${summary.feedbackLoops}`));
257
-
258
+
258
259
  if (summary.stages.length > 0) {
259
260
  console.log(chalk.bold('\nšŸ“ˆ Stage Breakdown:'));
260
261
  summary.stages.forEach(s => {
261
- console.log(chalk.white(` ${formatStage(s.name).padEnd(25)} ${s.duration} (${s.attempts} attempt${s.attempts > 1 ? 's' : ''})`));
262
+ console.log(
263
+ chalk.white(
264
+ ` ${formatStage(s.name).padEnd(25)} ${s.duration} (${s.attempts} attempt${s.attempts > 1 ? 's' : ''})`
265
+ )
266
+ );
262
267
  });
263
268
  }
264
269
  } catch (error) {
@@ -267,14 +272,8 @@ program
267
272
  }
268
273
  });
269
274
 
270
- program
271
- .command('history')
272
- .description('Show workflow history')
273
- .action(showHistory);
275
+ program.command('history').description('Show workflow history').action(showHistory);
274
276
 
275
- program
276
- .command('metrics')
277
- .description('Show workflow metrics summary')
278
- .action(showMetrics);
277
+ program.command('metrics').description('Show workflow metrics summary').action(showMetrics);
279
278
 
280
279
  program.parse();
package/bin/musubi.js CHANGED
@@ -95,6 +95,32 @@ aliasFlags.forEach(flag => {
95
95
  initCommand.option(`--${flag}`, `Select agent: ${flag}`);
96
96
  });
97
97
 
98
+ // Add spec option for external specification reference
99
+ initCommand.option(
100
+ '--spec <source>',
101
+ 'Reference external specification (URL, file path, or git repo)'
102
+ );
103
+
104
+ // Add reference option for GitHub repository references (can be specified multiple times)
105
+ initCommand.option(
106
+ '--reference <repo>',
107
+ 'Reference GitHub repository for improvements (can be specified multiple times)',
108
+ (value, previous) => (previous ? [...previous, value] : [value]),
109
+ []
110
+ );
111
+
112
+ // Shorthand aliases for reference
113
+ initCommand.option(
114
+ '-r, --ref <repo>',
115
+ 'Alias for --reference',
116
+ (value, previous) => (previous ? [...previous, value] : [value]),
117
+ []
118
+ );
119
+
120
+ // Add workspace/monorepo option
121
+ initCommand.option('--workspace', 'Initialize as workspace/monorepo project');
122
+ initCommand.option('--template <name>', 'Use project template (e.g., microservices, clean-arch)');
123
+
98
124
  initCommand.action(async options => {
99
125
  const agentKey = detectAgentFromFlags(options);
100
126
  const agent = getAgentDefinition(agentKey);
@@ -102,9 +128,20 @@ initCommand.action(async options => {
102
128
  console.log(chalk.blue(`Initializing MUSUBI for ${chalk.bold(agent.label)}...`));
103
129
  console.log(chalk.gray(`Description: ${agent.description}\n`));
104
130
 
105
- // Delegate to musubi-init.js with agent info
131
+ // Merge --reference and --ref options
132
+ const references = [...(options.reference || []), ...(options.ref || [])];
133
+
134
+ // Extract init-specific options
135
+ const initOptions = {
136
+ spec: options.spec,
137
+ workspace: options.workspace,
138
+ template: options.template,
139
+ references: references.length > 0 ? references : undefined,
140
+ };
141
+
142
+ // Delegate to musubi-init.js with agent info and options
106
143
  const initMain = require('./musubi-init.js');
107
- await initMain(agent, agentKey);
144
+ await initMain(agent, agentKey, initOptions);
108
145
  });
109
146
 
110
147
  // ============================================================================
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "musubi-sdd",
3
- "version": "5.1.0",
3
+ "version": "5.6.1",
4
4
  "description": "Ultimate Specification Driven Development Tool with 27 Agents for 7 AI Coding Platforms + MCP Integration (Claude Code, GitHub Copilot, Cursor, Gemini CLI, Windsurf, Codex, Qwen Code)",
5
5
  "main": "src/index.js",
6
6
  "bin": {