kantban-cli 0.1.8 → 0.1.10

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 (155) hide show
  1. package/dist/chunk-ZCUIGFSP.js +4111 -0
  2. package/dist/chunk-ZCUIGFSP.js.map +1 -0
  3. package/dist/context-7YDNTI3P.js +30 -0
  4. package/dist/context-7YDNTI3P.js.map +1 -0
  5. package/dist/cron-OKQP6QDF.js +112 -0
  6. package/dist/cron-OKQP6QDF.js.map +1 -0
  7. package/dist/index.d.ts +0 -2
  8. package/dist/index.js +179 -44
  9. package/dist/index.js.map +1 -1
  10. package/dist/pipeline-HTGCXNPL.js +4049 -0
  11. package/dist/pipeline-HTGCXNPL.js.map +1 -0
  12. package/dist/pipeline-init-IGZZOOLK.js +103 -0
  13. package/dist/pipeline-init-IGZZOOLK.js.map +1 -0
  14. package/dist/status-4GFXMVIM.js +128 -0
  15. package/dist/status-4GFXMVIM.js.map +1 -0
  16. package/dist/work-2V33NZAT.js +81 -0
  17. package/dist/work-2V33NZAT.js.map +1 -0
  18. package/package.json +5 -4
  19. package/dist/client.d.ts +0 -38
  20. package/dist/client.d.ts.map +0 -1
  21. package/dist/client.js +0 -163
  22. package/dist/client.js.map +0 -1
  23. package/dist/commands/context.d.ts +0 -3
  24. package/dist/commands/context.d.ts.map +0 -1
  25. package/dist/commands/context.js +0 -27
  26. package/dist/commands/context.js.map +0 -1
  27. package/dist/commands/cron.d.ts +0 -3
  28. package/dist/commands/cron.d.ts.map +0 -1
  29. package/dist/commands/cron.js +0 -106
  30. package/dist/commands/cron.js.map +0 -1
  31. package/dist/commands/pipeline-init.d.ts +0 -2
  32. package/dist/commands/pipeline-init.d.ts.map +0 -1
  33. package/dist/commands/pipeline-init.js +0 -100
  34. package/dist/commands/pipeline-init.js.map +0 -1
  35. package/dist/commands/pipeline.d.ts +0 -4
  36. package/dist/commands/pipeline.d.ts.map +0 -1
  37. package/dist/commands/pipeline.js +0 -1222
  38. package/dist/commands/pipeline.js.map +0 -1
  39. package/dist/commands/status.d.ts +0 -3
  40. package/dist/commands/status.d.ts.map +0 -1
  41. package/dist/commands/status.js +0 -135
  42. package/dist/commands/status.js.map +0 -1
  43. package/dist/commands/work.d.ts +0 -3
  44. package/dist/commands/work.d.ts.map +0 -1
  45. package/dist/commands/work.js +0 -76
  46. package/dist/commands/work.js.map +0 -1
  47. package/dist/index.d.ts.map +0 -1
  48. package/dist/lib/advisor.d.ts +0 -108
  49. package/dist/lib/advisor.d.ts.map +0 -1
  50. package/dist/lib/advisor.js +0 -139
  51. package/dist/lib/advisor.js.map +0 -1
  52. package/dist/lib/checkpoint.d.ts +0 -15
  53. package/dist/lib/checkpoint.d.ts.map +0 -1
  54. package/dist/lib/checkpoint.js +0 -49
  55. package/dist/lib/checkpoint.js.map +0 -1
  56. package/dist/lib/constraint-evaluator.d.ts +0 -40
  57. package/dist/lib/constraint-evaluator.d.ts.map +0 -1
  58. package/dist/lib/constraint-evaluator.js +0 -189
  59. package/dist/lib/constraint-evaluator.js.map +0 -1
  60. package/dist/lib/cost-tracker.d.ts +0 -46
  61. package/dist/lib/cost-tracker.d.ts.map +0 -1
  62. package/dist/lib/cost-tracker.js +0 -120
  63. package/dist/lib/cost-tracker.js.map +0 -1
  64. package/dist/lib/evaluator.d.ts +0 -17
  65. package/dist/lib/evaluator.d.ts.map +0 -1
  66. package/dist/lib/evaluator.js +0 -71
  67. package/dist/lib/evaluator.js.map +0 -1
  68. package/dist/lib/event-emitter.d.ts +0 -28
  69. package/dist/lib/event-emitter.d.ts.map +0 -1
  70. package/dist/lib/event-emitter.js +0 -100
  71. package/dist/lib/event-emitter.js.map +0 -1
  72. package/dist/lib/event-queue.d.ts +0 -28
  73. package/dist/lib/event-queue.d.ts.map +0 -1
  74. package/dist/lib/event-queue.js +0 -73
  75. package/dist/lib/event-queue.js.map +0 -1
  76. package/dist/lib/gate-config.d.ts +0 -7
  77. package/dist/lib/gate-config.d.ts.map +0 -1
  78. package/dist/lib/gate-config.js +0 -68
  79. package/dist/lib/gate-config.js.map +0 -1
  80. package/dist/lib/gate-proxy-server.d.ts +0 -16
  81. package/dist/lib/gate-proxy-server.d.ts.map +0 -1
  82. package/dist/lib/gate-proxy-server.js +0 -385
  83. package/dist/lib/gate-proxy-server.js.map +0 -1
  84. package/dist/lib/gate-proxy.d.ts +0 -46
  85. package/dist/lib/gate-proxy.d.ts.map +0 -1
  86. package/dist/lib/gate-proxy.js +0 -104
  87. package/dist/lib/gate-proxy.js.map +0 -1
  88. package/dist/lib/gate-runner.d.ts +0 -13
  89. package/dist/lib/gate-runner.d.ts.map +0 -1
  90. package/dist/lib/gate-runner.js +0 -104
  91. package/dist/lib/gate-runner.js.map +0 -1
  92. package/dist/lib/gate-snapshot.d.ts +0 -12
  93. package/dist/lib/gate-snapshot.d.ts.map +0 -1
  94. package/dist/lib/gate-snapshot.js +0 -49
  95. package/dist/lib/gate-snapshot.js.map +0 -1
  96. package/dist/lib/light-call.d.ts +0 -37
  97. package/dist/lib/light-call.d.ts.map +0 -1
  98. package/dist/lib/light-call.js +0 -62
  99. package/dist/lib/light-call.js.map +0 -1
  100. package/dist/lib/logger.d.ts +0 -22
  101. package/dist/lib/logger.d.ts.map +0 -1
  102. package/dist/lib/logger.js +0 -98
  103. package/dist/lib/logger.js.map +0 -1
  104. package/dist/lib/mcp-config.d.ts +0 -24
  105. package/dist/lib/mcp-config.d.ts.map +0 -1
  106. package/dist/lib/mcp-config.js +0 -115
  107. package/dist/lib/mcp-config.js.map +0 -1
  108. package/dist/lib/orchestrator.d.ts +0 -392
  109. package/dist/lib/orchestrator.d.ts.map +0 -1
  110. package/dist/lib/orchestrator.js +0 -1636
  111. package/dist/lib/orchestrator.js.map +0 -1
  112. package/dist/lib/parse-utils.d.ts +0 -6
  113. package/dist/lib/parse-utils.d.ts.map +0 -1
  114. package/dist/lib/parse-utils.js +0 -64
  115. package/dist/lib/parse-utils.js.map +0 -1
  116. package/dist/lib/prompt-composer.d.ts +0 -131
  117. package/dist/lib/prompt-composer.d.ts.map +0 -1
  118. package/dist/lib/prompt-composer.js +0 -317
  119. package/dist/lib/prompt-composer.js.map +0 -1
  120. package/dist/lib/ralph-loop.d.ts +0 -123
  121. package/dist/lib/ralph-loop.d.ts.map +0 -1
  122. package/dist/lib/ralph-loop.js +0 -383
  123. package/dist/lib/ralph-loop.js.map +0 -1
  124. package/dist/lib/reaper.d.ts +0 -14
  125. package/dist/lib/reaper.d.ts.map +0 -1
  126. package/dist/lib/reaper.js +0 -114
  127. package/dist/lib/reaper.js.map +0 -1
  128. package/dist/lib/replanner.d.ts +0 -49
  129. package/dist/lib/replanner.d.ts.map +0 -1
  130. package/dist/lib/replanner.js +0 -61
  131. package/dist/lib/replanner.js.map +0 -1
  132. package/dist/lib/run-memory.d.ts +0 -37
  133. package/dist/lib/run-memory.d.ts.map +0 -1
  134. package/dist/lib/run-memory.js +0 -115
  135. package/dist/lib/run-memory.js.map +0 -1
  136. package/dist/lib/stream-parser.d.ts +0 -20
  137. package/dist/lib/stream-parser.d.ts.map +0 -1
  138. package/dist/lib/stream-parser.js +0 -65
  139. package/dist/lib/stream-parser.js.map +0 -1
  140. package/dist/lib/stuck-detector.d.ts +0 -47
  141. package/dist/lib/stuck-detector.d.ts.map +0 -1
  142. package/dist/lib/stuck-detector.js +0 -105
  143. package/dist/lib/stuck-detector.js.map +0 -1
  144. package/dist/lib/tool-profiles.d.ts +0 -19
  145. package/dist/lib/tool-profiles.d.ts.map +0 -1
  146. package/dist/lib/tool-profiles.js +0 -22
  147. package/dist/lib/tool-profiles.js.map +0 -1
  148. package/dist/lib/worktree.d.ts +0 -12
  149. package/dist/lib/worktree.d.ts.map +0 -1
  150. package/dist/lib/worktree.js +0 -29
  151. package/dist/lib/worktree.js.map +0 -1
  152. package/dist/lib/ws-client.d.ts +0 -31
  153. package/dist/lib/ws-client.d.ts.map +0 -1
  154. package/dist/lib/ws-client.js +0 -113
  155. package/dist/lib/ws-client.js.map +0 -1
