attocode 0.1.9 → 0.2.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.
Files changed (118) hide show
  1. package/CHANGELOG.md +121 -1
  2. package/dist/src/adapters.d.ts.map +1 -1
  3. package/dist/src/adapters.js +1 -0
  4. package/dist/src/adapters.js.map +1 -1
  5. package/dist/src/agent.d.ts +5 -0
  6. package/dist/src/agent.d.ts.map +1 -1
  7. package/dist/src/agent.js +138 -31
  8. package/dist/src/agent.js.map +1 -1
  9. package/dist/src/cli.d.ts +6 -0
  10. package/dist/src/cli.d.ts.map +1 -1
  11. package/dist/src/cli.js +37 -0
  12. package/dist/src/cli.js.map +1 -1
  13. package/dist/src/commands/init-commands.d.ts.map +1 -1
  14. package/dist/src/commands/init-commands.js +57 -0
  15. package/dist/src/commands/init-commands.js.map +1 -1
  16. package/dist/src/core/protocol/types.d.ts +14 -14
  17. package/dist/src/defaults.d.ts.map +1 -1
  18. package/dist/src/defaults.js +1 -0
  19. package/dist/src/defaults.js.map +1 -1
  20. package/dist/src/integrations/economics.d.ts +9 -0
  21. package/dist/src/integrations/economics.d.ts.map +1 -1
  22. package/dist/src/integrations/economics.js +25 -0
  23. package/dist/src/integrations/economics.js.map +1 -1
  24. package/dist/src/integrations/index.d.ts +2 -1
  25. package/dist/src/integrations/index.d.ts.map +1 -1
  26. package/dist/src/integrations/index.js +3 -1
  27. package/dist/src/integrations/index.js.map +1 -1
  28. package/dist/src/integrations/learning-store.d.ts.map +1 -1
  29. package/dist/src/integrations/learning-store.js +6 -0
  30. package/dist/src/integrations/learning-store.js.map +1 -1
  31. package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
  32. package/dist/src/integrations/smart-decomposer.js +7 -0
  33. package/dist/src/integrations/smart-decomposer.js.map +1 -1
  34. package/dist/src/integrations/swarm/index.d.ts +29 -0
  35. package/dist/src/integrations/swarm/index.d.ts.map +1 -0
  36. package/dist/src/integrations/swarm/index.js +29 -0
  37. package/dist/src/integrations/swarm/index.js.map +1 -0
  38. package/dist/src/integrations/swarm/model-selector.d.ts +55 -0
  39. package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -0
  40. package/dist/src/integrations/swarm/model-selector.js +342 -0
  41. package/dist/src/integrations/swarm/model-selector.js.map +1 -0
  42. package/dist/src/integrations/swarm/request-throttle.d.ts +112 -0
  43. package/dist/src/integrations/swarm/request-throttle.d.ts.map +1 -0
  44. package/dist/src/integrations/swarm/request-throttle.js +263 -0
  45. package/dist/src/integrations/swarm/request-throttle.js.map +1 -0
  46. package/dist/src/integrations/swarm/swarm-budget.d.ts +31 -0
  47. package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -0
  48. package/dist/src/integrations/swarm/swarm-budget.js +36 -0
  49. package/dist/src/integrations/swarm/swarm-budget.js.map +1 -0
  50. package/dist/src/integrations/swarm/swarm-config-loader.d.ts +51 -0
  51. package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -0
  52. package/dist/src/integrations/swarm/swarm-config-loader.js +458 -0
  53. package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -0
  54. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +145 -0
  55. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -0
  56. package/dist/src/integrations/swarm/swarm-event-bridge.js +443 -0
  57. package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -0
  58. package/dist/src/integrations/swarm/swarm-events.d.ts +157 -0
  59. package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -0
  60. package/dist/src/integrations/swarm/swarm-events.js +81 -0
  61. package/dist/src/integrations/swarm/swarm-events.js.map +1 -0
  62. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +166 -0
  63. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -0
  64. package/dist/src/integrations/swarm/swarm-orchestrator.js +1114 -0
  65. package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -0
  66. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +29 -0
  67. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -0
  68. package/dist/src/integrations/swarm/swarm-quality-gate.js +85 -0
  69. package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -0
  70. package/dist/src/integrations/swarm/swarm-state-store.d.ts +31 -0
  71. package/dist/src/integrations/swarm/swarm-state-store.d.ts.map +1 -0
  72. package/dist/src/integrations/swarm/swarm-state-store.js +91 -0
  73. package/dist/src/integrations/swarm/swarm-state-store.js.map +1 -0
  74. package/dist/src/integrations/swarm/task-queue.d.ts +128 -0
  75. package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -0
  76. package/dist/src/integrations/swarm/task-queue.js +379 -0
  77. package/dist/src/integrations/swarm/task-queue.js.map +1 -0
  78. package/dist/src/integrations/swarm/types.d.ts +425 -0
  79. package/dist/src/integrations/swarm/types.d.ts.map +1 -0
  80. package/dist/src/integrations/swarm/types.js +96 -0
  81. package/dist/src/integrations/swarm/types.js.map +1 -0
  82. package/dist/src/integrations/swarm/worker-pool.d.ts +96 -0
  83. package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -0
  84. package/dist/src/integrations/swarm/worker-pool.js +269 -0
  85. package/dist/src/integrations/swarm/worker-pool.js.map +1 -0
  86. package/dist/src/main.js +88 -0
  87. package/dist/src/main.js.map +1 -1
  88. package/dist/src/modes/repl.d.ts +1 -0
  89. package/dist/src/modes/repl.d.ts.map +1 -1
  90. package/dist/src/modes/repl.js +2 -1
  91. package/dist/src/modes/repl.js.map +1 -1
  92. package/dist/src/modes/tui.d.ts +1 -0
  93. package/dist/src/modes/tui.d.ts.map +1 -1
  94. package/dist/src/modes/tui.js +3 -1
  95. package/dist/src/modes/tui.js.map +1 -1
  96. package/dist/src/providers/adapters/openrouter.d.ts +14 -0
  97. package/dist/src/providers/adapters/openrouter.d.ts.map +1 -1
  98. package/dist/src/providers/adapters/openrouter.js +53 -1
  99. package/dist/src/providers/adapters/openrouter.js.map +1 -1
  100. package/dist/src/providers/resilient-fetch.d.ts +2 -0
  101. package/dist/src/providers/resilient-fetch.d.ts.map +1 -1
  102. package/dist/src/providers/resilient-fetch.js +27 -3
  103. package/dist/src/providers/resilient-fetch.js.map +1 -1
  104. package/dist/src/providers/types.d.ts +11 -0
  105. package/dist/src/providers/types.d.ts.map +1 -1
  106. package/dist/src/providers/types.js.map +1 -1
  107. package/dist/src/tools/bash.d.ts +2 -2
  108. package/dist/src/tools/file.d.ts +4 -4
  109. package/dist/src/tui/app.d.ts.map +1 -1
  110. package/dist/src/tui/app.js +75 -4
  111. package/dist/src/tui/app.js.map +1 -1
  112. package/dist/src/tui/components/SwarmStatusPanel.d.ts +27 -0
  113. package/dist/src/tui/components/SwarmStatusPanel.d.ts.map +1 -0
  114. package/dist/src/tui/components/SwarmStatusPanel.js +108 -0
  115. package/dist/src/tui/components/SwarmStatusPanel.js.map +1 -0
  116. package/dist/src/types.d.ts +3 -1
  117. package/dist/src/types.d.ts.map +1 -1
  118. package/package.json +1 -1
