@sensigo/realm-cli 0.40.0 → 0.42.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.
Files changed (77) hide show
  1. package/dist/agent/providers/agent-utils.d.ts +37 -13
  2. package/dist/agent/providers/agent-utils.d.ts.map +1 -1
  3. package/dist/agent/providers/agent-utils.js +92 -17
  4. package/dist/agent/providers/agent-utils.js.map +1 -1
  5. package/dist/agent/run-attach.d.ts.map +1 -1
  6. package/dist/agent/run-attach.js +8 -21
  7. package/dist/agent/run-attach.js.map +1 -1
  8. package/dist/commands/agent.d.ts +6 -0
  9. package/dist/commands/agent.d.ts.map +1 -1
  10. package/dist/commands/agent.js +28 -4
  11. package/dist/commands/agent.js.map +1 -1
  12. package/dist/commands/drain.d.ts.map +1 -1
  13. package/dist/commands/drain.js +60 -9
  14. package/dist/commands/drain.js.map +1 -1
  15. package/dist/commands/inspect.d.ts.map +1 -1
  16. package/dist/commands/inspect.js +20 -2
  17. package/dist/commands/inspect.js.map +1 -1
  18. package/dist/commands/list.d.ts.map +1 -1
  19. package/dist/commands/list.js +61 -8
  20. package/dist/commands/list.js.map +1 -1
  21. package/dist/commands/listen.d.ts +13 -0
  22. package/dist/commands/listen.d.ts.map +1 -1
  23. package/dist/commands/listen.js +36 -4
  24. package/dist/commands/listen.js.map +1 -1
  25. package/dist/commands/register.d.ts +1 -14
  26. package/dist/commands/register.d.ts.map +1 -1
  27. package/dist/commands/register.js +52 -56
  28. package/dist/commands/register.js.map +1 -1
  29. package/dist/commands/replay.d.ts.map +1 -1
  30. package/dist/commands/replay.js +4 -2
  31. package/dist/commands/replay.js.map +1 -1
  32. package/dist/commands/respond.d.ts.map +1 -1
  33. package/dist/commands/respond.js +30 -3
  34. package/dist/commands/respond.js.map +1 -1
  35. package/dist/commands/resume.d.ts.map +1 -1
  36. package/dist/commands/resume.js +3 -2
  37. package/dist/commands/resume.js.map +1 -1
  38. package/dist/commands/run.d.ts +35 -0
  39. package/dist/commands/run.d.ts.map +1 -1
  40. package/dist/commands/run.js +246 -12
  41. package/dist/commands/run.js.map +1 -1
  42. package/dist/commands/test.d.ts.map +1 -1
  43. package/dist/commands/test.js +51 -8
  44. package/dist/commands/test.js.map +1 -1
  45. package/dist/commands/validate.d.ts +31 -0
  46. package/dist/commands/validate.d.ts.map +1 -1
  47. package/dist/commands/validate.js +658 -132
  48. package/dist/commands/validate.js.map +1 -1
  49. package/dist/commands/watch.d.ts +43 -1
  50. package/dist/commands/watch.d.ts.map +1 -1
  51. package/dist/commands/watch.js +366 -42
  52. package/dist/commands/watch.js.map +1 -1
  53. package/dist/commands/workflow-list.d.ts +16 -0
  54. package/dist/commands/workflow-list.d.ts.map +1 -0
  55. package/dist/commands/workflow-list.js +96 -0
  56. package/dist/commands/workflow-list.js.map +1 -0
  57. package/dist/commands-registry.d.ts.map +1 -1
  58. package/dist/commands-registry.js +2 -0
  59. package/dist/commands-registry.js.map +1 -1
  60. package/dist/extensions/load-project-extensions.d.ts.map +1 -1
  61. package/dist/extensions/load-project-extensions.js +9 -3
  62. package/dist/extensions/load-project-extensions.js.map +1 -1
  63. package/dist/index.js +22 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/lib/admission-context.d.ts +58 -0
  66. package/dist/lib/admission-context.d.ts.map +1 -0
  67. package/dist/lib/admission-context.js +57 -0
  68. package/dist/lib/admission-context.js.map +1 -0
  69. package/dist/lib/load-workflow-for-admission.d.ts +69 -0
  70. package/dist/lib/load-workflow-for-admission.d.ts.map +1 -0
  71. package/dist/lib/load-workflow-for-admission.js +130 -0
  72. package/dist/lib/load-workflow-for-admission.js.map +1 -0
  73. package/dist/lib/loader-warnings.d.ts +28 -10
  74. package/dist/lib/loader-warnings.d.ts.map +1 -1
  75. package/dist/lib/loader-warnings.js +84 -30
  76. package/dist/lib/loader-warnings.js.map +1 -1
  77. package/package.json +4 -4
