@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
@@ -0,0 +1,10 @@
1
+ import type { RunRecord } from "@mobrienv/autoloop-core/registry/types";
2
+ import type { ControlCapabilities, ControlRequest, ControlStatus } from "./types.js";
3
+ export interface ControlSnapshot {
4
+ run: RunRecord;
5
+ capabilities: ControlCapabilities | null;
6
+ pendingRequests: ControlRequest[];
7
+ recentStatuses: ControlStatus[];
8
+ }
9
+ export declare function renderShow(snap: ControlSnapshot): string;
10
+ export declare function renderCapabilities(caps: ControlCapabilities | null): string;
@@ -0,0 +1,53 @@
1
+ import { CAPABILITY_VERBS } from "./capabilities.js";
2
+ export function renderShow(snap) {
3
+ const lines = [];
4
+ lines.push(`Run: ${snap.run.run_id}`);
5
+ lines.push(`Status: ${snap.run.status}`);
6
+ lines.push(`Preset: ${snap.run.preset}`);
7
+ lines.push(`Backend: ${snap.run.backend || "(unknown)"}`);
8
+ lines.push(`Iteration: ${snap.run.iteration}`);
9
+ if (snap.run.stop_reason)
10
+ lines.push(`Stop: ${snap.run.stop_reason}`);
11
+ if (snap.run.pid)
12
+ lines.push(`PID: ${snap.run.pid}`);
13
+ lines.push("");
14
+ lines.push(renderCapabilities(snap.capabilities));
15
+ lines.push("");
16
+ lines.push("Recent control activity:");
17
+ if (snap.recentStatuses.length === 0 && snap.pendingRequests.length === 0) {
18
+ lines.push(" (none)");
19
+ }
20
+ else {
21
+ for (const r of snap.pendingRequests) {
22
+ lines.push(` pending ${r.verb.padEnd(10)} ${r.id} ${r.reason || ""}`);
23
+ }
24
+ for (const s of snap.recentStatuses.slice(-5)) {
25
+ const detail = s.detail ? ` — ${s.detail}` : "";
26
+ lines.push(` ${s.state.padEnd(8)} ${s.verb.padEnd(10)} ${s.id}${detail}`);
27
+ }
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ export function renderCapabilities(caps) {
32
+ if (!caps) {
33
+ return "Capabilities: (none published yet — run may not be live)";
34
+ }
35
+ const lines = [];
36
+ lines.push(`Capabilities (backend: ${caps.backend}):`);
37
+ for (const verb of CAPABILITY_VERBS) {
38
+ const cap = caps[verb];
39
+ const mark = cap.supported ? "yes" : "no ";
40
+ const detail = cap.detail ? ` — ${cap.detail}` : "";
41
+ lines.push(` ${verb.padEnd(10)} ${mark}${detail}`);
42
+ }
43
+ if (caps.extras) {
44
+ for (const [name, cap] of Object.entries(caps.extras)) {
45
+ const mark = cap.supported ? "yes" : "no ";
46
+ const detail = cap.detail ? ` — ${cap.detail}` : "";
47
+ lines.push(` ${name.padEnd(10)} ${mark}${detail}`);
48
+ }
49
+ }
50
+ lines.push(` published ${caps.publishedAt}`);
51
+ return lines.join("\n");
52
+ }
53
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/control/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Backend-neutral live-control types.
3
+ *
4
+ * The supervisor-facing contract. Adapters (Kiro ACP, Pi, future Claude live
5
+ * sessions) map these verbs to backend-specific behavior; the journal remains
6
+ * canonical for what actually happened.
7
+ */
8
+ export type ControlVerb = "interrupt" | "guide" | "respond";
9
+ export type CapabilityVerb = "guidance" | "interrupt" | "inspect";
10
+ export interface GuidePayload {
11
+ message: string;
12
+ /** If true, operator wants the current turn aborted so guidance is picked up now. */
13
+ interrupt: boolean;
14
+ }
15
+ export type InterruptPayload = Record<string, never>;
16
+ /**
17
+ * Answer to a blocking `human.ask`. An external supervisor (e.g. ralph relaying
18
+ * a Telegram reply) writes this to deliver the human's response to the run that
19
+ * is paused waiting on `questionId`.
20
+ */
21
+ export interface RespondPayload {
22
+ questionId: string;
23
+ answer: string;
24
+ }
25
+ export type ControlPayload = GuidePayload | InterruptPayload | RespondPayload;
26
+ export interface ControlRequest {
27
+ id: string;
28
+ runId: string;
29
+ requestedAt: string;
30
+ verb: ControlVerb;
31
+ reason: string;
32
+ payload: ControlPayload;
33
+ }
34
+ export interface ControlCapability {
35
+ supported: boolean;
36
+ detail?: string;
37
+ }
38
+ export type ControlCapabilities = Record<CapabilityVerb, ControlCapability> & {
39
+ backend: string;
40
+ publishedAt: string;
41
+ runId: string;
42
+ extras?: Record<string, ControlCapability>;
43
+ };
44
+ export type ControlStatusState = "received" | "applied" | "rejected" | "ignored";
45
+ export interface ControlStatus {
46
+ id: string;
47
+ runId: string;
48
+ verb: ControlVerb;
49
+ state: ControlStatusState;
50
+ at: string;
51
+ detail?: string;
52
+ }
53
+ export interface ControlAck {
54
+ state: ControlStatusState;
55
+ detail?: string;
56
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Backend-neutral live-control types.
3
+ *
4
+ * The supervisor-facing contract. Adapters (Kiro ACP, Pi, future Claude live
5
+ * sessions) map these verbs to backend-specific behavior; the journal remains
6
+ * canonical for what actually happened.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/control/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/dist/display.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  import type { IterationContext } from "./prompt.js";
2
- import type { LoopContext, RunSummary } from "./types.js";
2
+ import type { LoopContext, RunSummary, StopReason } from "./types.js";
3
3
  export declare function printSummary(summary: RunSummary, loop: LoopContext): void;
4
+ /**
5
+ * Cumulative run cost in USD, summed from journaled `backend.usage` events.
6
+ * Returns 0 when no usage was recorded (e.g. the `command`/`acp` backends, or a
7
+ * torn journal) so the summary always carries a parseable `cost_usd` field.
8
+ */
9
+ export declare function runCostUsd(loop: LoopContext): number;
4
10
  export declare function printIterationBanner(loop: LoopContext, iter: IterationContext): void;
5
11
  export declare function printIterationFooter(iter: IterationContext, elapsedS: number): void;
6
12
  export declare function printProgressLine(data: {
@@ -13,7 +19,8 @@ export declare function printProgressLine(data: {
13
19
  }): void;
14
20
  export declare function printReviewBanner(iteration: number): void;
15
21
  export declare function printBackendOutputTail(output: string, maxLines?: number): void;
16
- export declare function printFailureDiagnostic(output: string, stopReason: string): void;
22
+ export declare function printFailureDiagnostic(output: string, stopReason: StopReason): void;
23
+ export declare function printHookOutput(name: string, exitCode: number, output: string, failed: boolean): void;
17
24
  export declare function terminalWidth(): number;
18
25
  export declare function lastNChars(text: string, n: number): string;
19
26
  export declare function log(loop: LoopContext, level: string, message: string): void;
package/dist/display.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { execSync } from "node:child_process";
2
- import { lineSep, listText } from "@mobrienv/autoloop-core";
2
+ import { collectUsage, lineSep, listText } from "@mobrienv/autoloop-core";
3
+ import { readRunLines } from "@mobrienv/autoloop-core/journal";
3
4
  export function printSummary(summary, loop) {
4
5
  const hint = stopReasonHint(summary.stopReason);
5
6
  const lines = [
@@ -8,6 +9,7 @@ export function printSummary(summary, loop) {
8
9
  `run_id: ${loop.runtime.runId}`,
9
10
  `iterations: ${summary.iterations}`,
10
11
  `stop_reason: ${summary.stopReason}`,
12
+ `cost_usd: ${runCostUsd(loop).toFixed(6)}`,
11
13
  `journal: ${loop.paths.journalFile}`,
12
14
  `memory: ${loop.paths.memoryFile}`,
13
15
  `review_every: ${loop.review.every}`,
@@ -17,6 +19,20 @@ export function printSummary(summary, loop) {
17
19
  for (const l of lines)
18
20
  console.log(l);
19
21
  }
22
+ /**
23
+ * Cumulative run cost in USD, summed from journaled `backend.usage` events.
24
+ * Returns 0 when no usage was recorded (e.g. the `command`/`acp` backends, or a
25
+ * torn journal) so the summary always carries a parseable `cost_usd` field.
26
+ */
27
+ export function runCostUsd(loop) {
28
+ try {
29
+ const lines = readRunLines(loop.paths.journalFile, loop.runtime.runId);
30
+ return collectUsage(lines, loop.runtime.runId).totals.costUsd;
31
+ }
32
+ catch {
33
+ return 0;
34
+ }
35
+ }
20
36
  function stopReasonHint(reason) {
21
37
  switch (reason) {
22
38
  case "backend_failed":
@@ -127,6 +143,26 @@ export function printFailureDiagnostic(output, stopReason) {
127
143
  console.log(tail);
128
144
  console.log("──────────────────────────────────────");
129
145
  }
146
+ export function printHookOutput(name, exitCode, output, failed) {
147
+ const lines = output.split(lineSep());
148
+ const body = lines.slice(-15).join(lineSep());
149
+ // Silent successful hooks (no output) print nothing; failures always show.
150
+ if (!failed && !body.trim())
151
+ return;
152
+ const header = failed
153
+ ? `── hook: ${name} failed (exit ${exitCode}) ──`
154
+ : `── hook: ${name} (exit ${exitCode}) ──`;
155
+ console.log("");
156
+ console.log(header);
157
+ if (lines.length > 15) {
158
+ console.log(`… (${lines.length - 15} earlier lines in journal)`);
159
+ }
160
+ if (body.trim())
161
+ console.log(body);
162
+ if (decorativeOutputEnabled()) {
163
+ console.log("──────────────────────────────────────");
164
+ }
165
+ }
130
166
  export function terminalWidth() {
131
167
  const envWidth = parseInt(process.env.AUTOLOOP_WIDTH ?? "", 10);
132
168
  if (envWidth > 0)
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"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"}
package/dist/emit.d.ts CHANGED
@@ -11,6 +11,33 @@ export interface EmitResult {
11
11
  error?: string;
12
12
  }
13
13
  export declare function emit(projectDir: string, topic: string, payload: string): EmitResult;
14
+ /**
15
+ * Parse `payload` as a JSON object, returning its fields if (and only if) the
16
+ * whole payload is a well-formed JSON object literal. This is the ONE
17
+ * definition of "structured branch output": the evidence-gate keys check
18
+ * (`payloadEvidenceKeys`) and the fan-out stage branch runner both parse
19
+ * through this function, so "a branch emitted structured data" means the same
20
+ * thing everywhere. A branch whose payload does not parse as a JSON object
21
+ * (free prose, a bare string, an array, ...) is not structured — callers treat
22
+ * that as a dead/schema-invalid branch rather than guessing at fields.
23
+ */
24
+ export declare function parseJsonObjectPayload(payload: string): Record<string, unknown> | undefined;
25
+ /**
26
+ * Evidence keys present in a payload. A key is "present" only when it carries a
27
+ * *machine-checkable* value:
28
+ *
29
+ * - a `key=value` token (the value must immediately follow `=`), or
30
+ * - a top-level key in a JSON object payload with a non-empty scalar value.
31
+ *
32
+ * The `=` (or JSON) requirement is deliberate: a free-prose `key: value` form
33
+ * would let ordinary English that merely mentions a required word satisfy the
34
+ * gate (e.g. "tests: all green, coverage: looks good"), defeating the point of
35
+ * requiring proof. So colon-prose does NOT count — agents must emit structured
36
+ * `key=value` pairs or a JSON object. Matching is case-sensitive on the key.
37
+ */
38
+ export declare function payloadEvidenceKeys(payload: string): Set<string>;
39
+ /** Required evidence keys absent from the payload, in declaration order. */
40
+ export declare function missingEvidence(requires: string[], payload: string): string[];
14
41
  export declare function invalidEvent(emittedTopic: string, allowedEvents: string[], parallelEnabled: boolean, completionEvent: string): boolean;
15
42
  export declare function parallelDispatchBase(topic: string): string;
16
43
  export declare function parallelJoinedTopic(topic: string): string;