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.
- package/README.ja.md +106 -48
- package/README.md +110 -32
- package/bin/musubi-analyze.js +74 -67
- package/bin/musubi-browser.js +27 -26
- package/bin/musubi-change.js +48 -47
- package/bin/musubi-checkpoint.js +10 -7
- package/bin/musubi-convert.js +25 -25
- package/bin/musubi-costs.js +27 -10
- package/bin/musubi-gui.js +52 -46
- package/bin/musubi-init.js +1952 -10
- package/bin/musubi-orchestrate.js +327 -239
- package/bin/musubi-remember.js +69 -56
- package/bin/musubi-resolve.js +53 -45
- package/bin/musubi-trace.js +51 -22
- package/bin/musubi-validate.js +39 -30
- package/bin/musubi-workflow.js +33 -34
- package/bin/musubi.js +39 -2
- package/package.json +1 -1
- package/src/agents/agent-loop.js +94 -95
- package/src/agents/agentic/code-generator.js +119 -109
- package/src/agents/agentic/code-reviewer.js +105 -108
- package/src/agents/agentic/index.js +4 -4
- package/src/agents/browser/action-executor.js +13 -13
- package/src/agents/browser/ai-comparator.js +11 -10
- package/src/agents/browser/context-manager.js +6 -6
- package/src/agents/browser/index.js +5 -5
- package/src/agents/browser/nl-parser.js +31 -46
- package/src/agents/browser/screenshot.js +2 -2
- package/src/agents/browser/test-generator.js +6 -4
- package/src/agents/function-tool.js +71 -65
- package/src/agents/index.js +7 -7
- package/src/agents/schema-generator.js +98 -94
- package/src/analyzers/ast-extractor.js +158 -146
- package/src/analyzers/codegraph-auto-update.js +858 -0
- package/src/analyzers/complexity-analyzer.js +536 -0
- package/src/analyzers/context-optimizer.js +241 -126
- package/src/analyzers/impact-analyzer.js +1 -1
- package/src/analyzers/large-project-analyzer.js +766 -0
- package/src/analyzers/repository-map.js +77 -81
- package/src/analyzers/security-analyzer.js +19 -11
- package/src/analyzers/stuck-detector.js +19 -17
- package/src/converters/index.js +78 -57
- package/src/converters/ir/types.js +12 -12
- package/src/converters/parsers/musubi-parser.js +134 -126
- package/src/converters/parsers/openapi-parser.js +70 -53
- package/src/converters/parsers/speckit-parser.js +239 -175
- package/src/converters/writers/musubi-writer.js +123 -118
- package/src/converters/writers/speckit-writer.js +124 -113
- package/src/generators/rust-migration-generator.js +512 -0
- package/src/gui/public/index.html +1365 -1211
- package/src/gui/server.js +41 -40
- package/src/gui/services/file-watcher.js +23 -8
- package/src/gui/services/project-scanner.js +26 -20
- package/src/gui/services/replanning-service.js +27 -23
- package/src/gui/services/traceability-service.js +8 -8
- package/src/gui/services/workflow-service.js +14 -7
- package/src/index.js +151 -0
- package/src/integrations/cicd.js +90 -104
- package/src/integrations/codegraph-mcp.js +643 -0
- package/src/integrations/documentation.js +142 -103
- package/src/integrations/examples.js +95 -80
- package/src/integrations/github-client.js +17 -17
- package/src/integrations/index.js +5 -5
- package/src/integrations/mcp/index.js +21 -21
- package/src/integrations/mcp/mcp-context-provider.js +76 -78
- package/src/integrations/mcp/mcp-discovery.js +74 -72
- package/src/integrations/mcp/mcp-tool-registry.js +99 -94
- package/src/integrations/mcp-connector.js +70 -66
- package/src/integrations/platforms.js +50 -49
- package/src/integrations/tool-discovery.js +37 -31
- package/src/llm-providers/anthropic-provider.js +11 -11
- package/src/llm-providers/base-provider.js +16 -18
- package/src/llm-providers/copilot-provider.js +22 -19
- package/src/llm-providers/index.js +26 -25
- package/src/llm-providers/ollama-provider.js +11 -11
- package/src/llm-providers/openai-provider.js +12 -12
- package/src/managers/agent-memory.js +36 -24
- package/src/managers/checkpoint-manager.js +4 -8
- package/src/managers/delta-spec.js +19 -19
- package/src/managers/index.js +13 -4
- package/src/managers/memory-condenser.js +35 -45
- package/src/managers/repo-skill-manager.js +57 -31
- package/src/managers/skill-loader.js +25 -22
- package/src/managers/skill-tools.js +36 -72
- package/src/managers/workflow.js +30 -22
- package/src/monitoring/cost-tracker.js +48 -46
- package/src/monitoring/incident-manager.js +116 -106
- package/src/monitoring/index.js +144 -134
- package/src/monitoring/observability.js +75 -62
- package/src/monitoring/quality-dashboard.js +45 -41
- package/src/monitoring/release-manager.js +63 -53
- package/src/orchestration/agent-skill-binding.js +39 -47
- package/src/orchestration/error-handler.js +65 -107
- package/src/orchestration/guardrails/base-guardrail.js +26 -24
- package/src/orchestration/guardrails/guardrail-rules.js +50 -64
- package/src/orchestration/guardrails/index.js +5 -5
- package/src/orchestration/guardrails/input-guardrail.js +58 -45
- package/src/orchestration/guardrails/output-guardrail.js +104 -81
- package/src/orchestration/guardrails/safety-check.js +79 -79
- package/src/orchestration/index.js +38 -55
- package/src/orchestration/mcp-tool-adapters.js +96 -99
- package/src/orchestration/orchestration-engine.js +21 -21
- package/src/orchestration/pattern-registry.js +60 -45
- package/src/orchestration/patterns/auto.js +34 -47
- package/src/orchestration/patterns/group-chat.js +59 -65
- package/src/orchestration/patterns/handoff.js +67 -65
- package/src/orchestration/patterns/human-in-loop.js +51 -72
- package/src/orchestration/patterns/nested.js +25 -40
- package/src/orchestration/patterns/sequential.js +35 -34
- package/src/orchestration/patterns/swarm.js +63 -56
- package/src/orchestration/patterns/triage.js +150 -109
- package/src/orchestration/reasoning/index.js +9 -9
- package/src/orchestration/reasoning/planning-engine.js +143 -140
- package/src/orchestration/reasoning/reasoning-engine.js +206 -144
- package/src/orchestration/reasoning/self-correction.js +121 -128
- package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
- package/src/orchestration/replanning/alternative-generator.js +37 -42
- package/src/orchestration/replanning/config.js +63 -59
- package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
- package/src/orchestration/replanning/index.js +24 -20
- package/src/orchestration/replanning/plan-evaluator.js +49 -50
- package/src/orchestration/replanning/plan-monitor.js +32 -28
- package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
- package/src/orchestration/replanning/replan-history.js +33 -26
- package/src/orchestration/replanning/replanning-engine.js +106 -108
- package/src/orchestration/skill-executor.js +107 -109
- package/src/orchestration/skill-registry.js +85 -89
- package/src/orchestration/workflow-examples.js +228 -231
- package/src/orchestration/workflow-executor.js +65 -68
- package/src/orchestration/workflow-orchestrator.js +72 -73
- package/src/phase4-integration.js +47 -40
- package/src/phase5-integration.js +89 -30
- package/src/reporters/coverage-report.js +82 -30
- package/src/reporters/hierarchical-reporter.js +498 -0
- package/src/reporters/traceability-matrix-report.js +29 -20
- package/src/resolvers/issue-resolver.js +43 -31
- package/src/steering/advanced-validation.js +133 -124
- package/src/steering/auto-updater.js +60 -73
- package/src/steering/index.js +6 -6
- package/src/steering/quality-metrics.js +41 -35
- package/src/steering/steering-auto-update.js +83 -86
- package/src/steering/steering-validator.js +98 -106
- package/src/steering/template-constraints.js +53 -54
- package/src/templates/agents/claude-code/CLAUDE.md +32 -32
- package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
- package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
- package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
- package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
- package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
- package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
- package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
- package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
- package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
- package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
- package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
- package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
- package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
- package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
- package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
- package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
- package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
- package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
- package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
- package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
- package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
- package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
- package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
- package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
- package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
- package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
- package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
- package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
- package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
- package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
- package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
- package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
- package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
- package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
- package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
- package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
- package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
- package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
- package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
- package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
- package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
- package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
- package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
- package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
- package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
- package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
- package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
- package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
- package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
- package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
- package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
- package/src/templates/agents/codex/AGENTS.md +74 -42
- package/src/templates/agents/cursor/AGENTS.md +74 -42
- package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
- package/src/templates/agents/github-copilot/AGENTS.md +83 -51
- package/src/templates/agents/qwen-code/QWEN.md +74 -42
- package/src/templates/agents/windsurf/AGENTS.md +74 -42
- package/src/templates/architectures/README.md +41 -0
- package/src/templates/architectures/clean-architecture/README.md +113 -0
- package/src/templates/architectures/event-driven/README.md +162 -0
- package/src/templates/architectures/hexagonal/README.md +130 -0
- package/src/templates/index.js +6 -1
- package/src/templates/locale-manager.js +16 -16
- package/src/templates/shared/delta-spec-template.md +20 -13
- package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
- package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
- package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
- package/src/templates/shared/steering/structure.md +95 -0
- package/src/templates/skills/browser-agent.md +21 -16
- package/src/templates/skills/web-gui.md +8 -0
- package/src/templates/template-constraints.js +50 -53
- package/src/validators/advanced-validation.js +30 -36
- package/src/validators/constitutional-validator.js +77 -73
- package/src/validators/critic-system.js +49 -59
- package/src/validators/delta-format.js +59 -55
- 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
|
+
};
|
package/src/integrations/cicd.js
CHANGED
|
@@ -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
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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
|
|
311
|
-
|
|
312
|
-
|
|
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
|
-
|
|
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
|
-
{
|
|
356
|
-
|
|
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
|
-
|
|
525
|
-
|
|
510
|
+
prepare: 'husky install',
|
|
511
|
+
lint: 'eslint src tests',
|
|
526
512
|
'lint:fix': 'eslint src tests --fix',
|
|
527
|
-
|
|
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(
|
|
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
|
};
|