@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.
- package/dist/bin.js +2 -2
- package/dist/bin.js.map +1 -1
- package/dist/bootstrapHostScope.test.js +1 -1
- package/dist/bootstrapHostScope.test.js.map +1 -1
- package/dist/bootstrapProcessCaller.test.js +1 -0
- package/dist/bootstrapProcessCaller.test.js.map +1 -1
- package/dist/bootstrapVaultScope.test.js +25 -1
- package/dist/bootstrapVaultScope.test.js.map +1 -1
- package/dist/codexBoundSession.d.ts +59 -0
- package/dist/codexBoundSession.d.ts.map +1 -1
- package/dist/codexBoundSession.js +140 -1
- package/dist/codexBoundSession.js.map +1 -1
- package/dist/codexInboxSession.d.ts +1 -1
- package/dist/codexInboxSession.d.ts.map +1 -1
- package/dist/codexRecoveryController.test.d.ts +2 -0
- package/dist/codexRecoveryController.test.d.ts.map +1 -0
- package/dist/codexRecoveryController.test.js +295 -0
- package/dist/codexRecoveryController.test.js.map +1 -0
- package/dist/codexScopedDispatch.test.js +2 -1
- package/dist/codexScopedDispatch.test.js.map +1 -1
- package/dist/codexSetupChildProvider.test.js +20 -0
- package/dist/codexSetupChildProvider.test.js.map +1 -1
- package/dist/codexSetupNativeHost.test.js +2 -1
- package/dist/codexSetupNativeHost.test.js.map +1 -1
- package/dist/codexSetupSessionCaller.test.js +1 -0
- package/dist/codexSetupSessionCaller.test.js.map +1 -1
- package/dist/codexSigningRecoveryNativeHost.d.ts +50 -0
- package/dist/codexSigningRecoveryNativeHost.d.ts.map +1 -0
- package/dist/codexSigningRecoveryNativeHost.js +186 -0
- package/dist/codexSigningRecoveryNativeHost.js.map +1 -0
- package/dist/codexSigningRecoveryNativeHost.test.d.ts +2 -0
- package/dist/codexSigningRecoveryNativeHost.test.d.ts.map +1 -0
- package/dist/codexSigningRecoveryNativeHost.test.js +475 -0
- package/dist/codexSigningRecoveryNativeHost.test.js.map +1 -0
- package/dist/codexSigningRecoveryTool.d.ts +25 -0
- package/dist/codexSigningRecoveryTool.d.ts.map +1 -0
- package/dist/codexSigningRecoveryTool.js +24 -0
- package/dist/codexSigningRecoveryTool.js.map +1 -0
- package/dist/containerRelayLifecycle.d.ts +2 -1
- package/dist/containerRelayLifecycle.d.ts.map +1 -1
- package/dist/containerRelayLifecycle.js +12 -0
- package/dist/containerRelayLifecycle.js.map +1 -1
- package/dist/containerRelayLifecycle.test.js +38 -6
- package/dist/containerRelayLifecycle.test.js.map +1 -1
- package/dist/containerRelayRuntimeTrust.test.js +10 -0
- package/dist/containerRelayRuntimeTrust.test.js.map +1 -1
- package/dist/cooperativeInboxSession.d.ts +1 -1
- package/dist/demoPackage.d.ts +1 -1
- package/dist/demoWatchControl.d.ts +6 -6
- package/dist/deviceSigningMaintenanceController.d.ts +35 -0
- package/dist/deviceSigningMaintenanceController.d.ts.map +1 -0
- package/dist/deviceSigningMaintenanceController.js +197 -0
- package/dist/deviceSigningMaintenanceController.js.map +1 -0
- package/dist/deviceSigningMaintenanceController.test.d.ts +2 -0
- package/dist/deviceSigningMaintenanceController.test.d.ts.map +1 -0
- package/dist/deviceSigningMaintenanceController.test.js +67 -0
- package/dist/deviceSigningMaintenanceController.test.js.map +1 -0
- package/dist/deviceSigningMaintenanceFlow.test.d.ts +2 -0
- package/dist/deviceSigningMaintenanceFlow.test.d.ts.map +1 -0
- package/dist/deviceSigningMaintenanceFlow.test.js +196 -0
- package/dist/deviceSigningMaintenanceFlow.test.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +723 -470
- package/dist/index.js.map +1 -1
- package/dist/legacySigningMaintenanceBoundary.d.ts +14 -0
- package/dist/legacySigningMaintenanceBoundary.d.ts.map +1 -0
- package/dist/legacySigningMaintenanceBoundary.js +128 -0
- package/dist/legacySigningMaintenanceBoundary.js.map +1 -0
- package/dist/legacySigningMaintenanceBoundary.test.d.ts +2 -0
- package/dist/legacySigningMaintenanceBoundary.test.d.ts.map +1 -0
- package/dist/legacySigningMaintenanceBoundary.test.js +109 -0
- package/dist/legacySigningMaintenanceBoundary.test.js.map +1 -0
- package/dist/maintenanceControlCaller.test.d.ts +2 -0
- package/dist/maintenanceControlCaller.test.d.ts.map +1 -0
- package/dist/maintenanceControlCaller.test.js +119 -0
- package/dist/maintenanceControlCaller.test.js.map +1 -0
- package/dist/namedCodexThread.d.ts.map +1 -1
- package/dist/namedCodexThread.js +3 -1
- package/dist/namedCodexThread.js.map +1 -1
- package/dist/namedCodexThread.test.js +17 -1
- package/dist/namedCodexThread.test.js.map +1 -1
- package/dist/namedSessionMaintenance.d.ts +1 -1
- package/dist/namedSessionStartupFence.test.d.ts +2 -0
- package/dist/namedSessionStartupFence.test.d.ts.map +1 -0
- package/dist/namedSessionStartupFence.test.js +81 -0
- package/dist/namedSessionStartupFence.test.js.map +1 -0
- package/dist/namedSessionStoppedLock.d.ts +34 -0
- package/dist/namedSessionStoppedLock.d.ts.map +1 -0
- package/dist/namedSessionStoppedLock.js +108 -0
- package/dist/namedSessionStoppedLock.js.map +1 -0
- package/dist/namedSessionStoppedLock.test.d.ts +2 -0
- package/dist/namedSessionStoppedLock.test.d.ts.map +1 -0
- package/dist/namedSessionStoppedLock.test.js +104 -0
- package/dist/namedSessionStoppedLock.test.js.map +1 -0
- package/dist/providerSessionReplyRecovery.d.ts +1 -1
- package/dist/relayAutostart.d.ts +3 -0
- package/dist/relayAutostart.d.ts.map +1 -1
- package/dist/relayAutostart.js +45 -6
- package/dist/relayAutostart.js.map +1 -1
- package/dist/relayAutostart.test.js +49 -1
- package/dist/relayAutostart.test.js.map +1 -1
- package/dist/relayRuntimeUpgrade.d.ts +2 -1
- package/dist/relayRuntimeUpgrade.d.ts.map +1 -1
- package/dist/relayRuntimeUpgrade.js +3 -3
- package/dist/relayRuntimeUpgrade.js.map +1 -1
- package/dist/relayRuntimeUpgradeCaller.test.js +76 -0
- package/dist/relayRuntimeUpgradeCaller.test.js.map +1 -1
- package/dist/relaySigningMaintenanceUpgrade.d.ts +44 -0
- package/dist/relaySigningMaintenanceUpgrade.d.ts.map +1 -0
- package/dist/relaySigningMaintenanceUpgrade.js +249 -0
- package/dist/relaySigningMaintenanceUpgrade.js.map +1 -0
- package/dist/relaySigningMaintenanceUpgrade.test.d.ts +2 -0
- package/dist/relaySigningMaintenanceUpgrade.test.d.ts.map +1 -0
- package/dist/relaySigningMaintenanceUpgrade.test.js +230 -0
- package/dist/relaySigningMaintenanceUpgrade.test.js.map +1 -0
- package/dist/schemas/codex-signing-recovery-native-progress.schema.json +16 -0
- package/dist/schemas/device-enrollment-recovery-journal.schema.json +20 -0
- package/dist/schemas/device-signing-maintenance-challenge.schema.json +185 -0
- package/dist/schemas/device-signing-maintenance-completion.schema.json +98 -0
- package/dist/schemas/device-signing-maintenance-context-request.schema.json +68 -0
- package/dist/schemas/device-signing-maintenance-context.schema.json +137 -0
- package/dist/schemas/device-signing-maintenance-control.schema.json +12 -0
- package/dist/schemas/device-signing-maintenance-controller-progress.schema.json +26 -0
- package/dist/schemas/device-signing-maintenance-delivery-request.schema.json +45 -0
- package/dist/schemas/device-signing-maintenance-host-progress.schema.json +121 -0
- package/dist/schemas/device-signing-maintenance-plan.schema.json +136 -0
- package/dist/schemas/device-signing-maintenance-preparation.schema.json +56 -0
- package/dist/schemas/device-signing-recovery-candidate.schema.json +28 -0
- package/dist/schemas/device-signing-recovery-challenge.schema.json +52 -0
- package/dist/schemas/device-signing-recovery-completion.schema.json +23 -0
- package/dist/schemas/device-signing-recovery-delivery-request.schema.json +16 -0
- package/dist/schemas/device-signing-recovery-delivery.schema.json +22 -0
- package/dist/schemas/device-signing-recovery-host-progress.schema.json +28 -0
- package/dist/schemas/device-signing-recovery-offer-progress.schema.json +32 -0
- package/dist/schemas/device-signing-recovery-offer-read-request.schema.json +16 -0
- package/dist/schemas/device-signing-recovery-offer-registration-receipt.schema.json +16 -0
- package/dist/schemas/device-signing-recovery-offer-registration-request.schema.json +18 -0
- package/dist/schemas/device-signing-recovery-offer-response.schema.json +43 -0
- package/dist/schemas/device-signing-recovery-plan.schema.json +40 -0
- package/dist/schemas/device-signing-recovery-preparation.schema.json +23 -0
- package/dist/schemas/local-signing-maintenance-upgrade-journal.schema.json +34 -0
- package/dist/schemas/local-signing-maintenance-upgrade.schema.json +33 -0
- package/dist/schemas/provider-session-recovery-declaration.schema.json +21 -0
- package/dist/signingMaintenanceCohort.test.d.ts +2 -0
- package/dist/signingMaintenanceCohort.test.d.ts.map +1 -0
- package/dist/signingMaintenanceCohort.test.js +55 -0
- package/dist/signingMaintenanceCohort.test.js.map +1 -0
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +4 -2
- package/dist/usage.js.map +1 -1
- package/dist/wslRelayHost.d.ts +2 -0
- package/dist/wslRelayHost.d.ts.map +1 -1
- package/dist/wslRelayHost.js +35 -0
- package/dist/wslRelayHost.js.map +1 -1
- package/dist/wslRelayHost.test.js +81 -4
- package/dist/wslRelayHost.test.js.map +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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;
|
|
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"}
|
package/dist/namedCodexThread.js
CHANGED
|
@@ -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:
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAC,oCAAoC,EAAC,MAAM,yBAAyB,CAAC;
|
|
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":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAG1F,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACjD,SAAS,OAAO;IACd,MAAM,KAAK,GAA+D,EAAE,CAAC;IAC7E,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACjG,MAAM,SAAS,GAA4B;QACzC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAClJ,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;KAC/B,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC;AAED,IAAI,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;IACxG,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,KAAK,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7F,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE;QACxB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe;gBACvG,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE;
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"namedSessionStartupFence.test.d.ts","sourceRoot":"","sources":["../src/namedSessionStartupFence.test.ts"],"names":[],"mappings":""}
|