musubi-sdd 5.0.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 +164 -145
  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 +247 -125
  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 +83 -80
  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 +53 -44
  87. package/src/monitoring/incident-manager.js +123 -103
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +82 -59
  90. package/src/monitoring/quality-dashboard.js +51 -39
  91. package/src/monitoring/release-manager.js +70 -50
  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
  * OrchestrationEngine - Core engine for multi-skill orchestration
3
- *
3
+ *
4
4
  * Implements ag2-inspired patterns for skill coordination:
5
5
  * - Auto: Automatic skill selection based on task
6
6
  * - Sequential: Linear skill execution
@@ -25,7 +25,7 @@ const PatternType = {
25
25
  SWARM: 'swarm',
26
26
  HUMAN_IN_LOOP: 'human-in-loop',
27
27
  HANDOFF: 'handoff',
28
- TRIAGE: 'triage'
28
+ TRIAGE: 'triage',
29
29
  };
30
30
 
31
31
  /**
@@ -37,7 +37,7 @@ const ExecutionStatus = {
37
37
  COMPLETED: 'completed',
38
38
  FAILED: 'failed',
39
39
  CANCELLED: 'cancelled',
40
- WAITING_FOR_HUMAN: 'waiting-for-human'
40
+ WAITING_FOR_HUMAN: 'waiting-for-human',
41
41
  };
42
42
 
43
43
  /**
@@ -47,7 +47,7 @@ const Priority = {
47
47
  P0: 0, // Critical - must complete first
48
48
  P1: 1, // High - important
49
49
  P2: 2, // Medium - nice to have
50
- P3: 3 // Low - future enhancement
50
+ P3: 3, // Low - future enhancement
51
51
  };
52
52
 
53
53
  /**
@@ -117,11 +117,11 @@ class ExecutionContext {
117
117
  input: this.input,
118
118
  output: this.output,
119
119
  error: this.error,
120
- children: this.children.map(c => c.toJSON ? c.toJSON() : c),
120
+ children: this.children.map(c => (c.toJSON ? c.toJSON() : c)),
121
121
  metadata: this.metadata,
122
122
  startTime: this.startTime,
123
123
  endTime: this.endTime,
124
- duration: this.getDuration()
124
+ duration: this.getDuration(),
125
125
  };
126
126
  }
127
127
  }
@@ -140,7 +140,7 @@ class OrchestrationEngine extends EventEmitter {
140
140
  timeout: options.timeout || 300000, // 5 minutes default
141
141
  retryCount: options.retryCount || 3,
142
142
  retryDelay: options.retryDelay || 1000,
143
- ...options
143
+ ...options,
144
144
  };
145
145
  this.skillResolver = options.skillResolver || null;
146
146
  this.humanGate = options.humanGate || null;
@@ -227,8 +227,8 @@ class OrchestrationEngine extends EventEmitter {
227
227
  input: options.input || {},
228
228
  metadata: {
229
229
  pattern: patternName,
230
- ...options.metadata
231
- }
230
+ ...options.metadata,
231
+ },
232
232
  });
233
233
 
234
234
  this.activeContexts.set(context.id, context);
@@ -236,12 +236,12 @@ class OrchestrationEngine extends EventEmitter {
236
236
 
237
237
  try {
238
238
  context.start();
239
-
239
+
240
240
  const result = await this._executeWithTimeout(
241
241
  () => pattern.execute(context, this),
242
242
  this.config.timeout
243
243
  );
244
-
244
+
245
245
  context.complete(result);
246
246
  this.emit('executionCompleted', context);
247
247
  } catch (error) {
@@ -294,7 +294,7 @@ class OrchestrationEngine extends EventEmitter {
294
294
  skill: skillName,
295
295
  input,
296
296
  parentId: parentContext?.id,
297
- metadata: { directExecution: true }
297
+ metadata: { directExecution: true },
298
298
  });
299
299
 
300
300
  if (parentContext) {
@@ -305,7 +305,7 @@ class OrchestrationEngine extends EventEmitter {
305
305
 
306
306
  try {
307
307
  context.start();
308
-
308
+
309
309
  let result;
310
310
  if (typeof skill.execute === 'function') {
311
311
  result = await skill.execute(input, this);
@@ -314,7 +314,7 @@ class OrchestrationEngine extends EventEmitter {
314
314
  } else {
315
315
  throw new Error(`Skill '${skillName}' is not executable`);
316
316
  }
317
-
317
+
318
318
  context.complete(result);
319
319
  this.emit('skillExecutionCompleted', { skillName, context });
320
320
  return result;
@@ -334,7 +334,7 @@ class OrchestrationEngine extends EventEmitter {
334
334
  if (this.skillResolver) {
335
335
  return this.skillResolver.resolve(task, this.listSkills());
336
336
  }
337
-
337
+
338
338
  // Default: return first matching skill based on keywords
339
339
  const taskLower = task.toLowerCase();
340
340
  for (const [name, skill] of this.skills) {
@@ -343,7 +343,7 @@ class OrchestrationEngine extends EventEmitter {
343
343
  return name;
344
344
  }
345
345
  }
346
-
346
+
347
347
  return null;
348
348
  }
349
349
 
@@ -356,11 +356,11 @@ class OrchestrationEngine extends EventEmitter {
356
356
  async requestHumanValidation(context, question) {
357
357
  context.waitForHuman();
358
358
  this.emit('humanValidationRequested', { context, question });
359
-
359
+
360
360
  if (this.humanGate) {
361
361
  return this.humanGate.request(question, context);
362
362
  }
363
-
363
+
364
364
  // Default: auto-approve
365
365
  return { approved: true, feedback: 'Auto-approved (no human gate configured)' };
366
366
  }
@@ -375,7 +375,7 @@ class OrchestrationEngine extends EventEmitter {
375
375
  activeExecutions: contexts.length,
376
376
  patterns: this.listPatterns(),
377
377
  skills: this.listSkills(),
378
- contexts: contexts.map(c => c.toJSON())
378
+ contexts: contexts.map(c => c.toJSON()),
379
379
  };
380
380
  }
381
381
 
@@ -396,7 +396,7 @@ class OrchestrationEngine extends EventEmitter {
396
396
  * Cancel all active executions
397
397
  */
