@dharma-ai-labs/agent-fabric 0.2.189 → 0.2.191

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 (59) hide show
  1. package/AGENT_FABRIC_ONBOARDING.md +4 -2
  2. package/dist/cliVersionContract.test.d.ts +2 -0
  3. package/dist/cliVersionContract.test.d.ts.map +1 -0
  4. package/dist/cliVersionContract.test.js +17 -0
  5. package/dist/cliVersionContract.test.js.map +1 -0
  6. package/dist/codexSetupLaunchReservation.d.ts +12 -0
  7. package/dist/codexSetupLaunchReservation.d.ts.map +1 -0
  8. package/dist/codexSetupLaunchReservation.js +76 -0
  9. package/dist/codexSetupLaunchReservation.js.map +1 -0
  10. package/dist/codexSetupLaunchReservation.test.d.ts +2 -0
  11. package/dist/codexSetupLaunchReservation.test.d.ts.map +1 -0
  12. package/dist/codexSetupLaunchReservation.test.js +168 -0
  13. package/dist/codexSetupLaunchReservation.test.js.map +1 -0
  14. package/dist/codexSetupNativeHost.test.js +18 -0
  15. package/dist/codexSetupNativeHost.test.js.map +1 -1
  16. package/dist/codexSetupOwnedConnection.d.ts +4 -1
  17. package/dist/codexSetupOwnedConnection.d.ts.map +1 -1
  18. package/dist/codexSetupOwnedConnection.js +16 -3
  19. package/dist/codexSetupOwnedConnection.js.map +1 -1
  20. package/dist/codexSetupOwnedConnection.test.js +14 -0
  21. package/dist/codexSetupOwnedConnection.test.js.map +1 -1
  22. package/dist/codexSetupPortalIngress.test.d.ts +2 -0
  23. package/dist/codexSetupPortalIngress.test.d.ts.map +1 -0
  24. package/dist/codexSetupPortalIngress.test.js +355 -0
  25. package/dist/codexSetupPortalIngress.test.js.map +1 -0
  26. package/dist/codexSetupPortalPreparation.d.ts +28 -0
  27. package/dist/codexSetupPortalPreparation.d.ts.map +1 -0
  28. package/dist/codexSetupPortalPreparation.js +101 -0
  29. package/dist/codexSetupPortalPreparation.js.map +1 -0
  30. package/dist/codexSetupPortalPreparation.test.d.ts +2 -0
  31. package/dist/codexSetupPortalPreparation.test.d.ts.map +1 -0
  32. package/dist/codexSetupPortalPreparation.test.js +173 -0
  33. package/dist/codexSetupPortalPreparation.test.js.map +1 -0
  34. package/dist/codexSetupPublicStdin.d.ts +6 -0
  35. package/dist/codexSetupPublicStdin.d.ts.map +1 -0
  36. package/dist/codexSetupPublicStdin.js +36 -0
  37. package/dist/codexSetupPublicStdin.js.map +1 -0
  38. package/dist/codexSetupPublicStdin.test.d.ts +2 -0
  39. package/dist/codexSetupPublicStdin.test.d.ts.map +1 -0
  40. package/dist/codexSetupPublicStdin.test.js +40 -0
  41. package/dist/codexSetupPublicStdin.test.js.map +1 -0
  42. package/dist/codexSetupUserPrompt.d.ts +2 -0
  43. package/dist/codexSetupUserPrompt.d.ts.map +1 -1
  44. package/dist/codexSetupUserPrompt.js +15 -8
  45. package/dist/codexSetupUserPrompt.js.map +1 -1
  46. package/dist/codexSetupUserPrompt.test.js +7 -0
  47. package/dist/codexSetupUserPrompt.test.js.map +1 -1
  48. package/dist/index.d.ts +15 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +187 -4
  51. package/dist/index.js.map +1 -1
  52. package/dist/onboardingContract.test.js +9 -0
  53. package/dist/onboardingContract.test.js.map +1 -1
  54. package/dist/schemas/setup-claim-request.schema.json +10 -0
  55. package/dist/schemas/setup-host-preparation.schema.json +51 -0
  56. package/dist/schemas/setup-launch-reservation.schema.json +29 -0
  57. package/dist/usage.js +1 -1
  58. package/dist/usage.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,101 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { resolve } from 'node:path';
