@dharma-ai-labs/agent-fabric 0.2.209 → 0.2.211

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 (158) hide show
  1. package/dist/bin.js +2 -2
  2. package/dist/bin.js.map +1 -1
  3. package/dist/bootstrapHostScope.test.js +1 -1
  4. package/dist/bootstrapHostScope.test.js.map +1 -1
  5. package/dist/bootstrapProcessCaller.test.js +1 -0
  6. package/dist/bootstrapProcessCaller.test.js.map +1 -1
  7. package/dist/bootstrapVaultScope.test.js +25 -1
  8. package/dist/bootstrapVaultScope.test.js.map +1 -1
  9. package/dist/codexBoundSession.d.ts +59 -0
  10. package/dist/codexBoundSession.d.ts.map +1 -1
  11. package/dist/codexBoundSession.js +140 -1
  12. package/dist/codexBoundSession.js.map +1 -1
  13. package/dist/codexInboxSession.d.ts +1 -1
  14. package/dist/codexInboxSession.d.ts.map +1 -1
  15. package/dist/codexRecoveryController.test.d.ts +2 -0
  16. package/dist/codexRecoveryController.test.d.ts.map +1 -0
  17. package/dist/codexRecoveryController.test.js +295 -0
  18. package/dist/codexRecoveryController.test.js.map +1 -0
  19. package/dist/codexScopedDispatch.test.js +2 -1
  20. package/dist/codexScopedDispatch.test.js.map +1 -1
  21. package/dist/codexSetupChildProvider.test.js +20 -0
  22. package/dist/codexSetupChildProvider.test.js.map +1 -1
  23. package/dist/codexSetupNativeHost.test.js +2 -1
  24. package/dist/codexSetupNativeHost.test.js.map +1 -1
  25. package/dist/codexSetupSessionCaller.test.js +1 -0
  26. package/dist/codexSetupSessionCaller.test.js.map +1 -1
  27. package/dist/codexSigningRecoveryNativeHost.d.ts +50 -0
  28. package/dist/codexSigningRecoveryNativeHost.d.ts.map +1 -0
  29. package/dist/codexSigningRecoveryNativeHost.js +186 -0
  30. package/dist/codexSigningRecoveryNativeHost.js.map +1 -0
  31. package/dist/codexSigningRecoveryNativeHost.test.d.ts +2 -0
  32. package/dist/codexSigningRecoveryNativeHost.test.d.ts.map +1 -0
  33. package/dist/codexSigningRecoveryNativeHost.test.js +475 -0
  34. package/dist/codexSigningRecoveryNativeHost.test.js.map +1 -0
  35. package/dist/codexSigningRecoveryTool.d.ts +25 -0
  36. package/dist/codexSigningRecoveryTool.d.ts.map +1 -0
  37. package/dist/codexSigningRecoveryTool.js +24 -0
  38. package/dist/codexSigningRecoveryTool.js.map +1 -0
  39. package/dist/containerRelayLifecycle.d.ts +2 -1
  40. package/dist/containerRelayLifecycle.d.ts.map +1 -1
  41. package/dist/containerRelayLifecycle.js +12 -0
  42. package/dist/containerRelayLifecycle.js.map +1 -1
  43. package/dist/containerRelayLifecycle.test.js +38 -6
  44. package/dist/containerRelayLifecycle.test.js.map +1 -1
  45. package/dist/containerRelayRuntimeTrust.test.js +10 -0
  46. package/dist/containerRelayRuntimeTrust.test.js.map +1 -1
  47. package/dist/cooperativeInboxSession.d.ts +1 -1
  48. package/dist/demoPackage.d.ts +1 -1
  49. package/dist/demoWatchControl.d.ts +6 -6
  50. package/dist/deviceSigningMaintenanceController.d.ts +35 -0
  51. package/dist/deviceSigningMaintenanceController.d.ts.map +1 -0
  52. package/dist/deviceSigningMaintenanceController.js +197 -0
  53. package/dist/deviceSigningMaintenanceController.js.map +1 -0
  54. package/dist/deviceSigningMaintenanceController.test.d.ts +2 -0
  55. package/dist/deviceSigningMaintenanceController.test.d.ts.map +1 -0
  56. package/dist/deviceSigningMaintenanceController.test.js +67 -0
  57. package/dist/deviceSigningMaintenanceController.test.js.map +1 -0
  58. package/dist/deviceSigningMaintenanceFlow.test.d.ts +2 -0
  59. package/dist/deviceSigningMaintenanceFlow.test.d.ts.map +1 -0
  60. package/dist/deviceSigningMaintenanceFlow.test.js +196 -0
  61. package/dist/deviceSigningMaintenanceFlow.test.js.map +1 -0
  62. package/dist/index.d.ts +9 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +723 -470
  65. package/dist/index.js.map +1 -1
  66. package/dist/legacySigningMaintenanceBoundary.d.ts +14 -0
  67. package/dist/legacySigningMaintenanceBoundary.d.ts.map +1 -0
  68. package/dist/legacySigningMaintenanceBoundary.js +128 -0
  69. package/dist/legacySigningMaintenanceBoundary.js.map +1 -0
  70. package/dist/legacySigningMaintenanceBoundary.test.d.ts +2 -0
  71. package/dist/legacySigningMaintenanceBoundary.test.d.ts.map +1 -0
  72. package/dist/legacySigningMaintenanceBoundary.test.js +109 -0
  73. package/dist/legacySigningMaintenanceBoundary.test.js.map +1 -0
  74. package/dist/maintenanceControlCaller.test.d.ts +2 -0
  75. package/dist/maintenanceControlCaller.test.d.ts.map +1 -0
  76. package/dist/maintenanceControlCaller.test.js +119 -0
  77. package/dist/maintenanceControlCaller.test.js.map +1 -0
  78. package/dist/namedCodexThread.d.ts.map +1 -1
  79. package/dist/namedCodexThread.js +3 -1
  80. package/dist/namedCodexThread.js.map +1 -1
  81. package/dist/namedCodexThread.test.js +17 -1
  82. package/dist/namedCodexThread.test.js.map +1 -1
  83. package/dist/namedSessionMaintenance.d.ts +1 -1
  84. package/dist/namedSessionStartupFence.test.d.ts +2 -0
  85. package/dist/namedSessionStartupFence.test.d.ts.map +1 -0
  86. package/dist/namedSessionStartupFence.test.js +81 -0
  87. package/dist/namedSessionStartupFence.test.js.map +1 -0
  88. package/dist/namedSessionStoppedLock.d.ts +34 -0
  89. package/dist/namedSessionStoppedLock.d.ts.map +1 -0
  90. package/dist/namedSessionStoppedLock.js +108 -0
  91. package/dist/namedSessionStoppedLock.js.map +1 -0
  92. package/dist/namedSessionStoppedLock.test.d.ts +2 -0
  93. package/dist/namedSessionStoppedLock.test.d.ts.map +1 -0
  94. package/dist/namedSessionStoppedLock.test.js +104 -0
  95. package/dist/namedSessionStoppedLock.test.js.map +1 -0
  96. package/dist/providerSessionReplyRecovery.d.ts +1 -1
  97. package/dist/relayAutostart.d.ts +3 -0
  98. package/dist/relayAutostart.d.ts.map +1 -1
  99. package/dist/relayAutostart.js +45 -6
  100. package/dist/relayAutostart.js.map +1 -1
  101. package/dist/relayAutostart.test.js +49 -1
  102. package/dist/relayAutostart.test.js.map +1 -1
  103. package/dist/relayRuntimeUpgrade.d.ts +2 -1
  104. package/dist/relayRuntimeUpgrade.d.ts.map +1 -1
  105. package/dist/relayRuntimeUpgrade.js +3 -3
  106. package/dist/relayRuntimeUpgrade.js.map +1 -1
  107. package/dist/relayRuntimeUpgradeCaller.test.js +76 -0
  108. package/dist/relayRuntimeUpgradeCaller.test.js.map +1 -1
  109. package/dist/relaySigningMaintenanceUpgrade.d.ts +44 -0
  110. package/dist/relaySigningMaintenanceUpgrade.d.ts.map +1 -0
  111. package/dist/relaySigningMaintenanceUpgrade.js +249 -0
  112. package/dist/relaySigningMaintenanceUpgrade.js.map +1 -0
  113. package/dist/relaySigningMaintenanceUpgrade.test.d.ts +2 -0
  114. package/dist/relaySigningMaintenanceUpgrade.test.d.ts.map +1 -0
  115. package/dist/relaySigningMaintenanceUpgrade.test.js +230 -0
  116. package/dist/relaySigningMaintenanceUpgrade.test.js.map +1 -0
  117. package/dist/schemas/codex-signing-recovery-native-progress.schema.json +16 -0
  118. package/dist/schemas/device-enrollment-recovery-journal.schema.json +20 -0
  119. package/dist/schemas/device-signing-maintenance-challenge.schema.json +185 -0
  120. package/dist/schemas/device-signing-maintenance-completion.schema.json +98 -0
  121. package/dist/schemas/device-signing-maintenance-context-request.schema.json +68 -0
  122. package/dist/schemas/device-signing-maintenance-context.schema.json +137 -0
  123. package/dist/schemas/device-signing-maintenance-control.schema.json +12 -0
  124. package/dist/schemas/device-signing-maintenance-controller-progress.schema.json +26 -0
  125. package/dist/schemas/device-signing-maintenance-delivery-request.schema.json +45 -0
  126. package/dist/schemas/device-signing-maintenance-host-progress.schema.json +121 -0
  127. package/dist/schemas/device-signing-maintenance-plan.schema.json +136 -0
  128. package/dist/schemas/device-signing-maintenance-preparation.schema.json +56 -0
  129. package/dist/schemas/device-signing-recovery-candidate.schema.json +28 -0
  130. package/dist/schemas/device-signing-recovery-challenge.schema.json +52 -0
  131. package/dist/schemas/device-signing-recovery-completion.schema.json +23 -0
  132. package/dist/schemas/device-signing-recovery-delivery-request.schema.json +16 -0
  133. package/dist/schemas/device-signing-recovery-delivery.schema.json +22 -0
  134. package/dist/schemas/device-signing-recovery-host-progress.schema.json +28 -0
  135. package/dist/schemas/device-signing-recovery-offer-progress.schema.json +32 -0
  136. package/dist/schemas/device-signing-recovery-offer-read-request.schema.json +16 -0
  137. package/dist/schemas/device-signing-recovery-offer-registration-receipt.schema.json +16 -0
  138. package/dist/schemas/device-signing-recovery-offer-registration-request.schema.json +18 -0
  139. package/dist/schemas/device-signing-recovery-offer-response.schema.json +43 -0
  140. package/dist/schemas/device-signing-recovery-plan.schema.json +40 -0
  141. package/dist/schemas/device-signing-recovery-preparation.schema.json +23 -0
  142. package/dist/schemas/local-signing-maintenance-upgrade-journal.schema.json +34 -0
  143. package/dist/schemas/local-signing-maintenance-upgrade.schema.json +33 -0
  144. package/dist/schemas/provider-session-recovery-declaration.schema.json +21 -0
  145. package/dist/signingMaintenanceCohort.test.d.ts +2 -0
  146. package/dist/signingMaintenanceCohort.test.d.ts.map +1 -0
  147. package/dist/signingMaintenanceCohort.test.js +55 -0
  148. package/dist/signingMaintenanceCohort.test.js.map +1 -0
  149. package/dist/usage.d.ts.map +1 -1
  150. package/dist/usage.js +4 -2
  151. package/dist/usage.js.map +1 -1
  152. package/dist/wslRelayHost.d.ts +2 -0
  153. package/dist/wslRelayHost.d.ts.map +1 -1
  154. package/dist/wslRelayHost.js +35 -0
  155. package/dist/wslRelayHost.js.map +1 -1
  156. package/dist/wslRelayHost.test.js +81 -4
  157. package/dist/wslRelayHost.test.js.map +1 -1
  158. package/package.json +4 -4
