@bluewombat/implementer 0.1.2 → 0.3.0

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.
package/SPECS.md CHANGED
@@ -39,24 +39,24 @@ wait for the listener to acknowledge. It does not write files.
39
39
  Implementer is invoked with arguments. It does not read an input file. It does
40
40
  not read configuration from the workspace.
41
41
 
42
- | Argument | Content |
43
- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
44
- | `--id` | Task id. Copied onto every Trace. |
45
- | `--intention` | Passed through to Builder and Gates. Implementer does not interpret it. |
46
- | `--definition-of-done` | Passed through to Builder and Gates. Implementer does not evaluate it. |
47
- | `--workspace` | Absolute path. Must already exist. Working directory of Builder and Gates. The only directory this process treats as files. |
48
- | `--builder -- <argv…>` | Builder command. Non-empty. **May be omitted**: an Attempt is then its Gate sequence alone, and nothing is produced. |
49
- | `--builder-timeout-ms` | Positive integer. **Required.** Wall clock of one producer run. Nothing else bounds it. |
50
- | `--repair-builder -- <argv…>` | Optional producer for a pass that has something to resolve. Needs a `--builder` to fall back to. |
51
- | `--repair-builder-timeout-ms` | Optional. Wall clock of that producer. Absent: `--builder-timeout-ms`. |
52
- | `--gate <id> -- <argv…>` | One Gate. Repeatable; order is the sequence. **May be omitted** (empty sequence). Each `id` unique. Command non-empty. |
53
- | `--gate-timeout-ms` | Positive integer. **Required before each `--gate`.** Wall clock of that Gate. |
54
- | `--max-attempts` | Positive integer. Attempts this invocation may start. |
55
- | `--report` | Optional. Failure report passed to the producer on Attempt 1 (and kept for retries). |
56
- | `--report-from` | Optional. Which Gate produced `--report`, when a Gate did. |
57
- | `--context` | Optional. Larger piece of work this Task belongs to, passed through to the producer. |
58
- | `--stage` | Optional. `unit` or `assembly`. Passed to Gates. Absent: Gates receive `unit`. |
59
- | `--on-status -- <argv…>` | Optional. Command to run each time Status changes. Omitted: Status still goes to stdout. |
42
+ | Argument | Content |
43
+ | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
44
+ | `--id` | Task id. Copied onto every Trace. |
45
+ | `--intention` | Passed through to Builder and Gates. Implementer does not interpret it. |
46
+ | `--definition-of-done` | Passed through to Builder and Gates. Implementer does not evaluate it. |
47
+ | `--workspace` | Absolute path. Must already exist. Working directory of Builder and Gates. The only directory this process treats as files. |
48
+ | `--builder -- <argv…>` | Builder command. Non-empty. **May be omitted**: an Attempt is then its Gate sequence alone, and nothing is produced. |
49
+ | `--builder-timeout-ms` | Positive integer. **Required.** Wall clock of one producer run. Nothing else bounds it. |
50
+ | `--repair-builder -- <argv…>` | Optional producer for a pass that has something to resolve. Needs a `--builder` to fall back to. |
51
+ | `--repair-builder-timeout-ms` | Optional. Wall clock of that producer. Absent: `--builder-timeout-ms`. |
52
+ | `--gate <id> -- <argv…>` | One Gate. Repeatable; order is the sequence. **May be omitted** (empty sequence). Each `id` unique. Command non-empty. |
53
+ | `--gate-timeout-ms` | Positive integer. **Required before each `--gate`.** Wall clock of that Gate. |
54
+ | `--max-attempts` | Positive integer. Attempts this invocation may start. |
55
+ | `--report` | Optional. Failure report passed to the producer on Attempt 1 (and kept for retries). |
56
+ | `--report-from` | Optional. Which Gate produced `--report`, when a Gate did. |
57
+ | `--context` | Optional. Larger piece of work this Task belongs to. Passed through to the producer, and named as `key` on every progress line. |
58
+ | `--stage` | Optional. `unit` or `assembly`. Passed to Gates. Absent: Gates receive `unit`. |
59
+ | `--on-status -- <argv…>` | Optional. Command to run each time Status changes. Omitted: Status still goes to stdout. |
60
60
 
