attocode 0.1.9 → 0.2.1
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 +141 -1
- package/dist/src/adapters.d.ts.map +1 -1
- package/dist/src/adapters.js +7 -0
- package/dist/src/adapters.js.map +1 -1
- package/dist/src/agent.d.ts +24 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +539 -330
- package/dist/src/agent.js.map +1 -1
- package/dist/src/cli.d.ts +6 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +37 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/init-commands.d.ts.map +1 -1
- package/dist/src/commands/init-commands.js +57 -0
- package/dist/src/commands/init-commands.js.map +1 -1
- package/dist/src/core/protocol/types.d.ts +14 -14
- package/dist/src/defaults.d.ts +1 -1
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +1 -0
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/integrations/agent-registry.d.ts +7 -2
- package/dist/src/integrations/agent-registry.d.ts.map +1 -1
- package/dist/src/integrations/agent-registry.js +30 -4
- package/dist/src/integrations/agent-registry.js.map +1 -1
- package/dist/src/integrations/budget-pool.d.ts +13 -1
- package/dist/src/integrations/budget-pool.d.ts.map +1 -1
- package/dist/src/integrations/budget-pool.js +17 -0
- package/dist/src/integrations/budget-pool.js.map +1 -1
- package/dist/src/integrations/economics.d.ts +9 -0
- package/dist/src/integrations/economics.d.ts.map +1 -1
- package/dist/src/integrations/economics.js +25 -0
- package/dist/src/integrations/economics.js.map +1 -1
- package/dist/src/integrations/index.d.ts +2 -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/learning-store.d.ts.map +1 -1
- package/dist/src/integrations/learning-store.js +6 -0
- package/dist/src/integrations/learning-store.js.map +1 -1
- package/dist/src/integrations/routing.d.ts +2 -1
- package/dist/src/integrations/routing.d.ts.map +1 -1
- package/dist/src/integrations/routing.js.map +1 -1
- package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
- package/dist/src/integrations/smart-decomposer.js +7 -0
- package/dist/src/integrations/smart-decomposer.js.map +1 -1
- package/dist/src/integrations/swarm/index.d.ts +29 -0
- package/dist/src/integrations/swarm/index.d.ts.map +1 -0
- package/dist/src/integrations/swarm/index.js +29 -0
- package/dist/src/integrations/swarm/index.js.map +1 -0
- package/dist/src/integrations/swarm/model-selector.d.ts +55 -0
- package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -0
- package/dist/src/integrations/swarm/model-selector.js +342 -0
- package/dist/src/integrations/swarm/model-selector.js.map +1 -0
- package/dist/src/integrations/swarm/request-throttle.d.ts +112 -0
- package/dist/src/integrations/swarm/request-throttle.d.ts.map +1 -0
- package/dist/src/integrations/swarm/request-throttle.js +263 -0
- package/dist/src/integrations/swarm/request-throttle.js.map +1 -0
- package/dist/src/integrations/swarm/swarm-budget.d.ts +31 -0
- package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -0
- package/dist/src/integrations/swarm/swarm-budget.js +36 -0
- package/dist/src/integrations/swarm/swarm-budget.js.map +1 -0
- package/dist/src/integrations/swarm/swarm-config-loader.d.ts +51 -0
- package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -0
- package/dist/src/integrations/swarm/swarm-config-loader.js +458 -0
- package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -0
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +145 -0
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -0
- package/dist/src/integrations/swarm/swarm-event-bridge.js +443 -0
- package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -0
- package/dist/src/integrations/swarm/swarm-events.d.ts +157 -0
- package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -0
- package/dist/src/integrations/swarm/swarm-events.js +81 -0
- package/dist/src/integrations/swarm/swarm-events.js.map +1 -0
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +166 -0
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -0
- package/dist/src/integrations/swarm/swarm-orchestrator.js +1114 -0
- package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -0
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +29 -0
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -0
- package/dist/src/integrations/swarm/swarm-quality-gate.js +85 -0
- package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -0
- package/dist/src/integrations/swarm/swarm-state-store.d.ts +31 -0
- package/dist/src/integrations/swarm/swarm-state-store.d.ts.map +1 -0
- package/dist/src/integrations/swarm/swarm-state-store.js +91 -0
- package/dist/src/integrations/swarm/swarm-state-store.js.map +1 -0
- package/dist/src/integrations/swarm/task-queue.d.ts +128 -0
- package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -0
- package/dist/src/integrations/swarm/task-queue.js +379 -0
- package/dist/src/integrations/swarm/task-queue.js.map +1 -0
- package/dist/src/integrations/swarm/types.d.ts +425 -0
- package/dist/src/integrations/swarm/types.d.ts.map +1 -0
- package/dist/src/integrations/swarm/types.js +96 -0
- package/dist/src/integrations/swarm/types.js.map +1 -0
- package/dist/src/integrations/swarm/worker-pool.d.ts +96 -0
- package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -0
- package/dist/src/integrations/swarm/worker-pool.js +269 -0
- package/dist/src/integrations/swarm/worker-pool.js.map +1 -0
- package/dist/src/main.js +88 -0
- package/dist/src/main.js.map +1 -1
- package/dist/src/modes/repl.d.ts +1 -0
- package/dist/src/modes/repl.d.ts.map +1 -1
- package/dist/src/modes/repl.js +2 -1
- package/dist/src/modes/repl.js.map +1 -1
- package/dist/src/modes/tui.d.ts +1 -0
- package/dist/src/modes/tui.d.ts.map +1 -1
- package/dist/src/modes/tui.js +3 -1
- package/dist/src/modes/tui.js.map +1 -1
- package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
- package/dist/src/providers/adapters/anthropic.js +20 -3
- package/dist/src/providers/adapters/anthropic.js.map +1 -1
- package/dist/src/providers/adapters/openrouter.d.ts +14 -0
- package/dist/src/providers/adapters/openrouter.d.ts.map +1 -1
- package/dist/src/providers/adapters/openrouter.js +56 -2
- package/dist/src/providers/adapters/openrouter.js.map +1 -1
- package/dist/src/providers/resilient-fetch.d.ts +2 -0
- package/dist/src/providers/resilient-fetch.d.ts.map +1 -1
- package/dist/src/providers/resilient-fetch.js +27 -3
- package/dist/src/providers/resilient-fetch.js.map +1 -1
- package/dist/src/providers/types.d.ts +15 -0
- package/dist/src/providers/types.d.ts.map +1 -1
- package/dist/src/providers/types.js.map +1 -1
- package/dist/src/tools/bash.d.ts +4 -4
- package/dist/src/tools/bash.d.ts.map +1 -1
- package/dist/src/tools/bash.js +2 -1
- package/dist/src/tools/bash.js.map +1 -1
- package/dist/src/tools/coercion.d.ts +14 -0
- package/dist/src/tools/coercion.d.ts.map +1 -0
- package/dist/src/tools/coercion.js +25 -0
- package/dist/src/tools/coercion.js.map +1 -0
- package/dist/src/tools/file.d.ts +5 -5
- package/dist/src/tools/file.d.ts.map +1 -1
- package/dist/src/tools/file.js +2 -1
- package/dist/src/tools/file.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +83 -5
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/components/SwarmStatusPanel.d.ts +27 -0
- package/dist/src/tui/components/SwarmStatusPanel.d.ts.map +1 -0
- package/dist/src/tui/components/SwarmStatusPanel.js +108 -0
- package/dist/src/tui/components/SwarmStatusPanel.js.map +1 -0
- package/dist/src/tui/event-display.d.ts.map +1 -1
- package/dist/src/tui/event-display.js +8 -1
- package/dist/src/tui/event-display.js.map +1 -1
- package/dist/src/types.d.ts +11 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swarm Task Queue
|
|
3
|
+
*
|
|
4
|
+
* Wave-based task scheduling with dependency resolution.
|
|
5
|
+
* Uses SmartDecomposer's parallelGroups to organize tasks into waves,
|
|
6
|
+
* manages status transitions, and builds dependency context for workers.
|
|
7
|
+
*/
|
|
8
|
+
import { subtaskToSwarmTask } from './types.js';
|
|
9
|
+
// ─── Task Queue ────────────────────────────────────────────────────────────
|
|
10
|
+
export class SwarmTaskQueue {
|
|
11
|
+
tasks = new Map();
|
|
12
|
+
waves = [];
|
|
13
|
+
conflicts = [];
|
|
14
|
+
currentWave = 0;
|
|
15
|
+
/**
|
|
16
|
+
* Load tasks from a SmartDecompositionResult.
|
|
17
|
+
* Converts subtasks to SwarmTasks and organizes them into waves
|
|
18
|
+
* based on the dependency graph's parallelGroups.
|
|
19
|
+
*/
|
|
20
|
+
loadFromDecomposition(result, config) {
|
|
21
|
+
this.tasks.clear();
|
|
22
|
+
this.waves = [];
|
|
23
|
+
this.conflicts = result.conflicts;
|
|
24
|
+
const { subtasks, dependencyGraph } = result;
|
|
25
|
+
const parallelGroups = dependencyGraph.parallelGroups;
|
|
26
|
+
// Map subtask IDs to wave numbers
|
|
27
|
+
const taskWaveMap = new Map();
|
|
28
|
+
for (let wave = 0; wave < parallelGroups.length; wave++) {
|
|
29
|
+
for (const taskId of parallelGroups[wave]) {
|
|
30
|
+
taskWaveMap.set(taskId, wave);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Handle file conflicts: if 'serialize' strategy, move conflicting tasks to later waves
|
|
34
|
+
const serializedMoves = new Map();
|
|
35
|
+
if (config.fileConflictStrategy === 'serialize') {
|
|
36
|
+
for (const conflict of this.conflicts) {
|
|
37
|
+
if (conflict.type === 'write-write') {
|
|
38
|
+
// Keep first task in its wave, push subsequent ones to later waves
|
|
39
|
+
for (let i = 1; i < conflict.taskIds.length; i++) {
|
|
40
|
+
const taskId = conflict.taskIds[i];
|
|
41
|
+
const currentWave = taskWaveMap.get(taskId) ?? 0;
|
|
42
|
+
const prevTaskWave = taskWaveMap.get(conflict.taskIds[i - 1]) ?? 0;
|
|
43
|
+
const newWave = Math.max(currentWave, prevTaskWave + 1);
|
|
44
|
+
serializedMoves.set(taskId, newWave);
|
|
45
|
+
taskWaveMap.set(taskId, newWave);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Convert subtasks to SwarmTasks with wave assignments
|
|
51
|
+
for (const subtask of subtasks) {
|
|
52
|
+
const wave = taskWaveMap.get(subtask.id) ?? 0;
|
|
53
|
+
const swarmTask = subtaskToSwarmTask(subtask, wave);
|
|
54
|
+
// Apply serialization if needed
|
|
55
|
+
if (serializedMoves.has(subtask.id)) {
|
|
56
|
+
swarmTask.wave = serializedMoves.get(subtask.id);
|
|
57
|
+
}
|
|
58
|
+
this.tasks.set(subtask.id, swarmTask);
|
|
59
|
+
}
|
|
60
|
+
// Build wave groups from assigned waves
|
|
61
|
+
this.rebuildWaves();
|
|
62
|
+
// Set initial ready status for tasks with no dependencies
|
|
63
|
+
this.updateReadyStatus();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Rebuild wave arrays from task wave assignments.
|
|
67
|
+
*/
|
|
68
|
+
rebuildWaves() {
|
|
69
|
+
const waveMap = new Map();
|
|
70
|
+
for (const [id, task] of this.tasks) {
|
|
71
|
+
const wave = task.wave;
|
|
72
|
+
if (!waveMap.has(wave))
|
|
73
|
+
waveMap.set(wave, []);
|
|
74
|
+
waveMap.get(wave).push(id);
|
|
75
|
+
}
|
|
76
|
+
// Sort by wave number and convert to array
|
|
77
|
+
const sortedWaves = [...waveMap.entries()].sort((a, b) => a[0] - b[0]);
|
|
78
|
+
this.waves = sortedWaves.map(([, ids]) => ids);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Update task ready status based on dependency completion.
|
|
82
|
+
*/
|
|
83
|
+
updateReadyStatus() {
|
|
84
|
+
for (const [, task] of this.tasks) {
|
|
85
|
+
if (task.status !== 'pending')
|
|
86
|
+
continue;
|
|
87
|
+
const allDepsComplete = task.dependencies.every(depId => {
|
|
88
|
+
const dep = this.tasks.get(depId);
|
|
89
|
+
return dep && (dep.status === 'completed' || dep.status === 'skipped');
|
|
90
|
+
});
|
|
91
|
+
const anyDepFailed = task.dependencies.some(depId => {
|
|
92
|
+
const dep = this.tasks.get(depId);
|
|
93
|
+
return dep && dep.status === 'failed';
|
|
94
|
+
});
|
|
95
|
+
if (anyDepFailed) {
|
|
96
|
+
task.status = 'skipped';
|
|
97
|
+
}
|
|
98
|
+
else if (allDepsComplete) {
|
|
99
|
+
task.status = 'ready';
|
|
100
|
+
// Build dependency context from completed deps
|
|
101
|
+
task.dependencyContext = this.buildDependencyContext(task);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Build context string from completed dependency outputs.
|
|
107
|
+
*/
|
|
108
|
+
buildDependencyContext(task) {
|
|
109
|
+
const parts = [];
|
|
110
|
+
for (const depId of task.dependencies) {
|
|
111
|
+
const dep = this.tasks.get(depId);
|
|
112
|
+
if (!dep || !dep.result || !dep.result.success)
|
|
113
|
+
continue;
|
|
114
|
+
const summary = dep.result.closureReport
|
|
115
|
+
? dep.result.closureReport.findings.join('\n') + '\n' + dep.result.closureReport.actionsTaken.join('\n')
|
|
116
|
+
: dep.result.output.slice(0, 500);
|
|
117
|
+
parts.push(`[Dependency: ${dep.description}]\n${summary}`);
|
|
118
|
+
}
|
|
119
|
+
return parts.length > 0 ? parts.join('\n\n') : '';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get all tasks ready for dispatch in the current wave.
|
|
123
|
+
* Filters out tasks with a retryAfter timestamp in the future.
|
|
124
|
+
*/
|
|
125
|
+
getReadyTasks() {
|
|
126
|
+
if (this.currentWave >= this.waves.length)
|
|
127
|
+
return [];
|
|
128
|
+
const now = Date.now();
|
|
129
|
+
const waveTaskIds = this.waves[this.currentWave];
|
|
130
|
+
return waveTaskIds
|
|
131
|
+
.map(id => this.tasks.get(id))
|
|
132
|
+
.filter(task => task.status === 'ready' && !(task.retryAfter && now < task.retryAfter));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get all tasks across all waves that are ready (for filling slots).
|
|
136
|
+
* Filters out tasks with a retryAfter timestamp in the future.
|
|
137
|
+
*/
|
|
138
|
+
getAllReadyTasks() {
|
|
139
|
+
const now = Date.now();
|
|
140
|
+
const ready = [];
|
|
141
|
+
for (const [, task] of this.tasks) {
|
|
142
|
+
if (task.status === 'ready' && !(task.retryAfter && now < task.retryAfter)) {
|
|
143
|
+
ready.push(task);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Sort by wave (prefer current wave), then by complexity (harder first)
|
|
147
|
+
return ready.sort((a, b) => {
|
|
148
|
+
if (a.wave !== b.wave)
|
|
149
|
+
return a.wave - b.wave;
|
|
150
|
+
return b.complexity - a.complexity;
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Set a non-blocking cooldown on a task before it can be re-dispatched.
|
|
155
|
+
*/
|
|
156
|
+
setRetryAfter(taskId, delayMs) {
|
|
157
|
+
const task = this.tasks.get(taskId);
|
|
158
|
+
if (task) {
|
|
159
|
+
task.retryAfter = Date.now() + delayMs;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Mark a task as dispatched.
|
|
164
|
+
*/
|
|
165
|
+
markDispatched(taskId, model) {
|
|
166
|
+
const task = this.tasks.get(taskId);
|
|
167
|
+
if (!task)
|
|
168
|
+
return;
|
|
169
|
+
task.status = 'dispatched';
|
|
170
|
+
task.assignedModel = model;
|
|
171
|
+
task.attempts++;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Mark a task as completed with its result.
|
|
175
|
+
*/
|
|
176
|
+
markCompleted(taskId, result) {
|
|
177
|
+
const task = this.tasks.get(taskId);
|
|
178
|
+
if (!task)
|
|
179
|
+
return;
|
|
180
|
+
task.status = 'completed';
|
|
181
|
+
task.result = result;
|
|
182
|
+
// Update dependent tasks' ready status
|
|
183
|
+
this.updateReadyStatus();
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Mark a task as failed.
|
|
187
|
+
* Returns true if the task can be retried (attempts < maxAttempts).
|
|
188
|
+
*/
|
|
189
|
+
markFailed(taskId, maxRetries) {
|
|
190
|
+
const task = this.tasks.get(taskId);
|
|
191
|
+
if (!task)
|
|
192
|
+
return false;
|
|
193
|
+
if (task.attempts <= maxRetries) {
|
|
194
|
+
// Reset to ready for retry
|
|
195
|
+
task.status = 'ready';
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
task.status = 'failed';
|
|
199
|
+
// Cascade: skip all dependents of a failed task
|
|
200
|
+
this.cascadeSkip(taskId);
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Skip all tasks that depend (transitively) on a failed task.
|
|
205
|
+
*/
|
|
206
|
+
cascadeSkip(failedTaskId) {
|
|
207
|
+
for (const [, task] of this.tasks) {
|
|
208
|
+
// H5: Also skip dispatched tasks whose dependency failed
|
|
209
|
+
if (task.status !== 'pending' && task.status !== 'ready' && task.status !== 'dispatched')
|
|
210
|
+
continue;
|
|
211
|
+
if (this.dependsOn(task.id, failedTaskId)) {
|
|
212
|
+
task.status = 'skipped';
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Check if taskId transitively depends on depId.
|
|
218
|
+
*/
|
|
219
|
+
dependsOn(taskId, depId, visited = new Set()) {
|
|
220
|
+
if (visited.has(taskId))
|
|
221
|
+
return false;
|
|
222
|
+
visited.add(taskId);
|
|
223
|
+
const task = this.tasks.get(taskId);
|
|
224
|
+
if (!task)
|
|
225
|
+
return false;
|
|
226
|
+
if (task.dependencies.includes(depId))
|
|
227
|
+
return true;
|
|
228
|
+
return task.dependencies.some(d => this.dependsOn(d, depId, visited));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Check if the current wave is complete (all tasks resolved).
|
|
232
|
+
*/
|
|
233
|
+
isCurrentWaveComplete() {
|
|
234
|
+
if (this.currentWave >= this.waves.length)
|
|
235
|
+
return true;
|
|
236
|
+
const waveTaskIds = this.waves[this.currentWave];
|
|
237
|
+
return waveTaskIds.every(id => {
|
|
238
|
+
const task = this.tasks.get(id);
|
|
239
|
+
return task && (task.status === 'completed' || task.status === 'failed' || task.status === 'skipped');
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Advance to the next wave. Returns true if there are more waves.
|
|
244
|
+
*/
|
|
245
|
+
advanceWave() {
|
|
246
|
+
this.currentWave++;
|
|
247
|
+
if (this.currentWave < this.waves.length) {
|
|
248
|
+
this.updateReadyStatus();
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Check if all tasks are resolved (no more work to do).
|
|
255
|
+
*/
|
|
256
|
+
isComplete() {
|
|
257
|
+
for (const [, task] of this.tasks) {
|
|
258
|
+
if (task.status === 'pending' || task.status === 'ready' || task.status === 'dispatched') {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get a task by ID.
|
|
266
|
+
*/
|
|
267
|
+
getTask(taskId) {
|
|
268
|
+
return this.tasks.get(taskId);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get all tasks.
|
|
272
|
+
*/
|
|
273
|
+
getAllTasks() {
|
|
274
|
+
return [...this.tasks.values()];
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get the current wave number (0-indexed).
|
|
278
|
+
*/
|
|
279
|
+
getCurrentWave() {
|
|
280
|
+
return this.currentWave;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get total number of waves.
|
|
284
|
+
*/
|
|
285
|
+
getTotalWaves() {
|
|
286
|
+
return this.waves.length;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Get task count by status.
|
|
290
|
+
*/
|
|
291
|
+
getStats() {
|
|
292
|
+
let ready = 0, running = 0, completed = 0, failed = 0, skipped = 0;
|
|
293
|
+
for (const [, task] of this.tasks) {
|
|
294
|
+
switch (task.status) {
|
|
295
|
+
case 'ready':
|
|
296
|
+
ready++;
|
|
297
|
+
break;
|
|
298
|
+
case 'dispatched':
|
|
299
|
+
running++;
|
|
300
|
+
break;
|
|
301
|
+
case 'completed':
|
|
302
|
+
completed++;
|
|
303
|
+
break;
|
|
304
|
+
case 'failed':
|
|
305
|
+
failed++;
|
|
306
|
+
break;
|
|
307
|
+
case 'skipped':
|
|
308
|
+
skipped++;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return { ready, running, completed, failed, skipped, total: this.tasks.size };
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get conflicts for reference.
|
|
316
|
+
*/
|
|
317
|
+
getConflicts() {
|
|
318
|
+
return this.conflicts;
|
|
319
|
+
}
|
|
320
|
+
// ─── V2: Checkpoint & Restore ─────────────────────────────────────────
|
|
321
|
+
/**
|
|
322
|
+
* Export current state for checkpoint serialization.
|
|
323
|
+
*/
|
|
324
|
+
getCheckpointState() {
|
|
325
|
+
const taskStates = [...this.tasks.values()].map(t => ({
|
|
326
|
+
id: t.id,
|
|
327
|
+
status: t.status,
|
|
328
|
+
result: t.result,
|
|
329
|
+
attempts: t.attempts,
|
|
330
|
+
wave: t.wave,
|
|
331
|
+
assignedModel: t.assignedModel,
|
|
332
|
+
}));
|
|
333
|
+
return {
|
|
334
|
+
taskStates,
|
|
335
|
+
waves: this.waves,
|
|
336
|
+
currentWave: this.currentWave,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Restore state from a checkpoint. Merges checkpoint state into existing tasks.
|
|
341
|
+
*/
|
|
342
|
+
restoreFromCheckpoint(state) {
|
|
343
|
+
this.waves = state.waves;
|
|
344
|
+
this.currentWave = state.currentWave;
|
|
345
|
+
for (const ts of state.taskStates) {
|
|
346
|
+
const task = this.tasks.get(ts.id);
|
|
347
|
+
if (task) {
|
|
348
|
+
task.status = ts.status;
|
|
349
|
+
task.result = ts.result;
|
|
350
|
+
task.attempts = ts.attempts;
|
|
351
|
+
task.wave = ts.wave;
|
|
352
|
+
task.assignedModel = ts.assignedModel;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Add fix-up tasks from wave review. Inserted into the current wave.
|
|
358
|
+
*/
|
|
359
|
+
addFixupTasks(tasks) {
|
|
360
|
+
const currentWaveIds = this.waves[this.currentWave] ?? [];
|
|
361
|
+
for (const task of tasks) {
|
|
362
|
+
this.tasks.set(task.id, task);
|
|
363
|
+
currentWaveIds.push(task.id);
|
|
364
|
+
}
|
|
365
|
+
if (this.currentWave < this.waves.length) {
|
|
366
|
+
this.waves[this.currentWave] = currentWaveIds;
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
this.waves.push(currentWaveIds);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Factory function.
|
|
375
|
+
*/
|
|
376
|
+
export function createSwarmTaskQueue() {
|
|
377
|
+
return new SwarmTaskQueue();
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=task-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../../../src/integrations/swarm/task-queue.ts"],"names":[],"mappings":"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"}
|