@@ -0,0 +1,14 @@
1
+ export interface LegacySigningMaintenanceBoundary {
2
+ readonly leaseDigest: string;
3
+ assertHeld(): Promise<void>;
4
+ }
5
+ /** Cooperative exclusion for a verified current managed CLI cohort. Old lock
6
+ * paths are held for compatibility, not as proof against archived binaries.
7
+ * Never reclaim old locks, stop a process, enable a session or alter identity. */
8
+ export declare function withLegacySigningMaintenanceBoundary<T>(input: {
9
+ home: string;
10
+ name: string;
11
+ signal: AbortSignal;
12
+ assertManagedCohort(): Promise<string>;
13
+ }, work: (boundary: LegacySigningMaintenanceBoundary) => Promise<T>): Promise<T>;
14
+ //# sourceMappingURL=legacySigningMaintenanceBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacySigningMaintenanceBoundary.d.ts","sourceRoot":"","sources":["../src/legacySigningMaintenanceBoundary.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gCAAgC;IAAE,QAAQ,CAAC,WAAW,EAAC,MAAM,CAAC;IAAA,UAAU,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAAC;AAK3G;;kFAEkF;AAClF,wBAAsB,oCAAoC,CAAC,CAAC,EAAE,KAAK,EAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,WAAW,CAAC;IAC9G,mBAAmB,IAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAAC,EACtC,IAAI,EAAC,CAAC,QAAQ,EAAC,gCAAgC,KAAG,OAAO,CAAC,CAAC,CAAC,GAAE,OAAO,CAAC,CAAC,CAAC,CAoEzE"}
@@ -0,0 +1,128 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { link, lstat, mkdir, readFile, readdir, realpath, unlink, writeFile } from 'node:fs/promises';
3
+ import { dirname, resolve, sep } from 'node:path';
4
+ import { canonicalize } from '@dharma-ai-labs/agent-fabric-contracts';
5
+ import { namedSessionPaths, readNamedSession } from './namedSessionService.js';
6
+ const unavailable = () => { throw Error('legacy_signing_maintenance_boundary_unavailable'); };
7
+ const hash = (value) => 'sha256:' + createHash('sha256').update(canonicalize(value)).digest('hex');
8
+ /** Cooperative exclusion for a verified current managed CLI cohort. Old lock
9
+ * paths are held for compatibility, not as proof against archived binaries.
10
+ * Never reclaim old locks, stop a process, enable a session or alter identity. */
11
+ export async function withLegacySigningMaintenanceBoundary(input, work) {
12
+ const home = resolve(input.home), owned = [], operationId = randomUUID();
13
+ let active = true;
14
+ const assertDirectory = async (path) => {
15
+ const info = await lstat(path);
16
+ if (!info.isDirectory() || info.isSymbolicLink() || resolve(await realpath(path)) !== path
17
+ || process.platform !== 'win32' && (info.uid !== process.getuid() || (info.mode & 0o022) !== 0))
18
+ return unavailable();
19
+ };
20
+ const snapshot = async () => {
21
+ input.signal.throwIfAborted();
22
+ await assertDirectory(home);
23
+ await assertDirectory(resolve(home, 'sessions'));
24
+ const entries = await readdir(resolve(home, 'sessions'), { withFileTypes: true });
25
+ const names = entries.filter(value => /^[a-z][a-z0-9-]{0,47}$/.test(value.name)).map(value => value.name).sort();
26
+ if (names.length !== 1 || names[0] !== input.name)
27
+ return unavailable();
28
+ await assertDirectory(namedSessionPaths(home, input.name).root);
29
+ const registration = await readNamedSession(home, input.name);
30
+ if (!registration || registration.enabled)
31
+ return unavailable();
32
+ return canonicalize(registration);
33
+ };
34
+ const original = await snapshot();
35
+ if (typeof input.assertManagedCohort !== 'function')
36
+ return unavailable();
37
+ let cohortDigest;
38
+ const paths = ['autostart-mutation.lock', 'device.json.enrollment.lock', 'device.json.connection.lock', 'registry/workspaces.json.mutation.lock',
39
+ 'relay/supervisor.pid.lock', 'relay/relay.pid.lock', 'sessions/' + input.name + '/service.lock'].map(path => resolve(home, path));
40
+ const assertOwned = async (entry) => {
41
+ await assertDirectory(dirname(entry.path));
42
+ const info = await lstat(entry.path, { bigint: true });
43
+ if (!info.isFile() || info.isSymbolicLink() || info.dev !== entry.dev || info.ino !== entry.ino
44
+ || await readFile(entry.path, 'utf8') !== entry.bytes)
45
+ return unavailable();
46
+ };
47
+ const assertHeld = async () => {
48
+ if (!active || input.signal.aborted || await snapshot() !== original || owned.length !== paths.length)
49
+ return unavailable();
50
+ for (const entry of owned)
51
+ await assertOwned(entry);
52
+ const currentCohort = await input.assertManagedCohort();
53
+ if (!/^sha256:[a-f0-9]{64}$/.test(currentCohort) || cohortDigest !== undefined && currentCohort !== cohortDigest)
54
+ return unavailable();
55
+ cohortDigest = currentCohort;
56
+ // Relay PID files name daemons, while the .lock paths above name their
57
+ // mutually exclusive owner. Do not synthesize a running relay PID file.
58
+ for (const name of ['relay/relay.pid', 'relay/supervisor.pid']) {
59
+ try {
60
+ const text = (await readFile(resolve(home, name), 'utf8')).trim(), pid = Number(text);
61
+ if (!/^[1-9][0-9]*$/.test(text) || !Number.isSafeInteger(pid))
62
+ return unavailable();
63
+ try {
64
+ process.kill(pid, 0);
65
+ return unavailable();
66
+ }
67
+ catch (error) {
68
+ if (error.code !== 'ESRCH')
69
+ return unavailable();
70
+ }
71
+ }
72
+ catch (error) {
73
+ if (error.code !== 'ENOENT')
74
+ throw error;
75
+ }
76
+ }
77
+ input.signal.throwIfAborted();
78
+ };
79
+ let cleanupError = false;
80
+ try {
81
+ for (const path of paths) {
82
+ if (!path.startsWith(home + sep))
83
+ return unavailable();
84
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
85
+ await assertDirectory(dirname(path));
86
+ const candidate = path + '.maintenance-' + operationId, bytes = process.pid + '\n';
87
+ let candidateOwned;
88
+ try {
89
+ await writeFile(candidate, bytes, { flag: 'wx', mode: 0o600 });
90
+ const metadata = await lstat(candidate, { bigint: true });
91
+ candidateOwned = { path: candidate, dev: metadata.dev, ino: metadata.ino, bytes };
92
+ await assertOwned(candidateOwned);
93
+ input.signal.throwIfAborted();
94
+ // link is the same atomic publication primitive used by the legacy
95
+ // acquirePidLock. Existing or corrupt owners fail closed, no recovery.
96
+ await link(candidate, path);
97
+ owned.push({ ...candidateOwned, path });
98
+ }
99
+ finally {
100
+ if (candidateOwned) {
101
+ await assertOwned(candidateOwned);
102
+ await unlink(candidate);
103
+ }
104
+ }
105
+ }
106
+ await assertHeld();
107
+ const lease = Object.freeze({ leaseDigest: hash({ schema: 'dharma.legacy-signing-maintenance-boundary/v1', operationId,
108
+ pid: process.pid, registrationDigest: hash(original), cohortDigest,
109
+ paths: owned.map(entry => ({ path: entry.path, dev: String(entry.dev), ino: String(entry.ino) })) }), assertHeld });
110
+ const result = await work(lease);
111
+ await assertHeld();
112
+ return result;
113
+ }
114
+ finally {
115
+ active = false;
116
+ for (const entry of owned.reverse())
117
+ try {
118
+ await assertOwned(entry);
119
+ await unlink(entry.path);
120
+ }
121
+ catch {
122
+ cleanupError = true;
123
+ }
124
+ if (cleanupError)
125
+ throw Error('legacy_signing_maintenance_cleanup_unconfirmed');
126
+ }
127
+ }
128
+ //# sourceMappingURL=legacySigningMaintenanceBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacySigningMaintenanceBoundary.js","sourceRoot":"","sources":["../src/legacySigningMaintenanceBoundary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=legacySigningMaintenanceBoundary.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacySigningMaintenanceBoundary.test.d.ts","sourceRoot":"","sources":["../src/legacySigningMaintenanceBoundary.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import assert from 'node:assert/strict';
2
+ import { execFile } from 'node:child_process';
3
+ import { promisify } from 'node:util';
4
+ import { mkdir, mkdtemp, readFile, realpath, rm, unlink, writeFile } from 'node:fs/promises';
5
+ import { tmpdir } from 'node:os';
6
+ import { resolve } from 'node:path';
7
+ import test from 'node:test';
8
+ import { saveNamedSession } from './namedSessionService.js';
9
+ import * as boundary from './legacySigningMaintenanceBoundary.js';
10
+ const id = (n) => `df000000-0000-4000-8000-${String(n).padStart(12, '0')}`;
11
+ async function fixture() {
12
+ const home = await realpath(await mkdtemp(resolve(tmpdir(), 'mb-')));
13
+ await saveNamedSession(home, { schema: 'dharma.named-session/v1', name: 'reviewer', bindingId: id(1), enabled: false, maximumCostCents: 100, maximumTurnCostCents: 25,
14
+ identity: { organizationId: 'org_fixture', deviceId: id(2), membershipId: id(3), endpointId: id(4), workspaceId: id(5), repositoryBindingId: id(6), provider: 'codex' } });
15
+ return { home, name: 'reviewer', signal: new AbortController().signal, assertManagedCohort: async () => 'sha256:' + 'f'.repeat(64) };
16
+ }
17
+ test('held legacy startup locks exclude independent normal relay/supervisor acquisition for the whole maintenance window', async () => {
18
+ const f = await fixture();
19
+ try {
20
+ await boundary.withLegacySigningMaintenanceBoundary(f, async (owned) => {
21
+ await owned.assertHeld();
22
+ assert.match(owned.leaseDigest, /^sha256:[a-f0-9]{64}$/);
23
+ for (const method of ['acquireRelayProcessLease', 'acquireRelaySupervisorLease', 'acquireNamedSessionStartupAdmission']) {
24
+ const source = `const m=await import(${JSON.stringify(new URL('./index.js', import.meta.url).href)});try{await m.${method}(${JSON.stringify(f.home)});process.stdout.write('UNEXPECTED_START');process.exitCode=2;}catch{process.stdout.write('BLOCKED');}`;
25
+ const result = await promisify(execFile)(process.execPath, ['--input-type=module', '-e', source], { windowsHide: true, timeout: 15000 });
26
+ assert.equal(result.stdout, 'BLOCKED');
27
+ await owned.assertHeld();
28
+ }
29
+ const lock = resolve(f.home, 'sessions', 'reviewer', 'service.lock');
30
+ assert.equal((await readFile(lock, 'utf8')).trim(), String(process.pid));
31
+ });
32
+ await assert.rejects(readFile(resolve(f.home, 'relay', 'relay.pid.lock')), { code: 'ENOENT' });
33
+ }
34
+ finally {
35
+ await rm(f.home, { recursive: true, force: true });
36
+ }
37
+ });
38
+ test('old, unknown or changed managed cohort cannot enter or retain maintenance authority', async () => {
39
+ const f = await fixture();
40
+ try {
41
+ let entered = false;
42
+ await assert.rejects(boundary.withLegacySigningMaintenanceBoundary({ ...f, assertManagedCohort: async () => { throw Error('OLD_COHORT'); } }, async () => { entered = true; }), /OLD_COHORT/);
43
+ assert.equal(entered, false);
44
+ let digest = 'sha256:' + 'a'.repeat(64);
45
+ await assert.rejects(boundary.withLegacySigningMaintenanceBoundary({ ...f, assertManagedCohort: async () => digest }, async (owned) => {
46
+ digest = 'sha256:' + 'b'.repeat(64);
47
+ await owned.assertHeld();
48
+ }), /legacy_signing_maintenance_boundary_unavailable/);
49
+ await assert.rejects(readFile(resolve(f.home, 'autostart-mutation.lock')), { code: 'ENOENT' });
50
+ }
51
+ finally {
52
+ await rm(f.home, { recursive: true, force: true });
53
+ }
54
+ });
55
+ test('foreign or corrupt existing lock is preserved instead of recovered or silently accepted', async () => {
56
+ const f = await fixture();
57
+ try {
58
+ await mkdir(resolve(f.home, 'relay'));
59
+ const lock = resolve(f.home, 'relay', 'relay.pid.lock');
60
+ await writeFile(lock, 'not-a-known-owner');
61
+ let entered = false;
62
+ await assert.rejects(boundary.withLegacySigningMaintenanceBoundary(f, async () => { entered = true; }));
63
+ assert.equal(entered, false);
64
+ assert.equal(await readFile(lock, 'utf8'), 'not-a-known-owner');
65
+ }
66
+ finally {
67
+ await rm(f.home, { recursive: true, force: true });
68
+ }
69
+ });
70
+ test('changed registration or replaced lock withdraws authority and cleanup preserves the replacement', async () => {
71
+ const f = await fixture();
72
+ try {
73
+ const lock = resolve(f.home, 'relay', 'relay.pid.lock');
74
+ let retained;
75
+ await assert.rejects(boundary.withLegacySigningMaintenanceBoundary(f, async (owned) => {
76
+ retained = owned;
77
+ await unlink(lock);
78
+ await writeFile(lock, 'FOREIGN_REPLACEMENT');
79
+ await owned.assertHeld();
80
+ }));
81
+ assert.equal(await readFile(lock, 'utf8'), 'FOREIGN_REPLACEMENT');
82
+ await assert.rejects(retained.assertHeld());
83
+ }
84
+ finally {
85
+ await rm(f.home, { recursive: true, force: true });
86
+ }
87
+ });
88
+ test('registration change and cancellation invalidate the held boundary without undoing another actor edits', async () => {
89
+ const f = await fixture();
90
+ try {
91
+ const path = resolve(f.home, 'sessions', 'reviewer', 'registration.json'), original = JSON.parse(await readFile(path, 'utf8'));
92
+ await assert.rejects(boundary.withLegacySigningMaintenanceBoundary(f, async (owned) => {
93
+ await writeFile(path, JSON.stringify({ ...original, enabled: true }));
94
+ await owned.assertHeld();
95
+ }));
96
+ assert.equal(JSON.parse(await readFile(path, 'utf8')).enabled, true);
97
+ await writeFile(path, JSON.stringify(original));
98
+ const controller = new AbortController();
99
+ await assert.rejects(boundary.withLegacySigningMaintenanceBoundary({ ...f, signal: controller.signal }, async (owned) => {
100
+ controller.abort();
101
+ await owned.assertHeld();
102
+ }));
103
+ await assert.rejects(readFile(resolve(f.home, 'sessions', 'reviewer', 'service.lock')), { code: 'ENOENT' });
104
+ }
105
+ finally {
106
+ await rm(f.home, { recursive: true, force: true });
107
+ }
108
+ });
109
+ //# sourceMappingURL=legacySigningMaintenanceBoundary.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacySigningMaintenanceBoundary.test.js","sourceRoot":"","sources":["../src/legacySigningMaintenanceBoundary.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=maintenanceControlCaller.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenanceControlCaller.test.d.ts","sourceRoot":"","sources":["../src/maintenanceControlCaller.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ import assert from 'node:assert/strict';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { runInNewContext } from 'node:vm';
6
+ import test from 'node:test';
7
+ import ts from 'typescript';
8
+ async function source() { return ts.createSourceFile('index.ts', await readFile(fileURLToPath(new URL('../src/index.ts', import.meta.url)), 'utf8'), ts.ScriptTarget.Latest, true); }
9
+ function compile(text) {
10
+ return ts.transpileModule(text.replaceAll('import.meta.url', JSON.stringify(import.meta.url)), { compilerOptions: { target: ts.ScriptTarget.ES2023, module: ts.ModuleKind.None } }).outputText;
11
+ }
12
+ async function namedFixture() {
13
+ const ast = await source(), node = ast.statements.find(n => ts.isFunctionDeclaration(n) && n.name?.text === 'namedSessionCommand');
14
+ assert(node);
15
+ const events = [], workspaceId = '33333333-3333-4333-8333-333333333333';
16
+ const registration = { name: 'codex-fixture', enabled: false, bindingId: 'binding', identity: { workspaceId, organizationId: 'org_fixture', deviceId: 'device',
17
+ endpointId: 'endpoint', repositoryBindingId: 'repository' } };
18
+ class TransportFailure extends Error {
19
+ diagnostic = { phase: 'connect', osCode: 'ENOENT' };
20
+ }
21
+ const globals = {
22
+ namedSessionReadinessDiagnosticRequested: () => false, currentBootstrapHostScope: () => undefined, currentAcceptedSetupSessionScope: () => undefined,
23
+ currentNamedSessionChildOwner: () => undefined, process: { platform: 'linux', kill: () => { throw Object.assign(Error('absent'), { code: 'ESRCH' }); } },
24
+ namedSessionPaths: () => ({ root: '/owned/sessions/codex-fixture' }), dharmaHome: () => '/owned',
25
+ required: (flags, key) => { if (!flags.has(key))
26
+ throw Error('required'); return String(flags.get(key)); },
27
+ acquireNamedSessionStartupAdmission: async () => { events.push('admitted'); return async () => { events.push('released'); }; },
28
+ registry: async () => [{ workspaceId, organizationId: 'org_fixture', path: '/checkout' }], readDeviceConfig: async () => ({ organizationId: 'org_fixture', deviceId: 'device' }),
29
+ assertBootstrapHostSource: async () => { }, repositoryRoleScope: () => ({ endpointId: 'endpoint', repositoryBindingId: 'repository' }),
30
+ readNamedSession: async () => registration, assertRelayAutostartPaused: async () => { events.push('paused-proof'); },
31
+ relayProcessState: async () => 'stopped', relaySupervisorProcessState: async () => 'stopped',
32
+ NamedSessionTransportFailure: TransportFailure, namedSessionRequest: async () => { throw new TransportFailure(); },
33
+ reconcileStoppedNamedSessionLock: async () => ({ ok: true }), resolve,
34
+ };
35
+ const run = runInNewContext(compile(node.getText(ast)) + '\nnamedSessionCommand', globals);
36
+ const flags = new Map([['name', registration.name], ['workspace-id', workspaceId], ['registration-sha256', 'a'.repeat(64)], ['lock-sha256', 'b'.repeat(64)], ['apply', true]]);
37
+ return { run, flags, events, globals };
38
+ }
39
+ test('actual stopped-lock caller holds home-wide startup admission until reconciliation settles', { timeout: 5000 }, async () => {
40
+ const f = await namedFixture();
41
+ let complete;
42
+ f.globals.reconcileStoppedNamedSessionLock = async (_input, deps) => {
43
+ await deps.assertTopology();
44
+ assert.equal(await deps.processState(987654), 'stopped');
45
+ await new Promise(r => { complete = r; });
46
+ return { ok: true };
47
+ };
48
+ const result = f.run('reconcile-stopped-lock', f.flags);
49
+ let failure;
50
+ void result.catch(error => { failure = error; });
51
+ for (let n = 0; n < 1000 && !complete && !failure; n++)
52
+ await new Promise(r => setTimeout(r, 1));
53
+ if (failure)
54
+ throw failure;
55
+ assert(complete, 'bounded fixture admission did not settle');
56
+ assert.deepEqual(f.events, ['admitted', 'paused-proof']);
57
+ complete();
58
+ await result;
59
+ assert.deepEqual(f.events, ['admitted', 'paused-proof', 'released']);
60
+ });
61
+ test('actual stopped-lock caller refuses setup/peer contexts and malformed mutation options before admission', async () => {
62
+ for (const kind of ['host', 'peer', 'accepted', 'false-apply', 'unknown', 'conflict']) {
63
+ const f = await namedFixture();
64
+ if (kind === 'host')
65
+ f.globals.currentBootstrapHostScope = () => ({});
66
+ if (kind === 'peer')
67
+ f.globals.currentNamedSessionChildOwner = () => ({});
68
+ if (kind === 'accepted')
69
+ f.globals.currentAcceptedSetupSessionScope = () => ({});
70
+ if (kind === 'false-apply')
71
+ f.flags.set('apply', 'false');
72
+ if (kind === 'unknown')
73
+ f.flags.set('force', true);
74
+ if (kind === 'conflict')
75
+ f.flags.set('dry-run', true);
76
+ await assert.rejects(f.run('reconcile-stopped-lock', f.flags), /named_session_stopped_lock_options_invalid/);
77
+ assert.deepEqual(f.events, []);
78
+ }
79
+ });
80
+ test('actual stopped-lock caller rejects a listening owner and unknown or denied socket failures', async () => {
81
+ for (const kind of ['live', 'denied', 'unknown']) {
82
+ const f = await namedFixture();
83
+ f.globals.namedSessionRequest = kind === 'live' ? async () => ({ ok: true }) : async () => { throw Object.assign(Error('unconfirmed'), { code: kind === 'denied' ? 'EACCES' : 'ECONNRESET' }); };
84
+ f.globals.reconcileStoppedNamedSessionLock = async (_input, deps) => { await deps.assertTopology(); throw Error('must not mutate'); };
85
+ await assert.rejects(f.run('reconcile-stopped-lock', f.flags), /named_session_stopped_lock_unconfirmed/);
86
+ assert.deepEqual(f.events, ['admitted', 'paused-proof', 'released']);
87
+ }
88
+ });
89
+ test('actual autostart pause is plan-first, container-only and preserves the owning mutation admission', async () => {
90
+ const ast = await source(), nodes = [];
91
+ const visit = (n) => { if (ts.isIfStatement(n) && n.expression.getText(ast) === "command === 'relay' && subcommand === 'autostart'")
92
+ nodes.push(n); ts.forEachChild(n, visit); };
93
+ visit(ast);
94
+ assert.equal(nodes.length, 1);
95
+ for (const mode of ['plan', 'apply', 'foreign', 'false-apply']) {
96
+ const events = [], flags = new Map();
97
+ if (mode !== 'plan')
98
+ flags.set('apply', mode === 'false-apply' ? 'false' : true);
99
+ const globals = { command: 'relay', subcommand: 'autostart', positional: ['relay', 'autostart', 'pause'], flags, dharmaHome: () => '/owned',
100
+ withRelayStartupMutation: async (f) => { events.push('lock'); try {
101
+ return await f();
102
+ }
103
+ finally {
104
+ events.push('unlock');
105
+ } },
106
+ inspectOwnedRelayAutostart: async () => ({ backend: mode === 'foreign' ? 'systemd-user' : 'container-entrypoint' }),
107
+ stopRelayAutostart: async () => { events.push('pause'); }, assertRelayAutostartPaused: async () => { events.push('proof'); } };
108
+ const run = runInNewContext(compile('async function run(){' + nodes[0].getText(ast) + '}') + '\nrun', globals);
109
+ if (mode === 'foreign' || mode === 'false-apply') {
110
+ await assert.rejects(run());
111
+ assert(!events.includes('pause'));
112
+ }
113
+ else {
114
+ await run();
115
+ assert.deepEqual(events, mode === 'plan' ? ['lock', 'unlock'] : ['lock', 'pause', 'proof', 'unlock']);
116
+ }
117
+ }
118
+ });
119
+ //# sourceMappingURL=maintenanceControlCaller.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenanceControlCaller.test.js","sourceRoot":"","sources":["../src/maintenanceControlCaller.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"namedCodexThread.d.ts","sourceRoot":"","sources":["../src/namedCodexThread.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2EAA2E,CAAC;AAGzH,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAGhE,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAElH;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,uBAAuB,EACjF,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,UAAQ,mBAEzF"}
1
+ {"version":3,"file":"namedCodexThread.d.ts","sourceRoot":"","sources":["../src/namedCodexThread.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2EAA2E,CAAC;AAGzH,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAIhE,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAElH;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,uBAAuB,EACjF,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,UAAQ,mBAEzF"}
@@ -2,6 +2,7 @@ import { isAbsolute, resolve } from 'node:path';
2
2
  import { CODEX_PEER_TOOLS } from './codexPeerTools.js';
3
3
  import { CODEX_SETUP_TOOL } from './codexSetupAdmission.js';
4
4
  import { inspectCodexBootstrapHostPreparation } from './bootstrapHostScope.js';
5
+ import { CODEX_SIGNING_RECOVERY_TOOL, recordNamedCodexRecoveryToolDeclaration } from './codexSigningRecoveryTool.js';
5
6
  export async function startNamedCodexThread(transport, workspaceRoot, name) {
6
7
  return startThread(transport, workspaceRoot, name);
7
8
  }
@@ -24,7 +25,7 @@ async function startThread(transport, workspaceRoot, name, setupScope, bindPubli
24
25
  }
25
26
  const created = await request('thread/start', { cwd: workspaceRoot,
26
27
  approvalPolicy: 'never', permissions: 'dharma_bridge', ephemeral: false,
27
- dynamicTools: setupScope ? structuredClone([...CODEX_PEER_TOOLS, setupTool]) : CODEX_PEER_TOOLS });
28
+ dynamicTools: structuredClone([...CODEX_PEER_TOOLS, CODEX_SIGNING_RECOVERY_TOOL, ...(setupScope ? [setupTool] : [])]) });
28
29
  const thread = created?.thread;