61
61
  No other argument is read.
62
62
 
@@ -149,15 +149,15 @@ Working directory: `--workspace`. Implementer appends arguments to the Builder
149
149
  command. It sets no extra environment variables of its own (the process still
150
150
  inherits the environment).
151
151
 
152
- | Argument | Content |
153
- | ---------------------- | ----------------------------------------------------------------------------------------------------- |
154
- | `--id` | Task id |
155
- | `--attempt` | Attempt number, decimal |
156
- | `--intention` | The `--intention` given to Implementer |
157
- | `--definition-of-done` | The `--definition-of-done` given to Implementer |
152
+ | Argument | Content |
153
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
154
+ | `--id` | Task id |
155
+ | `--attempt` | Attempt number, decimal |
156
+ | `--intention` | The `--intention` given to Implementer |
157
+ | `--definition-of-done` | The `--definition-of-done` given to Implementer |
158
158
  | `--report` | Previous Attempt's failure report (JSON `report` from that child's stdout), or `--report` given to Implementer. **Omitted** when neither exists. |
159
- | `--report-from` | Present when a Gate produced that report. |
160
- | `--context` | Present when `--context` was given to Implementer. |
159
+ | `--report-from` | Present when a Gate produced that report. |
160
+ | `--context` | Present when `--context` was given to Implementer. |
161
161
 
162
162
  Exit 0: the Builder finished its pass. Implementer does not inspect the
163
163
  workspace.
@@ -167,10 +167,10 @@ workspace.
167
167
  | Exit 0 | completed; run Gates | — |
168
168
  | Stdout is JSON `{ "outcome": "fail-blocking", "report": "..." }` | `fail-blocking` | that `report` |
169
169
  | Stdout is JSON `{ "outcome": "fail-retryable", "report": "..." }` | `fail-retryable` | that `report` |
170
- | Non-zero exit, no such JSON | `fail-retryable` | the end of stdout and stderr (8 KiB) |
171
- | Killed by a clock | `fail-retryable` | which clock |
172
- | Stop signal | `interrupted` | none |
173
- | Cannot spawn (not found, not executable) | `fail-blocking` | why |
170
+ | Non-zero exit, no such JSON | `fail-retryable` | the end of stdout and stderr (8 KiB) |
171
+ | Killed by a clock | `fail-retryable` | which clock, then what the child wrote |
172
+ | Stop signal | `interrupted` | none |
173
+ | Cannot spawn (not found, not executable) | `fail-blocking` | why |
174
174
 
175
175
  `outcome` on that optional JSON is only `fail-retryable` or `fail-blocking`.
176
176
  Exit 0 is completion; there is no `pass` object. Other fields are ignored.
@@ -187,13 +187,13 @@ passed it.
187
187
  Working directory: `--workspace`. Implementer appends arguments to the Gate
188
188
  command. No `--report`: the Gate judges the workspace.
189
189
 
190
- | Argument | Content |
191
- | ---------------------- | ----------------------- |
192
- | `--id` | Task id |
193
- | `--attempt` | Attempt number, decimal |
194
- | `--gate-id` | This Gate's `id` |
195
- | `--intention` | Same as the Builder |
196
- | `--definition-of-done` | Same as the Builder |
190
+ | Argument | Content |
191
+ | ---------------------- | ------------------------------------- |
192
+ | `--id` | Task id |
193
+ | `--attempt` | Attempt number, decimal |
194
+ | `--gate-id` | This Gate's `id` |
195
+ | `--intention` | Same as the Builder |
196
+ | `--definition-of-done` | Same as the Builder |
197
197
  | `--stage` | `unit` or `assembly` (default `unit`) |
198
198
 
199
199
  Stdout: one JSON object.
@@ -211,13 +211,13 @@ Stdout: one JSON object.
211
211
  | `fail-retryable` | Stop the sequence. New Attempt if budget remains; next Builder gets `--report` with this `report`. |
