musubi-sdd 5.1.0 → 5.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.ja.md +106 -48
  2. package/README.md +110 -32
  3. package/bin/musubi-analyze.js +74 -67
  4. package/bin/musubi-browser.js +27 -26
  5. package/bin/musubi-change.js +48 -47
  6. package/bin/musubi-checkpoint.js +10 -7
  7. package/bin/musubi-convert.js +25 -25
  8. package/bin/musubi-costs.js +27 -10
  9. package/bin/musubi-gui.js +52 -46
  10. package/bin/musubi-init.js +1952 -10
  11. package/bin/musubi-orchestrate.js +327 -239
  12. package/bin/musubi-remember.js +69 -56
  13. package/bin/musubi-resolve.js +53 -45
  14. package/bin/musubi-trace.js +51 -22
  15. package/bin/musubi-validate.js +39 -30
  16. package/bin/musubi-workflow.js +33 -34
  17. package/bin/musubi.js +39 -2
  18. package/package.json +1 -1
  19. package/src/agents/agent-loop.js +94 -95
  20. package/src/agents/agentic/code-generator.js +119 -109
  21. package/src/agents/agentic/code-reviewer.js +105 -108
  22. package/src/agents/agentic/index.js +4 -4
  23. package/src/agents/browser/action-executor.js +13 -13
  24. package/src/agents/browser/ai-comparator.js +11 -10
  25. package/src/agents/browser/context-manager.js +6 -6
  26. package/src/agents/browser/index.js +5 -5
  27. package/src/agents/browser/nl-parser.js +31 -46
  28. package/src/agents/browser/screenshot.js +2 -2
  29. package/src/agents/browser/test-generator.js +6 -4
  30. package/src/agents/function-tool.js +71 -65
  31. package/src/agents/index.js +7 -7
  32. package/src/agents/schema-generator.js +98 -94
  33. package/src/analyzers/ast-extractor.js +158 -146
  34. package/src/analyzers/codegraph-auto-update.js +858 -0
  35. package/src/analyzers/complexity-analyzer.js +536 -0
  36. package/src/analyzers/context-optimizer.js +241 -126
  37. package/src/analyzers/impact-analyzer.js +1 -1
  38. package/src/analyzers/large-project-analyzer.js +766 -0
  39. package/src/analyzers/repository-map.js +77 -81
  40. package/src/analyzers/security-analyzer.js +19 -11
  41. package/src/analyzers/stuck-detector.js +19 -17
  42. package/src/converters/index.js +78 -57
  43. package/src/converters/ir/types.js +12 -12
  44. package/src/converters/parsers/musubi-parser.js +134 -126
  45. package/src/converters/parsers/openapi-parser.js +70 -53
  46. package/src/converters/parsers/speckit-parser.js +239 -175
  47. package/src/converters/writers/musubi-writer.js +123 -118
  48. package/src/converters/writers/speckit-writer.js +124 -113
  49. package/src/generators/rust-migration-generator.js +512 -0
  50. package/src/gui/public/index.html +1365 -1211
  51. package/src/gui/server.js +41 -40
  52. package/src/gui/services/file-watcher.js +23 -8
  53. package/src/gui/services/project-scanner.js +26 -20
  54. package/src/gui/services/replanning-service.js +27 -23
  55. package/src/gui/services/traceability-service.js +8 -8
  56. package/src/gui/services/workflow-service.js +14 -7
  57. package/src/index.js +151 -0
  58. package/src/integrations/cicd.js +90 -104
  59. package/src/integrations/codegraph-mcp.js +643 -0
  60. package/src/integrations/documentation.js +142 -103
  61. package/src/integrations/examples.js +95 -80
  62. package/src/integrations/github-client.js +17 -17
  63. package/src/integrations/index.js +5 -5
  64. package/src/integrations/mcp/index.js +21 -21
  65. package/src/integrations/mcp/mcp-context-provider.js +76 -78
  66. package/src/integrations/mcp/mcp-discovery.js +74 -72
  67. package/src/integrations/mcp/mcp-tool-registry.js +99 -94
  68. package/src/integrations/mcp-connector.js +70 -66
  69. package/src/integrations/platforms.js +50 -49
  70. package/src/integrations/tool-discovery.js +37 -31
  71. package/src/llm-providers/anthropic-provider.js +11 -11
  72. package/src/llm-providers/base-provider.js +16 -18
  73. package/src/llm-providers/copilot-provider.js +22 -19
  74. package/src/llm-providers/index.js +26 -25
  75. package/src/llm-providers/ollama-provider.js +11 -11
  76. package/src/llm-providers/openai-provider.js +12 -12
  77. package/src/managers/agent-memory.js +36 -24
  78. package/src/managers/checkpoint-manager.js +4 -8
  79. package/src/managers/delta-spec.js +19 -19
  80. package/src/managers/index.js +13 -4
  81. package/src/managers/memory-condenser.js +35 -45
  82. package/src/managers/repo-skill-manager.js +57 -31
  83. package/src/managers/skill-loader.js +25 -22
  84. package/src/managers/skill-tools.js +36 -72
  85. package/src/managers/workflow.js +30 -22
  86. package/src/monitoring/cost-tracker.js +48 -46
  87. package/src/monitoring/incident-manager.js +116 -106
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +75 -62
  90. package/src/monitoring/quality-dashboard.js +45 -41
  91. package/src/monitoring/release-manager.js +63 -53
  92. package/src/orchestration/agent-skill-binding.js +39 -47
  93. package/src/orchestration/error-handler.js +65 -107
  94. package/src/orchestration/guardrails/base-guardrail.js +26 -24
  95. package/src/orchestration/guardrails/guardrail-rules.js +50 -64
  96. package/src/orchestration/guardrails/index.js +5 -5
  97. package/src/orchestration/guardrails/input-guardrail.js +58 -45
  98. package/src/orchestration/guardrails/output-guardrail.js +104 -81
  99. package/src/orchestration/guardrails/safety-check.js +79 -79
  100. package/src/orchestration/index.js +38 -55
  101. package/src/orchestration/mcp-tool-adapters.js +96 -99
  102. package/src/orchestration/orchestration-engine.js +21 -21
  103. package/src/orchestration/pattern-registry.js +60 -45
  104. package/src/orchestration/patterns/auto.js +34 -47
  105. package/src/orchestration/patterns/group-chat.js +59 -65
  106. package/src/orchestration/patterns/handoff.js +67 -65
  107. package/src/orchestration/patterns/human-in-loop.js +51 -72
  108. package/src/orchestration/patterns/nested.js +25 -40
  109. package/src/orchestration/patterns/sequential.js +35 -34
  110. package/src/orchestration/patterns/swarm.js +63 -56
  111. package/src/orchestration/patterns/triage.js +150 -109
  112. package/src/orchestration/reasoning/index.js +9 -9
  113. package/src/orchestration/reasoning/planning-engine.js +143 -140
  114. package/src/orchestration/reasoning/reasoning-engine.js +206 -144
  115. package/src/orchestration/reasoning/self-correction.js +121 -128
  116. package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
  117. package/src/orchestration/replanning/alternative-generator.js +37 -42
  118. package/src/orchestration/replanning/config.js +63 -59
  119. package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
  120. package/src/orchestration/replanning/index.js +24 -20
  121. package/src/orchestration/replanning/plan-evaluator.js +49 -50
  122. package/src/orchestration/replanning/plan-monitor.js +32 -28
  123. package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
  124. package/src/orchestration/replanning/replan-history.js +33 -26
  125. package/src/orchestration/replanning/replanning-engine.js +106 -108
  126. package/src/orchestration/skill-executor.js +107 -109
  127. package/src/orchestration/skill-registry.js +85 -89
  128. package/src/orchestration/workflow-examples.js +228 -231
  129. package/src/orchestration/workflow-executor.js +65 -68
  130. package/src/orchestration/workflow-orchestrator.js +72 -73
  131. package/src/phase4-integration.js +47 -40
  132. package/src/phase5-integration.js +89 -30
  133. package/src/reporters/coverage-report.js +82 -30
  134. package/src/reporters/hierarchical-reporter.js +498 -0
  135. package/src/reporters/traceability-matrix-report.js +29 -20
  136. package/src/resolvers/issue-resolver.js +43 -31
  137. package/src/steering/advanced-validation.js +133 -124
  138. package/src/steering/auto-updater.js +60 -73
  139. package/src/steering/index.js +6 -6
  140. package/src/steering/quality-metrics.js +41 -35
  141. package/src/steering/steering-auto-update.js +83 -86
  142. package/src/steering/steering-validator.js +98 -106
  143. package/src/steering/template-constraints.js +53 -54
  144. package/src/templates/agents/claude-code/CLAUDE.md +32 -32
  145. package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
  146. package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
  147. package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
  148. package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
  149. package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
  150. package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
  151. package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
  152. package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
  153. package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
  154. package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
  155. package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
  156. package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
  157. package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
  158. package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
  159. package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
  160. package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
  161. package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
  162. package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
  163. package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
  164. package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
  165. package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
  166. package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
  167. package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
  168. package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
  169. package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
  170. package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
  171. package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
  172. package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
  173. package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
  174. package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
  175. package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
  176. package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
  177. package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
  178. package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
  179. package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
  180. package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
  181. package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
  182. package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
  183. package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
  184. package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
  185. package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
  186. package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
  187. package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
  188. package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
  189. package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
  190. package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
  191. package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
  192. package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
  193. package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
  194. package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
  195. package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
  196. package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
  197. package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
  198. package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
  199. package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
  200. package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
  201. package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
  202. package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
  203. package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
  204. package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
  205. package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
  206. package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
  207. package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
  208. package/src/templates/agents/codex/AGENTS.md +74 -42
  209. package/src/templates/agents/cursor/AGENTS.md +74 -42
  210. package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
  211. package/src/templates/agents/github-copilot/AGENTS.md +83 -51
  212. package/src/templates/agents/qwen-code/QWEN.md +74 -42
  213. package/src/templates/agents/windsurf/AGENTS.md +74 -42
  214. package/src/templates/architectures/README.md +41 -0
  215. package/src/templates/architectures/clean-architecture/README.md +113 -0
  216. package/src/templates/architectures/event-driven/README.md +162 -0
  217. package/src/templates/architectures/hexagonal/README.md +130 -0
  218. package/src/templates/index.js +6 -1
  219. package/src/templates/locale-manager.js +16 -16
  220. package/src/templates/shared/delta-spec-template.md +20 -13
  221. package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
  222. package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
  223. package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
  224. package/src/templates/shared/steering/structure.md +95 -0
  225. package/src/templates/skills/browser-agent.md +21 -16
  226. package/src/templates/skills/web-gui.md +8 -0
  227. package/src/templates/template-constraints.js +50 -53
  228. package/src/validators/advanced-validation.js +30 -36
  229. package/src/validators/constitutional-validator.js +77 -73
  230. package/src/validators/critic-system.js +49 -59
  231. package/src/validators/delta-format.js +59 -55
  232. package/src/validators/traceability-validator.js +7 -11
@@ -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 path = require('path');
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, (skill) => {
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, (skill) => {
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, (skill) => {
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, source] of this.sources) {
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: this.detector.detectedPlatforms.length > 0
854
- ? this.detector.detectedPlatforms
855
- : [Platform.GENERIC]
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 = ((this.errorRate * (this.usageCount - 1)) + 1) / this.usageCount;
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 = ['read', 'write', 'create', 'update', 'delete', 'list', 'search', 'analyze', 'generate'];
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 *= (0.5 + 0.5 * tool.getReliabilityScore());
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
- skill.description || skill.purpose,
451
- { limit: 3, minScore: 0.4 }
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(text) {
102
- throw new Error('Embedding not supported by Anthropic Claude API. Use OpenAI or a dedicated embedding service.');
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