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.
Files changed (152) hide show
  1. package/CHANGELOG.md +103 -3
  2. package/dist/src/agent.d.ts +6 -0
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +504 -49
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/cli.d.ts.map +1 -1
  7. package/dist/src/cli.js +23 -2
  8. package/dist/src/cli.js.map +1 -1
  9. package/dist/src/core/protocol/types.d.ts +8 -8
  10. package/dist/src/defaults.d.ts +6 -1
  11. package/dist/src/defaults.d.ts.map +1 -1
  12. package/dist/src/defaults.js +36 -2
  13. package/dist/src/defaults.js.map +1 -1
  14. package/dist/src/integrations/agent-registry.d.ts +11 -0
  15. package/dist/src/integrations/agent-registry.d.ts.map +1 -1
  16. package/dist/src/integrations/agent-registry.js.map +1 -1
  17. package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
  18. package/dist/src/integrations/auto-compaction.js +5 -1
  19. package/dist/src/integrations/auto-compaction.js.map +1 -1
  20. package/dist/src/integrations/bash-policy.d.ts +33 -0
  21. package/dist/src/integrations/bash-policy.d.ts.map +1 -0
  22. package/dist/src/integrations/bash-policy.js +142 -0
  23. package/dist/src/integrations/bash-policy.js.map +1 -0
  24. package/dist/src/integrations/codebase-context.d.ts +5 -0
  25. package/dist/src/integrations/codebase-context.d.ts.map +1 -1
  26. package/dist/src/integrations/codebase-context.js +33 -0
  27. package/dist/src/integrations/codebase-context.js.map +1 -1
  28. package/dist/src/integrations/delegation-protocol.js +2 -2
  29. package/dist/src/integrations/delegation-protocol.js.map +1 -1
  30. package/dist/src/integrations/economics.d.ts +42 -0
  31. package/dist/src/integrations/economics.d.ts.map +1 -1
  32. package/dist/src/integrations/economics.js +130 -14
  33. package/dist/src/integrations/economics.js.map +1 -1
  34. package/dist/src/integrations/hierarchical-config.d.ts.map +1 -1
  35. package/dist/src/integrations/hierarchical-config.js +17 -0
  36. package/dist/src/integrations/hierarchical-config.js.map +1 -1
  37. package/dist/src/integrations/index.d.ts +3 -1
  38. package/dist/src/integrations/index.d.ts.map +1 -1
  39. package/dist/src/integrations/index.js +3 -1
  40. package/dist/src/integrations/index.js.map +1 -1
  41. package/dist/src/integrations/policy-engine.d.ts +55 -0
  42. package/dist/src/integrations/policy-engine.d.ts.map +1 -0
  43. package/dist/src/integrations/policy-engine.js +247 -0
  44. package/dist/src/integrations/policy-engine.js.map +1 -0
  45. package/dist/src/integrations/safety.d.ts +5 -4
  46. package/dist/src/integrations/safety.d.ts.map +1 -1
  47. package/dist/src/integrations/safety.js +32 -7
  48. package/dist/src/integrations/safety.js.map +1 -1
  49. package/dist/src/integrations/sandbox/basic.d.ts +7 -0
  50. package/dist/src/integrations/sandbox/basic.d.ts.map +1 -1
  51. package/dist/src/integrations/sandbox/basic.js +27 -2
  52. package/dist/src/integrations/sandbox/basic.js.map +1 -1
  53. package/dist/src/integrations/sandbox/index.d.ts +6 -0
  54. package/dist/src/integrations/sandbox/index.d.ts.map +1 -1
  55. package/dist/src/integrations/sandbox/index.js +3 -0
  56. package/dist/src/integrations/sandbox/index.js.map +1 -1
  57. package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -1
  58. package/dist/src/integrations/sandbox/landlock.js +3 -0
  59. package/dist/src/integrations/sandbox/landlock.js.map +1 -1
  60. package/dist/src/integrations/self-improvement.d.ts.map +1 -1
  61. package/dist/src/integrations/self-improvement.js +12 -0
  62. package/dist/src/integrations/self-improvement.js.map +1 -1
  63. package/dist/src/integrations/smart-decomposer.d.ts +18 -1
  64. package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
  65. package/dist/src/integrations/smart-decomposer.js +72 -0
  66. package/dist/src/integrations/smart-decomposer.js.map +1 -1
  67. package/dist/src/integrations/swarm/index.d.ts +1 -1
  68. package/dist/src/integrations/swarm/index.d.ts.map +1 -1
  69. package/dist/src/integrations/swarm/index.js.map +1 -1
  70. package/dist/src/integrations/swarm/model-selector.d.ts +15 -0
  71. package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -1
  72. package/dist/src/integrations/swarm/model-selector.js +99 -20
  73. package/dist/src/integrations/swarm/model-selector.js.map +1 -1
  74. package/dist/src/integrations/swarm/swarm-budget.d.ts +4 -0
  75. package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
  76. package/dist/src/integrations/swarm/swarm-budget.js +6 -0
  77. package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
  78. package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
  79. package/dist/src/integrations/swarm/swarm-config-loader.js +154 -7
  80. package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
  81. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +12 -1
  82. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -1
  83. package/dist/src/integrations/swarm/swarm-event-bridge.js +170 -23
  84. package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -1
  85. package/dist/src/integrations/swarm/swarm-events.d.ts +55 -1
  86. package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
  87. package/dist/src/integrations/swarm/swarm-events.js +22 -5
  88. package/dist/src/integrations/swarm/swarm-events.js.map +1 -1
  89. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +124 -8
  90. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
  91. package/dist/src/integrations/swarm/swarm-orchestrator.js +1668 -96
  92. package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
  93. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +83 -2
  94. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -1
  95. package/dist/src/integrations/swarm/swarm-quality-gate.js +278 -19
  96. package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
  97. package/dist/src/integrations/swarm/task-queue.d.ts +44 -0
  98. package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
  99. package/dist/src/integrations/swarm/task-queue.js +274 -11
  100. package/dist/src/integrations/swarm/task-queue.js.map +1 -1
  101. package/dist/src/integrations/swarm/types.d.ts +210 -13
  102. package/dist/src/integrations/swarm/types.d.ts.map +1 -1
  103. package/dist/src/integrations/swarm/types.js +61 -8
  104. package/dist/src/integrations/swarm/types.js.map +1 -1
  105. package/dist/src/integrations/swarm/worker-pool.d.ts +11 -4
  106. package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
  107. package/dist/src/integrations/swarm/worker-pool.js +173 -43
  108. package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
  109. package/dist/src/integrations/tool-recommendation.d.ts +7 -4
  110. package/dist/src/integrations/tool-recommendation.d.ts.map +1 -1
  111. package/dist/src/integrations/tool-recommendation.js +58 -5
  112. package/dist/src/integrations/tool-recommendation.js.map +1 -1
  113. package/dist/src/integrations/work-log.js +4 -4
  114. package/dist/src/integrations/work-log.js.map +1 -1
  115. package/dist/src/main.js +26 -1
  116. package/dist/src/main.js.map +1 -1
  117. package/dist/src/modes/repl.d.ts.map +1 -1
  118. package/dist/src/modes/repl.js +10 -4
  119. package/dist/src/modes/repl.js.map +1 -1
  120. package/dist/src/modes/tui.d.ts.map +1 -1
  121. package/dist/src/modes/tui.js +5 -0
  122. package/dist/src/modes/tui.js.map +1 -1
  123. package/dist/src/modes.d.ts.map +1 -1
  124. package/dist/src/modes.js +4 -27
  125. package/dist/src/modes.js.map +1 -1
  126. package/dist/src/tools/agent.d.ts.map +1 -1
  127. package/dist/src/tools/agent.js +11 -2
  128. package/dist/src/tools/agent.js.map +1 -1
  129. package/dist/src/tools/bash.d.ts +3 -3
  130. package/dist/src/tools/coercion.d.ts +6 -0
  131. package/dist/src/tools/coercion.d.ts.map +1 -1
  132. package/dist/src/tools/coercion.js +13 -0
  133. package/dist/src/tools/coercion.js.map +1 -1
  134. package/dist/src/tools/file.d.ts +2 -2
  135. package/dist/src/tools/file.js +2 -2
  136. package/dist/src/tools/file.js.map +1 -1
  137. package/dist/src/tools/permission.d.ts.map +1 -1
  138. package/dist/src/tools/permission.js +4 -111
  139. package/dist/src/tools/permission.js.map +1 -1
  140. package/dist/src/tracing/trace-collector.d.ts +167 -0
  141. package/dist/src/tracing/trace-collector.d.ts.map +1 -1
  142. package/dist/src/tracing/trace-collector.js +137 -0
  143. package/dist/src/tracing/trace-collector.js.map +1 -1
  144. package/dist/src/tracing/types.d.ts +105 -1
  145. package/dist/src/tracing/types.d.ts.map +1 -1
  146. package/dist/src/tracing/types.js.map +1 -1
  147. package/dist/src/tui/app.d.ts.map +1 -1
  148. package/dist/src/tui/app.js +34 -5
  149. package/dist/src/tui/app.js.map +1 -1
  150. package/dist/src/types.d.ts +71 -0
  151. package/dist/src/types.d.ts.map +1 -1
  152. 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 { SUBTASK_TO_CAPABILITY } from './types.js';
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 = SUBTASK_TO_CAPABILITY[task.type] ?? 'code';
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
- // Register dynamic agent definition
70
- // V2: toolAccessMode 'all' gives workers all tools (including MCP) by setting tools to undefined.
71
- // This leverages existing behavior in agent-registry.ts:filterToolsForAgent() which returns
72
- // all tools when agent.tools is undefined.
73
- const tools = this.config.toolAccessMode === 'all'
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
- : worker.allowedTools;
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
- model: worker.model,
82
- maxTokenBudget: worker.maxTokens ?? this.config.maxTokensPerWorker,
83
- maxIterations: this.config.workerMaxIterations,
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
- // V6: Per-task-type timeout research/analysis tasks get more time by default
93
- const typeTimeout = this.config.taskTypeTimeouts?.[task.type];
94
- const timeoutMs = typeTimeout ?? this.config.workerTimeout;
95
- // H3: Wrap spawn with timeout enforcement
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 Error(`Worker timeout after ${timeoutMs}ms`)), timeoutMs);
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
- toolCalls: error.message.includes('timeout') ? -1 : 0,
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.structured?.actionsTaken
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: 'reduced' — compact facts, skip delegation for research/analysis tasks
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 based on attempt number
245
- const promptTier = task.attempts === 0 ? 'full'
246
- : task.attempts === 1 ? 'reduced'
247
- : 'minimal';
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 if (promptTier === 'reduced') {
362
+ else {
259
363
  parts.push(formatFactsCompact(getEnvironmentFacts(customFacts)), '');
260
364
  }
261
- // 'minimal' tier: skip environment facts entirely
262
- // V3: Inject philosophy if configured (skip on minimal tier)
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
- // Task-type-specific rules: research/analysis/design get research rules,
267
- // merge gets synthesis rules, document gets doc rules, everything else gets code rules
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 (taskType === 'research' || taskType === 'analysis' || taskType === 'design') {
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 (taskType === 'merge') {
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 (taskType === 'document') {
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 { SubtaskType } from './smart-decomposer.js';
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: SubtaskType, availableToolNames: string[]): ToolRecommendation[];
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: SubtaskType, availableToolNames: string[]): string[];
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): SubtaskType;
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;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,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;AAsGD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAqC;gBAEvC,MAAM,CAAC,EAAE,wBAAwB;IAQ7C;;OAEG;IACH,cAAc,CACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,WAAW,EACrB,kBAAkB,EAAE,MAAM,EAAE,GAC3B,kBAAkB,EAAE;IA0DvB;;OAEG;IACH,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBxD;;;OAGG;IACH,wBAAwB,CACtB,QAAQ,EAAE,WAAW,EACrB,kBAAkB,EAAE,MAAM,EAAE,GAC3B,MAAM,EAAE;IAKX;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;CAarD;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,wBAAwB,GAChC,wBAAwB,CAE1B"}
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
- const categories = this.config.taskToolOverrides[taskType]
122
- ? [{ name: 'override', tools: this.config.taskToolOverrides[taskType], relevance: 1.0 }]
123
- : (TASK_TYPE_TOOL_MAP[taskType] || []);
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
- return nameToType[agentName.toLowerCase()] || 'research';
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
  /**