29
30
  if (!thread || typeof thread.id !== 'string' || !/^[A-Za-z0-9_-]{1,128}$/.test(thread.id)
30
31
  || thread.cwd !== workspaceRoot || thread.status?.type !== 'idle')
@@ -45,6 +46,7 @@ async function startThread(transport, workspaceRoot, name, setupScope, bindPubli
45
46
  if (read?.thread?.id !== thread.id || read.thread.cwd !== workspaceRoot || read.thread.name !== name
46
47
  || read.thread.status?.type !== 'idle')
47
48
  throw new Error('named_session_thread_invalid');
49
+ recordNamedCodexRecoveryToolDeclaration(transport, thread.id);
48
50
  return thread.id;
49
51
  }
50
52
  //# sourceMappingURL=namedCodexThread.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"namedCodexThread.js","sourceRoot":"","sources":["../src/namedCodexThread.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namedCodexThread.js","sourceRoot":"","sources":["../src/namedCodexThread.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import assert from 'node:assert/strict';
2
2
  import test from 'node:test';
3
3
  import { resolve } from 'node:path';
4
4
  import { CODEX_PEER_TOOLS } from './codexPeerTools.js';
5
+ import { CODEX_SIGNING_RECOVERY_TOOL, CODEX_SIGNING_RECOVERY_TOOL_HASH, inspectNamedCodexRecoveryToolDeclaration } from './codexSigningRecoveryTool.js';
5
6
  import { startNamedCodexThread, startNamedCodexSetupThread } from './namedCodexThread.js';
