@overlordai/worker 1.0.52 → 1.0.54

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 (109) hide show
  1. package/dist/clean-output-buffer.d.ts +21 -0
  2. package/dist/clean-output-buffer.d.ts.map +1 -0
  3. package/dist/clean-output-buffer.js +70 -0
  4. package/dist/clean-output-buffer.js.map +1 -0
  5. package/dist/config.d.ts +4 -4
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +54 -39
  8. package/dist/config.js.map +1 -1
  9. package/dist/executor/base.executor.d.ts +30 -11
  10. package/dist/executor/base.executor.d.ts.map +1 -1
  11. package/dist/executor/base.executor.js +25 -2
  12. package/dist/executor/base.executor.js.map +1 -1
  13. package/dist/executor/claude.executor.d.ts +7 -8
  14. package/dist/executor/claude.executor.d.ts.map +1 -1
  15. package/dist/executor/claude.executor.js +36 -26
  16. package/dist/executor/claude.executor.js.map +1 -1
  17. package/dist/executor/codex.executor.d.ts +7 -8
  18. package/dist/executor/codex.executor.d.ts.map +1 -1
  19. package/dist/executor/codex.executor.js +64 -26
  20. package/dist/executor/codex.executor.js.map +1 -1
  21. package/dist/executor/cursor.executor.d.ts +6 -7
  22. package/dist/executor/cursor.executor.d.ts.map +1 -1
  23. package/dist/executor/cursor.executor.js +12 -22
  24. package/dist/executor/cursor.executor.js.map +1 -1
  25. package/dist/executor/custom.executor.d.ts +15 -7
  26. package/dist/executor/custom.executor.d.ts.map +1 -1
  27. package/dist/executor/custom.executor.js +25 -28
  28. package/dist/executor/custom.executor.js.map +1 -1
  29. package/dist/git-operations.d.ts +14 -12
  30. package/dist/git-operations.d.ts.map +1 -1
  31. package/dist/git-operations.js +50 -98
  32. package/dist/git-operations.js.map +1 -1
  33. package/dist/git-token-helper.d.ts +27 -0
  34. package/dist/git-token-helper.d.ts.map +1 -0
  35. package/dist/git-token-helper.js +114 -0
  36. package/dist/git-token-helper.js.map +1 -0
  37. package/dist/healthz.d.ts.map +1 -1
  38. package/dist/healthz.js +3 -7
  39. package/dist/healthz.js.map +1 -1
  40. package/dist/http-post.d.ts +2 -0
  41. package/dist/http-post.d.ts.map +1 -0
  42. package/dist/http-post.js +74 -0
  43. package/dist/http-post.js.map +1 -0
  44. package/dist/jwt-manager.d.ts +2 -3
  45. package/dist/jwt-manager.d.ts.map +1 -1
  46. package/dist/jwt-manager.js +5 -43
  47. package/dist/jwt-manager.js.map +1 -1
  48. package/dist/lease-manager.d.ts +4 -1
  49. package/dist/lease-manager.d.ts.map +1 -1
  50. package/dist/lease-manager.js +2 -6
  51. package/dist/lease-manager.js.map +1 -1
  52. package/dist/main.js +147 -277
  53. package/dist/main.js.map +1 -1
  54. package/dist/orphan-reaper.d.ts +1 -1
  55. package/dist/orphan-reaper.d.ts.map +1 -1
  56. package/dist/orphan-reaper.js +46 -30
  57. package/dist/orphan-reaper.js.map +1 -1
  58. package/dist/pipeline-compiler.d.ts +10 -0
  59. package/dist/pipeline-compiler.d.ts.map +1 -0
  60. package/dist/pipeline-compiler.js +179 -0
  61. package/dist/pipeline-compiler.js.map +1 -0
  62. package/dist/pipeline-parser.d.ts.map +1 -1
  63. package/dist/pipeline-parser.js +4 -3
  64. package/dist/pipeline-parser.js.map +1 -1
  65. package/dist/pipeline-runner.d.ts +1 -0
  66. package/dist/pipeline-runner.d.ts.map +1 -1
  67. package/dist/pipeline-runner.js +37 -27
  68. package/dist/pipeline-runner.js.map +1 -1
  69. package/dist/project-mutex.d.ts +1 -0
  70. package/dist/project-mutex.d.ts.map +1 -1
  71. package/dist/project-mutex.js +9 -1
  72. package/dist/project-mutex.js.map +1 -1
  73. package/dist/pty-manager.d.ts +2 -0
  74. package/dist/pty-manager.d.ts.map +1 -1
  75. package/dist/pty-manager.js +68 -42
  76. package/dist/pty-manager.js.map +1 -1
  77. package/dist/pty-relay-client.d.ts +38 -0
  78. package/dist/pty-relay-client.d.ts.map +1 -0
  79. package/dist/pty-relay-client.js +146 -0
  80. package/dist/pty-relay-client.js.map +1 -0
  81. package/dist/pty-stdin-writer.d.ts +11 -0
  82. package/dist/pty-stdin-writer.d.ts.map +1 -0
  83. package/dist/pty-stdin-writer.js +22 -0
  84. package/dist/pty-stdin-writer.js.map +1 -0
  85. package/dist/ringbuffer.d.ts +2 -0
  86. package/dist/ringbuffer.d.ts.map +1 -1
  87. package/dist/ringbuffer.js +10 -1
  88. package/dist/ringbuffer.js.map +1 -1
  89. package/dist/stage-monitor.d.ts +72 -0
  90. package/dist/stage-monitor.d.ts.map +1 -0
  91. package/dist/stage-monitor.js +234 -0
  92. package/dist/stage-monitor.js.map +1 -0
  93. package/dist/task-handler.d.ts +18 -12
  94. package/dist/task-handler.d.ts.map +1 -1
  95. package/dist/task-handler.js +298 -78
  96. package/dist/task-handler.js.map +1 -1
  97. package/dist/tunnel-manager.d.ts +16 -6
  98. package/dist/tunnel-manager.d.ts.map +1 -1
  99. package/dist/tunnel-manager.js +117 -16
  100. package/dist/tunnel-manager.js.map +1 -1
  101. package/dist/worker-client.d.ts +16 -7
  102. package/dist/worker-client.d.ts.map +1 -1
  103. package/dist/worker-client.js +40 -52
  104. package/dist/worker-client.js.map +1 -1
  105. package/dist/workspace-manager.d.ts +1 -0
  106. package/dist/workspace-manager.d.ts.map +1 -1
  107. package/dist/workspace-manager.js +102 -82
  108. package/dist/workspace-manager.js.map +1 -1
  109. package/package.json +4 -2
