attocode 0.2.2 → 0.2.3
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 +103 -3
- package/dist/src/agent.d.ts +6 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +504 -49
- package/dist/src/agent.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +23 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/core/protocol/types.d.ts +8 -8
- package/dist/src/defaults.d.ts +6 -1
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +36 -2
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/integrations/agent-registry.d.ts +11 -0
- package/dist/src/integrations/agent-registry.d.ts.map +1 -1
- package/dist/src/integrations/agent-registry.js.map +1 -1
- package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
- package/dist/src/integrations/auto-compaction.js +5 -1
- package/dist/src/integrations/auto-compaction.js.map +1 -1
- package/dist/src/integrations/bash-policy.d.ts +33 -0
- package/dist/src/integrations/bash-policy.d.ts.map +1 -0
- package/dist/src/integrations/bash-policy.js +142 -0
- package/dist/src/integrations/bash-policy.js.map +1 -0
- package/dist/src/integrations/codebase-context.d.ts +5 -0
- package/dist/src/integrations/codebase-context.d.ts.map +1 -1
- package/dist/src/integrations/codebase-context.js +33 -0
- package/dist/src/integrations/codebase-context.js.map +1 -1
- package/dist/src/integrations/delegation-protocol.js +2 -2
- package/dist/src/integrations/delegation-protocol.js.map +1 -1
- package/dist/src/integrations/economics.d.ts +42 -0
- package/dist/src/integrations/economics.d.ts.map +1 -1
- package/dist/src/integrations/economics.js +130 -14
- package/dist/src/integrations/economics.js.map +1 -1
- package/dist/src/integrations/hierarchical-config.d.ts.map +1 -1
- package/dist/src/integrations/hierarchical-config.js +17 -0
- package/dist/src/integrations/hierarchical-config.js.map +1 -1
- package/dist/src/integrations/index.d.ts +3 -1
- package/dist/src/integrations/index.d.ts.map +1 -1
- package/dist/src/integrations/index.js +3 -1
- package/dist/src/integrations/index.js.map +1 -1
- package/dist/src/integrations/policy-engine.d.ts +55 -0
- package/dist/src/integrations/policy-engine.d.ts.map +1 -0
- package/dist/src/integrations/policy-engine.js +247 -0
- package/dist/src/integrations/policy-engine.js.map +1 -0
- package/dist/src/integrations/safety.d.ts +5 -4
- package/dist/src/integrations/safety.d.ts.map +1 -1
- package/dist/src/integrations/safety.js +32 -7
- package/dist/src/integrations/safety.js.map +1 -1
- package/dist/src/integrations/sandbox/basic.d.ts +7 -0
- package/dist/src/integrations/sandbox/basic.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/basic.js +27 -2
- package/dist/src/integrations/sandbox/basic.js.map +1 -1
- package/dist/src/integrations/sandbox/index.d.ts +6 -0
- package/dist/src/integrations/sandbox/index.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/index.js +3 -0
- package/dist/src/integrations/sandbox/index.js.map +1 -1
- package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/landlock.js +3 -0
- package/dist/src/integrations/sandbox/landlock.js.map +1 -1
- package/dist/src/integrations/self-improvement.d.ts.map +1 -1
- package/dist/src/integrations/self-improvement.js +12 -0
- package/dist/src/integrations/self-improvement.js.map +1 -1
- package/dist/src/integrations/smart-decomposer.d.ts +18 -1
- package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
- package/dist/src/integrations/smart-decomposer.js +72 -0
- package/dist/src/integrations/smart-decomposer.js.map +1 -1
- package/dist/src/integrations/swarm/index.d.ts +1 -1
- package/dist/src/integrations/swarm/index.d.ts.map +1 -1
- package/dist/src/integrations/swarm/index.js.map +1 -1
- package/dist/src/integrations/swarm/model-selector.d.ts +15 -0
- package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -1
- package/dist/src/integrations/swarm/model-selector.js +99 -20
- package/dist/src/integrations/swarm/model-selector.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-budget.d.ts +4 -0
- package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-budget.js +6 -0
- package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-config-loader.js +154 -7
- package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +12 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.js +170 -23
- package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-events.d.ts +55 -1
- package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-events.js +22 -5
- package/dist/src/integrations/swarm/swarm-events.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +124 -8
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-orchestrator.js +1668 -96
- package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +83 -2
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-quality-gate.js +278 -19
- package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
- package/dist/src/integrations/swarm/task-queue.d.ts +44 -0
- package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
- package/dist/src/integrations/swarm/task-queue.js +274 -11
- package/dist/src/integrations/swarm/task-queue.js.map +1 -1
- package/dist/src/integrations/swarm/types.d.ts +210 -13
- package/dist/src/integrations/swarm/types.d.ts.map +1 -1
- package/dist/src/integrations/swarm/types.js +61 -8
- package/dist/src/integrations/swarm/types.js.map +1 -1
- package/dist/src/integrations/swarm/worker-pool.d.ts +11 -4
- package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
- package/dist/src/integrations/swarm/worker-pool.js +173 -43
- package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
- package/dist/src/integrations/tool-recommendation.d.ts +7 -4
- package/dist/src/integrations/tool-recommendation.d.ts.map +1 -1
- package/dist/src/integrations/tool-recommendation.js +58 -5
- package/dist/src/integrations/tool-recommendation.js.map +1 -1
- package/dist/src/integrations/work-log.js +4 -4
- package/dist/src/integrations/work-log.js.map +1 -1
- package/dist/src/main.js +26 -1
- package/dist/src/main.js.map +1 -1
- package/dist/src/modes/repl.d.ts.map +1 -1
- package/dist/src/modes/repl.js +10 -4
- package/dist/src/modes/repl.js.map +1 -1
- package/dist/src/modes/tui.d.ts.map +1 -1
- package/dist/src/modes/tui.js +5 -0
- package/dist/src/modes/tui.js.map +1 -1
- package/dist/src/modes.d.ts.map +1 -1
- package/dist/src/modes.js +4 -27
- package/dist/src/modes.js.map +1 -1
- package/dist/src/tools/agent.d.ts.map +1 -1
- package/dist/src/tools/agent.js +11 -2
- package/dist/src/tools/agent.js.map +1 -1
- package/dist/src/tools/bash.d.ts +3 -3
- package/dist/src/tools/coercion.d.ts +6 -0
- package/dist/src/tools/coercion.d.ts.map +1 -1
- package/dist/src/tools/coercion.js +13 -0
- package/dist/src/tools/coercion.js.map +1 -1
- package/dist/src/tools/file.d.ts +2 -2
- package/dist/src/tools/file.js +2 -2
- package/dist/src/tools/file.js.map +1 -1
- package/dist/src/tools/permission.d.ts.map +1 -1
- package/dist/src/tools/permission.js +4 -111
- package/dist/src/tools/permission.js.map +1 -1
- package/dist/src/tracing/trace-collector.d.ts +167 -0
- package/dist/src/tracing/trace-collector.d.ts.map +1 -1
- package/dist/src/tracing/trace-collector.js +137 -0
- package/dist/src/tracing/trace-collector.js.map +1 -1
- package/dist/src/tracing/types.d.ts +105 -1
- package/dist/src/tracing/types.d.ts.map +1 -1
- package/dist/src/tracing/types.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +34 -5
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/types.d.ts +71 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -4,12 +4,27 @@
|
|
|
4
4
|
* Manages concurrent worker dispatch via existing spawnAgent() infrastructure.
|
|
5
5
|
* Uses slot-based concurrency control and dynamic agent registration.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { getTaskTypeConfig } from './types.js';
|
|
8
8
|
import { selectWorkerForCapability } from './model-selector.js';
|
|
9
9
|
import { buildDelegationPrompt, createMinimalDelegationSpec } from '../delegation-protocol.js';
|
|
10
10
|
import { getSubagentQualityPrompt } from '../thinking-strategy.js';
|
|
11
11
|
import { getEnvironmentFacts, formatFactsBlock, formatFactsCompact } from '../environment-facts.js';
|
|
12
12
|
import { calculateCost, isModelCacheInitialized } from '../openrouter-pricing.js';
|
|
13
|
+
import { resolvePolicyProfile } from '../policy-engine.js';
|
|
14
|
+
// ─── D2: Lightweight Model Detection ───────────────────────────────────────
|
|
15
|
+
/** D2: Detect cheap/weak models that benefit from minimal prompts. */
|
|
16
|
+
export function isLightweightModel(model) {
|
|
17
|
+
const lower = model.toLowerCase();
|
|
18
|
+
return /\b(mini|micro|small|nano|tiny|lite|glm|phi|gemma-2b|qwen.*0\.5|qwen.*1\.5)\b/.test(lower);
|
|
19
|
+
}
|
|
20
|
+
// ─── Worker Timeout Error ──────────────────────────────────────────────────
|
|
21
|
+
/** Typed error for worker timeouts, used to distinguish timeouts from hollow completions. */
|
|
22
|
+
export class WorkerTimeoutError extends Error {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = 'WorkerTimeoutError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
13
28
|
// ─── Worker Pool ───────────────────────────────────────────────────────────
|
|
14
29
|
export class SwarmWorkerPool {
|
|
15
30
|
config;
|
|
@@ -17,15 +32,17 @@ export class SwarmWorkerPool {
|
|
|
17
32
|
spawnAgent;
|
|
18
33
|
budgetPool;
|
|
19
34
|
workers;
|
|
35
|
+
healthTracker;
|
|
20
36
|
activeWorkers = new Map();
|
|
21
37
|
registeredAgentNames = new Set();
|
|
22
38
|
dispatchCount = 0;
|
|
23
|
-
constructor(config, agentRegistry, spawnAgent, budgetPool) {
|
|
39
|
+
constructor(config, agentRegistry, spawnAgent, budgetPool, healthTracker) {
|
|
24
40
|
this.config = config;
|
|
25
41
|
this.agentRegistry = agentRegistry;
|
|
26
42
|
this.spawnAgent = spawnAgent;
|
|
27
43
|
this.budgetPool = budgetPool;
|
|
28
44
|
this.workers = config.workers;
|
|
45
|
+
this.healthTracker = healthTracker;
|
|
29
46
|
}
|
|
30
47
|
/**
|
|
31
48
|
* Get number of available slots.
|
|
@@ -43,8 +60,8 @@ export class SwarmWorkerPool {
|
|
|
43
60
|
* Select the best worker spec for a task based on capability matching.
|
|
44
61
|
*/
|
|
45
62
|
selectWorker(task) {
|
|
46
|
-
const capability =
|
|
47
|
-
return selectWorkerForCapability(this.workers, capability, this.dispatchCount
|
|
63
|
+
const capability = getTaskTypeConfig(task.type, this.config).capability ?? 'code';
|
|
64
|
+
return selectWorkerForCapability(this.workers, capability, this.dispatchCount++, this.healthTracker);
|
|
48
65
|
}
|
|
49
66
|
/**
|
|
50
67
|
* Dispatch a task to a worker.
|
|
@@ -66,22 +83,89 @@ export class SwarmWorkerPool {
|
|
|
66
83
|
}
|
|
67
84
|
// Create a unique agent name for this worker instance
|
|
68
85
|
const agentName = `swarm-${worker.name}-${task.id}`;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
const requestedProfile = worker.policyProfile;
|
|
87
|
+
const policyResolution = resolvePolicyProfile({
|
|
88
|
+
isSwarmWorker: true,
|
|
89
|
+
requestedProfile,
|
|
90
|
+
swarmConfig: this.config,
|
|
91
|
+
worker,
|
|
92
|
+
taskType: task.type,
|
|
93
|
+
legacyAllowedTools: this.config.toolAccessMode === 'whitelist' ? worker.allowedTools : undefined,
|
|
94
|
+
legacyDeniedTools: worker.deniedTools,
|
|
95
|
+
globalDeniedTools: this.config.globalDeniedTools,
|
|
96
|
+
});
|
|
97
|
+
const { profile } = policyResolution;
|
|
98
|
+
// If profile requires whitelist, expose only allowed tools to this worker.
|
|
99
|
+
const tools = (this.config.toolAccessMode === 'all' && !requestedProfile)
|
|
74
100
|
? undefined
|
|
75
|
-
:
|
|
101
|
+
: (profile.toolAccessMode === 'whitelist'
|
|
102
|
+
? profile.allowedTools
|
|
103
|
+
: worker.allowedTools);
|
|
104
|
+
// V7: Get effective per-type config (user overrides > builtin defaults > fallback)
|
|
105
|
+
const typeConfig = getTaskTypeConfig(task.type, this.config);
|
|
106
|
+
// F3: Wider complexity scaling: 0.3 + complexity * 0.14 (range 0.44x-1.7x)
|
|
107
|
+
// Previously 0.5 + complexity * 0.1 (range 0.6x-1.5x) — too narrow for diverse tasks.
|
|
108
|
+
const complexityMultiplier = 0.3 + (task.complexity ?? 5) * 0.14;
|
|
109
|
+
// Escalating retry budget — if a worker ran out on the first attempt,
|
|
110
|
+
// giving it the same budget will produce the same result.
|
|
111
|
+
// 1st retry: 1.3x, 2nd: 1.6x, 3rd+: 2.0x (double budget).
|
|
112
|
+
const retryMultiplier = task.attempts === 0 ? 1.0
|
|
113
|
+
: task.attempts === 1 ? 1.3
|
|
114
|
+
: task.attempts === 2 ? 1.6
|
|
115
|
+
: 2.0;
|
|
116
|
+
// F3: Task-aware budget using tokenBudgetRange from TaskTypeConfig.
|
|
117
|
+
// Foundation tasks get max budget, leaf tasks get proportional to complexity.
|
|
118
|
+
let baseTokenBudget;
|
|
119
|
+
if (typeConfig.tokenBudgetRange) {
|
|
120
|
+
const { min, max } = typeConfig.tokenBudgetRange;
|
|
121
|
+
if (task.isFoundation) {
|
|
122
|
+
baseTokenBudget = max;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Scale linearly: complexity 1 → min, complexity 10 → max
|
|
126
|
+
const ratio = Math.min(1, Math.max(0, ((task.complexity ?? 5) - 1) / 9));
|
|
127
|
+
baseTokenBudget = Math.round(min + ratio * (max - min));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
baseTokenBudget = typeConfig.tokenBudget ?? worker.maxTokens ?? this.config.maxTokensPerWorker;
|
|
132
|
+
}
|
|
133
|
+
const baseMaxIterations = typeConfig.maxIterations ?? this.config.workerMaxIterations;
|
|
134
|
+
// 2nd+ retries get 50% more iterations — more turns to complete the task
|
|
135
|
+
const iterationMultiplier = task.attempts >= 2 ? 1.5 : 1.0;
|
|
136
|
+
// V7: Per-task-type timeout from TaskTypeConfig, with backward compat to taskTypeTimeouts
|
|
137
|
+
// Computed before agentDef so we can pass it through to spawnAgent's timeout chain
|
|
138
|
+
const baseTimeoutMs = typeConfig.timeout ?? this.config.taskTypeTimeouts?.[task.type] ?? Math.max(this.config.workerTimeout, 240_000);
|
|
139
|
+
// Foundation tasks (3+ dependents) get 2.5x timeout to reduce cascade failure risk
|
|
140
|
+
const adjustedTimeoutMs = task.isFoundation ? Math.round(baseTimeoutMs * 2.5) : baseTimeoutMs;
|
|
141
|
+
// Apply both complexity and retry multipliers — retries get more wall-clock time too
|
|
142
|
+
const timeoutMs = Math.round(adjustedTimeoutMs * complexityMultiplier * retryMultiplier);
|
|
76
143
|
const agentDef = {
|
|
77
144
|
name: agentName,
|
|
78
145
|
description: `Swarm worker (${worker.name}) for: ${task.description.slice(0, 100)}`,
|
|
79
146
|
systemPrompt: this.buildWorkerSystemPrompt(task, worker),
|
|
80
147
|
tools,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
148
|
+
// Pin the resolved profile so spawnAgent does not re-infer a different one.
|
|
149
|
+
policyProfile: policyResolution.profileName,
|
|
150
|
+
// Respect failover-assigned model on retries.
|
|
151
|
+
model: task.assignedModel ?? worker.model,
|
|
152
|
+
taskType: task.type,
|
|
153
|
+
maxTokenBudget: Math.round(baseTokenBudget * complexityMultiplier * retryMultiplier),
|
|
154
|
+
maxIterations: Math.round(baseMaxIterations * complexityMultiplier * retryMultiplier * iterationMultiplier),
|
|
155
|
+
timeout: timeoutMs, // Pass calculated timeout through to spawnAgent (highest priority in timeout chain)
|
|
156
|
+
idleTimeout: typeConfig.idleTimeout, // V7: Configurable idle timeout (for long-running tasks)
|
|
84
157
|
capabilities: worker.capabilities,
|
|
158
|
+
// W3: Swarm workers get tighter economics thresholds by default
|
|
159
|
+
// These can be overridden via swarmConfig.economicsTuning
|
|
160
|
+
economicsTuning: {
|
|
161
|
+
doomLoopThreshold: 2,
|
|
162
|
+
doomLoopFuzzyThreshold: 3,
|
|
163
|
+
explorationFileThreshold: 5,
|
|
164
|
+
explorationIterThreshold: 3,
|
|
165
|
+
zeroProgressThreshold: 3,
|
|
166
|
+
progressCheckpoint: 3,
|
|
167
|
+
...(this.config.economicsTuning ?? {}),
|
|
168
|
+
},
|
|
85
169
|
};
|
|
86
170
|
this.agentRegistry.registerAgent(agentDef);
|
|
87
171
|
this.registeredAgentNames.add(agentName);
|
|
@@ -89,14 +173,14 @@ export class SwarmWorkerPool {
|
|
|
89
173
|
const taskPrompt = this.buildTaskPrompt(task);
|
|
90
174
|
// Create the promise that tracks execution
|
|
91
175
|
const startedAt = Date.now();
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
176
|
+
// V8: Worker pool timeout is a backstop AFTER the agent's graceful timeout.
|
|
177
|
+
// The agent's graceful timeout (in spawnAgent) provides a wrapup window before hard kill.
|
|
178
|
+
// This backstop fires 60s later to catch cases where graceful timeout fails.
|
|
179
|
+
const backstopTimeoutMs = timeoutMs + 60_000;
|
|
96
180
|
const spawnPromise = this.spawnAgent(agentName, taskPrompt);
|
|
97
181
|
let timeoutHandle;
|
|
98
182
|
const timeoutPromise = new Promise((_, reject) => {
|
|
99
|
-
timeoutHandle = setTimeout(() => reject(new
|
|
183
|
+
timeoutHandle = setTimeout(() => reject(new WorkerTimeoutError(`Worker timeout after ${backstopTimeoutMs}ms (base: ${timeoutMs}ms + 60s backstop)`)), backstopTimeoutMs);
|
|
100
184
|
});
|
|
101
185
|
const promise = Promise.race([spawnPromise, timeoutPromise]).then(result => {
|
|
102
186
|
clearTimeout(timeoutHandle);
|
|
@@ -135,8 +219,9 @@ export class SwarmWorkerPool {
|
|
|
135
219
|
duration: Date.now() - worker.startedAt,
|
|
136
220
|
// V7: Use -1 for timeout errors so the orchestrator can distinguish
|
|
137
221
|
// timeouts (worker was working but ran out of time) from hollow completions
|
|
138
|
-
// (worker produced no tool calls at all)
|
|
139
|
-
|
|
222
|
+
// (worker produced no tool calls at all).
|
|
223
|
+
// Uses instanceof check instead of fragile string matching.
|
|
224
|
+
toolCalls: (error instanceof WorkerTimeoutError) ? -1 : 0,
|
|
140
225
|
},
|
|
141
226
|
},
|
|
142
227
|
startedAt: worker.startedAt,
|
|
@@ -183,10 +268,9 @@ export class SwarmWorkerPool {
|
|
|
183
268
|
costUsed: estimatedCost,
|
|
184
269
|
durationMs,
|
|
185
270
|
model: task.assignedModel ?? 'unknown',
|
|
186
|
-
filesModified: spawnResult.
|
|
187
|
-
?.filter((a) => a.includes('file') || a.includes('wrote') || a.includes('created'))
|
|
188
|
-
?? [],
|
|
271
|
+
filesModified: spawnResult.filesModified ?? [],
|
|
189
272
|
findings: spawnResult.structured?.findings,
|
|
273
|
+
toolCalls: spawnResult.metrics.toolCalls,
|
|
190
274
|
};
|
|
191
275
|
}
|
|
192
276
|
/**
|
|
@@ -235,16 +319,36 @@ export class SwarmWorkerPool {
|
|
|
235
319
|
*
|
|
236
320
|
* Prompt tiers based on attempt number:
|
|
237
321
|
* attempt 0: 'full' — all additions (delegation, env facts block, quality self-assessment)
|
|
238
|
-
* attempt 1
|
|
239
|
-
* attempt 2+: 'minimal' — only persona + task description + type rules + retry context
|
|
322
|
+
* attempt 1+: 'reduced' — compact facts, skip delegation for research/analysis tasks
|
|
240
323
|
*/
|
|
241
324
|
buildWorkerSystemPrompt(task, worker) {
|
|
242
325
|
const stuckThreshold = this.config.workerStuckThreshold ?? 3;
|
|
243
326
|
const parts = [];
|
|
244
|
-
// Determine prompt tier
|
|
245
|
-
const promptTier =
|
|
246
|
-
|
|
247
|
-
: '
|
|
327
|
+
// D2: Determine prompt tier — explicit override > retry detection > model detection > full
|
|
328
|
+
const promptTier = worker.promptTier ??
|
|
329
|
+
(task.attempts > 0 ? 'reduced' :
|
|
330
|
+
isLightweightModel(task.assignedModel ?? worker.model) ? 'reduced' : 'full');
|
|
331
|
+
// D2: Minimal prompt tier for cheap/weak models — drastically reduced prompt
|
|
332
|
+
if (promptTier === 'minimal') {
|
|
333
|
+
parts.push(`You are a ${worker.name} worker. Your task: ${task.description}`, '', '═══ RULES ═══', '', 'CRITICAL:', '- Use tools to do your work. A response with zero tool calls is failure.', '- Use read_file/grep to read code. Use write_file/edit_file to modify code.', '- Do NOT use bash for file reading (no cat/head/tail). Use read_file instead.', `- You have ${this.config.workerMaxIterations} max iterations. Work fast.`, '', `AVAILABLE TOOLS: ${(worker.allowedTools ?? ['write_file', 'edit_file', 'read_file', 'glob', 'grep', 'bash']).join(', ')}`);
|
|
334
|
+
if (task.targetFiles && task.targetFiles.length > 0) {
|
|
335
|
+
parts.push('', `TARGET FILES: ${task.targetFiles.join(', ')}`);
|
|
336
|
+
}
|
|
337
|
+
if (task.readFiles && task.readFiles.length > 0) {
|
|
338
|
+
parts.push('', `REFERENCE FILES: ${task.readFiles.join(', ')}`);
|
|
339
|
+
}
|
|
340
|
+
if (task.attempts > 0 && task.retryContext) {
|
|
341
|
+
parts.push('', `RETRY #${task.attempts}: Previous score ${task.retryContext.previousScore}/5. Fix: ${task.retryContext.previousFeedback}`);
|
|
342
|
+
// F12: Hollow completion — prescribe exact first action
|
|
343
|
+
if (task.retryContext.previousScore <= 1) {
|
|
344
|
+
const firstTarget = task.targetFiles?.[0] ?? task.readFiles?.[0];
|
|
345
|
+
parts.push('', '⚠ YOUR PREVIOUS ATTEMPT HAD ZERO TOOL CALLS — THIS IS AN AUTOMATIC FAILURE.', firstTarget
|
|
346
|
+
? `YOUR VERY FIRST ACTION: Call ${task.targetFiles?.[0] ? 'write_file' : 'read_file'} on "${firstTarget}".`
|
|
347
|
+
: 'YOUR VERY FIRST ACTION: Call read_file or write_file. Text-only responses = failure.');
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return parts.join('\n');
|
|
351
|
+
}
|
|
248
352
|
// V3: Inject worker persona if configured
|
|
249
353
|
if (worker.persona) {
|
|
250
354
|
parts.push(worker.persona, '');
|
|
@@ -255,39 +359,65 @@ export class SwarmWorkerPool {
|
|
|
255
359
|
if (promptTier === 'full') {
|
|
256
360
|
parts.push(formatFactsBlock(getEnvironmentFacts(customFacts)), '');
|
|
257
361
|
}
|
|
258
|
-
else
|
|
362
|
+
else {
|
|
259
363
|
parts.push(formatFactsCompact(getEnvironmentFacts(customFacts)), '');
|
|
260
364
|
}
|
|
261
|
-
//
|
|
262
|
-
|
|
263
|
-
if (this.config.philosophy && promptTier !== 'minimal') {
|
|
365
|
+
// V3: Inject philosophy if configured
|
|
366
|
+
if (this.config.philosophy) {
|
|
264
367
|
parts.push('═══ PHILOSOPHY ═══', '', this.config.philosophy, '');
|
|
265
368
|
}
|
|
266
|
-
//
|
|
267
|
-
//
|
|
369
|
+
// V7: Use promptTemplate from TaskTypeConfig for dispatching prompt rules.
|
|
370
|
+
// Built-in templates: 'research', 'synthesis', 'document', 'code' (default).
|
|
371
|
+
const typeConfig = getTaskTypeConfig(task.type, this.config);
|
|
372
|
+
const promptTemplate = typeConfig.promptTemplate ?? 'code';
|
|
268
373
|
const taskType = task.type;
|
|
269
|
-
if (
|
|
374
|
+
if (promptTemplate === 'research') {
|
|
270
375
|
parts.push('═══ RESEARCH TASK RULES ═══', '', 'RESEARCH RULES (violations waste budget):', '- Use web_search, read_file, glob, grep to gather information.', '- You are NOT expected to write or edit code files.', `- After ${stuckThreshold} iterations without new findings, write up what you have.`, '- Do NOT run ls/find/tree to "understand the project". You have context below.', '- If you get the same result from a tool twice, try a COMPLETELY different approach.', '', 'EFFICIENCY RULES:', '- Focus ONLY on your assigned research topic. Do not explore unrelated areas.', `- You have ${this.config.workerMaxIterations} max iterations and a limited token budget.`, '- Prefer grep and targeted reads over reading entire files.', '- Synthesize findings as you go — do not wait until the end.', '', 'OUTPUT FORMAT — When finished, summarize:', '1. Key findings and insights', '2. Sources consulted (files read, searches performed)', '3. Any gaps or areas needing further investigation');
|
|
271
376
|
}
|
|
272
|
-
else if (
|
|
377
|
+
else if (promptTemplate === 'synthesis') {
|
|
273
378
|
parts.push('═══ SYNTHESIS TASK RULES ═══', '', 'SYNTHESIS RULES (violations waste budget):', '- Read outputs from dependency tasks provided in context below.', '- Combine, synthesize, and summarize the material into a coherent result.', '- Do NOT re-research — work with the material given to you.', '- Do NOT run web_search or explore the codebase independently.', '- If you get the same result from a tool twice, try a COMPLETELY different approach.', '', 'EFFICIENCY RULES:', '- Focus ONLY on synthesizing the provided inputs.', `- You have ${this.config.workerMaxIterations} max iterations and a limited token budget.`, '- Read dependency outputs first, then produce your synthesis.', '', 'OUTPUT FORMAT — When finished, provide:', '1. Synthesized result combining all inputs', '2. Key themes or patterns across inputs', '3. Any conflicts or gaps between inputs');
|
|
274
379
|
}
|
|
275
|
-
else if (
|
|
276
|
-
parts.push('═══ DOCUMENTATION TASK RULES ═══', '', 'DOCUMENTATION RULES (violations waste budget):', `- Never run ls, find, pwd, or tree more than once each.`, '- If you get the same result from a tool twice, try a COMPLETELY different approach.', `- After ${stuckThreshold} iterations without writing a file, START WRITING IMMEDIATELY.`, '- Do NOT run ls/find/tree to "understand the project". You have context below.', '', 'EFFICIENCY RULES:', '- Focus ONLY on your assigned documentation task.', `- You have ${this.config.workerMaxIterations} max iterations and a limited token budget.`, '- Read files for context, then write documentation.', '', 'OUTPUT FORMAT — When finished, summarize:', '1. Documentation files created/modified', '2. Key sections documented', '3. Any areas needing further documentation');
|
|
380
|
+
else if (promptTemplate === 'document') {
|
|
381
|
+
parts.push('═══ DOCUMENTATION TASK RULES ═══', '', 'DOCUMENTATION RULES (violations waste budget):', `- Never run ls, find, pwd, or tree more than once each.`, '- If you get the same result from a tool twice, try a COMPLETELY different approach.', `- After ${stuckThreshold} iterations without writing a file, START WRITING IMMEDIATELY.`, '- Do NOT run ls/find/tree to "understand the project". You have context below.', '', 'EFFICIENCY RULES:', '- Focus ONLY on your assigned documentation task.', `- You have ${this.config.workerMaxIterations} max iterations and a limited token budget.`, '- Read files for context, then write documentation.', '', 'TOOL USAGE:', '- To CREATE a new file: use write_file (NOT bash with cat/echo/heredoc)', '- To MODIFY an existing file: use edit_file (NOT bash with sed/awk)', '- To READ a file: use read_file (NOT bash with cat/head/tail)', '- Use bash ONLY for: running commands (npm, node, git, tsc, tests, etc.)', '- NEVER send file contents as a bash command argument', '', 'OUTPUT FORMAT — When finished, summarize:', '1. Documentation files created/modified', '2. Key sections documented', '3. Any areas needing further documentation');
|
|
277
382
|
}
|
|
278
383
|
else {
|
|
279
384
|
// Default: code/test/refactor/integrate/deploy — original behavior preserved exactly
|
|
280
|
-
parts.push('═══ CRITICAL RULES ═══', '', 'ANTI-LOOP RULES (violations waste budget):', `- Never run ls, find, pwd, or tree more than once each.`, '- If you get the same result from a tool twice, try a COMPLETELY different approach.', `- After ${stuckThreshold} iterations without writing/editing a file, START CODING IMMEDIATELY.`, '- Do NOT run ls/find/tree to "understand the project". You have context below.', '', 'EFFICIENCY RULES:', '- Focus ONLY on your assigned task. Do not explore unrelated code.', `- You have ${this.config.workerMaxIterations} max iterations and a limited token budget.`, '- Read files only when you need specific content. Prefer grep over reading entire files.', '- Make changes incrementally — edit one file, verify, move on.', '', 'OUTPUT FORMAT — When finished, summarize:', '1. What you accomplished (files created/modified)', '2. Key decisions made', '3. Any issues encountered or unresolved items');
|
|
385
|
+
parts.push('═══ CRITICAL RULES ═══', '', 'ANTI-LOOP RULES (violations waste budget):', `- Never run ls, find, pwd, or tree more than once each.`, '- If you get the same result from a tool twice, try a COMPLETELY different approach.', `- After ${stuckThreshold} iterations without writing/editing a file, START CODING IMMEDIATELY.`, '- Do NOT run ls/find/tree to "understand the project". You have context below.', '', 'EFFICIENCY RULES:', '- Focus ONLY on your assigned task. Do not explore unrelated code.', `- You have ${this.config.workerMaxIterations} max iterations and a limited token budget.`, '- Read files only when you need specific content. Prefer grep over reading entire files.', '- Make changes incrementally — edit one file, verify, move on.', '', 'TOOL USAGE:', '- To CREATE a new file: use write_file (NOT bash with cat/echo/heredoc)', '- To MODIFY an existing file: use edit_file (NOT bash with sed/awk)', '- To READ a file: use read_file (NOT bash with cat/head/tail)', '- To SEARCH for files: use glob (NOT bash with find/ls)', '- To SEARCH file contents: use grep (NOT bash with grep/rg)', '- Use bash ONLY for: running commands (npm, node, git, tsc, tests, etc.)', '- NEVER send file contents as a bash command argument', '', 'OUTPUT FORMAT — When finished, summarize:', '1. What you accomplished (files created/modified)', '2. Key decisions made', '3. Any issues encountered or unresolved items');
|
|
386
|
+
}
|
|
387
|
+
// Inject available tool names so the model knows exactly what it can call
|
|
388
|
+
if (worker.allowedTools && worker.allowedTools.length > 0) {
|
|
389
|
+
parts.push('', `AVAILABLE TOOLS: ${worker.allowedTools.join(', ')}`);
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
parts.push('', 'You have access to ALL tools including: write_file, edit_file, read_file, glob, grep, bash, web_search');
|
|
393
|
+
}
|
|
394
|
+
// V9: Action-orientation reinforcement for task types that MUST produce file changes
|
|
395
|
+
if (taskType === 'implement' || taskType === 'test' || taskType === 'refactor') {
|
|
396
|
+
parts.push('', '═══ ACTION ORIENTATION ═══', '', 'You are judged by actual file changes and tool usage, not by the quality of your written analysis.', 'If your task type is implement, test, or refactor, you MUST make file changes.', 'A response with zero tool calls is an automatic failure.');
|
|
281
397
|
}
|
|
282
398
|
// V5: Retry context — inject previous feedback so worker doesn't repeat mistakes
|
|
283
399
|
if (task.attempts > 0 && task.retryContext) {
|
|
400
|
+
// F22: Include swarm progress so retrying workers know what's been accomplished
|
|
401
|
+
if (task.retryContext.swarmProgress) {
|
|
402
|
+
parts.push('', '═══ SWARM PROGRESS ═══', '', task.retryContext.swarmProgress);
|
|
403
|
+
}
|
|
284
404
|
parts.push('', '═══ RETRY CONTEXT (THIS IS YOUR 2ND+ ATTEMPT) ═══', '');
|
|
285
405
|
if (task.retryContext.previousScore === 0) {
|
|
286
|
-
parts.push(`Your previous attempt FAILED with error:`, task.retryContext.previousFeedback, '', 'Diagnose what went wrong and try a completely different approach.');
|
|
406
|
+
parts.push(`Your previous attempt FAILED with error:`, task.retryContext.previousFeedback, '', 'Diagnose what went wrong and try a completely different approach.', 'REMINDER: Use write_file to create files and edit_file to modify them. Do NOT use bash for file operations.');
|
|
287
407
|
}
|
|
288
408
|
else {
|
|
289
409
|
parts.push(`Previous attempt scored ${task.retryContext.previousScore}/5.`, `Judge feedback: ${task.retryContext.previousFeedback}`, '', 'You MUST address the feedback above. Try a DIFFERENT approach from your previous attempt.', 'Focus specifically on what the judge flagged as wrong.');
|
|
290
410
|
}
|
|
411
|
+
// F12: Hollow completion — prescribe exact first action
|
|
412
|
+
if (task.retryContext.previousScore <= 1) {
|
|
413
|
+
const firstTarget = task.targetFiles?.[0] ?? task.readFiles?.[0];
|
|
414
|
+
parts.push('', '⚠ YOUR PREVIOUS ATTEMPT HAD ZERO TOOL CALLS — THIS IS AN AUTOMATIC FAILURE.', firstTarget
|
|
415
|
+
? `YOUR VERY FIRST ACTION: Call ${task.targetFiles?.[0] ? 'write_file' : 'read_file'} on "${firstTarget}".`
|
|
416
|
+
: 'YOUR VERY FIRST ACTION: Call read_file or write_file. Text-only responses = failure.');
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
if (task.retryContext?.previousFiles?.length) {
|
|
420
|
+
parts.push('', '═══ FILES FROM PREVIOUS ATTEMPT ═══', '', 'These files ALREADY EXIST on disk from the previous attempt:', ...task.retryContext.previousFiles.map(f => ` - ${f}`), '', 'DO NOT recreate these with write_file. Use edit_file to fix issues, or read_file to check state.');
|
|
291
421
|
}
|
|
292
422
|
if (task.targetFiles && task.targetFiles.length > 0) {
|
|
293
423
|
parts.push('', `TARGET FILES (you should modify these):`, ...task.targetFiles.map(f => ` - ${f}`));
|
|
@@ -335,7 +465,7 @@ export class SwarmWorkerPool {
|
|
|
335
465
|
/**
|
|
336
466
|
* Factory function.
|
|
337
467
|
*/
|
|
338
|
-
export function createSwarmWorkerPool(config, agentRegistry, spawnAgent, budgetPool) {
|
|
339
|
-
return new SwarmWorkerPool(config, agentRegistry, spawnAgent, budgetPool);
|
|
468
|
+
export function createSwarmWorkerPool(config, agentRegistry, spawnAgent, budgetPool, healthTracker) {
|
|
469
|
+
return new SwarmWorkerPool(config, agentRegistry, spawnAgent, budgetPool, healthTracker);
|
|
340
470
|
}
|
|
341
471
|
//# sourceMappingURL=worker-pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-pool.js","sourceRoot":"","sources":["../../../../src/integrations/swarm/worker-pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker-pool.js","sourceRoot":"","sources":["../../../../src/integrations/swarm/worker-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* - Static task-type → tool-category mappings (no LLM call needed)
|
|
10
10
|
* - Keyword analysis for MCP tool preloading
|
|
11
11
|
* - Tool filtering for subagent specialization
|
|
12
|
+
* - Custom task types fall back to a known type's tools based on capability
|
|
12
13
|
*/
|
|
13
|
-
import type {
|
|
14
|
+
import type { WorkerCapability } from './swarm/types.js';
|
|
14
15
|
export interface ToolRecommendation {
|
|
15
16
|
toolName: string;
|
|
16
17
|
relevanceScore: number;
|
|
@@ -35,8 +36,10 @@ export declare class ToolRecommendationEngine {
|
|
|
35
36
|
constructor(config?: ToolRecommendationConfig);
|
|
36
37
|
/**
|
|
37
38
|
* Recommend tools for a task based on type and description.
|
|
39
|
+
* Custom task types not in TASK_TYPE_TOOL_MAP fall back to a known type
|
|
40
|
+
* based on the custom type's capability (via TaskTypeConfig).
|
|
38
41
|
*/
|
|
39
|
-
recommendTools(taskDescription: string, taskType:
|
|
42
|
+
recommendTools(taskDescription: string, taskType: string, availableToolNames: string[], capability?: WorkerCapability): ToolRecommendation[];
|
|
40
43
|
/**
|
|
41
44
|
* Get MCP tool prefixes that should be preloaded for a task type.
|
|
42
45
|
*/
|
|
@@ -45,11 +48,11 @@ export declare class ToolRecommendationEngine {
|
|
|
45
48
|
* Filter tools for an agent based on task type.
|
|
46
49
|
* Returns tool names that should be available to the agent.
|
|
47
50
|
*/
|
|
48
|
-
getToolFilterForTaskType(taskType:
|
|
51
|
+
getToolFilterForTaskType(taskType: string, availableToolNames: string[]): string[];
|
|
49
52
|
/**
|
|
50
53
|
* Infer a SubtaskType from an agent name.
|
|
51
54
|
*/
|
|
52
|
-
static inferTaskType(agentName: string):
|
|
55
|
+
static inferTaskType(agentName: string): string;
|
|
53
56
|
}
|
|
54
57
|
/**
|
|
55
58
|
* Create a tool recommendation engine with optional config.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-recommendation.d.ts","sourceRoot":"","sources":["../../../src/integrations/tool-recommendation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-recommendation.d.ts","sourceRoot":"","sources":["../../../src/integrations/tool-recommendation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,KAAK,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AA0HD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAqC;gBAEvC,MAAM,CAAC,EAAE,wBAAwB;IAQ7C;;;;OAIG;IACH,cAAc,CACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,UAAU,CAAC,EAAE,gBAAgB,GAC5B,kBAAkB,EAAE;IAoEvB;;OAEG;IACH,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBxD;;;OAGG;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAAE,GAC3B,MAAM,EAAE;IAKX;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAmChD;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,wBAAwB,GAChC,wBAAwB,CAE1B"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* - Static task-type → tool-category mappings (no LLM call needed)
|
|
10
10
|
* - Keyword analysis for MCP tool preloading
|
|
11
11
|
* - Tool filtering for subagent specialization
|
|
12
|
+
* - Custom task types fall back to a known type's tools based on capability
|
|
12
13
|
*/
|
|
13
14
|
// =============================================================================
|
|
14
15
|
// CONSTANTS
|
|
@@ -20,11 +21,15 @@
|
|
|
20
21
|
const TASK_TYPE_TOOL_MAP = {
|
|
21
22
|
research: [
|
|
22
23
|
{ name: 'file_reading', tools: ['read_file', 'glob', 'grep', 'list_files', 'search_files', 'search_code', 'get_file_info'], relevance: 1.0 },
|
|
24
|
+
{ name: 'web', tools: ['web_search'], relevance: 0.8 },
|
|
25
|
+
{ name: 'file_writing', tools: ['write_file', 'edit_file'], relevance: 0.6 },
|
|
23
26
|
{ name: 'bash_readonly', tools: ['bash'], relevance: 0.5 },
|
|
27
|
+
{ name: 'task_coordination', tools: ['task_get', 'task_list'], relevance: 0.3 },
|
|
24
28
|
],
|
|
25
29
|
analysis: [
|
|
26
30
|
{ name: 'file_reading', tools: ['read_file', 'glob', 'grep', 'list_files', 'search_files', 'search_code'], relevance: 1.0 },
|
|
27
31
|
{ name: 'bash_readonly', tools: ['bash'], relevance: 0.6 },
|
|
32
|
+
{ name: 'web', tools: ['web_search'], relevance: 0.5 },
|
|
28
33
|
],
|
|
29
34
|
design: [
|
|
30
35
|
{ name: 'file_reading', tools: ['read_file', 'glob', 'grep', 'list_files'], relevance: 0.9 },
|
|
@@ -34,6 +39,7 @@ const TASK_TYPE_TOOL_MAP = {
|
|
|
34
39
|
{ name: 'file_reading', tools: ['read_file', 'glob', 'grep', 'list_files'], relevance: 0.8 },
|
|
35
40
|
{ name: 'file_writing', tools: ['write_file', 'edit_file'], relevance: 1.0 },
|
|
36
41
|
{ name: 'execution', tools: ['bash'], relevance: 0.7 },
|
|
42
|
+
{ name: 'task_coordination', tools: ['task_create', 'task_update', 'task_get', 'task_list'], relevance: 0.3 },
|
|
37
43
|
],
|
|
38
44
|
test: [
|
|
39
45
|
{ name: 'execution', tools: ['bash'], relevance: 1.0 },
|
|
@@ -47,6 +53,7 @@ const TASK_TYPE_TOOL_MAP = {
|
|
|
47
53
|
],
|
|
48
54
|
review: [
|
|
49
55
|
{ name: 'file_reading', tools: ['read_file', 'glob', 'grep', 'list_files', 'search_files'], relevance: 1.0 },
|
|
56
|
+
{ name: 'file_writing', tools: ['write_file', 'edit_file'], relevance: 0.4 },
|
|
50
57
|
{ name: 'bash_readonly', tools: ['bash'], relevance: 0.3 },
|
|
51
58
|
],
|
|
52
59
|
document: [
|
|
@@ -67,8 +74,21 @@ const TASK_TYPE_TOOL_MAP = {
|
|
|
67
74
|
{ name: 'file_reading', tools: ['read_file', 'glob', 'grep'], relevance: 0.9 },
|
|
68
75
|
{ name: 'file_writing', tools: ['write_file', 'edit_file'], relevance: 1.0 },
|
|
69
76
|
{ name: 'execution', tools: ['bash'], relevance: 0.5 },
|
|
77
|
+
{ name: 'task_coordination', tools: ['task_get', 'task_list'], relevance: 0.3 },
|
|
70
78
|
],
|
|
71
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* Map a WorkerCapability to the closest built-in task type for tool recommendations.
|
|
82
|
+
* Used as a fallback when a custom task type isn't in TASK_TYPE_TOOL_MAP.
|
|
83
|
+
*/
|
|
84
|
+
const CAPABILITY_TO_TOOL_MAP_KEY = {
|
|
85
|
+
code: 'implement',
|
|
86
|
+
research: 'research',
|
|
87
|
+
review: 'review',
|
|
88
|
+
test: 'test',
|
|
89
|
+
document: 'document',
|
|
90
|
+
write: 'merge',
|
|
91
|
+
};
|
|
72
92
|
/**
|
|
73
93
|
* Keyword patterns that suggest specific MCP tools.
|
|
74
94
|
*/
|
|
@@ -113,14 +133,28 @@ export class ToolRecommendationEngine {
|
|
|
113
133
|
}
|
|
114
134
|
/**
|
|
115
135
|
* Recommend tools for a task based on type and description.
|
|
136
|
+
* Custom task types not in TASK_TYPE_TOOL_MAP fall back to a known type
|
|
137
|
+
* based on the custom type's capability (via TaskTypeConfig).
|
|
116
138
|
*/
|
|
117
|
-
recommendTools(taskDescription, taskType, availableToolNames) {
|
|
139
|
+
recommendTools(taskDescription, taskType, availableToolNames, capability) {
|
|
118
140
|
const recommendations = new Map();
|
|
119
141
|
const availableSet = new Set(availableToolNames);
|
|
120
142
|
// Phase 1: Task-type based recommendations
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
143
|
+
// For custom types not in the map, fall back to a known type via capability
|
|
144
|
+
let categories;
|
|
145
|
+
if (this.config.taskToolOverrides[taskType]) {
|
|
146
|
+
categories = [{ name: 'override', tools: this.config.taskToolOverrides[taskType], relevance: 1.0 }];
|
|
147
|
+
}
|
|
148
|
+
else if (TASK_TYPE_TOOL_MAP[taskType]) {
|
|
149
|
+
categories = TASK_TYPE_TOOL_MAP[taskType];
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Custom type fallback: use capability to find closest built-in tool map
|
|
153
|
+
const fallbackType = capability
|
|
154
|
+
? CAPABILITY_TO_TOOL_MAP_KEY[capability] ?? 'implement'
|
|
155
|
+
: 'implement';
|
|
156
|
+
categories = TASK_TYPE_TOOL_MAP[fallbackType] ?? [];
|
|
157
|
+
}
|
|
124
158
|
for (const category of categories) {
|
|
125
159
|
for (const toolName of category.tools) {
|
|
126
160
|
if (availableSet.has(toolName) && !recommendations.has(toolName)) {
|
|
@@ -202,8 +236,27 @@ export class ToolRecommendationEngine {
|
|
|
202
236
|
debugger: 'analysis',
|
|
203
237
|
tester: 'test',
|
|
204
238
|
documenter: 'document',
|
|
239
|
+
synthesizer: 'merge',
|
|
240
|
+
writer: 'document',
|
|
241
|
+
merger: 'merge',
|
|
205
242
|
};
|
|
206
|
-
|
|
243
|
+
const lower = agentName.toLowerCase();
|
|
244
|
+
if (nameToType[lower]) {
|
|
245
|
+
return nameToType[lower];
|
|
246
|
+
}
|
|
247
|
+
// Dynamic swarm names like "swarm-coder-task-1" should resolve by role token.
|
|
248
|
+
const tokens = lower.split(/[^a-z0-9]+/).filter(Boolean);
|
|
249
|
+
for (const token of tokens) {
|
|
250
|
+
if (nameToType[token]) {
|
|
251
|
+
return nameToType[token];
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// For swarm workers, default to implementation rather than research so
|
|
255
|
+
// write-capable profiles are selected unless explicitly constrained.
|
|
256
|
+
if (lower.startsWith('swarm-')) {
|
|
257
|
+
return 'implement';
|
|
258
|
+
}
|
|
259
|
+
return 'research';
|
|
207
260
|
}
|
|
208
261
|
}
|
|
209
262
|
/**
|