@sudocode-ai/local-server 0.1.0 → 0.1.2
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/dist/cli.js +6 -104
- package/dist/cli.js.map +1 -7
- package/dist/execution/engine/engine.js +10 -0
- package/dist/execution/engine/engine.js.map +1 -0
- package/dist/execution/engine/simple-engine.js +611 -0
- package/dist/execution/engine/simple-engine.js.map +1 -0
- package/dist/execution/engine/types.js +10 -0
- package/dist/execution/engine/types.js.map +1 -0
- package/dist/execution/output/ag-ui-adapter.js +438 -0
- package/dist/execution/output/ag-ui-adapter.js.map +1 -0
- package/dist/execution/output/ag-ui-integration.js +96 -0
- package/dist/execution/output/ag-ui-integration.js.map +1 -0
- package/dist/execution/output/claude-code-output-processor.js +769 -0
- package/dist/execution/output/claude-code-output-processor.js.map +1 -0
- package/dist/execution/output/index.js +15 -0
- package/dist/execution/output/index.js.map +1 -0
- package/dist/execution/output/types.js +22 -0
- package/dist/execution/output/types.js.map +1 -0
- package/dist/execution/process/builders/claude.js +59 -0
- package/dist/execution/process/builders/claude.js.map +1 -0
- package/dist/execution/process/index.js +15 -0
- package/dist/execution/process/index.js.map +1 -0
- package/dist/execution/process/manager.js +10 -0
- package/dist/execution/process/manager.js.map +1 -0
- package/dist/execution/process/simple-manager.js +336 -0
- package/dist/execution/process/simple-manager.js.map +1 -0
- package/dist/execution/process/types.js +10 -0
- package/dist/execution/process/types.js.map +1 -0
- package/dist/execution/process/utils.js +97 -0
- package/dist/execution/process/utils.js.map +1 -0
- package/dist/execution/resilience/circuit-breaker.js +291 -0
- package/dist/execution/resilience/circuit-breaker.js.map +1 -0
- package/dist/execution/resilience/executor.js +10 -0
- package/dist/execution/resilience/executor.js.map +1 -0
- package/dist/execution/resilience/index.js +15 -0
- package/dist/execution/resilience/index.js.map +1 -0
- package/dist/execution/resilience/resilient-executor.js +261 -0
- package/dist/execution/resilience/resilient-executor.js.map +1 -0
- package/dist/execution/resilience/retry.js +234 -0
- package/dist/execution/resilience/retry.js.map +1 -0
- package/dist/execution/resilience/types.js +30 -0
- package/dist/execution/resilience/types.js.map +1 -0
- package/dist/execution/transport/event-buffer.js +208 -0
- package/dist/execution/transport/event-buffer.js.map +1 -0
- package/dist/execution/transport/index.js +10 -0
- package/dist/execution/transport/index.js.map +1 -0
- package/dist/execution/transport/sse-transport.js +282 -0
- package/dist/execution/transport/sse-transport.js.map +1 -0
- package/dist/execution/transport/transport-manager.js +231 -0
- package/dist/execution/transport/transport-manager.js.map +1 -0
- package/dist/execution/workflow/index.js +13 -0
- package/dist/execution/workflow/index.js.map +1 -0
- package/dist/execution/workflow/linear-orchestrator.js +683 -0
- package/dist/execution/workflow/linear-orchestrator.js.map +1 -0
- package/dist/execution/workflow/memory-storage.js +68 -0
- package/dist/execution/workflow/memory-storage.js.map +1 -0
- package/dist/execution/workflow/orchestrator.js +9 -0
- package/dist/execution/workflow/orchestrator.js.map +1 -0
- package/dist/execution/workflow/types.js +9 -0
- package/dist/execution/workflow/types.js.map +1 -0
- package/dist/execution/workflow/utils.js +152 -0
- package/dist/execution/workflow/utils.js.map +1 -0
- package/dist/execution/worktree/config.js +280 -0
- package/dist/execution/worktree/config.js.map +1 -0
- package/dist/execution/worktree/git-cli.js +189 -0
- package/dist/execution/worktree/git-cli.js.map +1 -0
- package/dist/execution/worktree/index.js +15 -0
- package/dist/execution/worktree/index.js.map +1 -0
- package/dist/execution/worktree/manager.js +452 -0
- package/dist/execution/worktree/manager.js.map +1 -0
- package/dist/execution/worktree/types.js +42 -0
- package/dist/execution/worktree/types.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +357 -104
- package/dist/index.js.map +1 -7
- package/dist/routes/executions-stream.js +55 -0
- package/dist/routes/executions-stream.js.map +1 -0
- package/dist/routes/executions.js +267 -0
- package/dist/routes/executions.js.map +1 -0
- package/dist/routes/feedback.js +329 -0
- package/dist/routes/feedback.js.map +1 -0
- package/dist/routes/issues.js +280 -0
- package/dist/routes/issues.js.map +1 -0
- package/dist/routes/relationships.js +308 -0
- package/dist/routes/relationships.js.map +1 -0
- package/dist/routes/specs.js +270 -0
- package/dist/routes/specs.js.map +1 -0
- package/dist/services/db.js +85 -0
- package/dist/services/db.js.map +1 -0
- package/dist/services/execution-lifecycle.d.ts.map +1 -1
- package/dist/services/execution-lifecycle.js +291 -0
- package/dist/services/execution-lifecycle.js.map +1 -0
- package/dist/services/execution-service.js +676 -0
- package/dist/services/execution-service.js.map +1 -0
- package/dist/services/executions.js +164 -0
- package/dist/services/executions.js.map +1 -0
- package/dist/services/export.js +106 -0
- package/dist/services/export.js.map +1 -0
- package/dist/services/feedback.js +54 -0
- package/dist/services/feedback.js.map +1 -0
- package/dist/services/issues.js +35 -0
- package/dist/services/issues.js.map +1 -0
- package/dist/services/prompt-template-engine.js +212 -0
- package/dist/services/prompt-template-engine.js.map +1 -0
- package/dist/services/prompt-templates.js +236 -0
- package/dist/services/prompt-templates.js.map +1 -0
- package/dist/services/relationships.js +42 -0
- package/dist/services/relationships.js.map +1 -0
- package/dist/services/specs.js +35 -0
- package/dist/services/specs.js.map +1 -0
- package/dist/services/watcher.js +69 -0
- package/dist/services/watcher.js.map +1 -0
- package/dist/services/websocket.js +389 -0
- package/dist/services/websocket.js.map +1 -0
- package/dist/utils/sudocode-dir.js +9 -0
- package/dist/utils/sudocode-dir.js.map +1 -0
- package/package.json +4 -6
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution Engine Interface
|
|
3
|
+
*
|
|
4
|
+
* Core abstraction for task execution engines. Provides methods for
|
|
5
|
+
* submitting, controlling, monitoring, and waiting for task execution.
|
|
6
|
+
*
|
|
7
|
+
* @module execution/engine/engine
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/execution/engine/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple Execution Engine
|
|
3
|
+
*
|
|
4
|
+
* Queue-based execution engine that spawns a process per task
|
|
5
|
+
* with concurrency limits. Implements the "simple first" approach.
|
|
6
|
+
*
|
|
7
|
+
* @module execution/engine/simple-engine
|
|
8
|
+
*/
|
|
9
|
+
import { buildClaudeConfig } from "../process/builders/claude.js";
|
|
10
|
+
/**
|
|
11
|
+
* SimpleExecutionEngine - Queue-based task execution with concurrency control
|
|
12
|
+
*
|
|
13
|
+
* Key features:
|
|
14
|
+
* - FIFO queue for task ordering
|
|
15
|
+
* - Configurable concurrency limit (default: 3)
|
|
16
|
+
* - Automatic retry on failure
|
|
17
|
+
* - Event emission for task lifecycle
|
|
18
|
+
* - Promise-based waiting
|
|
19
|
+
* - Graceful shutdown
|
|
20
|
+
*/
|
|
21
|
+
export class SimpleExecutionEngine {
|
|
22
|
+
_processManager;
|
|
23
|
+
_config;
|
|
24
|
+
// Task queue (FIFO)
|
|
25
|
+
taskQueue = [];
|
|
26
|
+
// Running tasks tracking
|
|
27
|
+
runningTasks = new Map();
|
|
28
|
+
// Completed task results
|
|
29
|
+
completedResults = new Map();
|
|
30
|
+
// Promise resolvers for waiting (supports multiple waiters per task)
|
|
31
|
+
taskResolvers = new Map();
|
|
32
|
+
// Engine metrics
|
|
33
|
+
metrics;
|
|
34
|
+
// Event handlers
|
|
35
|
+
completeHandlers = [];
|
|
36
|
+
failedHandlers = [];
|
|
37
|
+
// Track active polling intervals for cleanup
|
|
38
|
+
pollingIntervals = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Create a new SimpleExecutionEngine
|
|
41
|
+
*
|
|
42
|
+
* @param processManager - Process manager for spawning Claude processes
|
|
43
|
+
* @param config - Engine configuration options
|
|
44
|
+
*/
|
|
45
|
+
constructor(_processManager, _config = {}) {
|
|
46
|
+
this._processManager = _processManager;
|
|
47
|
+
this._config = _config;
|
|
48
|
+
// Initialize metrics
|
|
49
|
+
this.metrics = {
|
|
50
|
+
maxConcurrent: _config.maxConcurrent ?? 3,
|
|
51
|
+
currentlyRunning: 0,
|
|
52
|
+
availableSlots: _config.maxConcurrent ?? 3,
|
|
53
|
+
queuedTasks: 0,
|
|
54
|
+
completedTasks: 0,
|
|
55
|
+
failedTasks: 0,
|
|
56
|
+
averageDuration: 0,
|
|
57
|
+
successRate: 1.0,
|
|
58
|
+
throughput: 0,
|
|
59
|
+
totalProcessesSpawned: 0,
|
|
60
|
+
activeProcesses: 0,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Submit a single task for execution
|
|
65
|
+
*
|
|
66
|
+
* Adds task to queue and attempts to start execution if capacity available.
|
|
67
|
+
*
|
|
68
|
+
* @param task - The task to execute
|
|
69
|
+
* @returns Promise resolving to the task ID
|
|
70
|
+
*/
|
|
71
|
+
async submitTask(task) {
|
|
72
|
+
// Add to queue
|
|
73
|
+
this.taskQueue.push(task);
|
|
74
|
+
this.metrics.queuedTasks++;
|
|
75
|
+
// Try to start immediately if capacity available
|
|
76
|
+
this.processQueue();
|
|
77
|
+
return task.id;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Submit multiple tasks for execution
|
|
81
|
+
*
|
|
82
|
+
* @param tasks - Array of tasks to execute
|
|
83
|
+
* @returns Promise resolving to array of task IDs
|
|
84
|
+
*/
|
|
85
|
+
async submitTasks(tasks) {
|
|
86
|
+
const ids = [];
|
|
87
|
+
for (const task of tasks) {
|
|
88
|
+
const id = await this.submitTask(task);
|
|
89
|
+
ids.push(id);
|
|
90
|
+
}
|
|
91
|
+
return ids;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Process the task queue
|
|
95
|
+
*
|
|
96
|
+
* Dequeues tasks and starts execution while capacity is available.
|
|
97
|
+
* Checks dependencies before execution and re-queues if not met.
|
|
98
|
+
*
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
processQueue() {
|
|
102
|
+
// Track if we've made any progress in this pass
|
|
103
|
+
let tasksProcessed = 0;
|
|
104
|
+
const initialQueueSize = this.taskQueue.length;
|
|
105
|
+
// Check if we have capacity and tasks to process
|
|
106
|
+
while (this.taskQueue.length > 0 &&
|
|
107
|
+
this.runningTasks.size < this.metrics.maxConcurrent &&
|
|
108
|
+
tasksProcessed < initialQueueSize // Prevent infinite loop
|
|
109
|
+
) {
|
|
110
|
+
const task = this.taskQueue.shift();
|
|
111
|
+
this.metrics.queuedTasks--;
|
|
112
|
+
tasksProcessed++;
|
|
113
|
+
// Check if any dependency has failed
|
|
114
|
+
if (this.hasFailedDependency(task)) {
|
|
115
|
+
// Fail this task immediately - don't wait for failed dependencies
|
|
116
|
+
this.handleTaskFailure(task.id, new Error(`Task ${task.id} failed: one or more dependencies failed`));
|
|
117
|
+
continue; // Process next task
|
|
118
|
+
}
|
|
119
|
+
// Check if all dependencies are met
|
|
120
|
+
if (!this.areDependenciesMet(task)) {
|
|
121
|
+
// Re-queue at end - dependencies not yet completed
|
|
122
|
+
this.taskQueue.push(task);
|
|
123
|
+
this.metrics.queuedTasks++;
|
|
124
|
+
continue; // Try next task in queue
|
|
125
|
+
}
|
|
126
|
+
// Track task as running and update capacity
|
|
127
|
+
this.trackTaskStart(task);
|
|
128
|
+
// Start execution
|
|
129
|
+
this.executeTask(task).catch((error) => {
|
|
130
|
+
this.handleTaskFailure(task.id, error);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if all task dependencies are met
|
|
136
|
+
*
|
|
137
|
+
* @param task - Task to check
|
|
138
|
+
* @returns True if all dependencies completed successfully
|
|
139
|
+
* @private
|
|
140
|
+
*/
|
|
141
|
+
areDependenciesMet(task) {
|
|
142
|
+
// No dependencies means dependencies are met
|
|
143
|
+
if (task.dependencies.length === 0) {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
// Check each dependency
|
|
147
|
+
for (const depId of task.dependencies) {
|
|
148
|
+
const result = this.completedResults.get(depId);
|
|
149
|
+
// Dependency not completed yet
|
|
150
|
+
if (!result) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
// Dependency completed but failed
|
|
154
|
+
if (!result.success) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// All dependencies completed successfully
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if any task dependency has failed
|
|
163
|
+
*
|
|
164
|
+
* @param task - Task to check
|
|
165
|
+
* @returns True if any dependency failed
|
|
166
|
+
* @private
|
|
167
|
+
*/
|
|
168
|
+
hasFailedDependency(task) {
|
|
169
|
+
for (const depId of task.dependencies) {
|
|
170
|
+
const result = this.completedResults.get(depId);
|
|
171
|
+
// If dependency completed but failed, return true
|
|
172
|
+
if (result && !result.success) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Track task as running and update capacity metrics
|
|
180
|
+
*
|
|
181
|
+
* @param task - Task to start tracking
|
|
182
|
+
* @private
|
|
183
|
+
*/
|
|
184
|
+
trackTaskStart(task) {
|
|
185
|
+
// Get attempt from metadata if this is a retry
|
|
186
|
+
const attempt = task.metadata?._retryAttempt || 1;
|
|
187
|
+
// Add to running tasks
|
|
188
|
+
const runningTask = {
|
|
189
|
+
task,
|
|
190
|
+
process: null,
|
|
191
|
+
startedAt: new Date(),
|
|
192
|
+
attempt,
|
|
193
|
+
};
|
|
194
|
+
this.runningTasks.set(task.id, runningTask);
|
|
195
|
+
// Update metrics
|
|
196
|
+
this.metrics.currentlyRunning = this.runningTasks.size;
|
|
197
|
+
this.metrics.availableSlots =
|
|
198
|
+
this.metrics.maxConcurrent - this.runningTasks.size;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Track task completion and release capacity
|
|
202
|
+
*
|
|
203
|
+
* @param taskId - ID of completed task
|
|
204
|
+
* @private
|
|
205
|
+
*/
|
|
206
|
+
trackTaskComplete(taskId) {
|
|
207
|
+
// Remove from running tasks
|
|
208
|
+
this.runningTasks.delete(taskId);
|
|
209
|
+
// Update metrics
|
|
210
|
+
this.metrics.currentlyRunning = this.runningTasks.size;
|
|
211
|
+
this.metrics.availableSlots =
|
|
212
|
+
this.metrics.maxConcurrent - this.runningTasks.size;
|
|
213
|
+
// Try to process more tasks now that capacity is available
|
|
214
|
+
this.processQueue();
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Execute a task
|
|
218
|
+
*
|
|
219
|
+
* Acquires a process, sends the prompt, collects output, and builds the result.
|
|
220
|
+
*
|
|
221
|
+
* @param task - Task to execute
|
|
222
|
+
* @private
|
|
223
|
+
*/
|
|
224
|
+
async executeTask(task) {
|
|
225
|
+
const startTime = new Date();
|
|
226
|
+
let managedProcess = null;
|
|
227
|
+
let output = "";
|
|
228
|
+
let errorOutput = "";
|
|
229
|
+
try {
|
|
230
|
+
// Build process configuration
|
|
231
|
+
const processConfig = buildClaudeConfig({
|
|
232
|
+
claudePath: this._config.claudePath,
|
|
233
|
+
workDir: task.workDir,
|
|
234
|
+
print: true,
|
|
235
|
+
outputFormat: "stream-json",
|
|
236
|
+
dangerouslySkipPermissions: true,
|
|
237
|
+
env: task.config.env,
|
|
238
|
+
timeout: task.config.timeout,
|
|
239
|
+
});
|
|
240
|
+
// Acquire process from manager
|
|
241
|
+
managedProcess = await this._processManager.acquireProcess(processConfig);
|
|
242
|
+
// Update running task with process reference
|
|
243
|
+
const runningTask = this.runningTasks.get(task.id);
|
|
244
|
+
if (runningTask) {
|
|
245
|
+
runningTask.process = managedProcess;
|
|
246
|
+
}
|
|
247
|
+
// Set up output collection
|
|
248
|
+
this._processManager.onOutput(managedProcess.id, (data, type) => {
|
|
249
|
+
if (type === "stdout") {
|
|
250
|
+
output += data.toString();
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
errorOutput += data.toString();
|
|
254
|
+
}
|
|
255
|
+
// Call optional output handler for real-time processing
|
|
256
|
+
if (this._config.onOutput) {
|
|
257
|
+
this._config.onOutput(data, type);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
// Set up error handler
|
|
261
|
+
this._processManager.onError(managedProcess.id, (error) => {
|
|
262
|
+
errorOutput += `Process error: ${error.message}\n`;
|
|
263
|
+
});
|
|
264
|
+
// Send the prompt to the process
|
|
265
|
+
await this._processManager.sendInput(managedProcess.id, task.prompt);
|
|
266
|
+
// Close stdin to signal EOF (Claude Code waits for stdin to close in --print mode)
|
|
267
|
+
this._processManager.closeInput(managedProcess.id);
|
|
268
|
+
// Wait for process to complete
|
|
269
|
+
await this.waitForProcessExit(managedProcess, task.config.timeout);
|
|
270
|
+
// Build execution result
|
|
271
|
+
const endTime = new Date();
|
|
272
|
+
const result = {
|
|
273
|
+
taskId: task.id,
|
|
274
|
+
executionId: managedProcess.id,
|
|
275
|
+
success: managedProcess.exitCode === 0,
|
|
276
|
+
exitCode: managedProcess.exitCode ?? -1,
|
|
277
|
+
output,
|
|
278
|
+
error: errorOutput || undefined,
|
|
279
|
+
startedAt: startTime,
|
|
280
|
+
completedAt: endTime,
|
|
281
|
+
duration: endTime.getTime() - startTime.getTime(),
|
|
282
|
+
metadata: this.parseMetadata(output),
|
|
283
|
+
};
|
|
284
|
+
// Store result
|
|
285
|
+
this.completedResults.set(task.id, result);
|
|
286
|
+
// Update metrics
|
|
287
|
+
this.metrics.completedTasks++;
|
|
288
|
+
// Resolve promises for all waiters
|
|
289
|
+
const resolvers = this.taskResolvers.get(task.id);
|
|
290
|
+
if (resolvers) {
|
|
291
|
+
resolvers.forEach((resolver) => resolver.resolve(result));
|
|
292
|
+
this.taskResolvers.delete(task.id);
|
|
293
|
+
}
|
|
294
|
+
// Emit completion event
|
|
295
|
+
for (const handler of this.completeHandlers) {
|
|
296
|
+
handler(result);
|
|
297
|
+
}
|
|
298
|
+
// Release capacity
|
|
299
|
+
this.trackTaskComplete(task.id);
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
// Handle execution failure
|
|
303
|
+
this.handleTaskFailure(task.id, error);
|
|
304
|
+
}
|
|
305
|
+
finally {
|
|
306
|
+
// Clean up process
|
|
307
|
+
if (managedProcess) {
|
|
308
|
+
try {
|
|
309
|
+
await this._processManager.releaseProcess(managedProcess.id);
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
// Ignore cleanup errors
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Wait for a process to exit
|
|
319
|
+
*
|
|
320
|
+
* @param process - The managed process to wait for
|
|
321
|
+
* @param timeoutMs - Optional timeout in milliseconds
|
|
322
|
+
* @private
|
|
323
|
+
*/
|
|
324
|
+
async waitForProcessExit(process, timeoutMs) {
|
|
325
|
+
return new Promise((resolve, reject) => {
|
|
326
|
+
// Check if already exited
|
|
327
|
+
if (process.exitCode !== null) {
|
|
328
|
+
resolve();
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
// Set up exit listener
|
|
332
|
+
const checkInterval = setInterval(() => {
|
|
333
|
+
// Fetch fresh process state from manager to avoid stale references
|
|
334
|
+
const currentProcess = this._processManager.getProcess(process.id);
|
|
335
|
+
if (!currentProcess || currentProcess.exitCode !== null) {
|
|
336
|
+
clearInterval(checkInterval);
|
|
337
|
+
this.pollingIntervals.delete(process.id);
|
|
338
|
+
if (!currentProcess) {
|
|
339
|
+
reject(new Error("Process not found"));
|
|
340
|
+
}
|
|
341
|
+
else if (currentProcess.status === "crashed") {
|
|
342
|
+
reject(new Error(`Process crashed with exit code ${currentProcess.exitCode}`));
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
resolve();
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}, 10); // Poll every 10ms for responsive detection
|
|
349
|
+
// Track this interval for cleanup
|
|
350
|
+
this.pollingIntervals.set(process.id, checkInterval);
|
|
351
|
+
// Set timeout if configured
|
|
352
|
+
if (timeoutMs) {
|
|
353
|
+
setTimeout(() => {
|
|
354
|
+
clearInterval(checkInterval);
|
|
355
|
+
this.pollingIntervals.delete(process.id);
|
|
356
|
+
reject(new Error("Process execution timeout"));
|
|
357
|
+
}, timeoutMs);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Parse metadata from stream-json output
|
|
363
|
+
*
|
|
364
|
+
* Extracts tools used, files changed, tokens, etc. from the output.
|
|
365
|
+
*
|
|
366
|
+
* @param output - Raw output from Claude Code
|
|
367
|
+
* @returns Parsed metadata
|
|
368
|
+
* @private
|
|
369
|
+
*/
|
|
370
|
+
parseMetadata(_output) {
|
|
371
|
+
// Stub for now - will enhance in future issues
|
|
372
|
+
// TODO: Parse stream-json output for metadata
|
|
373
|
+
return {
|
|
374
|
+
toolsUsed: [],
|
|
375
|
+
filesChanged: [],
|
|
376
|
+
tokensUsed: 0,
|
|
377
|
+
cost: 0,
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Handle task failure
|
|
382
|
+
*
|
|
383
|
+
* Implements automatic retry logic if maxRetries is configured.
|
|
384
|
+
* Re-queues failed tasks at front of queue for priority retry.
|
|
385
|
+
*
|
|
386
|
+
* @param taskId - ID of failed task
|
|
387
|
+
* @param error - Error that occurred
|
|
388
|
+
* @private
|
|
389
|
+
*/
|
|
390
|
+
handleTaskFailure(_taskId, _error) {
|
|
391
|
+
// Get running task to check retry eligibility
|
|
392
|
+
const runningTask = this.runningTasks.get(_taskId);
|
|
393
|
+
if (runningTask) {
|
|
394
|
+
const task = runningTask.task;
|
|
395
|
+
const maxRetries = task.config.maxRetries;
|
|
396
|
+
const currentAttempt = runningTask.attempt;
|
|
397
|
+
// Check if we should retry
|
|
398
|
+
if (maxRetries !== undefined && currentAttempt <= maxRetries) {
|
|
399
|
+
// Create retry task with incremented attempt
|
|
400
|
+
const retryTask = {
|
|
401
|
+
...task,
|
|
402
|
+
metadata: {
|
|
403
|
+
...task.metadata,
|
|
404
|
+
_retryAttempt: currentAttempt + 1,
|
|
405
|
+
},
|
|
406
|
+
};
|
|
407
|
+
// Re-queue at front for priority retry
|
|
408
|
+
this.taskQueue.unshift(retryTask);
|
|
409
|
+
this.metrics.queuedTasks++;
|
|
410
|
+
// Release capacity so retry can start
|
|
411
|
+
this.trackTaskComplete(_taskId);
|
|
412
|
+
// Don't emit failure or store result yet - will retry
|
|
413
|
+
// Note: Don't call processQueue() here, it will be called by trackTaskComplete
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
// No retries left or maxRetries not configured - proceed with final failure
|
|
418
|
+
// Create a failed execution result
|
|
419
|
+
const now = new Date();
|
|
420
|
+
const failedResult = {
|
|
421
|
+
taskId: _taskId,
|
|
422
|
+
executionId: `failed-${_taskId}`,
|
|
423
|
+
success: false,
|
|
424
|
+
exitCode: -1,
|
|
425
|
+
output: "",
|
|
426
|
+
error: _error.message,
|
|
427
|
+
startedAt: now,
|
|
428
|
+
completedAt: now,
|
|
429
|
+
duration: 0,
|
|
430
|
+
metadata: {
|
|
431
|
+
toolsUsed: [],
|
|
432
|
+
filesChanged: [],
|
|
433
|
+
tokensUsed: 0,
|
|
434
|
+
cost: 0,
|
|
435
|
+
},
|
|
436
|
+
};
|
|
437
|
+
// Store the failed result so dependent tasks can check it
|
|
438
|
+
this.completedResults.set(_taskId, failedResult);
|
|
439
|
+
// Update metrics
|
|
440
|
+
this.metrics.failedTasks++;
|
|
441
|
+
// Release capacity
|
|
442
|
+
this.trackTaskComplete(_taskId);
|
|
443
|
+
// Reject promises for all waiters
|
|
444
|
+
const resolvers = this.taskResolvers.get(_taskId);
|
|
445
|
+
if (resolvers) {
|
|
446
|
+
resolvers.forEach((resolver) => resolver.reject(_error));
|
|
447
|
+
this.taskResolvers.delete(_taskId);
|
|
448
|
+
}
|
|
449
|
+
// Emit event
|
|
450
|
+
for (const handler of this.failedHandlers) {
|
|
451
|
+
handler(_taskId, _error);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Cancel a queued or running task
|
|
456
|
+
*
|
|
457
|
+
* Removes task from queue if still queued, or terminates process if running.
|
|
458
|
+
* Idempotent - safe to call multiple times or for non-existent tasks.
|
|
459
|
+
*
|
|
460
|
+
* @param taskId - ID of task to cancel
|
|
461
|
+
*/
|
|
462
|
+
async cancelTask(taskId) {
|
|
463
|
+
// Check if task is in queue
|
|
464
|
+
const queueIndex = this.taskQueue.findIndex((t) => t.id === taskId);
|
|
465
|
+
if (queueIndex >= 0) {
|
|
466
|
+
// Remove from queue
|
|
467
|
+
this.taskQueue.splice(queueIndex, 1);
|
|
468
|
+
this.metrics.queuedTasks--;
|
|
469
|
+
return; // Task cancelled before execution
|
|
470
|
+
}
|
|
471
|
+
// Check if task is currently running
|
|
472
|
+
const runningTask = this.runningTasks.get(taskId);
|
|
473
|
+
if (runningTask) {
|
|
474
|
+
// Clear polling interval if exists
|
|
475
|
+
const interval = this.pollingIntervals.get(runningTask.process.id);
|
|
476
|
+
if (interval) {
|
|
477
|
+
clearInterval(interval);
|
|
478
|
+
this.pollingIntervals.delete(runningTask.process.id);
|
|
479
|
+
}
|
|
480
|
+
// Terminate the running process
|
|
481
|
+
try {
|
|
482
|
+
await this._processManager.terminateProcess(runningTask.process.id);
|
|
483
|
+
}
|
|
484
|
+
catch (error) {
|
|
485
|
+
// Ignore termination errors - process may already be dead
|
|
486
|
+
}
|
|
487
|
+
// Clean up running task tracking
|
|
488
|
+
this.runningTasks.delete(taskId);
|
|
489
|
+
// Update metrics
|
|
490
|
+
this.metrics.currentlyRunning = this.runningTasks.size;
|
|
491
|
+
this.metrics.availableSlots =
|
|
492
|
+
this.metrics.maxConcurrent - this.runningTasks.size;
|
|
493
|
+
// Process queue to start next task
|
|
494
|
+
this.processQueue();
|
|
495
|
+
return; // Task cancelled during execution
|
|
496
|
+
}
|
|
497
|
+
// Task not found in queue or running - either completed or never existed
|
|
498
|
+
// This is idempotent, so we just return without error
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Get current status of a task
|
|
502
|
+
*/
|
|
503
|
+
getTaskStatus(taskId) {
|
|
504
|
+
// Check completed
|
|
505
|
+
const result = this.completedResults.get(taskId);
|
|
506
|
+
if (result) {
|
|
507
|
+
return { state: "completed", result };
|
|
508
|
+
}
|
|
509
|
+
// Check running
|
|
510
|
+
const running = this.runningTasks.get(taskId);
|
|
511
|
+
if (running) {
|
|
512
|
+
return {
|
|
513
|
+
state: "running",
|
|
514
|
+
processId: running.process.id,
|
|
515
|
+
startedAt: running.startedAt,
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
// Check queued
|
|
519
|
+
const queuePos = this.taskQueue.findIndex((t) => t.id === taskId);
|
|
520
|
+
if (queuePos >= 0) {
|
|
521
|
+
return { state: "queued", position: queuePos };
|
|
522
|
+
}
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Wait for a task to complete
|
|
527
|
+
*
|
|
528
|
+
* Returns a promise that resolves with the task result when complete.
|
|
529
|
+
* Supports multiple concurrent waiters for the same task.
|
|
530
|
+
*
|
|
531
|
+
* @param taskId - ID of the task to wait for
|
|
532
|
+
* @returns Promise resolving to the execution result
|
|
533
|
+
*/
|
|
534
|
+
async waitForTask(taskId) {
|
|
535
|
+
// Check if already completed
|
|
536
|
+
const existing = this.completedResults.get(taskId);
|
|
537
|
+
if (existing)
|
|
538
|
+
return existing;
|
|
539
|
+
// Wait for completion - support multiple concurrent waiters
|
|
540
|
+
return new Promise((resolve, reject) => {
|
|
541
|
+
const resolvers = this.taskResolvers.get(taskId) || [];
|
|
542
|
+
resolvers.push({ resolve, reject });
|
|
543
|
+
this.taskResolvers.set(taskId, resolvers);
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Wait for multiple tasks to complete
|
|
548
|
+
*
|
|
549
|
+
* Returns a promise that resolves when all tasks complete.
|
|
550
|
+
*
|
|
551
|
+
* @param taskIds - Array of task IDs to wait for
|
|
552
|
+
* @returns Promise resolving to array of execution results
|
|
553
|
+
*/
|
|
554
|
+
async waitForTasks(taskIds) {
|
|
555
|
+
return Promise.all(taskIds.map((id) => this.waitForTask(id)));
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Get current engine metrics
|
|
559
|
+
*
|
|
560
|
+
* Returns defensive copy of current metrics.
|
|
561
|
+
*
|
|
562
|
+
* @returns Current engine metrics
|
|
563
|
+
*/
|
|
564
|
+
getMetrics() {
|
|
565
|
+
// Return defensive copy
|
|
566
|
+
return { ...this.metrics };
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Register handler for task completion events
|
|
570
|
+
*/
|
|
571
|
+
onTaskComplete(handler) {
|
|
572
|
+
this.completeHandlers.push(handler);
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Register handler for task failure events
|
|
576
|
+
*/
|
|
577
|
+
onTaskFailed(handler) {
|
|
578
|
+
this.failedHandlers.push(handler);
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Gracefully shutdown the engine
|
|
582
|
+
*
|
|
583
|
+
* Cancels all running tasks, clears the queue, and shuts down the process manager.
|
|
584
|
+
* Idempotent - safe to call multiple times.
|
|
585
|
+
*/
|
|
586
|
+
async shutdown() {
|
|
587
|
+
// Clear the task queue (prevent new tasks from starting)
|
|
588
|
+
this.taskQueue = [];
|
|
589
|
+
this.metrics.queuedTasks = 0;
|
|
590
|
+
// Cancel all running tasks
|
|
591
|
+
const runningTaskIds = Array.from(this.runningTasks.keys());
|
|
592
|
+
await Promise.all(runningTaskIds.map((id) => this.cancelTask(id)));
|
|
593
|
+
// Clear all polling intervals
|
|
594
|
+
for (const [processId, interval] of this.pollingIntervals.entries()) {
|
|
595
|
+
clearInterval(interval);
|
|
596
|
+
this.pollingIntervals.delete(processId);
|
|
597
|
+
}
|
|
598
|
+
// Shutdown the process manager
|
|
599
|
+
await this._processManager.shutdown();
|
|
600
|
+
// Clear all internal state
|
|
601
|
+
this.runningTasks.clear();
|
|
602
|
+
this.completedResults.clear();
|
|
603
|
+
this.taskResolvers.clear();
|
|
604
|
+
this.completeHandlers = [];
|
|
605
|
+
this.failedHandlers = [];
|
|
606
|
+
// Reset metrics
|
|
607
|
+
this.metrics.currentlyRunning = 0;
|
|
608
|
+
this.metrics.availableSlots = this.metrics.maxConcurrent;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
//# sourceMappingURL=simple-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-engine.js","sourceRoot":"","sources":["../../../src/execution/engine/simple-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/execution/engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|