@@ -1,3 +1,38 @@
1
1
  import { Command } from 'commander';
2
+ import type { RunRecord } from '@sensigo/realm';
3
+ /**
4
+ * The detach map (issue #447): what to do next, for THIS run's state.
5
+ *
6
+ * Cancelling a dev-run prompt used to dump a raw Node stack over an unhandled AbortError, which
7
+ * reads like a crash. The run was always saved — every settled step persists before the next
8
+ * prompt — so the exit should say so, and then hand over the exact commands that work from here.
9
+ *
10
+ * The fork is on the RECORD, not on a guess, because two of the three states REFUSE most of the
11
+ * remedies and printing a command that will be rejected is worse than printing nothing:
12
+ *
13
+ * - TERMINAL — reachable for real: an external `realm run respond`, or a gate-expiry enactment,
14
+ * can terminalize this run while this process sits blocked on the prompt (the #291 race the
15
+ * fresh get below exists to catch). Inspect ONLY, because both other remedies refuse a
16
+ * terminal run, by two DIFFERENT mechanisms: `realm run abandon` throws STATE_RUN_TERMINAL
17
+ * (abandon-run.ts), while `realm agent --run-id` refuses through a separate uncoded check in
18
+ * resolveRunAttach (run-attach.ts) — a plain Error, not that code.
19
+ * - PENDING GATE — respond and inspect, and deliberately NO Discard line: `realm run abandon`
20
+ * REFUSES a run with a pending gate (STATE_TRANSITION_DENIED, abandon-run.ts) and tells you to
21
+ * resolve the gate first. The gate_id and choices come from the FROZEN record, the same source
22
+ * `respond` validates against, so what is printed is what will be accepted.
23
+ * - OTHERWISE — drive, inspect, or discard, all three of which apply.
24
+ *
25
+ * The choices are joined with `|` deliberately: this is a usage template showing alternation, not
26
+ * a list. (inspect renders them `', '` and the prompt `'/'`; three renderings, three purposes.)
27
+ * An empty `choices: []` renders an empty alternation — that run is already human-unresolvable.
28
+ * The authored form is a load error since issue #433; a GRANDFATHERED registered copy (one
29
+ * registered before #433 shipped) can still carry it and keeps running — not special-cased here
30
+ * either way.
31
+ *
32
+ * @internal Exported for testing only.
33
+ */
34
+ export declare function renderDetachMap(record: RunRecord, promptStep: string | undefined, opts?: {
35
+ headline?: string;
36
+ }): string;
2
37
  export declare const runCommand: Command;
3
38
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,eAAO,MAAM,UAAU,SAoNpB,CAAC"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,OAAO,KAAK,EAIV,SAAS,EACV,MAAM,gBAAgB,CAAC;AAexB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,MAAM,CAgCR;AAmCD,eAAO,MAAM,UAAU,SAsWpB,CAAC"}
@@ -2,7 +2,8 @@
2
2
  import { Command } from 'commander';
3
3
  import { createInterface } from 'node:readline/promises';
4
4
  import { join } from 'node:path';
5
- import { loadWorkflowFromFile, JsonFileStore, findEligibleSteps, executeChain, submitHumanResponse, unmetCapabilities, capabilityWarning, } from '@sensigo/realm';
5
+ import { loadWorkflowFromFile, JsonFileStore, findEligibleSteps, executeChain, submitHumanResponse, unmetCapabilities, capabilityWarning, WorkflowError, deriveRunPhase, } from '@sensigo/realm';
6
+ import { renderLoadFailure } from '../lib/loader-warnings.js';
6
7
  import { loadProjectExtensions } from '../extensions/load-project-extensions.js';
7
8
  import { scheduleGateExpiryTimer } from '../agent/gate/gate-expiry-timer.js';