@@ -0,0 +1,425 @@
1
+ /**
2
+ * Swarm Mode Types
3
+ *
4
+ * Type definitions for the swarm experiment mode where one orchestrator
5
+ * coordinates multiple small specialist worker models.
6
+ */
7
+ import type { SubtaskType, SmartSubtask } from '../smart-decomposer.js';
8
+ import type { AgentOutput, SynthesisResult } from '../result-synthesizer.js';
9
+ import type { StructuredClosureReport } from '../agent-registry.js';
10
+ import type { ThrottleConfig } from './request-throttle.js';
11
+ /** Hierarchical role for authority separation. */
12
+ export type WorkerRole = 'executor' | 'manager' | 'judge';
13
+ /**
14
+ * Top-level swarm configuration.
15
+ * Can be loaded from `.attocode/swarm.yaml` or auto-generated from CLI defaults.
16
+ */
17
+ export interface SwarmConfig {
18
+ /** Whether swarm mode is active */
19
+ enabled: boolean;
20
+ /** Model ID for the orchestrator (e.g., 'thudm/glm-4-32b') */
21
+ orchestratorModel: string;
22
+ /** Worker model definitions */
23
+ workers: SwarmWorkerSpec[];
24
+ /** Max concurrent workers (default: 5) */
25
+ maxConcurrency: number;
26
+ /** Total token budget across all workers (default: 2_000_000) */
27
+ totalBudget: number;
28
+ /** USD cost cap (default: 1.00) */
29
+ maxCost: number;
30
+ /** Fraction of budget reserved for orchestrator (default: 0.15) */
31
+ orchestratorReserveRatio: number;
32
+ /** Max tokens per individual worker (default: 20_000) */
33
+ maxTokensPerWorker: number;
34
+ /** Worker timeout in ms (default: 120_000) */
35
+ workerTimeout: number;
36
+ /** Max iterations per worker (default: 15) */
37
+ workerMaxIterations: number;
38
+ /** Whether to run quality gates on worker outputs (default: true) */
39
+ qualityGates: boolean;
40
+ /** Number of retries for failed workers (default: 1) */
41
+ workerRetries: number;
42
+ /** Strategy for handling file conflicts between workers */
43
+ fileConflictStrategy: 'serialize' | 'claim-based' | 'orchestrator-merges';
44
+ /** Delay between dispatching workers (ms) to avoid rate limits (default: 500) */
45
+ dispatchStaggerMs: number;
46
+ /** Request throttle: 'free' | 'paid' | ThrottleConfig | false (default: 'free') */
47
+ throttle?: ThrottleConfig | 'free' | 'paid' | false;
48
+ /** Base delay before re-dispatching rate-limited tasks in ms (default: 5000) */
49
+ retryBaseDelayMs?: number;
50
+ /** Whether orchestrator creates acceptance criteria per task (default: true) */
51
+ enablePlanning?: boolean;
52
+ /** Whether orchestrator reviews outputs after each wave (default: true) */
53
+ enableWaveReview?: boolean;
54
+ /** Whether to run integration checks before declaring done (default: true) */
55
+ enableVerification?: boolean;
56
+ /** Model for planning/review (defaults to orchestratorModel) */
57
+ plannerModel?: string;
58
+ /** Repeated tool calls before stuck warning (default: 3) */
59
+ workerStuckThreshold?: number;
60
+ /** Whether to checkpoint after each wave (default: true) */
61
+ enablePersistence?: boolean;
62
+ /** Directory for checkpoint files (default: '.agent/swarm-state') */
63
+ stateDir?: string;
64
+ /** Session ID to resume from (set by --swarm-resume) */
65
+ resumeSessionId?: string;
66
+ /** Tool access mode: 'whitelist' uses worker.allowedTools, 'all' gives all tools including MCP (default: 'all') */
67
+ toolAccessMode?: 'whitelist' | 'all';
68
+ /** Tools to deny when toolAccessMode is 'all' */
69
+ globalDeniedTools?: string[];
70
+ /** Whether to switch models on 429/402 errors (default: true) */
71
+ enableModelFailover?: boolean;
72
+ /** Max verification fix-up retries (default: 2) */
73
+ maxVerificationRetries?: number;
74
+ /** Number of retries specifically for rate-limit (429/402) errors (default: 3) */
75
+ rateLimitRetries?: number;
76
+ /** Model to use for quality gates instead of orchestratorModel (default: orchestratorModel) */
77
+ qualityGateModel?: string;
78
+ /** Development philosophy injected into ALL worker system prompts */
79
+ philosophy?: string;
80
+ /** Filter to paid models only (no free tier) */
81
+ paidOnly?: boolean;
82
+ /** Hierarchical authority roles (manager reviews waves, judge runs quality gates) */
83
+ hierarchy?: {
84
+ manager?: {
85
+ model?: string;
86
+ persona?: string;
87
+ };
88
+ judge?: {
89
+ model?: string;
90
+ persona?: string;
91
+ };
92
+ };
93
+ /** Communication settings between workers */
94
+ communication?: {
95
+ blackboard?: boolean;
96
+ dependencyContextMaxLength?: number;
97
+ includeFileList?: boolean;
98
+ };
99
+ /** Preferred decomposition order (e.g., ['test', 'implement', 'document']) */
100
+ decompositionPriorities?: string[];
101
+ }
102
+ /**
103
+ * Default swarm configuration values.
104
+ */
105
+ export declare const DEFAULT_SWARM_CONFIG: Omit<SwarmConfig, 'orchestratorModel' | 'workers'>;
106
+ /** Capability categories for worker models */
107
+ export type WorkerCapability = 'code' | 'research' | 'review' | 'test' | 'document';
108
+ /**
109
+ * Definition for a swarm worker model.
110
+ */
111
+ export interface SwarmWorkerSpec {
112
+ /** Human-readable name (e.g., 'coder', 'researcher') */
113
+ name: string;
114
+ /** OpenRouter model ID (e.g., 'qwen/qwen-2.5-coder-32b-instruct') */
115
+ model: string;
116
+ /** Capabilities this worker is suited for */
117
+ capabilities: WorkerCapability[];
118
+ /** Context window size for compaction tuning */
119
+ contextWindow?: number;
120
+ /** Per-worker token limit override */
121
+ maxTokens?: number;
122
+ /** Whitelist of tools this worker can use */
123
+ allowedTools?: string[];
124
+ /** Blacklist of tools this worker cannot use */
125
+ deniedTools?: string[];
126
+ /** Per-worker behavioral instructions for system prompt */
127
+ persona?: string;
128
+ /** Hierarchical role (default: 'executor') */
129
+ role?: WorkerRole;
130
+ }
131
+ /** Status of a swarm task */
132
+ export type SwarmTaskStatus = 'pending' | 'ready' | 'dispatched' | 'completed' | 'failed' | 'skipped';
133
+ /**
134
+ * A task within the swarm execution pipeline.
135
+ * Maps from SmartSubtask with added swarm-specific fields.
136
+ */
137
+ export interface SwarmTask {
138
+ /** Unique task ID (from SmartSubtask.id) */
139
+ id: string;
140
+ /** Task description */
141
+ description: string;
142
+ /** Task type from SmartDecomposer */
143
+ type: SubtaskType;
144
+ /** IDs of tasks this depends on */
145
+ dependencies: string[];
146
+ /** Current status */
147
+ status: SwarmTaskStatus;
148
+ /** Complexity rating 1-10 */
149
+ complexity: number;
150
+ /** Wave number (computed from parallelGroups) */
151
+ wave: number;
152
+ /** Files this task may modify */
153
+ targetFiles?: string[];
154
+ /** Files this task needs to read */
155
+ readFiles?: string[];
156
+ /** Model assigned to execute this task */
157
+ assignedModel?: string;
158
+ /** Result after execution */
159
+ result?: SwarmTaskResult;
160
+ /** Number of execution attempts */
161
+ attempts: number;
162
+ /** Earliest timestamp when this task can be re-dispatched (non-blocking cooldown) */
163
+ retryAfter?: number;
164
+ /** Aggregated outputs from completed dependencies */
165
+ dependencyContext?: string;
166
+ /** Original SmartSubtask for reference */
167
+ originalSubtask?: SmartSubtask;
168
+ }
169
+ /**
170
+ * Result of a completed swarm task.
171
+ */
172
+ export interface SwarmTaskResult {
173
+ /** Whether the task succeeded */
174
+ success: boolean;
175
+ /** Output content from the worker */
176
+ output: string;
177
+ /** Structured closure report from the worker (if available) */
178
+ closureReport?: StructuredClosureReport;
179
+ /** Quality gate score (1-5, if quality gates enabled) */
180
+ qualityScore?: number;
181
+ /** Quality gate feedback */
182
+ qualityFeedback?: string;
183
+ /** Token usage */
184
+ tokensUsed: number;
185
+ /** Cost in USD */
186
+ costUsed: number;
187
+ /** Duration in ms */
188
+ durationMs: number;
189
+ /** Files modified by this worker */
190
+ filesModified?: string[];
191
+ /** Findings posted to blackboard */
192
+ findings?: string[];
193
+ /** Model that executed this task */
194
+ model: string;
195
+ }
196
+ /**
197
+ * Overall result of a swarm execution.
198
+ */
199
+ export interface SwarmExecutionResult {
200
+ /** Whether the swarm completed successfully */
201
+ success: boolean;
202
+ /** Synthesized output from all workers */
203
+ synthesisResult?: SynthesisResult;
204
+ /** Summary of what was accomplished */
205
+ summary: string;
206
+ /** All task results */
207
+ tasks: SwarmTask[];
208
+ /** Execution statistics */
209
+ stats: SwarmExecutionStats;
210
+ /** Errors encountered */
211
+ errors: SwarmError[];
212
+ }
213
+ /**
214
+ * Statistics from a swarm execution.
215
+ */
216
+ export interface SwarmExecutionStats {
217
+ /** Total number of tasks */
218
+ totalTasks: number;
219
+ /** Number of completed tasks */
220
+ completedTasks: number;
221
+ /** Number of failed tasks */
222
+ failedTasks: number;
223
+ /** Number of skipped tasks (due to dependency failures) */
224
+ skippedTasks: number;
225
+ /** Total waves executed */
226
+ totalWaves: number;
227
+ /** Total tokens consumed across all workers */
228
+ totalTokens: number;
229
+ /** Total cost in USD */
230
+ totalCost: number;
231
+ /** Wall-clock duration in ms */
232
+ totalDurationMs: number;
233
+ /** Number of quality gate rejections */
234
+ qualityRejections: number;
235
+ /** Number of retries */
236
+ retries: number;
237
+ /** Workers by model */
238
+ modelUsage: Map<string, {
239
+ tasks: number;
240
+ tokens: number;
241
+ cost: number;
242
+ }>;
243
+ /** Usage breakdown by role */
244
+ roleUsage?: Map<WorkerRole, {
245
+ calls: number;
246
+ tokens: number;
247
+ cost: number;
248
+ }>;
249
+ }
250
+ /**
251
+ * Swarm error with context.
252
+ */
253
+ export interface SwarmError {
254
+ /** Task ID that caused the error (if applicable) */
255
+ taskId?: string;
256
+ /** Phase where error occurred */
257
+ phase: 'decomposition' | 'scheduling' | 'dispatch' | 'execution' | 'quality-gate' | 'synthesis' | 'planning' | 'review' | 'verification' | 'persistence';
258
+ /** Error message */
259
+ message: string;
260
+ /** Whether this error was recovered from */
261
+ recovered: boolean;
262
+ }
263
+ /**
264
+ * Live status of swarm execution for TUI display.
265
+ */
266
+ export interface SwarmStatus {
267
+ /** Current phase */
268
+ phase: 'decomposing' | 'scheduling' | 'executing' | 'synthesizing' | 'completed' | 'failed' | 'planning' | 'reviewing' | 'verifying';
269
+ /** Current wave number (1-indexed) */
270
+ currentWave: number;
271
+ /** Total waves */
272
+ totalWaves: number;
273
+ /** Active workers */
274
+ activeWorkers: SwarmWorkerStatus[];
275
+ /** Task queue stats */
276
+ queue: {
277
+ ready: number;
278
+ running: number;
279
+ completed: number;
280
+ failed: number;
281
+ skipped: number;
282
+ total: number;
283
+ };
284
+ /** Budget status */
285
+ budget: {
286
+ tokensUsed: number;
287
+ tokensTotal: number;
288
+ costUsed: number;
289
+ costTotal: number;
290
+ };
291
+ }
292
+ /**
293
+ * Status of an individual active worker.
294
+ */
295
+ export interface SwarmWorkerStatus {
296
+ /** Task ID being worked on */
297
+ taskId: string;
298
+ /** Task description */
299
+ taskDescription: string;
300
+ /** Model being used */
301
+ model: string;
302
+ /** Worker name (e.g., 'coder', 'researcher') */
303
+ workerName: string;
304
+ /** Time running in ms */
305
+ elapsedMs: number;
306
+ /** Start time */
307
+ startedAt: number;
308
+ /** Worker role in the hierarchy */
309
+ role?: WorkerRole;
310
+ }
311
+ /** Acceptance criteria for a single task, set by the orchestrator's planning phase. */
312
+ export interface TaskAcceptanceCriteria {
313
+ taskId: string;
314
+ criteria: string[];
315
+ }
316
+ /** A verification step (bash command) to run during integration checks. */
317
+ export interface VerificationStep {
318
+ description: string;
319
+ command: string;
320
+ expectedResult?: string;
321
+ required: boolean;
322
+ }
323
+ /** Plan for integration testing after all waves complete. */
324
+ export interface IntegrationTestPlan {
325
+ description: string;
326
+ steps: VerificationStep[];
327
+ successCriteria: string;
328
+ }
329
+ /** Orchestrator's execution plan created during the planning phase. */
330
+ export interface SwarmPlan {
331
+ acceptanceCriteria: TaskAcceptanceCriteria[];
332
+ integrationTestPlan?: IntegrationTestPlan;
333
+ reasoning: string;
334
+ }
335
+ /** Result of running verification steps. */
336
+ export interface VerificationResult {
337
+ passed: boolean;
338
+ stepResults: Array<{
339
+ step: VerificationStep;
340
+ passed: boolean;
341
+ output: string;
342
+ }>;
343
+ summary: string;
344
+ }
345
+ /** Orchestrator's assessment after reviewing a completed wave. */
346
+ export interface WaveReviewResult {
347
+ wave: number;
348
+ assessment: 'good' | 'needs-fixes' | 'critical-issues';
349
+ taskAssessments: Array<{
350
+ taskId: string;
351
+ passed: boolean;
352
+ feedback?: string;
353
+ }>;
354
+ fixupTasks: FixupTask[];
355
+ }
356
+ /** A correction task spawned by wave review. */
357
+ export interface FixupTask extends SwarmTask {
358
+ /** The original task this fixes */
359
+ fixesTaskId: string;
360
+ /** Specific fix instructions from the reviewer */
361
+ fixInstructions: string;
362
+ }
363
+ /** Per-model health tracking for failover decisions. */
364
+ export interface ModelHealthRecord {
365
+ model: string;
366
+ successes: number;
367
+ failures: number;
368
+ rateLimits: number;
369
+ lastRateLimit?: number;
370
+ averageLatencyMs: number;
371
+ healthy: boolean;
372
+ }
373
+ /** Serializable swarm state for persistence/resume. */
374
+ export interface SwarmCheckpoint {
375
+ sessionId: string;
376
+ timestamp: number;
377
+ phase: SwarmStatus['phase'];
378
+ plan?: SwarmPlan;
379
+ taskStates: Array<{
380
+ id: string;
381
+ status: SwarmTaskStatus;
382
+ result?: SwarmTaskResult;
383
+ attempts: number;
384
+ wave: number;
385
+ assignedModel?: string;
386
+ }>;
387
+ waves: string[][];
388
+ currentWave: number;
389
+ stats: {
390
+ totalTokens: number;
391
+ totalCost: number;
392
+ qualityRejections: number;
393
+ retries: number;
394
+ };
395
+ modelHealth: ModelHealthRecord[];
396
+ decisions: OrchestratorDecision[];
397
+ errors: SwarmError[];
398
+ }
399
+ /** Logged orchestrator decision with reasoning. */
400
+ export interface OrchestratorDecision {
401
+ timestamp: number;
402
+ phase: string;
403
+ decision: string;
404
+ reasoning: string;
405
+ }
406
+ /** Worker tool call/response log entry for per-worker conversation tracking. */
407
+ export interface WorkerConversationEntry {
408
+ taskId: string;
409
+ timestamp: number;
410
+ type: 'tool_call' | 'tool_result' | 'llm_response';
411
+ content: string;
412
+ }
413
+ /**
414
+ * Maps SubtaskType to WorkerCapability for task-worker matching.
415
+ */
416
+ export declare const SUBTASK_TO_CAPABILITY: Record<SubtaskType, WorkerCapability>;
417
+ /**
418
+ * Convert a SmartSubtask to a SwarmTask.
419
+ */
420
+ export declare function subtaskToSwarmTask(subtask: SmartSubtask, wave: number): SwarmTask;
421
+ /**
422
+ * Convert a SwarmTaskResult to an AgentOutput for ResultSynthesizer.
423
+ */
424
+ export declare function taskResultToAgentOutput(task: SwarmTask): AgentOutput | null;
425
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/integrations/swarm/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Swarm Mode Types
3
+ *
4
+ * Type definitions for the swarm experiment mode where one orchestrator
5
+ * coordinates multiple small specialist worker models.
6
+ */
7
+ /**
8
+ * Default swarm configuration values.
9
+ */
10
+ export const DEFAULT_SWARM_CONFIG = {
11
+ enabled: true,
12
+ maxConcurrency: 3,
13
+ totalBudget: 5_000_000,
14
+ maxCost: 10.00,
15
+ orchestratorReserveRatio: 0.15,
16
+ maxTokensPerWorker: 50_000,
17
+ workerTimeout: 120_000,
18
+ workerMaxIterations: 15,
19
+ qualityGates: true,
20
+ workerRetries: 2,
21
+ fileConflictStrategy: 'claim-based',
22
+ dispatchStaggerMs: 1500,
23
+ throttle: 'free',
24
+ retryBaseDelayMs: 5000,
25
+ enablePlanning: true,
26
+ enableWaveReview: true,
27
+ enableVerification: true,
28
+ workerStuckThreshold: 3,
29
+ enablePersistence: true,
30
+ stateDir: '.agent/swarm-state',
31
+ toolAccessMode: 'all',
32
+ enableModelFailover: true,
33
+ maxVerificationRetries: 2,
34
+ rateLimitRetries: 3,
35
+ };
36
+ // ─── Utility Types ─────────────────────────────────────────────────────────
37
+ /**
38
+ * Maps SubtaskType to WorkerCapability for task-worker matching.
39
+ */
40
+ export const SUBTASK_TO_CAPABILITY = {
41
+ research: 'research',
42
+ analysis: 'research',
43
+ design: 'research',
44
+ implement: 'code',
45
+ test: 'test',
46
+ refactor: 'code',
47
+ review: 'review',
48
+ document: 'document',
49
+ integrate: 'code',
50
+ deploy: 'code',
51
+ merge: 'code',
52
+ };
53
+ /**
54
+ * Convert a SmartSubtask to a SwarmTask.
55
+ */
56
+ export function subtaskToSwarmTask(subtask, wave) {
57
+ return {
58
+ id: subtask.id,
59
+ description: subtask.description,
60
+ type: subtask.type,
61
+ dependencies: subtask.dependencies,
62
+ status: subtask.dependencies.length === 0 ? 'ready' : 'pending',
63
+ complexity: subtask.complexity,
64
+ wave,
65
+ targetFiles: subtask.modifies,
66
+ readFiles: subtask.reads,
67
+ attempts: 0,
68
+ originalSubtask: subtask,
69
+ };
70
+ }
71
+ /**
72
+ * Convert a SwarmTaskResult to an AgentOutput for ResultSynthesizer.
73
+ */
74
+ export function taskResultToAgentOutput(task) {
75
+ if (!task.result || !task.result.success)
76
+ return null;
77
+ return {
78
+ agentId: `swarm-worker-${task.id}`,
79
+ content: task.result.output,
80
+ type: task.type === 'implement' || task.type === 'refactor' ? 'code'
81
+ : task.type === 'research' || task.type === 'analysis' ? 'research'
82
+ : task.type === 'review' ? 'review'
83
+ : task.type === 'document' ? 'documentation'
84
+ : task.type === 'test' ? 'code'
85
+ : 'mixed',
86
+ confidence: task.result.qualityScore ? task.result.qualityScore / 5 : 0.7,
87
+ findings: task.result.findings,
88
+ metadata: {
89
+ taskId: task.id,
90
+ model: task.result.model,
91
+ tokensUsed: task.result.tokensUsed,
92
+ wave: task.wave,
93
+ },
94
+ };
95
+ }
96
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/integrations/swarm/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwIH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuD;IACtF,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,CAAC;IACjB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,KAAK;IACd,wBAAwB,EAAE,IAAI;IAC9B,kBAAkB,EAAE,MAAM;IAC1B,aAAa,EAAE,OAAO;IACtB,mBAAmB,EAAE,EAAE;IACvB,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,CAAC;IAChB,oBAAoB,EAAE,aAAa;IACnC,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,MAAe;IACzB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,CAAC;IACvB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,oBAAoB;IAC9B,cAAc,EAAE,KAAc;IAC9B,mBAAmB,EAAE,IAAI;IACzB,sBAAsB,EAAE,CAAC;IACzB,gBAAgB,EAAE,CAAC;CACpB,CAAC;AA8XF,8EAA8E;AAE9E;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA0C;IAC1E,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,UAAU;IAClB,SAAS,EAAE,MAAM;IACjB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,MAAM;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAqB,EAAE,IAAY;IACpE,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC/D,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI;QACJ,WAAW,EAAE,OAAO,CAAC,QAAQ;QAC7B,SAAS,EAAE,OAAO,CAAC,KAAK;QACxB,QAAQ,EAAE,CAAC;QACX,eAAe,EAAE,OAAO;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAe;IACrD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEtD,OAAO;QACL,OAAO,EAAE,gBAAgB,IAAI,CAAC,EAAE,EAAE;QAClC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM;YAClE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU;gBACnE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;oBACnC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe;wBAC5C,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM;4BAC/B,CAAC,CAAC,OAAO;QACX,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;QACzE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QAC9B,QAAQ,EAAE;YACR,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Swarm Worker Pool
3
+ *
4
+ * Manages concurrent worker dispatch via existing spawnAgent() infrastructure.
5
+ * Uses slot-based concurrency control and dynamic agent registration.
6
+ */
7
+ import type { AgentRegistry, SpawnResult } from '../agent-registry.js';
8
+ import type { SwarmConfig, SwarmTask, SwarmTaskResult, SwarmWorkerSpec, SwarmWorkerStatus } from './types.js';
9
+ import type { SwarmBudgetPool } from './swarm-budget.js';
10
+ /** Function signature matching ProductionAgent.spawnAgent() */
11
+ export type SpawnAgentFn = (agentName: string, task: string) => Promise<SpawnResult>;
12
+ export declare class SwarmWorkerPool {
13
+ private config;
14
+ private agentRegistry;
15
+ private spawnAgent;
16
+ private budgetPool;
17
+ private workers;
18
+ private activeWorkers;
19
+ private registeredAgentNames;
20
+ private dispatchCount;
21
+ constructor(config: SwarmConfig, agentRegistry: AgentRegistry, spawnAgent: SpawnAgentFn, budgetPool: SwarmBudgetPool);
22
+ /**
23
+ * Get number of available slots.
24
+ */
25
+ get availableSlots(): number;
26
+ /**
27
+ * Get number of active workers.
28
+ */
29
+ get activeCount(): number;
30
+ /**
31
+ * Select the best worker spec for a task based on capability matching.
32
+ */
33
+ selectWorker(task: SwarmTask): SwarmWorkerSpec | undefined;
34
+ /**
35
+ * Dispatch a task to a worker.
36
+ *
37
+ * 1. Selects appropriate worker model
38
+ * 2. Registers a dynamic agent definition
39
+ * 3. Calls spawnAgent() to create the worker
40
+ */
41
+ dispatch(task: SwarmTask): Promise<void>;
42
+ /**
43
+ * Wait for any active worker to complete.
44
+ * Returns the task ID, spawn result, and worker startedAt timestamp.
45
+ *
46
+ * H1: Rewritten to handle errors correctly. The old approach used
47
+ * Promise.race([promise, Promise.resolve('pending')]) which always
48
+ * resolved to 'pending' immediately, making error detection impossible.
49
+ */
50
+ waitForAny(): Promise<{
51
+ taskId: string;
52
+ result: SpawnResult;
53
+ startedAt: number;
54
+ } | null>;
55
+ /**
56
+ * Wait for all active workers to complete.
57
+ */
58
+ waitForAll(): Promise<{
59
+ taskId: string;
60
+ result: SpawnResult;
61
+ startedAt: number;
62
+ }[]>;
63
+ /**
64
+ * Convert a SpawnResult to a SwarmTaskResult.
65
+ * C4: Estimate cost from tokens using rough per-token pricing.
66
+ */
67
+ toTaskResult(spawnResult: SpawnResult, task: SwarmTask, durationMs: number): SwarmTaskResult;
68
+ /**
69
+ * Get status of all active workers (for TUI).
70
+ */
71
+ getActiveWorkerStatus(): SwarmWorkerStatus[];
72
+ /**
73
+ * Cancel all active workers and wait briefly for cleanup.
74
+ * M6: Used by orchestrator cancel() to let workers finish gracefully.
75
+ */
76
+ cancelAll(): Promise<void>;
77
+ /**
78
+ * Clean up all registered agents.
79
+ */
80
+ cleanup(): void;
81
+ /**
82
+ * Build a system prompt for a worker.
83
+ * V2: Enhanced with anti-loop rules, no-exploration directive, and output format requirements.
84
+ */
85
+ private buildWorkerSystemPrompt;
86
+ /**
87
+ * Build a task prompt including dependency context.
88
+ * V2: Truncates large dependency context to prevent context explosion.
89
+ */
90
+ private buildTaskPrompt;
91
+ }
92
+ /**
93
+ * Factory function.
94
+ */
95
+ export declare function createSwarmWorkerPool(config: SwarmConfig, agentRegistry: AgentRegistry, spawnAgent: SpawnAgentFn, budgetPool: SwarmBudgetPool): SwarmWorkerPool;
96
+ //# sourceMappingURL=worker-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../../../src/integrations/swarm/worker-pool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAmB,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG9G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,+DAA+D;AAC/D,MAAM,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAcrF,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,OAAO,CAAoB;IAEnC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,aAAa,CAAK;gBAGxB,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,YAAY,EACxB,UAAU,EAAE,eAAe;IAS7B;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS;IAK1D;;;;;;OAMG;IACG,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAoE9C;;;;;;;OAOG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA+B9F;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAWzF;;;OAGG;IACH,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe;IAoB5F;;OAEG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAY5C;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAoD/B;;;OAGG;IACH,OAAO,CAAC,eAAe;CAwBxB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,YAAY,EACxB,UAAU,EAAE,eAAe,GAC1B,eAAe,CAEjB"}