@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 +69 -51
- package/dist/child/run-builder.d.ts +3 -1
- package/dist/child/run-builder.d.ts.map +1 -1
- package/dist/child/run-builder.js +18 -1
- package/dist/child/run-builder.js.map +1 -1
- package/dist/child/run-child.d.ts +6 -0
- package/dist/child/run-child.d.ts.map +1 -1
- package/dist/child/run-child.js +13 -0
- package/dist/child/run-child.js.map +1 -1
- package/dist/child/run-gate.d.ts +3 -1
- package/dist/child/run-gate.d.ts.map +1 -1
- package/dist/child/run-gate.js +21 -3
- package/dist/child/run-gate.js.map +1 -1
- package/dist/progress/emit.d.ts +12 -0
- package/dist/progress/emit.d.ts.map +1 -1
- package/dist/progress/emit.js +19 -0
- package/dist/progress/emit.js.map +1 -1
- package/dist/run/run-implementer.d.ts +9 -2
- package/dist/run/run-implementer.d.ts.map +1 -1
- package/dist/run/run-implementer.js +11 -2
- package/dist/run/run-implementer.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
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
|
|
43
|
-
|
|
|
44
|
-
| `--id`
|
|
45
|
-
| `--intention`
|
|
46
|
-
| `--definition-of-done`
|
|
47
|
-
| `--workspace`
|
|
48
|
-
| `--builder -- <argv…>`
|
|
49
|
-
| `--builder-timeout-ms`
|
|
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…>`
|
|
53
|
-
| `--gate-timeout-ms`
|
|
54
|
-
| `--max-attempts`
|
|
55
|
-
| `--report`
|
|
56
|
-
| `--report-from`
|
|
57
|
-
| `--context`
|
|
58
|
-
| `--stage`
|
|
59
|
-
| `--on-status -- <argv…>`
|
|
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;
|
|
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":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAU7E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,
|
|
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":"
|
|
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"}
|
package/dist/child/run-child.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-child.js","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"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"}
|
package/dist/child/run-gate.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/child/run-gate.js
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"run-gate.js","sourceRoot":"","sources":["../../src/child/run-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/progress/emit.d.ts
CHANGED
|
@@ -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"}
|
package/dist/progress/emit.js
CHANGED
|
@@ -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
|
|
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,
|
|
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({
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;
|
|
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[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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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"}
|