8
9
  /**
@@ -14,6 +15,95 @@ function isWriterNonceRequired() {
14
15
  const v = process.env['REALM_REQUIRE_WRITER_NONCE'];
15
16
  return v !== undefined && v !== '' && v !== '0' && v !== 'false';
16
17
  }
18
+ /**
19
+ * The detach map (issue #447): what to do next, for THIS run's state.
20
+ *
21
+ * Cancelling a dev-run prompt used to dump a raw Node stack over an unhandled AbortError, which
22
+ * reads like a crash. The run was always saved — every settled step persists before the next
23
+ * prompt — so the exit should say so, and then hand over the exact commands that work from here.
24
+ *
25
+ * The fork is on the RECORD, not on a guess, because two of the three states REFUSE most of the
26
+ * remedies and printing a command that will be rejected is worse than printing nothing:
27
+ *
28
+ * - TERMINAL — reachable for real: an external `realm run respond`, or a gate-expiry enactment,
29
+ * can terminalize this run while this process sits blocked on the prompt (the #291 race the
30
+ * fresh get below exists to catch). Inspect ONLY, because both other remedies refuse a
31
+ * terminal run, by two DIFFERENT mechanisms: `realm run abandon` throws STATE_RUN_TERMINAL
32
+ * (abandon-run.ts), while `realm agent --run-id` refuses through a separate uncoded check in
33
+ * resolveRunAttach (run-attach.ts) — a plain Error, not that code.
34
+ * - PENDING GATE — respond and inspect, and deliberately NO Discard line: `realm run abandon`
35
+ * REFUSES a run with a pending gate (STATE_TRANSITION_DENIED, abandon-run.ts) and tells you to
36
+ * resolve the gate first. The gate_id and choices come from the FROZEN record, the same source
37
+ * `respond` validates against, so what is printed is what will be accepted.
38
+ * - OTHERWISE — drive, inspect, or discard, all three of which apply.
39
+ *
40
+ * The choices are joined with `|` deliberately: this is a usage template showing alternation, not
41
+ * a list. (inspect renders them `', '` and the prompt `'/'`; three renderings, three purposes.)
42
+ * An empty `choices: []` renders an empty alternation — that run is already human-unresolvable.
43
+ * The authored form is a load error since issue #433; a GRANDFATHERED registered copy (one
44
+ * registered before #433 shipped) can still carry it and keeps running — not special-cased here
45
+ * either way.
46
+ *
47
+ * @internal Exported for testing only.
48
+ */
49
+ export function renderDetachMap(record, promptStep, opts) {
50
+ // DERIVED, never the persisted field: a record can carry a stale `run_phase` that disagrees
51
+ // with what its own seal says (issue #432's class), and a map that names the wrong phase sends
52
+ // an operator to the wrong remedy.
53
+ const phase = deriveRunPhase(record);
54
+ const step = promptStep ?? record.pending_gate?.step_name ?? '(step unknown)';
55
+ // issue #468 — the default is the #447 cancel route's own claim, byte-identical. The stall
56
+ // route (below, in the loop) passes 'Workflow stalled': no prompt was ever cancelled there, and
57
+ // the hardcoded word would be a false statement about what just happened.
58
+ const headline = opts?.headline ?? 'Prompt cancelled';
59
+ const lines = [
60
+ `${headline} — detached from run '${record.id}' at step '${step}' (phase: ${phase}). The run is saved.`,
61
+ ];
62
+ if (record.terminal_state) {
63
+ lines.push(` Inspect: realm run inspect ${record.id}`);
64
+ return lines.join('\n');
65
+ }
66
+ const gate = record.pending_gate;
67
+ if (gate !== undefined) {
68
+ lines.push(` Respond: realm run respond ${record.id} --gate ${gate.gate_id} --choice ${gate.choices.join('|')}`);
69
+ lines.push(` Inspect: realm run inspect ${record.id}`);
70
+ return lines.join('\n');
71
+ }
72
+ lines.push(` Drive it: realm agent --run-id ${record.id}`);
73
+ lines.push(` Inspect: realm run inspect ${record.id}`);
74
+ lines.push(` Discard: realm run abandon ${record.id}`);
75
+ return lines.join('\n');
76
+ }
77
+ /**
78
+ * Asks until the answer is usable: empty ⇒ {}, invalid JSON or a non-object ⇒ says why
79
+ * and re-asks (issue #459 — operator input gets a re-prompt, never the #123 rethrow;
80
+ * `42`/`null`/`[1]` are valid JSON that would lie through the object cast, MA-executed).
81
+ * Cancellation is untouched BY CONSTRUCTION: `rl.question` sits OUTSIDE the try, so an
82
+ * ABORT_ERR rejection propagates straight to the #447 catch and its detach map.
83
+ */
84
+ async function askJsonObject(rl, prompt) {
85
+ for (;;) {
86
+ const raw = await rl.question(prompt);
87
+ const trimmed = raw.trim();
88
+ if (trimmed === '')
89
+ return {};
90
+ let parsed;
91
+ try {
92
+ parsed = JSON.parse(trimmed);
93
+ }
94
+ catch (err) {
95
+ if (!(err instanceof SyntaxError))
96
+ throw err; // belt — only JSON.parse is in the try
97
+ console.error(` Not valid JSON: ${err.message} — try again (Enter for {}).`);
98
+ continue;
99
+ }
100
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
101
+ console.error(' Not a JSON object — the step\'s output must be an object like {"key": "value"}. Try again (Enter for {}).');
102
+ continue;
103
+ }
104
+ return parsed;
105
+ }
106
+ }
17
107
  export const runCommand = new Command('run')
