@mobrienv/autoloop-harness 0.7.4 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/acceptance.d.ts +31 -0
  2. package/dist/acceptance.js +69 -0
  3. package/dist/acceptance.js.map +1 -0
  4. package/dist/ask.d.ts +16 -0
  5. package/dist/ask.js +47 -0
  6. package/dist/ask.js.map +1 -0
  7. package/dist/backend/types.d.ts +16 -0
  8. package/dist/backend/types.js +17 -0
  9. package/dist/backend/types.js.map +1 -0
  10. package/dist/circuit-breaker.d.ts +27 -0
  11. package/dist/circuit-breaker.js +41 -0
  12. package/dist/circuit-breaker.js.map +1 -0
  13. package/dist/completion-lint.d.ts +29 -0
  14. package/dist/completion-lint.js +51 -0
  15. package/dist/completion-lint.js.map +1 -0
  16. package/dist/config-helpers.d.ts +10 -2
  17. package/dist/config-helpers.js +272 -30
  18. package/dist/config-helpers.js.map +1 -1
  19. package/dist/control/acp-adapter.d.ts +12 -0
  20. package/dist/control/acp-adapter.js +54 -0
  21. package/dist/control/acp-adapter.js.map +1 -0
  22. package/dist/control/adapter.d.ts +12 -0
  23. package/dist/control/adapter.js +2 -0
  24. package/dist/control/adapter.js.map +1 -0
  25. package/dist/control/capabilities.d.ts +9 -0
  26. package/dist/control/capabilities.js +27 -0
  27. package/dist/control/capabilities.js.map +1 -0
  28. package/dist/control/claude-sdk-adapter.d.ts +15 -0
  29. package/dist/control/claude-sdk-adapter.js +79 -0
  30. package/dist/control/claude-sdk-adapter.js.map +1 -0
  31. package/dist/control/command-adapter.d.ts +19 -0
  32. package/dist/control/command-adapter.js +57 -0
  33. package/dist/control/command-adapter.js.map +1 -0
  34. package/dist/control/dispatch.d.ts +14 -0
  35. package/dist/control/dispatch.js +55 -0
  36. package/dist/control/dispatch.js.map +1 -0
  37. package/dist/control/index.d.ts +11 -0
  38. package/dist/control/index.js +9 -0
  39. package/dist/control/index.js.map +1 -0
  40. package/dist/control/kiro-adapter.d.ts +2 -0
  41. package/dist/control/kiro-adapter.js +2 -0
  42. package/dist/control/kiro-adapter.js.map +1 -0
  43. package/dist/control/paths.d.ts +19 -0
  44. package/dist/control/paths.js +40 -0
  45. package/dist/control/paths.js.map +1 -0
  46. package/dist/control/pi-adapter.d.ts +15 -0
  47. package/dist/control/pi-adapter.js +76 -0
  48. package/dist/control/pi-adapter.js.map +1 -0
  49. package/dist/control/queue.d.ts +14 -0
  50. package/dist/control/queue.js +82 -0
  51. package/dist/control/queue.js.map +1 -0
  52. package/dist/control/render.d.ts +10 -0
  53. package/dist/control/render.js +53 -0
  54. package/dist/control/render.js.map +1 -0
  55. package/dist/control/types.d.ts +56 -0
  56. package/dist/control/types.js +9 -0
  57. package/dist/control/types.js.map +1 -0
  58. package/dist/display.d.ts +9 -2
  59. package/dist/display.js +37 -1
  60. package/dist/display.js.map +1 -1
  61. package/dist/emit.d.ts +27 -0
  62. package/dist/emit.js +327 -6
  63. package/dist/emit.js.map +1 -1
  64. package/dist/events.d.ts +36 -3
  65. package/dist/fanout-runner.d.ts +25 -0
  66. package/dist/fanout-runner.js +54 -0
  67. package/dist/fanout-runner.js.map +1 -0
  68. package/dist/file-mod-audit.d.ts +29 -0
  69. package/dist/file-mod-audit.js +63 -0
  70. package/dist/file-mod-audit.js.map +1 -0
  71. package/dist/git-diff.d.ts +19 -0
  72. package/dist/git-diff.js +74 -0
  73. package/dist/git-diff.js.map +1 -0
  74. package/dist/guards.d.ts +37 -0
  75. package/dist/guards.js +78 -0
  76. package/dist/guards.js.map +1 -0
  77. package/dist/hooks.d.ts +78 -0
  78. package/dist/hooks.js +239 -0
  79. package/dist/hooks.js.map +1 -0
  80. package/dist/index.d.ts +15 -2
  81. package/dist/index.js +359 -26
  82. package/dist/index.js.map +1 -1
  83. package/dist/intent.d.ts +45 -0
  84. package/dist/intent.js +127 -0
  85. package/dist/intent.js.map +1 -0
  86. package/dist/iteration-diff.d.ts +32 -0
  87. package/dist/iteration-diff.js +92 -0
  88. package/dist/iteration-diff.js.map +1 -0
  89. package/dist/iteration.d.ts +20 -0
  90. package/dist/iteration.js +551 -30
  91. package/dist/iteration.js.map +1 -1
  92. package/dist/metareview.d.ts +9 -1
  93. package/dist/metareview.js +158 -34
  94. package/dist/metareview.js.map +1 -1
  95. package/dist/notify.d.ts +22 -0
  96. package/dist/notify.js +110 -0
  97. package/dist/notify.js.map +1 -0
  98. package/dist/parallel.d.ts +17 -0
  99. package/dist/parallel.js +38 -6
  100. package/dist/parallel.js.map +1 -1
  101. package/dist/postconditions.d.ts +25 -0
  102. package/dist/postconditions.js +107 -0
  103. package/dist/postconditions.js.map +1 -0
  104. package/dist/postfire-verify.d.ts +31 -0
  105. package/dist/postfire-verify.js +64 -0
  106. package/dist/postfire-verify.js.map +1 -0
  107. package/dist/premature-quit.d.ts +25 -0
  108. package/dist/premature-quit.js +54 -0
  109. package/dist/premature-quit.js.map +1 -0
  110. package/dist/progress.d.ts +20 -0
  111. package/dist/progress.js +56 -0
  112. package/dist/progress.js.map +1 -0
  113. package/dist/prompt.d.ts +4 -0
  114. package/dist/prompt.js +42 -2
  115. package/dist/prompt.js.map +1 -1
  116. package/dist/provisional.d.ts +42 -0
  117. package/dist/provisional.js +92 -0
  118. package/dist/provisional.js.map +1 -0
  119. package/dist/registry-bridge.js +32 -1
  120. package/dist/registry-bridge.js.map +1 -1
  121. package/dist/resume.d.ts +61 -0
  122. package/dist/resume.js +226 -0
  123. package/dist/resume.js.map +1 -0
  124. package/dist/scratchpad.js +27 -8
  125. package/dist/scratchpad.js.map +1 -1
  126. package/dist/stage.d.ts +21 -0
  127. package/dist/stage.js +131 -0
  128. package/dist/stage.js.map +1 -0
  129. package/dist/stop.d.ts +32 -2
  130. package/dist/stop.js +169 -0
  131. package/dist/stop.js.map +1 -1
  132. package/dist/suspend-state.d.ts +32 -0
  133. package/dist/suspend-state.js +104 -0
  134. package/dist/suspend-state.js.map +1 -0
  135. package/dist/tamper.d.ts +21 -0
  136. package/dist/tamper.js +88 -0
  137. package/dist/tamper.js.map +1 -0
  138. package/dist/types.d.ts +294 -3
  139. package/dist/types.js +91 -1
  140. package/dist/types.js.map +1 -1
  141. package/dist/wave/finalize-wave.d.ts +15 -5
  142. package/dist/wave/finalize-wave.js +56 -2
  143. package/dist/wave/finalize-wave.js.map +1 -1
  144. package/dist/wave/launch-branches.d.ts +23 -2
  145. package/dist/wave/launch-branches.js +58 -3
  146. package/dist/wave/launch-branches.js.map +1 -1
  147. package/dist/wave/stage-branch-runner.d.ts +12 -0
  148. package/dist/wave/stage-branch-runner.js +130 -0
  149. package/dist/wave/stage-branch-runner.js.map +1 -0
  150. package/dist/wave/types.d.ts +40 -2
  151. package/dist/wave.d.ts +32 -1
  152. package/dist/wave.js +163 -34
  153. package/dist/wave.js.map +1 -1
  154. package/package.json +131 -3
