@overlordai/worker 1.0.53 → 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
@@ -1 +1 @@
1
- {"version":3,"file":"ringbuffer.d.ts","sourceRoot":"","sources":["../src/ringbuffer.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,GAAE,MAA6B;IAKnD,0CAA0C;IAC1C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO5B,gEAAgE;IAChE,WAAW,IAAI,MAAM;IAYrB,6CAA6C;IAC7C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,8BAA8B;IAC9B,KAAK,IAAI,IAAI;CAKd"}
1
+ {"version":3,"file":"ringbuffer.d.ts","sourceRoot":"","sources":["../src/ringbuffer.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAAM;gBAEhB,QAAQ,GAAE,MAA6B;IAKnD,0CAA0C;IAC1C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASxB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO5B,gEAAgE;IAChE,WAAW,IAAI,MAAM;IAgBrB,6CAA6C;IAC7C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,8BAA8B;IAC9B,KAAK,IAAI,IAAI;CAOd"}
@@ -11,6 +11,8 @@ class RingBuffer {
11
11
  head = 0;
12
12
  count = 0;
13
13
  maxLines;
14
+ dirty = true;
15
+ cachedContents = '';
14
16
  constructor(maxLines = protocol_1.PTY_RINGBUFFER_LINES) {
15
17
  this.maxLines = maxLines;
16
18
  this.buffer = new Array(maxLines);
@@ -22,6 +24,7 @@ class RingBuffer {
22
24
  if (this.count < this.maxLines) {
23
25
  this.count++;
24
26
  }
27
+ this.dirty = true;
25
28
  }
26
29
  /** Push raw data that may contain multiple lines. */
27
30
  pushData(data) {
@@ -34,13 +37,17 @@ class RingBuffer {
34
37
  getContents() {
35
38
  if (this.count === 0)
36
39
  return '';
40
+ if (!this.dirty)
41
+ return this.cachedContents;
37
42
  const lines = [];
38
43
  const start = this.count < this.maxLines ? 0 : this.head;
39
44
  for (let i = 0; i < this.count; i++) {
40
45
  const idx = (start + i) % this.maxLines;
41
46
  lines.push(this.buffer[idx]);
42
47
  }
43
- return lines.join('\n');
48
+ this.cachedContents = lines.join('\n');
49
+ this.dirty = false;
50
+ return this.cachedContents;
44
51
  }
45
52
  /** Return current number of stored lines. */
46
53
  get size() {
@@ -51,6 +58,8 @@ class RingBuffer {
51
58
  this.head = 0;
52
59
  this.count = 0;
53
60
  this.buffer = new Array(this.maxLines);
61
+ this.dirty = true;
62
+ this.cachedContents = '';
54
63
  }
55
64
  }
56
65
  exports.RingBuffer = RingBuffer;
@@ -1 +1 @@
1
- {"version":3,"file":"ringbuffer.js","sourceRoot":"","sources":["../src/ringbuffer.ts"],"names":[],"mappings":";;;AAAA,mDAA4D;AAE5D;;;GAGG;AACH,MAAa,UAAU;IACb,MAAM,CAAW;IACjB,IAAI,GAAG,CAAC,CAAC;IACT,KAAK,GAAG,CAAC,CAAC;IACD,QAAQ,CAAS;IAElC,YAAY,WAAmB,+BAAoB;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,QAAQ,CAAC,IAAY;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,WAAW;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,6CAA6C;IAC7C,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,8BAA8B;IAC9B,KAAK;QACH,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;CACF;AApDD,gCAoDC"}
1
+ {"version":3,"file":"ringbuffer.js","sourceRoot":"","sources":["../src/ringbuffer.ts"],"names":[],"mappings":";;;AAAA,mDAA4D;AAE5D;;;GAGG;AACH,MAAa,UAAU;IACb,MAAM,CAAW;IACjB,IAAI,GAAG,CAAC,CAAC;IACT,KAAK,GAAG,CAAC,CAAC;IACD,QAAQ,CAAS;IAC1B,KAAK,GAAG,IAAI,CAAC;IACb,cAAc,GAAG,EAAE,CAAC;IAE5B,YAAY,WAAmB,+BAAoB;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,qDAAqD;IACrD,QAAQ,CAAC,IAAY;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,WAAW;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC;QAE5C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,6CAA6C;IAC7C,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,8BAA8B;IAC9B,KAAK;QACH,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;CACF;AA7DD,gCA6DC"}
@@ -0,0 +1,72 @@
1
+ import type { PipelineConfig, PipelineRunState } from '@overlordai/protocol';
2
+ export type StageEvent = {
3
+ type: 'stage_start';
4
+ stage: string;
5
+ } | {
6
+ type: 'stage_done';
7
+ stage: string;
8
+ result?: string;
9
+ } | {
10
+ type: 'stage_fail';
11
+ stage: string;
12
+ reason: string;
13
+ } | {
14
+ type: 'wait_confirm';
15
+ stage: string;
16
+ } | {
17
+ type: 'pipeline_completed';
18
+ } | {
19
+ type: 'pipeline_failed';
20
+ reason: string;
21
+ } | {
22
+ type: 'max_loops_exceeded';
23
+ stage: string;
24
+ loopKey: string;
25
+ } | {
26
+ type: 'stage_timeout';
27
+ stage: string;
28
+ } | {
29
+ type: 'context_reinjection_needed';
30
+ };
31
+ export declare class StageMonitor {
32
+ private pipeline;
33
+ private nonce;
34
+ private markerRegex;
35
+ private logger;
36
+ private currentStageIndex;
37
+ private stages;
38
+ private loopCounts;
39
+ private takeoverActive;
40
+ private takeoverAt?;
41
+ private takeoverAtStage?;
42
+ private takeoverBuffer;
43
+ private pendingBuffer;
44
+ private lastMarkerTime;
45
+ private hasOutputSinceLastMarker;
46
+ private lastReinjectionTime;
47
+ private reinjectionCountPerStage;
48
+ private compiler;
49
+ constructor(pipeline: PipelineConfig, nonce: string);
50
+ /** Process PTY output chunk. Returns detected events. */
51
+ processOutput(chunk: string): StageEvent[];
52
+ /** Handle human confirmation. Returns text to write to PTY stdin. */
53
+ handleConfirmResponse(stageName: string, approved: boolean): string | null;
54
+ /** Enter takeover — pause marker parsing, buffer output. */
55
+ enterTakeover(): void;
56
+ /** Exit takeover — scan buffer, return resume prompt and any events that occurred during takeover. */
57
+ exitTakeover(): {
58
+ resumePrompt: string;
59
+ events: StageEvent[];
60
+ };
61
+ /** Handle agent process exit. Returns terminal status. */
62
+ handleProcessExit(exitCode: number): 'completed' | 'failed';
63
+ /** Check for timeouts and context loss. Call periodically. */
64
+ checkTimeouts(): StageEvent[];
65
+ /** Get current state snapshot. */
66
+ getState(): PipelineRunState;
67
+ private escapeRegex;
68
+ private parseChunk;
69
+ private extractMarkers;
70
+ private handleMarker;
71
+ }
72
+ //# sourceMappingURL=stage-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-monitor.d.ts","sourceRoot":"","sources":["../src/stage-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAiB,MAAM,sBAAsB,CAAC;AAS5F,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAY3C,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAO;IAGrB,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,cAAc,CAAM;IAG5B,OAAO,CAAC,aAAa,CAAM;IAG3B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,wBAAwB,CAA8B;IAE9D,OAAO,CAAC,QAAQ,CAA0B;gBAE9B,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM;IAcnD,yDAAyD;IACzD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;IAW1C,qEAAqE;IACrE,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAe1E,4DAA4D;IAC5D,aAAa,IAAI,IAAI;IAQrB,sGAAsG;IACtG,YAAY,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE;IAW9D,0DAA0D;IAC1D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ;IAK3D,8DAA8D;IAC9D,aAAa,IAAI,UAAU,EAAE;IAyB7B,kCAAkC;IAClC,QAAQ,IAAI,gBAAgB;IAe5B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IA8ClB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,YAAY;CA8DrB"}
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StageMonitor = void 0;
7
+ const protocol_1 = require("@overlordai/protocol");
8
+ const pino_1 = __importDefault(require("pino"));
9
+ const ansi_stripper_js_1 = require("./ansi-stripper.js");
10
+ const pipeline_compiler_js_1 = require("./pipeline-compiler.js");
11
+ const log = (0, pino_1.default)({ name: 'stage-monitor' });
12
+ class StageMonitor {
13
+ pipeline;
14
+ nonce;
15
+ markerRegex;
16
+ logger = log;
17
+ // State
18
+ currentStageIndex = -1;
19
+ stages;
20
+ loopCounts = {};
21
+ takeoverActive = false;
22
+ takeoverAt;
23
+ takeoverAtStage;
24
+ takeoverBuffer = '';
25
+ // Cross-chunk buffering
26
+ pendingBuffer = '';
27
+ // Timeout tracking
28
+ lastMarkerTime = Date.now();
29
+ hasOutputSinceLastMarker = false;
30
+ lastReinjectionTime = 0;
31
+ reinjectionCountPerStage = {};
32
+ compiler = new pipeline_compiler_js_1.PipelineCompiler();
33
+ constructor(pipeline, nonce) {
34
+ this.pipeline = pipeline;
35
+ this.nonce = nonce;
36
+ this.markerRegex = new RegExp(`\\[\\[OVERLORD:${this.escapeRegex(nonce)}:([a-zA-Z0-9_-]+):(START|DONE|FAIL|WAIT_CONFIRM|RESULT)(?::([^\\]]*?))?\\]\\]`, 'g');
37
+ this.stages = pipeline.stages.map((s) => ({
38
+ name: s.name,
39
+ status: 'pending',
40
+ }));
41
+ }
42
+ /** Process PTY output chunk. Returns detected events. */
43
+ processOutput(chunk) {
44
+ if (this.takeoverActive) {
45
+ this.takeoverBuffer += chunk;
46
+ return [];
47
+ }
48
+ // Reset regex state before each call to avoid stale lastIndex from the 'g' flag
49
+ this.markerRegex.lastIndex = 0;
50
+ return this.parseChunk(chunk);
51
+ }
52
+ /** Handle human confirmation. Returns text to write to PTY stdin. */
53
+ handleConfirmResponse(stageName, approved) {
54
+ const stageState = this.stages.find((s) => s.name === stageName);
55
+ if (!stageState || stageState.status !== 'waiting_confirm') {
56
+ return null;
57
+ }
58
+ if (approved) {
59
+ stageState.status = 'running';
60
+ return `已确认,请继续执行 ${stageName} 步骤。`;
61
+ }
62
+ else {
63
+ stageState.status = 'skipped';
64
+ return `用户已跳过 ${stageName} 步骤,请停止当前流程。`;
65
+ }
66
+ }
67
+ /** Enter takeover — pause marker parsing, buffer output. */
68
+ enterTakeover() {
69
+ this.takeoverActive = true;
70
+ this.takeoverAt = new Date().toISOString();
71
+ const runningStage = this.stages.find((s) => s.status === 'running');
72
+ this.takeoverAtStage = runningStage?.name;
73
+ this.takeoverBuffer = '';
74
+ }
75
+ /** Exit takeover — scan buffer, return resume prompt and any events that occurred during takeover. */
76
+ exitTakeover() {
77
+ this.takeoverActive = false;
78
+ const events = this.takeoverBuffer ? this.parseChunk(this.takeoverBuffer) : [];
79
+ this.takeoverBuffer = '';
80
+ const state = this.getState();
81
+ const resumePrompt = this.compiler.compileResume(this.pipeline, state, this.nonce, 'takeover_release');
82
+ return { resumePrompt, events };
83
+ }
84
+ /** Handle agent process exit. Returns terminal status. */
85
+ handleProcessExit(exitCode) {
86
+ const lastStage = this.stages.at(-1);
87
+ return exitCode === 0 && lastStage?.status === 'done' ? 'completed' : 'failed';
88
+ }
89
+ /** Check for timeouts and context loss. Call periodically. */
90
+ checkTimeouts() {
91
+ const now = Date.now();
92
+ const timeSinceLastMarker = now - this.lastMarkerTime;
93
+ if (timeSinceLastMarker <= protocol_1.PIPELINE_STALE_TIMEOUT_MS || !this.hasOutputSinceLastMarker) {
94
+ return [];
95
+ }
96
+ if (this.lastReinjectionTime !== 0 && now - this.lastReinjectionTime < protocol_1.PIPELINE_REINJECTION_MIN_INTERVAL_MS) {
97
+ return [];
98
+ }
99
+ const stageKey = this.stages[this.currentStageIndex]?.name ?? '__none__';
100
+ const count = this.reinjectionCountPerStage[stageKey] ?? 0;
101
+ if (count >= 1) {
102
+ return [];
103
+ }
104
+ this.lastReinjectionTime = now;
105
+ this.reinjectionCountPerStage[stageKey] = count + 1;
106
+ this.hasOutputSinceLastMarker = false;
107
+ return [{ type: 'context_reinjection_needed' }];
108
+ }
109
+ /** Get current state snapshot. */
110
+ getState() {
111
+ return {
112
+ currentStageIndex: this.currentStageIndex,
113
+ stages: this.stages.map((s) => ({ ...s })),
114
+ loopCounts: { ...this.loopCounts },
115
+ takeover: {
116
+ active: this.takeoverActive,
117
+ at: this.takeoverAt,
118
+ atStage: this.takeoverAtStage,
119
+ },
120
+ };
121
+ }
122
+ // --- Private helpers ---
123
+ escapeRegex(str) {
124
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
125
+ }
126
+ parseChunk(chunk) {
127
+ const events = [];
128
+ // Strip ANSI before parsing
129
+ const cleaned = (0, ansi_stripper_js_1.stripAnsi)(this.pendingBuffer + chunk);
130
+ this.pendingBuffer = '';
131
+ // Check if we might have an incomplete marker at the end
132
+ const MAX_PENDING_BUFFER = 8192;
133
+ const lastOpenIdx = cleaned.lastIndexOf('[[OVERLORD:');
134
+ if (lastOpenIdx !== -1) {
135
+ const afterOpen = cleaned.slice(lastOpenIdx);
136
+ if (!afterOpen.includes(']]')) {
137
+ // Incomplete marker — buffer the partial (with size limit to prevent memory exhaustion)
138
+ if (afterOpen.length > MAX_PENDING_BUFFER) {
139
+ this.logger.warn({ bufferSize: afterOpen.length }, 'Stage marker buffer overflow, discarding partial marker');
140
+ this.pendingBuffer = '';
141
+ }
142
+ else {
143
+ this.pendingBuffer = afterOpen;
144
+ }
145
+ const processable = cleaned.slice(0, lastOpenIdx);
146
+ this.extractMarkers(processable, events);
147
+ // Track non-marker output
148
+ if (processable.trim().length > 0) {
149
+ this.hasOutputSinceLastMarker = true;
150
+ }
151
+ return events;
152
+ }
153
+ }
154
+ this.extractMarkers(cleaned, events);
155
+ // Track non-marker output — check if there's text beyond just markers
156
+ // Only check the new chunk portion to avoid re-scanning full output
157
+ const newPortion = cleaned.slice(Math.max(0, cleaned.length - chunk.length - 200));
158
+ this.markerRegex.lastIndex = 0;
159
+ const withoutMarkers = newPortion.replace(this.markerRegex, '').trim();
160
+ if (withoutMarkers.length > 0) {
161
+ this.hasOutputSinceLastMarker = true;
162
+ }
163
+ // Reset the regex lastIndex since we used it with 'g' flag
164
+ this.markerRegex.lastIndex = 0;
165
+ return events;
166
+ }
167
+ extractMarkers(text, events) {
168
+ this.markerRegex.lastIndex = 0;
169
+ let match;
170
+ while ((match = this.markerRegex.exec(text)) !== null) {
171
+ const parsed = {
172
+ stage: match[1],
173
+ action: match[2],
174
+ payload: match[3],
175
+ };
176
+ this.handleMarker(parsed, events);
177
+ }
178
+ }
179
+ handleMarker(marker, events) {
180
+ const stageIndex = this.stages.findIndex((s) => s.name === marker.stage);
181
+ if (stageIndex === -1)
182
+ return;
183
+ const stageState = this.stages[stageIndex];
184
+ const stageConfig = this.pipeline.stages[stageIndex];
185
+ this.lastMarkerTime = Date.now();
186
+ this.hasOutputSinceLastMarker = false;
187
+ switch (marker.action) {
188
+ case 'START':
189
+ stageState.status = 'running';
190
+ stageState.startedAt = new Date().toISOString();
191
+ this.currentStageIndex = stageIndex;
192
+ events.push({ type: 'stage_start', stage: marker.stage });
193
+ break;
194
+ case 'DONE':
195
+ stageState.status = 'done';
196
+ stageState.completedAt = new Date().toISOString();
197
+ events.push({ type: 'stage_done', stage: marker.stage });
198
+ // Check if this is the last stage
199
+ if (stageIndex === this.stages.length - 1) {
200
+ events.push({ type: 'pipeline_completed' });
201
+ }
202
+ break;
203
+ case 'FAIL': {
204
+ stageState.status = 'failed';
205
+ stageState.completedAt = new Date().toISOString();
206
+ const reason = marker.payload ?? 'unknown';
207
+ events.push({ type: 'stage_fail', stage: marker.stage, reason });
208
+ // Loop counting for stages with onFailure
209
+ if (stageConfig.onFailure) {
210
+ const loopKey = `${marker.stage}:${stageConfig.onFailure.goto}`;
211
+ this.loopCounts[loopKey] = (this.loopCounts[loopKey] ?? 0) + 1;
212
+ if (this.loopCounts[loopKey] >= stageConfig.onFailure.maxLoops) {
213
+ events.push({
214
+ type: 'max_loops_exceeded',
215
+ stage: marker.stage,
216
+ loopKey,
217
+ });
218
+ }
219
+ }
220
+ break;
221
+ }
222
+ case 'WAIT_CONFIRM':
223
+ stageState.status = 'waiting_confirm';
224
+ this.currentStageIndex = stageIndex;
225
+ events.push({ type: 'wait_confirm', stage: marker.stage });
226
+ break;
227
+ case 'RESULT':
228
+ stageState.result = marker.payload;
229
+ break;
230
+ }
231
+ }
232
+ }
233
+ exports.StageMonitor = StageMonitor;
234
+ //# sourceMappingURL=stage-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-monitor.js","sourceRoot":"","sources":["../src/stage-monitor.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import type { ExecuteTaskFrame, CancelTaskFrame, CleanupWorkspaceFrame, ResumeTaskFrame, ConfigSnapshot } from '@overlordai/protocol';
1
+ import type { ExecuteTaskFrame, CancelTaskFrame, CleanupWorkspaceFrame, ResumeTaskFrame, ConfigSnapshot, WorkerProgressFrame } from '@overlordai/protocol';
2
2
  import { WorkerConfig } from './config.js';
3
3
  import type { WorkspaceManager, WorkspaceInfo } from './workspace-manager.js';
4
4
  import type { PtyManager, PtySession } from './pty-manager.js';
5
- import { PipelineRunner, type LeaseChecker } from './pipeline-runner.js';
6
- import type { StageConfirmMode, StageChoiceOption } from '@overlordai/protocol';
5
+ import type { LeaseChecker } from './lease-manager.js';
6
+ import { StageMonitor } from './stage-monitor.js';
7
7
  export interface TaskContext {
8
8
  taskId: number;
9
9
  description: string;
@@ -11,14 +11,14 @@ export interface TaskContext {
11
11
  stage: string;
12
12
  workspaceInfo: WorkspaceInfo | null;
13
13
  ptySession: PtySession | null;
14
- pipelineRunner: PipelineRunner | null;
14
+ stageMonitor: StageMonitor | null;
15
15
  channelToken: string;
16
16
  configSnapshot: ConfigSnapshot;
17
17
  abortController: AbortController;
18
18
  }
19
- type ProgressCallback = (taskId: number, stage: string, status: string, message?: string) => void;
19
+ type ProgressCallback = (taskId: number, stage: string, status: WorkerProgressFrame['status'], message?: string) => void;
20
20
  type AckCallback = (msgId: string, payload?: Record<string, unknown>) => void;
21
- type ConfirmRequestCallback = (taskId: number, stageIndex: number, mode: StageConfirmMode, timeout: number, prompt?: string, choices?: StageChoiceOption[]) => void;
21
+ type ConfirmRequestCallback = (taskId: number, stageName: string, timeout: number, prompt?: string) => void;
22
22
  export declare class TaskHandler {
23
23
  private activeTasks;
24
24
  private config;
@@ -28,27 +28,33 @@ export declare class TaskHandler {
28
28
  private workspaceManager;
29
29
  private ptyManager;
30
30
  private leaseChecker;
31
- constructor(config: WorkerConfig, onProgress: ProgressCallback, onAck: AckCallback, onConfirmRequest: ConfirmRequestCallback, workspaceManager: WorkspaceManager, ptyManager: PtyManager, leaseChecker: LeaseChecker);
31
+ private getWorkerJwt;
32
+ constructor(config: WorkerConfig, onProgress: ProgressCallback, onAck: AckCallback, onConfirmRequest: ConfirmRequestCallback, workspaceManager: WorkspaceManager, ptyManager: PtyManager, leaseChecker: LeaseChecker, getWorkerJwt: () => string);
32
33
  getActiveTaskCount(): number;
33
34
  getActiveTaskIds(): number[];
35
+ /**
36
+ * Cancel all active tasks. Used during graceful shutdown.
37
+ */
38
+ cancelAllTasks(): Promise<void>;
34
39
  /**
35
40
  * Wait until all active tasks have finished.
36
41
  * Resolves immediately if no tasks are active.
37
42
  */
38
- waitForActiveTasks(): Promise<void>;
43
+ waitForActiveTasks(timeoutMs?: number): Promise<void>;
39
44
  getActiveTaskStatuses(): Array<{
40
45
  taskId: number;
41
- localStatus: 'still_running' | 'completed_locally' | 'failed_locally';
46
+ localStatus: import('@overlordai/protocol').LocalStatus;
42
47
  currentStage?: string;
43
48
  }>;
44
49
  handleExecute(frame: ExecuteTaskFrame): Promise<void>;
45
50
  handleCancel(frame: CancelTaskFrame): Promise<void>;
46
51
  handleCleanupWorkspace(frame: CleanupWorkspaceFrame): Promise<void>;
47
- handleStageConfirmResponse(taskId: number, stageIndex: number, result: string): void;
52
+ handleStageConfirmResponse(taskId: number, stageName: string, approved: boolean): void;
48
53
  handleResume(frame: ResumeTaskFrame): Promise<void>;
49
54
  /**
50
- * Run the pipeline for a task using PipelineRunner.
51
- * Creates a PipelineRunner instance, wires up events, and waits for completion.
55
+ * Run the pipeline using PipelineCompiler + StageMonitor.
56
+ * Compiles a single prompt from the pipeline config, writes it to PTY stdin,
57
+ * and monitors output for [[OVERLORD:nonce:stage:ACTION]] markers.
52
58
  */
53
59
  private runPipeline;
54
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"task-handler.d.ts","sourceRoot":"","sources":["../src/task-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-handler.d.ts","sourceRoot":"","sources":["../src/task-handler.ts"],"names":[],"mappings":"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"}