18
108
  .argument('<path>', 'Path to workflow directory or workflow.yaml file')
19
109
  .option('--params <json>', 'Initial run parameters as JSON string', '{}')
@@ -34,7 +124,15 @@ export const runCommand = new Command('run')
34
124
  definition = loadWorkflowFromFile(filePath);
35
125
  }
36
126
  catch (err) {
37
- console.error(`Error loading workflow: ${err instanceof Error ? err.message : String(err)}`);
127
+ // issue #425 this catch wraps loadWorkflowFromFile ALONE, so everything it can see is
128
+ // a loader failure and the family split needs no else-arm here. A structural refusal
129
+ // renders verbatim; an unreadable file rides the helper's `Invalid: ` fallback, which
130
+ // replaces today's `Error loading workflow: ` prefix — a deliberate text change, so that
131
+ // one voice reaches an author from every command.
132
+ //
133
+ // No `err.warnings` render here: surfacing the lenient path's warnings on run/agent/
134
+ // listen stays out of scope (#424's stated non-goal).
135
+ console.error(renderLoadFailure(err instanceof WorkflowError ? err : String(err)));
38
136
  process.exit(1);
39
137
  }
40
138
  // 1b. Load project extensions BEFORE run creation (fail-before-create).
@@ -60,6 +158,26 @@ export const runCommand = new Command('run')
60
158
  console.error('Error: --params is not valid JSON');
61
159
  process.exit(1);
62
160
  }
161
+ // issue #426 — dev mode is interactive BY DESIGN: every step kind and every gate prompts
162
+ // on stdin (agent output, auto mock output, gate choices), so a non-TTY stdin can only
163
+ // ever EOF into ERR_USE_AFTER_CLOSE — and it did so AFTER the run was minted and its id
164
+ // printed, leaving a wedged `running` record behind on every scripted invocation.
165
+ //
166
+ // Refused BEFORE any store work, joining the "1b … BEFORE run creation" doctrine one
167
+ // member up. The placement is load → extensions → params → HERE, and each boundary is
168
+ // pinned: earlier than the load and the loader-voice cells lose their messages; earlier
169
+ // than extensions and the spawned orphan-manifest case loses its refusal; earlier than
170
+ // params and `--params '{'` reports the wrong problem.
171
+ //
172
+ // `!== true` rather than a truthiness test: isTTY is `undefined` on a pipe, never false.
173
+ if (process.stdin.isTTY !== true) {
174
+ console.error('Error: dev-mode run is interactive — it prompts on stdin for every step and gate, ' +
175
+ 'and stdin here is not a terminal. No run was created. ' +
176
+ "Scripted flows: 'realm workflow test' drives fixtures; " +
177
+ "'realm listen' / 'realm agent' are the production drives. " +
178
+ 'To run this workflow by hand, use a real terminal.');
179
+ process.exit(1);
180
+ }
63
181
  // 3. Create store and initial run record
64
182
  const store = new JsonFileStore();
65
183
  // issue #207 PR-2 (D3 §5, mixed-wiring gap): construct a JsonTraceBufferStore beside the
@@ -82,9 +200,30 @@ export const runCommand = new Command('run')
82
200
  console.warn(`⚠ ${capabilityWarning(req)}`);
83
201
  }
84
202
  // 4. Set up readline
85
- const rl = createInterface({ input: process.stdin, output: process.stdout });
203
+ //
204
+ // issue #458 — three load-bearing facts, in order: (a) prompts follow the SCREEN, not the
205
+ // pipe — with stdout redirected, the interactive surface (prompt text + echo) joins the
206
+ // reasons/maps that already print on stderr, and the log keeps the pure narrative (bash
207
+ // `read -p`'s norm, executed against every surveyed tool); (b) `terminal` keys on STDIN —
208
+ // the #426 guard above makes `process.stdin.isTTY` an invariant `true` here, and terminal
209
+ // mode is the only route into node's fixed ^C/^D AbortError path (nodejs/node#54030; the
210
+ // non-terminal path is unfixed and upstream-declined, nodejs/node#60344), which is what
211
+ // keeps cancellation ABORT_ERR-coded and the exit code truthful even with BOTH streams
212
+ // piped; (c) the both-piped corner cost — readline then writes prompts/echo/cursor codes
213
+ // into the stderr pipe and the human types blind — is accepted (matches bash's exact
214
+ // posture; a `/dev/tty` alternative is ecosystem-unprecedented in Node and
215
+ // documentation-discouraged).
216
+ const rl = createInterface({
217
+ input: process.stdin,
218
+ output: process.stdout.isTTY ? process.stdout : process.stderr,
219
+ terminal: process.stdin.isTTY,
220
+ });
86
221
  // 5. Execution loop