package/dist/index.js CHANGED
@@ -1,25 +1,84 @@
1
1
  import { existsSync, unlinkSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { initAcpSession, terminateAcpSession, } from "@mobrienv/autoloop-backends/acp-client";
3
+ import { normalizeBackendLabel } from "@mobrienv/autoloop-backends";
4
+ import { terminateAcpSession } from "@mobrienv/autoloop-backends/acp-client";
5
+ import { abortClaudeSdkTurn, steerClaudeSdkTurn, terminateClaudeSdkSession, } from "@mobrienv/autoloop-backends/claude-sdk-client";
6
+ import { abortPiTurn, steerPiTurn, terminatePiSession, } from "@mobrienv/autoloop-backends/pi-rpc-client";
4
7
  import * as config from "@mobrienv/autoloop-core/config";
5
- import { readIfExists } from "@mobrienv/autoloop-core/journal";
8
+ import { quarantineJournal, readIfExists, readRunLines, } from "@mobrienv/autoloop-core/journal";
6
9
  import { cleanWorktrees, mergeWorktree, readMeta, updateStatus as updateWorktreeStatus, } from "@mobrienv/autoloop-core/worktree";
7
10
  import { applyRuntimeModeOverrides, buildLoopContext, ensureLayout, initStore, installRuntimeTools, iterationFieldForRun, reloadLoop, } from "./config-helpers.js";
8
- import { log } from "./display.js";
11
+ import { acpControlAdapter } from "./control/acp-adapter.js";
12
+ import { claudeSdkControlAdapter } from "./control/claude-sdk-adapter.js";
13
+ import { commandControlAdapter } from "./control/command-adapter.js";
14
+ import { drainControlRequests, publishCapabilities, } from "./control/dispatch.js";
15
+ import { piControlAdapter } from "./control/pi-adapter.js";
16
+ import { log, runCostUsd } from "./display.js";
9
17
  import { emit as emitCmd } from "./emit.js";
18
+ import { checkCostBudget, checkRuntimeBudget, detectStall } from "./guards.js";
19
+ import { buildHookEnv, runPhaseHooks } from "./hooks.js";
20
+ import { journalAcceptanceContract } from "./intent.js";
10
21
  import { runIteration } from "./iteration.js";
11
22
  import { maybeRunMetareview } from "./metareview.js";
23
+ import { runFinishNotification } from "./notify.js";
12
24
  import { appendLoopStart, branchStopReason, loadParallelBranchLaunch, parallelBranchBackendOverride, renderBranchResult, seedBranchContext, writeParallelBranchSummary, } from "./parallel.js";
25
+ import { countRearms, detectPrematureQuit, rearmPrematureQuit, } from "./premature-quit.js";
13
26
  import { registryStart, registryStop } from "./registry-bridge.js";
14
- import { completeLoop, stopMaxIterations } from "./stop.js";
27
+ import { completeLoop, stopCostBudget, stopMaxIterations, stopMaxRuntime, stopPrematureQuit, stopReviewUnknown, stopStalled, stopSuspended, } from "./stop.js";
28
+ import { readSuspendState, resumeRequested } from "./suspend-state.js";
29
+ export { STOP_REASONS } from "./types.js";
15
30
  export async function run(projectDir, promptOverride, selfCommand, runOptions) {
16
31
  let loop = buildLoopContext(projectDir, promptOverride, selfCommand, runOptions);
17
32
  loop.onEvent = runOptions.onEvent;
33
+ loop.signal = runOptions.signal;
18
34
  loop = initStore(loop);
19
35
  ensureLayout(loop.paths.stateDir);
36
+ // Self-heal a journal poisoned by a prior crash (torn last record) before we
37
+ // append to it — quarantine corrupt lines so they cannot wedge this run.
38
+ try {
39
+ quarantineJournal(loop.paths.journalFile);
40
+ }
41
+ catch {
42
+ /* best-effort: readLines already skips corrupt lines, so this is belt-and-suspenders */
43
+ }
20
44
  installRuntimeTools(loop);
45
+ // A durable suspend from a prior run still pending (no resume-requested
46
+ // signal dropped yet) must block a fresh `run` from starting over the same
47
+ // state dir — the operator needs to resolve it first via `autoloop resume`
48
+ // or `autoloop hooks clear-suspend`.
49
+ const pendingSuspend = readSuspendState(loop.paths.stateDir);
50
+ if (pendingSuspend && !resumeRequested(loop.paths.stateDir)) {
51
+ throw new Error(`run suspended (phase=${pendingSuspend.phase}, reason=${pendingSuspend.reason}); ` +
52
+ "resolve with `autoloop resume` or clear it with `autoloop hooks clear-suspend` before starting a new run");
53
+ }
21
54
  appendLoopStart(loop);
55
+ // Bind the acceptance contract (intent) at loop start so the deterministic
56
+ // gate keys its criteria off what was asked.
57
+ journalAcceptanceContract(loop);
58
+ const preRunResult = await runPhaseHooks(loop, "pre_run", buildHookEnv(loop));
59
+ if (preRunResult.blocked) {
60
+ throw new Error(`Aborting run: ${preRunResult.blockedMessage ?? "pre_run hook blocked"}`);
61
+ }
62
+ if (preRunResult.suspended) {
63
+ const summary = stopSuspended(loop, 0, preRunResult.blockedMessage ?? "pre_run hook suspended the run");
64
+ return summary;
65
+ }
22
66
  registryStart(loop);
67
+ loop.controlAdapter = buildControlAdapter(loop);
68
+ if (loop.controlAdapter) {
69
+ publishCapabilities(loop.paths.stateDir, loop.controlAdapter);
70
+ }
71
+ return driveLoop(loop, runOptions, 1);
72
+ }
73
+ /**
74
+ * Drive the iteration loop for an already-built, already-registered
75
+ * LoopContext, starting at `startIteration`. Owns abort/teardown wiring,
76
+ * the tracked-iterate recursion, session cleanup, post-run worktree
77
+ * lifecycle, and finish notifications. Shared by `run()` and `resume()` so
78
+ * both paths exercise identical signal handlers, stop handlers, and
79
+ * registry/journal behavior.
80
+ */
81
+ export async function driveLoop(loop, runOptions, startIteration) {
23
82
  // Track current iteration for abort handler (must be mutable)
24
83
  let currentIteration = 0;
25
84
  let aborted = false;
@@ -27,15 +86,39 @@ export async function run(projectDir, promptOverride, selfCommand, runOptions) {
27
86
  if (aborted)
28
87
  return;
29
88
  aborted = true;
30
- // Fire-and-forget ACP termination — abort handlers must stay sync.
89
+ // Fire-and-forget session termination — abort handlers must stay sync.
31
90
  // The finally block below awaits a final terminate as backstop.
32
- if (loop.kiroSession) {
33
- const session = loop.kiroSession;
34
- loop.kiroSession = undefined;
91
+ if (loop.acpSession.current) {
92
+ const session = loop.acpSession.current;
93
+ loop.acpSession.current = undefined;
35
94
  terminateAcpSession(session).catch(() => {
36
95
  /* best-effort */
37
96
  });
38
97
  }
98
+ if (loop.piSession.current) {
99
+ const session = loop.piSession.current;
100
+ loop.piSession.current = undefined;
101
+ terminatePiSession(session).catch(() => {
102
+ /* best-effort */
103
+ });
104
+ }
105
+ if (loop.claudeSdkSession.current) {
106
+ const session = loop.claudeSdkSession.current;
107
+ loop.claudeSdkSession.current = undefined;
108
+ terminateClaudeSdkSession(session).catch(() => {
109
+ /* best-effort */
110
+ });
111
+ }
112
+ if (loop.commandSession.current) {
113
+ const session = loop.commandSession.current;
114
+ loop.commandSession.current = undefined;
115
+ try {
116
+ process.kill(session.pid, "SIGTERM");
117
+ }
118
+ catch {
119
+ /* best-effort */
120
+ }
121
+ }
39
122
  try {
40
123
  registryStop(loop, currentIteration, "interrupted");
41
124
  }
@@ -70,20 +153,30 @@ export async function run(projectDir, promptOverride, selfCommand, runOptions) {
70
153
  runOptions.signal?.addEventListener("abort", onAbort);
71
154
  if (runOptions.signal?.aborted)
72
155
  teardown();
156
+ const onSigusr1 = () => {
157
+ if (!loop.controlAdapter)
158
+ return;
159
+ try {
160
+ drainControlRequests(loop.paths.stateDir, loop.controlAdapter);
161
+ }
162
+ catch {
163
+ /* best-effort */
164
+ }
165
+ };
166
+ process.on("SIGUSR1", onSigusr1);
73
167
  log(loop, "info", `loop start run_id=${loop.runtime.runId} max_iterations=${loop.limits.maxIterations}`);
74
- // Initialize kiro ACP session if backend is kiro
75
- if (loop.backend.kind === "kiro") {
76
- const acpOpts = {
77
- command: loop.backend.command,
78
- args: loop.backend.args,
79
- cwd: loop.paths.workDir,
80
- trustAllTools: loop.store.kiro_trust_all_tools !== false,
81
- agentName: loop.store.kiro_agent || undefined,
82
- modelId: loop.store.kiro_model || undefined,
83
- verbose: loop.runtime.logLevel === "debug",
84
- };
85
- loop.kiroSession = await initAcpSession(acpOpts);
86
- }
168
+ loop.onEvent?.({
169
+ type: "loop.start",
170
+ runId: loop.runtime.runId,
171
+ prompt: loop.objective,
172
+ workDir: loop.paths.workDir,
173
+ projectDir: loop.paths.projectDir,
174
+ preset: loop.launch.preset,
175
+ backend: normalizeBackendLabel(loop.backend.command),
176
+ maxIterations: loop.limits.maxIterations,
177
+ completionEvent: loop.completion.event,
178
+ completionPromise: loop.completion.promise,
179
+ });
87
180
  let summary;
88
181
  const trackedIterate = async (ctx, iter) => {
89
182
  if (aborted)
@@ -92,6 +185,9 @@ export async function run(projectDir, promptOverride, selfCommand, runOptions) {
92
185
  stopReason: "interrupted",
93
186
  runId: ctx.runtime.runId,
94
187
  };
188
+ if (iter > ctx.limits.maxIterations) {
189
+ return stopMaxIterations(ctx, iter);
190
+ }
95
191
  currentIteration = iter;
96
192
  ctx.onEvent?.({
97
193
  type: "iteration.start",
@@ -102,16 +198,59 @@ export async function run(projectDir, promptOverride, selfCommand, runOptions) {
102
198
  return iterateWith(ctx, iter, trackedIterate);
103
199
  };
104
200
  try {
105
- summary = await trackedIterate(loop, 1);
201
+ summary = await trackedIterate(loop, startIteration);
202
+ }
203
+ catch (err) {
204
+ // An unexpected throw (e.g. init/store failure outside per-iteration error
205
+ // handling) must still produce a terminal event so an external --events
206
+ // consumer always learns the run ended, instead of waiting forever for a
207
+ // loop.finish. Data already written is flushed (synchronous appends); we
208
+ // emit the terminal marker and re-raise.
209
+ loop.onEvent?.({
210
+ type: "loop.finish",
211
+ iterations: currentIteration > 0 ? currentIteration - 1 : 0,
212
+ stopReason: "error",
213
+ runId: loop.runtime.runId,
214
+ costUsd: runCostUsd(loop),
215
+ });
216
+ throw err;
106
217
  }
107
218
  finally {
108
- if (loop.kiroSession) {
219
+ if (loop.acpSession.current) {
220
+ try {
221
+ await terminateAcpSession(loop.acpSession.current);
222
+ }
223
+ catch {
224
+ /* best-effort */
225
+ }
226
+ loop.acpSession.current = undefined;
227
+ }
228
+ if (loop.piSession.current) {
229
+ try {
230
+ await terminatePiSession(loop.piSession.current);
231
+ }
232
+ catch {
233
+ /* best-effort */
234
+ }
235
+ loop.piSession.current = undefined;
236
+ }
237
+ if (loop.claudeSdkSession.current) {
238
+ try {
239
+ await terminateClaudeSdkSession(loop.claudeSdkSession.current);
240
+ }
241
+ catch {
242
+ /* best-effort */
243
+ }
244
+ loop.claudeSdkSession.current = undefined;
245
+ }
246
+ if (loop.commandSession.current) {
109
247
  try {
110
- await terminateAcpSession(loop.kiroSession);
248
+ process.kill(loop.commandSession.current.pid, "SIGTERM");
111
249
  }
112
250
  catch {
113
251
  /* best-effort */
114
252
  }
253
+ loop.commandSession.current = undefined;
115
254
  }
116
255
  runOptions.signal?.removeEventListener("abort", onAbort);
117
256
  }
@@ -173,11 +312,25 @@ export async function run(projectDir, promptOverride, selfCommand, runOptions) {
173
312
  }
174
313
  }
175
314
  }
315
+ const postRunResult = await runPhaseHooks(loop, "post_run", buildHookEnv(loop, { stopReason: summary.stopReason }));
316
+ if (postRunResult.blocked) {
317
+ throw new Error(`post_run hook failed: ${postRunResult.blockedMessage ?? "post_run hook blocked"}`);
318
+ }
319
+ runFinishNotification({
320
+ projectDir: loop.paths.mainProjectDir,
321
+ journalFile: loop.paths.journalFile,
322
+ runId: loop.runtime.runId,
323
+ preset: loop.launch.preset,
324
+ stopReason: summary.stopReason,
325
+ iterations: summary.iterations,
326
+ });
327
+ const costUsd = runCostUsd(loop);
176
328
  loop.onEvent?.({
177
329
  type: "summary",
178
330
  runId: loop.runtime.runId,
179
331
  iterations: summary.iterations,
180
332
  stopReason: summary.stopReason,
333
+ costUsd,
181
334
  journalFile: loop.paths.journalFile,
182
335
  memoryFile: loop.paths.memoryFile,
183
336
  reviewEvery: loop.review.every,
@@ -188,9 +341,11 @@ export async function run(projectDir, promptOverride, selfCommand, runOptions) {
188
341
  iterations: summary.iterations,
189
342
  stopReason: summary.stopReason,
190
343
  runId: loop.runtime.runId,
344
+ costUsd,
191
345
  });
192
346
  return { ...summary, runId: loop.runtime.runId };
193
347
  }
348
+ export { buildResumeContext, determineResumeIteration, resume, } from "./resume.js";
194
349
  export { emitCmd as emit };
195
350
  export async function runParallelBranchCli(projectDir, branchDir, selfCommand, onEvent) {
196
351
  const launch = loadParallelBranchLaunch(branchDir);
@@ -212,9 +367,54 @@ export async function runParallelBranchCli(projectDir, branchDir, selfCommand, o
212
367
  installRuntimeTools(branchLoop);
213
368
  appendLoopStart(branchLoop);
214
369
  registryStart(branchLoop);
370
+ branchLoop.controlAdapter = buildControlAdapter(branchLoop);
371
+ if (branchLoop.controlAdapter) {
372
+ publishCapabilities(branchLoop.paths.stateDir, branchLoop.controlAdapter);
373
+ }
215
374
  const seeded = seedBranchContext(branchLoop, routingEvent);
216
375
  const startMs = Date.now();
217
- const summary = await iterate(seeded, 1);
376
+ let summary;
377
+ try {
378
+ summary = await iterate(seeded, 1);
379
+ }
380
+ finally {
381
+ if (seeded.acpSession.current) {
382
+ try {
383
+ await terminateAcpSession(seeded.acpSession.current);
384
+ }
385
+ catch {
386
+ /* best-effort */
387
+ }
388
+ seeded.acpSession.current = undefined;
389
+ }
390
+ if (seeded.piSession.current) {
391
+ try {
392
+ await terminatePiSession(seeded.piSession.current);
393
+ }
394
+ catch {
395
+ /* best-effort */
396
+ }
397
+ seeded.piSession.current = undefined;
398
+ }
399
+ if (seeded.claudeSdkSession.current) {
400
+ try {
401
+ await terminateClaudeSdkSession(seeded.claudeSdkSession.current);
402
+ }
403
+ catch {
404
+ /* best-effort */
405
+ }
406
+ seeded.claudeSdkSession.current = undefined;
407
+ }
408
+ if (seeded.commandSession.current) {
409
+ try {
410
+ process.kill(seeded.commandSession.current.pid, "SIGTERM");
411
+ }
412
+ catch {
413
+ /* best-effort */
414
+ }
415
+ seeded.commandSession.current = undefined;
416
+ }
417
+ }
218
418
  const finishedMs = Date.now();
219
419
  const elapsedMs = finishedMs - startMs;
220
420
  const output = iterationFieldForRun(seeded.paths.journalFile, seeded.runtime.runId, "1", "iteration.finish", "output");
@@ -237,14 +437,30 @@ export async function runParallelBranchCli(projectDir, branchDir, selfCommand, o
237
437
  // --- Private implementation ---
238
438
  function iterateWith(loop, iteration, recurse) {
239
439
  const liveLoop = reloadLoop(loop);
240
- liveLoop.kiroSession = loop.kiroSession;
440
+ liveLoop.controlAdapter = loop.controlAdapter;
241
441
  installRuntimeTools(liveLoop);
242
442
  return runReviewThenIterate(liveLoop, iteration, recurse);
243
443
  }
244
444
  async function runReviewThenIterate(liveLoop, iteration, recurse) {
445
+ if (liveLoop.controlAdapter) {
446
+ try {
447
+ drainControlRequests(liveLoop.paths.stateDir, liveLoop.controlAdapter);
448
+ }
449
+ catch {
450
+ /* control drain is best-effort; next pass will retry */
451
+ }
452
+ }
245
453
  const reviewed = await maybeRunMetareview(liveLoop, iteration);
246
454
  const verdict = reviewed.lastVerdict;
247
455
  if (verdict) {
456
+ // Fail-closed: an UNKNOWN verdict carries no trustworthy signal. Never let
457
+ // it advance the loop like CONTINUE — route it by on_error.
458
+ if (verdict.verdict === "UNKNOWN" &&
459
+ reviewed.review.onError !== "continue") {
460
+ if (reviewed.review.onError === "exit")
461
+ return completeLoop(reviewed, iteration, "verdict_unknown");
462
+ return stopReviewUnknown(reviewed, iteration, verdict.reasoning);
463
+ }
248
464
  if (verdict.verdict === "EXIT")
249
465
  return completeLoop(reviewed, iteration, "verdict_exit");
250
466
  if (verdict.verdict === "TAKEOVER")
@@ -264,9 +480,126 @@ async function runReviewThenIterate(liveLoop, iteration, recurse) {
264
480
  if (iteration > reviewed.limits.maxIterations) {
265
481
  return stopMaxIterations(reviewed, iteration);
266
482
  }
483
+ // Guard checks between iterations: both are journal-derived so they cover
484
+ // every continue path (routed, rejected, plain) without in-memory state.
485
+ if (iteration > 1) {
486
+ const runLines = readRunLines(reviewed.paths.journalFile, reviewed.runtime.runId);
487
+ const stall = detectStall(runLines, reviewed.limits.stallIterations ?? 0);
488
+ if (stall.stalled) {
489
+ // A stall with authorized work remaining and no blocker is a premature
490
+ // quit (announce-then-halt / drift-stop), not a legitimate stop. Re-arm
491
+ // it (bounded) with a nudge, then escalate to attention if it persists.
492
+ const pq = detectPrematureQuit(reviewed, runLines);
493
+ if (pq.premature) {
494
+ if (countRearms(runLines) < (reviewed.limits.prematureMaxRearms ?? 1)) {
495
+ rearmPrematureQuit(reviewed, iteration - 1, pq);
496
+ return runIteration(reviewed, iteration, recurse);
497
+ }
498
+ return stopPrematureQuit(reviewed, iteration - 1, pq.reasons);
499
+ }
500
+ return stopStalled(reviewed, iteration - 1, stall.repeats);
501
+ }
502
+ const budget = checkCostBudget(runLines, reviewed.limits.maxCostUsd ?? 0);
503
+ if (budget.exceeded) {
504
+ return stopCostBudget(reviewed, iteration - 1, budget.costUsd, reviewed.limits.maxCostUsd ?? 0);
505
+ }
506
+ const runtime = checkRuntimeBudget(runLines, reviewed.limits.maxRuntimeMs ?? 0);
507
+ if (runtime.exceeded) {
508
+ return stopMaxRuntime(reviewed, iteration - 1, runtime.elapsedMs, reviewed.limits.maxRuntimeMs ?? 0);
509
+ }
510
+ }
267
511
  return runIteration(reviewed, iteration, recurse);
268
512
  }
269
513
  function iterate(loop, iteration) {
270
514
  return iterateWith(loop, iteration, iterate);
271
515
  }
516
+ export function buildControlAdapter(loop) {
517
+ if (loop.backend.kind === "acp") {
518
+ return acpControlAdapter(loop.runtime.runId, loop.backend.provider, {
519
+ triggerInterrupt: () => {
520
+ if (loop.acpSession.current?.process.pid) {
521
+ try {
522
+ process.kill(-loop.acpSession.current.process.pid, "SIGINT");
523
+ }
524
+ catch {
525
+ /* best-effort */
526
+ }
527
+ }
528
+ },
529
+ });
530
+ }
531
+ if (loop.backend.kind === "pi") {
532
+ return piControlAdapter(loop.runtime.runId, {
533
+ triggerInterrupt: () => {
534
+ if (loop.piSession.current) {
535
+ abortPiTurn(loop.piSession.current);
536
+ }
537
+ },
538
+ triggerSteer: (message) => {
539
+ if (loop.piSession.current) {
540
+ steerPiTurn(loop.piSession.current, message);
541
+ }
542
+ },
543
+ });
544
+ }
545
+ if (loop.backend.kind === "claude-sdk") {
546
+ return claudeSdkControlAdapter(loop.runtime.runId, {
547
+ triggerInterrupt: () => {
548
+ if (loop.claudeSdkSession.current) {
549
+ abortClaudeSdkTurn(loop.claudeSdkSession.current);
550
+ }
551
+ },
552
+ triggerSteer: (message) => {
553
+ if (loop.claudeSdkSession.current) {
554
+ steerClaudeSdkTurn(loop.claudeSdkSession.current, message);
555
+ }
556
+ },
557
+ });
558
+ }
559
+ if (loop.backend.kind === "command") {
560
+ return commandControlAdapter(loop.runtime.runId, {
561
+ triggerInterrupt: () => escalateCommandInterrupt(loop),
562
+ });
563
+ }
564
+ return undefined;
565
+ }
566
+ /**
567
+ * SIGUSR1 → grace period → SIGTERM → grace period → SIGKILL against the
568
+ * in-flight `command` iteration's child. Non-blocking (setTimeout-driven) so
569
+ * it never stalls the harness's own control-drain or iteration loop. No-op if
570
+ * no `command` iteration is currently running, or if the process has already
571
+ * exited (each `kill` call below is best-effort and independently guarded).
572
+ */
573
+ function escalateCommandInterrupt(loop, graceMs = 5000) {
574
+ const session = loop.commandSession.current;
575
+ if (!session?.pid)
576
+ return;
577
+ const stillRunning = () => loop.commandSession.current?.pid === session.pid;
578
+ try {
579
+ process.kill(session.pid, "SIGUSR1");
580
+ }
581
+ catch {
582
+ return; // already exited
583
+ }
584
+ setTimeout(() => {
585
+ if (!stillRunning())
586
+ return;
587
+ try {
588
+ process.kill(session.pid, "SIGTERM");
589
+ }
590
+ catch {
591
+ /* already exited */
592
+ }
593
+ setTimeout(() => {
594
+ if (!stillRunning())
595
+ return;
596
+ try {
597
+ process.kill(session.pid, "SIGKILL");
598
+ }
599
+ catch {
600
+ /* already exited */
601
+ }
602
+ }, graceMs);
603
+ }, graceMs);
604
+ }
272
605
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { LoopContext } from "./types.js";
2
+ export interface AcceptanceCriterion {
3
+ /** The stated criterion text (intent). */
4
+ text: string;
5
+ /** Optional deterministic shell check bound to the criterion. */
6
+ check?: string;
7
+ }
8
+ export interface IntentResult {
9
+ /** True when at least one checkable criterion was evaluated. */
10
+ ran: boolean;
11
+ /** True when every checkable criterion passed. */
12
+ passed: boolean;
13
+ failures: Array<{
14
+ text: string;
15
+ check: string;
16
+ exitCode: number;
17
+ tail: string;
18
+ }>;
19
+ }
20
+ /** Parse one criterion line into text + optional bound check. */
21
+ export declare function parseCriterion(line: string): AcceptanceCriterion;
22
+ /**
23
+ * Extract acceptance criteria from an objective's "Acceptance criteria" (or
24
+ * "Acceptance Criteria") section: the bullet/numbered lines following the
25
+ * heading, up to the next blank line or heading. Returns [] when absent.
26
+ */
27
+ export declare function parseObjectiveCriteria(objective: string): string[];
28
+ /**
29
+ * Capture the intent-binding contract at loop start: config criteria first,
30
+ * then any parsed from the objective (deduped by text). This is the bound
31
+ * record of "what was asked" the deterministic gate keys off.
32
+ */
33
+ export declare function captureAcceptanceContract(loop: LoopContext): AcceptanceCriterion[];
34
+ /** Journal the bound acceptance contract once at loop start (audit/durability). */
35
+ export declare function journalAcceptanceContract(loop: LoopContext): void;
36
+ /**
37
+ * Evaluate the intent-binding criteria at the acceptance gate. Criteria that
38
+ * bind a deterministic check (`text :: cmd`) are run HARNESS-side in the work
39
+ * dir; a non-zero exit fails acceptance so a run that passes its tests but does
40
+ * not satisfy the stated intent is still rejected. Criteria without a check are
41
+ * advisory (recorded in the contract, not a hard blocker).
42
+ */
43
+ export declare function runIntentCriteria(loop: LoopContext, iteration: number): IntentResult;
44
+ /** Re-inject failed intent criteria as operator guidance. */
45
+ export declare function reinjectIntentFailure(loop: LoopContext, iteration: number, result: IntentResult): void;