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.
- 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 +164 -145
- package/src/analyzers/codegraph-auto-update.js +858 -0
- package/src/analyzers/complexity-analyzer.js +536 -0
- package/src/analyzers/context-optimizer.js +247 -125
- package/src/analyzers/impact-analyzer.js +1 -1
- package/src/analyzers/large-project-analyzer.js +766 -0
- package/src/analyzers/repository-map.js +83 -80
- 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 +53 -44
- package/src/monitoring/incident-manager.js +123 -103
- package/src/monitoring/index.js +144 -134
- package/src/monitoring/observability.js +82 -59
- package/src/monitoring/quality-dashboard.js +51 -39
- package/src/monitoring/release-manager.js +70 -50
- 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
|
* 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
|
|
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 [
|
|
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 (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
133
|
+
this.metadata.set(
|
|
131
134
|
name,
|
|
132
|
-
|
|
133
|
-
|
|
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 (
|
|
216
|
-
|
|
217
|
-
|
|
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 (
|
|
224
|
-
|
|
225
|
-
|
|
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 (
|
|
231
|
-
|
|
232
|
-
|
|
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 (
|
|
238
|
-
|
|
239
|
-
|
|
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 (
|
|
245
|
-
|
|
246
|
-
|
|
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 [
|
|
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',
|
|
15
|
+
HIGH: 'high', // >= 0.8
|
|
16
16
|
MEDIUM: 'medium', // >= 0.5
|
|
17
|
-
LOW: 'low',
|
|
18
|
-
NONE: 'none'
|
|
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
|
};
|