87
222
  let run = await store.get(runId);
223
+ // issue #447: which step the operator was answering for, assigned immediately before each
224
+ // question. The block-scoped names below are not visible from the catch, and the catch is
225
+ // where this is needed.
226
+ let promptStep;
88
227
  try {
89
228
  while (!run.terminal_state) {
90
229
  // Handle open gate
@@ -105,6 +244,7 @@ export const runCommand = new Command('run')
105
244
  definition,
106
245
  registry,
107
246
  });
247
+ promptStep = g.step_name;
108
248
  const raw = await rl.question(` Choice [${g.choices.join('/')}]: `).finally(() => {
109
249
  clearExpiryTimer();
110
250
  });
@@ -123,14 +263,28 @@ export const runCommand = new Command('run')
123
263
  }
124
264
  else {
125
265
  console.error(` ✗ ${respondResult.errors.join(', ')}\n`);
126
- break;
266
+ // issue #468 — a FRESH read, not a break: most of this arm's members are a live
267
+ // gate re-asking (a typo, a stale choice) — rl.question blocks, no hot spin. The
268
+ // members that are NOT retryable (the gate/run moved or terminalized elsewhere) are
269
+ // exactly what this read converges: the next iteration sees the real state and
270
+ // either re-prompts honestly or reaches the stall/tail. Mirrors the ok arm above.
271
+ run = await store.get(runId);
127
272
  }
128
273
  continue;
129
274
  }
130
275
  const eligibleSteps = findEligibleSteps(definition, run);
131
276
  if (eligibleSteps.length === 0) {
132
277
  console.error(`\nNo eligible steps in phase '${run.run_phase}'. Workflow stalled.`);
133
- break;
278
+ // issue #468 — hands the run back with a truthful map instead of silently exiting 0.
279
+ // A fresh read: the loop's own snapshot is already current here (nothing awaited
280
+ // since the last read reached this branch in the same iteration), but the fresh read
281
+ // is the doctrine this file already keeps for every detach point (#447) — kept for
282
+ // consistency, not because a staleness gap is constructible in this spot.
283
+ const record = await store.get(runId);
284
+ console.error(renderDetachMap(record, promptStep, { headline: 'Workflow stalled' }));
285
+ // process.exit SKIPS the finally (the catch's own rule, below), so close explicitly.
286
+ rl.close();
287
+ process.exit(1);
134
288
  }
135
289
  // Take the first eligible step (linear workflow for dev mode)
136
290
  const stepName = eligibleSteps[0];
@@ -139,8 +293,8 @@ export const runCommand = new Command('run')
139
293
  // Build dispatcher output based on execution type
140
294
  let userOutput;
141
295
  if (stepDef.execution === 'agent') {
142
- const raw = await rl.question(' Agent output JSON (Enter for {}): ');
143
- userOutput = raw.trim() === '' ? {} : JSON.parse(raw);
296
+ promptStep = stepName;
297
+ userOutput = await askJsonObject(rl, ' Agent output JSON (Enter for {}): ');
144
298
  }
145
299
  else {
146
300
  // auto step
@@ -149,8 +303,8 @@ export const runCommand = new Command('run')
149
303
  : stepDef.uses_service !== undefined
150
304
  ? `service: ${stepDef.uses_service}`
151
305
  : 'auto';
152
- const raw = await rl.question(` Mock output (${hint}) — JSON (Enter for {}): `);
153
- userOutput = raw.trim() === '' ? {} : JSON.parse(raw);
306
+ promptStep = stepName;
307
+ userOutput = await askJsonObject(rl, ` Mock output (${hint}) JSON (Enter for {}): `);
154
308
  }
155
309
  const dispatcher = async () => userOutput;
156
310
  const result = await executeChain(store, definition, {
@@ -178,15 +332,95 @@ export const runCommand = new Command('run')
178
332
  }
179
333
  else {
180
334
  console.error(` ✗ ${result.status}: ${result.errors.join(', ')}\n`);
181
- break;
335
+ // issue #468 — a FRESH read, not a break: below the validation-exhaustion threshold
336
+ // the step is still eligible and this re-prompts it honestly; AT the threshold the
337
+ // run just terminalized in the store, and only a fresh read lets the while condition
338
+ // see that and exit to the tail — a bare continue would re-ask a dead run forever
339
+ // (verified: the mock chain exhausts and the answer never lands anywhere real).
340
+ run = await store.get(runId);
182
341
  }
183
342
  }