212
212
  | `fail-blocking` | Stop the sequence. Escalate. No further Attempt. |
213
213
 
214
- | What happened | Verdict used |
215
- | --------------------------------- | ------------------------------------------------------------ |
216
- | Valid JSON with a known `verdict` | that verdict; `report` as given (empty on `pass` if omitted) |
217
- | Stdout is not that JSON | `fail-blocking` |
218
- | Cannot spawn | `fail-blocking` |
219
- | Killed by a clock | `fail-retryable`, report names the clock |
220
- | Stop signal | Attempt `interrupted` |
214
+ | What happened | Verdict used |
215
+ | --------------------------------- | -------------------------------------------------------------- |
216
+ | Valid JSON with a known `verdict` | that verdict; `report` as given (empty on `pass` if omitted) |
217
+ | Stdout is not that JSON | `fail-blocking`, and the report ends with what the child wrote |
218
+ | Cannot spawn | `fail-blocking` |
219
+ | Killed by a clock | `fail-retryable`, report names the clock, then what it wrote |
220
+ | Stop signal | Attempt `interrupted` |
221
221
 
222
222
  A Gate that cannot return a verdict on the work returns `fail-blocking`. If it
223
223
  must wait on something, it waits inside its own process until it can return
@@ -314,7 +314,25 @@ lines rebuild the Trace.
314
314
  | `run-finished` | Run outcome is known |
315
315
 
316
316
  Each line carries `task_id`, `attempt` when an Attempt exists, and enough
317
- to rebuild the Trace without reading the workspace.
317
+ to rebuild the Trace without reading the workspace. When `--context` was given,
318
+ every line — `status` included — also carries it as `key`: a Task id names the
319
+ unit of work and not the feature it serves, and a reader holding `s1` alone
320
+ cannot say which feature that was. Nothing is invented: no `--context`, no `key`.
321
+
322
+ ### Filming a child
323
+
324
+ A caller may hand `runImplementer` an `onChild`. It is asked once per child
325
+ about to run — the producer, then each Gate — and answers a sink, or nothing to
326
+ leave that child unfilmed. Implementer opens no file and knows nothing of where
327
+ a sink writes.
328
+
329
+ A sink is opened after the child is running and closed exactly once, on every
330
+ way out: exited, timed out, interrupted, or killed for writing past the output
331
+ bound. Chunks reach it before that bound is applied — the bound protects this
332
+ process's memory, and a child killed for saying too much is the one whose words
333
+ are worth keeping. Nothing a sink does changes a run's outcome; the default is
334
+ no sink at all, and a child's output then leaves Implementer as it always has:
335
+ a verdict, or the tail of a crash.
318
336
 
319
337
  Implementer creates no file under `--workspace`. The Builder (and Gates, if
320
338
  they must) may write there — that is the work. Implementer deletes nothing
@@ -324,12 +342,12 @@ there.
324
342
 
325
343
  Exactly one per invocation. The meaning is entirely inside this process.
326
344
 
327
- | Outcome | Meaning |
328
- | -------------------- | --------------------------------------------------------------------------------- |
329
- | `invalid-invocation` | Arguments or workspace unusable. No Attempt. |
330
- | `validated` | An Attempt ended `validated`. |
331
- | `escalated` | `fail-blocking`, or a retryable failure with no Attempts left. |
332
- | `interrupted` | Stop signal. |
345
+ | Outcome | Meaning |
346
+ | -------------------- | -------------------------------------------------------------- |
347
+ | `invalid-invocation` | Arguments or workspace unusable. No Attempt. |
348
+ | `validated` | An Attempt ended `validated`. |
349
+ | `escalated` | `fail-blocking`, or a retryable failure with no Attempts left. |
350
+ | `interrupted` | Stop signal. |
333
351
 
334
352
  No partial validation. Implementer never deletes `--workspace`.
335
353
 