@@ -37,9 +37,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.TaskHandler = void 0;
40
+ const protocol_1 = require("@overlordai/protocol");
40
41
  const fs = __importStar(require("node:fs"));
42
+ const path = __importStar(require("node:path"));
41
43
  const pino_1 = __importDefault(require("pino"));
42
- const pipeline_runner_js_1 = require("./pipeline-runner.js");
44
+ const pty_relay_client_js_1 = require("./pty-relay-client.js");
45
+ const pipeline_compiler_js_1 = require("./pipeline-compiler.js");
46
+ const stage_monitor_js_1 = require("./stage-monitor.js");
47
+ const pty_stdin_writer_js_1 = require("./pty-stdin-writer.js");
48
+ const git_token_helper_js_1 = require("./git-token-helper.js");
43
49
  const log = (0, pino_1.default)({ name: 'task-handler' });
44
50
  class TaskHandler {
45
51
  activeTasks = new Map();
@@ -50,7 +56,8 @@ class TaskHandler {
50
56
  workspaceManager;
51
57
  ptyManager;
52
58
  leaseChecker;
53
- constructor(config, onProgress, onAck, onConfirmRequest, workspaceManager, ptyManager, leaseChecker) {
59
+ getWorkerJwt;
60
+ constructor(config, onProgress, onAck, onConfirmRequest, workspaceManager, ptyManager, leaseChecker, getWorkerJwt) {
54
61
  this.config = config;
55
62
  this.onProgress = onProgress;
56
63
  this.onAck = onAck;
@@ -58,6 +65,7 @@ class TaskHandler {
58
65
  this.workspaceManager = workspaceManager;
59
66
  this.ptyManager = ptyManager;
60
67
  this.leaseChecker = leaseChecker;
68
+ this.getWorkerJwt = getWorkerJwt;
61
69
  }
62
70
  getActiveTaskCount() {
63
71
  return this.activeTasks.size;
@@ -65,18 +73,31 @@ class TaskHandler {
65
73
  getActiveTaskIds() {
66
74
  return Array.from(this.activeTasks.keys());
67
75
  }
76
+ /**
77
+ * Cancel all active tasks. Used during graceful shutdown.
78
+ */
79
+ async cancelAllTasks() {
80
+ for (const [taskId, ctx] of this.activeTasks) {
81
+ log.info({ taskId }, 'Cancelling task for shutdown');
82
+ ctx.abortController.abort();
83
+ await this.ptyManager.cancel(taskId);
84
+ }
85
+ }
68
86
  /**
69
87
  * Wait until all active tasks have finished.
70
88
  * Resolves immediately if no tasks are active.
71
89
  */
72
- waitForActiveTasks() {
73
- if (this.activeTasks.size === 0) {
90
+ waitForActiveTasks(timeoutMs = 60_000) {
91
+ if (this.activeTasks.size === 0)
74
92
  return Promise.resolve();
75
- }
76
93
  return new Promise((resolve) => {
94
+ const deadline = setTimeout(() => { clearInterval(check); resolve(); }, timeoutMs);
95
+ if (deadline.unref)
96
+ deadline.unref();
77
97
  const check = setInterval(() => {
78
98
  if (this.activeTasks.size === 0) {
79
99
  clearInterval(check);
100
+ clearTimeout(deadline);
80
101
  resolve();
81
102
  }
82
103
  }, 500);
@@ -85,23 +106,24 @@ class TaskHandler {
85
106
  });
86
107
  }
87
108
  getActiveTaskStatuses() {
88
- const statuses = [];
89
- for (const [taskId, ctx] of this.activeTasks) {
90
- statuses.push({
91
- taskId,
92
- localStatus: ctx.ptySession ? 'still_running' : 'completed_locally',
93
- currentStage: ctx.stage,
94
- });
95
- }
96
- return statuses;
109
+ return Array.from(this.activeTasks, ([taskId, ctx]) => ({
110
+ taskId,
111
+ localStatus: ctx.ptySession ? protocol_1.LocalStatus.STILL_RUNNING : protocol_1.LocalStatus.COMPLETED_LOCALLY,
112
+ currentStage: ctx.stage,
113
+ }));
97
114
  }
98
115
  async handleExecute(frame) {
99
- const { taskId, description, projectKey, configSnapshot, developer, channelToken, msgId } = frame;
116
+ const { taskId, description, projectKey, configSnapshot, developer, channelToken, msgId, gitToken } = frame;
100
117
  if (this.activeTasks.has(taskId)) {
101
118
  log.warn({ taskId }, 'Task already active, ignoring duplicate execute');
102
119
  this.onAck(msgId, { status: 'already_running' });
103
120
  return;
104
121
  }
122
+ if (this.activeTasks.size >= this.config.maxSlots) {
123
+ log.warn({ taskId, active: this.activeTasks.size, maxSlots: this.config.maxSlots }, 'At capacity, rejecting task');
124
+ this.onAck(msgId, { status: 'at_capacity' });
125
+ return;
126
+ }
105
127
  log.info({ taskId, agentType: configSnapshot.agentType }, 'Executing task');
106
128
  const abortController = new AbortController();
107
129
  const ctx = {
@@ -111,7 +133,7 @@ class TaskHandler {
111
133
  stage: 'init',
112
134
  workspaceInfo: null,
113
135
  ptySession: null,
114
- pipelineRunner: null,
136
+ stageMonitor: null,
115
137
  channelToken,
116
138
  configSnapshot,
117
139
  abortController,
@@ -120,19 +142,86 @@ class TaskHandler {
120
142
  // Ack the execute message
121
143
  this.onAck(msgId, { status: 'accepted' });
122
144
  this.onProgress(taskId, 'init', 'running', 'Initializing workspace');
145
+ let relayClient = null;
123
146
  try {
124
- // 1. Initialize workspace via WorkspaceManager (bare clone, worktree, git config, setup commands)
147
+ // 1. Connect PTY relay FIRST so the worker channel is registered before
148
+ // users can attach, and the channelToken is consumed before it expires
149
+ // (channelToken TTL is 30s; workspace init can take minutes).
150
+ relayClient = new pty_relay_client_js_1.PtyRelayClient({
151
+ serverUrl: this.config.overlordHost,
152
+ taskId,
153
+ channelToken,
154
+ workerJwt: this.getWorkerJwt(),
155
+ });
156
+ // Abort the task if the relay closes during init (auth failure, network error)
157
+ relayClient.onClose((code) => {
158
+ if (code >= 4000) {
159
+ log.warn({ taskId, code }, 'PTY relay auth failed, aborting task');
160
+ abortController.abort();
161
+ }
162
+ });
163
+ // Buffer stdin/resize frames arriving before PTY session exists
164
+ const MAX_BUFFER_SIZE = 100;
165
+ const MAX_BUFFER_BYTES = 1_048_576; // 1MB
166
+ let totalBufferedBytes = 0;
167
+ const stdinBuffer = [];
168
+ const resizeBuffer = [];
169
+ relayClient.onStdin((data) => {
170
+ if (ctx.ptySession) {
171
+ try {
172
+ this.ptyManager.write(taskId, data);
173
+ }
174
+ catch { /* session closed */ }
175
+ }
176
+ else {
177
+ const incomingBytes = data.length;
178
+ if (incomingBytes > MAX_BUFFER_BYTES) {
179
+ log.warn({ taskId, incomingBytes }, 'Single stdin frame exceeds buffer byte limit, dropping data');
180
+ return;
181
+ }
182
+ while (stdinBuffer.length > 0 &&
183
+ (stdinBuffer.length >= MAX_BUFFER_SIZE || totalBufferedBytes + incomingBytes > MAX_BUFFER_BYTES)) {
184
+ const dropped = stdinBuffer.shift();
185
+ if (dropped) {
186
+ totalBufferedBytes -= dropped.length;
187
+ }
188
+ }
189
+ if (stdinBuffer.length >= MAX_BUFFER_SIZE || totalBufferedBytes + incomingBytes > MAX_BUFFER_BYTES) {
190
+ log.warn({ taskId, totalBufferedBytes, incomingBytes }, 'Stdin buffer limits exceeded, dropping data');
191
+ return;
192
+ }
193
+ totalBufferedBytes += incomingBytes;
194
+ stdinBuffer.push(data);
195
+ }
196
+ });
197
+ relayClient.onResize((cols, rows) => {
198
+ if (ctx.ptySession) {
199
+ try {
200
+ ctx.ptySession.pty.resize(cols, rows);
201
+ }
202
+ catch { /* session closed */ }
203
+ }
204
+ else {
205
+ if (resizeBuffer.length >= MAX_BUFFER_SIZE) {
206
+ resizeBuffer.shift(); // Drop oldest
207
+ }
208
+ resizeBuffer.push({ cols, rows });
209
+ }
210
+ });
211
+ relayClient.connect();
212
+ // 2. Initialize workspace via WorkspaceManager (bare clone, worktree, git config, setup commands)
125
213
  const workspaceInfo = await this.workspaceManager.initialize({
126
214
  taskId,
127
215
  projectKey,
128
216
  configSnapshot,
129
217
  developer,
218
+ gitToken,
130
219
  });
131
220
  ctx.workspaceInfo = workspaceInfo;
132
221
  if (abortController.signal.aborted) {
133
222
  throw new Error('Task cancelled');
134
223
  }
135
- // 2. Create PTY session via PtyManager
224
+ // 3. Create PTY session via PtyManager
136
225
  ctx.stage = 'agent';
137
226
  this.onProgress(taskId, 'agent', 'running', 'Starting agent');
138
227
  const ptySession = this.ptyManager.createSession({
@@ -144,7 +233,23 @@ class TaskHandler {
144
233
  taskDescription: description,
145
234
  });
146
235
  ctx.ptySession = ptySession;
147
- // 3. Run pipeline via PipelineRunner
236
+ // 3b. Wire PTY output → relay
237
+ ptySession.onData((data) => {
238
+ relayClient?.sendData(data);
239
+ });
240
+ if (resizeBuffer.length > 0) {
241
+ const last = resizeBuffer.at(-1);
242
+ try {
243
+ ptySession.pty.resize(last.cols, last.rows);
244
+ }
245
+ catch { /* ignore */ }
246
+ }
247
+ for (const data of stdinBuffer) {
248
+ try {
249
+ this.ptyManager.write(taskId, data);
250
+ }
251
+ catch { /* ignore */ }
252
+ }
148
253
  await this.runPipeline(ctx, ptySession, description);
149
254
  }
150
255
  catch (err) {
@@ -153,21 +258,25 @@ class TaskHandler {
153
258
  this.onProgress(taskId, ctx.stage, 'cancelled', 'Task cancelled');
154
259
  }
155
260
  else {
156
- const message = err instanceof Error ? err.message : String(err);
261
+ const message = (0, protocol_1.getErrorMessage)(err);
157
262
  log.error({ taskId, err }, 'Task failed');
158
263
  this.onProgress(taskId, ctx.stage, 'failed', message);
159
264
  }
160
265
  }
161
266
  finally {
267
+ // Disconnect PTY relay
268
+ relayClient?.disconnect();
162
269
  // Cleanup PTY session
163
270
  if (ctx.ptySession) {
164
271
  await this.ptyManager.closeSession(taskId);
165
272
  ctx.ptySession = null;
166
273
  }
167
- // Destroy pipeline runner
168
- if (ctx.pipelineRunner) {
169
- ctx.pipelineRunner.destroy();
170
- ctx.pipelineRunner = null;
274
+ // Cleanup git token files from workspace
275
+ if (ctx.workspaceInfo?.path) {
276
+ try {
277
+ (0, git_token_helper_js_1.cleanupAskpassFiles)(ctx.workspaceInfo.path);
278
+ }
279
+ catch { /* ignore */ }
171
280
  }
172
281
  this.activeTasks.delete(taskId);
173
282
  }
@@ -190,6 +299,17 @@ class TaskHandler {
190
299
  async handleCleanupWorkspace(frame) {
191
300
  const { taskId, workspacePath, msgId } = frame;
192
301
  log.info({ taskId, workspacePath }, 'Cleaning up workspace');
302
+ // Validate workspacePath is safe: must be absolute and must resolve
303
+ // under the configured workspace root. path.resolve() canonicalizes
304
+ // '..' segments, so the startsWith check is sufficient for traversal prevention.
305
+ const workspaceRoot = path.resolve(this.config.workspaceRoot);
306
+ const resolved = path.resolve(workspacePath);
307
+ if (!path.isAbsolute(workspacePath) ||
308
+ (!resolved.startsWith(workspaceRoot + path.sep) && resolved !== workspaceRoot)) {
309
+ log.error({ taskId, workspacePath, workspaceRoot }, 'Workspace path traversal blocked');
310
+ this.onAck(msgId, { status: 'error', error: 'Invalid workspace path: must be under workspace root' });
311
+ return;
312
+ }
193
313
  try {
194
314
  await this.workspaceManager.cleanup(taskId, workspacePath);
195
315
  this.onAck(msgId, { status: 'cleaned' });
@@ -206,21 +326,21 @@ class TaskHandler {
206
326
  }
207
327
  catch (rmErr) {
208
328
  log.error({ taskId, workspacePath, err: rmErr }, 'Failed to cleanup workspace');
209
- this.onAck(msgId, { status: 'error', error: rmErr instanceof Error ? rmErr.message : String(rmErr) });
329
+ this.onAck(msgId, { status: 'error', error: (0, protocol_1.getErrorMessage)(rmErr) });
210
330
  }
211
331
  }
212
332
  }
213
- handleStageConfirmResponse(taskId, stageIndex, result) {
333
+ handleStageConfirmResponse(taskId, stageName, approved) {
214
334
  const ctx = this.activeTasks.get(taskId);
215
- if (!ctx) {
216
- log.warn({ taskId }, 'Stage confirm response for unknown task');
335
+ if (!ctx?.stageMonitor) {
336
+ log.warn({ taskId }, 'Stage confirm response for unknown task or missing monitor');
217
337
  return;
218
338
  }
219
- if (!ctx.pipelineRunner) {
220
- log.warn({ taskId }, 'Stage confirm response but no pipeline runner');
221
- return;
339
+ const response = ctx.stageMonitor.handleConfirmResponse(stageName, approved);
340
+ if (response && ctx.ptySession) {
341
+ const pty = ctx.ptySession.pty;
342
+ (0, pty_stdin_writer_js_1.writePromptToStdin)({ write: (d) => pty.write(d) }, response);
222
343
  }
223
- ctx.pipelineRunner.confirmStage(taskId, stageIndex, result);
224
344
  }
225
345
  async handleResume(frame) {
226
346
  const { taskId, msgId } = frame;
@@ -232,64 +352,164 @@ class TaskHandler {
232
352
  }
233
353
  log.info({ taskId }, 'Resuming task');
234
354
  this.onAck(msgId, { status: 'resuming' });
235
- // Resume the pipeline runner if it exists
236
- if (ctx.pipelineRunner) {
237
- ctx.pipelineRunner.resume();
238
- }
239
355
  this.onProgress(taskId, ctx.stage, 'running', 'Task resumed');
240
356
  }
241
357
  /**
242
- * Run the pipeline for a task using PipelineRunner.
243
- * Creates a PipelineRunner instance, wires up events, and waits for completion.
358
+ * Run the pipeline using PipelineCompiler + StageMonitor.
359
+ * Compiles a single prompt from the pipeline config, writes it to PTY stdin,
360
+ * and monitors output for [[OVERLORD:nonce:stage:ACTION]] markers.
244
361
  */
245
- runPipeline(ctx, ptySession, taskDescription) {
246
- return new Promise((resolve, reject) => {
247
- const { taskId, configSnapshot, abortController } = ctx;
248
- // Adapt PtySession to the minimal interface PipelineRunner expects
249
- const pipelinePtySession = {
250
- write: (data) => ptySession.pty.write(data),
251
- getCleanOutput: () => ptySession.cleanOutput,
252
- resetCleanOutput: () => ptySession.resetCleanOutput(),
253
- onData: (handler) => ptySession.onData(handler),
254
- onExit: (handler) => ptySession.onExit(handler),
362
+ async runPipeline(ctx, ptySession, taskDescription) {
363
+ const { taskId, configSnapshot, abortController } = ctx;
364
+ const compiler = new pipeline_compiler_js_1.PipelineCompiler();
365
+ const ptyWritable = { write: (d) => ptySession.pty.write(d) };
366
+ // 1. Parse pipeline config
367
+ let pipelineConfig = null;
368
+ if (configSnapshot.pipeline) {
369
+ try {
370
+ pipelineConfig = JSON.parse(configSnapshot.pipeline);
371
+ }
372
+ catch (parseErr) {
373
+ log.error({ taskId, err: parseErr }, 'Failed to parse pipeline JSON, falling back to default pipeline');
374
+ }
375
+ }
376
+ // 2. Build variables
377
+ const variables = {
378
+ DEFAULT_BRANCH: configSnapshot.defaultBranch,
379
+ TEST_COMMAND: configSnapshot.testCommand ?? '',
380
+ BRANCH: `feat/overlord-${taskId}`,
381
+ GIT_PLATFORM: configSnapshot.gitPlatform,
382
+ REVIEWERS: (configSnapshot.defaultReviewers ?? []).join(', '),
383
+ };
384
+ // 3. Compile prompt
385
+ const { prompt, nonce } = compiler.compile(pipelineConfig, taskDescription, variables);
386
+ // 4. Create StageMonitor
387
+ const effectivePipeline = pipelineConfig ?? pipeline_compiler_js_1.DEFAULT_PIPELINE;
388
+ const monitor = new stage_monitor_js_1.StageMonitor(effectivePipeline, nonce);
389
+ ctx.stageMonitor = monitor;
390
+ // 5. Wait for agent to be ready (detect prompt character)
391
+ await new Promise((resolve, reject) => {
392
+ const PROMPT_TIMEOUT_MS = 120_000;
393
+ // Check accumulated output first
394
+ if (ptySession.executor.detectPrompt(ptySession.cleanOutput)) {
395
+ resolve();
396
+ return;
397
+ }
398
+ let settled = false;
399
+ const cleanup = () => {
400
+ ptySession.removeDataListener(checkReady);
255
401
  };
256
- // Use the executor as a prompt detector
257
- const promptDetector = {
258
- detectPrompt: (output) => ptySession.executor.detectPrompt(output),
402
+ const timer = setTimeout(() => {
403
+ if (!settled) {
404
+ settled = true;
405
+ cleanup();
406
+ reject(new Error(`Agent prompt not detected within ${PROMPT_TIMEOUT_MS / 1000}s`));
407
+ }
408
+ }, PROMPT_TIMEOUT_MS);
409
+ const onAbort = () => {
410
+ if (!settled) {
411
+ settled = true;
412
+ clearTimeout(timer);
413
+ cleanup();
414
+ reject(new Error('Task cancelled while waiting for agent prompt'));
415
+ }
259
416
  };
260
- const runner = new pipeline_runner_js_1.PipelineRunner(taskId, ptySession.sessionId, pipelinePtySession, this.leaseChecker, promptDetector);
261
- ctx.pipelineRunner = runner;
262
- // Wire up pipeline events
263
- runner.onStageChanged((tid, stageName) => {
264
- ctx.stage = stageName;
265
- this.onProgress(tid, stageName, 'running', `Stage: ${stageName}`);
417
+ abortController.signal.addEventListener('abort', onAbort, { once: true });
418
+ ptySession.onExit((exitCode) => {
419
+ if (!settled) {
420
+ settled = true;
421
+ clearTimeout(timer);
422
+ abortController.signal.removeEventListener('abort', onAbort);
423
+ cleanup();
424
+ reject(new Error(`Agent exited with code ${exitCode} before prompt was detected`));
425
+ }
266
426
  });
267
- runner.onCompleted((tid) => {
268
- ctx.stage = 'completed';
269
- this.onProgress(tid, 'completed', 'completed', 'Task completed successfully');
270
- resolve();
427
+ const checkReady = (data) => {
428
+ if (ptySession.executor.detectPrompt(data)) {
429
+ if (!settled) {
430
+ settled = true;
431
+ clearTimeout(timer);
432
+ abortController.signal.removeEventListener('abort', onAbort);
433
+ cleanup();
434
+ resolve();
435
+ }
436
+ }
437
+ };
438
+ ptySession.onData(checkReady);
439
+ });
440
+ await (0, pty_stdin_writer_js_1.writePromptToStdin)(ptyWritable, prompt);
441
+ // 7. Wire PTY output to StageMonitor and wait for completion
442
+ return new Promise((resolve, reject) => {
443
+ let settled = false;
444
+ const settle = (fn) => {
445
+ if (!settled) {
446
+ settled = true;
447
+ clearInterval(timeoutCheckTimer);
448
+ fn();
449
+ }
450
+ };
451
+ // Periodically check for stale pipeline / context reinjection
452
+ const TIMEOUT_CHECK_INTERVAL_MS = 30_000;
453
+ const processEvents = (events) => {
454
+ for (const event of events) {
455
+ switch (event.type) {
456
+ case 'stage_start':
457
+ ctx.stage = event.stage;
458
+ this.onProgress(taskId, event.stage, 'running', `Stage: ${event.stage}`);
459
+ break;
460
+ case 'stage_done':
461
+ this.onProgress(taskId, event.stage, 'stage_done', `Stage completed: ${event.stage}`);
462
+ break;
463
+ case 'stage_fail':
464
+ this.onProgress(taskId, event.stage, 'stage_failed', event.reason);
465
+ break;
466
+ case 'wait_confirm': {
467
+ this.onConfirmRequest(taskId, event.stage, 0);
468
+ break;
469
+ }
470
+ case 'pipeline_completed':
471
+ ctx.stage = 'completed';
472
+ this.onProgress(taskId, 'completed', 'completed', 'Task completed successfully');
473
+ settle(() => resolve());
474
+ break;
475
+ case 'pipeline_failed':
476
+ settle(() => reject(new Error(event.reason)));
477
+ break;
478
+ case 'max_loops_exceeded':
479
+ (0, pty_stdin_writer_js_1.writePromptToStdin)(ptyWritable, '\u5FAA\u73AF\u5DF2\u8FBE\u5230\u6700\u5927\u6B21\u6570\uFF0C\u8BF7\u505C\u6B62\u4FEE\u6539\u5E76\u62A5\u544A\u5F53\u524D\u72B6\u6001\u3002');
480
+ break;
481
+ case 'context_reinjection_needed': {
482
+ const resumePrompt = compiler.compileResume(effectivePipeline, monitor.getState(), nonce, 'context_reinjection');
483
+ (0, pty_stdin_writer_js_1.writePromptToStdin)(ptyWritable, resumePrompt);
484
+ break;
485
+ }
486
+ }
487
+ }
488
+ };
489
+ const timeoutCheckTimer = setInterval(() => {
490
+ const timeoutEvents = monitor.checkTimeouts();
491
+ processEvents(timeoutEvents);
492
+ }, TIMEOUT_CHECK_INTERVAL_MS);
493
+ if (timeoutCheckTimer.unref)
494
+ timeoutCheckTimer.unref();
495
+ ptySession.onData((data) => {
496
+ const events = monitor.processOutput(data);
497
+ processEvents(events);
271
498
  });
272
- runner.onFailed((tid, error) => {
273
- if (abortController.signal.aborted) {
274
- reject(new Error('Task cancelled'));
499
+ ptySession.onExit((exitCode) => {
500
+ const status = monitor.handleProcessExit(exitCode);
501
+ if (status === 'completed') {
502
+ ctx.stage = 'completed';
503
+ this.onProgress(taskId, 'completed', 'completed', 'Task completed successfully');
504
+ settle(() => resolve());
275
505
  }
276
506
  else {
277
- reject(new Error(error));
507
+ settle(() => reject(new Error(`Agent exited with code ${exitCode}, pipeline incomplete`)));
278
508
  }
279
509
  });
280
- runner.onConfirmRequired((tid, _stageName, mode, prompt, choices, timeout) => {
281
- const stageIndex = runner.getState().currentStageIndex;
282
- this.onConfirmRequest(tid, stageIndex, mode, timeout ?? 0, prompt, choices);
283
- });
284
- // Listen for abort
285
- const onAbort = () => {
286
- runner.destroy();
287
- };
288
- abortController.signal.addEventListener('abort', onAbort, { once: true });
289
- // Start the pipeline
290
- runner.start(configSnapshot.pipeline, taskDescription).catch((err) => {
291
- reject(err);
292
- });
510
+ abortController.signal.addEventListener('abort', () => {
511
+ settle(() => reject(new Error('Task cancelled')));
512
+ }, { once: true });
293
513
  });
294
514
  }
295
515
  }
@@ -1 +1 @@
1
- {"version":3,"file":"task-handler.js","sourceRoot":"","sources":["../src/task-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-handler.js","sourceRoot":"","sources":["../src/task-handler.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,24 @@
1
+ import { EventEmitter } from 'events';
1
2
  /**
2
3
  * Manages Cursor remote tunnel processes for active tasks.
3
4
  *
4
- * TODO: Full implementation should:
5
- * - Parse the tunnel URL from the `cursor --remote-tunnel` stdout
6
- * - Handle tunnel process crashes and automatic restarts
7
- * - Enforce tunnel TTL / expiry
8
- * - Allocate and track ports
5
+ * Emits events:
6
+ * - `tunnel_started(taskId, tunnelUrl)` — when tunnel URL is extracted from stdout
7
+ * - `tunnel_closed(taskId, reason)` — when tunnel is stopped or retries exhausted
8
+ * - `tunnel_crashed(taskId, error, willRetry)` on unexpected process exit
9
9
  */
10
- export declare class TunnelManager {
10
+ export declare class TunnelManager extends EventEmitter {
11
11
  private tunnels;
12
+ private restartTimers;
12
13
  /**
13
14
  * Start a Cursor remote tunnel for the given task workspace.
14
15
  * Returns the tunnel URL on success.
15
16
  */
16
17
  start(taskId: number, workspacePath: string): Promise<string>;
18
+ /**
19
+ * Spawn a tunnel process. Used by both start() and crash-recovery restarts.
20
+ */
21
+ private _spawnTunnel;
17
22
  /**
18
23
  * Stop the tunnel for the given task.
19
24
  */
@@ -30,5 +35,10 @@ export declare class TunnelManager {
30
35
  * Get the tunnel URL for a task, or null if not available.
31
36
  */
32
37
  getTunnelUrl(taskId: number): string | null;
38
+ private clearRestartTimer;
39
+ getActiveTunnels(): Array<{
40
+ taskId: number;
41
+ tunnelUrl: string;
42
+ }>;
33
43
  }
34
44
  //# sourceMappingURL=tunnel-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-manager.d.ts","sourceRoot":"","sources":["../src/tunnel-manager.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IAEjD;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmFnE;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzC;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAG5C"}
1
+ {"version":3,"file":"tunnel-manager.d.ts","sourceRoot":"","sources":["../src/tunnel-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAgBtC;;;;;;;GAOG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAqC;IAE1D;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAenE;;OAEG;IACH,OAAO,CAAC,YAAY;IAgJpB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzC;;OAEG;IACH,OAAO,IAAI,IAAI;IAqBf;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI3C,OAAO,CAAC,iBAAiB;IAQzB,gBAAgB,IAAI,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAKjE"}