184
- if (run.terminal_state) {
185
- console.log(`Run complete. Phase: ${run.run_phase}`);
343
+ // Loop-head invariant (issue #468): exactly two exits from here — the while condition
344
+ // (terminal) and the stall (mapped + exit 1). Every ✗ arm above re-reads then
345
+ // continues; no `break` remains in this loop.
346
+ }
347
+ catch (err) {
348
+ // issue #447 — the operator cancelled the prompt. Ctrl-D at a pending `rl.question`
349
+ // rejects with an AbortError carrying `code: 'ABORT_ERR'`. Nothing awaits
350
+ // `program.parse()`, so today that surfaces as an unhandled-rejection stack: a saved run
351
+ // that looks like a crash.
352
+ //
353
+ // BOTH Ctrl-D and Ctrl-C land here in EVERY wiring now (issue #458): readline's raw/
354
+ // terminal mode is keyed on stdin's TTY-ness at the `createInterface` call above — the
355
+ // #426 guard makes that an invariant `true` here, and terminal mode is the only route
356
+ // into node's fixed ABORT_ERR abort path (nodejs/node#54030). Before #458, terminal mode
357
+ // defaulted to `output.isTTY` instead, so a piped stdout left the pty cooked — history,
358
+ // not the present: ^C died on the raw ISIG signal path (measured then: exit 130, no map)
359
+ // and ^D drained the loop silently to a false exit 0 (the non-terminal case node closed
360
+ // not_planned, nodejs/node#60344) — both dead now, in every wiring.
361
+ //
362
+ // One timing caveat, worth recording because it produced a confident wrong answer during
363
+ // this work: the pty is COOKED until readline switches it, so a ^C delivered before that
364
+ // switch takes the cooked ISIG path and kills the process before any JS runs. A scripted
365
+ // `printf '\x03' | …` hits that window; the same harness with the byte delayed a second
366
+ // rejects ABORT_ERR-coded as expected. Cooked-mode ^D persists in the stream as EOF and
367
+ // still ends up ABORT_ERR-coded, which is exactly why it looked like a valid control and
368
+ // was not. No claim here about anyone typing that fast.
369
+ //
370
+ // Keyed on the CODE alone, never the message, which names the trigger and varies.
371
+ //
372
+ // The classification is precise TODAY and the precision is not free: a handler that
373
+ // out-throws is re-coded ENGINE_HANDLER_FAILED (execution-loop.ts), every engine throw
374
+ // is WorkflowError-coded and none uses ABORT_ERR, and the gate-expiry timer contains
375
+ // its own errors. So ABORT_ERR reaching here means the prompt, and only the prompt.
376
+ // ADDING ANY AbortSignal-CONSUMING AWAIT TO THIS LOOP REQUIRES RE-ESTABLISHING THAT.
377
+ if (err?.code === 'ABORT_ERR') {
378
+ // A FRESH read, not the loop's `run`: while this process sat blocked on the prompt,
379
+ // another terminal's `realm run respond` or an expiry enactment may have moved it —
380
+ // the #291 race. The map is only as good as the state it forks on.
381
+ let record;
382
+ try {
383
+ record = await store.get(runId);
384
+ }
385
+ catch (getErr) {
386
+ // The same concurrent-writer reality that makes the fresh read necessary can also
387
+ // make it FAIL — a record purged from another terminal mid-prompt. Without this arm
388
+ // the new cancel path would crash with exactly the stack this feature exists to
389
+ // remove. `inspect` still earns its line: it is the only read surface, and its own
390
+ // answer for a missing record is a clean not-found rather than a stack.
391
+ const message = getErr instanceof Error ? getErr.message : String(getErr);
392
+ console.error(`Prompt cancelled — detached from run '${runId}'. Its record could not be re-read: ${message}. Inspect: realm run inspect ${runId}`);
393
+ rl.close();
394
+ process.exit(1);
395
+ }
396
+ console.error(renderDetachMap(record, promptStep));
397
+ // process.exit SKIPS the finally, so close explicitly. (rl.close is idempotent, so
398
+ // the double-close on any path that reaches both is harmless — probed.)
399
+ rl.close();
400
+ // Exit 1, not 130: readline consumed the keypress and the process was never signalled,
401
+ // so 130 would claim a death that did not happen.
402
+ process.exit(1);
186
403
  }
404
+ throw err;
187
405
  }
188
406
  finally {
189
407
  rl.close();
190
408
  }