@@ -1,4 +1,4 @@
1
- import type { BuilderResult, Invocation } from "../types.js";
1
+ import type { BuilderResult, Invocation, OpenChildSink } from "../types.js";
2
2
  export type BuilderRunResult = {
3
3
  result: BuilderResult;
4
4
  /** Report for the next Builder, if this Attempt fails retryably. */
@@ -20,5 +20,7 @@ export declare function runBuilder(input: {
20
20
  previousRefusedBy: string | undefined;
21
21
  timeoutMs: number;
22
22
  shouldInterrupt: () => boolean;
23
+ /** Whoever films this child's output. Absent: it is not filmed. */
24
+ onChild?: OpenChildSink | undefined;
23
25
  }): Promise<BuilderRunResult>;
24
26
  //# sourceMappingURL=run-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-builder.d.ts","sourceRoot":"","sources":["../../src/child/run-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,gBAAgB,GAAG,eAAe,GAAG,aAAa,CAAC;CACnE,CAAC;AAEF,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB;;;;OAIG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,OAAO,CAAC;CAChC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC5B"}
1
+ {"version":3,"file":"run-builder.d.ts","sourceRoot":"","sources":["../../src/child/run-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,gBAAgB,GAAG,eAAe,GAAG,aAAa,CAAC;CACnE,CAAC;AAEF,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB;;;;OAIG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,mEAAmE;IACnE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACrC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmD5B"}
@@ -27,6 +27,16 @@ export async function runBuilder(input) {
27
27
  cwd: invocation.workspace,
28
28
  timeoutMs,
29
29
  shouldInterrupt,
30
+ ...(input.onChild === undefined
31
+ ? {}
32
+ : {
33
+ openSink: () => input.onChild?.({
34
+ task_id: invocation.id,
35
+ ...(invocation.context === undefined ? {} : { key: invocation.context }),
36
+ attempt,
37
+ kind: "builder",
38
+ }),
39
+ }),
30
40
  });
31
41
  return interpretBuilderOutcome(outcome, timeoutMs);
32
42
  }
@@ -49,7 +59,7 @@ function interpretBuilderOutcome(outcome, timeoutMs) {
49
59
  };
50
60
  }
