mcp-agent-foundry 1.0.0
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/LICENSE +21 -0
- package/README.md +477 -0
- package/dist/cli/install-skills.d.ts +11 -0
- package/dist/cli/install-skills.d.ts.map +1 -0
- package/dist/cli/install-skills.js +143 -0
- package/dist/cli/install-skills.js.map +1 -0
- package/dist/cli/recovery-commands.d.ts +41 -0
- package/dist/cli/recovery-commands.d.ts.map +1 -0
- package/dist/cli/recovery-commands.js +241 -0
- package/dist/cli/recovery-commands.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +25 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +1417 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/test-connection.d.ts +45 -0
- package/dist/cli/test-connection.d.ts.map +1 -0
- package/dist/cli/test-connection.js +317 -0
- package/dist/cli/test-connection.js.map +1 -0
- package/dist/cli.d.ts +75 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +704 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +57 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +99 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +14 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +22 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +184 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +347 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/merger.d.ts +76 -0
- package/dist/config/merger.d.ts.map +1 -0
- package/dist/config/merger.js +189 -0
- package/dist/config/merger.js.map +1 -0
- package/dist/config/schema.d.ts +20 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +20 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +254 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +363 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/config/worktree-defaults.d.ts +23 -0
- package/dist/config/worktree-defaults.d.ts.map +1 -0
- package/dist/config/worktree-defaults.js +78 -0
- package/dist/config/worktree-defaults.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/tools/compare-agents.d.ts +25 -0
- package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
- package/dist/mcp/tools/compare-agents.js +177 -0
- package/dist/mcp/tools/compare-agents.js.map +1 -0
- package/dist/mcp/tools/critique-plan.d.ts +26 -0
- package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
- package/dist/mcp/tools/critique-plan.js +162 -0
- package/dist/mcp/tools/critique-plan.js.map +1 -0
- package/dist/mcp/tools/design-feedback.d.ts +26 -0
- package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
- package/dist/mcp/tools/design-feedback.js +216 -0
- package/dist/mcp/tools/design-feedback.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +50 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +191 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/invoke-agent.d.ts +25 -0
- package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
- package/dist/mcp/tools/invoke-agent.js +141 -0
- package/dist/mcp/tools/invoke-agent.js.map +1 -0
- package/dist/mcp/tools/review-code.d.ts +25 -0
- package/dist/mcp/tools/review-code.d.ts.map +1 -0
- package/dist/mcp/tools/review-code.js +170 -0
- package/dist/mcp/tools/review-code.js.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
- package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
- package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.js +284 -0
- package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
- package/dist/mcp/tools/tasks/index.d.ts +36 -0
- package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/index.js +66 -0
- package/dist/mcp/tools/tasks/index.js.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
- package/dist/mcp/tools/worktree/index.d.ts +41 -0
- package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/index.js +69 -0
- package/dist/mcp/tools/worktree/index.js.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
- package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
- package/dist/mcp/transport/stdio.d.ts +13 -0
- package/dist/mcp/transport/stdio.d.ts.map +1 -0
- package/dist/mcp/transport/stdio.js +15 -0
- package/dist/mcp/transport/stdio.js.map +1 -0
- package/dist/observability/logger.d.ts +137 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +235 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +250 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +364 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/persistence/index.d.ts +9 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +9 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/state-schema.d.ts +116 -0
- package/dist/persistence/state-schema.d.ts.map +1 -0
- package/dist/persistence/state-schema.js +28 -0
- package/dist/persistence/state-schema.js.map +1 -0
- package/dist/persistence/state-store.d.ts +111 -0
- package/dist/persistence/state-store.d.ts.map +1 -0
- package/dist/persistence/state-store.js +291 -0
- package/dist/persistence/state-store.js.map +1 -0
- package/dist/providers/anthropic.d.ts +164 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +500 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +151 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +227 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/gemini.d.ts +85 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +414 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/kimi.d.ts +19 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +20 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/manager.d.ts +160 -0
- package/dist/providers/manager.d.ts.map +1 -0
- package/dist/providers/manager.js +264 -0
- package/dist/providers/manager.js.map +1 -0
- package/dist/providers/ollama.d.ts +83 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +453 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +96 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +457 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/zai.d.ts +19 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +20 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/router/context-manager.d.ts +2 -0
- package/dist/router/context-manager.d.ts.map +1 -0
- package/dist/router/context-manager.js +3 -0
- package/dist/router/context-manager.js.map +1 -0
- package/dist/router/engine.d.ts +169 -0
- package/dist/router/engine.d.ts.map +1 -0
- package/dist/router/engine.js +435 -0
- package/dist/router/engine.js.map +1 -0
- package/dist/router/pattern-executor.d.ts +317 -0
- package/dist/router/pattern-executor.d.ts.map +1 -0
- package/dist/router/pattern-executor.js +571 -0
- package/dist/router/pattern-executor.js.map +1 -0
- package/dist/router/role-resolver.d.ts +59 -0
- package/dist/router/role-resolver.d.ts.map +1 -0
- package/dist/router/role-resolver.js +95 -0
- package/dist/router/role-resolver.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +223 -0
- package/dist/server.js.map +1 -0
- package/dist/startup.d.ts +78 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +107 -0
- package/dist/startup.js.map +1 -0
- package/dist/tasks/coordinator.d.ts +141 -0
- package/dist/tasks/coordinator.d.ts.map +1 -0
- package/dist/tasks/coordinator.js +331 -0
- package/dist/tasks/coordinator.js.map +1 -0
- package/dist/tasks/index.d.ts +13 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +13 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
- package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
- package/dist/tasks/persistent-state-coordinator.js +371 -0
- package/dist/tasks/persistent-state-coordinator.js.map +1 -0
- package/dist/tasks/pipeline-manager.d.ts +103 -0
- package/dist/tasks/pipeline-manager.d.ts.map +1 -0
- package/dist/tasks/pipeline-manager.js +358 -0
- package/dist/tasks/pipeline-manager.js.map +1 -0
- package/dist/tasks/state-coordinator.d.ts +79 -0
- package/dist/tasks/state-coordinator.d.ts.map +1 -0
- package/dist/tasks/state-coordinator.js +200 -0
- package/dist/tasks/state-coordinator.js.map +1 -0
- package/dist/tasks/worker-mode.d.ts +65 -0
- package/dist/tasks/worker-mode.d.ts.map +1 -0
- package/dist/tasks/worker-mode.js +208 -0
- package/dist/tasks/worker-mode.js.map +1 -0
- package/dist/translation/errors.d.ts +203 -0
- package/dist/translation/errors.d.ts.map +1 -0
- package/dist/translation/errors.js +477 -0
- package/dist/translation/errors.js.map +1 -0
- package/dist/translation/index.d.ts +12 -0
- package/dist/translation/index.d.ts.map +1 -0
- package/dist/translation/index.js +32 -0
- package/dist/translation/index.js.map +1 -0
- package/dist/translation/messages.d.ts +295 -0
- package/dist/translation/messages.d.ts.map +1 -0
- package/dist/translation/messages.js +557 -0
- package/dist/translation/messages.js.map +1 -0
- package/dist/translation/streaming.d.ts +226 -0
- package/dist/translation/streaming.d.ts.map +1 -0
- package/dist/translation/streaming.js +520 -0
- package/dist/translation/streaming.js.map +1 -0
- package/dist/translation/tools.d.ts +209 -0
- package/dist/translation/tools.d.ts.map +1 -0
- package/dist/translation/tools.js +331 -0
- package/dist/translation/tools.js.map +1 -0
- package/dist/types.d.ts +747 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +86 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +175 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +315 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +3 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/git.d.ts +58 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +197 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/merge-ordering.d.ts +45 -0
- package/dist/utils/merge-ordering.d.ts.map +1 -0
- package/dist/utils/merge-ordering.js +128 -0
- package/dist/utils/merge-ordering.js.map +1 -0
- package/dist/utils/retry.d.ts +106 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +188 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/worktrees/branch-manager.d.ts +55 -0
- package/dist/worktrees/branch-manager.d.ts.map +1 -0
- package/dist/worktrees/branch-manager.js +129 -0
- package/dist/worktrees/branch-manager.js.map +1 -0
- package/dist/worktrees/conflict-handler.d.ts +72 -0
- package/dist/worktrees/conflict-handler.d.ts.map +1 -0
- package/dist/worktrees/conflict-handler.js +287 -0
- package/dist/worktrees/conflict-handler.js.map +1 -0
- package/dist/worktrees/conflict-parser.d.ts +28 -0
- package/dist/worktrees/conflict-parser.d.ts.map +1 -0
- package/dist/worktrees/conflict-parser.js +140 -0
- package/dist/worktrees/conflict-parser.js.map +1 -0
- package/dist/worktrees/index.d.ts +20 -0
- package/dist/worktrees/index.d.ts.map +1 -0
- package/dist/worktrees/index.js +20 -0
- package/dist/worktrees/index.js.map +1 -0
- package/dist/worktrees/instructions.d.ts +20 -0
- package/dist/worktrees/instructions.d.ts.map +1 -0
- package/dist/worktrees/instructions.js +84 -0
- package/dist/worktrees/instructions.js.map +1 -0
- package/dist/worktrees/manager.d.ts +76 -0
- package/dist/worktrees/manager.d.ts.map +1 -0
- package/dist/worktrees/manager.js +277 -0
- package/dist/worktrees/manager.js.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
- package/dist/worktrees/pool.d.ts +95 -0
- package/dist/worktrees/pool.d.ts.map +1 -0
- package/dist/worktrees/pool.js +271 -0
- package/dist/worktrees/pool.js.map +1 -0
- package/dist/worktrees/recovery.d.ts +94 -0
- package/dist/worktrees/recovery.d.ts.map +1 -0
- package/dist/worktrees/recovery.js +371 -0
- package/dist/worktrees/recovery.js.map +1 -0
- package/dist/worktrees/resource-manager.d.ts +74 -0
- package/dist/worktrees/resource-manager.d.ts.map +1 -0
- package/dist/worktrees/resource-manager.js +228 -0
- package/dist/worktrees/resource-manager.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Executor
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates multi-agent workflows using various execution patterns.
|
|
5
|
+
* Provides high-level patterns for agent collaboration including:
|
|
6
|
+
* - Sequential pipelines (A → B → C)
|
|
7
|
+
* - Parallel comparison (same task to multiple agents)
|
|
8
|
+
* - Generator-Critic loops (generate → critique → improve)
|
|
9
|
+
* - Consensus building (propose → vote → synthesize)
|
|
10
|
+
*
|
|
11
|
+
* Each pattern leverages the RouterEngine for individual agent invocations
|
|
12
|
+
* while managing the overall workflow state and data flow between agents.
|
|
13
|
+
*/
|
|
14
|
+
import { generateTraceId } from '../observability/logger.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Default Templates
|
|
17
|
+
// ============================================================================
|
|
18
|
+
const DEFAULT_CRITIQUE_TEMPLATE = `Please critique the following and identify any issues, improvements, or concerns:
|
|
19
|
+
|
|
20
|
+
{{content}}
|
|
21
|
+
|
|
22
|
+
Provide specific, actionable feedback. If the work is satisfactory with no major issues, say "approved" or "looks good".`;
|
|
23
|
+
const DEFAULT_IMPROVEMENT_TEMPLATE = `Based on this feedback:
|
|
24
|
+
|
|
25
|
+
{{critique}}
|
|
26
|
+
|
|
27
|
+
Please improve your previous response:
|
|
28
|
+
|
|
29
|
+
{{original}}`;
|
|
30
|
+
const DEFAULT_VOTE_TEMPLATE = `Given these proposals:
|
|
31
|
+
|
|
32
|
+
{{proposals}}
|
|
33
|
+
|
|
34
|
+
Which approach do you think is best and why? You may also suggest combining elements from different proposals.`;
|
|
35
|
+
const DEFAULT_SYNTHESIS_TEMPLATE = `Based on the following proposals and assessments, synthesize a final recommendation:
|
|
36
|
+
|
|
37
|
+
## Proposals
|
|
38
|
+
{{proposals}}
|
|
39
|
+
|
|
40
|
+
## Assessments
|
|
41
|
+
{{votes}}
|
|
42
|
+
|
|
43
|
+
Provide a comprehensive final recommendation that incorporates the best ideas.`;
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Satisfaction Detection
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Default list of indicators that suggest the critic is satisfied.
|
|
49
|
+
*/
|
|
50
|
+
const SATISFACTION_INDICATORS = [
|
|
51
|
+
'looks good',
|
|
52
|
+
'looks great',
|
|
53
|
+
'well done',
|
|
54
|
+
'no major issues',
|
|
55
|
+
'no significant issues',
|
|
56
|
+
'no critical issues',
|
|
57
|
+
'satisfied',
|
|
58
|
+
'approved',
|
|
59
|
+
'no changes needed',
|
|
60
|
+
'ready for',
|
|
61
|
+
'excellent work',
|
|
62
|
+
'solid implementation',
|
|
63
|
+
'meets requirements',
|
|
64
|
+
'lgtm',
|
|
65
|
+
'ship it',
|
|
66
|
+
];
|
|
67
|
+
/**
|
|
68
|
+
* Default function to detect if a critique indicates approval.
|
|
69
|
+
*/
|
|
70
|
+
function defaultIsApproved(critique) {
|
|
71
|
+
const lower = critique.toLowerCase();
|
|
72
|
+
return SATISFACTION_INDICATORS.some((indicator) => lower.includes(indicator));
|
|
73
|
+
}
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// PatternExecutor Class
|
|
76
|
+
// ============================================================================
|
|
77
|
+
/**
|
|
78
|
+
* Orchestrates multi-agent workflows using various execution patterns.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const executor = new PatternExecutor(routerEngine, logger);
|
|
83
|
+
*
|
|
84
|
+
* // Sequential pipeline
|
|
85
|
+
* const result = await executor.executeSequential([
|
|
86
|
+
* { role: 'coder', taskTemplate: 'Implement: {{input}}' },
|
|
87
|
+
* { role: 'reviewer', taskTemplate: 'Review this code: {{previousOutput}}' },
|
|
88
|
+
* ], 'Create a sorting function');
|
|
89
|
+
*
|
|
90
|
+
* // Parallel comparison
|
|
91
|
+
* const comparison = await executor.executeParallel(
|
|
92
|
+
* ['coder', 'researcher'],
|
|
93
|
+
* 'What are the best practices for error handling?'
|
|
94
|
+
* );
|
|
95
|
+
*
|
|
96
|
+
* // Critic loop
|
|
97
|
+
* const improved = await executor.executeCriticLoop(
|
|
98
|
+
* 'coder',
|
|
99
|
+
* 'critic',
|
|
100
|
+
* 'Write a REST API endpoint',
|
|
101
|
+
* { maxIterations: 3 }
|
|
102
|
+
* );
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export class PatternExecutor {
|
|
106
|
+
router;
|
|
107
|
+
logger;
|
|
108
|
+
constructor(router, logger) {
|
|
109
|
+
this.router = router;
|
|
110
|
+
this.logger = logger;
|
|
111
|
+
}
|
|
112
|
+
// ==========================================================================
|
|
113
|
+
// Sequential Pipeline
|
|
114
|
+
// ==========================================================================
|
|
115
|
+
/**
|
|
116
|
+
* Execute a sequential pipeline of agents.
|
|
117
|
+
*
|
|
118
|
+
* Each agent's output becomes input to the next. Task templates can use
|
|
119
|
+
* placeholders:
|
|
120
|
+
* - `{{input}}` - The original input or previous step's output
|
|
121
|
+
* - `{{previousOutput}}` - Alias for input from previous step
|
|
122
|
+
*
|
|
123
|
+
* @param steps - Array of step definitions with roles and task templates
|
|
124
|
+
* @param initialInput - Initial input to the first step
|
|
125
|
+
* @returns Promise resolving to SequentialResult with all step outputs
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const result = await executor.executeSequential([
|
|
130
|
+
* { role: 'coder', taskTemplate: '{{input}}' },
|
|
131
|
+
* { role: 'reviewer', taskTemplate: 'Review: {{previousOutput}}' },
|
|
132
|
+
* { role: 'coder', taskTemplate: 'Fix issues: {{previousOutput}}' },
|
|
133
|
+
* ], 'Write a function to validate email addresses');
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
async executeSequential(steps, initialInput) {
|
|
137
|
+
const startTime = Date.now();
|
|
138
|
+
const traceId = generateTraceId();
|
|
139
|
+
this.logger.info('Starting sequential pipeline', {
|
|
140
|
+
traceId,
|
|
141
|
+
stepCount: steps.length,
|
|
142
|
+
roles: steps.map((s) => s.role),
|
|
143
|
+
inputPreview: this.truncate(initialInput, 100),
|
|
144
|
+
});
|
|
145
|
+
const results = [];
|
|
146
|
+
let currentInput = initialInput;
|
|
147
|
+
for (const [i, step] of steps.entries()) {
|
|
148
|
+
const stepNumber = i + 1;
|
|
149
|
+
this.logger.debug('Executing sequential step', {
|
|
150
|
+
traceId,
|
|
151
|
+
step: stepNumber,
|
|
152
|
+
role: step.role,
|
|
153
|
+
});
|
|
154
|
+
// Apply transform if provided
|
|
155
|
+
const transformedInput = step.transform
|
|
156
|
+
? step.transform(currentInput)
|
|
157
|
+
: currentInput;
|
|
158
|
+
// Build task from template
|
|
159
|
+
const task = this.interpolateTemplate(step.taskTemplate, {
|
|
160
|
+
input: transformedInput,
|
|
161
|
+
previousOutput: transformedInput,
|
|
162
|
+
});
|
|
163
|
+
// Invoke the agent
|
|
164
|
+
const response = await this.router.invokeAgent({
|
|
165
|
+
role: step.role,
|
|
166
|
+
task,
|
|
167
|
+
});
|
|
168
|
+
results.push(response);
|
|
169
|
+
// Extract text content for next step
|
|
170
|
+
currentInput = this.extractText(response);
|
|
171
|
+
this.logger.debug('Sequential step completed', {
|
|
172
|
+
traceId,
|
|
173
|
+
step: stepNumber,
|
|
174
|
+
role: step.role,
|
|
175
|
+
outputPreview: this.truncate(currentInput, 100),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const totalDurationMs = Date.now() - startTime;
|
|
179
|
+
this.logger.info('Sequential pipeline completed', {
|
|
180
|
+
traceId,
|
|
181
|
+
stepCount: steps.length,
|
|
182
|
+
totalDurationMs,
|
|
183
|
+
outputPreview: this.truncate(currentInput, 100),
|
|
184
|
+
});
|
|
185
|
+
return {
|
|
186
|
+
pattern: 'sequential',
|
|
187
|
+
steps: results,
|
|
188
|
+
finalOutput: currentInput,
|
|
189
|
+
totalDurationMs,
|
|
190
|
+
traceId,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// ==========================================================================
|
|
194
|
+
// Parallel Comparison
|
|
195
|
+
// ==========================================================================
|
|
196
|
+
/**
|
|
197
|
+
* Execute the same task through multiple agents in parallel.
|
|
198
|
+
*
|
|
199
|
+
* All agents receive the same task and run concurrently. Results are
|
|
200
|
+
* collected for comparison. Errors for individual agents don't fail
|
|
201
|
+
* the entire operation.
|
|
202
|
+
*
|
|
203
|
+
* @param roles - Array of role names to invoke
|
|
204
|
+
* @param task - The task to send to all agents
|
|
205
|
+
* @returns Promise resolving to ParallelResult with all agent responses
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* const result = await executor.executeParallel(
|
|
210
|
+
* ['coder', 'researcher', 'critic'],
|
|
211
|
+
* 'What is the best approach to implement caching?'
|
|
212
|
+
* );
|
|
213
|
+
*
|
|
214
|
+
* for (const [role, response] of result.responses) {
|
|
215
|
+
* console.log(`${role}: ${extractText(response)}`);
|
|
216
|
+
* }
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
async executeParallel(roles, task) {
|
|
220
|
+
const startTime = Date.now();
|
|
221
|
+
const traceId = generateTraceId();
|
|
222
|
+
this.logger.info('Starting parallel comparison', {
|
|
223
|
+
traceId,
|
|
224
|
+
roles,
|
|
225
|
+
taskPreview: this.truncate(task, 100),
|
|
226
|
+
});
|
|
227
|
+
const responses = new Map();
|
|
228
|
+
const errors = new Map();
|
|
229
|
+
// Execute all agents in parallel
|
|
230
|
+
const promises = roles.map(async (role) => {
|
|
231
|
+
try {
|
|
232
|
+
const response = await this.router.invokeAgent({ role, task });
|
|
233
|
+
return { role, status: 'fulfilled', response };
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
237
|
+
return { role, status: 'rejected', error: err };
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
const results = await Promise.allSettled(promises);
|
|
241
|
+
// Process results
|
|
242
|
+
for (const result of results) {
|
|
243
|
+
if (result.status === 'fulfilled') {
|
|
244
|
+
const { role, status, response, error } = result.value;
|
|
245
|
+
if (status === 'fulfilled') {
|
|
246
|
+
responses.set(role, response);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
errors.set(role, error);
|
|
250
|
+
this.logger.error('Parallel agent failed', {
|
|
251
|
+
traceId,
|
|
252
|
+
role,
|
|
253
|
+
errorMessage: error.message,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
// This shouldn't happen since we catch errors in the promise
|
|
259
|
+
this.logger.error('Unexpected error in parallel execution', {
|
|
260
|
+
traceId,
|
|
261
|
+
reason: result.reason,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const totalDurationMs = Date.now() - startTime;
|
|
266
|
+
this.logger.info('Parallel comparison completed', {
|
|
267
|
+
traceId,
|
|
268
|
+
totalRoles: roles.length,
|
|
269
|
+
successfulRoles: responses.size,
|
|
270
|
+
failedRoles: errors.size,
|
|
271
|
+
totalDurationMs,
|
|
272
|
+
});
|
|
273
|
+
return {
|
|
274
|
+
pattern: 'parallel',
|
|
275
|
+
responses,
|
|
276
|
+
errors,
|
|
277
|
+
totalDurationMs,
|
|
278
|
+
traceId,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
// ==========================================================================
|
|
282
|
+
// Generator-Critic Loop
|
|
283
|
+
// ==========================================================================
|
|
284
|
+
/**
|
|
285
|
+
* Execute a generator-critic improvement loop.
|
|
286
|
+
*
|
|
287
|
+
* The generator creates an initial response, then the critic reviews it.
|
|
288
|
+
* If the critic identifies issues, the generator improves based on feedback.
|
|
289
|
+
* This continues until the critic approves or max iterations is reached.
|
|
290
|
+
*
|
|
291
|
+
* @param generatorRole - Role for generating content
|
|
292
|
+
* @param criticRole - Role for critiquing content
|
|
293
|
+
* @param task - Initial task for the generator
|
|
294
|
+
* @param options - Optional configuration for the loop
|
|
295
|
+
* @returns Promise resolving to CriticLoopResult with iteration history
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* ```typescript
|
|
299
|
+
* const result = await executor.executeCriticLoop(
|
|
300
|
+
* 'coder',
|
|
301
|
+
* 'critic',
|
|
302
|
+
* 'Write a function to parse JSON with error handling',
|
|
303
|
+
* { maxIterations: 3 }
|
|
304
|
+
* );
|
|
305
|
+
*
|
|
306
|
+
* if (result.approved) {
|
|
307
|
+
* console.log('Critic approved the final version');
|
|
308
|
+
* }
|
|
309
|
+
* console.log(`Completed in ${result.iterations} iterations`);
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
async executeCriticLoop(generatorRole, criticRole, task, options = {}) {
|
|
313
|
+
const startTime = Date.now();
|
|
314
|
+
const traceId = generateTraceId();
|
|
315
|
+
const maxIterations = options.maxIterations ?? 3;
|
|
316
|
+
const isApprovedFn = options.isApproved ?? defaultIsApproved;
|
|
317
|
+
const critiqueTemplate = options.critiqueTaskTemplate ?? DEFAULT_CRITIQUE_TEMPLATE;
|
|
318
|
+
const improvementTemplate = options.improvementTaskTemplate ?? DEFAULT_IMPROVEMENT_TEMPLATE;
|
|
319
|
+
this.logger.info('Starting critic loop', {
|
|
320
|
+
traceId,
|
|
321
|
+
generatorRole,
|
|
322
|
+
criticRole,
|
|
323
|
+
maxIterations,
|
|
324
|
+
taskPreview: this.truncate(task, 100),
|
|
325
|
+
});
|
|
326
|
+
const history = [];
|
|
327
|
+
let currentTask = task;
|
|
328
|
+
let approved = false;
|
|
329
|
+
let finalResponse;
|
|
330
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
331
|
+
const iteration = i + 1;
|
|
332
|
+
this.logger.debug('Critic loop iteration starting', {
|
|
333
|
+
traceId,
|
|
334
|
+
iteration,
|
|
335
|
+
maxIterations,
|
|
336
|
+
});
|
|
337
|
+
// Generate
|
|
338
|
+
const generation = await this.router.invokeAgent({
|
|
339
|
+
role: generatorRole,
|
|
340
|
+
task: currentTask,
|
|
341
|
+
});
|
|
342
|
+
const generatedContent = this.extractText(generation);
|
|
343
|
+
finalResponse = generation;
|
|
344
|
+
// Critique
|
|
345
|
+
const critiqueTask = this.interpolateTemplate(critiqueTemplate, {
|
|
346
|
+
content: generatedContent,
|
|
347
|
+
});
|
|
348
|
+
const critique = await this.router.invokeAgent({
|
|
349
|
+
role: criticRole,
|
|
350
|
+
task: critiqueTask,
|
|
351
|
+
});
|
|
352
|
+
const critiqueContent = this.extractText(critique);
|
|
353
|
+
approved = isApprovedFn(critiqueContent);
|
|
354
|
+
history.push({
|
|
355
|
+
iteration,
|
|
356
|
+
generation,
|
|
357
|
+
critique,
|
|
358
|
+
approved,
|
|
359
|
+
});
|
|
360
|
+
this.logger.debug('Critic loop iteration completed', {
|
|
361
|
+
traceId,
|
|
362
|
+
iteration,
|
|
363
|
+
approved,
|
|
364
|
+
critiquePreview: this.truncate(critiqueContent, 100),
|
|
365
|
+
});
|
|
366
|
+
// Stop if approved
|
|
367
|
+
if (approved) {
|
|
368
|
+
this.logger.info('Critic loop: approval received', {
|
|
369
|
+
traceId,
|
|
370
|
+
iteration,
|
|
371
|
+
});
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
// Prepare improvement task for next iteration
|
|
375
|
+
if (i < maxIterations - 1) {
|
|
376
|
+
currentTask = this.interpolateTemplate(improvementTemplate, {
|
|
377
|
+
critique: critiqueContent,
|
|
378
|
+
original: generatedContent,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
const totalDurationMs = Date.now() - startTime;
|
|
383
|
+
this.logger.info('Critic loop completed', {
|
|
384
|
+
traceId,
|
|
385
|
+
iterations: history.length,
|
|
386
|
+
approved,
|
|
387
|
+
totalDurationMs,
|
|
388
|
+
});
|
|
389
|
+
// This should never be undefined, but TypeScript needs the check
|
|
390
|
+
if (!finalResponse) {
|
|
391
|
+
throw new Error('No generation was produced in critic loop');
|
|
392
|
+
}
|
|
393
|
+
return {
|
|
394
|
+
pattern: 'critic-loop',
|
|
395
|
+
iterations: history.length,
|
|
396
|
+
finalResponse,
|
|
397
|
+
history,
|
|
398
|
+
approved,
|
|
399
|
+
finalOutput: this.extractText(finalResponse),
|
|
400
|
+
totalDurationMs,
|
|
401
|
+
traceId,
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
// ==========================================================================
|
|
405
|
+
// Consensus Building
|
|
406
|
+
// ==========================================================================
|
|
407
|
+
/**
|
|
408
|
+
* Execute a consensus building workflow.
|
|
409
|
+
*
|
|
410
|
+
* Three phases:
|
|
411
|
+
* 1. Proposals: All roles respond to the initial question
|
|
412
|
+
* 2. Voting: Each role evaluates all proposals
|
|
413
|
+
* 3. Synthesis: A designated role synthesizes a final recommendation
|
|
414
|
+
*
|
|
415
|
+
* @param roles - Array of role names to participate
|
|
416
|
+
* @param question - The question or decision to reach consensus on
|
|
417
|
+
* @param options - Optional configuration for the workflow
|
|
418
|
+
* @returns Promise resolving to ConsensusResult with all phases
|
|
419
|
+
*
|
|
420
|
+
* @example
|
|
421
|
+
* ```typescript
|
|
422
|
+
* const result = await executor.executeConsensus(
|
|
423
|
+
* ['coder', 'critic', 'designer'],
|
|
424
|
+
* 'What is the best architecture for a real-time chat application?',
|
|
425
|
+
* { synthesizeRole: 'coder' }
|
|
426
|
+
* );
|
|
427
|
+
*
|
|
428
|
+
* console.log('Final recommendation:', result.finalOutput);
|
|
429
|
+
* ```
|
|
430
|
+
*/
|
|
431
|
+
async executeConsensus(roles, question, options = {}) {
|
|
432
|
+
const startTime = Date.now();
|
|
433
|
+
const traceId = generateTraceId();
|
|
434
|
+
const firstRole = roles[0];
|
|
435
|
+
if (firstRole === undefined || firstRole === '') {
|
|
436
|
+
throw new Error('Cannot execute consensus with empty roles array');
|
|
437
|
+
}
|
|
438
|
+
const synthesizeRole = options.synthesizeRole ?? firstRole;
|
|
439
|
+
const voteTemplate = options.voteTaskTemplate ?? DEFAULT_VOTE_TEMPLATE;
|
|
440
|
+
const synthesisTemplate = options.synthesisTaskTemplate ?? DEFAULT_SYNTHESIS_TEMPLATE;
|
|
441
|
+
this.logger.info('Starting consensus building', {
|
|
442
|
+
traceId,
|
|
443
|
+
roles,
|
|
444
|
+
synthesizeRole,
|
|
445
|
+
questionPreview: this.truncate(question, 100),
|
|
446
|
+
});
|
|
447
|
+
// Phase 1: Collect proposals
|
|
448
|
+
this.logger.debug('Consensus phase 1: Collecting proposals', { traceId });
|
|
449
|
+
const proposalsResult = await this.executeParallel(roles, question);
|
|
450
|
+
// Phase 2: Have each agent vote/comment on others' proposals
|
|
451
|
+
this.logger.debug('Consensus phase 2: Voting on proposals', { traceId });
|
|
452
|
+
const proposalText = this.formatProposals(proposalsResult.responses);
|
|
453
|
+
const voteTask = this.interpolateTemplate(voteTemplate, {
|
|
454
|
+
proposals: proposalText,
|
|
455
|
+
});
|
|
456
|
+
const votesResult = await this.executeParallel(roles, voteTask);
|
|
457
|
+
// Phase 3: Synthesize
|
|
458
|
+
this.logger.debug('Consensus phase 3: Synthesizing final recommendation', {
|
|
459
|
+
traceId,
|
|
460
|
+
});
|
|
461
|
+
const votesText = this.formatVotes(votesResult.responses);
|
|
462
|
+
const synthesisTask = this.interpolateTemplate(synthesisTemplate, {
|
|
463
|
+
proposals: proposalText,
|
|
464
|
+
votes: votesText,
|
|
465
|
+
});
|
|
466
|
+
const synthesis = await this.router.invokeAgent({
|
|
467
|
+
role: synthesizeRole,
|
|
468
|
+
task: synthesisTask,
|
|
469
|
+
});
|
|
470
|
+
const totalDurationMs = Date.now() - startTime;
|
|
471
|
+
this.logger.info('Consensus building completed', {
|
|
472
|
+
traceId,
|
|
473
|
+
proposalCount: proposalsResult.responses.size,
|
|
474
|
+
voteCount: votesResult.responses.size,
|
|
475
|
+
totalDurationMs,
|
|
476
|
+
});
|
|
477
|
+
return {
|
|
478
|
+
pattern: 'consensus',
|
|
479
|
+
proposals: proposalsResult.responses,
|
|
480
|
+
votes: votesResult.responses,
|
|
481
|
+
synthesis,
|
|
482
|
+
finalOutput: this.extractText(synthesis),
|
|
483
|
+
totalDurationMs,
|
|
484
|
+
traceId,
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
// ==========================================================================
|
|
488
|
+
// Utility Methods
|
|
489
|
+
// ==========================================================================
|
|
490
|
+
/**
|
|
491
|
+
* Extract text content from an agent response.
|
|
492
|
+
*
|
|
493
|
+
* @param response - Agent response to extract text from
|
|
494
|
+
* @returns Concatenated text content from all text blocks
|
|
495
|
+
*/
|
|
496
|
+
extractText(response) {
|
|
497
|
+
return response.content
|
|
498
|
+
.filter((block) => block.type === 'text' && typeof block.text === 'string')
|
|
499
|
+
.map((block) => block.text)
|
|
500
|
+
.join('\n');
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Interpolate a template string with variable values.
|
|
504
|
+
*
|
|
505
|
+
* @param template - Template string with {{variable}} placeholders
|
|
506
|
+
* @param variables - Object mapping variable names to values
|
|
507
|
+
* @returns Interpolated string
|
|
508
|
+
*/
|
|
509
|
+
interpolateTemplate(template, variables) {
|
|
510
|
+
let result = template;
|
|
511
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
512
|
+
result = result.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
|
|
513
|
+
}
|
|
514
|
+
return result;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Format proposals for display in templates.
|
|
518
|
+
*
|
|
519
|
+
* @param proposals - Map of role names to responses
|
|
520
|
+
* @returns Formatted string with numbered proposals
|
|
521
|
+
*/
|
|
522
|
+
formatProposals(proposals) {
|
|
523
|
+
let index = 1;
|
|
524
|
+
const parts = [];
|
|
525
|
+
for (const [role, response] of proposals) {
|
|
526
|
+
parts.push(`## Proposal ${String(index)} (${role})\n${this.extractText(response)}`);
|
|
527
|
+
index++;
|
|
528
|
+
}
|
|
529
|
+
return parts.join('\n\n');
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* Format votes/assessments for display in templates.
|
|
533
|
+
*
|
|
534
|
+
* @param votes - Map of role names to vote responses
|
|
535
|
+
* @returns Formatted string with role assessments
|
|
536
|
+
*/
|
|
537
|
+
formatVotes(votes) {
|
|
538
|
+
const parts = [];
|
|
539
|
+
for (const [role, response] of votes) {
|
|
540
|
+
parts.push(`### ${role}'s assessment:\n${this.extractText(response)}`);
|
|
541
|
+
}
|
|
542
|
+
return parts.join('\n\n');
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Truncate a string to a maximum length.
|
|
546
|
+
*
|
|
547
|
+
* @param str - String to truncate
|
|
548
|
+
* @param maxLength - Maximum length before truncation
|
|
549
|
+
* @returns Truncated string with ellipsis if needed
|
|
550
|
+
*/
|
|
551
|
+
truncate(str, maxLength) {
|
|
552
|
+
if (str.length <= maxLength) {
|
|
553
|
+
return str;
|
|
554
|
+
}
|
|
555
|
+
return str.substring(0, maxLength) + '...';
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
// ============================================================================
|
|
559
|
+
// Factory Function
|
|
560
|
+
// ============================================================================
|
|
561
|
+
/**
|
|
562
|
+
* Create a PatternExecutor instance.
|
|
563
|
+
*
|
|
564
|
+
* @param router - RouterEngine for agent invocations
|
|
565
|
+
* @param logger - Logger for observability
|
|
566
|
+
* @returns Configured PatternExecutor instance
|
|
567
|
+
*/
|
|
568
|
+
export function createPatternExecutor(router, logger) {
|
|
569
|
+
return new PatternExecutor(router, logger);
|
|
570
|
+
}
|
|
571
|
+
//# sourceMappingURL=pattern-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-executor.js","sourceRoot":"","sources":["../../src/router/pattern-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Role Resolver
|
|
3
|
+
*
|
|
4
|
+
* Maps role names to their configured agent settings by merging
|
|
5
|
+
* role-specific configuration with default values.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentConfig, Config } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* RoleResolver maps role names to fully resolved AgentConfig objects.
|
|
10
|
+
*
|
|
11
|
+
* It handles:
|
|
12
|
+
* - Looking up role configurations by name
|
|
13
|
+
* - Merging role-specific overrides with defaults
|
|
14
|
+
* - Providing helpful error messages for unknown roles
|
|
15
|
+
* - Hot reload support via updateConfig()
|
|
16
|
+
*/
|
|
17
|
+
export declare class RoleResolver {
|
|
18
|
+
private roles;
|
|
19
|
+
private defaults;
|
|
20
|
+
/**
|
|
21
|
+
* Create a new RoleResolver with the given configuration.
|
|
22
|
+
*
|
|
23
|
+
* @param config - The full AgentRouter configuration
|
|
24
|
+
*/
|
|
25
|
+
constructor(config: Config);
|
|
26
|
+
/**
|
|
27
|
+
* Resolve a role name to its full agent configuration.
|
|
28
|
+
*
|
|
29
|
+
* Merges the role's specific settings with default values, where
|
|
30
|
+
* role-specific values take precedence over defaults.
|
|
31
|
+
*
|
|
32
|
+
* @param role - The role name to resolve (e.g., "coder", "critic")
|
|
33
|
+
* @returns The fully resolved AgentConfig
|
|
34
|
+
* @throws Error if the role is not found in configuration
|
|
35
|
+
*/
|
|
36
|
+
resolve(role: string): AgentConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a role exists in the configuration.
|
|
39
|
+
*
|
|
40
|
+
* @param role - The role name to check
|
|
41
|
+
* @returns true if the role exists, false otherwise
|
|
42
|
+
*/
|
|
43
|
+
hasRole(role: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Get a list of all configured role names.
|
|
46
|
+
*
|
|
47
|
+
* @returns Array of role names
|
|
48
|
+
*/
|
|
49
|
+
listRoles(): string[];
|
|
50
|
+
/**
|
|
51
|
+
* Update the resolver with a new configuration.
|
|
52
|
+
*
|
|
53
|
+
* Used for hot reload when the config file changes.
|
|
54
|
+
*
|
|
55
|
+
* @param config - The new configuration to use
|
|
56
|
+
*/
|
|
57
|
+
updateConfig(config: Config): void;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=role-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-resolver.d.ts","sourceRoot":"","sources":["../../src/router/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,EAAiB,MAAM,aAAa,CAAC;AAElF;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;OAIG;gBACS,MAAM,EAAE,MAAM;IAK1B;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAmClC;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;;;OAIG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAInC"}
|