409
+ // issue #468 — the exit code tells the truth. `run` is declared outside the try, so by the
410
+ // time control reaches here the finally above has already closed `rl` on every path that
411
+ // gets this far (the catch's ABORT_ERR arm exits directly and never falls through to here).
412
+ // Only the while condition being false gets here — the stall exits from inside the try
413
+ // above — so `run.terminal_state` is always true at this point.
414
+ if (deriveRunPhase(run) === 'completed') {
415
+ console.log(`Run complete. Phase: ${run.run_phase}`);
416
+ // NATURAL RETURN — never process.exit(0): three declared controls (run-detach.test.ts's
417
+ // R1/R2/R3) pin the completed path as an unwrapped, un-exited resolution.
418
+ // completed-with-failed-steps (the #302 world) exits 0 too, here — outcome-keyed,
419
+ // consistent with the engine's own seal ruling; #304's run-health finding +
420
+ // terminal_reason are the disclosure channel, not this exit code.
421
+ return;
422
+ }
423
+ console.log(`Run complete. Phase: ${run.run_phase}`);
424
+ process.exit(1);
191
425
  });
192
426
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,wBAAwB,CAAC;AAGjF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAe9F;AAWD,eAAO,MAAM,WAAW,SA+DpB,CAAC"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,wBAAwB,CAAC;AAGjF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAe9F;AAWD,eAAO,MAAM,WAAW,SA2GpB,CAAC"}
@@ -3,7 +3,8 @@ import { Command } from 'commander';
3
3
  import chalk from 'chalk';