3
+ import { setTimeout as delay } from 'node:timers/promises';
4
+ import { canonicalize, validateContract } from '@dharma-ai-labs/agent-fabric-contracts';
5
+ import { captureCodexSetupPromptBinding, captureCodexSetupUserPrompt, capturePublicCodexSetupPrompt } from './codexSetupUserPrompt.js';
6
+ const fail = () => { throw new Error('codex_setup_portal_preparation_unavailable'); };
7
+ /** A public HTTPS receipt is presentation binding, not a host execution lease. */
8
+ export async function requestCodexSetupHostPreparation(input) {
9
+ // Capture before awaiting: no secret-bearing prose may reach the endpoint.
10
+ const initialUserPrompt = capturePublicCodexSetupPrompt(input.initialUserPrompt);
11
+ const pins = [...initialUserPrompt.replace(/\r\n/g, '\n').matchAll(/^Preparation context SHA256: ([a-f0-9]{64})\.$/gm)];
12
+ if (pins.length !== 1)
13
+ return fail();
14
+ const originalContextPin = pins[0][1];
15
+ const { origin, organizationId, setupReference, cliVersion } = input;
16
+ const initialUserPromptSha256 = createHash('sha256').update(initialUserPrompt, 'utf8').digest('hex');
17
+ const promptSha256 = createHash('sha256').update(initialUserPrompt.replace(/\r\n/g, '\n'), 'utf8').digest('hex');
18
+ const now = input.now ?? Date.now;
19
+ const signal = AbortSignal.any([input.signal, AbortSignal.timeout(15000)]);
20
+ let reader;
21
+ const cancel = () => { void reader?.cancel().catch(() => { }); };
22
+ try {
23
+ const url = new URL(origin);
24
+ if (url.origin !== origin || url.protocol !== 'https:' || url.username || url.password
25
+ || !/^org_[A-Za-z0-9]+$/.test(organizationId)
26
+ || !/^[a-f0-9]{8}-[a-f0-9]{4}-[1-8][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/.test(setupReference)
27
+ || !/^\d+\.\d+\.\d+$/.test(cliVersion) || signal.aborted)
28
+ return fail();
29
+ const response = await (input.fetcher ?? fetch)(origin + '/api/v1/agent-fabric/bootstrap/setup-claim', {
30
+ method: 'POST', redirect: 'error', credentials: 'omit', signal,
31
+ headers: { 'Content-Type': 'application/json' },
32
+ body: JSON.stringify({ action: 'prepare_host', organizationId, setupReference, promptSha256 }),
33
+ });
34
+ if (signal.aborted || response.status !== 200 || !response.body
35
+ || !response.headers.get('content-type')?.toLowerCase().startsWith('application/json')
36
+ || Number(response.headers.get('content-length')) > 65536)
37
+ return fail();
38
+ reader = response.body.getReader();
39
+ signal.addEventListener('abort', cancel, { once: true });
40
+ const chunks = [];
41
+ let size = 0;
42
+ while (true) {
43
+ if (signal.aborted)
44
+ return fail();
45
+ const part = await reader.read();
46
+ if (part.done)
47
+ break;
48
+ size += part.value.byteLength;
49
+ if (size > 65536) {
50
+ await reader.cancel();
51
+ return fail();
52
+ }
53
+ chunks.push(part.value);
54
+ }
55
+ const value = JSON.parse(Buffer.concat(chunks).toString('utf8'));
56
+ const checked = await validateContract(resolve(import.meta.dirname, 'schemas'), 'https://schemas.dharma-ai.io/setup-host-preparation/v1', value);
57
+ if (!checked.ok || signal.aborted)
58
+ return fail();
59
+ const prepared = value, at = now();
60
+ const contextSha256 = createHash('sha256').update('dharma.setup-host-context/v1\0').update(canonicalize({
61
+ cliVersion: prepared.cliVersion, expiresAt: prepared.expiresAt, binding: prepared.binding, context: prepared.context
62
+ })).digest('hex');
63
+ if (contextSha256 !== originalContextPin || prepared.integrity.contextSha256 !== originalContextPin)
64
+ return fail();
65
+ const issued = Date.parse(prepared.preparedAt), expires = Date.parse(prepared.expiresAt);
66
+ if (prepared.context.origin !== origin || prepared.context.organizationId !== organizationId
67
+ || prepared.context.setupReference !== setupReference || prepared.cliVersion !== cliVersion
68
+ || prepared.promptSha256 !== promptSha256 || !Number.isFinite(at)
69
+ || new Date(issued).toISOString() !== prepared.preparedAt
70
+ || new Date(expires).toISOString() !== prepared.expiresAt
71
+ || issued - at > 5000 || expires <= at || expires <= issued || expires - issued > 900000)
72
+ return fail();
73
+ const binding = captureCodexSetupPromptBinding(prepared.binding);
74
+ const intent = Object.freeze({
75
+ schema: 'dharma.codex-setup-intent/v1', ...prepared.context,
76
+ operationId: randomUUID(), hostContextId: randomUUID(),
77
+ issuedAt: prepared.preparedAt, expiresAt: prepared.expiresAt,
78
+ });
79
+ if (captureCodexSetupUserPrompt(initialUserPrompt, intent, binding) !== initialUserPrompt)
80
+ return fail();
81
+ // Match the claim client's bounded skew wait; never change the local clock
82
+ // or admit effects before the response's strict issued-at boundary.
83
+ if (issued > at)
84
+ await (input.sleep ?? ((ms, ownedSignal) => delay(ms, undefined, { signal: ownedSignal })))(issued - at, signal);
85
+ const currentTime = now();
86
+ if (signal.aborted || !Number.isFinite(currentTime) || currentTime < issued || currentTime >= expires)
87
+ return fail();
88
+ // No provider, key store, setup journal or enrollment operation is entered.
89
+ return Object.freeze({ effects: false, grantRedeemed: false,
90
+ initialUserPrompt, initialUserPromptSha256, promptSha256, portalContextSha256: originalContextPin, binding, intent,
91
+ requiresHostExecutionAdmission: true, requiresRecipientApproval: true });
92
+ }
93
+ catch {
94
+ return fail();
95
+ }
96
+ finally {
97
+ signal.removeEventListener('abort', cancel);
98
+ reader?.releaseLock();
99
+ }
100
+ }
101
+ //# sourceMappingURL=codexSetupPortalPreparation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSetupPortalPreparation.js","sourceRoot":"","sources":["../src/codexSetupPortalPreparation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codexSetupPortalPreparation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSetupPortalPreparation.test.d.ts","sourceRoot":"","sources":["../src/codexSetupPortalPreparation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,173 @@
1
+ import assert from 'node:assert/strict';
2
+ import { createHash } from 'node:crypto';
3
+ import { canonicalize } from '@dharma-ai-labs/agent-fabric-contracts';
4
+ import test from 'node:test';
5
+ import { requestCodexSetupHostPreparation } from './codexSetupPortalPreparation.js';
6
+ const now = Date.parse('2030-01-01T00:00:00.000Z');
7
+ const reference = '11111111-1111-4111-8111-111111111111';
8
+ const membership = '22222222-2222-4222-8222-222222222222';
9
+ const binding = { recipientEmail: 'synthetic@example.test', repositoryRemoteUrl: 'https://github.com/example/synthetic.git' };
10
+ const fingerprint = `sha256:${'a'.repeat(64)}`;
11
+ const context = { origin: 'https://www.dharma-ai.io', organizationId: 'org_fixture',
12
+ setupReference: reference, recipientMembershipId: membership, repositoryFingerprint: fingerprint,
13
+ policyRevision: 'policy-v1', scopeDigest: `sha256:${'b'.repeat(64)}`, contractDigest: `sha256:${'c'.repeat(64)}` };
14
+ const contextHash = (value) => createHash('sha256').update('dharma.setup-host-context/v1\0').update(canonicalize({
15
+ cliVersion: value.cliVersion, expiresAt: value.expiresAt, binding: value.binding, context: value.context
16
+ })).digest('hex');
17
+ const originalPin = contextHash({ cliVersion: '0.2.190', expiresAt: '2030-01-01T00:15:00.000Z', binding, context });
18
+ const prompt = '# Dharma Agent Fabric \u2014 one-prompt source setup\n'
19
+ + `Recipient: ${binding.recipientEmail}. Organization: org_fixture.\n`
20
+ + `Selected repository: ${binding.repositoryRemoteUrl}. Fingerprint: ${fingerprint}.\n`
21
+ + `Public setup reference: ${reference}. Fixed expiry: 2030-01-01T00:15:00.000Z.\n`
22
+ + `Preparation context SHA256: ${originalPin}.\n`;
23
+ function fixture() {
24
+ let calls = 0;
25
+ const response = { schema: 'dharma.setup-host-preparation/v1', ok: true, effects: false,
26
+ grantRedeemed: false, approvalRequired: true, sourcePolicyRevalidated: true,
27
+ preparedAt: new Date(now).toISOString(), expiresAt: '2030-01-01T00:15:00.000Z',
28
+ promptSha256: createHash('sha256').update(prompt).digest('hex'), cliVersion: '0.2.190',
29
+ binding: { ...binding }, context: { ...context },
30
+ integrity: { algorithm: 'sha256', kind: 'portal-context', authenticity: 'same-origin-https', contextSha256: originalPin } };
31
+ const input = { origin: response.context.origin, organizationId: 'org_fixture', setupReference: reference,
32
+ cliVersion: '0.2.190', initialUserPrompt: prompt, signal: new AbortController().signal, now: () => now,
33
+ fetcher: (async (url, options) => {
34
+ calls++;
35
+ assert.equal(String(url), 'https://www.dharma-ai.io/api/v1/agent-fabric/bootstrap/setup-claim');
36
+ assert.equal(options?.redirect, 'error');
37
+ assert.deepEqual(JSON.parse(String(options?.body)), { action: 'prepare_host', organizationId: 'org_fixture',
38
+ setupReference: reference, promptSha256: createHash('sha256').update(prompt).digest('hex') });
39
+ assert.equal(options?.credentials, 'omit');
40
+ return new Response(JSON.stringify(response), { headers: { 'content-type': 'application/json' } });
41
+ }) };
42
+ return { response, input, get calls() { return calls; } };
43
+ }
44
+ test('public preparation obtains independent server binding without invoking a provider or enrollment', async () => {
45
+ const f = fixture();
46
+ const result = await requestCodexSetupHostPreparation(f.input);
47
+ assert.equal(f.calls, 1);
48
+ assert.deepEqual(result.binding, binding);
49
+ assert.equal(result.initialUserPrompt, prompt);
50
+ assert.equal(result.effects, false);
51
+ assert.equal(result.portalContextSha256, originalPin);
52
+ });
53
+ test('portal-pinned context is canonical across JSON object key order', async () => {
54
+ const f = fixture();
55
+ f.response.context = Object.fromEntries(Object.entries(f.response.context).reverse());
56
+ assert.equal((await requestCodexSetupHostPreparation(f.input)).portalContextSha256, originalPin);
57
+ });
58
+ test('a replayed intact context cannot extend its fixed expiry', async () => {
59
+ const f = fixture();
60
+ await assert.rejects(requestCodexSetupHostPreparation({ ...f.input, now: () => now + 900001 }));
61
+ assert.equal(f.calls, 1);
62
+ });
63
+ test('credential-shaped prose is rejected before any network admission', async () => {
64
+ const f = fixture();
65
+ const canary = ['dhab', 'synthetic', 'not-a-real-grant'].join('_');
66
+ await assert.rejects(requestCodexSetupHostPreparation({ ...f.input, initialUserPrompt: prompt + canary }));
67
+ assert.equal(f.calls, 0);
68
+ });
69
+ for (const field of ['recipientMembershipId', 'policyRevision', 'scopeDigest', 'contractDigest']) {
70
+ test(`recomputed response integrity cannot substitute the original portal-pinned ${field}`, async () => {
71
+ const f = fixture();
72
+ if (field === 'recipientMembershipId')
73
+ f.response.context[field] = reference;
74
+ else if (field === 'policyRevision')
75
+ f.response.context[field] = 'foreign-policy';
76
+ else
77
+ f.response.context[field] = 'sha256:' + 'f'.repeat(64);
78
+ f.response.integrity.contextSha256 = contextHash(f.response);
79
+ await assert.rejects(requestCodexSetupHostPreparation(f.input), /^Error: codex_setup_portal_preparation_unavailable$/);
80
+ assert.equal(f.calls, 1);
81
+ });
82
+ }
83
+ for (const reason of ['missing', 'duplicate']) {
84
+ test(`a ${reason} original portal context pin is rejected before fetch`, async () => {
85
+ const f = fixture();
86
+ const value = reason === 'missing' ? prompt.replace(`Preparation context SHA256: ${originalPin}.\n`, '')
87
+ : prompt + `Preparation context SHA256: ${originalPin}.\n`;
88
+ await assert.rejects(requestCodexSetupHostPreparation({ ...f.input, initialUserPrompt: value }));
89
+ assert.equal(f.calls, 0);
90
+ });
91
+ }
92
+ test('bounded server clock lead waits without weakening issued-at or expiry validation', async () => {
93
+ const f = fixture();
94
+ let localNow = now, waited = 0;
95
+ f.response.preparedAt = new Date(now + 2208).toISOString();
96
+ const result = await requestCodexSetupHostPreparation({ ...f.input, now: () => localNow,
97
+ ...{ sleep: async (ms) => { waited++; assert.equal(ms, 2208); localNow += ms; } } });
98
+ assert.equal(waited, 1);
99
+ assert.equal(result.intent.issuedAt, f.response.preparedAt);
100
+ assert.equal(f.calls, 1);
101
+ });
102
+ test('excessive server clock lead is rejected without sleeping or provider effects', async () => {
103
+ const f = fixture();
104
+ let waits = 0;
105
+ f.response.preparedAt = new Date(now + 5001).toISOString();
106
+ await assert.rejects(requestCodexSetupHostPreparation({ ...f.input,
107
+ ...{ sleep: async () => { waits++; } } }));
108
+ assert.equal(waits, 0);
109
+ assert.equal(f.calls, 1);
110
+ });
111
+ test('clock wait cancellation cannot authorize a future preparation', async () => {
112
+ const f = fixture(), control = new AbortController();
113
+ f.response.preparedAt = new Date(now + 1000).toISOString();
114
+ await assert.rejects(requestCodexSetupHostPreparation({ ...f.input, signal: control.signal,
115
+ ...{ sleep: async () => { control.abort(); } } }));
116
+ });
117
+ test('clipboard CRLF uses the same public digest while preserving actual native message bytes', async () => {
118
+ const f = fixture(), original = prompt.replace(/\n/g, '\r\n');
119
+ const result = await requestCodexSetupHostPreparation({ ...f.input, initialUserPrompt: original });
120
+ assert.equal(result.initialUserPrompt, original);
121
+ assert.equal(result.initialUserPromptSha256, createHash('sha256').update(original).digest('hex'));
122
+ assert.equal(result.promptSha256, createHash('sha256').update(prompt).digest('hex'));
123
+ });
124
+ for (const cause of ['origin', 'organization', 'reference', 'version', 'prompt-hash', 'recipient', 'repository', 'expired', 'effects', 'unknown']) {
125
+ test(`public preparation rejects ${cause} instead of accepting model-supplied binding`, async () => {
126
+ const f = fixture();
127
+ if (cause === 'origin')
128
+ f.response.context.origin = 'https://foreign.example';
129
+ if (cause === 'organization')
130
+ f.response.context.organizationId = 'org_foreign';
131
+ if (cause === 'reference')
132
+ f.response.context.setupReference = membership;
133
+ if (cause === 'version')
134
+ f.response.cliVersion = '0.2.191';
135
+ if (cause === 'prompt-hash')
136
+ f.response.promptSha256 = 'e'.repeat(64);
137
+ if (cause === 'recipient')
138
+ f.response.binding.recipientEmail = 'other@example.test';
139
+ if (cause === 'repository')
140
+ f.response.binding.repositoryRemoteUrl = 'https://github.com/other/source.git';
141
+ if (cause === 'expired')
142
+ f.response.expiresAt = new Date(now).toISOString();
143
+ if (cause === 'effects')
144
+ f.response.effects = true;
145
+ if (cause === 'unknown')
146
+ f.response.privateField = 'PRIVATE_CANARY';
147
+ await assert.rejects(requestCodexSetupHostPreparation(f.input));
148
+ });
149
+ }
150
+ test('a cancelled preparation makes no network request', async () => {
151
+ const f = fixture();
152
+ await assert.rejects(requestCodexSetupHostPreparation({ ...f.input, signal: AbortSignal.abort() }));
153
+ assert.equal(f.calls, 0);
154
+ });
155
+ for (const cause of ['http-error', 'invalid-json', 'oversized', 'foreign-redirect', 'vendor-error']) {
156
+ test(`transport ${cause} is bounded, not retried and never reflects a response or vendor exception`, async () => {
157
+ const f = fixture();
158
+ let calls = 0;
159
+ const fetcher = (async () => {
160
+ calls++;
161
+ if (cause === 'vendor-error')
162
+ throw Error('PRIVATE_VENDOR_EXCEPTION');
163
+ if (cause === 'http-error')
164
+ return new Response('PRIVATE_RESPONSE', { status: 403 });
165
+ if (cause === 'foreign-redirect')
166
+ return new Response('', { status: 302, headers: { location: 'https://foreign.example' } });
167
+ return new Response(cause === 'invalid-json' ? 'PRIVATE_INVALID_RESPONSE' : 'x'.repeat(65537), { headers: { 'content-type': 'application/json' } });
168
+ });
169
+ await assert.rejects(requestCodexSetupHostPreparation({ ...f.input, fetcher }), error => error instanceof Error && error.message === 'codex_setup_portal_preparation_unavailable');
170
+ assert.equal(calls, 1);
171
+ });
172
+ }
173
+ //# sourceMappingURL=codexSetupPortalPreparation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSetupPortalPreparation.test.js","sourceRoot":"","sources":["../src/codexSetupPortalPreparation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Readable } from 'node:stream';
2
+ /** Agent-supplied public text only; never a terminal password/grant prompt. */
3
+ export declare function readCodexSetupPublicStdin(stream: Readable & {
4
+ isTTY?: boolean;
5
+ }, signal: AbortSignal): Promise<string>;
6
+ //# sourceMappingURL=codexSetupPublicStdin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSetupPublicStdin.d.ts","sourceRoot":"","sources":["../src/codexSetupPublicStdin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAG1C,+EAA+E;AAC/E,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,QAAQ,GAAG;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB1H"}
@@ -0,0 +1,36 @@
1
+ import { capturePublicCodexSetupPrompt } from './codexSetupUserPrompt.js';
2
+ /** Agent-supplied public text only; never a terminal password/grant prompt. */
3
+ export async function readCodexSetupPublicStdin(stream, signal) {
4
+ const fail = () => new Error('codex_setup_public_input_unavailable');
5
+ if (stream.isTTY || signal.aborted)
6
+ throw fail();
7
+ const deadline = AbortSignal.any([signal, AbortSignal.timeout(15000)]);
8
+ const cancel = () => stream.destroy(fail());
9
+ deadline.addEventListener('abort', cancel, { once: true });
10
+ const chunks = [];
11
+ let size = 0;
12
+ try {
13
+ for await (const chunk of stream) {
14
+ if (deadline.aborted)
15
+ throw fail();
16
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
17
+ size += bytes.length;
18
+ if (size > 32768)
19
+ throw fail();
20
+ chunks.push(bytes);
21
+ }
22
+ if (deadline.aborted)
23
+ throw fail();
24
+ const bytes = Buffer.concat(chunks), text = bytes.toString('utf8');
25
+ if (!Buffer.from(text, 'utf8').equals(bytes))
26
+ throw fail();
27
+ return capturePublicCodexSetupPrompt(text);
28
+ }
29
+ catch {
30
+ throw fail();
31
+ }
32
+ finally {
33
+ deadline.removeEventListener('abort', cancel);
34
+ }
35
+ }
36
+ //# sourceMappingURL=codexSetupPublicStdin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSetupPublicStdin.js","sourceRoot":"","sources":["../src/codexSetupPublicStdin.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,6BAA6B,EAAC,MAAM,2BAA2B,CAAC;AAExE,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAAoC,EAAE,MAAmB;IACvG,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;IACzD,MAAM,MAAM,GAAa,EAAE,CAAC;IAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,OAAO;gBAAE,MAAM,IAAI,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,IAAI,GAAG,KAAK;gBAAE,MAAM,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO;YAAE,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,EAAE,CAAC;QAC3D,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QAAA,MAAM,IAAI,EAAE,CAAC;IAAA,CAAC;YACf,CAAC;QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAAA,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codexSetupPublicStdin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSetupPublicStdin.test.d.ts","sourceRoot":"","sources":["../src/codexSetupPublicStdin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import assert from 'node:assert/strict';
2
+ import { PassThrough, Readable } from 'node:stream';
3
+ import test from 'node:test';
4
+ import { readCodexSetupPublicStdin } from './codexSetupPublicStdin.js';
5
+ const prompt = '# Public setup\r\nOriginal text is preserved.\n';
6
+ test('public stdin preserves valid original bytes across chunks without echo or file transport', async () => {
7
+ const stream = Readable.from([Buffer.from(prompt.slice(0, 8)), Buffer.from(prompt.slice(8))]);
8
+ assert.equal(await readCodexSetupPublicStdin(stream, new AbortController().signal), prompt);
9
+ });
10
+ for (const reason of ['tty', 'cancelled']) {
11
+ test(`public stdin refuses ${reason} before reading`, async () => {
12
+ let reads = 0;
13
+ const stream = new Readable({ read() { reads++; this.push(null); } });
14
+ const control = new AbortController();
15
+ if (reason === 'tty')
16
+ stream.isTTY = true;
17
+ else
18
+ control.abort();
19
+ await assert.rejects(readCodexSetupPublicStdin(stream, control.signal), /^Error: codex_setup_public_input_unavailable$/);
20
+ assert.equal(reads, 0);
21
+ });
22
+ }
23
+ for (const [reason, bytes] of [
24
+ ['oversized', Buffer.alloc(32769, 97)], ['invalid-utf8', Buffer.from([0xc3, 0x28])],
25
+ ['empty', Buffer.alloc(0)], ['credential', Buffer.from(['dhab', 'synthetic', 'never-real'].join('_'))],
26
+ ]) {
27
+ test(`public stdin rejects ${reason} with a constant non-disclosing result`, async () => {
28
+ await assert.rejects(readCodexSetupPublicStdin(Readable.from([bytes]), new AbortController().signal), /^Error: codex_setup_public_input_unavailable$/);
29
+ });
30
+ }
31
+ test('cancellation destroys only the owned waiting public input stream', async () => {
32
+ const stream = new PassThrough(), other = new PassThrough(), control = new AbortController();
33
+ const reading = readCodexSetupPublicStdin(stream, control.signal);
34
+ control.abort();
35
+ await assert.rejects(reading, /^Error: codex_setup_public_input_unavailable$/);
36
+ assert.equal(stream.destroyed, true);
37
+ assert.equal(other.destroyed, false);
38
+ other.destroy();
39
+ });
40
+ //# sourceMappingURL=codexSetupPublicStdin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSetupPublicStdin.test.js","sourceRoot":"","sources":["../src/codexSetupPublicStdin.test.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ export type CodexSetupPromptBinding = Readonly<{
5
5
  }>;