6
7
  const workspace = resolve('synthetic-workspace');
7
8
  function fixture() {
@@ -18,7 +19,7 @@ test('new named threads materialize and resume before returning an identity for
18
19
  assert.equal(await startNamedCodexThread(f.transport, workspace, 'implementer'), 'thread-1');
19
20
  assert.deepEqual(f.calls, [
20
21
  { method: 'thread/start', params: { cwd: workspace, approvalPolicy: 'never', permissions: 'dharma_bridge',
21
- ephemeral: false, dynamicTools: CODEX_PEER_TOOLS } },
22
+ ephemeral: false, dynamicTools: [...CODEX_PEER_TOOLS, CODEX_SIGNING_RECOVERY_TOOL] } },
22
23
  { method: 'thread/name/set', params: { threadId: 'thread-1', name: 'implementer' } },
23
24
  { method: 'thread/archive', params: { threadId: 'thread-1' } },
24
25
  { method: 'thread/unarchive', params: { threadId: 'thread-1' } },
@@ -26,6 +27,20 @@ test('new named threads materialize and resume before returning an identity for
26
27
  { method: 'thread/read', params: { threadId: 'thread-1', includeTurns: false } },
27
28
  ]);
28
29
  });
30
+ test('an original named-thread creation declares the fixed recovery tool without granting recovery authority', async () => {
31
+ const f = fixture();
32
+ await startNamedCodexThread(f.transport, workspace, 'implementer');
33
+ const tools = f.calls[0].params.dynamicTools;
34
+ const recovery = tools.filter(tool => tool.name === 'dharma_signing_recovery');
35
+ assert.equal(recovery.length, 1, 'the recovery tool is absent from the original thread catalog');
36
+ assert.deepEqual(recovery[0].inputSchema.required, ['operationId', 'action']);
37
+ assert.equal(recovery[0].inputSchema.additionalProperties, false);
38
+ assert.equal(recovery[0].inputSchema.properties.operationId.format, 'uuid');
39
+ assert.equal(f.calls.some(call => call.method === 'turn/start'), false);
40
+ assert.equal(f.calls.some(call => call.method === 'thread/resume' && 'dynamicTools' in call.params), false);
41
+ assert.equal(inspectNamedCodexRecoveryToolDeclaration(f.transport, 'thread-1'), CODEX_SIGNING_RECOVERY_TOOL_HASH);
42
+ assert.equal(inspectNamedCodexRecoveryToolDeclaration(fixture().transport, 'thread-1'), null);
43
+ });
29
44
  test('invalid names and workspace roots never start a thread', async () => {
30
45
  const f = fixture();
31
46
  for (const [root, name] of [[workspace, '../foreign'], ['relative', 'implementer'], [workspace, 'x'.repeat(49)]]) {
@@ -77,6 +92,7 @@ test('persistence failures do not return or silently replace a new session ident
77
92
  assert.equal(f.calls.at(-1).method, failure);
78
93
  assert.equal(f.calls.filter(call => call.method === 'thread/start').length, 1);
79
94
  assert.equal(f.calls.some(call => call.method === 'turn/start'), false);
95
+ assert.equal(inspectNamedCodexRecoveryToolDeclaration(f.transport, 'thread-1'), null);
80
96
  }
81
97
  });
82
98
  test('unarchived and resumed scope mismatches fail before returning an identity', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"namedCodexThread.test.js","sourceRoot":"","sources":["../src/namedCodexThread.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namedCodexThread.test.js","sourceRoot":"","sources":["../src/namedCodexThread.test.ts"],"names":[],"mappings":"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"}
@@ -27,8 +27,8 @@ export declare function recoverStoppedNamedSession(input: {
27
27
  observedAt: string;
28
28
  organizationId: string;
29
29
  deviceId: string;
30
- workspaceId: string;
31
30
  provider: import("@dharma-ai-labs/agent-fabric-contracts").ProviderId;
31
+ workspaceId: string;
32
32
  repositoryBindingId: string;
33
33
  endpointId: string;
34
34
  membershipId: string;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=namedSessionStartupFence.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedSessionStartupFence.test.d.ts","sourceRoot":"","sources":["../src/namedSessionStartupFence.test.ts"],"names":[],"mappings":""}