4
4
  import { existsSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
- import { loadWorkflowFromFile } from '@sensigo/realm';
6
+ import { loadWorkflowFromFileWithDiagnostics, renderLoaderWarning, WorkflowError, } from '@sensigo/realm';
7
+ import { renderLoadFailure } from '../lib/loader-warnings.js';
7
8
  import { runFixtureTests } from '@sensigo/realm-testing';
8
9
  import { loadProjectExtensions } from '../extensions/load-project-extensions.js';
9
10
  /**
@@ -46,18 +47,48 @@ export const testCommand = new Command('test')
46
47
  }
47
48
  let results;
48
49
  try {
50
+ // issue #450: load SILENTLY and render once. The default `loadWorkflowFromFile` prints as
51
+ // it loads, and the fixture runner loaded the same file again — so every warning appeared
52
+ // twice.
53
+ const { definition, warnings } = loadWorkflowFromFileWithDiagnostics(resolveWorkflowFilePath(workflowPath));
54
+ // PLACEMENT IS LOAD-BEARING: this loop must stay ABOVE the extensions load below. The
55
+ // printing wrapper it replaces emitted before extensions loading could throw, so on an
56
+ // extensions failure the operator still saw the workflow's own warnings. Moved below, every
57
+ // warning on that path would vanish silently.
58
+ //
59
+ // And renderLoaderWarning directly, NOT printLoaderWarnings: historically that helper
60
+ // rewrote `— ignored` to `— REFUSED below` for codes the boundary commands refuse, and
61
+ // post-#170 that includes the unknown-key family. `realm workflow test` is
62
+ // execution-LENIENT — it proceeds and can pass — so "REFUSED below" above a passing run
63
+ // would have been a false statement about what just happened. Issue #540 deleted that
64
+ // substitution — printLoaderWarnings now renders identically to this loop — but `test`
65
+ // keeps its own direct loop rather than adopting the helper (kept as two call shapes on
66
+ // purpose, see #542).
67
+ for (const warning of warnings)
68
+ console.warn(renderLoaderWarning(warning));
49
69
  // Resolve project extensions so custom HANDLERS run real and custom ADAPTERS get
50
70
  // fail-if-unmocked tripwires inside the fixture runner. Extension-free workflows
51
71
  // (without an override) pass no `extensions` — current behavior byte-for-byte.
52
- const definition = loadWorkflowFromFile(resolveWorkflowFilePath(workflowPath));
53
72
  // Sentinel mode: fixtures never see real credentials — secret-bearing handlers are
54
73
  // constructed with sentinels and FAIL the fixture on first execution (runner-side).
55
- const loaded = await loadProjectExtensions(definition, {
56
- ...(opts.extensionsModule !== undefined ? { overrideModule: opts.extensionsModule } : {}),
57
- secretMode: 'sentinel',
58
- });
74
+ let loaded;
75
+ try {
76
+ loaded = await loadProjectExtensions(definition, {
77
+ ...(opts.extensionsModule !== undefined ? { overrideModule: opts.extensionsModule } : {}),
78
+ secretMode: 'sentinel',
79
+ });
80
+ }
81
+ catch (err) {
82
+ // issue #466 — the sentence run/validate/register/watch/agent already print for this
83
+ // class (#445/#451/#465), wrapped in its own try so it discriminates from the outer
84
+ // catch's family split below without a shared tag (this call is the only extension-load
85
+ // site test.ts reaches — no #451-style shared helper here).
86
+ console.error(`Error loading extensions: ${err instanceof Error ? err.message : String(err)}`);
87
+ process.exit(1);
88
+ return;
89
+ }
59
90
  for (const warning of loaded.sentinelWarnings ?? [])
60
- console.warn(`⚠ ${warning}`);
91
+ console.warn(`⚠ ${warning}`);
61
92
  const hasExtensionContent = loaded.manifest.modules.length > 0 ||
62
93
  loaded.manifest.adapters.length > 0 ||
63
94
  loaded.manifest.handlers.length > 0 ||
@@ -68,11 +99,23 @@ export const testCommand = new Command('test')
68
99
  results = await runFixtureTests({
69
100
  workflowPath,
70
101
  fixturesPath: opts.fixtures,
102
+ // issue #450: the runner reuses this instead of re-loading (and re-printing) the file.
103
+ definition,
71
104
  ...(extensions !== undefined ? { extensions } : {}),
72
105
  });
73
106
  }
74
107
  catch (err) {
75
- console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
108
+ // issue #425 THE FAMILY SPLIT. An `Invalid workflow:` message announces itself, so it
109
+ // renders verbatim through the shared helper (which also lists a multi-error throw one per
110
+ // line). Everything else this catch can see — a store failure, an unreadable fixtures path —
111
+ // announces nothing on its own, so it keeps the prefix that earns its place (#417). The
112
+ // predicate carries the colon, byte-matching the helper's own check.
113
+ if (err instanceof WorkflowError && err.message.startsWith('Invalid workflow:')) {
114
+ console.error(renderLoadFailure(err));
115
+ }
116
+ else {
117
+ console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
118
+ }
76
119
  process.exit(1);
77
120
  return;
78
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,34 @@
1
1
  import { Command } from 'commander';
2
+ import { type LoaderWarning } from '@sensigo/realm';
3
+ import type { WorkflowDefinition } from '@sensigo/realm';
4
+ /**
5
+ * Advisory (issue A3, never rejects): an auto step declaring `retry:` but no `timeout_seconds`
6
+ * has EVERY attempt bounded by the generous DEFAULT_EXECUTION_TIMEOUT_SECONDS default — a hung
7
+ * attempt can take up to that long before the retry loop even considers the next one. Returns one
8
+ * RETRY_NO_TIMEOUT LoaderWarning per such step (issue #169: folded into the validate accumulator
9
+ * — printed via printLoaderWarnings alongside every other warning — instead of printed directly,
10
+ * so `--strict` and the dormant boundary-reject can see it too).
11
+ *
12
+ * Issue #140 text update: the per-attempt bound this warns about is now ALSO the basis of the
13
+ * step's default total-time cap (`retry.total_timeout_seconds`, when not overridden) — so the
14
+ * "each attempt" wording alone would understate the exposure on a multi-attempt retry (the
15
+ * default cap compounds it: `max_attempts × the default timeout` before the step's own cap even
16
+ * fires). The message is worded to cover both axes without requiring the reader to already know
17
+ * about the cap.
18
+ */
19
+ /** @internal Exported for testing only. */
20
+ export declare function findRetryWithoutExplicitTimeout(definition: WorkflowDefinition): LoaderWarning[];
21
+ /**
22
+ * issue #454 — the severity `--json` reports for every diagnostic. Every mint site in the tree
23
+ * ALREADY resolves severity at construction (`severity: resolveSeverity(code)`,
24
+ * diagnostics.ts:239 and its siblings, under DEFAULT_POLICY — never the `--strict` all-error
25
+ * policy, which is a run mode reported separately in the `strict` block) — so minted ≡ effective
26
+ * for every constructible diagnostic today, and this re-resolution is a GUARD against a future
27
+ * mint or a policy change landing without updating this file, not a live divergence. No real
28
+ * fixture can distinguish the two; only a hand-constructed lying warning can (validate-json.test.ts's
29
+ * U1 cell).
30
+ * @internal Exported for testing only.
31
+ */
32
+ export declare function normalizeDiagnosticSeverity(w: LoaderWarning): LoaderWarning;
2
33
  export declare const validateCommand: Command;
3
34
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmNpC,eAAO,MAAM,eAAe,SAsGxB,CAAC"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAaL,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAuBzD;;;;;;;;;;;;;;GAcG;AACH,2CAA2C;AAC3C,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,kBAAkB,GAAG,aAAa,EAAE,CAwB/F;AAkND;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAE3E;AAubD,eAAO,MAAM,eAAe,SAsMzB,CAAC"}