create-byan-agent 2.23.0 → 2.26.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/CHANGELOG.md +230 -0
- package/README.md +9 -12
- package/install/bin/create-byan-agent-v2.js +29 -169
- package/install/lib/agent-generator.js +5 -5
- package/install/lib/byan-web-integration.js +1 -1
- package/install/lib/claude-native-setup.js +1 -1
- package/install/lib/phase2-chat.js +3 -10
- package/install/lib/platforms/claude-code.js +2 -2
- package/install/lib/platforms/index.js +0 -2
- package/install/lib/project-agents-generator.js +3 -3
- package/install/lib/staging-consent.js +3 -3
- package/install/lib/subagent-generator.js +3 -3
- package/install/lib/yanstaller/agent-launcher.js +1 -27
- package/install/lib/yanstaller/detector.js +4 -4
- package/install/lib/yanstaller/installer.js +0 -2
- package/install/lib/yanstaller/interviewer.js +1 -1
- package/install/lib/yanstaller/platform-selector.js +1 -13
- package/install/package.json +1 -1
- package/install/src/byan-v2/context/session-state.js +2 -2
- package/install/src/byan-v2/index.js +2 -6
- package/install/src/byan-v2/orchestrator/generation-state.js +4 -4
- package/install/src/webui/api.js +0 -2
- package/install/src/webui/chat/bridge.js +1 -13
- package/install/src/webui/chat/cli-detector.js +0 -23
- package/install/src/webui/public/app.js +1 -3
- package/install/src/webui/public/chat.html +0 -2
- package/install/src/webui/public/chat.js +0 -1
- package/install/src/webui/public/index.html +2 -2
- package/install/templates/.claude/CLAUDE.md +13 -2
- package/install/templates/.claude/agents/bmad-byan.md +1 -1
- package/install/templates/.claude/hooks/autobench-stop-guard.js +286 -0
- package/install/templates/.claude/hooks/drain-advisory.js +85 -0
- package/install/templates/.claude/hooks/fact-check-absolutes.js +1 -61
- package/install/templates/.claude/hooks/fact-check-claims.js +69 -0
- package/install/templates/.claude/hooks/fd-response-check.js +37 -46
- package/install/templates/.claude/hooks/inject-soul.js +64 -25
- package/install/templates/.claude/hooks/leantime-fd-sync.js +216 -0
- package/install/templates/.claude/hooks/lib/autobench-config.json +81 -0
- package/install/templates/.claude/hooks/lib/autobench-fc-enrich.js +251 -0
- package/install/templates/.claude/hooks/lib/autobench-ledger-report.js +253 -0
- package/install/templates/.claude/hooks/lib/autobench-runtime.js +199 -0
- package/install/templates/.claude/hooks/lib/fact-check-core.js +69 -0
- package/install/templates/.claude/hooks/lib/failure-detector.js +18 -4
- package/install/templates/.claude/hooks/lib/transcript-read.js +137 -0
- package/install/templates/.claude/hooks/soul-memory-check.js +49 -25
- package/install/templates/.claude/hooks/soul-memory-triggers.js +27 -8
- package/install/templates/.claude/hooks/stage-to-byan.js +25 -7
- package/install/templates/.claude/hooks/strict-stop-guard.js +4 -16
- package/install/templates/.claude/rules/benchmark.md +251 -0
- package/install/templates/.claude/rules/byan-agents.md +0 -1
- package/install/templates/.claude/rules/byan-api.md +64 -0
- package/install/templates/.claude/rules/fact-check.md +1 -1
- package/install/templates/.claude/rules/strict-mode.md +10 -9
- package/install/templates/.claude/settings.json +16 -0
- package/install/templates/.claude/skills/byan-benchmark/SKILL.md +159 -0
- package/install/templates/.claude/skills/byan-byan/SKILL.md +73 -12
- package/install/templates/.claude/skills/byan-fact-check/SKILL.md +1 -1
- package/install/templates/.claude/skills/byan-hermes-dispatch/SKILL.md +5 -6
- package/install/templates/.claude/skills/byan-insight/SKILL.md +56 -0
- package/install/templates/.claude/skills/byan-orchestrate/SKILL.md +11 -3
- package/install/templates/.claude/skills/byan-strict/SKILL.md +4 -1
- package/install/templates/.claude/workflows/INDEX.md +2 -1
- package/install/templates/.claude/workflows/byan-benchmark.js +328 -0
- package/install/templates/.claude/workflows/check-implementation-readiness.js +1 -1
- package/install/templates/_byan/_config/agent-manifest.csv +1 -1
- package/install/templates/_byan/_config/autobench.yaml +510 -0
- package/install/templates/_byan/_config/strict-mode.yaml +9 -3
- package/install/templates/_byan/_config/workflow-manifest.csv +1 -0
- package/install/templates/_byan/agent/byan/byan.md +1 -3
- package/install/templates/_byan/agent/byan-flat/byan.md +1 -3
- package/install/templates/_byan/agent/byan-test/byan-test.md +2 -2
- package/install/templates/_byan/agent/byan-test-flat/byan-test.md +2 -2
- package/install/templates/_byan/agent/byan.optimized/byan.optimized.md +2 -2
- package/install/templates/_byan/agent/byan.optimized-v2/byan.optimized-v2.md +2 -2
- package/install/templates/_byan/agent/claude/claude.md +0 -2
- package/install/templates/_byan/agent/codex/codex.md +0 -2
- package/install/templates/_byan/agent/rachid/rachid.md +2 -10
- package/install/templates/_byan/agent/rachid-flat/rachid.md +2 -11
- package/install/templates/_byan/agent/turbo-whisper/turbo-whisper.md +2 -5
- package/install/templates/_byan/agent/turbo-whisper-integration/turbo-whisper-integration.md +5 -13
- package/install/templates/_byan/agent/yanstaller/yanstaller.md +2 -24
- package/install/templates/_byan/config.yaml +0 -1
- package/install/templates/_byan/core/activation/soul-activation.md +3 -3
- package/install/templates/_byan/mcp/byan-mcp-server/bin/byan-insight-digest.js +31 -0
- package/install/templates/_byan/mcp/byan-mcp-server/bin/byan-sync-rules.js +20 -4
- package/install/templates/_byan/mcp/byan-mcp-server/lib/advisory-autofeed.js +96 -0
- package/install/templates/_byan/mcp/byan-mcp-server/lib/index-generator.js +1 -1
- package/install/templates/_byan/mcp/byan-mcp-server/lib/insight-harvest.js +220 -0
- package/install/templates/_byan/mcp/byan-mcp-server/lib/kanban.js +6 -3
- package/install/templates/_byan/mcp/byan-mcp-server/lib/leantime-fd-core.js +205 -0
- package/install/templates/_byan/mcp/byan-mcp-server/lib/leantime-sync.js +415 -0
- package/install/templates/_byan/mcp/byan-mcp-server/lib/outcome-buffer.js +64 -0
- package/install/templates/_byan/mcp/byan-mcp-server/lib/precommit-gate.js +1 -1
- package/install/templates/_byan/mcp/byan-mcp-server/lib/strict-activation.js +1 -1
- package/install/templates/_byan/mcp/byan-mcp-server/lib/strict-mode.js +8 -0
- package/install/templates/_byan/mcp/byan-mcp-server/lib/sync-rules.js +172 -23
- package/install/templates/_byan/mcp/byan-mcp-server/lib/workflows-generator.js +1 -0
- package/install/templates/_byan/mcp/byan-mcp-server/server.js +262 -81
- package/install/templates/_byan/worker/launchers/README.md +4 -24
- package/install/templates/_byan/worker/workers.md +8 -9
- package/install/templates/_byan/workflow/simple/bmb/byan-benchmark/workflow.md +86 -0
- package/install/templates/_byan/workflow/simple/byan/feature-workflow.md +2 -2
- package/install/templates/docs/leantime-integration.md +160 -0
- package/package.json +3 -7
- package/src/byan-v2/context/session-state.js +2 -2
- package/src/byan-v2/generation/mantra-validator.js +3 -3
- package/src/byan-v2/index.js +1 -5
- package/src/byan-v2/integration/voice-integration.js +1 -1
- package/src/byan-v2/orchestrator/generation-state.js +4 -4
- package/src/loadbalancer/loadbalancer.js +1 -1
- package/src/staging/staging.js +20 -6
- package/install/bin/build-copilot-stubs.js +0 -138
- package/install/lib/platforms/copilot-cli.js +0 -123
- package/install/lib/platforms/vscode.js +0 -51
- package/install/src/byan-v2/context/copilot-context.js +0 -79
- package/install/src/webui/chat/copilot-adapter.js +0 -68
- package/install/templates/.claude/agents/bmad-marc.md +0 -25
- package/install/templates/.claude/skills/byan-marc/SKILL.md +0 -20
- package/install/templates/.github/agents/bmad-agent-bmad-master.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmb-agent-builder.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmb-module-builder.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmb-workflow-builder.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-analyst.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-architect.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-dev.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-pm.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-quick-flow-solo-dev.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-quinn.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-sm.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-tech-writer.md +0 -16
- package/install/templates/.github/agents/bmad-agent-bmm-ux-designer.md +0 -16
- package/install/templates/.github/agents/bmad-agent-byan-test.md +0 -33
- package/install/templates/.github/agents/bmad-agent-byan-v2.md +0 -44
- package/install/templates/.github/agents/bmad-agent-byan.md +0 -1062
- package/install/templates/.github/agents/bmad-agent-carmack.md +0 -14
- package/install/templates/.github/agents/bmad-agent-cis-brainstorming-coach.md +0 -16
- package/install/templates/.github/agents/bmad-agent-cis-creative-problem-solver.md +0 -16
- package/install/templates/.github/agents/bmad-agent-cis-design-thinking-coach.md +0 -16
- package/install/templates/.github/agents/bmad-agent-cis-innovation-strategist.md +0 -16
- package/install/templates/.github/agents/bmad-agent-cis-presentation-master.md +0 -16
- package/install/templates/.github/agents/bmad-agent-cis-storyteller.md +0 -16
- package/install/templates/.github/agents/bmad-agent-claude.md +0 -49
- package/install/templates/.github/agents/bmad-agent-codex.md +0 -49
- package/install/templates/.github/agents/bmad-agent-drawio.md +0 -45
- package/install/templates/.github/agents/bmad-agent-fact-checker.md +0 -16
- package/install/templates/.github/agents/bmad-agent-forgeron.md +0 -15
- package/install/templates/.github/agents/bmad-agent-jimmy.md +0 -15
- package/install/templates/.github/agents/bmad-agent-marc.md +0 -49
- package/install/templates/.github/agents/bmad-agent-mike.md +0 -15
- package/install/templates/.github/agents/bmad-agent-patnote.md +0 -49
- package/install/templates/.github/agents/bmad-agent-rachid.md +0 -48
- package/install/templates/.github/agents/bmad-agent-skeptic.md +0 -16
- package/install/templates/.github/agents/bmad-agent-tao.md +0 -14
- package/install/templates/.github/agents/bmad-agent-tea-tea.md +0 -16
- package/install/templates/.github/agents/bmad-agent-test-dynamic.md +0 -22
- package/install/templates/.github/agents/bmad-agent-yanstaller-interview.md +0 -50
- package/install/templates/.github/agents/bmad-agent-yanstaller-phase2.md +0 -189
- package/install/templates/.github/agents/bmad-agent-yanstaller.md +0 -350
- package/install/templates/.github/agents/expert-merise-agile.md +0 -178
- package/install/templates/.github/agents/franck.md +0 -379
- package/install/templates/.github/agents/hermes.md +0 -575
- package/install/templates/.github/extensions/byan-staging/extension.mjs +0 -169
- package/install/templates/.github/extensions/byan-staging/package.json +0 -8
- package/install/templates/_byan/agent/marc/marc-soul.md +0 -47
- package/install/templates/_byan/agent/marc/marc-tao.md +0 -77
- package/install/templates/_byan/agent/marc/marc.md +0 -324
- package/install/templates/_byan/agent/marc-flat/marc.md +0 -387
- package/install/templates/_byan/mcp/byan-mcp-server/lib/copilot.js +0 -148
- package/install/templates/_byan/worker/launchers/launch-yanstaller-copilot.md +0 -173
- package/install/templates/workers/cost-optimizer.js +0 -169
- package/src/byan-v2/context/copilot-context.js +0 -79
- package/src/core/dispatcher/execution-router.js +0 -66
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cost Optimizer Worker
|
|
3
|
-
*
|
|
4
|
-
* Automatically routes LLM calls to optimal model based on complexity.
|
|
5
|
-
* Integrates with byan-copilot-router for cost optimization.
|
|
6
|
-
*
|
|
7
|
-
* @module workers/cost-optimizer
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const { CopilotRouter } = require('byan-copilot-router');
|
|
11
|
-
|
|
12
|
-
class CostOptimizerWorker {
|
|
13
|
-
constructor(config = {}) {
|
|
14
|
-
this.router = new CopilotRouter({
|
|
15
|
-
workerThreshold: config.workerThreshold || 30,
|
|
16
|
-
agentThreshold: config.agentThreshold || 60,
|
|
17
|
-
fallbackEnabled: config.fallbackEnabled !== false,
|
|
18
|
-
maxRetries: config.maxRetries || 3,
|
|
19
|
-
clientOptions: {
|
|
20
|
-
testMode: config.testMode !== false // Default to test mode
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
this.role = 'worker';
|
|
25
|
-
this.model = 'auto'; // Auto-select based on complexity
|
|
26
|
-
this.verbose = config.verbose || false;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Execute task with automatic routing
|
|
31
|
-
*
|
|
32
|
-
* @param {Object} task - Task to execute
|
|
33
|
-
* @param {string} task.input - User prompt
|
|
34
|
-
* @param {string} task.type - Task type (simple/generate/analysis/reasoning)
|
|
35
|
-
* @param {number} [task.contextSize] - Context size in characters
|
|
36
|
-
* @param {number} [task.steps] - Number of steps
|
|
37
|
-
* @param {string} [task.outputFormat] - Output format (text/json/complex)
|
|
38
|
-
* @returns {Promise<Object>} Execution result
|
|
39
|
-
*/
|
|
40
|
-
async execute(task) {
|
|
41
|
-
if (this.verbose) {
|
|
42
|
-
console.log('[CostOptimizer] Routing task:', task.type);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
const result = await this.router.route({
|
|
47
|
-
input: task.input || task.prompt,
|
|
48
|
-
type: task.type || 'generate',
|
|
49
|
-
contextSize: task.contextSize || (task.context?.length || 0),
|
|
50
|
-
steps: task.steps,
|
|
51
|
-
outputFormat: task.outputFormat
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
if (this.verbose) {
|
|
55
|
-
console.log(`[CostOptimizer] Routed to: ${result.route}`);
|
|
56
|
-
console.log(`[CostOptimizer] Cost: $${result.cost.toFixed(6)}`);
|
|
57
|
-
console.log(`[CostOptimizer] Complexity: ${result.complexityScore.total}`);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
success: true,
|
|
62
|
-
content: result.content,
|
|
63
|
-
route: result.route,
|
|
64
|
-
model: result.model,
|
|
65
|
-
cost: result.cost,
|
|
66
|
-
tokens: result.tokens,
|
|
67
|
-
complexity: result.complexityScore.total
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
} catch (error) {
|
|
71
|
-
console.error('[CostOptimizer] Error:', error.message);
|
|
72
|
-
return {
|
|
73
|
-
success: false,
|
|
74
|
-
error: error.message
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Get routing statistics
|
|
81
|
-
*
|
|
82
|
-
* @returns {Object} Statistics with costs and savings
|
|
83
|
-
*/
|
|
84
|
-
getStatistics() {
|
|
85
|
-
return this.router.getTracker().getStatistics();
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Print cost summary
|
|
90
|
-
*/
|
|
91
|
-
printSummary() {
|
|
92
|
-
console.log(this.router.getTracker().printSummary());
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Export cost data
|
|
97
|
-
*
|
|
98
|
-
* @param {string} format - Format (json/csv)
|
|
99
|
-
* @returns {string} Exported data
|
|
100
|
-
*/
|
|
101
|
-
exportData(format = 'json') {
|
|
102
|
-
const tracker = this.router.getTracker();
|
|
103
|
-
return format === 'csv' ? tracker.exportCSV() : tracker.exportJSON();
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Reset statistics
|
|
108
|
-
*/
|
|
109
|
-
reset() {
|
|
110
|
-
this.router.getTracker().reset();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Cleanup resources
|
|
115
|
-
*/
|
|
116
|
-
async close() {
|
|
117
|
-
await this.router.close();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Get complexity score for a task without executing
|
|
122
|
-
*
|
|
123
|
-
* @param {Object} task - Task to analyze
|
|
124
|
-
* @returns {Object} Complexity score
|
|
125
|
-
*/
|
|
126
|
-
analyzeComplexity(task) {
|
|
127
|
-
return this.router.analyzer.calculateComplexity({
|
|
128
|
-
input: task.input || task.prompt,
|
|
129
|
-
type: task.type || 'generate',
|
|
130
|
-
contextSize: task.contextSize || 0,
|
|
131
|
-
steps: task.steps,
|
|
132
|
-
outputFormat: task.outputFormat
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
module.exports = CostOptimizerWorker;
|
|
138
|
-
|
|
139
|
-
// Example usage
|
|
140
|
-
if (require.main === module) {
|
|
141
|
-
(async () => {
|
|
142
|
-
console.log('🚀 Cost Optimizer Worker Demo\n');
|
|
143
|
-
|
|
144
|
-
const worker = new CostOptimizerWorker({ verbose: true });
|
|
145
|
-
|
|
146
|
-
// Simple task
|
|
147
|
-
console.log('1️⃣ Simple task:');
|
|
148
|
-
const r1 = await worker.execute({
|
|
149
|
-
input: 'Fix typo in code',
|
|
150
|
-
type: 'simple'
|
|
151
|
-
});
|
|
152
|
-
console.log('Result:', r1.success ? '✓' : '✗', '\n');
|
|
153
|
-
|
|
154
|
-
// Complex task
|
|
155
|
-
console.log('2️⃣ Complex task:');
|
|
156
|
-
const r2 = await worker.execute({
|
|
157
|
-
input: 'Design microservices architecture',
|
|
158
|
-
type: 'reasoning',
|
|
159
|
-
steps: 5
|
|
160
|
-
});
|
|
161
|
-
console.log('Result:', r2.success ? '✓' : '✗', '\n');
|
|
162
|
-
|
|
163
|
-
// Show statistics
|
|
164
|
-
console.log('📊 Statistics:');
|
|
165
|
-
worker.printSummary();
|
|
166
|
-
|
|
167
|
-
await worker.close();
|
|
168
|
-
})();
|
|
169
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const os = require('os');
|
|
3
|
-
const path = require('path');
|
|
4
|
-
|
|
5
|
-
function getCopilotContext() {
|
|
6
|
-
const context = {
|
|
7
|
-
projectRoot: getProjectRoot(),
|
|
8
|
-
userName: getUserName(),
|
|
9
|
-
workingDir: getWorkingDir(),
|
|
10
|
-
gitBranch: getGitBranch()
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
return context;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function getProjectRoot() {
|
|
17
|
-
if (process.env.GITHUB_WORKSPACE) {
|
|
18
|
-
return process.env.GITHUB_WORKSPACE;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (process.env.PWD) {
|
|
22
|
-
return process.env.PWD;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return process.cwd();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function getUserName() {
|
|
29
|
-
if (process.env.COPILOT_USER_NAME) {
|
|
30
|
-
return process.env.COPILOT_USER_NAME;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const projectRoot = getProjectRoot();
|
|
34
|
-
const configPath = path.join(projectRoot, '.github', 'copilot', 'config.yaml');
|
|
35
|
-
|
|
36
|
-
if (fs.existsSync(configPath)) {
|
|
37
|
-
try {
|
|
38
|
-
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
39
|
-
const userNameMatch = configContent.match(/user_name:\s*(.+)/);
|
|
40
|
-
if (userNameMatch && userNameMatch[1]) {
|
|
41
|
-
return userNameMatch[1].trim();
|
|
42
|
-
}
|
|
43
|
-
} catch (error) {
|
|
44
|
-
// Fallback to next option
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (process.env.USER) {
|
|
49
|
-
return process.env.USER;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
try {
|
|
53
|
-
return os.userInfo().username;
|
|
54
|
-
} catch (error) {
|
|
55
|
-
return 'unknown';
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function getWorkingDir() {
|
|
60
|
-
if (process.env.PWD) {
|
|
61
|
-
return process.env.PWD;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return process.cwd();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function getGitBranch() {
|
|
68
|
-
if (process.env.GITHUB_REF_NAME) {
|
|
69
|
-
return process.env.GITHUB_REF_NAME;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (process.env.GIT_BRANCH) {
|
|
73
|
-
return process.env.GIT_BRANCH;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return '';
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
module.exports = getCopilotContext;
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Execution strategy router.
|
|
3
|
-
*
|
|
4
|
-
* Decides WHERE a task runs (not which model). Four strategies, routed by
|
|
5
|
-
* complexity score and whether the task is parallelizable with siblings:
|
|
6
|
-
*
|
|
7
|
-
* main-thread score < 15
|
|
8
|
-
* agent-subagent-worktree score 15-39 + parallelizable = true
|
|
9
|
-
* mcp-worker-haiku score 15-39 + sequential
|
|
10
|
-
* main-thread-opus score >= 40
|
|
11
|
-
*
|
|
12
|
-
* Complementary to EconomicDispatcher (which picks the model).
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
class ExecutionRouter {
|
|
16
|
-
/**
|
|
17
|
-
* @param {{task?: string, complexity?: number, parallelizable?: boolean}} input
|
|
18
|
-
* @returns {{score: number, strategy: string, reasoning: string, parallelizable: boolean}}
|
|
19
|
-
*/
|
|
20
|
-
route(input = {}) {
|
|
21
|
-
const { task, complexity, parallelizable } = input;
|
|
22
|
-
|
|
23
|
-
const score =
|
|
24
|
-
typeof complexity === 'number'
|
|
25
|
-
? complexity
|
|
26
|
-
: Math.min(100, Math.floor((task?.length || 0) / 10));
|
|
27
|
-
|
|
28
|
-
const isPar = parallelizable === true;
|
|
29
|
-
|
|
30
|
-
if (score < 15) {
|
|
31
|
-
return {
|
|
32
|
-
score,
|
|
33
|
-
strategy: 'main-thread',
|
|
34
|
-
reasoning: `Score ${score} < 15. Inline in current context, no delegation overhead.`,
|
|
35
|
-
parallelizable: isPar,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (score < 40 && isPar) {
|
|
40
|
-
return {
|
|
41
|
-
score,
|
|
42
|
-
strategy: 'agent-subagent-worktree',
|
|
43
|
-
reasoning: `Score ${score} + parallelizable. Spawn Claude Code Agent tool with worktree isolation.`,
|
|
44
|
-
parallelizable: isPar,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (score < 40) {
|
|
49
|
-
return {
|
|
50
|
-
score,
|
|
51
|
-
strategy: 'mcp-worker-haiku',
|
|
52
|
-
reasoning: `Score ${score}, sequential. Delegate to lightweight Haiku worker via MCP.`,
|
|
53
|
-
parallelizable: isPar,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return {
|
|
58
|
-
score,
|
|
59
|
-
strategy: 'main-thread-opus',
|
|
60
|
-
reasoning: `Score ${score} >= 40. Complex task, keep in main thread with Opus reasoning.`,
|
|
61
|
-
parallelizable: isPar,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
module.exports = ExecutionRouter;
|