@@ -1,383 +0,0 @@
1
- import { composePrompt } from './prompt-composer.js';
2
- import { shouldCheckStuckDetection, classifyTrajectory } from './stuck-detector.js';
3
- const API_TIMEOUT_MS = 30_000; // 30s timeout for API calls (fingerprint, context)
4
- function withTimeout(promise, ms, label) {
5
- let timer;
6
- return Promise.race([
7
- promise.finally(() => clearTimeout(timer)),
8
- new Promise((_, reject) => {
9
- timer = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms);
10
- }),
11
- ]);
12
- }
13
- export class RalphLoop {
14
- ticketId;
15
- columnId;
16
- config;
17
- deps;
18
- stopped = false;
19
- currentIteration = 0;
20
- constructor(ticketId, columnId, config, deps) {
21
- this.ticketId = ticketId;
22
- this.columnId = columnId;
23
- this.config = config;
24
- this.deps = deps;
25
- }
26
- stop() {
27
- this.stopped = true;
28
- }
29
- get iteration() {
30
- return this.currentIteration;
31
- }
32
- looksLike404(err) {
33
- const statusCode = err?.statusCode
34
- ?? err?.status;
35
- if (statusCode === 404)
36
- return true;
37
- const message = err instanceof Error ? err.message : String(err);
38
- return message.includes('API error 404');
39
- }
40
- async run() {
41
- let gutterCount = this.config.startGutterCount ?? 0;
42
- let lastFingerprint = this.config.startFingerprint ?? null;
43
- const log = this.deps.log ?? (() => { });
44
- const resolvedModel = this.config.model ?? 'default';
45
- const gateSnapshots = [];
46
- let cumulativeTokensIn = 0;
47
- let cumulativeTokensOut = 0;
48
- let cumulativeToolCalls = 0;
49
- let cumulativeDurationMs = 0;
50
- const withCosts = (r) => ({
51
- ...r,
52
- tokensIn: cumulativeTokensIn,
53
- tokensOut: cumulativeTokensOut,
54
- toolCallCount: cumulativeToolCalls,
55
- durationMs: cumulativeDurationMs,
56
- });
57
- let lastOutput = '';
58
- const startIter = this.config.startIteration ?? 1;
59
- for (let i = startIter; i <= this.config.maxIterations; i++) {
60
- if (this.stopped)
61
- return withCosts({ reason: 'stopped', iterations: i - 1, gutterCount, model: resolvedModel });
62
- this.currentIteration = i;
63
- log(`Iteration ${i}/${this.config.maxIterations} starting`);
64
- // Capture baseline fingerprint on first iteration
65
- if (!lastFingerprint) {
66
- try {
67
- lastFingerprint = await withTimeout(this.deps.fetchFingerprint(this.ticketId), API_TIMEOUT_MS, 'fetchFingerprint (baseline)');
68
- }
69
- catch (err) {
70
- const message = err instanceof Error ? err.message : String(err);
71
- log(`Baseline fingerprint fetch failed: ${message}`);
72
- if (this.looksLike404(err)) {
73
- return withCosts({ reason: 'deleted', iterations: i, gutterCount, model: resolvedModel });
74
- }
75
- return withCosts({ reason: 'error', iterations: i, gutterCount, lastError: `Baseline fingerprint failed: ${message}`, model: resolvedModel });
76
- }
77
- }
78
- // Fetch ticket and column context for this iteration
79
- let ticketCtx;
80
- let columnCtx;
81
- try {
82
- [ticketCtx, columnCtx] = await Promise.all([
83
- withTimeout(this.deps.fetchTicketContext(this.ticketId), API_TIMEOUT_MS, 'fetchTicketContext'),
84
- withTimeout(this.deps.fetchColumnContext(this.columnId), API_TIMEOUT_MS, 'fetchColumnContext'),
85
- ]);
86
- }
87
- catch (err) {
88
- const message = err instanceof Error ? err.message : String(err);
89
- log(`Context fetch failed: ${message}`);
90
- if (this.looksLike404(err)) {
91
- return withCosts({ reason: 'deleted', iterations: i, gutterCount, model: resolvedModel });
92
- }
93
- return withCosts({ reason: 'error', iterations: i, gutterCount, lastError: `Context fetch failed: ${message}`, model: resolvedModel });
94
- }
95
- // Pre-flight column check — bail if ticket already moved
96
- if (ticketCtx.ticket.column && ticketCtx.ticket.column.id !== this.columnId) {
97
- log(`Ticket already in column ${ticketCtx.ticket.column.name}, not ${this.columnId} — exiting as moved`);
98
- return withCosts({ reason: 'moved', iterations: i - 1, gutterCount, model: resolvedModel });
99
- }
100
- // Fetch run memory and lookahead enrichments — non-blocking, failures are silenced
101
- const runMemoryContent = this.deps.fetchRunMemoryContent
102
- ? await this.deps.fetchRunMemoryContent().catch(() => '')
103
- : undefined;
104
- const lookaheadDocument = this.deps.fetchLookaheadDocument
105
- ? await this.deps.fetchLookaheadDocument().catch(() => undefined)
106
- : undefined;
107
- // Compose prompt from column context, ticket context, and enrichments
108
- let prompt;
109
- try {
110
- prompt = composePrompt(columnCtx, ticketCtx, {
111
- iteration: i,
112
- maxIterations: this.config.maxIterations,
113
- projectId: this.deps.projectId,
114
- gutterCount,
115
- gutterThreshold: this.config.gutterThreshold,
116
- runMemoryContent: runMemoryContent || undefined,
117
- lookaheadDocument,
118
- });
119
- }
120
- catch (err) {
121
- const message = err instanceof Error ? err.message : String(err);
122
- log(`Prompt composition failed: ${message}`);
123
- return withCosts({ reason: 'error', iterations: i, gutterCount, lastError: `Prompt composition failed: ${message}`, model: resolvedModel });
124
- }
125
- // Invoke Claude with the composed prompt
126
- if (this.stopped)
127
- return withCosts({ reason: 'stopped', iterations: i - 1, gutterCount, model: resolvedModel });
128
- log(`Invoking Claude (model=${this.config.model ?? 'default'})`);
129
- const iterationRunId = `${this.config.runId ?? this.ticketId}-iter-${String(i)}`;
130
- const iterationStart = Date.now();
131
- this.deps.onSessionStart?.({
132
- runId: iterationRunId,
133
- model: this.config.model ?? 'default',
134
- iteration: i,
135
- });
136
- const streamContext = { runId: iterationRunId, ticketId: this.ticketId, columnId: this.columnId };
137
- const { exitCode, output, toolCallCount, tokensIn, tokensOut } = await this.deps.invokeClaudeP(prompt, {
138
- mcpConfigPath: this.deps.mcpConfigPath,
139
- model: this.config.model,
140
- maxBudgetUsd: this.config.maxBudgetUsd,
141
- worktree: this.config.worktreeName,
142
- onStreamEvent: (event) => this.deps.onStreamEvent?.(event, streamContext),
143
- // Tool scoping
144
- ...(this.config.toolRestrictions && {
145
- tools: this.config.toolRestrictions.tools,
146
- allowedTools: this.config.toolRestrictions.allowedTools,
147
- disallowedTools: this.config.toolRestrictions.disallowedTools,
148
- includeMcpConfig: this.config.toolRestrictions.includeMcpConfig,
149
- }),
150
- });
151
- const iterationDurationMs = Date.now() - iterationStart;
152
- cumulativeTokensIn += tokensIn;
153
- cumulativeTokensOut += tokensOut;
154
- cumulativeToolCalls += toolCallCount;
155
- cumulativeDurationMs += iterationDurationMs;
156
- this.deps.onSessionEnd?.({
157
- runId: iterationRunId,
158
- exitCode,
159
- tokensIn,
160
- tokensOut,
161
- toolCallCount,
162
- durationMs: iterationDurationMs,
163
- });
164
- if (exitCode !== 0) {
165
- const snippet = output.slice(-200);
166
- log(`Claude exited with code ${exitCode}: ${snippet}`);
167
- return withCosts({ reason: 'error', iterations: i, gutterCount, lastError: `non-zero exit code: ${exitCode}. Last output: ${snippet}`, model: resolvedModel });
168
- }
169
- log(`Claude exited successfully`);
170
- lastOutput = output;
171
- // Post-iteration fingerprint check — detect if ticket moved out of column
172
- let afterFp;
173
- try {
174
- const retryDelayMs = this.config.postMoveRetryDelayMs ?? 1500;
175
- afterFp = await withTimeout(this.deps.fetchFingerprint(this.ticketId), API_TIMEOUT_MS, 'fetchFingerprint (post-iteration)');
176
- if (afterFp.column_id === this.columnId) {
177
- for (let retry = 0; retry < 2; retry++) {
178
- await new Promise((r) => setTimeout(r, retryDelayMs));
179
- if (this.stopped)
180
- break; // Honor stop during retry delay
181
- try {
182
- afterFp = await withTimeout(this.deps.fetchFingerprint(this.ticketId), API_TIMEOUT_MS, 'fetchFingerprint (retry)');
183
- }
184
- catch (err) {
185
- log(`Fingerprint retry ${retry + 1} failed: ${err instanceof Error ? err.message : String(err)} — using last good value`);
186
- break; // retry fingerprint failed — use last good value
187
- }
188
- if (afterFp.column_id !== this.columnId)
189
- break;
190
- }
191
- }
192
- }
193
- catch (err) {
194
- const message = err instanceof Error ? err.message : String(err);
195
- log(`Post-iteration fingerprint failed: ${message}`);
196
- if (this.looksLike404(err)) {
197
- return withCosts({ reason: 'deleted', iterations: i, gutterCount, model: resolvedModel });
198
- }
199
- return withCosts({ reason: 'error', iterations: i, gutterCount, lastError: `Post-iteration fingerprint failed: ${message}`, model: resolvedModel });
200
- }
201
- // Did ticket move?
202
- if (afterFp.column_id !== this.columnId) {
203
- log(`Ticket moved to column ${afterFp.column_id ?? 'null'}`);
204
- return withCosts({ reason: 'moved', iterations: i, gutterCount, model: resolvedModel, output: lastOutput });
205
- }
206
- // Gate-based gutter detection (preferred) or fingerprint fallback
207
- if (this.config.onPostIterationGates) {
208
- try {
209
- const snapshot = await this.config.onPostIterationGates(this.ticketId, i);
210
- gateSnapshots.push(snapshot);
211
- // Also check if any field values changed (complementary signal)
212
- const fieldDelta = lastFingerprint ? afterFp.field_value_count !== lastFingerprint.field_value_count : false;
213
- switch (snapshot.delta_from_previous) {
214
- case 'improved':
215
- if (gutterCount > 0)
216
- log(`Gate improvement detected — gutter counter reset`);
217
- gutterCount = 0;
218
- break;
219
- case 'same':
220
- if (!fieldDelta) {
221
- gutterCount++;
222
- log(`No gate progress (gutter ${gutterCount}/${this.config.gutterThreshold})`);
223
- }
224
- else {
225
- log(`Gates unchanged but fields changed — not incrementing gutter`);
226
- }
227
- break;
228
- case 'regressed':
229
- gutterCount += 2;
230
- log(`Gate regression detected (gutter ${gutterCount}/${this.config.gutterThreshold})`);
231
- break;
232
- case 'first_check':
233
- // First check — no delta info yet, don't adjust gutter
234
- break;
235
- }
236
- }
237
- catch (err) {
238
- const message = err instanceof Error ? err.message : String(err);
239
- log(`Post-iteration gate check failed (non-blocking): ${message}`);
240
- // Fall back to fingerprint gutter on gate failure
241
- if (lastFingerprint && fingerprintsMatch(lastFingerprint, afterFp)) {
242
- gutterCount++;
243
- log(`No progress detected via fingerprint fallback (gutter ${gutterCount}/${this.config.gutterThreshold})`);
244
- }
245
- else {
246
- if (gutterCount > 0)
247
- log(`Progress detected — gutter counter reset`);
248
- gutterCount = 0;
249
- }
250
- }
251
- }
252
- else {
253
- // Original fingerprint-based gutter detection
254
- if (lastFingerprint && fingerprintsMatch(lastFingerprint, afterFp)) {
255
- gutterCount++;
256
- log(`No progress detected (gutter ${gutterCount}/${this.config.gutterThreshold})`);
257
- }
258
- else {
259
- if (gutterCount > 0)
260
- log(`Progress detected — gutter counter reset`);
261
- gutterCount = 0;
262
- }
263
- }
264
- lastFingerprint = afterFp;
265
- // Pattern-based stuck detection — classifies trajectory as progressing/spinning/blocked
266
- if (this.config.stuckDetection && shouldCheckStuckDetection(this.config.stuckDetection, i)) {
267
- try {
268
- let sdStatus;
269
- let sdEvidence;
270
- let sdConfidence;
271
- if (gateSnapshots.length > 0) {
272
- // Deterministic classification from gate data
273
- const trajectory = classifyTrajectory(gateSnapshots);
274
- sdStatus = trajectory.status === 'regressing' ? 'spinning' : trajectory.status;
275
- sdEvidence = trajectory.evidence;
276
- sdConfidence = trajectory.confidence;
277
- log(`Gate-based stuck detection: ${sdStatus} (confidence=${String(sdConfidence)}) — ${sdEvidence}`);
278
- }
279
- else if (this.config.invokeStuckDetection) {
280
- // Legacy LLM-based classification
281
- const sdInput = {
282
- ticketNumber: ticketCtx.ticket.ticket_number,
283
- ticketTitle: ticketCtx.ticket.title,
284
- columnName: columnCtx.column.name,
285
- iteration: i,
286
- maxIterations: this.config.maxIterations,
287
- recentComments: ticketCtx.comments.slice(-3).map((c) => ({
288
- author: c.author,
289
- body: c.body,
290
- })),
291
- };
292
- const sdResult = await this.config.invokeStuckDetection(sdInput);
293
- sdStatus = sdResult.status;
294
- sdEvidence = sdResult.evidence;
295
- sdConfidence = sdResult.confidence;
296
- log(`Stuck detection: ${sdStatus} (confidence=${String(sdConfidence)}) — ${sdEvidence}`);
297
- }
298
- else {
299
- // No detection method available — skip
300
- sdStatus = 'progressing';
301
- sdEvidence = 'no detection method';
302
- sdConfidence = 0;
303
- }
304
- switch (sdStatus) {
305
- case 'progressing':
306
- if (gutterCount > 0) {
307
- log(`Stuck detection override: resetting gutter counter (was ${String(gutterCount)})`);
308
- gutterCount = 0;
309
- }
310
- break;
311
- case 'spinning':
312
- gutterCount += 2;
313
- log(`Stuck detection: spinning — gutter accelerated to ${String(gutterCount)}/${String(this.config.gutterThreshold)}`);
314
- break;
315
- case 'blocked':
316
- log(`Stuck detection: blocked — exiting immediately`);
317
- return withCosts({
318
- reason: 'stalled',
319
- iterations: i,
320
- gutterCount: this.config.gutterThreshold,
321
- model: resolvedModel,
322
- output: lastOutput,
323
- ...(gateSnapshots.length > 0 && { finalGateSnapshot: gateSnapshots[gateSnapshots.length - 1] }),
324
- });
325
- }
326
- }
327
- catch (err) {
328
- const message = err instanceof Error ? err.message : String(err);
329
- log(`Stuck detection failed (non-blocking): ${message}`);
330
- }
331
- }
332
- // Gutter threshold exit (after stuck detection may have adjusted gutterCount)
333
- if (gutterCount >= this.config.gutterThreshold) {
334
- return withCosts({
335
- reason: 'stalled',
336
- iterations: i,
337
- gutterCount,
338
- model: resolvedModel,
339
- output: lastOutput,
340
- ...(gateSnapshots.length > 0 && { finalGateSnapshot: gateSnapshots[gateSnapshots.length - 1] }),
341
- });
342
- }
343
- // Write checkpoint after iteration to allow resume on restart
344
- if (this.config.onCheckpoint) {
345
- try {
346
- await this.config.onCheckpoint(this.ticketId, {
347
- run_id: this.config.runId ?? '00000000-0000-0000-0000-000000000000',
348
- column_id: this.columnId,
349
- iteration: i,
350
- gutter_count: gutterCount,
351
- advisor_invocations: 0, // tracked by orchestrator, not loop
352
- model_tier: resolvedModel,
353
- last_fingerprint: afterFp,
354
- updated_at: new Date().toISOString(),
355
- worktree_name: this.config.worktreeName,
356
- });
357
- }
358
- catch (err) {
359
- // Checkpoint write must never block the loop
360
- log(`Checkpoint write failed (non-blocking): ${err instanceof Error ? err.message : String(err)}`);
361
- }
362
- }
363
- }
364
- return withCosts({
365
- reason: 'max_iterations',
366
- iterations: this.config.maxIterations,
367
- gutterCount,
368
- model: resolvedModel,
369
- output: lastOutput,
370
- ...(gateSnapshots.length > 0 && { finalGateSnapshot: gateSnapshots[gateSnapshots.length - 1] }),
371
- });
372
- }
373
- }
374
- function fingerprintsMatch(a, b) {
375
- // column_id change is detected separately (exits as 'moved').
376
- // signal_count is excluded because dependency-blocked agents inflate it.
377
- // comment_count IS included because agents are instructed to create
378
- // iteration summary comments — genuine new comments indicate progress.
379
- return a.column_id === b.column_id
380
- && a.field_value_count === b.field_value_count
381
- && a.comment_count === b.comment_count;
382
- }
383
- //# sourceMappingURL=ralph-loop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ralph-loop.js","sourceRoot":"","sources":["../../src/lib/ralph-loop.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { ChildProcess } from 'node:child_process';
2
- export declare const REAPER_POLL_MS = 3000;
3
- export interface ReaperConfig {
4
- orchestratorPid: number;
5
- manifestPath: string;
6
- pidFilePath: string;
7
- reaperPidPath: string;
8
- mcpConfigPath: string;
9
- pipelineDir: string;
10
- }
11
- export declare function buildReaperScript(config: ReaperConfig): string;
12
- export declare function spawnReaper(config: ReaperConfig): ChildProcess;
13
- export declare function killReaper(reaperPidPath: string): void;
14
- //# sourceMappingURL=reaper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reaper.d.ts","sourceRoot":"","sources":["../../src/lib/reaper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAgF9D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAe9D;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAiBtD"}
@@ -1,114 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { writeFileSync, unlinkSync, readFileSync } from 'node:fs';
3
- export const REAPER_POLL_MS = 3000;
4
- export function buildReaperScript(config) {
5
- return `
6
- const fs = require('fs');
7
- const path = require('path');
8
-
9
- const ORCHESTRATOR_PID = ${config.orchestratorPid};
10
- const MANIFEST_PATH = ${JSON.stringify(config.manifestPath)};
11
- const PID_FILE_PATH = ${JSON.stringify(config.pidFilePath)};
12
- const REAPER_PID_PATH = ${JSON.stringify(config.reaperPidPath)};
13
- const MCP_CONFIG_PATH = ${JSON.stringify(config.mcpConfigPath)};
14
- const PIPELINE_DIR = ${JSON.stringify(config.pipelineDir)};
15
- const POLL_MS = ${REAPER_POLL_MS};
16
-
17
- function isAlive(pid) {
18
- try { process.kill(pid, 0); return true; } catch { return false; }
19
- }
20
-
21
- function readManifest() {
22
- try {
23
- return fs.readFileSync(MANIFEST_PATH, 'utf-8')
24
- .split('\\n')
25
- .map(l => parseInt(l.trim(), 10))
26
- .filter(p => !isNaN(p) && p > 0);
27
- } catch { return []; }
28
- }
29
-
30
- function killPid(pid, signal) {
31
- try { process.kill(pid, signal); } catch { /* already dead */ }
32
- }
33
-
34
- function cleanup() {
35
- const pids = readManifest();
36
- for (const pid of pids) {
37
- killPid(pid, 'SIGTERM');
38
- try { process.kill(-pid, 'SIGTERM'); } catch { /* ignore */ }
39
- }
40
-
41
- setTimeout(() => {
42
- for (const pid of pids) {
43
- if (isAlive(pid)) {
44
- killPid(pid, 'SIGKILL');
45
- try { process.kill(-pid, 'SIGKILL'); } catch { /* ignore */ }
46
- }
47
- }
48
-
49
- try { fs.unlinkSync(MANIFEST_PATH); } catch {}
50
- try { fs.unlinkSync(PID_FILE_PATH); } catch {}
51
- try { fs.unlinkSync(REAPER_PID_PATH); } catch {}
52
- try { fs.unlinkSync(MCP_CONFIG_PATH); } catch {}
53
-
54
- try {
55
- const files = fs.readdirSync(PIPELINE_DIR);
56
- for (const f of files) {
57
- if (f.startsWith('mcp-config-') && f.endsWith('.json')) {
58
- try { fs.unlinkSync(path.join(PIPELINE_DIR, f)); } catch {}
59
- }
60
- }
61
- } catch {}
62
-
63
- process.exit(0);
64
- }, 5000);
65
- }
66
-
67
- function pidFileExists() {
68
- try { fs.accessSync(PID_FILE_PATH); return true; } catch { return false; }
69
- }
70
-
71
- const timer = setInterval(() => {
72
- if (!pidFileExists()) {
73
- clearInterval(timer);
74
- process.exit(0);
75
- return;
76
- }
77
-
78
- if (!isAlive(ORCHESTRATOR_PID)) {
79
- clearInterval(timer);
80
- cleanup();
81
- }
82
- }, POLL_MS);
83
- `;
84
- }
85
- export function spawnReaper(config) {
86
- const script = buildReaperScript(config);
87
- const child = spawn(process.execPath, ['-e', script], {
88
- detached: true,
89
- stdio: 'ignore',
90
- });
91
- child.unref();
92
- if (child.pid) {
93
- writeFileSync(config.reaperPidPath, String(child.pid), { mode: 0o600 });
94
- }
95
- return child;
96
- }
97
- export function killReaper(reaperPidPath) {
98
- try {
99
- const pid = parseInt(readFileSync(reaperPidPath, 'utf-8').trim(), 10);
100
- if (pid && !isNaN(pid)) {
101
- process.kill(pid, 'SIGTERM');
102
- }
103
- }
104
- catch {
105
- /* reaper already dead or PID file gone */
106
- }
107
- try {
108
- unlinkSync(reaperPidPath);
109
- }
110
- catch {
111
- /* already removed */
112
- }
113
- }
114
- //# sourceMappingURL=reaper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reaper.js","sourceRoot":"","sources":["../../src/lib/reaper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGlE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAWnC,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,OAAO;;;;2BAIkB,MAAM,CAAC,eAAe;wBACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;wBACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;0BAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;0BACpC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;uBACvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;kBACvC,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoE/B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;QACpD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,aAAqB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAClB,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAC3C,EAAE,CACH,CAAC;QACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,IAAI,CAAC;QACH,UAAU,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;AACH,CAAC"}
@@ -1,49 +0,0 @@
1
- import { z } from 'zod';
2
- export interface ReplannerTriggers {
3
- escalation_count: number;
4
- cost_threshold_pct: number;
5
- repeated_gate_failure_count: number;
6
- duration_threshold_minutes: number;
7
- }
8
- export interface PipelineState {
9
- escalatedTickets: number;
10
- totalTokensIn: number;
11
- maxInputTokens: number;
12
- repeatedGateFailures: Record<string, number>;
13
- durationMinutes: number;
14
- }
15
- export declare function shouldFireReplanner(triggers: ReplannerTriggers, state: PipelineState): boolean;
16
- declare const ReplannerResponseSchema: z.ZodObject<{
17
- action: z.ZodEnum<["CONTINUE", "PAUSE_PIPELINE", "ARCHIVE_TICKETS", "CREATE_SIGNAL", "ADJUST_BUDGET", "ESCALATE_ALL"]>;
18
- reason: z.ZodString;
19
- ticket_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
20
- signal_content: z.ZodOptional<z.ZodString>;
21
- new_max_input_tokens: z.ZodOptional<z.ZodNumber>;
22
- }, "strip", z.ZodTypeAny, {
23
- action: "CONTINUE" | "PAUSE_PIPELINE" | "ARCHIVE_TICKETS" | "CREATE_SIGNAL" | "ADJUST_BUDGET" | "ESCALATE_ALL";
24
- reason: string;
25
- ticket_ids?: string[] | undefined;
26
- signal_content?: string | undefined;
27
- new_max_input_tokens?: number | undefined;
28
- }, {
29
- action: "CONTINUE" | "PAUSE_PIPELINE" | "ARCHIVE_TICKETS" | "CREATE_SIGNAL" | "ADJUST_BUDGET" | "ESCALATE_ALL";
30
- reason: string;
31
- ticket_ids?: string[] | undefined;
32
- signal_content?: string | undefined;
33
- new_max_input_tokens?: number | undefined;
34
- }>;
35
- export type ReplannerResponse = z.infer<typeof ReplannerResponseSchema>;
36
- export declare function composeReplannerPrompt(state: PipelineState & {
37
- ticketSummaries: Array<{
38
- id: string;
39
- title: string;
40
- column: string;
41
- status: string;
42
- iterations: number;
43
- gatePassRate: number;
44
- }>;
45
- triggerReason: string;
46
- }): string;
47
- export declare function parseReplannerResponse(raw: string): ReplannerResponse;
48
- export {};
49
- //# sourceMappingURL=replanner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replanner.d.ts","sourceRoot":"","sources":["../../src/lib/replanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IACpC,0BAA0B,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAW9F;AAMD,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG;IAC5D,eAAe,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChI,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CA0BT;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAOrE"}