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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Multi-Platform Support Module
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Provides universal support for 13+ AI coding assistants:
|
|
5
5
|
* - Claude Code (CLAUDE.md)
|
|
6
6
|
* - GitHub Copilot (.github/copilot/)
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - OpenCode, Amp, Kilo Code, RooCode (AGENTS.md convention)
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
const
|
|
13
|
+
const _path = require('path');
|
|
14
14
|
const { EventEmitter } = require('events');
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -29,7 +29,7 @@ const Platform = {
|
|
|
29
29
|
CODEX: 'codex',
|
|
30
30
|
AIDER: 'aider',
|
|
31
31
|
CONTINUE: 'continue',
|
|
32
|
-
GENERIC: 'generic'
|
|
32
|
+
GENERIC: 'generic',
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -42,7 +42,7 @@ const PlatformConfig = {
|
|
|
42
42
|
directories: [],
|
|
43
43
|
format: 'markdown',
|
|
44
44
|
supportsSkills: true,
|
|
45
|
-
supportsMemory: true
|
|
45
|
+
supportsMemory: true,
|
|
46
46
|
},
|
|
47
47
|
[Platform.GITHUB_COPILOT]: {
|
|
48
48
|
name: 'GitHub Copilot',
|
|
@@ -50,7 +50,7 @@ const PlatformConfig = {
|
|
|
50
50
|
directories: ['.github/copilot/'],
|
|
51
51
|
format: 'markdown',
|
|
52
52
|
supportsSkills: true,
|
|
53
|
-
supportsMemory: true
|
|
53
|
+
supportsMemory: true,
|
|
54
54
|
},
|
|
55
55
|
[Platform.CURSOR]: {
|
|
56
56
|
name: 'Cursor',
|
|
@@ -58,7 +58,7 @@ const PlatformConfig = {
|
|
|
58
58
|
directories: ['.cursor/rules/'],
|
|
59
59
|
format: 'markdown',
|
|
60
60
|
supportsSkills: true,
|
|
61
|
-
supportsMemory: true
|
|
61
|
+
supportsMemory: true,
|
|
62
62
|
},
|
|
63
63
|
[Platform.WINDSURF]: {
|
|
64
64
|
name: 'Windsurf',
|
|
@@ -66,7 +66,7 @@ const PlatformConfig = {
|
|
|
66
66
|
directories: ['.windsurf/workflows/'],
|
|
67
67
|
format: 'markdown',
|
|
68
68
|
supportsSkills: true,
|
|
69
|
-
supportsMemory: false
|
|
69
|
+
supportsMemory: false,
|
|
70
70
|
},
|
|
71
71
|
[Platform.CLINE]: {
|
|
72
72
|
name: 'Cline',
|
|
@@ -74,7 +74,7 @@ const PlatformConfig = {
|
|
|
74
74
|
directories: ['.cline/'],
|
|
75
75
|
format: 'markdown',
|
|
76
76
|
supportsSkills: true,
|
|
77
|
-
supportsMemory: true
|
|
77
|
+
supportsMemory: true,
|
|
78
78
|
},
|
|
79
79
|
[Platform.OPENCODE]: {
|
|
80
80
|
name: 'OpenCode',
|
|
@@ -82,7 +82,7 @@ const PlatformConfig = {
|
|
|
82
82
|
directories: [],
|
|
83
83
|
format: 'markdown',
|
|
84
84
|
supportsSkills: true,
|
|
85
|
-
supportsMemory: false
|
|
85
|
+
supportsMemory: false,
|
|
86
86
|
},
|
|
87
87
|
[Platform.AMP]: {
|
|
88
88
|
name: 'Amp',
|
|
@@ -90,7 +90,7 @@ const PlatformConfig = {
|
|
|
90
90
|
directories: [],
|
|
91
91
|
format: 'markdown',
|
|
92
92
|
supportsSkills: true,
|
|
93
|
-
supportsMemory: false
|
|
93
|
+
supportsMemory: false,
|
|
94
94
|
},
|
|
95
95
|
[Platform.KILO_CODE]: {
|
|
96
96
|
name: 'Kilo Code',
|
|
@@ -98,7 +98,7 @@ const PlatformConfig = {
|
|
|
98
98
|
directories: [],
|
|
99
99
|
format: 'markdown',
|
|
100
100
|
supportsSkills: true,
|
|
101
|
-
supportsMemory: false
|
|
101
|
+
supportsMemory: false,
|
|
102
102
|
},
|
|
103
103
|
[Platform.ROO_CODE]: {
|
|
104
104
|
name: 'Roo Code',
|
|
@@ -106,7 +106,7 @@ const PlatformConfig = {
|
|
|
106
106
|
directories: ['.roo/'],
|
|
107
107
|
format: 'markdown',
|
|
108
108
|
supportsSkills: true,
|
|
109
|
-
supportsMemory: true
|
|
109
|
+
supportsMemory: true,
|
|
110
110
|
},
|
|
111
111
|
[Platform.CODEX]: {
|
|
112
112
|
name: 'Codex CLI',
|
|
@@ -114,7 +114,7 @@ const PlatformConfig = {
|
|
|
114
114
|
directories: [],
|
|
115
115
|
format: 'markdown',
|
|
116
116
|
supportsSkills: true,
|
|
117
|
-
supportsMemory: false
|
|
117
|
+
supportsMemory: false,
|
|
118
118
|
},
|
|
119
119
|
[Platform.AIDER]: {
|
|
120
120
|
name: 'Aider',
|
|
@@ -122,7 +122,7 @@ const PlatformConfig = {
|
|
|
122
122
|
directories: [],
|
|
123
123
|
format: 'yaml',
|
|
124
124
|
supportsSkills: false,
|
|
125
|
-
supportsMemory: false
|
|
125
|
+
supportsMemory: false,
|
|
126
126
|
},
|
|
127
127
|
[Platform.CONTINUE]: {
|
|
128
128
|
name: 'Continue',
|
|
@@ -130,7 +130,7 @@ const PlatformConfig = {
|
|
|
130
130
|
directories: ['.continue/'],
|
|
131
131
|
format: 'json',
|
|
132
132
|
supportsSkills: true,
|
|
133
|
-
supportsMemory: false
|
|
133
|
+
supportsMemory: false,
|
|
134
134
|
},
|
|
135
135
|
[Platform.GENERIC]: {
|
|
136
136
|
name: 'Generic (AGENTS.md)',
|
|
@@ -138,8 +138,8 @@ const PlatformConfig = {
|
|
|
138
138
|
directories: ['steering/'],
|
|
139
139
|
format: 'markdown',
|
|
140
140
|
supportsSkills: true,
|
|
141
|
-
supportsMemory: true
|
|
142
|
-
}
|
|
141
|
+
supportsMemory: true,
|
|
142
|
+
},
|
|
143
143
|
};
|
|
144
144
|
|
|
145
145
|
/**
|
|
@@ -273,7 +273,7 @@ class PlatformAdapter {
|
|
|
273
273
|
*/
|
|
274
274
|
toMarkdown(content) {
|
|
275
275
|
const lines = [];
|
|
276
|
-
|
|
276
|
+
|
|
277
277
|
if (content.title) {
|
|
278
278
|
lines.push(`# ${content.title}`);
|
|
279
279
|
lines.push('');
|
|
@@ -318,14 +318,14 @@ class PlatformAdapter {
|
|
|
318
318
|
*/
|
|
319
319
|
toYaml(content) {
|
|
320
320
|
const lines = [];
|
|
321
|
-
|
|
321
|
+
|
|
322
322
|
if (content.title) {
|
|
323
323
|
lines.push(`# ${content.title}`);
|
|
324
324
|
}
|
|
325
325
|
|
|
326
326
|
for (const [key, value] of Object.entries(content)) {
|
|
327
327
|
if (key === 'title') continue;
|
|
328
|
-
|
|
328
|
+
|
|
329
329
|
if (Array.isArray(value)) {
|
|
330
330
|
lines.push(`${key}:`);
|
|
331
331
|
for (const item of value) {
|
|
@@ -379,7 +379,7 @@ class PlatformAdapter {
|
|
|
379
379
|
'- `#sdd-tasks <feature>` - Break down into tasks',
|
|
380
380
|
'- `#sdd-implement <feature>` - Execute implementation',
|
|
381
381
|
'- `#sdd-validate <feature>` - Validate constitutional compliance',
|
|
382
|
-
''
|
|
382
|
+
'',
|
|
383
383
|
];
|
|
384
384
|
|
|
385
385
|
return lines.join('\n');
|
|
@@ -400,29 +400,29 @@ class SkillConverter {
|
|
|
400
400
|
*/
|
|
401
401
|
registerDefaultConverters() {
|
|
402
402
|
// Claude to Copilot
|
|
403
|
-
this.register(Platform.CLAUDE_CODE, Platform.GITHUB_COPILOT,
|
|
403
|
+
this.register(Platform.CLAUDE_CODE, Platform.GITHUB_COPILOT, skill => {
|
|
404
404
|
return {
|
|
405
405
|
...skill,
|
|
406
406
|
format: 'copilot-instruction',
|
|
407
|
-
file: `.github/copilot/${skill.name}.md
|
|
407
|
+
file: `.github/copilot/${skill.name}.md`,
|
|
408
408
|
};
|
|
409
409
|
});
|
|
410
410
|
|
|
411
411
|
// Claude to Cursor
|
|
412
|
-
this.register(Platform.CLAUDE_CODE, Platform.CURSOR,
|
|
412
|
+
this.register(Platform.CLAUDE_CODE, Platform.CURSOR, skill => {
|
|
413
413
|
return {
|
|
414
414
|
...skill,
|
|
415
415
|
format: 'cursor-rule',
|
|
416
|
-
file: `.cursor/rules/${skill.name}.mdc
|
|
416
|
+
file: `.cursor/rules/${skill.name}.mdc`,
|
|
417
417
|
};
|
|
418
418
|
});
|
|
419
419
|
|
|
420
420
|
// Copilot to Claude
|
|
421
|
-
this.register(Platform.GITHUB_COPILOT, Platform.CLAUDE_CODE,
|
|
421
|
+
this.register(Platform.GITHUB_COPILOT, Platform.CLAUDE_CODE, skill => {
|
|
422
422
|
return {
|
|
423
423
|
...skill,
|
|
424
424
|
format: 'claude-skill',
|
|
425
|
-
file: `steering/skills/${skill.name}.md
|
|
425
|
+
file: `steering/skills/${skill.name}.md`,
|
|
426
426
|
};
|
|
427
427
|
});
|
|
428
428
|
}
|
|
@@ -448,14 +448,14 @@ class SkillConverter {
|
|
|
448
448
|
convert(skill, from, to) {
|
|
449
449
|
const key = `${from}:${to}`;
|
|
450
450
|
const converter = this.converters.get(key);
|
|
451
|
-
|
|
451
|
+
|
|
452
452
|
if (!converter) {
|
|
453
453
|
// Generic conversion
|
|
454
454
|
return {
|
|
455
455
|
...skill,
|
|
456
456
|
format: 'generic',
|
|
457
457
|
originalPlatform: from,
|
|
458
|
-
targetPlatform: to
|
|
458
|
+
targetPlatform: to,
|
|
459
459
|
};
|
|
460
460
|
}
|
|
461
461
|
|
|
@@ -517,7 +517,7 @@ class MemorySynchronizer {
|
|
|
517
517
|
const content = adapter.adaptContent(source);
|
|
518
518
|
results.set(targetId, {
|
|
519
519
|
file: adapter.primaryFile,
|
|
520
|
-
content
|
|
520
|
+
content,
|
|
521
521
|
});
|
|
522
522
|
}
|
|
523
523
|
|
|
@@ -530,7 +530,7 @@ class MemorySynchronizer {
|
|
|
530
530
|
getSyncPlan() {
|
|
531
531
|
const plan = [];
|
|
532
532
|
|
|
533
|
-
for (const [sourceId,
|
|
533
|
+
for (const [sourceId, _source] of this.sources) {
|
|
534
534
|
for (const [targetId, adapter] of this.targets) {
|
|
535
535
|
if (sourceId === targetId) continue;
|
|
536
536
|
if (!adapter.supportsMemory) continue;
|
|
@@ -538,7 +538,7 @@ class MemorySynchronizer {
|
|
|
538
538
|
plan.push({
|
|
539
539
|
from: sourceId,
|
|
540
540
|
to: targetId,
|
|
541
|
-
targetFile: adapter.primaryFile
|
|
541
|
+
targetFile: adapter.primaryFile,
|
|
542
542
|
});
|
|
543
543
|
}
|
|
544
544
|
}
|
|
@@ -577,7 +577,7 @@ class UniversalInitializer {
|
|
|
577
577
|
for (const platformId of this.platforms) {
|
|
578
578
|
const adapter = new PlatformAdapter(platformId);
|
|
579
579
|
const platformFiles = this.generatePlatformFiles(adapter);
|
|
580
|
-
|
|
580
|
+
|
|
581
581
|
for (const [path, content] of platformFiles) {
|
|
582
582
|
files.set(path, content);
|
|
583
583
|
}
|
|
@@ -749,19 +749,19 @@ The constitution SHALL be reviewed and improved regularly.
|
|
|
749
749
|
case Platform.CLAUDE_CODE:
|
|
750
750
|
files.set('CLAUDE.md', adapter.generateAgentsReference());
|
|
751
751
|
break;
|
|
752
|
-
|
|
752
|
+
|
|
753
753
|
case Platform.GITHUB_COPILOT:
|
|
754
754
|
files.set('.github/copilot-instructions.md', adapter.generateAgentsReference());
|
|
755
755
|
break;
|
|
756
|
-
|
|
756
|
+
|
|
757
757
|
case Platform.CURSOR:
|
|
758
758
|
files.set('.cursorrules', adapter.generateAgentsReference());
|
|
759
759
|
break;
|
|
760
|
-
|
|
760
|
+
|
|
761
761
|
case Platform.WINDSURF:
|
|
762
762
|
files.set('.windsurfrules', adapter.generateAgentsReference());
|
|
763
763
|
break;
|
|
764
|
-
|
|
764
|
+
|
|
765
765
|
case Platform.CLINE:
|
|
766
766
|
files.set('.clinerules', adapter.generateAgentsReference());
|
|
767
767
|
break;
|
|
@@ -790,7 +790,7 @@ class PlatformManager extends EventEmitter {
|
|
|
790
790
|
*/
|
|
791
791
|
initialize(files) {
|
|
792
792
|
const platforms = this.detector.detect(files);
|
|
793
|
-
|
|
793
|
+
|
|
794
794
|
for (const platformId of platforms) {
|
|
795
795
|
const adapter = new PlatformAdapter(platformId);
|
|
796
796
|
this.adapters.set(platformId, adapter);
|
|
@@ -831,14 +831,14 @@ class PlatformManager extends EventEmitter {
|
|
|
831
831
|
*/
|
|
832
832
|
syncSteering(sourceId, memory) {
|
|
833
833
|
this.synchronizer.registerSource(sourceId, memory);
|
|
834
|
-
|
|
834
|
+
|
|
835
835
|
for (const [platformId, adapter] of this.adapters) {
|
|
836
836
|
this.synchronizer.registerTarget(platformId, adapter);
|
|
837
837
|
}
|
|
838
838
|
|
|
839
839
|
const results = this.synchronizer.sync(sourceId);
|
|
840
840
|
this.emit('synced', { source: sourceId, targets: [...results.keys()] });
|
|
841
|
-
|
|
841
|
+
|
|
842
842
|
return results;
|
|
843
843
|
}
|
|
844
844
|
|
|
@@ -850,9 +850,10 @@ class PlatformManager extends EventEmitter {
|
|
|
850
850
|
generateInitFiles(options = {}) {
|
|
851
851
|
const initializer = new UniversalInitializer({
|
|
852
852
|
...options,
|
|
853
|
-
platforms:
|
|
854
|
-
|
|
855
|
-
|
|
853
|
+
platforms:
|
|
854
|
+
this.detector.detectedPlatforms.length > 0
|
|
855
|
+
? this.detector.detectedPlatforms
|
|
856
|
+
: [Platform.GENERIC],
|
|
856
857
|
});
|
|
857
858
|
|
|
858
859
|
return initializer.generate();
|
|
@@ -865,7 +866,7 @@ class PlatformManager extends EventEmitter {
|
|
|
865
866
|
const report = {
|
|
866
867
|
detected: [],
|
|
867
868
|
supported: [],
|
|
868
|
-
features: {}
|
|
869
|
+
features: {},
|
|
869
870
|
};
|
|
870
871
|
|
|
871
872
|
for (const [platformId, config] of Object.entries(PlatformConfig)) {
|
|
@@ -873,7 +874,7 @@ class PlatformManager extends EventEmitter {
|
|
|
873
874
|
id: platformId,
|
|
874
875
|
name: config.name,
|
|
875
876
|
supportsSkills: config.supportsSkills,
|
|
876
|
-
supportsMemory: config.supportsMemory
|
|
877
|
+
supportsMemory: config.supportsMemory,
|
|
877
878
|
});
|
|
878
879
|
}
|
|
879
880
|
|
|
@@ -881,7 +882,7 @@ class PlatformManager extends EventEmitter {
|
|
|
881
882
|
const config = PlatformConfig[platformId];
|
|
882
883
|
report.detected.push({
|
|
883
884
|
id: platformId,
|
|
884
|
-
name: config.name
|
|
885
|
+
name: config.name,
|
|
885
886
|
});
|
|
886
887
|
}
|
|
887
888
|
|
|
@@ -889,7 +890,7 @@ class PlatformManager extends EventEmitter {
|
|
|
889
890
|
totalPlatforms: Object.keys(PlatformConfig).length,
|
|
890
891
|
detectedCount: this.detector.detectedPlatforms.length,
|
|
891
892
|
skillSupport: report.supported.filter(p => p.supportsSkills).length,
|
|
892
|
-
memorySupport: report.supported.filter(p => p.supportsMemory).length
|
|
893
|
+
memorySupport: report.supported.filter(p => p.supportsMemory).length,
|
|
893
894
|
};
|
|
894
895
|
|
|
895
896
|
return report;
|
|
@@ -902,7 +903,7 @@ class PlatformManager extends EventEmitter {
|
|
|
902
903
|
return {
|
|
903
904
|
detectedPlatforms: this.detector.detectedPlatforms,
|
|
904
905
|
adapters: [...this.adapters.keys()],
|
|
905
|
-
projectRoot: this.projectRoot
|
|
906
|
+
projectRoot: this.projectRoot,
|
|
906
907
|
};
|
|
907
908
|
}
|
|
908
909
|
}
|
|
@@ -925,5 +926,5 @@ module.exports = {
|
|
|
925
926
|
MemorySynchronizer,
|
|
926
927
|
UniversalInitializer,
|
|
927
928
|
PlatformManager,
|
|
928
|
-
createPlatformManager
|
|
929
|
+
createPlatformManager,
|
|
929
930
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @fileoverview Tool Discovery Service
|
|
3
3
|
* @description Dynamic MCP tool detection and management
|
|
4
4
|
* @version 3.11.0
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
6
|
* Features:
|
|
7
7
|
* - Automatic tool discovery from MCP servers
|
|
8
8
|
* - Tool categorization and tagging
|
|
@@ -31,7 +31,7 @@ const ToolCategory = {
|
|
|
31
31
|
API: 'api',
|
|
32
32
|
AI: 'ai',
|
|
33
33
|
UTILITY: 'utility',
|
|
34
|
-
UNKNOWN: 'unknown'
|
|
34
|
+
UNKNOWN: 'unknown',
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -42,7 +42,7 @@ const CapabilityScore = {
|
|
|
42
42
|
HIGH_MATCH: 0.8,
|
|
43
43
|
MEDIUM_MATCH: 0.6,
|
|
44
44
|
LOW_MATCH: 0.4,
|
|
45
|
-
NO_MATCH: 0.0
|
|
45
|
+
NO_MATCH: 0.0,
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
/**
|
|
@@ -60,7 +60,7 @@ const CATEGORY_KEYWORDS = {
|
|
|
60
60
|
[ToolCategory.DATABASE]: ['database', 'db', 'sql', 'query', 'migrate', 'schema'],
|
|
61
61
|
[ToolCategory.API]: ['api', 'rest', 'http', 'request', 'endpoint', 'graphql'],
|
|
62
62
|
[ToolCategory.AI]: ['ai', 'ml', 'llm', 'generate', 'embed', 'inference', 'model'],
|
|
63
|
-
[ToolCategory.UTILITY]: ['util', 'helper', 'convert', 'format', 'validate', 'transform']
|
|
63
|
+
[ToolCategory.UTILITY]: ['util', 'helper', 'convert', 'format', 'validate', 'transform'],
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
/**
|
|
@@ -90,13 +90,13 @@ class DiscoveredTool {
|
|
|
90
90
|
recordUsage(latency, success = true) {
|
|
91
91
|
this.usageCount++;
|
|
92
92
|
this.lastUsed = new Date();
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
// Update running average latency
|
|
95
95
|
this.averageLatency = (this.averageLatency * (this.usageCount - 1) + latency) / this.usageCount;
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
// Update error rate
|
|
98
98
|
if (!success) {
|
|
99
|
-
this.errorRate = (
|
|
99
|
+
this.errorRate = (this.errorRate * (this.usageCount - 1) + 1) / this.usageCount;
|
|
100
100
|
} else {
|
|
101
101
|
this.errorRate = (this.errorRate * (this.usageCount - 1)) / this.usageCount;
|
|
102
102
|
}
|
|
@@ -123,7 +123,7 @@ class DiscoveredTool {
|
|
|
123
123
|
lastUsed: this.lastUsed,
|
|
124
124
|
averageLatency: this.averageLatency,
|
|
125
125
|
reliability: this.getReliabilityScore(),
|
|
126
|
-
discoveredAt: this.discoveredAt
|
|
126
|
+
discoveredAt: this.discoveredAt,
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
129
|
}
|
|
@@ -138,9 +138,9 @@ class ToolDiscovery extends EventEmitter {
|
|
|
138
138
|
autoDiscovery: true,
|
|
139
139
|
refreshInterval: 300000, // 5 minutes
|
|
140
140
|
enableAnalytics: true,
|
|
141
|
-
...options
|
|
141
|
+
...options,
|
|
142
142
|
};
|
|
143
|
-
|
|
143
|
+
|
|
144
144
|
this.tools = new Map();
|
|
145
145
|
this.toolsByCategory = new Map();
|
|
146
146
|
this.toolsByServer = new Map();
|
|
@@ -180,12 +180,12 @@ class ToolDiscovery extends EventEmitter {
|
|
|
180
180
|
const discovered = new DiscoveredTool(tool, {
|
|
181
181
|
category,
|
|
182
182
|
tags,
|
|
183
|
-
capabilities
|
|
183
|
+
capabilities,
|
|
184
184
|
});
|
|
185
185
|
|
|
186
186
|
// Index the tool
|
|
187
187
|
this.tools.set(tool.name, discovered);
|
|
188
|
-
|
|
188
|
+
|
|
189
189
|
// Index by category
|
|
190
190
|
if (!this.toolsByCategory.has(category)) {
|
|
191
191
|
this.toolsByCategory.set(category, new Set());
|
|
@@ -208,7 +208,7 @@ class ToolDiscovery extends EventEmitter {
|
|
|
208
208
|
*/
|
|
209
209
|
_detectCategory(tool) {
|
|
210
210
|
const text = `${tool.name} ${tool.description}`.toLowerCase();
|
|
211
|
-
|
|
211
|
+
|
|
212
212
|
let bestCategory = ToolCategory.UNKNOWN;
|
|
213
213
|
let bestScore = 0;
|
|
214
214
|
|
|
@@ -245,7 +245,17 @@ class ToolDiscovery extends EventEmitter {
|
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
// Extract common action verbs
|
|
248
|
-
const actionVerbs = [
|
|
248
|
+
const actionVerbs = [
|
|
249
|
+
'read',
|
|
250
|
+
'write',
|
|
251
|
+
'create',
|
|
252
|
+
'update',
|
|
253
|
+
'delete',
|
|
254
|
+
'list',
|
|
255
|
+
'search',
|
|
256
|
+
'analyze',
|
|
257
|
+
'generate',
|
|
258
|
+
];
|
|
249
259
|
for (const verb of actionVerbs) {
|
|
250
260
|
if (text.includes(verb)) {
|
|
251
261
|
tags.add(verb);
|
|
@@ -272,7 +282,7 @@ class ToolDiscovery extends EventEmitter {
|
|
|
272
282
|
// Analyze input parameters
|
|
273
283
|
if (schema.properties) {
|
|
274
284
|
const propNames = Object.keys(schema.properties);
|
|
275
|
-
|
|
285
|
+
|
|
276
286
|
if (propNames.some(p => p.includes('file') || p.includes('path'))) {
|
|
277
287
|
capabilities.push('file-operations');
|
|
278
288
|
}
|
|
@@ -325,14 +335,12 @@ class ToolDiscovery extends EventEmitter {
|
|
|
325
335
|
|
|
326
336
|
// Filter by tags
|
|
327
337
|
if (criteria.tags && criteria.tags.length > 0) {
|
|
328
|
-
results = results.filter(t =>
|
|
329
|
-
criteria.tags.some(tag => t.tags.includes(tag))
|
|
330
|
-
);
|
|
338
|
+
results = results.filter(t => criteria.tags.some(tag => t.tags.includes(tag)));
|
|
331
339
|
}
|
|
332
340
|
|
|
333
341
|
// Filter by capabilities
|
|
334
342
|
if (criteria.capabilities && criteria.capabilities.length > 0) {
|
|
335
|
-
results = results.filter(t =>
|
|
343
|
+
results = results.filter(t =>
|
|
336
344
|
criteria.capabilities.some(cap => t.capabilities.includes(cap))
|
|
337
345
|
);
|
|
338
346
|
}
|
|
@@ -407,7 +415,7 @@ class ToolDiscovery extends EventEmitter {
|
|
|
407
415
|
}
|
|
408
416
|
|
|
409
417
|
// Apply reliability factor
|
|
410
|
-
score *=
|
|
418
|
+
score *= 0.5 + 0.5 * tool.getReliabilityScore();
|
|
411
419
|
|
|
412
420
|
// Normalize score to 0-1
|
|
413
421
|
score = Math.min(1.0, score);
|
|
@@ -446,10 +454,10 @@ class ToolDiscovery extends EventEmitter {
|
|
|
446
454
|
|
|
447
455
|
// Match by skill description/purpose
|
|
448
456
|
if (skill.description || skill.purpose) {
|
|
449
|
-
const taskMatch = this.matchToolsToTask(
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
);
|
|
457
|
+
const taskMatch = this.matchToolsToTask(skill.description || skill.purpose, {
|
|
458
|
+
limit: 3,
|
|
459
|
+
minScore: 0.4,
|
|
460
|
+
});
|
|
453
461
|
for (const { tool } of taskMatch) {
|
|
454
462
|
if (!matchedTools.includes(tool.name)) {
|
|
455
463
|
matchedTools.push(tool.name);
|
|
@@ -471,9 +479,7 @@ class ToolDiscovery extends EventEmitter {
|
|
|
471
479
|
*/
|
|
472
480
|
getToolsForSkill(skillName) {
|
|
473
481
|
const toolNames = this.skillToolMappings.get(skillName) || [];
|
|
474
|
-
return toolNames
|
|
475
|
-
.map(name => this.tools.get(name))
|
|
476
|
-
.filter(Boolean);
|
|
482
|
+
return toolNames.map(name => this.tools.get(name)).filter(Boolean);
|
|
477
483
|
}
|
|
478
484
|
|
|
479
485
|
/**
|
|
@@ -496,7 +502,7 @@ class ToolDiscovery extends EventEmitter {
|
|
|
496
502
|
*/
|
|
497
503
|
getAnalytics() {
|
|
498
504
|
const tools = Array.from(this.tools.values());
|
|
499
|
-
|
|
505
|
+
|
|
500
506
|
const byCategory = {};
|
|
501
507
|
for (const [category, toolNames] of this.toolsByCategory) {
|
|
502
508
|
byCategory[category] = toolNames.size;
|
|
@@ -524,7 +530,7 @@ class ToolDiscovery extends EventEmitter {
|
|
|
524
530
|
byServer,
|
|
525
531
|
topUsed,
|
|
526
532
|
leastReliable,
|
|
527
|
-
totalUsage: tools.reduce((sum, t) => sum + t.usageCount, 0)
|
|
533
|
+
totalUsage: tools.reduce((sum, t) => sum + t.usageCount, 0),
|
|
528
534
|
};
|
|
529
535
|
}
|
|
530
536
|
|
|
@@ -575,7 +581,7 @@ class ToolDiscovery extends EventEmitter {
|
|
|
575
581
|
exportedAt: new Date().toISOString(),
|
|
576
582
|
tools: Array.from(this.tools.values()).map(t => t.toJSON()),
|
|
577
583
|
categories: Object.values(ToolCategory),
|
|
578
|
-
analytics: this.getAnalytics()
|
|
584
|
+
analytics: this.getAnalytics(),
|
|
579
585
|
};
|
|
580
586
|
}
|
|
581
587
|
}
|
|
@@ -585,5 +591,5 @@ module.exports = {
|
|
|
585
591
|
DiscoveredTool,
|
|
586
592
|
ToolCategory,
|
|
587
593
|
CapabilityScore,
|
|
588
|
-
CATEGORY_KEYWORDS
|
|
594
|
+
CATEGORY_KEYWORDS,
|
|
589
595
|
};
|
|
@@ -59,17 +59,15 @@ class AnthropicLMProvider extends LLMProvider {
|
|
|
59
59
|
headers: {
|
|
60
60
|
'x-api-key': this.apiKey,
|
|
61
61
|
'anthropic-version': '2023-06-01',
|
|
62
|
-
'content-type': 'application/json'
|
|
62
|
+
'content-type': 'application/json',
|
|
63
63
|
},
|
|
64
64
|
body: JSON.stringify({
|
|
65
65
|
model: this.config.model,
|
|
66
66
|
max_tokens: options.maxTokens || this.config.maxTokens,
|
|
67
67
|
system: systemPrompt,
|
|
68
|
-
messages: [
|
|
69
|
-
{ role: 'user', content: prompt }
|
|
70
|
-
]
|
|
68
|
+
messages: [{ role: 'user', content: prompt }],
|
|
71
69
|
}),
|
|
72
|
-
signal: AbortSignal.timeout(this.config.timeout)
|
|
70
|
+
signal: AbortSignal.timeout(this.config.timeout),
|
|
73
71
|
});
|
|
74
72
|
|
|
75
73
|
if (!response.ok) {
|
|
@@ -85,9 +83,9 @@ class AnthropicLMProvider extends LLMProvider {
|
|
|
85
83
|
usage: {
|
|
86
84
|
promptTokens: data.usage?.input_tokens || 0,
|
|
87
85
|
completionTokens: data.usage?.output_tokens || 0,
|
|
88
|
-
totalTokens: (data.usage?.input_tokens || 0) + (data.usage?.output_tokens || 0)
|
|
86
|
+
totalTokens: (data.usage?.input_tokens || 0) + (data.usage?.output_tokens || 0),
|
|
89
87
|
},
|
|
90
|
-
finishReason: data.stop_reason
|
|
88
|
+
finishReason: data.stop_reason,
|
|
91
89
|
};
|
|
92
90
|
});
|
|
93
91
|
});
|
|
@@ -98,8 +96,10 @@ class AnthropicLMProvider extends LLMProvider {
|
|
|
98
96
|
* @param {string} text - Text to embed
|
|
99
97
|
* @returns {Promise<number[]>}
|
|
100
98
|
*/
|
|
101
|
-
async embed(
|
|
102
|
-
throw new Error(
|
|
99
|
+
async embed(_text) {
|
|
100
|
+
throw new Error(
|
|
101
|
+
'Embedding not supported by Anthropic Claude API. Use OpenAI or a dedicated embedding service.'
|
|
102
|
+
);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
/**
|
|
@@ -133,8 +133,8 @@ class AnthropicLMProvider extends LLMProvider {
|
|
|
133
133
|
completion: true,
|
|
134
134
|
embedding: false,
|
|
135
135
|
streaming: true,
|
|
136
|
-
functionCalling: true
|
|
137
|
-
}
|
|
136
|
+
functionCalling: true,
|
|
137
|
+
},
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
140
|
|