6
6
  /** Public fields captured from the independently verified recipient/selection. */
7
7
  export declare function captureCodexSetupPromptBinding(value: unknown): CodexSetupPromptBinding;
8
+ /** Reject credential-bearing public prose before network or persistence. */
9
+ export declare function capturePublicCodexSetupPrompt(value: unknown): string;
8
10
  /** Presentation consistency only. The original host intent and lease, never
9
11
  * model-visible prose, remain the authority for every protected setup effect. */
10
12
  export declare function captureCodexSetupUserPrompt(value: unknown, intent: Readonly<CodexSetupIntent>, suppliedBinding?: unknown): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"codexSetupUserPrompt.d.ts","sourceRoot":"","sources":["../src/codexSetupUserPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAG/D,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC;AAEtG,kFAAkF;AAClF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAmBtF;AAED;iFACiF;AACjF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CA4B7I"}
1
+ {"version":3,"file":"codexSetupUserPrompt.d.ts","sourceRoot":"","sources":["../src/codexSetupUserPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAI/D,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC;AAEtG,kFAAkF;AAClF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAmBtF;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAepE;AAED;iFACiF;AACjF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiB7I"}
@@ -1,4 +1,5 @@
1
1
  import { redactValue } from '@dharma-ai-labs/agent-fabric-evidence-reduction';
2
+ import { containsCredential } from '@dharma-ai-labs/agent-fabric-provider-adapters/experimental/codex-session';
2
3
  /** Public fields captured from the independently verified recipient/selection. */
3
4
  export function captureCodexSetupPromptBinding(value) {
4
5
  const invalid = () => { throw new Error('codex_setup_public_prompt_invalid'); };
@@ -28,11 +29,8 @@ export function captureCodexSetupPromptBinding(value) {
28
29
  }
29
30
  return Object.freeze({ recipientEmail, repositoryRemoteUrl });
30
31
  }
31
- /** Presentation consistency only. The original host intent and lease, never
32
- * model-visible prose, remain the authority for every protected setup effect. */
33
- export function captureCodexSetupUserPrompt(value, intent, suppliedBinding) {
34
- if (value === undefined)
35
- return undefined;
32
+ /** Reject credential-bearing public prose before network or persistence. */
33
+ export function capturePublicCodexSetupPrompt(value) {
36
34
  const invalid = () => { throw new Error('codex_setup_public_prompt_invalid'); };
37
35
  if (typeof value !== 'string' || !value || Buffer.byteLength(value, 'utf8') > 32_768
38
36
  || Buffer.from(value, 'utf8').toString('utf8') !== value
@@ -43,12 +41,21 @@ export function captureCodexSetupUserPrompt(value, intent, suppliedBinding) {
43
41
  inputBytes: Buffer.byteLength(value), outputBytes: Buffer.byteLength(value) };
44
42
  redactValue(value, stats);
45
43
  // Public setup prose includes documented paths, but never secret-bearing values.
46
- if ([...stats.classes].some(name => name !== 'local_path')
44
+ if (containsCredential(value) || [...stats.classes].some(name => name !== 'local_path')
47
45
  || /\b(?:proxy[_-]?authorization|authorization|set[_-]?cookie|cookie)["']?\s*[:=]\s*["']?\S+/i.test(value)
48
46
  || /\b(?:gh[pousr]_|github_pat_|sk_live_|sk_test_)[A-Za-z0-9_]{12,}|\bBearer\s+[A-Za-z0-9_.+-]{8,}/i.test(value)
49
47
  || /\b[A-Za-z0-9_]*(?:password|passwd|secret|api_key|access_token|refresh_token|credentials?|token)(?:_[A-Za-z0-9_]+)?["']?\s*[:=]\s*["']?[^\s"',;]+/i.test(value))
50
48
  return invalid();
51
- const binding = captureCodexSetupPromptBinding(suppliedBinding), lines = value.split(/\r?\n/);
49
+ return value;
50
+ }
51
+ /** Presentation consistency only. The original host intent and lease, never
52
+ * model-visible prose, remain the authority for every protected setup effect. */
53
+ export function captureCodexSetupUserPrompt(value, intent, suppliedBinding) {
54
+ if (value === undefined)
55
+ return undefined;
56
+ const prompt = capturePublicCodexSetupPrompt(value);
57
+ const invalid = () => { throw new Error('codex_setup_public_prompt_invalid'); };
58
+ const binding = captureCodexSetupPromptBinding(suppliedBinding), lines = prompt.split(/\r?\n/);
52
59
  const only = (prefix) => {
53
60
  const selected = lines.filter(line => line.startsWith(prefix));
54
61
  if (selected.length !== 1)
@@ -61,6 +68,6 @@ export function captureCodexSetupUserPrompt(value, intent, suppliedBinding) {
61
68
  || only('Public setup reference: ') !== `Public setup reference: ${intent.setupReference}. Fixed expiry: ${intent.expiresAt}.`) {
62
69
  return invalid();
63
70
  }
64
- return value;
71
+ return prompt;
65
72
  }
66
73
  //# sourceMappingURL=codexSetupUserPrompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codexSetupUserPrompt.js","sourceRoot":"","sources":["../src/codexSetupUserPrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codexSetupUserPrompt.js","sourceRoot":"","sources":["../src/codexSetupUserPrompt.ts"],"names":[],"mappings":"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"}
@@ -78,6 +78,13 @@ test('credential-contaminated public text is rejected before a persistent native
78
78
  assert.throws(() => captureCodexSetupUserPrompt(prompt + contaminated, intent, binding), /^Error: codex_setup_public_prompt_invalid$/);
79
79
  }
80
80
  });
81
+ test('capture rejects product bootstrap grants in otherwise valid public text', () => {
82
+ const synthetic = ['dhab', 'SYNTHETIC_NOT_A_REAL_GRANT_20261013'].join('_');
83
+ for (const contaminated of [synthetic, synthetic.toUpperCase(), `Unexpected private value: ${synthetic}`,
84
+ JSON.stringify({ unrelated: synthetic })]) {
85
+ assert.throws(() => captureCodexSetupUserPrompt(prompt + contaminated, intent, binding), /^Error: codex_setup_public_prompt_invalid$/);
86
+ }
87
+ });
81
88
  test('public metadata booleans are not mistaken for credential assignments', () => {
82
89
  const publicMetadata = prompt + 'directCredentialFileRead:false; providerCredentialRead:false;';
83
90
  assert.equal(captureCodexSetupUserPrompt(publicMetadata, intent, binding), publicMetadata);
@@ -1 +1 @@
1
- {"version":3,"file":"codexSetupUserPrompt.test.js","sourceRoot":"","sources":["../src/codexSetupUserPrompt.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codexSetupUserPrompt.test.js","sourceRoot":"","sources":["../src/codexSetupUserPrompt.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -219,6 +219,11 @@ export declare function openCodexBootstrapNativeHost(input: Omit<Parameters<type
219
219
  close: () => Promise<void>;
220
220
  settled: Promise<void>;
221
221
  initialUserPromptSha256: string | undefined;
222
+ readonly verifiedCompletion: Readonly<{
223
+ operationId: string;
224
+ setupReference: string;
225
+ readinessReceiptId: string;
226
+ }> | undefined;
222
227
  readonly diagnostics: readonly Readonly<CodexSetupFailureDiagnostic>[];
223
228
  }>>;
224
229
  /** Prepared controller ingress for the portal's public command, never a shell evaluator. */
@@ -232,11 +237,21 @@ export declare function openCodexBootstrapFromPortalCommand(input: Parameters<ty
232
237
  close: () => Promise<void>;
233
238
  settled: Promise<void>;
234
239
  initialUserPromptSha256: string | undefined;
240
+ readonly verifiedCompletion: Readonly<{
241
+ operationId: string;
242
+ setupReference: string;
243
+ readinessReceiptId: string;
244
+ }> | undefined;
235
245
  readonly diagnostics: readonly Readonly<CodexSetupFailureDiagnostic>[];
236
246
  }>>;
237
247
  /** Official native-host composition. The caller supplies its already owned
238
248
  * transport and qualification, never a vault, executor or readiness callback. */
239
249
  export declare function startCodexBootstrapNativeHost(input: Omit<Parameters<typeof startCodexSetupNativeHost>[0], 'openJournal' | 'execute' | 'verifyReadiness'>): Promise<Readonly<{
250
+ verifiedCompletion: Readonly<{
251
+ operationId: string;
252
+ setupReference: string;
253
+ readinessReceiptId: string;
254
+ }> | undefined;
240
255
  diagnostics: readonly Readonly<CodexSetupFailureDiagnostic>[];
241
256
  threadId: string;
242
257
  turnId: string;