@relayflows/sdk 2.0.21 → 2.0.23
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/dist/agent-artifacts.d.ts +18 -9
- package/dist/agent-artifacts.d.ts.map +1 -1
- package/dist/agent-artifacts.js +27 -11
- package/dist/agent-artifacts.js.map +1 -1
- package/dist/agent-transcript.d.ts +186 -0
- package/dist/agent-transcript.d.ts.map +1 -0
- package/dist/agent-transcript.js +585 -0
- package/dist/agent-transcript.js.map +1 -0
- package/dist/authored-flow-error.d.ts +33 -1
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js +20 -1
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +4 -1
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/authored-node-entry.js +5 -1
- package/dist/authored-node-entry.js.map +1 -1
- package/dist/authored-node-runner.d.ts +11 -0
- package/dist/authored-node-runner.d.ts.map +1 -1
- package/dist/authored-node-runner.js +30 -1
- package/dist/authored-node-runner.js.map +1 -1
- package/dist/authored-root.js +3 -1
- package/dist/authored-root.js.map +1 -1
- package/dist/authored-source-authority.js +13 -0
- package/dist/authored-source-authority.js.map +1 -1
- package/dist/authored-step-index.d.ts +82 -0
- package/dist/authored-step-index.d.ts.map +1 -0
- package/dist/authored-step-index.js +120 -0
- package/dist/authored-step-index.js.map +1 -0
- package/dist/authored-step-output.d.ts +23 -2
- package/dist/authored-step-output.d.ts.map +1 -1
- package/dist/authored-step-output.js +47 -5
- package/dist/authored-step-output.js.map +1 -1
- package/dist/authored-worker-step.d.ts +10 -2
- package/dist/authored-worker-step.d.ts.map +1 -1
- package/dist/authored-worker-step.js +81 -7
- package/dist/authored-worker-step.js.map +1 -1
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +67 -12
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/cloud-read.d.ts +31 -0
- package/dist/cli/cloud-read.d.ts.map +1 -0
- package/dist/cli/cloud-read.js +482 -0
- package/dist/cli/cloud-read.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +53 -24
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/status.d.ts +43 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +321 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/step-failure.d.ts +26 -0
- package/dist/cli/step-failure.d.ts.map +1 -1
- package/dist/cli/step-failure.js +99 -10
- package/dist/cli/step-failure.js.map +1 -1
- package/dist/cli-commands.d.ts +41 -0
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +33 -0
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli.d.ts +4 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +26 -0
- package/dist/cli.js.map +1 -1
- package/dist/cloud-http.d.ts +12 -0
- package/dist/cloud-http.d.ts.map +1 -1
- package/dist/cloud-http.js +14 -6
- package/dist/cloud-http.js.map +1 -1
- package/dist/cloud-read.d.ts +154 -0
- package/dist/cloud-read.d.ts.map +1 -0
- package/dist/cloud-read.js +373 -0
- package/dist/cloud-read.js.map +1 -0
- package/dist/cloud-transcript.d.ts +94 -0
- package/dist/cloud-transcript.d.ts.map +1 -0
- package/dist/cloud-transcript.js +342 -0
- package/dist/cloud-transcript.js.map +1 -0
- package/dist/communication/environment.d.ts +3 -0
- package/dist/communication/environment.d.ts.map +1 -0
- package/dist/communication/environment.js +34 -0
- package/dist/communication/environment.js.map +1 -0
- package/dist/communication/history.d.ts +6 -0
- package/dist/communication/history.d.ts.map +1 -0
- package/dist/communication/history.js +38 -0
- package/dist/communication/history.js.map +1 -0
- package/dist/communication/local.d.ts +6 -0
- package/dist/communication/local.d.ts.map +1 -0
- package/dist/communication/local.js +56 -0
- package/dist/communication/local.js.map +1 -0
- package/dist/communication/preflight.d.ts +6 -0
- package/dist/communication/preflight.d.ts.map +1 -0
- package/dist/communication/preflight.js +37 -0
- package/dist/communication/preflight.js.map +1 -0
- package/dist/communication/projection.d.ts +8 -0
- package/dist/communication/projection.d.ts.map +1 -0
- package/dist/communication/projection.js +23 -0
- package/dist/communication/projection.js.map +1 -0
- package/dist/communication/relay.d.ts +78 -0
- package/dist/communication/relay.d.ts.map +1 -0
- package/dist/communication/relay.js +89 -0
- package/dist/communication/relay.js.map +1 -0
- package/dist/communication/session.d.ts +24 -0
- package/dist/communication/session.d.ts.map +1 -0
- package/dist/communication/session.js +100 -0
- package/dist/communication/session.js.map +1 -0
- package/dist/communication/spec.d.ts +20 -0
- package/dist/communication/spec.d.ts.map +1 -0
- package/dist/communication/spec.js +113 -0
- package/dist/communication/spec.js.map +1 -0
- package/dist/communication/tool.d.ts +3 -0
- package/dist/communication/tool.d.ts.map +1 -0
- package/dist/communication/tool.js +23 -0
- package/dist/communication/tool.js.map +1 -0
- package/dist/communication/tools.d.ts +11 -0
- package/dist/communication/tools.d.ts.map +1 -0
- package/dist/communication/tools.js +65 -0
- package/dist/communication/tools.js.map +1 -0
- package/dist/communication/worker.d.ts +6 -0
- package/dist/communication/worker.d.ts.map +1 -0
- package/dist/communication/worker.js +120 -0
- package/dist/communication/worker.js.map +1 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +8 -1
- package/dist/compile.js.map +1 -1
- package/dist/failure-kinds.d.ts +30 -2
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +9 -0
- package/dist/failure-kinds.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/journal-client.d.ts +4 -1
- package/dist/journal-client.d.ts.map +1 -1
- package/dist/journal-client.js +11 -2
- package/dist/journal-client.js.map +1 -1
- package/dist/journal-reader.d.ts +1 -1
- package/dist/journal-reader.d.ts.map +1 -1
- package/dist/journal-reader.js +3 -1
- package/dist/journal-reader.js.map +1 -1
- package/dist/llm-worker.d.ts.map +1 -1
- package/dist/llm-worker.js +12 -1
- package/dist/llm-worker.js.map +1 -1
- package/dist/permissions-preflight.d.ts +22 -0
- package/dist/permissions-preflight.d.ts.map +1 -0
- package/dist/permissions-preflight.js +49 -0
- package/dist/permissions-preflight.js.map +1 -0
- package/dist/preflight.d.ts +13 -2
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +29 -6
- package/dist/preflight.js.map +1 -1
- package/dist/protocol.d.ts +39 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/pty-sidechannel.d.ts +7 -0
- package/dist/pty-sidechannel.d.ts.map +1 -1
- package/dist/pty-sidechannel.js.map +1 -1
- package/dist/redact.d.ts +16 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +104 -0
- package/dist/redact.js.map +1 -0
- package/dist/run-state.d.ts +124 -0
- package/dist/run-state.d.ts.map +1 -0
- package/dist/run-state.js +368 -0
- package/dist/run-state.js.map +1 -0
- package/dist/spec.d.ts +24 -1
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/step-env.d.ts +25 -0
- package/dist/step-env.d.ts.map +1 -0
- package/dist/step-env.js +34 -0
- package/dist/step-env.js.map +1 -0
- package/dist/transcript-tail.d.ts +54 -0
- package/dist/transcript-tail.d.ts.map +1 -0
- package/dist/transcript-tail.js +176 -0
- package/dist/transcript-tail.js.map +1 -0
- package/dist/worker-cli.d.ts +10 -0
- package/dist/worker-cli.d.ts.map +1 -1
- package/dist/worker-cli.js +138 -17
- package/dist/worker-cli.js.map +1 -1
- package/dist/worker-usage.d.ts +7 -2
- package/dist/worker-usage.d.ts.map +1 -1
- package/dist/worker-usage.js +21 -3
- package/dist/worker-usage.js.map +1 -1
- package/dist/worker.d.ts +1 -0
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +41 -7
- package/dist/worker.js.map +1 -1
- package/dist/wrapper-runtime.d.ts +7 -1
- package/dist/wrapper-runtime.d.ts.map +1 -1
- package/dist/wrapper-runtime.js +7 -1
- package/dist/wrapper-runtime.js.map +1 -1
- package/dist/wrapper-session.d.ts +8 -0
- package/dist/wrapper-session.d.ts.map +1 -1
- package/dist/wrapper-session.js +156 -23
- package/dist/wrapper-session.js.map +1 -1
- package/package.json +14 -2
- package/src/agent-artifacts.ts +27 -11
- package/src/agent-transcript.ts +651 -0
- package/src/authored-flow-error.ts +17 -0
- package/src/authored-flow-executor.ts +4 -1
- package/src/authored-node-entry.ts +5 -1
- package/src/authored-node-runner.ts +33 -1
- package/src/authored-root.ts +2 -1
- package/src/authored-source-authority.ts +13 -0
- package/src/authored-step-index.ts +157 -0
- package/src/authored-step-output.ts +66 -14
- package/src/authored-worker-step.ts +88 -15
- package/src/cli/check.ts +69 -11
- package/src/cli/cloud-read.ts +518 -0
- package/src/cli/run.ts +43 -24
- package/src/cli/status.ts +349 -0
- package/src/cli/step-failure.ts +100 -10
- package/src/cli-commands.ts +33 -0
- package/src/cli.ts +27 -0
- package/src/cloud-http.ts +32 -6
- package/src/cloud-read.ts +515 -0
- package/src/cloud-transcript.ts +422 -0
- package/src/communication/environment.ts +33 -0
- package/src/communication/history.ts +38 -0
- package/src/communication/local.ts +41 -0
- package/src/communication/preflight.ts +34 -0
- package/src/communication/projection.ts +23 -0
- package/src/communication/relay.ts +102 -0
- package/src/communication/session.ts +84 -0
- package/src/communication/spec.ts +106 -0
- package/src/communication/tool.ts +22 -0
- package/src/communication/tools.ts +50 -0
- package/src/communication/worker.ts +95 -0
- package/src/compile.ts +4 -1
- package/src/failure-kinds.ts +31 -1
- package/src/index.ts +10 -1
- package/src/journal-client.ts +12 -2
- package/src/journal-reader.ts +4 -2
- package/src/llm-worker.ts +12 -1
- package/src/permissions-preflight.ts +53 -0
- package/src/preflight.ts +42 -7
- package/src/protocol.ts +15 -0
- package/src/pty-sidechannel.ts +7 -0
- package/src/redact.ts +106 -0
- package/src/run-state.ts +468 -0
- package/src/spec.ts +18 -1
- package/src/step-env.ts +47 -0
- package/src/transcript-tail.ts +193 -0
- package/src/worker-cli.ts +139 -18
- package/src/worker-usage.ts +26 -3
- package/src/worker.ts +42 -6
- package/src/wrapper-runtime.ts +7 -1
- package/src/wrapper-session.ts +159 -24
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
// `flows status`: what an agent can see about its own run, from disk.
|
|
2
|
+
//
|
|
3
|
+
// Read-only and offline. Opens exactly one file — the run's journal, through
|
|
4
|
+
// the same copy-then-verify `walkJournal` that `flows replay` uses — and never
|
|
5
|
+
// the registry, `connection.json`, the daemon socket or the network. There is
|
|
6
|
+
// no credential to hold because nothing here is authenticated: the journal is
|
|
7
|
+
// on the same filesystem as the process asking. Everything a hosted run knows
|
|
8
|
+
// about itself is in that file; whatever is not (its Cloud run id, its
|
|
9
|
+
// sandbox, its listener) is Cloud's to answer, and this verb does not guess.
|
|
10
|
+
import { canonicalize } from '../canonical.js';
|
|
11
|
+
import { DEFAULT_DATA_DIR } from '../daemon-connection.js';
|
|
12
|
+
import { JournalReadError, walkJournal } from '../journal-client.js';
|
|
13
|
+
import { redact } from '../redact.js';
|
|
14
|
+
import { foldRunState, RunStateError } from '../run-state.js';
|
|
15
|
+
import { DATA_DIR_ENV, RUN_ID_ENV, STEP_ID_ENV } from '../step-env.js';
|
|
16
|
+
export const DEFAULT_TAIL_LINES = 20;
|
|
17
|
+
/** A gate's `detail` may be 2,000 chars (engine/remote.rs); the view shows the head. */
|
|
18
|
+
const DETAIL_LIMIT = 1024;
|
|
19
|
+
const BUSY_RETRIES = 5;
|
|
20
|
+
const BUSY_RETRY_DELAY_MS = 50;
|
|
21
|
+
export function parseStatusArgs(args) {
|
|
22
|
+
let json = false;
|
|
23
|
+
let cloud = false;
|
|
24
|
+
let dataDir;
|
|
25
|
+
let tail;
|
|
26
|
+
const positionals = [];
|
|
27
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
28
|
+
const argument = args[index];
|
|
29
|
+
if (argument === '--json') {
|
|
30
|
+
if (json)
|
|
31
|
+
return undefined;
|
|
32
|
+
json = true;
|
|
33
|
+
}
|
|
34
|
+
else if (argument === '--cloud') {
|
|
35
|
+
if (cloud)
|
|
36
|
+
return undefined;
|
|
37
|
+
cloud = true;
|
|
38
|
+
}
|
|
39
|
+
else if (argument === '--data-dir' || argument === '--tail') {
|
|
40
|
+
const value = args[++index];
|
|
41
|
+
if (value === undefined || value.length === 0 || value.startsWith('-'))
|
|
42
|
+
return undefined;
|
|
43
|
+
if (argument === '--data-dir') {
|
|
44
|
+
if (dataDir !== undefined)
|
|
45
|
+
return undefined;
|
|
46
|
+
dataDir = value;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
if (tail !== undefined || !/^\d{1,4}$/.test(value))
|
|
50
|
+
return undefined;
|
|
51
|
+
tail = Number(value);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (argument.startsWith('-')) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
positionals.push(argument);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (positionals.length > 1)
|
|
62
|
+
return undefined;
|
|
63
|
+
// `--data-dir` and `--tail` name things on this filesystem: a data directory
|
|
64
|
+
// to read a journal out of, and per-attempt tail files beside it. A hosted
|
|
65
|
+
// run has neither, so pairing them with `--cloud` is not a narrower request
|
|
66
|
+
// but a contradiction, and is refused as an invocation rather than silently
|
|
67
|
+
// ignored. A hosted run id is mandatory: there is no ambient one.
|
|
68
|
+
if (cloud && (dataDir !== undefined || tail !== undefined || positionals.length === 0))
|
|
69
|
+
return undefined;
|
|
70
|
+
return {
|
|
71
|
+
command: 'status', json,
|
|
72
|
+
...(cloud ? { cloud: true } : {}),
|
|
73
|
+
...(dataDir === undefined ? {} : { dataDir }),
|
|
74
|
+
...(tail === undefined ? {} : { tail }),
|
|
75
|
+
...(positionals[0] === undefined ? {} : { runId: positionals[0] }),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Take one consistent snapshot of the journal. `journal_busy` means a writer
|
|
80
|
+
* was mid-flight, so wait briefly and try again; any other mid-walk failure
|
|
81
|
+
* keeps the events read so far and reports the section as partial.
|
|
82
|
+
*/
|
|
83
|
+
async function snapshot(runId, dataDir, sleep) {
|
|
84
|
+
for (let attempt = 1;; attempt += 1) {
|
|
85
|
+
const events = [];
|
|
86
|
+
try {
|
|
87
|
+
for await (const event of walkJournal(runId, dataDir))
|
|
88
|
+
events.push(event);
|
|
89
|
+
return { events, partial: [] };
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const failure = error instanceof JournalReadError ? error
|
|
93
|
+
: new JournalReadError('journal_read_failed', error instanceof Error ? error.message : String(error));
|
|
94
|
+
if (failure.code === 'journal_busy' && attempt < BUSY_RETRIES) {
|
|
95
|
+
await sleep(BUSY_RETRY_DELAY_MS);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
return { events, partial: [failure.code], failure };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export async function runStatus(args, io, options = {}) {
|
|
103
|
+
const env = options.env ?? process.env;
|
|
104
|
+
const now = options.now ?? Date.now;
|
|
105
|
+
const sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
106
|
+
// Discovery: an explicit run id wins; otherwise the step's own identity from
|
|
107
|
+
// the environment the worker set. A shared data dir holds other people's
|
|
108
|
+
// runs, so there is no "list everything" mode to fall back to.
|
|
109
|
+
const runId = args.runId ?? env[RUN_ID_ENV];
|
|
110
|
+
if (runId === undefined || runId.length === 0) {
|
|
111
|
+
io.stderr(`REFUSED [run_unknown] pass <run-id> or run inside a step (${RUN_ID_ENV} unset)`);
|
|
112
|
+
return 2;
|
|
113
|
+
}
|
|
114
|
+
const dataDir = args.dataDir ?? env[DATA_DIR_ENV] ?? DEFAULT_DATA_DIR;
|
|
115
|
+
const thisStep = args.runId === undefined ? env[STEP_ID_ENV] ?? null : null;
|
|
116
|
+
const taken = await snapshot(runId, dataDir, sleep);
|
|
117
|
+
if (taken.events.length === 0) {
|
|
118
|
+
const failure = taken.failure ?? new JournalReadError('journal_read_failed', 'Journal holds no entries.');
|
|
119
|
+
io.stderr(`REFUSED [${failure.code}] ${failure.message}`);
|
|
120
|
+
return 2;
|
|
121
|
+
}
|
|
122
|
+
let view;
|
|
123
|
+
try {
|
|
124
|
+
view = foldRunState(taken.events, now());
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const message = error instanceof RunStateError ? error.message : error instanceof Error ? error.message : String(error);
|
|
128
|
+
io.stderr(`REFUSED [run_state_invalid] ${message}`);
|
|
129
|
+
return 2;
|
|
130
|
+
}
|
|
131
|
+
// Tails are read for JSON (bounded, and the schema carries them) and for
|
|
132
|
+
// text only on request; a plain `flows status` opens the journal and nothing else.
|
|
133
|
+
const wantTails = args.json || args.tail !== undefined;
|
|
134
|
+
const tails = new Map();
|
|
135
|
+
if (options.tails !== undefined && wantTails) {
|
|
136
|
+
for (const step of view.steps) {
|
|
137
|
+
try {
|
|
138
|
+
tails.set(step.id, await options.tails.read(dataDir, runId, step, args.tail ?? DEFAULT_TAIL_LINES));
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
if (!taken.partial.includes('transcript_tail_unreadable'))
|
|
142
|
+
taken.partial.push('transcript_tail_unreadable');
|
|
143
|
+
tails.set(step.id, null);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const presented = present(view, thisStep, tails, env);
|
|
148
|
+
if (args.json) {
|
|
149
|
+
io.stdout(canonicalize({ v: 1, ...presented, partial: taken.partial }));
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
for (const line of renderText(presented, taken.partial, args.tail !== undefined))
|
|
153
|
+
io.stdout(line);
|
|
154
|
+
}
|
|
155
|
+
if (taken.failure !== undefined)
|
|
156
|
+
io.stderr(`FAILED [${taken.failure.code}] ${taken.failure.message}`);
|
|
157
|
+
return taken.partial.length === 0 ? 0 : 1;
|
|
158
|
+
}
|
|
159
|
+
/** Apply the redaction and size bounds the on-disk model does not have. */
|
|
160
|
+
function present(view, thisStep, tails, env) {
|
|
161
|
+
return {
|
|
162
|
+
...view,
|
|
163
|
+
this_step: thisStep,
|
|
164
|
+
steps: view.steps.map((step) => ({
|
|
165
|
+
...step,
|
|
166
|
+
// An agent names the files it writes, and it inherits this process's
|
|
167
|
+
// environment, so a path is free text like any other here.
|
|
168
|
+
artifacts: { ...step.artifacts, paths: step.artifacts.paths.map((path) => redact(path, env)) },
|
|
169
|
+
last_attempt: step.last_attempt === null ? null : {
|
|
170
|
+
...step.last_attempt,
|
|
171
|
+
verification: step.last_attempt.verification === null ? null : {
|
|
172
|
+
...step.last_attempt.verification,
|
|
173
|
+
detail: redact(step.last_attempt.verification.detail, env).slice(0, DETAIL_LIMIT),
|
|
174
|
+
},
|
|
175
|
+
// The digest's strings were redacted when it was built (flows#491), by
|
|
176
|
+
// a redactor with a different rule set to this one. Redacting again on
|
|
177
|
+
// the way out costs nothing and closes the difference — this module is
|
|
178
|
+
// the one place that decides what reaches an agent-facing page.
|
|
179
|
+
transcript: step.last_attempt.transcript === null ? null : {
|
|
180
|
+
...step.last_attempt.transcript,
|
|
181
|
+
path: step.last_attempt.transcript.path === null
|
|
182
|
+
? null : redact(step.last_attempt.transcript.path, env),
|
|
183
|
+
model: step.last_attempt.transcript.model === null
|
|
184
|
+
? null : redact(step.last_attempt.transcript.model, env),
|
|
185
|
+
failure: step.last_attempt.transcript.failure === null ? null : {
|
|
186
|
+
...step.last_attempt.transcript.failure,
|
|
187
|
+
excerpt: redact(step.last_attempt.transcript.failure.excerpt, env).slice(0, DETAIL_LIMIT),
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
tails: tails.get(step.id) ?? null,
|
|
192
|
+
})),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
const GLYPH = {
|
|
196
|
+
pending: '○', runnable: '○', running: '↻', backoff: '↻', waiting: '⏸', needs_human: '⏸', done: '✓',
|
|
197
|
+
};
|
|
198
|
+
/** Agent-authored names cannot inject terminal control sequences (progress.ts). */
|
|
199
|
+
function safe(name) {
|
|
200
|
+
return name.replace(/[\x00-\x1f\x7f-\x9f]/g, '?');
|
|
201
|
+
}
|
|
202
|
+
export function formatDuration(ms) {
|
|
203
|
+
const seconds = Math.max(0, ms) / 1000;
|
|
204
|
+
if (seconds < 60)
|
|
205
|
+
return `${seconds.toFixed(1)}s`;
|
|
206
|
+
const minutes = Math.floor(seconds / 60);
|
|
207
|
+
if (minutes < 60)
|
|
208
|
+
return `${minutes}m${String(Math.floor(seconds % 60)).padStart(2, '0')}s`;
|
|
209
|
+
return `${Math.floor(minutes / 60)}h${String(minutes % 60).padStart(2, '0')}m`;
|
|
210
|
+
}
|
|
211
|
+
function thousands(value) {
|
|
212
|
+
return String(value).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
213
|
+
}
|
|
214
|
+
function instant(ms) {
|
|
215
|
+
return new Date(ms).toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
216
|
+
}
|
|
217
|
+
function renderText(view, partial, wantTails) {
|
|
218
|
+
const lines = [];
|
|
219
|
+
const spend = `${thousands(view.spend.tokens_in)} in / ${thousands(view.spend.tokens_out)} out / $${view.spend.dollars}`
|
|
220
|
+
+ (view.spend.dollars_unmetered ? ' (unmetered)' : '');
|
|
221
|
+
const finished = view.completion_reason === null ? '' : ` finished ${view.completion_reason}`;
|
|
222
|
+
lines.push(`RUN ${view.run_id} ${safe(view.name)} ${view.status} started ${formatDuration(view.now_ms - view.spawned_at_ms)} ago${finished} spend ${spend}`);
|
|
223
|
+
const counts = ['done', 'running', 'pending', 'backoff', 'waiting', 'needs_human']
|
|
224
|
+
.filter((key) => view.counts[key] > 0).map((key) => `${view.counts[key]} ${key}`);
|
|
225
|
+
// The denominator is always printed, even for zero steps, so a reader can
|
|
226
|
+
// tell "nothing to show" from "nothing was read".
|
|
227
|
+
lines.push(`steps ${view.counts.total}${counts.length === 0 ? '' : `: ${counts.join(' · ')}`}`);
|
|
228
|
+
if (partial.length > 0)
|
|
229
|
+
lines.push(`partial: ${partial.join(', ')}`);
|
|
230
|
+
lines.push('');
|
|
231
|
+
const idWidth = Math.max(4, ...view.steps.map((step) => Math.min(24, step.id.length)));
|
|
232
|
+
for (const step of view.steps)
|
|
233
|
+
lines.push(...renderStep(step, view, idWidth, wantTails));
|
|
234
|
+
return lines;
|
|
235
|
+
}
|
|
236
|
+
function renderStep(step, view, idWidth, wantTails) {
|
|
237
|
+
// `completion_reason`, not `last_attempt`: an epoch summary carries the
|
|
238
|
+
// reason without an attempt record, and reading the latter marked every
|
|
239
|
+
// compacted success as a failure.
|
|
240
|
+
const failed = step.state === 'done' && step.completion_reason !== 'success';
|
|
241
|
+
const glyph = failed ? '✗' : GLYPH[step.state];
|
|
242
|
+
const cells = [safe(step.id).slice(0, 24).padEnd(idWidth), step.type.padEnd(13), step.state.padEnd(11)];
|
|
243
|
+
const iterations = step.max_iterations === null ? '' : `/${step.max_iterations}`;
|
|
244
|
+
// `> 0` matters for a step carried done by an epoch summary: the summary
|
|
245
|
+
// has no attempt count, so the fold leaves it 0 and printing "0 attempts"
|
|
246
|
+
// would state a fact the journal no longer holds. Blank, like every other
|
|
247
|
+
// state does at 0.
|
|
248
|
+
if (step.state === 'done' && step.attempt > 0)
|
|
249
|
+
cells.push(`${step.attempt} attempt${step.attempt === 1 ? '' : 's'}`);
|
|
250
|
+
else if (step.attempt > 0)
|
|
251
|
+
cells.push(`attempt ${step.attempt}${iterations}`);
|
|
252
|
+
if (step.elapsed_ms !== null)
|
|
253
|
+
cells.push(formatDuration(step.elapsed_ms));
|
|
254
|
+
if (step.state === 'running' && step.lease !== null) {
|
|
255
|
+
cells.push(step.lease.overdue_ms > 0
|
|
256
|
+
? `LEASE OVERDUE by ${formatDuration(step.lease.overdue_ms)}`
|
|
257
|
+
: `lease ok (expires in ${formatDuration(step.lease.deadline_ms - view.now_ms)})`);
|
|
258
|
+
}
|
|
259
|
+
if (step.state === 'backoff' && step.backoff_until_ms !== null)
|
|
260
|
+
cells.push(`backoff until ${instant(step.backoff_until_ms)}`);
|
|
261
|
+
if (step.wait !== null)
|
|
262
|
+
cells.push(`awaiting ${step.wait.kind}: ${safe(step.wait.wait_id)}`);
|
|
263
|
+
if (step.state === 'done' && step.completion_reason !== null) {
|
|
264
|
+
// From the step, not the attempt: an epoch-carried step has the reason
|
|
265
|
+
// and no attempt record, and the reason is the thing worth printing.
|
|
266
|
+
cells.push(step.completion_reason);
|
|
267
|
+
const verification = step.last_attempt?.verification ?? null;
|
|
268
|
+
if (verification !== null)
|
|
269
|
+
cells.push(`gate: ${verification.gate} ${verification.verdict}`);
|
|
270
|
+
}
|
|
271
|
+
if (step.id === view.this_step)
|
|
272
|
+
cells.push('← this step');
|
|
273
|
+
const lines = [` ${glyph} ${cells.join(' ')}`.trimEnd()];
|
|
274
|
+
const last = step.last_attempt;
|
|
275
|
+
if (last !== null && step.state !== 'done') {
|
|
276
|
+
lines.push(` last attempt ${last.attempt}: ${last.completion_reason} → ${last.disposition}`);
|
|
277
|
+
}
|
|
278
|
+
if (last?.verification !== null && last?.verification !== undefined && last.verification.verdict !== 'pass') {
|
|
279
|
+
lines.push(` gate: ${last.verification.gate} ${last.verification.verdict.toUpperCase()} — ${JSON.stringify(last.verification.detail)}`);
|
|
280
|
+
}
|
|
281
|
+
const transcript = last?.transcript ?? null;
|
|
282
|
+
if (transcript !== null) {
|
|
283
|
+
// One line of provenance: what ran, how much it cost, and where the full
|
|
284
|
+
// transcript is. `flows status` never prints the transcript itself — that
|
|
285
|
+
// is `--tail`'s job for the live attempt, and the file's for a finished one.
|
|
286
|
+
const facts = [
|
|
287
|
+
transcript.model === null ? null : safe(transcript.model),
|
|
288
|
+
transcript.num_turns === null ? null : `${transcript.num_turns} turn${transcript.num_turns === 1 ? '' : 's'}`,
|
|
289
|
+
transcript.tool_calls === null ? null : `${transcript.tool_calls} tool call${transcript.tool_calls === 1 ? '' : 's'}`,
|
|
290
|
+
transcript.total_cost_usd === null ? null : `$${transcript.total_cost_usd}`,
|
|
291
|
+
].filter((fact) => fact !== null);
|
|
292
|
+
const size = transcript.bytes === null ? '' : ` (${transcript.bytes} bytes${transcript.truncated ? ', truncated' : ''})`;
|
|
293
|
+
lines.push(` transcript (attempt ${last.attempt})${facts.length === 0 ? '' : `: ${facts.join(' · ')}`}`);
|
|
294
|
+
if (transcript.path !== null)
|
|
295
|
+
lines.push(` ${safe(transcript.path)}${size}`);
|
|
296
|
+
if (transcript.failure !== null && transcript.failure.excerpt.length > 0) {
|
|
297
|
+
lines.push(` failed at ${safe(transcript.failure.kind)}: ${JSON.stringify(transcript.failure.excerpt)}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (step.type === 'agent' && last !== null) {
|
|
301
|
+
const shown = step.artifacts.paths.slice(0, 10).map(safe).join(', ');
|
|
302
|
+
const more = step.artifacts.paths.length > 10 ? ` +${step.artifacts.paths.length - 10} more` : '';
|
|
303
|
+
lines.push(` artifacts (attempt ${last.attempt}): ${step.artifacts.journaled
|
|
304
|
+
? step.artifacts.paths.length === 0 ? 'none' : `${shown}${more}`
|
|
305
|
+
: 'none journaled (output was a JSON object)'}`);
|
|
306
|
+
}
|
|
307
|
+
if (wantTails && step.type === 'agent' && step.attempt > 0) {
|
|
308
|
+
for (const stream of ['stdout', 'stderr']) {
|
|
309
|
+
const tail = step.tails?.[stream] ?? null;
|
|
310
|
+
if (tail === null) {
|
|
311
|
+
lines.push(` ${stream} tail: no transcript on disk for attempt ${step.attempt}`);
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
lines.push(` ${stream} tail (attempt ${tail.attempt}, last ${tail.lines.length} of ${tail.bytes} bytes):`);
|
|
315
|
+
for (const line of tail.lines)
|
|
316
|
+
lines.push(` ${safe(line)}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return lines;
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,32 @@ import type { JournalClient } from '../journal-client.js';
|
|
|
23
23
|
* and printing it as one is the difference between a diagnosis and a blob.
|
|
24
24
|
*/
|
|
25
25
|
export declare function stepFailureDetails(client: JournalClient, runId: string): Promise<StepFailedDetails | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* The evidence half of a `step_failed` diagnostic; `renderInspection` adds the
|
|
28
|
+
* rest. Each field is printed only when the journal actually carried it — an
|
|
29
|
+
* agent step has no exit code to report, and inventing `exit=undefined` (which
|
|
30
|
+
* is what the deterministic-only version printed for one) is worse than
|
|
31
|
+
* silence on that field.
|
|
32
|
+
*
|
|
33
|
+
* `attempt=N/M` is here for `retries_exhausted`, which is the kernel's terminal
|
|
34
|
+
* reason for "the attempt budget was consumed" (kernel/DESIGN.md) and is
|
|
35
|
+
* accurate kernel vocabulary that reads in English as though retries happened.
|
|
36
|
+
* A deterministic step gets the default budget of one, so a single failed
|
|
37
|
+
* attempt with no retry at all terminates as `retries_exhausted`. The
|
|
38
|
+
* vocabulary does not change (AGENTS.md rule 7); printing the facts beside it
|
|
39
|
+
* stops it being misread. Unknown values are omitted rather than defaulted —
|
|
40
|
+
* an absent budget must not be reported as one attempt.
|
|
41
|
+
*
|
|
42
|
+
* Lives next to `StepFailedDetails`'s extractor rather than in `cli/run.ts` so
|
|
43
|
+
* the authored `f.run` path can render the same grammar without importing the
|
|
44
|
+
* run lifecycle (which would be a cycle).
|
|
45
|
+
*/
|
|
46
|
+
export declare function renderStepEvidence(details: StepFailedDetails): string;
|
|
47
|
+
/** The `Inspect:`/`Journal:` tail every `step_failed` message ends with. */
|
|
48
|
+
export declare function renderInspection(where: {
|
|
49
|
+
hint?: string;
|
|
50
|
+
journalPath?: string;
|
|
51
|
+
}): string;
|
|
26
52
|
/**
|
|
27
53
|
* Where to look, derived from the run id and data dir ALONE.
|
|
28
54
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-failure.d.ts","sourceRoot":"","sources":["../../src/cli/step-failure.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"step-failure.d.ts","sourceRoot":"","sources":["../../src/cli/step-failure.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAyDxC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAWrE;AAQD,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAIvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAaxC"}
|
package/dist/cli/step-failure.js
CHANGED
|
@@ -27,6 +27,13 @@ export async function stepFailureDetails(client, runId) {
|
|
|
27
27
|
const snapshot = await client.runGet(runId);
|
|
28
28
|
let fromSeq = 1;
|
|
29
29
|
const failures = new Map();
|
|
30
|
+
// `runGet`'s `StepSnapshot` carries only `type`, `state` and an optional
|
|
31
|
+
// lease deadline — neither the attempt number nor the attempt budget. Both
|
|
32
|
+
// are journal facts: the envelope's `attempt` counts the attempt, and
|
|
33
|
+
// `step.attempt.started` records the `max_iterations` the kernel is
|
|
34
|
+
// enforcing (relayflowd-core/src/entry.rs `AttemptStartedPayload`). They are
|
|
35
|
+
// collected on the same walk and reported only when the journal held them.
|
|
36
|
+
const budgets = new Map();
|
|
30
37
|
while (true) {
|
|
31
38
|
const { entries } = await client.journalRead(runId, fromSeq, 100);
|
|
32
39
|
if (entries.length === 0)
|
|
@@ -34,12 +41,21 @@ export async function stepFailureDetails(client, runId) {
|
|
|
34
41
|
for (const raw of entries) {
|
|
35
42
|
const entry = record(raw);
|
|
36
43
|
const seq = entry?.['seq'];
|
|
37
|
-
if (typeof seq !== 'number' || !Number.isSafeInteger(seq) || seq < fromSeq) {
|
|
44
|
+
if (entry === undefined || typeof seq !== 'number' || !Number.isSafeInteger(seq) || seq < fromSeq) {
|
|
38
45
|
throw new Error('invalid journal sequence in step failure inspection');
|
|
39
46
|
}
|
|
40
47
|
fromSeq = seq + 1;
|
|
41
|
-
const stepId = entry
|
|
42
|
-
if (
|
|
48
|
+
const stepId = entry['step_id'];
|
|
49
|
+
if (typeof stepId !== 'string')
|
|
50
|
+
continue;
|
|
51
|
+
if (entry['entry_type'] === 'step.attempt.started') {
|
|
52
|
+
const maxIterations = record(entry['payload'])?.['max_iterations'];
|
|
53
|
+
if (typeof maxIterations === 'number' && Number.isSafeInteger(maxIterations) && maxIterations > 0) {
|
|
54
|
+
budgets.set(stepId, maxIterations);
|
|
55
|
+
}
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (entry['entry_type'] !== 'step.completed')
|
|
43
59
|
continue;
|
|
44
60
|
// A later completion supersedes an earlier failed attempt.
|
|
45
61
|
failures.delete(stepId);
|
|
@@ -56,16 +72,65 @@ export async function stepFailureDetails(client, runId) {
|
|
|
56
72
|
|| typeof completionReason !== 'string' || completionReason === 'success')
|
|
57
73
|
continue;
|
|
58
74
|
const stepType = snapshot.steps[stepId]?.type;
|
|
75
|
+
const attempt = entry['attempt'];
|
|
76
|
+
const maxIterations = budgets.get(stepId);
|
|
59
77
|
failures.set(stepId, {
|
|
60
78
|
stepId,
|
|
61
79
|
completionReason,
|
|
62
80
|
...(stepType === undefined ? {} : { stepType }),
|
|
81
|
+
...(typeof attempt === 'number' && Number.isSafeInteger(attempt) && attempt > 0 ? { attempt } : {}),
|
|
82
|
+
...(maxIterations === undefined ? {} : { maxIterations }),
|
|
63
83
|
...evidence(payload),
|
|
64
84
|
});
|
|
65
85
|
}
|
|
66
86
|
}
|
|
67
87
|
return [...failures.values()].at(-1);
|
|
68
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* The evidence half of a `step_failed` diagnostic; `renderInspection` adds the
|
|
91
|
+
* rest. Each field is printed only when the journal actually carried it — an
|
|
92
|
+
* agent step has no exit code to report, and inventing `exit=undefined` (which
|
|
93
|
+
* is what the deterministic-only version printed for one) is worse than
|
|
94
|
+
* silence on that field.
|
|
95
|
+
*
|
|
96
|
+
* `attempt=N/M` is here for `retries_exhausted`, which is the kernel's terminal
|
|
97
|
+
* reason for "the attempt budget was consumed" (kernel/DESIGN.md) and is
|
|
98
|
+
* accurate kernel vocabulary that reads in English as though retries happened.
|
|
99
|
+
* A deterministic step gets the default budget of one, so a single failed
|
|
100
|
+
* attempt with no retry at all terminates as `retries_exhausted`. The
|
|
101
|
+
* vocabulary does not change (AGENTS.md rule 7); printing the facts beside it
|
|
102
|
+
* stops it being misread. Unknown values are omitted rather than defaulted —
|
|
103
|
+
* an absent budget must not be reported as one attempt.
|
|
104
|
+
*
|
|
105
|
+
* Lives next to `StepFailedDetails`'s extractor rather than in `cli/run.ts` so
|
|
106
|
+
* the authored `f.run` path can render the same grammar without importing the
|
|
107
|
+
* run lifecycle (which would be a cycle).
|
|
108
|
+
*/
|
|
109
|
+
export function renderStepEvidence(details) {
|
|
110
|
+
return ` Step ${JSON.stringify(details.stepId)}`
|
|
111
|
+
+ (details.stepType === undefined ? '' : ` (${details.stepType})`)
|
|
112
|
+
+ ` completionReason: ${details.completionReason}`
|
|
113
|
+
+ renderAttempt(details)
|
|
114
|
+
+ (details.exitCode === undefined ? '' : ` exit=${details.exitCode}`)
|
|
115
|
+
+ '.'
|
|
116
|
+
+ (details.detail === undefined ? '' : `\nDetail: ${details.detail}`)
|
|
117
|
+
+ (details.stdoutTail ? `\nStdout (last 1,024 bytes):\n${details.stdoutTail}` : '')
|
|
118
|
+
+ (details.stderrTail ? `\nStderr (last 1,024 bytes):\n${details.stderrTail}` : '')
|
|
119
|
+
+ (details.transcriptPath === undefined ? '' : `\nTranscript: ${details.transcriptPath}`);
|
|
120
|
+
}
|
|
121
|
+
function renderAttempt(details) {
|
|
122
|
+
if (details.attempt === undefined)
|
|
123
|
+
return '';
|
|
124
|
+
return ` attempt=${details.attempt}`
|
|
125
|
+
+ (details.maxIterations === undefined ? '' : `/${details.maxIterations}`);
|
|
126
|
+
}
|
|
127
|
+
/** The `Inspect:`/`Journal:` tail every `step_failed` message ends with. */
|
|
128
|
+
export function renderInspection(where) {
|
|
129
|
+
if (where.hint === undefined)
|
|
130
|
+
return '';
|
|
131
|
+
return `\nInspect: ${where.hint}`
|
|
132
|
+
+ (where.journalPath === undefined ? '' : `\nJournal: ${where.journalPath}`);
|
|
133
|
+
}
|
|
69
134
|
/**
|
|
70
135
|
* Where to look, derived from the run id and data dir ALONE.
|
|
71
136
|
*
|
|
@@ -99,27 +164,51 @@ export function inspectionHint(runId, stepId, dataDir) {
|
|
|
99
164
|
* it does not. A truncated render (the daemon caps at 2,000 chars and appends
|
|
100
165
|
* a truncation note) will not parse; that falls through to the raw string,
|
|
101
166
|
* which is still the account of what went wrong.
|
|
167
|
+
*
|
|
168
|
+
* An agent or llm completion now also carries `trajectory_tail.transcript`
|
|
169
|
+
* (agent-transcript.ts) on every attempt. That object is not process-shaped,
|
|
170
|
+
* so it must not shadow the render that is: the first candidate that carries
|
|
171
|
+
* an exit code or a tail wins. The digest contributes what only it has — the
|
|
172
|
+
* failure excerpt the worker picked out of the provider's frames, and the
|
|
173
|
+
* path of the transcript file.
|
|
102
174
|
*/
|
|
103
175
|
function evidence(payload) {
|
|
104
176
|
const detail = record(payload['verification'])?.['detail'];
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
177
|
+
const candidates = [
|
|
178
|
+
record(payload['output']),
|
|
179
|
+
record(payload['trajectory_tail']),
|
|
180
|
+
typeof detail === 'string' ? parsed(detail) : undefined,
|
|
181
|
+
].filter((candidate) => candidate !== undefined);
|
|
182
|
+
const structured = candidates.find(processShaped) ?? candidates[0];
|
|
108
183
|
const exitCode = structured?.['exit_code'];
|
|
109
184
|
const stdout = structured?.['stdout_tail'];
|
|
110
185
|
const stderr = structured?.['stderr_tail'];
|
|
111
|
-
const structuredShape =
|
|
112
|
-
|
|
186
|
+
const structuredShape = structured !== undefined && processShaped(structured);
|
|
187
|
+
const transcript = record(record(payload['trajectory_tail'])?.['transcript']);
|
|
188
|
+
const failure = record(transcript?.['failure']);
|
|
189
|
+
const excerpt = failure?.['excerpt'];
|
|
190
|
+
const transcriptPath = record(transcript?.['file'])?.['path'];
|
|
191
|
+
// The excerpt is the worker's own pick of the failure; a `stderr` excerpt
|
|
192
|
+
// is the same bytes as `stderrTail`, so it is not printed twice.
|
|
193
|
+
const excerptDetail = typeof excerpt === 'string' && excerpt.length > 0
|
|
194
|
+
&& !(failure?.['kind'] === 'stderr' && typeof stderr === 'string')
|
|
195
|
+
? tail(excerpt) : undefined;
|
|
113
196
|
return {
|
|
114
197
|
...(typeof exitCode === 'number' && Number.isSafeInteger(exitCode) ? { exitCode } : {}),
|
|
115
198
|
...(typeof stdout === 'string' && stdout.length > 0 ? { stdoutTail: tail(stdout) } : {}),
|
|
116
199
|
...(typeof stderr === 'string' ? { stderrTail: tail(stderr) } : {}),
|
|
117
200
|
// Keep the daemon's account only when it was NOT just a render of the
|
|
118
201
|
// fields above — otherwise the same bytes print twice.
|
|
119
|
-
...(
|
|
120
|
-
|
|
202
|
+
...(excerptDetail !== undefined ? { detail: excerptDetail }
|
|
203
|
+
: typeof detail === 'string' && detail.length > 0 && !structuredShape
|
|
204
|
+
? { detail: tail(detail) } : {}),
|
|
205
|
+
...(typeof transcriptPath === 'string' && transcriptPath.length > 0 ? { transcriptPath } : {}),
|
|
121
206
|
};
|
|
122
207
|
}
|
|
208
|
+
function processShaped(value) {
|
|
209
|
+
return typeof value['exit_code'] === 'number'
|
|
210
|
+
|| typeof value['stdout_tail'] === 'string' || typeof value['stderr_tail'] === 'string';
|
|
211
|
+
}
|
|
123
212
|
function parsed(value) {
|
|
124
213
|
try {
|
|
125
214
|
return record(JSON.parse(value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-failure.js","sourceRoot":"","sources":["../../src/cli/step-failure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QAChC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"step-failure.js","sourceRoot":"","sources":["../../src/cli/step-failure.ts"],"names":[],"mappings":"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"}
|