51
61
  if (outcome.kind === "timed_out") {
52
- const detail = `killed after ${timeoutMs}ms, its own ceiling`;
62
+ const detail = withChildWords(`killed after ${timeoutMs}ms, its own ceiling`, outcome.stdout, outcome.stderr);
53
63
  return {
54
64
  result: {
55
65
  kind: "timed_out",
@@ -89,4 +99,11 @@ function interpretBuilderOutcome(outcome, timeoutMs) {
89
99
  attemptEnded: "fail-retryable",
90
100
  };
91
101
  }
102
+ function withChildWords(sentence, stdout, stderr) {
103
+ const said = combinedOutput(stdout, stderr).trim();
104
+ if (said.length === 0) {
105
+ return sentence;
106
+ }
107
+ return `${sentence} ${said}`;
108
+ }
92
109
  //# sourceMappingURL=run-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-builder.js","sourceRoot":"","sources":["../../src/child/run-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-builder.js","sourceRoot":"","sources":["../../src/child/run-builder.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { ChildSink } from "../types.js";
1
2
  export type SpawnRequest = {
2
3
  argv: string[];
3
4
  /** Undefined lets the child inherit the caller's directory. */
@@ -8,6 +9,11 @@ export type SpawnRequest = {
8
9
  shouldInterrupt: () => boolean;
9
10
  /** Undefined lets the child inherit the caller's environment. */
10
11
  env?: NodeJS.ProcessEnv | undefined;
12
+ /**
13
+ * Opened once the child is running, closed when it settles. Absent, or
14
+ * answering nothing: its output is not filmed, which is the default.
15
+ */
16
+ openSink?: (() => ChildSink | undefined) | undefined;
11
17
  };
12
18
  export type SpawnOutcome = {
13
19
  kind: "exited";
@@ -1 +1 @@
1
- {"version":3,"file":"run-child.d.ts","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAiBN;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAsHrE;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrE"}
1
+ {"version":3,"file":"run-child.d.ts","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAa7C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAiBN;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAoIrE;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrE"}
@@ -40,11 +40,15 @@ export function runChild(request) {
40
40
  let stderr = "";
41
41
  let timer;
42
42
  let interruptPoll;
43
+ let sink;
43
44
  const finish = (outcome) => {
44
45
  if (settled) {
45
46
  return;
46
47
  }
47
48
  settled = true;
49
+ // `settled` already guards this block, so the sink is closed once on
50
+ // every path out: exited, timed out, interrupted, or over the bound.
51
+ sink?.close();
48
52
  if (timer !== undefined) {
49
53
  clearTimeout(timer);
50
54
  }
@@ -70,6 +74,9 @@ export function runChild(request) {
70
74
  finish({ kind: "spawn_error", detail: "Child stdout/stderr pipes unavailable." });
71
75
  return;
72
76
  }
77
+ // After the spawn: a child that never started has no output to film, and
78
+ // that path has already resolved.
79
+ sink = request.openSink?.();
73
80
  child.stdout.setEncoding("utf8");
74
81
  child.stderr.setEncoding("utf8");
75
82
  let overflowed = false;
@@ -84,12 +91,18 @@ export function runChild(request) {
84
91
  }
85
92
  return true;
86
93
  };
94
+ // The sink is fed before the bound, deliberately. `take` protects this
95
+ // process's memory; a sink writes elsewhere and accumulates nothing. A child
96
+ // killed for saying too much is exactly the one whose words are worth
97
+ // keeping, and cutting the film at the same place would lose them.
87
98
  child.stdout.on("data", (chunk) => {
99
+ sink?.write("stdout", chunk);
88
100
  if (take(chunk)) {
89
101
  stdout += chunk;
90
102
  }
91
103
  });
92
104
  child.stderr.on("data", (chunk) => {
105
+ sink?.write("stderr", chunk);
93
106
  if (take(chunk)) {
94
107
  stderr += chunk;
95
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-child.js","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-child.js","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { GateSpec, GateTraceEntry, Invocation } from "../types.js";
1
+ import type { GateSpec, GateTraceEntry, Invocation, OpenChildSink } from "../types.js";
2
2
  export type GateRunResult = {
3
3
  entry: GateTraceEntry;
4
4
  /** When not pass, the Attempt ends with this (or interrupted). */
@@ -10,5 +10,7 @@ export declare function runGate(input: {
10
10
  gate: GateSpec;
11
11
  timeoutMs: number;
12
12
  shouldInterrupt: () => boolean;
13
+ /** Whoever films this child's output. Absent: it is not filmed. */
14
+ onChild?: OpenChildSink | undefined;
13
15
  }): Promise<GateRunResult>;
14
16
  //# sourceMappingURL=run-gate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-gate.d.ts","sourceRoot":"","sources":["../../src/child/run-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIxE,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,kEAAkE;IAClE,IAAI,CAAC,EAAE,gBAAgB,GAAG,eAAe,GAAG,aAAa,CAAC;CAC3D,CAAC;AAEF,wBAAsB,OAAO,CAAC,KAAK,EAAE;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,OAAO,CAAC;CAChC,GAAG,OAAO,CAAC,aAAa,CAAC,CA2BzB"}
1
+ {"version":3,"file":"run-gate.d.ts","sourceRoot":"","sources":["../../src/child/run-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIvF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,kEAAkE;IAClE,IAAI,CAAC,EAAE,gBAAgB,GAAG,eAAe,GAAG,aAAa,CAAC;CAC3D,CAAC;AAEF,wBAAsB,OAAO,CAAC,KAAK,EAAE;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,mEAAmE;IACnE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACrC,GAAG,OAAO,CAAC,aAAa,CAAC,CAuCzB"}
@@ -1,5 +1,5 @@
1
1
  import { parseGateVerdictJson } from "./parse-child-output.js";
2
- import { runChild } from "./run-child.js";
2
+ import { combinedOutput, runChild } from "./run-child.js";
3
3
  export async function runGate(input) {
4
4
  const { invocation, attempt, gate, timeoutMs, shouldInterrupt } = input;
5
5
  const argv = [
@@ -22,6 +22,17 @@ export async function runGate(input) {
22
22
  cwd: invocation.workspace,
23
23
  timeoutMs,
24
24
  shouldInterrupt,
25
+ ...(input.onChild === undefined
26
+ ? {}
27
+ : {
28
+ openSink: () => input.onChild?.({
29
+ task_id: invocation.id,
30
+ ...(invocation.context === undefined ? {} : { key: invocation.context }),
31
+ attempt,
32
+ kind: "gate",
33
+ gate_id: gate.id,
34
+ }),
35
+ }),
25
36
  });
26
37
  return interpretGateOutcome(gate.id, outcome, timeoutMs);
27
38
  }
@@ -39,7 +50,7 @@ function interpretGateOutcome(gateId, outcome, timeoutMs) {
39
50
  };
40
51
  }
41
52
  if (outcome.kind === "timed_out") {
42
- const report = `killed after ${timeoutMs}ms, its own ceiling`;
53
+ const report = withChildWords(`killed after ${timeoutMs}ms, its own ceiling`, outcome.stdout, outcome.stderr);
43
54
  return {
44
55
  entry: { id: gateId, verdict: "fail-retryable", report },
45
56
  stop: "fail-retryable",
@@ -51,7 +62,7 @@ function interpretGateOutcome(gateId, outcome, timeoutMs) {
51
62
  entry: {
52
63
  id: gateId,
53
64
  verdict: "fail-blocking",
54
- report: "Gate stdout is not a JSON object with a known verdict.",
65
+ report: withChildWords("Gate stdout is not a JSON object with a known verdict.", outcome.stdout, outcome.stderr),
55
66
  },
56
67
  stop: "fail-blocking",
57
68
  };
@@ -69,4 +80,11 @@ function interpretGateOutcome(gateId, outcome, timeoutMs) {
69
80
  stop: parsed.verdict,
70
81
  };
71
82
  }
83
+ function withChildWords(sentence, stdout, stderr) {
84
+ const said = combinedOutput(stdout, stderr).trim();
85
+ if (said.length === 0) {
86
+ return sentence;
87
+ }
88
+ return `${sentence} ${said}`;
89
+ }
72
90
  //# sourceMappingURL=run-gate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-gate.js","sourceRoot":"","sources":["../../src/child/run-gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAQ7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAM7B;IACC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAExE,MAAM,IAAI,GAAG;QACX,GAAG,IAAI,CAAC,IAAI;QACZ,MAAM;QACN,UAAU,CAAC,EAAE;QACb,WAAW;QACX,MAAM,CAAC,OAAO,CAAC;QACf,WAAW;QACX,IAAI,CAAC,EAAE;QACP,aAAa;QACb,UAAU,CAAC,SAAS;QACpB,sBAAsB;QACtB,UAAU,CAAC,gBAAgB;QAC3B,SAAS;QACT,UAAU,CAAC,KAAK,IAAI,MAAM;KAC3B,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;QAC7B,IAAI;QACJ,GAAG,EAAE,UAAU,CAAC,SAAS;QACzB,SAAS;QACT,eAAe;KAChB,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAc,EACd,OAAqB,EACrB,SAAiB;IAEjB,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACvE,IAAI,EAAE,eAAe;SACtB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE;YACtE,IAAI,EAAE,aAAa;SACpB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,gBAAgB,SAAS,qBAAqB,CAAC;QAC9D,OAAO;YACL,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE;YACxD,IAAI,EAAE,gBAAgB;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE;gBACL,EAAE,EAAE,MAAM;gBACV,OAAO,EAAE,eAAe;gBACxB,MAAM,EAAE,wDAAwD;aACjE;YACD,IAAI,EAAE,eAAe;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAmB;QAC5B,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,OAAO;QACL,KAAK;QACL,IAAI,EAAE,MAAM,CAAC,OAAO;KACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-gate.js","sourceRoot":"","sources":["../../src/child/run-gate.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,17 @@
1
1
  import type { Status } from "../types.js";
2
2
  export type ProgressWriter = (line: Record<string, unknown>) => void;
3
3
  export declare function createStdoutProgressWriter(): ProgressWriter;
4
+ /**
5
+ * The same writer, naming the larger piece of work every line belongs to.
6
+ *
7
+ * A Task's id says which unit of work it is — `s1` — and a reader holding that
8
+ * alone cannot say which feature it served. Implementer is handed the answer in
9
+ * `--context` and until now spent it only on filing a transcript. Adding it
10
+ * here rather than at each of the seven emission sites keeps the two facts from
11
+ * drifting apart.
12
+ *
13
+ * No context, no field: this Transformer never invents what it was not told.
14
+ */
15
+ export declare function keyedWriter(write: ProgressWriter, key: string | undefined): ProgressWriter;
4
16
  export declare function emitStatusEvent(write: ProgressWriter, taskId: string, status: Status): void;
5
17
  //# sourceMappingURL=emit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/progress/emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAErE,wBAAgB,0BAA0B,IAAI,cAAc,CAI3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiB3F"}
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/progress/emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAErE,wBAAgB,0BAA0B,IAAI,cAAc,CAI3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAO1F;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiB3F"}
@@ -3,6 +3,25 @@ export function createStdoutProgressWriter() {
3
3
  process.stdout.write(`${JSON.stringify(line)}\n`);
4
4
  };
5
5
  }
6
+ /**
7
+ * The same writer, naming the larger piece of work every line belongs to.
8
+ *
9
+ * A Task's id says which unit of work it is — `s1` — and a reader holding that
10
+ * alone cannot say which feature it served. Implementer is handed the answer in
11
+ * `--context` and until now spent it only on filing a transcript. Adding it
12
+ * here rather than at each of the seven emission sites keeps the two facts from
13
+ * drifting apart.
14
+ *
15
+ * No context, no field: this Transformer never invents what it was not told.
16
+ */
17
+ export function keyedWriter(write, key) {
18
+ if (key === undefined) {
19
+ return write;
20
+ }
21
+ return (line) => {
22
+ write({ key, ...line });
23
+ };
24
+ }
6
25
  export function emitStatusEvent(write, taskId, status) {
7
26
  const line = {
8
27
  event: "status",
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/progress/emit.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,0BAA0B;IACxC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAqB,EAAE,MAAc,EAAE,MAAc;IACnF,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/progress/emit.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,0BAA0B;IACxC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,KAAqB,EAAE,GAAuB;IACxE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAqB,EAAE,MAAc,EAAE,MAAc;IACnF,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { ProgressWriter } from "../progress/emit.js";
2
- import type { Invocation, RunOutcome, Trace } from "../types.js";
1
+ import { type ProgressWriter } from "../progress/emit.js";
2
+ import type { Invocation, OpenChildSink, RunOutcome, Trace } from "../types.js";
3
3
  export type RunResult = {
4
4
  outcome: RunOutcome;
5
5
  traces: Trace[];
@@ -14,6 +14,13 @@ export type RunOptions = {
14
14
  };
15
15
  /** Working directory for spawned children. Undefined lets them inherit. */
16
16
  cwd?: string;
17
+ /**
18
+ * Whoever films what the producers and Gates say, as they say it.
19
+ *
20
+ * Absent — the default — nothing is filmed and a child's output leaves this
21
+ * Transformer the way it always has: one word, or the tail of a crash.
22
+ */
23
+ onChild?: OpenChildSink;
17
24
  };
18
25
  /**
19
26
  * Run one Implementer invocation to a run outcome.
@@ -1 +1 @@
1
- {"version":3,"file":"run-implementer.d.ts","sourceRoot":"","sources":["../../src/run/run-implementer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAA8B,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE7F,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE;QAAE,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACzC,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAuCF;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAQ5E;AAuPD,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,GACb,SAAS,CAqBX"}
1
+ {"version":3,"file":"run-implementer.d.ts","sourceRoot":"","sources":["../../src/run/run-implementer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,KAAK,EAGV,UAAU,EACV,aAAa,EACb,UAAU,EACV,KAAK,EACN,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE;QAAE,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACzC,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAuCF;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAc5E;AA0PD,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,GACb,SAAS,CAqBX"}
@@ -1,6 +1,7 @@
1
1
  import { runBuilder } from "../child/run-builder.js";
2
2
  import { runGate } from "../child/run-gate.js";
3
3
  import { decideAfterAttempt } from "../loop/decide-after-attempt.js";
4
+ import { keyedWriter } from "../progress/emit.js";
4
5
  import { announceStatus } from "../status/announce.js";
5
6
  import { makeStatus } from "../status/make-status.js";
6
7
  function exitCodeFor(outcome) {
@@ -40,10 +41,16 @@ function producerFor(invocation, hasReport) {
40
41
  */
41
42
  export async function runImplementer(options) {
42
43
  const { invocation } = options;
43
- const write = options.write ?? (() => { });
44
+ const write = keyedWriter(options.write ?? (() => { }), invocation.context);
44
45
  const interruptState = options.interruptFlag ?? { interrupted: false };
45
46
  const shouldInterrupt = () => interruptState.interrupted;
46
- return await runLoop({ invocation, write, shouldInterrupt, cwd: options.cwd });
47
+ return await runLoop({
48
+ invocation,
49
+ write,
50
+ shouldInterrupt,
51
+ cwd: options.cwd,
52
+ onChild: options.onChild,
53
+ });
47
54
  }
48
55
  async function runLoop(input) {
49
56
  const { invocation, write, shouldInterrupt } = input;
@@ -103,6 +110,7 @@ async function runLoop(input) {
103
110
  previousRefusedBy,
104
111
  timeoutMs: producer.timeoutMs,
105
112
  shouldInterrupt,
113
+ onChild: input.onChild,
106
114
  });
107
115
  if (invocation.builderArgv !== undefined) {
108
116
  write({
@@ -148,6 +156,7 @@ async function runLoop(input) {
148
156
  gate,
149
157
  timeoutMs: gate.timeoutMs,
150
158
  shouldInterrupt,
159
+ onChild: input.onChild,
151
160
  });
152
161
  gateEntries.push(gateRun.entry);
153
162
  write({
@@ -1 +1 @@
1
- {"version":3,"file":"run-implementer.js","sourceRoot":"","sources":["../../src/run/run-implementer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-implementer.js","sourceRoot":"","sources":["../../src/run/run-implementer.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -39,6 +39,31 @@ export type Trace = {
39
39
  gates: GateTraceEntry[];
40
40
  ended: AttemptEnded;
41
41
  };
42
+ /**
43
+ * Somewhere a child's raw output is kept as it arrives.
44
+ *
45
+ * What a child says reaches this Transformer in full and leaves it as one word:
46
+ * a verdict, or the tail of a crash. An agent that talks for two minutes is
47
+ * unreadable afterwards, and unwatchable while it runs. A sink is whoever wants
48
+ * that stream; Implementer neither opens files nor knows where it goes.
49
+ */
50
+ export type ChildSink = {
51
+ write(stream: "stdout" | "stderr", chunk: string): void;
52
+ close(): void;
53
+ };
54
+ /** Which child is about to speak, for whoever decides whether to film it. */
55
+ export type ChildAbout = {
56
+ /** The Task, from `--id`. */
57
+ task_id: string;
58
+ /** The larger piece of work it serves, from `--context`, when there is one. */
59
+ key?: string;
60
+ attempt: number;
61
+ kind: "builder" | "gate";
62
+ /** Present when `kind` is `gate`. */
63
+ gate_id?: string;
64
+ };
65
+ /** Answers a sink for one child, or nothing to leave it unfilmed. */
66
+ export type OpenChildSink = (about: ChildAbout) => ChildSink | undefined;
42
67
  export type GateSpec = {
43
68
  id: string;
44
69
  argv: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bluewombat/implementer",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Transformer: runs one Task — Builder, then Gates — until validated, escalated, or interrupted.",
6
6
  "keywords": [