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
|
@@ -17,7 +17,7 @@ const ProjectType = {
|
|
|
17
17
|
MICROSERVICE: 'microservice',
|
|
18
18
|
FULLSTACK: 'fullstack',
|
|
19
19
|
MOBILE: 'mobile',
|
|
20
|
-
DESKTOP: 'desktop'
|
|
20
|
+
DESKTOP: 'desktop',
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
const FrameworkPreset = {
|
|
@@ -29,7 +29,7 @@ const FrameworkPreset = {
|
|
|
29
29
|
FASTIFY: 'fastify',
|
|
30
30
|
NESTJS: 'nestjs',
|
|
31
31
|
ELECTRON: 'electron',
|
|
32
|
-
REACT_NATIVE: 'react-native'
|
|
32
|
+
REACT_NATIVE: 'react-native',
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
// ============================================================================
|
|
@@ -80,17 +80,17 @@ class ProjectTemplate {
|
|
|
80
80
|
test: 'jest',
|
|
81
81
|
lint: 'eslint src',
|
|
82
82
|
validate: 'npx musubi validate',
|
|
83
|
-
...this.scripts
|
|
83
|
+
...this.scripts,
|
|
84
84
|
},
|
|
85
85
|
dependencies: {
|
|
86
86
|
'musubi-sdd': '^3.0.0',
|
|
87
|
-
...this.dependencies
|
|
87
|
+
...this.dependencies,
|
|
88
88
|
},
|
|
89
89
|
devDependencies: {
|
|
90
90
|
jest: '^29.0.0',
|
|
91
91
|
eslint: '^8.0.0',
|
|
92
|
-
...this.devDependencies
|
|
93
|
-
}
|
|
92
|
+
...this.devDependencies,
|
|
93
|
+
},
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -266,7 +266,7 @@ Regular retrospectives and refinement.
|
|
|
266
266
|
framework: this.framework,
|
|
267
267
|
files: Array.from(this.files.keys()),
|
|
268
268
|
dependencies: this.dependencies,
|
|
269
|
-
devDependencies: this.devDependencies
|
|
269
|
+
devDependencies: this.devDependencies,
|
|
270
270
|
};
|
|
271
271
|
}
|
|
272
272
|
}
|
|
@@ -283,53 +283,67 @@ class ProjectCatalog {
|
|
|
283
283
|
|
|
284
284
|
registerDefaults() {
|
|
285
285
|
// Basic API Example
|
|
286
|
-
this.register(
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
286
|
+
this.register(
|
|
287
|
+
new ProjectTemplate({
|
|
288
|
+
id: 'musubi-api-example',
|
|
289
|
+
name: 'MUSUBI API Example',
|
|
290
|
+
description: 'A REST API example using MUSUBI SDD',
|
|
291
|
+
type: ProjectType.API_SERVER,
|
|
292
|
+
framework: FrameworkPreset.EXPRESS,
|
|
293
|
+
})
|
|
294
|
+
.addDependency('express', '^4.18.0')
|
|
295
|
+
.addScript('dev', 'nodemon src/index.js')
|
|
296
|
+
);
|
|
294
297
|
|
|
295
298
|
// CLI Tool Example
|
|
296
|
-
this.register(
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
299
|
+
this.register(
|
|
300
|
+
new ProjectTemplate({
|
|
301
|
+
id: 'musubi-cli-example',
|
|
302
|
+
name: 'MUSUBI CLI Example',
|
|
303
|
+
description: 'A CLI tool example using MUSUBI SDD',
|
|
304
|
+
type: ProjectType.CLI_TOOL,
|
|
305
|
+
})
|
|
306
|
+
.addDependency('commander', '^11.0.0')
|
|
307
|
+
.addDependency('chalk', '^5.0.0')
|
|
308
|
+
);
|
|
303
309
|
|
|
304
310
|
// Library Example
|
|
305
|
-
this.register(
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
+
this.register(
|
|
312
|
+
new ProjectTemplate({
|
|
313
|
+
id: 'musubi-lib-example',
|
|
314
|
+
name: 'MUSUBI Library Example',
|
|
315
|
+
description: 'A reusable library example using MUSUBI SDD',
|
|
316
|
+
type: ProjectType.LIBRARY,
|
|
317
|
+
}).addScript('build', 'npm run lint && npm test')
|
|
318
|
+
);
|
|
311
319
|
|
|
312
320
|
// Full-Stack Example
|
|
313
|
-
this.register(
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
321
|
+
this.register(
|
|
322
|
+
new ProjectTemplate({
|
|
323
|
+
id: 'musubi-fullstack-example',
|
|
324
|
+
name: 'MUSUBI Full-Stack Example',
|
|
325
|
+
description: 'A full-stack application using MUSUBI SDD',
|
|
326
|
+
type: ProjectType.FULLSTACK,
|
|
327
|
+
framework: FrameworkPreset.NEXTJS,
|
|
328
|
+
})
|
|
329
|
+
.addDependency('next', '^14.0.0')
|
|
330
|
+
.addDependency('react', '^18.0.0')
|
|
331
|
+
.addScript('dev', 'next dev')
|
|
332
|
+
.addScript('build', 'next build')
|
|
333
|
+
);
|
|
323
334
|
|
|
324
335
|
// Microservice Example
|
|
325
|
-
this.register(
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
336
|
+
this.register(
|
|
337
|
+
new ProjectTemplate({
|
|
338
|
+
id: 'musubi-microservice-example',
|
|
339
|
+
name: 'MUSUBI Microservice Example',
|
|
340
|
+
description: 'A microservice example using MUSUBI SDD',
|
|
341
|
+
type: ProjectType.MICROSERVICE,
|
|
342
|
+
framework: FrameworkPreset.FASTIFY,
|
|
343
|
+
})
|
|
344
|
+
.addDependency('fastify', '^4.0.0')
|
|
345
|
+
.addScript('dev', 'nodemon src/index.js')
|
|
346
|
+
);
|
|
333
347
|
}
|
|
334
348
|
|
|
335
349
|
register(template) {
|
|
@@ -347,18 +361,16 @@ class ProjectCatalog {
|
|
|
347
361
|
name: t.name,
|
|
348
362
|
description: t.description,
|
|
349
363
|
type: t.type,
|
|
350
|
-
framework: t.framework
|
|
364
|
+
framework: t.framework,
|
|
351
365
|
}));
|
|
352
366
|
}
|
|
353
367
|
|
|
354
368
|
byType(type) {
|
|
355
|
-
return Array.from(this.templates.values())
|
|
356
|
-
.filter(t => t.type === type);
|
|
369
|
+
return Array.from(this.templates.values()).filter(t => t.type === type);
|
|
357
370
|
}
|
|
358
371
|
|
|
359
372
|
byFramework(framework) {
|
|
360
|
-
return Array.from(this.templates.values())
|
|
361
|
-
.filter(t => t.framework === framework);
|
|
373
|
+
return Array.from(this.templates.values()).filter(t => t.framework === framework);
|
|
362
374
|
}
|
|
363
375
|
}
|
|
364
376
|
|
|
@@ -374,7 +386,7 @@ const LaunchCategory = {
|
|
|
374
386
|
SECURITY: 'security',
|
|
375
387
|
PERFORMANCE: 'performance',
|
|
376
388
|
ACCESSIBILITY: 'accessibility',
|
|
377
|
-
COMPLIANCE: 'compliance'
|
|
389
|
+
COMPLIANCE: 'compliance',
|
|
378
390
|
};
|
|
379
391
|
|
|
380
392
|
class LaunchChecklist {
|
|
@@ -391,14 +403,14 @@ class LaunchChecklist {
|
|
|
391
403
|
category: LaunchCategory.CODE_QUALITY,
|
|
392
404
|
title: 'ESLint passes with no errors',
|
|
393
405
|
command: 'npm run lint',
|
|
394
|
-
required: true
|
|
406
|
+
required: true,
|
|
395
407
|
});
|
|
396
408
|
|
|
397
409
|
this.addItem({
|
|
398
410
|
id: 'no-console',
|
|
399
411
|
category: LaunchCategory.CODE_QUALITY,
|
|
400
412
|
title: 'No console.log statements in production code',
|
|
401
|
-
required: false
|
|
413
|
+
required: false,
|
|
402
414
|
});
|
|
403
415
|
|
|
404
416
|
// Documentation
|
|
@@ -406,21 +418,21 @@ class LaunchChecklist {
|
|
|
406
418
|
id: 'readme-complete',
|
|
407
419
|
category: LaunchCategory.DOCUMENTATION,
|
|
408
420
|
title: 'README.md is complete and up-to-date',
|
|
409
|
-
required: true
|
|
421
|
+
required: true,
|
|
410
422
|
});
|
|
411
423
|
|
|
412
424
|
this.addItem({
|
|
413
425
|
id: 'agents-md',
|
|
414
426
|
category: LaunchCategory.DOCUMENTATION,
|
|
415
427
|
title: 'AGENTS.md exists and is configured',
|
|
416
|
-
required: true
|
|
428
|
+
required: true,
|
|
417
429
|
});
|
|
418
430
|
|
|
419
431
|
this.addItem({
|
|
420
432
|
id: 'api-docs',
|
|
421
433
|
category: LaunchCategory.DOCUMENTATION,
|
|
422
434
|
title: 'API documentation is generated',
|
|
423
|
-
required: false
|
|
435
|
+
required: false,
|
|
424
436
|
});
|
|
425
437
|
|
|
426
438
|
// Testing
|
|
@@ -429,14 +441,14 @@ class LaunchChecklist {
|
|
|
429
441
|
category: LaunchCategory.TESTING,
|
|
430
442
|
title: 'All tests pass',
|
|
431
443
|
command: 'npm test',
|
|
432
|
-
required: true
|
|
444
|
+
required: true,
|
|
433
445
|
});
|
|
434
446
|
|
|
435
447
|
this.addItem({
|
|
436
448
|
id: 'coverage-threshold',
|
|
437
449
|
category: LaunchCategory.TESTING,
|
|
438
450
|
title: 'Test coverage meets threshold (80%+)',
|
|
439
|
-
required: true
|
|
451
|
+
required: true,
|
|
440
452
|
});
|
|
441
453
|
|
|
442
454
|
// CI/CD
|
|
@@ -444,14 +456,14 @@ class LaunchChecklist {
|
|
|
444
456
|
id: 'ci-configured',
|
|
445
457
|
category: LaunchCategory.CI_CD,
|
|
446
458
|
title: 'CI pipeline is configured',
|
|
447
|
-
required: true
|
|
459
|
+
required: true,
|
|
448
460
|
});
|
|
449
461
|
|
|
450
462
|
this.addItem({
|
|
451
463
|
id: 'auto-deploy',
|
|
452
464
|
category: LaunchCategory.CI_CD,
|
|
453
465
|
title: 'Automatic deployment is set up',
|
|
454
|
-
required: false
|
|
466
|
+
required: false,
|
|
455
467
|
});
|
|
456
468
|
|
|
457
469
|
// Security
|
|
@@ -459,7 +471,7 @@ class LaunchChecklist {
|
|
|
459
471
|
id: 'no-secrets',
|
|
460
472
|
category: LaunchCategory.SECURITY,
|
|
461
473
|
title: 'No secrets in source code',
|
|
462
|
-
required: true
|
|
474
|
+
required: true,
|
|
463
475
|
});
|
|
464
476
|
|
|
465
477
|
this.addItem({
|
|
@@ -467,7 +479,7 @@ class LaunchChecklist {
|
|
|
467
479
|
category: LaunchCategory.SECURITY,
|
|
468
480
|
title: 'npm audit shows no critical vulnerabilities',
|
|
469
481
|
command: 'npm audit',
|
|
470
|
-
required: true
|
|
482
|
+
required: true,
|
|
471
483
|
});
|
|
472
484
|
|
|
473
485
|
// Compliance
|
|
@@ -476,21 +488,21 @@ class LaunchChecklist {
|
|
|
476
488
|
category: LaunchCategory.COMPLIANCE,
|
|
477
489
|
title: 'MUSUBI validation passes',
|
|
478
490
|
command: 'npx musubi validate',
|
|
479
|
-
required: true
|
|
491
|
+
required: true,
|
|
480
492
|
});
|
|
481
493
|
|
|
482
494
|
this.addItem({
|
|
483
495
|
id: 'constitution-compliance',
|
|
484
496
|
category: LaunchCategory.COMPLIANCE,
|
|
485
497
|
title: 'Constitution compliance score is A or B',
|
|
486
|
-
required: true
|
|
498
|
+
required: true,
|
|
487
499
|
});
|
|
488
500
|
}
|
|
489
501
|
|
|
490
502
|
addItem(item) {
|
|
491
503
|
this.items.push({
|
|
492
504
|
...item,
|
|
493
|
-
checked: false
|
|
505
|
+
checked: false,
|
|
494
506
|
});
|
|
495
507
|
return this;
|
|
496
508
|
}
|
|
@@ -523,7 +535,7 @@ class LaunchChecklist {
|
|
|
523
535
|
percentage: Math.round((checked / total) * 100),
|
|
524
536
|
required: required.length,
|
|
525
537
|
requiredChecked,
|
|
526
|
-
readyToLaunch: requiredChecked === required.length
|
|
538
|
+
readyToLaunch: requiredChecked === required.length,
|
|
527
539
|
};
|
|
528
540
|
}
|
|
529
541
|
|
|
@@ -541,17 +553,20 @@ class LaunchChecklist {
|
|
|
541
553
|
|
|
542
554
|
toMarkdown() {
|
|
543
555
|
let md = `# Launch Checklist: ${this.projectName}\n\n`;
|
|
544
|
-
|
|
556
|
+
|
|
545
557
|
const status = this.getStatus();
|
|
546
558
|
md += `**Progress:** ${status.checked}/${status.total} (${status.percentage}%)\n`;
|
|
547
559
|
md += `**Required:** ${status.requiredChecked}/${status.required}\n`;
|
|
548
560
|
md += `**Ready to Launch:** ${status.readyToLaunch ? '✅ Yes' : '❌ No'}\n\n`;
|
|
549
561
|
|
|
550
562
|
const categories = [...new Set(this.items.map(i => i.category))];
|
|
551
|
-
|
|
563
|
+
|
|
552
564
|
for (const category of categories) {
|
|
553
|
-
md += `## ${category
|
|
554
|
-
|
|
565
|
+
md += `## ${category
|
|
566
|
+
.split('-')
|
|
567
|
+
.map(w => w.charAt(0).toUpperCase() + w.slice(1))
|
|
568
|
+
.join(' ')}\n\n`;
|
|
569
|
+
|
|
555
570
|
for (const item of this.getByCategory(category)) {
|
|
556
571
|
const checkbox = item.checked ? '[x]' : '[ ]';
|
|
557
572
|
const required = item.required ? ' **(required)**' : '';
|
|
@@ -570,7 +585,7 @@ class LaunchChecklist {
|
|
|
570
585
|
return {
|
|
571
586
|
projectName: this.projectName,
|
|
572
587
|
status: this.getStatus(),
|
|
573
|
-
items: this.items
|
|
588
|
+
items: this.items,
|
|
574
589
|
};
|
|
575
590
|
}
|
|
576
591
|
}
|
|
@@ -590,7 +605,7 @@ class ReleaseManager extends EventEmitter {
|
|
|
590
605
|
|
|
591
606
|
bumpVersion(type = 'patch') {
|
|
592
607
|
const [major, minor, patch] = this.version.split('.').map(Number);
|
|
593
|
-
|
|
608
|
+
|
|
594
609
|
switch (type) {
|
|
595
610
|
case 'major':
|
|
596
611
|
this.version = `${major + 1}.0.0`;
|
|
@@ -729,9 +744,9 @@ class ReleaseManager extends EventEmitter {
|
|
|
729
744
|
valid: status.readyToLaunch,
|
|
730
745
|
progress: status.percentage,
|
|
731
746
|
blockers: uncheckedRequired.map(i => i.title),
|
|
732
|
-
message: status.readyToLaunch
|
|
733
|
-
? 'Ready for release!'
|
|
734
|
-
: `${uncheckedRequired.length} required items remaining
|
|
747
|
+
message: status.readyToLaunch
|
|
748
|
+
? 'Ready for release!'
|
|
749
|
+
: `${uncheckedRequired.length} required items remaining`,
|
|
735
750
|
};
|
|
736
751
|
}
|
|
737
752
|
|
|
@@ -740,7 +755,7 @@ class ReleaseManager extends EventEmitter {
|
|
|
740
755
|
version: this.version,
|
|
741
756
|
projectRoot: this.projectRoot,
|
|
742
757
|
checklist: this.checklist.toJSON(),
|
|
743
|
-
templates: this.catalog.list()
|
|
758
|
+
templates: this.catalog.list(),
|
|
744
759
|
};
|
|
745
760
|
}
|
|
746
761
|
}
|
|
@@ -774,16 +789,16 @@ module.exports = {
|
|
|
774
789
|
ProjectType,
|
|
775
790
|
FrameworkPreset,
|
|
776
791
|
LaunchCategory,
|
|
777
|
-
|
|
792
|
+
|
|
778
793
|
// Classes
|
|
779
794
|
ProjectTemplate,
|
|
780
795
|
ProjectCatalog,
|
|
781
796
|
LaunchChecklist,
|
|
782
797
|
ReleaseManager,
|
|
783
|
-
|
|
798
|
+
|
|
784
799
|
// Factories
|
|
785
800
|
createProjectTemplate,
|
|
786
801
|
createProjectCatalog,
|
|
787
802
|
createLaunchChecklist,
|
|
788
|
-
createReleaseManager
|
|
803
|
+
createReleaseManager,
|
|
789
804
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MUSUBI GitHub Client
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* GitHub API 統合クライアント
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
6
|
* @module src/integrations/github-client
|
|
7
7
|
* @see REQ-P0-B006
|
|
8
8
|
*/
|
|
@@ -23,11 +23,11 @@ class GitHubClient {
|
|
|
23
23
|
this.token = options.token || process.env.GITHUB_TOKEN;
|
|
24
24
|
this.owner = options.owner;
|
|
25
25
|
this.repo = options.repo;
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
if (!this.token) {
|
|
28
28
|
console.warn('GitHubClient: No GITHUB_TOKEN provided. API calls may fail.');
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
this.octokit = new Octokit({
|
|
32
32
|
auth: this.token,
|
|
33
33
|
});
|
|
@@ -35,7 +35,7 @@ class GitHubClient {
|
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* Issue を取得
|
|
38
|
-
* @param {number} issueNumber
|
|
38
|
+
* @param {number} issueNumber
|
|
39
39
|
* @returns {Promise<Object>}
|
|
40
40
|
*/
|
|
41
41
|
async getIssue(issueNumber) {
|
|
@@ -49,7 +49,7 @@ class GitHubClient {
|
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
51
|
* Issue のコメントを取得
|
|
52
|
-
* @param {number} issueNumber
|
|
52
|
+
* @param {number} issueNumber
|
|
53
53
|
* @returns {Promise<Object[]>}
|
|
54
54
|
*/
|
|
55
55
|
async getIssueComments(issueNumber) {
|
|
@@ -63,8 +63,8 @@ class GitHubClient {
|
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
65
|
* Issue にコメントを追加
|
|
66
|
-
* @param {number} issueNumber
|
|
67
|
-
* @param {string} body
|
|
66
|
+
* @param {number} issueNumber
|
|
67
|
+
* @param {string} body
|
|
68
68
|
* @returns {Promise<Object>}
|
|
69
69
|
*/
|
|
70
70
|
async addIssueComment(issueNumber, body) {
|
|
@@ -79,8 +79,8 @@ class GitHubClient {
|
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
81
|
* Issue にラベルを追加
|
|
82
|
-
* @param {number} issueNumber
|
|
83
|
-
* @param {string[]} labels
|
|
82
|
+
* @param {number} issueNumber
|
|
83
|
+
* @param {string[]} labels
|
|
84
84
|
* @returns {Promise<Object>}
|
|
85
85
|
*/
|
|
86
86
|
async addLabels(issueNumber, labels) {
|
|
@@ -95,7 +95,7 @@ class GitHubClient {
|
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
97
|
* ブランチを作成
|
|
98
|
-
* @param {string} branchName
|
|
98
|
+
* @param {string} branchName
|
|
99
99
|
* @param {string} baseBranch - ベースブランチ (default: 'main')
|
|
100
100
|
* @returns {Promise<Object>}
|
|
101
101
|
*/
|
|
@@ -128,7 +128,7 @@ class GitHubClient {
|
|
|
128
128
|
*/
|
|
129
129
|
async createOrUpdateFile(path, content, message, branch) {
|
|
130
130
|
let sha;
|
|
131
|
-
|
|
131
|
+
|
|
132
132
|
// 既存ファイルの SHA を取得(更新の場合に必要)
|
|
133
133
|
try {
|
|
134
134
|
const { data: existingFile } = await this.octokit.repos.getContent({
|
|
@@ -181,8 +181,8 @@ class GitHubClient {
|
|
|
181
181
|
|
|
182
182
|
/**
|
|
183
183
|
* PR にレビュアーを追加
|
|
184
|
-
* @param {number} pullNumber
|
|
185
|
-
* @param {string[]} reviewers
|
|
184
|
+
* @param {number} pullNumber
|
|
185
|
+
* @param {string[]} reviewers
|
|
186
186
|
* @returns {Promise<Object>}
|
|
187
187
|
*/
|
|
188
188
|
async addReviewers(pullNumber, reviewers) {
|
|
@@ -197,7 +197,7 @@ class GitHubClient {
|
|
|
197
197
|
|
|
198
198
|
/**
|
|
199
199
|
* Issue を Close
|
|
200
|
-
* @param {number} issueNumber
|
|
200
|
+
* @param {number} issueNumber
|
|
201
201
|
* @returns {Promise<Object>}
|
|
202
202
|
*/
|
|
203
203
|
async closeIssue(issueNumber) {
|
|
@@ -261,7 +261,7 @@ class GitHubClient {
|
|
|
261
261
|
|
|
262
262
|
/**
|
|
263
263
|
* URL からリポジトリ情報を抽出
|
|
264
|
-
* @param {string} url
|
|
264
|
+
* @param {string} url
|
|
265
265
|
* @returns {Object|null}
|
|
266
266
|
*/
|
|
267
267
|
function parseGitHubUrl(url) {
|
|
@@ -277,7 +277,7 @@ function parseGitHubUrl(url) {
|
|
|
277
277
|
|
|
278
278
|
/**
|
|
279
279
|
* Issue URL から番号を抽出
|
|
280
|
-
* @param {string} url
|
|
280
|
+
* @param {string} url
|
|
281
281
|
* @returns {number|null}
|
|
282
282
|
*/
|
|
283
283
|
function parseIssueNumber(url) {
|
|
@@ -13,17 +13,17 @@ const toolDiscovery = require('./tool-discovery');
|
|
|
13
13
|
module.exports = {
|
|
14
14
|
// Multi-Platform Support
|
|
15
15
|
...platforms,
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
// CI/CD Integration
|
|
18
18
|
...cicd,
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
// Documentation Generator
|
|
21
21
|
...documentation,
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
// Example Projects & Launch
|
|
24
24
|
...examples,
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
// MCP Integration (Sprint 3.4)
|
|
27
27
|
...mcpConnector,
|
|
28
|
-
...toolDiscovery
|
|
28
|
+
...toolDiscovery,
|
|
29
29
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MUSUBI MCP Integration
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Unified exports for MCP (Model Context Protocol) integration.
|
|
5
5
|
* Provides discovery, tool registration, and context management.
|
|
6
|
-
*
|
|
6
|
+
*
|
|
7
7
|
* @module integrations/mcp
|
|
8
8
|
*/
|
|
9
9
|
|
|
@@ -57,13 +57,13 @@ function createMCPIntegration(options = {}) {
|
|
|
57
57
|
const discovery = createMCPDiscovery(options.discovery);
|
|
58
58
|
const registry = createMCPToolRegistry(options.registry);
|
|
59
59
|
const context = new MCPContextProvider(options.context);
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
// Set connector if provided
|
|
62
62
|
if (options.connector) {
|
|
63
63
|
registry.setConnector(options.connector);
|
|
64
64
|
context.setConnector(options.connector);
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
// Wire up discovery to registry
|
|
68
68
|
discovery.on('server:discovered', async ({ server }) => {
|
|
69
69
|
try {
|
|
@@ -74,12 +74,12 @@ function createMCPIntegration(options = {}) {
|
|
|
74
74
|
// Silently handle - server might not be running
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
return {
|
|
79
79
|
discovery,
|
|
80
80
|
registry,
|
|
81
81
|
context,
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
/**
|
|
84
84
|
* Initialize the MCP integration
|
|
85
85
|
* @param {Object} [initOptions]
|
|
@@ -89,18 +89,18 @@ function createMCPIntegration(options = {}) {
|
|
|
89
89
|
async initialize(initOptions = {}) {
|
|
90
90
|
const autoDiscover = initOptions.autoDiscover ?? true;
|
|
91
91
|
const watchChanges = initOptions.watchChanges ?? false;
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
if (autoDiscover) {
|
|
94
94
|
await discovery.discover();
|
|
95
95
|
}
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
if (watchChanges && discovery.watch) {
|
|
98
98
|
discovery.watch();
|
|
99
99
|
}
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
return this.getStatus();
|
|
102
102
|
},
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
/**
|
|
105
105
|
* Get all tools from the registry
|
|
106
106
|
* @returns {Object[]}
|
|
@@ -108,7 +108,7 @@ function createMCPIntegration(options = {}) {
|
|
|
108
108
|
getTools() {
|
|
109
109
|
return registry.getAllTools();
|
|
110
110
|
},
|
|
111
|
-
|
|
111
|
+
|
|
112
112
|
/**
|
|
113
113
|
* Get tool definitions in Agent Loop format
|
|
114
114
|
* @returns {Object[]}
|
|
@@ -117,10 +117,10 @@ function createMCPIntegration(options = {}) {
|
|
|
117
117
|
return registry.getAllTools().map(tool => ({
|
|
118
118
|
name: tool.name,
|
|
119
119
|
description: tool.description,
|
|
120
|
-
inputSchema: tool.inputSchema
|
|
120
|
+
inputSchema: tool.inputSchema,
|
|
121
121
|
}));
|
|
122
122
|
},
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
/**
|
|
125
125
|
* Build context for a request
|
|
126
126
|
* @param {Object} contextOptions
|
|
@@ -129,7 +129,7 @@ function createMCPIntegration(options = {}) {
|
|
|
129
129
|
async buildContext(contextOptions) {
|
|
130
130
|
return context.buildContext(contextOptions);
|
|
131
131
|
},
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
/**
|
|
134
134
|
* Get integration status
|
|
135
135
|
* @returns {Object}
|
|
@@ -138,10 +138,10 @@ function createMCPIntegration(options = {}) {
|
|
|
138
138
|
return {
|
|
139
139
|
discovery: discovery.getSummary(),
|
|
140
140
|
registry: registry.getStats(),
|
|
141
|
-
context: context.getStats()
|
|
141
|
+
context: context.getStats(),
|
|
142
142
|
};
|
|
143
143
|
},
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
/**
|
|
146
146
|
* Clean up resources
|
|
147
147
|
*/
|
|
@@ -151,7 +151,7 @@ function createMCPIntegration(options = {}) {
|
|
|
151
151
|
}
|
|
152
152
|
registry.clear();
|
|
153
153
|
context.clear();
|
|
154
|
-
}
|
|
154
|
+
},
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
157
|
|
|
@@ -161,15 +161,15 @@ module.exports = {
|
|
|
161
161
|
createMCPDiscovery,
|
|
162
162
|
discoverMCPServers,
|
|
163
163
|
CONFIG_LOCATIONS,
|
|
164
|
-
|
|
164
|
+
|
|
165
165
|
// Tool Registry
|
|
166
166
|
MCPToolRegistry,
|
|
167
167
|
createMCPToolRegistry,
|
|
168
|
-
|
|
168
|
+
|
|
169
169
|
// Context Provider
|
|
170
170
|
MCPContextProvider,
|
|
171
171
|
createMCPContextProvider,
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
// Integration
|
|
174
|
-
createMCPIntegration
|
|
174
|
+
createMCPIntegration,
|
|
175
175
|
};
|