398
398
  cancelAll() {
399
- for (const [id, context] of this.activeContexts) {
399
+ for (const [_id, context] of this.activeContexts) {
400
400
  context.cancel();
401
401
  this.emit('executionCancelled', context);
402
402
  }
@@ -409,5 +409,5 @@ module.exports = {
409
409
  ExecutionContext,
410
410
  PatternType,
411
411
  ExecutionStatus,
412
- Priority
412
+ Priority,
413
413
  };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * PatternRegistry - Registry for orchestration patterns
3
- *
3
+ *
4
4
  * Manages pattern lifecycle and provides pattern discovery
5
5
  */
6
6
 
@@ -26,10 +26,13 @@ class PatternMetadata {
26
26
  matches(criteria = {}) {
27
27
  if (criteria.type && this.type !== criteria.type) return false;
28
28
  if (criteria.complexity && this.complexity !== criteria.complexity) return false;
29
- if (criteria.supportsParallel !== undefined &&
30
- this.supportsParallel !== criteria.supportsParallel) return false;
31
- if (criteria.requiresHuman !== undefined &&
32
- this.requiresHuman !== criteria.requiresHuman) return false;
29
+ if (
30
+ criteria.supportsParallel !== undefined &&
31
+ this.supportsParallel !== criteria.supportsParallel
32
+ )
33
+ return false;
34
+ if (criteria.requiresHuman !== undefined && this.requiresHuman !== criteria.requiresHuman)
35
+ return false;
33
36
  if (criteria.tags && criteria.tags.length > 0) {
34
37
  if (!criteria.tags.some(t => this.tags.includes(t))) return false;
35
38
  }
@@ -47,7 +50,7 @@ class PatternMetadata {
47
50
  useCases: this.useCases,
48
51
  complexity: this.complexity,
49
52
  supportsParallel: this.supportsParallel,
50
- requiresHuman: this.requiresHuman
53
+ requiresHuman: this.requiresHuman,
51
54
  };
52
55
  }
53
56
  }
@@ -66,7 +69,7 @@ class BasePattern {
66
69
  * @param {OrchestrationEngine} engine - Orchestration engine
67
70
  * @returns {Promise<any>} Execution result
68
71
  */
69
- async execute(context, engine) {
72
+ async execute(_context, _engine) {
70
73
  throw new Error('Pattern must implement execute method');
71
74
  }
72
75
 
@@ -76,7 +79,7 @@ class BasePattern {
76
79
  * @param {OrchestrationEngine} engine - Orchestration engine
77
80
  * @returns {object} Validation result
78
81
  */
79
- validate(context, engine) {
82
+ validate(_context, _engine) {
80
83
  return { valid: true, errors: [] };
81
84
  }
82
85
 
@@ -127,11 +130,14 @@ class PatternRegistry {
127
130
 
128
131
  // Extract or create metadata
129
132
  const patternMeta = pattern.metadata || pattern.getMetadata?.() || {};
130
- this.metadata.set(name, new PatternMetadata({
133
+ this.metadata.set(
131
134
  name,
132
- ...patternMeta,
133
- ...metadata
134
- }));
135
+ new PatternMetadata({
136
+ name,
137
+ ...patternMeta,
138
+ ...metadata,
139
+ })
140
+ );
135
141
 
136
142
  return this;
137
143
  }
@@ -188,18 +194,18 @@ class PatternRegistry {
188
194
  */
189
195
  find(criteria = {}) {
190
196
  const results = [];
191
-
197
+
192
198
  for (const [name, pattern] of this.patterns) {
193
199
  const meta = this.metadata.get(name);
194
200
  if (meta && meta.matches(criteria)) {
195
201
  results.push({
196
202
  name,
197
203
  pattern,
198
- metadata: meta
204
+ metadata: meta,
199
205
  });
200
206
  }
201
207
  }
202
-
208
+
203
209
  return results;
204
210
  }
205
211
 
@@ -210,49 +216,59 @@ class PatternRegistry {
210
216
  */
211
217
  findBestPattern(task) {
212
218
  const taskLower = task.toLowerCase();
213
-
219
+
214
220
  // Check for parallel keywords
215
- if (taskLower.includes('parallel') ||
216
- taskLower.includes('concurrent') ||
217
- taskLower.includes('simultaneous')) {
221
+ if (
222
+ taskLower.includes('parallel') ||
223
+ taskLower.includes('concurrent') ||
224
+ taskLower.includes('simultaneous')
225
+ ) {
218
226
  const swarm = this.find({ supportsParallel: true });
219
227
  if (swarm.length > 0) return swarm[0].name;
220
228
  }
221
-
229
+
222
230
  // Check for sequential keywords
223
- if (taskLower.includes('sequential') ||
224
- taskLower.includes('step by step') ||
225
- taskLower.includes('one by one')) {
231
+ if (
232
+ taskLower.includes('sequential') ||
233
+ taskLower.includes('step by step') ||
234
+ taskLower.includes('one by one')
235
+ ) {
226
236
  if (this.has(PatternType.SEQUENTIAL)) return PatternType.SEQUENTIAL;
227
237
  }
228
-
238
+
229
239
  // Check for collaboration keywords
230
- if (taskLower.includes('discuss') ||
231
- taskLower.includes('review') ||
232
- taskLower.includes('collaborate')) {
240
+ if (
241
+ taskLower.includes('discuss') ||
242
+ taskLower.includes('review') ||
243
+ taskLower.includes('collaborate')
244
+ ) {
233
245
  if (this.has(PatternType.GROUP_CHAT)) return PatternType.GROUP_CHAT;
234
246
  }
235
-
247
+
236
248
  // Check for nested/hierarchical keywords
237
- if (taskLower.includes('break down') ||
238
- taskLower.includes('decompose') ||
239
- taskLower.includes('hierarchical')) {
249
+ if (
250
+ taskLower.includes('break down') ||
251
+ taskLower.includes('decompose') ||
252
+ taskLower.includes('hierarchical')
253
+ ) {
240
254
  if (this.has(PatternType.NESTED)) return PatternType.NESTED;
241
255
  }
242
-
256
+
243
257
  // Check for human validation keywords
244
- if (taskLower.includes('validate') ||
245
- taskLower.includes('approve') ||
246
- taskLower.includes('review')) {
258
+ if (
259
+ taskLower.includes('validate') ||
260
+ taskLower.includes('approve') ||
261
+ taskLower.includes('review')
262
+ ) {
247
263
  if (this.has(PatternType.HUMAN_IN_LOOP)) return PatternType.HUMAN_IN_LOOP;
248
264
  }
249
-
265
+
250
266
  // Default to auto pattern
251
267
  if (this.has(PatternType.AUTO)) return PatternType.AUTO;
252
-
268
+
253
269
  // Fall back to sequential
254
270
  if (this.has(PatternType.SEQUENTIAL)) return PatternType.SEQUENTIAL;
255
-
271
+
256
272
  // Return first available pattern
257
273
  const patterns = this.list();
258
274
  return patterns.length > 0 ? patterns[0] : null;
@@ -277,18 +293,17 @@ class PatternRegistry {
277
293
  total: this.patterns.size,
278
294
  patterns: [],
279
295
  byType: {},
280
- byComplexity: {}
296
+ byComplexity: {},
281
297
  };
282
298
 
283
- for (const [name, meta] of this.metadata) {
299
+ for (const [_name, meta] of this.metadata) {
284
300
  summary.patterns.push(meta.toJSON());
285
-
301
+
286
302
  // Count by type
287
303
  summary.byType[meta.type] = (summary.byType[meta.type] || 0) + 1;
288
-
304
+
289
305
  // Count by complexity
290
- summary.byComplexity[meta.complexity] =
291
- (summary.byComplexity[meta.complexity] || 0) + 1;
306
+ summary.byComplexity[meta.complexity] = (summary.byComplexity[meta.complexity] || 0) + 1;
292
307
  }
293
308
 
294
309
  return summary;
@@ -315,5 +330,5 @@ module.exports = {
315
330
  PatternRegistry,
316
331
  PatternMetadata,
317
332
  BasePattern,
318
- createDefaultRegistry
333
+ createDefaultRegistry,
319
334
  };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * AutoPattern - Automatic skill selection pattern
3
- *
3
+ *
4
4
  * Analyzes the task and automatically selects the most appropriate
5
5
  * skill to execute. Uses skill metadata and keywords for matching.
6
6
  */
@@ -12,10 +12,10 @@ const { PatternType, ExecutionContext, ExecutionStatus } = require('../orchestra
12
12
  * Skill match confidence levels
13
13
  */
14
14
  const ConfidenceLevel = {
15
- HIGH: 'high', // >= 0.8
15
+ HIGH: 'high', // >= 0.8
16
16
  MEDIUM: 'medium', // >= 0.5
17
- LOW: 'low', // >= 0.3
18
- NONE: 'none' // < 0.3
17
+ LOW: 'low', // >= 0.3
18
+ NONE: 'none', // < 0.3
19
19
  };
20
20
 
21
21
  /**
@@ -32,11 +32,11 @@ class AutoPattern extends BasePattern {
32
32
  useCases: [
33
33
  'Dynamic task routing',
34
34
  'Intelligent skill selection',
35
- 'Natural language task processing'
35
+ 'Natural language task processing',
36
36
  ],
37
37
  complexity: 'medium',
38
38
  supportsParallel: false,
39
- requiresHuman: false
39
+ requiresHuman: false,
40
40
  });
41
41
 
42
42
  this.options = {
@@ -44,7 +44,7 @@ class AutoPattern extends BasePattern {
44
44
  fallbackSkill: options.fallbackSkill || null,
45
45
  multiMatch: options.multiMatch || false, // Execute multiple matching skills
46
46
  maxMatches: options.maxMatches || 3,
47
- ...options
47
+ ...options,
48
48
  };
49
49
 
50
50
  // Skill category keywords for classification
@@ -58,7 +58,7 @@ class AutoPattern extends BasePattern {
58
58
  security: ['security', 'vulnerability', 'authentication', 'authorization'],
59
59
  performance: ['performance', 'optimize', 'benchmark', 'profiling'],
60
60
  analysis: ['analyze', 'review', 'assess', 'evaluate', 'audit'],
61
- research: ['research', 'investigate', 'explore', 'study']
61
+ research: ['research', 'investigate', 'explore', 'study'],
62
62
  };
63
63
  }
64
64
 
@@ -81,7 +81,7 @@ class AutoPattern extends BasePattern {
81
81
 
82
82
  return {
83
83
  valid: errors.length === 0,
84
- errors
84
+ errors,
85
85
  };
86
86
  }
87
87
 
@@ -102,16 +102,16 @@ class AutoPattern extends BasePattern {
102
102
 
103
103
  engine.emit('autoPatternStarted', {
104
104
  context,
105
- task
105
+ task,
106
106
  });
107
107
 
108
108
  // Find matching skills
109
109
  const matches = this._findMatchingSkills(task, engine);
110
-
110
+
111
111
  engine.emit('autoPatternMatched', {
112
112
  context,
113
113
  task,
114
- matches: matches.map(m => ({ skill: m.skill, confidence: m.confidence }))
114
+ matches: matches.map(m => ({ skill: m.skill, confidence: m.confidence })),
115
115
  });
116
116
 
117
117
  if (matches.length === 0) {
@@ -119,18 +119,15 @@ class AutoPattern extends BasePattern {
119
119
  if (this.options.fallbackSkill && engine.getSkill(this.options.fallbackSkill)) {
120
120
  engine.emit('autoPatternFallback', {
121
121
  context,
122
- fallbackSkill: this.options.fallbackSkill
122
+ fallbackSkill: this.options.fallbackSkill,
123
+ });
124
+
125
+ return this._executeSingleSkill(this.options.fallbackSkill, input, context, engine, {
126
+ confidence: 0,
127
+ reason: 'fallback',
123
128
  });
124
-
125
- return this._executeSingleSkill(
126
- this.options.fallbackSkill,
127
- input,
128
- context,
129
- engine,
130
- { confidence: 0, reason: 'fallback' }
131
- );
132
129
  }
133
-
130
+
134
131
  throw new Error(`No matching skill found for task: ${task}`);
135
132
  }
136
133
 
@@ -141,13 +138,7 @@ class AutoPattern extends BasePattern {
141
138
 
142
139
  // Execute best match
143
140
  const bestMatch = matches[0];
144
- return this._executeSingleSkill(
145
- bestMatch.skill,
146
- input,
147
- context,
148
- engine,
149
- bestMatch
150
- );
141
+ return this._executeSingleSkill(bestMatch.skill, input, context, engine, bestMatch);
151
142
  }
152
143
 
153
144
  /**
@@ -162,13 +153,13 @@ class AutoPattern extends BasePattern {
162
153
  for (const skillName of engine.listSkills()) {
163
154
  const skill = engine.getSkill(skillName);
164
155
  const score = this._calculateMatchScore(taskLower, words, skillName, skill);
165
-
156
+
166
157
  if (score >= this.options.minConfidence) {
167
158
  matches.push({
168
159
  skill: skillName,
169
160
  confidence: score,
170
161
  confidenceLevel: this._getConfidenceLevel(score),
171
- matchedKeywords: this._getMatchedKeywords(taskLower, skill)
162
+ matchedKeywords: this._getMatchedKeywords(taskLower, skill),
172
163
  });
173
164
  }
174
165
  }
@@ -204,9 +195,7 @@ class AutoPattern extends BasePattern {
204
195
  const keywords = skill?.keywords || [];
205
196
  if (keywords.length > 0) {
206
197
  maxScore += 0.4;
207
- const matchedKeywords = keywords.filter(k =>
208
- taskLower.includes(k.toLowerCase())
209
- );
198
+ const matchedKeywords = keywords.filter(k => taskLower.includes(k.toLowerCase()));
210
199
  score += 0.4 * (matchedKeywords.length / keywords.length);
211
200
  }
212
201
 
@@ -279,8 +268,8 @@ class AutoPattern extends BasePattern {
279
268
  pattern: PatternType.AUTO,
280
269
  confidence: matchInfo.confidence,
281
270
  confidenceLevel: matchInfo.confidenceLevel,
282
- matchedKeywords: matchInfo.matchedKeywords
283
- }
271
+ matchedKeywords: matchInfo.matchedKeywords,
272
+ },
284
273
  });
285
274
 
286
275
  context.children.push(stepContext);
@@ -294,7 +283,7 @@ class AutoPattern extends BasePattern {
294
283
  context,
295
284
  selectedSkill: skillName,
296
285
  confidence: matchInfo.confidence,
297
- output
286
+ output,
298
287
  });
299
288
 
300
289
  return {
@@ -302,9 +291,8 @@ class AutoPattern extends BasePattern {
302
291
  confidence: matchInfo.confidence,
303
292
  confidenceLevel: matchInfo.confidenceLevel,
304
293
  output,
305
- multiMatch: false
294
+ multiMatch: false,
306
295
  };
307
-
308
296
  } catch (error) {
309
297
  stepContext.fail(error);
310
298
  throw error;
@@ -327,8 +315,8 @@ class AutoPattern extends BasePattern {
327
315
  metadata: {
328
316
  pattern: PatternType.AUTO,
329
317
  confidence: match.confidence,
330
- multiMatch: true
331
- }
318
+ multiMatch: true,
319
+ },
332
320
  });
333
321
 
334
322
  context.children.push(stepContext);
@@ -342,16 +330,15 @@ class AutoPattern extends BasePattern {
342
330
  skill: match.skill,
343
331
  confidence: match.confidence,
344
332
  status: ExecutionStatus.COMPLETED,
345
- output
333
+ output,
346
334
  });
347
-
348
335
  } catch (error) {
349
336
  stepContext.fail(error);
350
337
  results.push({
351
338
  skill: match.skill,
352
339
  confidence: match.confidence,
353
340
  status: ExecutionStatus.FAILED,
354
- error: error.message
341
+ error: error.message,
355
342
  });
356
343
  }
357
344
  }
@@ -359,13 +346,13 @@ class AutoPattern extends BasePattern {
359
346
  engine.emit('autoPatternCompleted', {
360
347
  context,
361
348
  results,
362
- multiMatch: true
349
+ multiMatch: true,
363
350
  });
364
351
 
365
352
  return {
366
353
  selectedSkills: matches.map(m => m.skill),
367
354
  results,
368
- multiMatch: true
355
+ multiMatch: true,
369
356
  };
370
357
  }
371
358
  }
@@ -382,5 +369,5 @@ function createAutoPattern(options = {}) {
382
369
  module.exports = {
383
370
  AutoPattern,
384
371
  ConfidenceLevel,
385
- createAutoPattern
372
+ createAutoPattern,
386
373
  };