@dharma-ai-labs/agent-fabric 0.2.171 → 0.2.172

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.
@@ -1,3 +1,4 @@
1
+ import { type NamedSessionStartupFailure } from './namedSessionStartupChild.js';
1
2
  export declare function waitForNamedSessionStartup<T>(input: {
2
3
  step<R>(operation: () => Promise<R>): Promise<R>;
3
4
  assertActive(): Promise<void>;
@@ -5,5 +6,6 @@ export declare function waitForNamedSessionStartup<T>(input: {
5
6
  maximumWaitMs?: number;
6
7
  now?: () => number;
7
8
  sleep?: (milliseconds: number) => Promise<void>;
9
+ readFailure?: () => NamedSessionStartupFailure | undefined;
8
10
  }): Promise<T>;
9
11
  //# sourceMappingURL=namedSessionStartup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"namedSessionStartup.d.ts","sourceRoot":"","sources":["../src/namedSessionStartup.ts"],"names":[],"mappings":"AAAA,wBAAsB,0BAA0B,CAAC,CAAC,EAAE,KAAK,EAAE;IACzD,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBb"}
1
+ {"version":3,"file":"namedSessionStartup.d.ts","sourceRoot":"","sources":["../src/namedSessionStartup.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,0BAA0B,EAAC,MAAM,+BAA+B,CAAC;AAE5G,wBAAsB,0BAA0B,CAAC,CAAC,EAAE,KAAK,EAAE;IACzD,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,0BAA0B,GAAG,SAAS,CAAC;CAC5D,GAAG,OAAO,CAAC,CAAC,CAAC,CA+Bb"}
@@ -1,3 +1,4 @@
1
+ import { isNamedSessionStartupFailure } from './namedSessionStartupChild.js';
1
2
  export async function waitForNamedSessionStartup(input) {
2
3
  const maximumWaitMs = input.maximumWaitMs ?? 120_000;
3
4
  if (!Number.isSafeInteger(maximumWaitMs) || maximumWaitMs < 1 || maximumWaitMs > 120_000) {
@@ -17,12 +18,21 @@ export async function waitForNamedSessionStartup(input) {
17
18
  const result = await input.step(async () => {
18
19
  if (now() >= deadline)
19
20
  return { available: false };
21
+ const refuseFailedChild = () => {
22
+ const failure = input.readFailure?.();
23
+ if (failure !== undefined)
24
+ throw new Error(isNamedSessionStartupFailure(failure) ? failure : 'named_session_startup_failed');
25
+ };
26
+ refuseFailedChild();
27
+ let observation;
20
28
  try {
21
- return { available: true, value: await input.observe() };
29
+ observation = { available: true, value: await input.observe() };
22
30
  }
23
31
  catch {
24
- return { available: false };
32
+ observation = { available: false };
25
33
  }
34
+ refuseFailedChild();
35
+ return observation;
26
36
  });
27
37
  if (now() >= deadline)
28
38
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"namedSessionStartup.js","sourceRoot":"","sources":["../src/namedSessionStartup.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAI,KAOnD;IACC,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,OAAO,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,OAAO,CAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACzG,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;IACvC,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAC7B,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QAC3B,IAAI,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAC7B,oFAAoF;QACpF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO,EAAC,SAAS,EAAE,KAAc,EAAC,CAAC;YAC1D,IAAI,CAAC;gBAAA,OAAO,EAAC,SAAS,EAAE,IAAa,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAC,CAAC;YAAA,CAAC;YACtE,MAAM,CAAC;gBAAA,OAAO,EAAC,SAAS,EAAE,KAAc,EAAC,CAAC;YAAA,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,IAAI,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAC7B,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"namedSessionStartup.js","sourceRoot":"","sources":["../src/namedSessionStartup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAkC,MAAM,+BAA+B,CAAC;AAE5G,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAI,KAQnD;IACC,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,OAAO,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,OAAO,CAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACzG,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;IACvC,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAC7B,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QAC3B,IAAI,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAC7B,oFAAoF;QACpF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO,EAAC,SAAS,EAAE,KAAc,EAAC,CAAC;YAC1D,MAAM,iBAAiB,GAAG,GAAG,EAAE;gBAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtC,IAAI,OAAO,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;YAC/H,CAAC,CAAC;YACF,iBAAiB,EAAE,CAAC;YACpB,IAAI,WAA6D,CAAC;YAClE,IAAI,CAAC;gBAAA,WAAW,GAAG,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAC,CAAC;YAAA,CAAC;YACpE,MAAM,CAAC;gBAAA,WAAW,GAAG,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;YAAA,CAAC;YACzC,iBAAiB,EAAE,CAAC;YACpB,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,IAAI,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAC7B,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAClD,CAAC"}
@@ -92,4 +92,31 @@ test('deadline reached in step preauthorization admits no observation', async ()
92
92
  await assert.rejects(waitForNamedSessionStartup(f.input), /named_session_startup_failed/);
93
93
  assert.equal(f.effects(), 0);
94
94
  });
95
+ test('an owned child failure is preserved rather than hidden behind a full startup timeout', async () => {
96
+ const f = fixture(Infinity, 1000);
97
+ const input = Object.assign(f.input, { readFailure: () => 'named_session_startup_setup_child_unavailable' });
98
+ await assert.rejects(waitForNamedSessionStartup(input), /^Error: named_session_startup_setup_child_unavailable$/);
99
+ assert.equal(f.time(), 250);
100
+ assert.equal(f.effects(), 0);
101
+ });
102
+ test('scope refusal takes priority over inspecting child diagnostics', async () => {
103
+ const f = fixture(Infinity, 1000);
104
+ let diagnosticReads = 0;
105
+ f.input.step = async () => { throw new Error('setup_session_scope_unavailable'); };
106
+ const input = Object.assign(f.input, { readFailure: () => { diagnosticReads++; return 'named_session_startup_child_exited'; } });
107
+ await assert.rejects(waitForNamedSessionStartup(input), /setup_session_scope_unavailable/);
108
+ assert.equal(diagnosticReads, 0);
109
+ });
110
+ test('a child that closes during socket observation cannot produce ready status', async () => {
111
+ const f = fixture(0, 1000);
112
+ let failed = false;
113
+ f.input.observe = async () => { failed = true; return { ok: true }; };
114
+ const input = Object.assign(f.input, { readFailure: () => failed ? 'named_session_startup_child_exited' : undefined });
115
+ await assert.rejects(waitForNamedSessionStartup(input), /named_session_startup_child_exited/);
116
+ });
117
+ test('an unexpected diagnostic value cannot become a secret-bearing error', async () => {
118
+ const f = fixture(0, 1000);
119
+ const input = Object.assign(f.input, { readFailure: () => 'private-secret-placeholder' });
120
+ await assert.rejects(waitForNamedSessionStartup(input), /^Error: named_session_startup_failed$/);
121
+ });
95
122
  //# sourceMappingURL=namedSessionStartup.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"namedSessionStartup.test.js","sourceRoot":"","sources":["../src/namedSessionStartup.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namedSessionStartup.test.js","sourceRoot":"","sources":["../src/namedSessionStartup.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ChildProcess } from 'node:child_process';
2
+ declare const classifications: {
3
+ readonly setup_child_unavailable: "named_session_startup_setup_child_unavailable";
4
+ readonly named_session_registration_invalid: "named_session_startup_registration_invalid";
5
+ readonly named_session_provider_authentication_required: "named_session_startup_provider_authentication_required";
6
+ readonly named_session_workspace_write_not_authorized: "named_session_startup_workspace_write_not_authorized";
7
+ readonly named_session_trust_scope_mismatch: "named_session_startup_trust_scope_mismatch";
8
+ readonly codex_session_sandbox_unqualified: "named_session_startup_sandbox_unqualified";
9
+ };
10
+ export type NamedSessionStartupFailure = typeof classifications[keyof typeof classifications] | 'named_session_startup_child_spawn_failed' | 'named_session_startup_child_exited' | 'named_session_startup_child_failed';
11
+ export declare function isNamedSessionStartupFailure(value: unknown): value is NamedSessionStartupFailure;
12
+ /** Observe only the freshly spawned handle. Raw stderr stays bounded in memory,
13
+ * never reaches logs/receipts, and is discarded when startup observation ends. */
14
+ export declare function observeNamedSessionStartupChild(child: ChildProcess): Readonly<{
15
+ readFailure: () => NamedSessionStartupFailure | undefined;
16
+ dispose(): void;
17
+ }>;
18
+ export {};
19
+ //# sourceMappingURL=namedSessionStartupChild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedSessionStartupChild.d.ts","sourceRoot":"","sources":["../src/namedSessionStartupChild.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGrD,QAAA,MAAM,eAAe;;;;;;;CAOX,CAAC;AACX,MAAM,MAAM,0BAA0B,GAAG,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,GACzF,0CAA0C,GAAG,oCAAoC,GACjF,oCAAoC,CAAC;AAGzC,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,0BAA0B,CAEhG;AAED;kFACkF;AAClF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,YAAY;;;GA4BlE"}
@@ -0,0 +1,62 @@
1
+ const classifications = {
2
+ setup_child_unavailable: 'named_session_startup_setup_child_unavailable',
3
+ named_session_registration_invalid: 'named_session_startup_registration_invalid',
4
+ named_session_provider_authentication_required: 'named_session_startup_provider_authentication_required',
5
+ named_session_workspace_write_not_authorized: 'named_session_startup_workspace_write_not_authorized',
6
+ named_session_trust_scope_mismatch: 'named_session_startup_trust_scope_mismatch',
7
+ codex_session_sandbox_unqualified: 'named_session_startup_sandbox_unqualified',
8
+ };
9
+ const codes = new Set([...Object.values(classifications), 'named_session_startup_child_spawn_failed',
10
+ 'named_session_startup_child_exited', 'named_session_startup_child_failed']);
11
+ export function isNamedSessionStartupFailure(value) {
12
+ return typeof value === 'string' && codes.has(value);
13
+ }
14
+ /** Observe only the freshly spawned handle. Raw stderr stays bounded in memory,
15
+ * never reaches logs/receipts, and is discarded when startup observation ends. */
16
+ export function observeNamedSessionStartupChild(child) {
17
+ const buffer = Buffer.alloc(4096);
18
+ let length = 0, overflow = false, disposed = false, failure;
19
+ const data = (chunk) => {
20
+ if (disposed || overflow)
21
+ return;
22
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
23
+ if (length + bytes.length > buffer.length) {
24
+ overflow = true;
25
+ buffer.fill(0);
26
+ length = 0;
27
+ return;
28
+ }
29
+ bytes.copy(buffer, length);
30
+ length += bytes.length;
31
+ };
32
+ const error = () => { failure = 'named_session_startup_child_spawn_failed'; };
33
+ const close = (exit) => {
34
+ if (failure)
35
+ return;
36
+ failure = exit === 0 || exit === null ? 'named_session_startup_child_exited' : 'named_session_startup_child_failed';
37
+ if (!overflow && exit !== 0 && exit !== null) {
38
+ const last = buffer.subarray(0, length).toString('utf8').trim().split(/\r?\n/).at(-1);
39
+ if (last && Object.hasOwn(classifications, last))
40
+ failure = classifications[last];
41
+ }
42
+ buffer.fill(0);
43
+ length = 0;
44
+ };
45
+ child.stderr?.on('data', data);
46
+ child.on('error', error);
47
+ child.on('close', close);
48
+ return Object.freeze({ readFailure: () => failure, dispose() {
49
+ if (disposed)
50
+ return;
51
+ disposed = true;
52
+ buffer.fill(0);
53
+ length = 0;
54
+ child.stderr?.removeListener('data', data);
55
+ child.removeListener('error', error);
56
+ child.removeListener('close', close);
57
+ child.stderr?.resume();
58
+ // A detached worker's diagnostic pipe must not keep its launcher alive.
59
+ child.stderr?.unref?.();
60
+ } });
61
+ }
62
+ //# sourceMappingURL=namedSessionStartupChild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedSessionStartupChild.js","sourceRoot":"","sources":["../src/namedSessionStartupChild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=namedSessionStartupChild.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedSessionStartupChild.test.d.ts","sourceRoot":"","sources":["../src/namedSessionStartupChild.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ import assert from 'node:assert/strict';
2
+ import { execFile, spawn } from 'node:child_process';
3
+ import { EventEmitter, once } from 'node:events';
4
+ import { PassThrough } from 'node:stream';
5
+ import test from 'node:test';
6
+ import { promisify } from 'node:util';
7
+ import { isNamedSessionStartupFailure, observeNamedSessionStartupChild } from './namedSessionStartupChild.js';
8
+ function fixture() {
9
+ const child = Object.assign(new EventEmitter(), { stderr: new PassThrough() });
10
+ return { child, observed: observeNamedSessionStartupChild(child) };
11
+ }
12
+ test('real owned subprocess classifies an exact fixed startup error without exposing raw stderr', async () => {
13
+ const child = spawn(process.execPath, ['-e', 'process.stderr.write("setup_child_unavailable\\n");process.exitCode=2'], { stdio: ['ignore', 'ignore', 'pipe'] });
14
+ const observed = observeNamedSessionStartupChild(child);
15
+ try {
16
+ await once(child, 'close');
17
+ assert.equal(observed.readFailure(), 'named_session_startup_setup_child_unavailable');
18
+ assert.deepEqual(Object.keys(observed).sort(), ['dispose', 'readFailure']);
19
+ }
20
+ finally {
21
+ observed.dispose();
22
+ }
23
+ });
24
+ for (const content of ['password=secret-placeholder', 'setup_child_unavailable secret-placeholder',
25
+ 'x'.repeat(4097) + '\nsetup_child_unavailable', '\u0000setup_child_unavailable']) {
26
+ test(`private or oversized stderr is withheld (${content.length} bytes)`, () => {
27
+ const f = fixture();
28
+ f.child.stderr.write(content);
29
+ f.child.emit('close', 2);
30
+ assert.equal(f.observed.readFailure(), 'named_session_startup_child_failed');
31
+ assert.equal(JSON.stringify(f.observed).includes('secret-placeholder'), false);
32
+ f.observed.dispose();
33
+ });
34
+ }
35
+ test('a live child is never declared stopped from stderr alone', () => {
36
+ const f = fixture();
37
+ f.child.stderr.write('setup_child_unavailable\n');
38
+ assert.equal(f.observed.readFailure(), undefined);
39
+ f.observed.dispose();
40
+ });
41
+ test('clean exit before readiness and spawn error have distinct fixed categories', () => {
42
+ const a = fixture();
43
+ a.child.emit('close', 0);
44
+ assert.equal(a.observed.readFailure(), 'named_session_startup_child_exited');
45
+ a.observed.dispose();
46
+ const b = fixture();
47
+ b.child.emit('error', new Error('secret-placeholder'));
48
+ b.child.emit('close', -1);
49
+ assert.equal(b.observed.readFailure(), 'named_session_startup_child_spawn_failed');
50
+ b.observed.dispose();
51
+ });
52
+ test('disposal removes only these listeners and drains without collecting subsequent output', () => {
53
+ const f = fixture();
54
+ const sibling = () => { };
55
+ f.child.on('close', sibling);
56
+ f.observed.dispose();
57
+ f.observed.dispose();
58
+ f.child.stderr.write('setup_child_unavailable\n');
59
+ f.child.emit('close', 2);
60
+ assert.equal(f.observed.readFailure(), undefined);
61
+ assert.deepEqual(f.child.listeners('close'), [sibling]);
62
+ assert.equal(f.child.stderr.listenerCount('data'), 0);
63
+ });
64
+ test('only exact fixed diagnostic codes qualify; private strings are rejected', () => {
65
+ assert.equal(isNamedSessionStartupFailure('named_session_startup_child_failed'), true);
66
+ for (const value of ['secret-placeholder', 'named_session_startup_child_failed\nsecret', {}, null])
67
+ assert.equal(isNamedSessionStartupFailure(value), false);
68
+ });
69
+ test('disposing a live detached worker pipe lets the original launcher exit normally', async () => {
70
+ const moduleUrl = new URL('./namedSessionStartupChild.js', import.meta.url).href;
71
+ const source = `import {spawn} from 'node:child_process';
72
+ import {observeNamedSessionStartupChild} from ${JSON.stringify(moduleUrl)};
73
+ const child=spawn(process.execPath,['-e','setTimeout(()=>{},5000)'],{detached:true,stdio:['ignore','ignore','pipe']});
74
+ process.once('SIGTERM',()=>{child.kill('SIGTERM');process.exitCode=1;});
75
+ const observed=observeNamedSessionStartupChild(child);observed.dispose();child.unref();
76
+ console.log('startup_observation_disposed');`;
77
+ const result = await promisify(execFile)(process.execPath, ['--input-type=module', '-e', source], { timeout: 2000 });
78
+ assert.equal(result.stdout.trim(), 'startup_observation_disposed');
79
+ });
80
+ //# sourceMappingURL=namedSessionStartupChild.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedSessionStartupChild.test.js","sourceRoot":"","sources":["../src/namedSessionStartupChild.test.ts"],"names":[],"mappings":"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"}
@@ -405,6 +405,42 @@ function bootstrapFlags(complete = false) {
405
405
  flags.set('complete', true);
406
406
  return flags;
407
407
  }
408
+ test('public claim approval prints the validated device fingerprint rather than decoding challenge fields', async () => {
409
+ for (const noBrowser of [false, true]) {
410
+ const f = bootstrapDependencies({});
411
+ const messages = [];
412
+ f.dependencies.process = { platform: 'linux', env: { USER: 'fixture' },
413
+ stderr: { write: (message) => { messages.push(message); return true; } } };
414
+ const approval = {
415
+ url: 'https://fixture.invalid/portal/agent-fabric/setup-claim-approval#request=public_fixture',
416
+ expiresAt: '2026-10-07T20:12:27.938Z',
417
+ fingerprint: `sha256:${'b'.repeat(64)}`,
418
+ repositoryFingerprint: `sha256:${'e'.repeat(64)}`,
419
+ };
420
+ f.dependencies.claimSetupReference = async (input) => {
421
+ await input.onRecipientApprovalRequired(approval);
422
+ throw new Error('approval_fixture_stop_before_enrollment');
423
+ };
424
+ const flags = bootstrapFlags(true);
425
+ flags.delete('grant');
426
+ flags.set('setup-reference', '11111111-1111-4111-8111-111111111111');
427
+ flags.set('setup-recipient-membership-id', '22222222-2222-4222-8222-222222222222');
428
+ flags.set('setup-scope-digest', `sha256:${'d'.repeat(64)}`);
429
+ flags.set('setup-contract-digest', `sha256:${'a'.repeat(64)}`);
430
+ if (noBrowser)
431
+ flags.set('no-browser', true);
432
+ await assert.rejects((await caller('bootstrap', f.dependencies))(flags), /approval_fixture_stop_before_enrollment/);
433
+ const output = messages.join('');
434
+ assert.ok(output.includes(`Device fingerprint: ${approval.fingerprint}`));
435
+ assert.ok(output.includes(`Repository fingerprint: ${approval.repositoryFingerprint}`));
436
+ assert.ok(output.includes(approval.expiresAt));
437
+ assert.ok(output.includes(approval.url));
438
+ assert.doesNotMatch(output, /fixture_token|fixture_private_grant|privateJwk|authenticator/);
439
+ assert.equal(f.calls.filter(name => name === 'open_approval').length, noBrowser ? 0 : 1);
440
+ assert.equal(f.calls.includes('save_token'), false);
441
+ assert.equal(f.calls.includes('onboard'), false);
442
+ }
443
+ });
408
444
  test('private grant entry follows preflight, uses the unchanged redemption scope and stays out of onboard flags', async () => {
409
445
  const f = bootstrapDependencies({ ok: true, stage: 'ready', localStage: 'ready', sharedRepositoryReady: true });
410
446
  const flags = bootstrapFlags();