@dharma-ai-labs/agent-fabric 0.2.152 → 0.2.154
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/bootstrapGitScope.test.d.ts +2 -0
- package/dist/bootstrapGitScope.test.d.ts.map +1 -0
- package/dist/bootstrapGitScope.test.js +115 -0
- package/dist/bootstrapGitScope.test.js.map +1 -0
- package/dist/bootstrapHostFiles.d.ts +5 -0
- package/dist/bootstrapHostFiles.d.ts.map +1 -0
- package/dist/bootstrapHostFiles.js +150 -0
- package/dist/bootstrapHostFiles.js.map +1 -0
- package/dist/bootstrapHostFiles.test.d.ts +2 -0
- package/dist/bootstrapHostFiles.test.d.ts.map +1 -0
- package/dist/bootstrapHostFiles.test.js +127 -0
- package/dist/bootstrapHostFiles.test.js.map +1 -0
- package/dist/bootstrapHostScope.d.ts +42 -0
- package/dist/bootstrapHostScope.d.ts.map +1 -0
- package/dist/bootstrapHostScope.js +224 -0
- package/dist/bootstrapHostScope.js.map +1 -0
- package/dist/bootstrapHostScope.test.d.ts +2 -0
- package/dist/bootstrapHostScope.test.d.ts.map +1 -0
- package/dist/bootstrapHostScope.test.js +577 -0
- package/dist/bootstrapHostScope.test.js.map +1 -0
- package/dist/bootstrapInstallationScope.test.d.ts +2 -0
- package/dist/bootstrapInstallationScope.test.d.ts.map +1 -0
- package/dist/bootstrapInstallationScope.test.js +68 -0
- package/dist/bootstrapInstallationScope.test.js.map +1 -0
- package/dist/bootstrapLauncherCaller.test.d.ts +2 -0
- package/dist/bootstrapLauncherCaller.test.d.ts.map +1 -0
- package/dist/bootstrapLauncherCaller.test.js +91 -0
- package/dist/bootstrapLauncherCaller.test.js.map +1 -0
- package/dist/bootstrapOwnedChildren.test.d.ts +2 -0
- package/dist/bootstrapOwnedChildren.test.d.ts.map +1 -0
- package/dist/bootstrapOwnedChildren.test.js +93 -0
- package/dist/bootstrapOwnedChildren.test.js.map +1 -0
- package/dist/bootstrapPolicyScope.test.d.ts +2 -0
- package/dist/bootstrapPolicyScope.test.d.ts.map +1 -0
- package/dist/bootstrapPolicyScope.test.js +261 -0
- package/dist/bootstrapPolicyScope.test.js.map +1 -0
- package/dist/bootstrapProcessCaller.test.d.ts +2 -0
- package/dist/bootstrapProcessCaller.test.d.ts.map +1 -0
- package/dist/bootstrapProcessCaller.test.js +262 -0
- package/dist/bootstrapProcessCaller.test.js.map +1 -0
- package/dist/bootstrapRegistryCaller.test.d.ts +2 -0
- package/dist/bootstrapRegistryCaller.test.d.ts.map +1 -0
- package/dist/bootstrapRegistryCaller.test.js +128 -0
- package/dist/bootstrapRegistryCaller.test.js.map +1 -0
- package/dist/bootstrapVaultScope.test.d.ts +2 -0
- package/dist/bootstrapVaultScope.test.d.ts.map +1 -0
- package/dist/bootstrapVaultScope.test.js +105 -0
- package/dist/bootstrapVaultScope.test.js.map +1 -0
- package/dist/codexBootstrapCompletion.test.d.ts +2 -0
- package/dist/codexBootstrapCompletion.test.d.ts.map +1 -0
- package/dist/codexBootstrapCompletion.test.js +630 -0
- package/dist/codexBootstrapCompletion.test.js.map +1 -0
- package/dist/codexBoundSession.d.ts +2 -2
- package/dist/codexBoundSession.d.ts.map +1 -1
- package/dist/codexBoundSession.js +23 -17
- package/dist/codexBoundSession.js.map +1 -1
- package/dist/codexBoundSession.test.js +3 -0
- package/dist/codexBoundSession.test.js.map +1 -1
- package/dist/codexInboxSession.d.ts.map +1 -1
- package/dist/codexInboxSession.js +3 -3
- package/dist/codexInboxSession.js.map +1 -1
- package/dist/codexScopedDispatch.test.d.ts +2 -0
- package/dist/codexScopedDispatch.test.d.ts.map +1 -0
- package/dist/codexScopedDispatch.test.js +56 -0
- package/dist/codexScopedDispatch.test.js.map +1 -0
- package/dist/codexSetupAdmission.d.ts +108 -0
- package/dist/codexSetupAdmission.d.ts.map +1 -0
- package/dist/codexSetupAdmission.js +214 -0
- package/dist/codexSetupAdmission.js.map +1 -0
- package/dist/codexSetupAdmission.test.d.ts +2 -0
- package/dist/codexSetupAdmission.test.d.ts.map +1 -0
- package/dist/codexSetupAdmission.test.js +578 -0
- package/dist/codexSetupAdmission.test.js.map +1 -0
- package/dist/codexSetupChildProvider.test.d.ts +2 -0
- package/dist/codexSetupChildProvider.test.d.ts.map +1 -0
- package/dist/codexSetupChildProvider.test.js +210 -0
- package/dist/codexSetupChildProvider.test.js.map +1 -0
- package/dist/codexSetupChildStartup.d.ts +38 -0
- package/dist/codexSetupChildStartup.d.ts.map +1 -0
- package/dist/codexSetupChildStartup.js +115 -0
- package/dist/codexSetupChildStartup.js.map +1 -0
- package/dist/codexSetupChildStartup.test.d.ts +2 -0
- package/dist/codexSetupChildStartup.test.d.ts.map +1 -0
- package/dist/codexSetupChildStartup.test.js +141 -0
- package/dist/codexSetupChildStartup.test.js.map +1 -0
- package/dist/codexSetupCliDispatch.test.d.ts +2 -0
- package/dist/codexSetupCliDispatch.test.d.ts.map +1 -0
- package/dist/codexSetupCliDispatch.test.js +138 -0
- package/dist/codexSetupCliDispatch.test.js.map +1 -0
- package/dist/codexSetupJournalOpen.test.d.ts +2 -0
- package/dist/codexSetupJournalOpen.test.d.ts.map +1 -0
- package/dist/codexSetupJournalOpen.test.js +101 -0
- package/dist/codexSetupJournalOpen.test.js.map +1 -0
- package/dist/codexSetupNativeHost.d.ts +31 -0
- package/dist/codexSetupNativeHost.d.ts.map +1 -0
- package/dist/codexSetupNativeHost.js +208 -0
- package/dist/codexSetupNativeHost.js.map +1 -0
- package/dist/codexSetupNativeHost.test.d.ts +2 -0
- package/dist/codexSetupNativeHost.test.d.ts.map +1 -0
- package/dist/codexSetupNativeHost.test.js +456 -0
- package/dist/codexSetupNativeHost.test.js.map +1 -0
- package/dist/codexSetupNativeWire.test.d.ts +2 -0
- package/dist/codexSetupNativeWire.test.d.ts.map +1 -0
- package/dist/codexSetupNativeWire.test.js +243 -0
- package/dist/codexSetupNativeWire.test.js.map +1 -0
- package/dist/codexSetupOwnedConnection.d.ts +14 -0
- package/dist/codexSetupOwnedConnection.d.ts.map +1 -0
- package/dist/codexSetupOwnedConnection.js +64 -0
- package/dist/codexSetupOwnedConnection.js.map +1 -0
- package/dist/codexSetupOwnedConnection.test.d.ts +2 -0
- package/dist/codexSetupOwnedConnection.test.d.ts.map +1 -0
- package/dist/codexSetupOwnedConnection.test.js +192 -0
- package/dist/codexSetupOwnedConnection.test.js.map +1 -0
- package/dist/codexSetupPortalCommand.test.d.ts +2 -0
- package/dist/codexSetupPortalCommand.test.d.ts.map +1 -0
- package/dist/codexSetupPortalCommand.test.js +146 -0
- package/dist/codexSetupPortalCommand.test.js.map +1 -0
- package/dist/codexSetupReadiness.d.ts +23 -0
- package/dist/codexSetupReadiness.d.ts.map +1 -0
- package/dist/codexSetupReadiness.js +74 -0
- package/dist/codexSetupReadiness.js.map +1 -0
- package/dist/codexSetupReadiness.test.d.ts +2 -0
- package/dist/codexSetupReadiness.test.d.ts.map +1 -0
- package/dist/codexSetupReadiness.test.js +145 -0
- package/dist/codexSetupReadiness.test.js.map +1 -0
- package/dist/codexSetupSessionCaller.test.d.ts +2 -0
- package/dist/codexSetupSessionCaller.test.d.ts.map +1 -0
- package/dist/codexSetupSessionCaller.test.js +352 -0
- package/dist/codexSetupSessionCaller.test.js.map +1 -0
- package/dist/codexSetupSessionHandoff.d.ts +48 -0
- package/dist/codexSetupSessionHandoff.d.ts.map +1 -0
- package/dist/codexSetupSessionHandoff.js +146 -0
- package/dist/codexSetupSessionHandoff.js.map +1 -0
- package/dist/codexSetupSessionHandoff.test.d.ts +2 -0
- package/dist/codexSetupSessionHandoff.test.d.ts.map +1 -0
- package/dist/codexSetupSessionHandoff.test.js +289 -0
- package/dist/codexSetupSessionHandoff.test.js.map +1 -0
- package/dist/codexSetupTransport.test.d.ts +2 -0
- package/dist/codexSetupTransport.test.d.ts.map +1 -0
- package/dist/codexSetupTransport.test.js +206 -0
- package/dist/codexSetupTransport.test.js.map +1 -0
- package/dist/codexSetupVaultJournal.d.ts +13 -0
- package/dist/codexSetupVaultJournal.d.ts.map +1 -0
- package/dist/codexSetupVaultJournal.js +28 -0
- package/dist/codexSetupVaultJournal.js.map +1 -0
- package/dist/codexSetupVaultJournal.test.d.ts +2 -0
- package/dist/codexSetupVaultJournal.test.d.ts.map +1 -0
- package/dist/codexSetupVaultJournal.test.js +104 -0
- package/dist/codexSetupVaultJournal.test.js.map +1 -0
- package/dist/containerChildCleanup.test.d.ts +2 -0
- package/dist/containerChildCleanup.test.d.ts.map +1 -0
- package/dist/containerChildCleanup.test.js +145 -0
- package/dist/containerChildCleanup.test.js.map +1 -0
- package/dist/containerRelayLifecycle.d.ts +1 -1
- package/dist/containerRelayLifecycle.d.ts.map +1 -1
- package/dist/containerRelayLifecycle.js +29 -37
- package/dist/containerRelayLifecycle.js.map +1 -1
- package/dist/containerRelayLifecycle.test.js +13 -0
- package/dist/containerRelayLifecycle.test.js.map +1 -1
- package/dist/cooperativeInboxSession.d.ts +2 -2
- package/dist/cooperativeInboxSession.d.ts.map +1 -1
- package/dist/cooperativeInboxSession.js +21 -13
- package/dist/cooperativeInboxSession.js.map +1 -1
- package/dist/cooperativeInboxSession.test.js +65 -0
- package/dist/cooperativeInboxSession.test.js.map +1 -1
- package/dist/demoWatchControl.d.ts +3 -3
- package/dist/index.d.ts +55 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1650 -557
- package/dist/index.js.map +1 -1
- package/dist/namedCodexSkillDiscovery.d.ts +15 -0
- package/dist/namedCodexSkillDiscovery.d.ts.map +1 -0
- package/dist/namedCodexSkillDiscovery.js +90 -0
- package/dist/namedCodexSkillDiscovery.js.map +1 -0
- package/dist/namedCodexSkillDiscovery.test.d.ts +2 -0
- package/dist/namedCodexSkillDiscovery.test.d.ts.map +1 -0
- package/dist/namedCodexSkillDiscovery.test.js +37 -0
- package/dist/namedCodexSkillDiscovery.test.js.map +1 -0
- package/dist/namedCodexThread.d.ts +2 -0
- package/dist/namedCodexThread.d.ts.map +1 -1
- package/dist/namedCodexThread.js +13 -4
- package/dist/namedCodexThread.js.map +1 -1
- package/dist/namedSessionChildOwner.d.ts +17 -0
- package/dist/namedSessionChildOwner.d.ts.map +1 -0
- package/dist/namedSessionChildOwner.js +122 -0
- package/dist/namedSessionChildOwner.js.map +1 -0
- package/dist/namedSessionChildOwner.test.d.ts +2 -0
- package/dist/namedSessionChildOwner.test.d.ts.map +1 -0
- package/dist/namedSessionChildOwner.test.js +203 -0
- package/dist/namedSessionChildOwner.test.js.map +1 -0
- package/dist/namedSessionEvidence.d.ts +2 -2
- package/dist/namedSessionEvidence.d.ts.map +1 -1
- package/dist/namedSessionEvidence.js +2 -2
- package/dist/namedSessionEvidence.js.map +1 -1
- package/dist/namedSessionEvidence.test.js +24 -1
- package/dist/namedSessionEvidence.test.js.map +1 -1
- package/dist/namedSessionRepositoryState.d.ts +2 -2
- package/dist/namedSessionRepositoryState.d.ts.map +1 -1
- package/dist/namedSessionService.d.ts +4 -2
- package/dist/namedSessionService.d.ts.map +1 -1
- package/dist/namedSessionService.js +18 -1
- package/dist/namedSessionService.js.map +1 -1
- package/dist/namedSessionService.test.js +31 -2
- package/dist/namedSessionService.test.js.map +1 -1
- package/dist/namedSessionTaskExportSync.d.ts +3 -3
- package/dist/namedSessionTaskExportSync.d.ts.map +1 -1
- package/dist/namedSessionTaskExportSync.js +6 -6
- package/dist/namedSessionTaskExportSync.js.map +1 -1
- package/dist/namedSessionTrust.d.ts +2 -2
- package/dist/namedSessionTrust.d.ts.map +1 -1
- package/dist/namedSessionTrust.js +3 -2
- package/dist/namedSessionTrust.js.map +1 -1
- package/dist/namedSessionTrust.test.js +2 -1
- package/dist/namedSessionTrust.test.js.map +1 -1
- package/dist/ownedChildLifecycle.d.ts +13 -0
- package/dist/ownedChildLifecycle.d.ts.map +1 -0
- package/dist/ownedChildLifecycle.js +87 -0
- package/dist/ownedChildLifecycle.js.map +1 -0
- package/dist/ownedChildLifecycle.test.d.ts +2 -0
- package/dist/ownedChildLifecycle.test.d.ts.map +1 -0
- package/dist/ownedChildLifecycle.test.js +133 -0
- package/dist/ownedChildLifecycle.test.js.map +1 -0
- package/dist/pidLock.test.js +242 -9
- package/dist/pidLock.test.js.map +1 -1
- package/dist/providerSessionChannel.d.ts +1 -1
- package/dist/providerSessionChannel.d.ts.map +1 -1
- package/dist/providerSessionChannel.js +7 -3
- package/dist/providerSessionChannel.js.map +1 -1
- package/dist/providerSessionChannel.test.js +20 -0
- package/dist/providerSessionChannel.test.js.map +1 -1
- package/dist/providerSessionReplyRecovery.d.ts +2 -2
- package/dist/providerSessionReplyRecovery.d.ts.map +1 -1
- package/dist/providerSessionReplyRecovery.js +3 -3
- package/dist/providerSessionReplyRecovery.js.map +1 -1
- package/dist/relayAutostart.d.ts.map +1 -1
- package/dist/relayAutostart.js +12 -9
- package/dist/relayAutostart.js.map +1 -1
- package/dist/relayRuntimeUpgrade.d.ts +1 -1
- package/dist/relayRuntimeUpgrade.d.ts.map +1 -1
- package/dist/relayRuntimeUpgrade.js +3 -1
- package/dist/relayRuntimeUpgrade.js.map +1 -1
- package/dist/relayRuntimeUpgrade.test.js +113 -0
- package/dist/relayRuntimeUpgrade.test.js.map +1 -1
- package/dist/relayRuntimeUpgradeCaller.test.js +12 -1
- package/dist/relayRuntimeUpgradeCaller.test.js.map +1 -1
- package/dist/relaySupervisor.d.ts.map +1 -1
- package/dist/relaySupervisor.js +19 -14
- package/dist/relaySupervisor.js.map +1 -1
- package/dist/relaySupervisor.test.js +26 -0
- package/dist/relaySupervisor.test.js.map +1 -1
- package/dist/relaySupervisorCleanup.test.d.ts +2 -0
- package/dist/relaySupervisorCleanup.test.d.ts.map +1 -0
- package/dist/relaySupervisorCleanup.test.js +69 -0
- package/dist/relaySupervisorCleanup.test.js.map +1 -0
- package/dist/repositoryInstallerFiles.d.ts +19 -1
- package/dist/repositoryInstallerFiles.d.ts.map +1 -1
- package/dist/repositoryInstallerFiles.js +205 -29
- package/dist/repositoryInstallerFiles.js.map +1 -1
- package/dist/repositoryInstallerScope.test.d.ts +2 -0
- package/dist/repositoryInstallerScope.test.d.ts.map +1 -0
- package/dist/repositoryInstallerScope.test.js +513 -0
- package/dist/repositoryInstallerScope.test.js.map +1 -0
- package/dist/repositoryKnowledge.d.ts.map +1 -1
- package/dist/repositoryKnowledge.js +177 -37
- package/dist/repositoryKnowledge.js.map +1 -1
- package/dist/repositoryKnowledgeScope.test.d.ts +2 -0
- package/dist/repositoryKnowledgeScope.test.d.ts.map +1 -0
- package/dist/repositoryKnowledgeScope.test.js +316 -0
- package/dist/repositoryKnowledgeScope.test.js.map +1 -0
- package/dist/repositoryOnboardingCaller.test.js +61 -4
- package/dist/repositoryOnboardingCaller.test.js.map +1 -1
- package/dist/repositoryPackage.d.ts.map +1 -1
- package/dist/repositoryPackage.js +340 -59
- package/dist/repositoryPackage.js.map +1 -1
- package/dist/repositoryPackageDelivery.test.js +65 -0
- package/dist/repositoryPackageDelivery.test.js.map +1 -1
- package/dist/repositoryPackageScope.test.d.ts +2 -0
- package/dist/repositoryPackageScope.test.d.ts.map +1 -0
- package/dist/repositoryPackageScope.test.js +578 -0
- package/dist/repositoryPackageScope.test.js.map +1 -0
- package/dist/schemas/codex-setup-child-start.schema.json +12 -0
- package/dist/schemas/codex-setup-intent.schema.json +27 -0
- package/dist/schemas/local-codex-setup-session.schema.json +39 -0
- package/dist/schemas/setup-claim-failure.schema.json +15 -0
- package/dist/skillInstallationScope.test.d.ts +2 -0
- package/dist/skillInstallationScope.test.d.ts.map +1 -0
- package/dist/skillInstallationScope.test.js +64 -0
- package/dist/skillInstallationScope.test.js.map +1 -0
- package/dist/skillPreparationCache.test.js +12 -4
- package/dist/skillPreparationCache.test.js.map +1 -1
- package/dist/skillPreparationCaller.test.js +31 -1
- package/dist/skillPreparationCaller.test.js.map +1 -1
- package/dist/startupCommitScope.test.d.ts +2 -0
- package/dist/startupCommitScope.test.d.ts.map +1 -0
- package/dist/startupCommitScope.test.js +172 -0
- package/dist/startupCommitScope.test.js.map +1 -0
- package/dist/workspaceRegistry.d.ts.map +1 -1
- package/dist/workspaceRegistry.js +7 -3
- package/dist/workspaceRegistry.js.map +1 -1
- package/dist/workspaceRegistry.test.js +51 -0
- package/dist/workspaceRegistry.test.js.map +1 -1
- package/dist/workspaceRegistryRecovery.d.ts.map +1 -1
- package/dist/workspaceRegistryRecovery.js +171 -64
- package/dist/workspaceRegistryRecovery.js.map +1 -1
- package/dist/workspaceRegistryRecoveryScope.test.d.ts +2 -0
- package/dist/workspaceRegistryRecoveryScope.test.d.ts.map +1 -0
- package/dist/workspaceRegistryRecoveryScope.test.js +416 -0
- package/dist/workspaceRegistryRecoveryScope.test.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapPolicyScope.test.js","sourceRoot":"","sources":["../src/bootstrapPolicyScope.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapProcessCaller.test.d.ts","sourceRoot":"","sources":["../src/bootstrapProcessCaller.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { execFile, spawn } from 'node:child_process';
|
|
3
|
+
import { mkdtemp, readFile, realpath, rm } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { dirname, resolve } from 'node:path';
|
|
6
|
+
import test from 'node:test';
|
|
7
|
+
import { compileFunction } from 'node:vm';
|
|
8
|
+
import { promisify } from 'node:util';
|
|
9
|
+
import ts from 'typescript';
|
|
10
|
+
import { assertBootstrapHostSource, captureBootstrapHostChild, currentBootstrapHostScope, drainBootstrapHostChildren, prepareCodexBootstrapHost, runCodexBootstrapHostScope } from './bootstrapHostScope.js';
|
|
11
|
+
import { watchOwnedChild } from './ownedChildLifecycle.js';
|
|
12
|
+
import { createNamedSessionChildOwner, currentNamedSessionChildOwner } from './namedSessionChildOwner.js';
|
|
13
|
+
import { currentAcceptedSetupSessionScope, originalCodexSetupSessionSender } from './codexSetupSessionHandoff.js';
|
|
14
|
+
const id = (n) => `${String(n).padStart(8, '0')}-1111-4111-8111-111111111111`;
|
|
15
|
+
// Actual caller declarations, with synthetic registry/OS readiness boundaries.
|
|
16
|
+
// The OS spawn boundary records exact argv/options, then creates C-only nodes.
|
|
17
|
+
async function fixture(t) {
|
|
18
|
+
const workspace = await realpath(await mkdtemp(resolve(tmpdir(), 'dharma-process-caller-'))), now = Date.now();
|
|
19
|
+
const hash = `sha256:${'a'.repeat(64)}`;
|
|
20
|
+
const prepared = prepareCodexBootstrapHost({ workspace, signal: new AbortController().signal, current: async () => true,
|
|
21
|
+
intent: { schema: 'dharma.codex-setup-intent/v1', operationId: id(1), setupReference: id(2),
|
|
22
|
+
organizationId: 'org_demo', recipientMembershipId: id(3), origin: 'https://hq.example',
|
|
23
|
+
repositoryFingerprint: hash, policyRevision: 'policy-v1', scopeDigest: hash, contractDigest: hash,
|
|
24
|
+
hostContextId: id(4), issuedAt: new Date(now - 1000).toISOString(), expiresAt: new Date(now + 60_000).toISOString() } });
|
|
25
|
+
const entry = resolve(workspace, 'index.js'), policyPath = resolve(workspace, '.dharma', 'approved-policy.json');
|
|
26
|
+
const item = { path: workspace, workspaceId: id(5), organizationId: 'org_demo', repositoryRemoteHash: hash };
|
|
27
|
+
const children = [], serviceChildren = [], effects = [], spawnCalls = [];
|
|
28
|
+
let running = false, preexisting = false, withdrawInSpawn = false, withdrawInStatus = false;
|
|
29
|
+
let container = false, withdrawInBackend = false, withdrawInContainerStart = false;
|
|
30
|
+
let standingService = false;
|
|
31
|
+
let serviceUnavailable = false;
|
|
32
|
+
t.after(async () => {
|
|
33
|
+
await drainBootstrapHostChildren(prepared.scope);
|
|
34
|
+
for (const child of children)
|
|
35
|
+
await watchOwnedChild(child).stop({ graceMs: 1000 });
|
|
36
|
+
for (const child of serviceChildren)
|
|
37
|
+
await watchOwnedChild(child).stop({ graceMs: 1000 });
|
|
38
|
+
await rm(workspace, { recursive: true, force: true });
|
|
39
|
+
});
|
|
40
|
+
const dependencies = {
|
|
41
|
+
currentBootstrapHostScope, captureBootstrapHostChild, assertBootstrapHostSource, currentNamedSessionChildOwner, currentAcceptedSetupSessionScope,
|
|
42
|
+
requestBootstrapNamedSession: async (scope) => originalCodexSetupSessionSender(scope),
|
|
43
|
+
resolve, dirname, Error, Promise, Number, String, Date, VERSION: '0.2.153',
|
|
44
|
+
process: { execPath: process.execPath, env: {}, platform: 'linux' },
|
|
45
|
+
setTimeout: (done) => { queueMicrotask(done); },
|
|
46
|
+
fileURLToPath: () => entry, dharmaHome: () => resolve(workspace, 'synthetic-home'),
|
|
47
|
+
readDeviceConfig: async () => ({ organizationId: 'org_demo', deviceId: id(6) }), registry: async () => [item],
|
|
48
|
+
loadOrganizationPolicy: async () => ({ serverAuthorization: { workspaceId: item.workspaceId } }),
|
|
49
|
+
relayProcessState: async () => running || preexisting ? 'running' : 'stopped',
|
|
50
|
+
relaySupervisorProcessState: async () => running || preexisting ? 'running' : 'stopped',
|
|
51
|
+
relayAutostartStatus: async () => {
|
|
52
|
+
if (withdrawInBackend)
|
|
53
|
+
prepared.scope.close();
|
|
54
|
+
return { backend: container ? 'container-entrypoint' : 'systemd-user' };
|
|
55
|
+
},
|
|
56
|
+
startRelayAutostart: async () => {
|
|
57
|
+
if (serviceUnavailable)
|
|
58
|
+
throw new Error('autostart_conflict: owned service unavailable');
|
|
59
|
+
effects.push(container ? 'container_start' : 'user_service_start');
|
|
60
|
+
running = true;
|
|
61
|
+
if (standingService)
|
|
62
|
+
serviceChildren.push(spawn(process.execPath, ['-e', 'setInterval(() => {}, 1000)'], { cwd: workspace, stdio: 'ignore' }));
|
|
63
|
+
if (withdrawInContainerStart)
|
|
64
|
+
prepared.scope.close();
|
|
65
|
+
},
|
|
66
|
+
spawn: (_command, argv, options) => {
|
|
67
|
+
spawnCalls.push({ argv, options });
|
|
68
|
+
effects.push('spawn');
|
|
69
|
+
const child = spawn(process.execPath, ['-e', 'setInterval(() => {}, 1000)'], { cwd: workspace, stdio: 'ignore' });
|
|
70
|
+
children.push(child);
|
|
71
|
+
running = true;
|
|
72
|
+
if (withdrawInSpawn)
|
|
73
|
+
prepared.scope.close();
|
|
74
|
+
return child;
|
|
75
|
+
},
|
|
76
|
+
readFile: async (path) => {
|
|
77
|
+
if (path.endsWith('supervisor-workspace.json'))
|
|
78
|
+
return JSON.stringify({ pid: 101, version: '0.2.153',
|
|
79
|
+
standardRepositories: true, organizationId: 'org_demo', deviceId: id(6) });
|
|
80
|
+
if (path.endsWith('last-successful-poll.json'))
|
|
81
|
+
return '{}';
|
|
82
|
+
return '101';
|
|
83
|
+
},
|
|
84
|
+
repositoryRelayObservationReady: () => true,
|
|
85
|
+
waitForRelayReadiness: async (input) => ({ state: await input.processState() }),
|
|
86
|
+
required: (flags, name) => flags.get(name),
|
|
87
|
+
namedSessionPaths: () => ({ root: resolve(workspace, 'synthetic-home', 'sessions') }),
|
|
88
|
+
repositoryRoleScope: () => ({ endpointId: id(7), repositoryBindingId: id(8) }),
|
|
89
|
+
readNamedSession: async () => null,
|
|
90
|
+
verifyAgentFabricSkillInstallation: async () => ({}), repositorySharedReady: async () => true,
|
|
91
|
+
verifyNamedSessionVisibleSkill: async () => { },
|
|
92
|
+
saveNamedSession: async () => { effects.push('registration'); },
|
|
93
|
+
namedSessionRequest: async () => {
|
|
94
|
+
effects.push('status');
|
|
95
|
+
if (!running && !preexisting)
|
|
96
|
+
throw new Error('not running');
|
|
97
|
+
if (withdrawInStatus)
|
|
98
|
+
prepared.scope.close();
|
|
99
|
+
return { ok: true, state: 'running' };
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
const baseline = process.env.DHARMA_RELAY_CALLER_BASELINE_SHA;
|
|
103
|
+
if (baseline && !/^[a-f0-9]{40}$/.test(baseline))
|
|
104
|
+
throw new Error('relay_caller_baseline_invalid');
|
|
105
|
+
const source = baseline ? (await promisify(execFile)('git', ['show', `${baseline}:packages/cli/src/index.ts`], { cwd: resolve(import.meta.dirname, '../../..'), maxBuffer: 4 * 1024 * 1024 })).stdout
|
|
106
|
+
: await readFile(new URL('../src/index.ts', import.meta.url), 'utf8');
|
|
107
|
+
const ast = ts.createSourceFile('index.ts', source, ts.ScriptTarget.Latest, true);
|
|
108
|
+
async function declaration(name) {
|
|
109
|
+
const declarations = ast.statements.filter(node => ts.isFunctionDeclaration(node) && node.name?.text === name);
|
|
110
|
+
assert.equal(declarations.length, 1);
|
|
111
|
+
const compiled = ts.transpileModule(declarations[0].getText(ast), { compilerOptions: {
|
|
112
|
+
target: ts.ScriptTarget.ES2023, module: ts.ModuleKind.CommonJS
|
|
113
|
+
}, reportDiagnostics: true });
|
|
114
|
+
assert.equal(compiled.diagnostics?.filter(d => d.category === ts.DiagnosticCategory.Error).length, 0);
|
|
115
|
+
return compileFunction(compiled.outputText.replaceAll('import.meta.url', '"file:///synthetic/index.js"')
|
|
116
|
+
+ `\nreturn ${name};`, ['exports', ...Object.keys(dependencies)])({}, ...Object.values(dependencies));
|
|
117
|
+
}
|
|
118
|
+
const relay = await declaration('startRelayDaemon'), session = await declaration('namedSessionCommand');
|
|
119
|
+
const call = (kind) => runCodexBootstrapHostScope(prepared.scope, async () => kind === 'relay'
|
|
120
|
+
? relay(resolve(item.path, '.dharma', 'approved-policy.json'))
|
|
121
|
+
: session('start', new Map([['name', 'implementer'], ['workspace-id', item.workspaceId], ['apply', true]])));
|
|
122
|
+
return { prepared, call, session, children, serviceChildren, effects, spawnCalls, item, workspace, entry, policyPath,
|
|
123
|
+
useStandingService: () => { standingService = true; },
|
|
124
|
+
denyStandingService: () => { serviceUnavailable = true; },
|
|
125
|
+
legacyRelay: () => relay(policyPath),
|
|
126
|
+
preexisting: () => { preexisting = true; }, cancelInSpawn: () => { withdrawInSpawn = true; withdrawInContainerStart = true; },
|
|
127
|
+
cancelInStatus: () => { withdrawInStatus = true; }, useContainer: () => { container = true; },
|
|
128
|
+
cancelInBackend: () => { withdrawInBackend = true; },
|
|
129
|
+
cancelInContainerStart: () => { withdrawInContainerStart = true; } };
|
|
130
|
+
}
|
|
131
|
+
test('actual relay caller refuses container start after setup withdrawal during backend discovery', async (t) => {
|
|
132
|
+
const f = await fixture(t);
|
|
133
|
+
f.useContainer();
|
|
134
|
+
f.cancelInBackend();
|
|
135
|
+
await assert.rejects(f.call('relay'), /codex_setup_host_scope_unavailable/);
|
|
136
|
+
assert.equal(f.effects.includes('container_start'), false);
|
|
137
|
+
assert.equal(f.children.length, 0);
|
|
138
|
+
});
|
|
139
|
+
test('actual relay caller withholds readiness after withdrawal inside admitted container start', async (t) => {
|
|
140
|
+
const f = await fixture(t);
|
|
141
|
+
f.useContainer();
|
|
142
|
+
f.cancelInContainerStart();
|
|
143
|
+
await assert.rejects(f.call('relay'), /codex_setup_host_scope_unavailable/);
|
|
144
|
+
assert.equal(f.effects.filter(effect => effect === 'container_start').length, 1);
|
|
145
|
+
assert.equal(f.children.length, 0, 'a startup request is not adoption of the standing controller');
|
|
146
|
+
});
|
|
147
|
+
test('actual relay caller preserves an already running container-owned service without a start request', async (t) => {
|
|
148
|
+
const f = await fixture(t);
|
|
149
|
+
f.useContainer();
|
|
150
|
+
f.preexisting();
|
|
151
|
+
await f.call('relay');
|
|
152
|
+
assert.equal(f.effects.includes('container_start'), false);
|
|
153
|
+
assert.equal(f.children.length, 0);
|
|
154
|
+
});
|
|
155
|
+
test('actual relay caller requests its verified user service instead of spawning a setup-owned supervisor', async (t) => {
|
|
156
|
+
const f = await fixture(t);
|
|
157
|
+
f.useStandingService();
|
|
158
|
+
await f.call('relay');
|
|
159
|
+
assert.equal(f.effects.filter(effect => effect === 'user_service_start').length, 1);
|
|
160
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
161
|
+
assert.equal(f.children.length, 0);
|
|
162
|
+
assert.equal(f.serviceChildren.length, 1);
|
|
163
|
+
await drainBootstrapHostChildren(f.prepared.scope);
|
|
164
|
+
assert.equal(f.serviceChildren[0].exitCode, null);
|
|
165
|
+
assert.equal(f.serviceChildren[0].signalCode, null);
|
|
166
|
+
// The fixture's service owner, not the setup scope, drains this handle in t.after.
|
|
167
|
+
});
|
|
168
|
+
test('actual relay caller refuses user service start after setup withdrawal during backend discovery', async (t) => {
|
|
169
|
+
const f = await fixture(t);
|
|
170
|
+
f.cancelInBackend();
|
|
171
|
+
await assert.rejects(f.call('relay'), /codex_setup_host_scope_unavailable/);
|
|
172
|
+
assert.equal(f.effects.includes('user_service_start'), false);
|
|
173
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
174
|
+
});
|
|
175
|
+
test('actual relay caller withholds readiness after withdrawal inside admitted user service start', async (t) => {
|
|
176
|
+
const f = await fixture(t);
|
|
177
|
+
f.cancelInContainerStart();
|
|
178
|
+
await assert.rejects(f.call('relay'), /codex_setup_host_scope_unavailable/);
|
|
179
|
+
assert.equal(f.effects.filter(effect => effect === 'user_service_start').length, 1);
|
|
180
|
+
assert.equal(f.children.length, 0);
|
|
181
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
182
|
+
});
|
|
183
|
+
test('actual relay caller refuses an unavailable owned user service without detached fallback', async (t) => {
|
|
184
|
+
const f = await fixture(t);
|
|
185
|
+
f.denyStandingService();
|
|
186
|
+
await assert.rejects(f.call('relay'), /autostart_conflict/);
|
|
187
|
+
assert.equal(f.children.length, 0);
|
|
188
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
189
|
+
assert.equal(f.effects.includes('user_service_start'), false);
|
|
190
|
+
});
|
|
191
|
+
test('actual legacy relay caller retains its unscoped detached supervisor startup', async (t) => {
|
|
192
|
+
const f = await fixture(t);
|
|
193
|
+
await f.legacyRelay();
|
|
194
|
+
assert.equal(f.spawnCalls.length, 1);
|
|
195
|
+
assert.equal(f.spawnCalls[0].options.detached, true);
|
|
196
|
+
assert.equal(f.effects.includes('user_service_start'), false);
|
|
197
|
+
});
|
|
198
|
+
for (const kind of ['relay']) {
|
|
199
|
+
test(`actual ${kind} caller uses its selected lifecycle owner on setup withdrawal`, async (t) => {
|
|
200
|
+
const f = await fixture(t);
|
|
201
|
+
await f.call(kind);
|
|
202
|
+
assert.equal(f.effects.filter(effect => effect === 'user_service_start').length, 1);
|
|
203
|
+
assert.equal(f.children.length, 0);
|
|
204
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
205
|
+
await drainBootstrapHostChildren(f.prepared.scope);
|
|
206
|
+
});
|
|
207
|
+
test(`actual ${kind} caller preserves a preexisting service without acquiring its process`, async (t) => {
|
|
208
|
+
const f = await fixture(t);
|
|
209
|
+
f.preexisting();
|
|
210
|
+
await f.call(kind);
|
|
211
|
+
await drainBootstrapHostChildren(f.prepared.scope);
|
|
212
|
+
assert.equal(f.children.length, 0);
|
|
213
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
214
|
+
});
|
|
215
|
+
test(`actual ${kind} caller refuses completion after cancellation inside its admitted startup`, async (t) => {
|
|
216
|
+
const f = await fixture(t);
|
|
217
|
+
f.cancelInSpawn();
|
|
218
|
+
await assert.rejects(f.call(kind), /^Error: codex_setup_host_scope_unavailable$/);
|
|
219
|
+
await drainBootstrapHostChildren(f.prepared.scope);
|
|
220
|
+
assert.equal(f.children.length, 0);
|
|
221
|
+
assert.equal(f.effects.filter(effect => effect === 'user_service_start').length, 1);
|
|
222
|
+
});
|
|
223
|
+
test(`actual ${kind} caller refuses a foreign checkout before starting a process`, async (t) => {
|
|
224
|
+
const f = await fixture(t);
|
|
225
|
+
f.item.path = resolve(f.workspace, 'foreign');
|
|
226
|
+
await assert.rejects(f.call(kind), /^Error: codex_setup_host_scope_unavailable$/);
|
|
227
|
+
assert.equal(f.prepared.scope.signal.aborted, true);
|
|
228
|
+
assert.equal(f.children.length, 0);
|
|
229
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
test('actual session caller refuses a setup scope without its original private sender and acquires no child', async (t) => {
|
|
233
|
+
const f = await fixture(t);
|
|
234
|
+
await assert.rejects(f.call('session'), /^Error: setup_session_sender_unavailable$/);
|
|
235
|
+
await drainBootstrapHostChildren(f.prepared.scope);
|
|
236
|
+
assert.equal(f.children.length, 0);
|
|
237
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
238
|
+
assert.deepEqual(f.effects, []);
|
|
239
|
+
});
|
|
240
|
+
test('actual session caller binds a fresh attached child to its standing supervisor and drains it at shutdown', async (t) => {
|
|
241
|
+
const f = await fixture(t), signal = new AbortController(), owner = createNamedSessionChildOwner(signal.signal);
|
|
242
|
+
await owner.run(async () => {
|
|
243
|
+
await f.session('start', new Map([['name', 'reviewer'], ['workspace-id', f.item.workspaceId], ['apply', true]]));
|
|
244
|
+
assert.equal(f.children.length, 1);
|
|
245
|
+
assert.equal(f.spawnCalls[0].options.detached, false);
|
|
246
|
+
assert.equal(f.children[0].exitCode, null);
|
|
247
|
+
});
|
|
248
|
+
assert.ok(f.children[0].exitCode !== null || f.children[0].signalCode !== null);
|
|
249
|
+
});
|
|
250
|
+
test('actual session caller does not adopt a preexisting service into standing supervisor ownership', async (t) => {
|
|
251
|
+
const f = await fixture(t);
|
|
252
|
+
f.preexisting();
|
|
253
|
+
await createNamedSessionChildOwner(new AbortController().signal).run(() => f.session('start', new Map([['name', 'reviewer'], ['workspace-id', f.item.workspaceId], ['apply', true]])));
|
|
254
|
+
assert.equal(f.children.length, 0);
|
|
255
|
+
assert.equal(f.spawnCalls.length, 0);
|
|
256
|
+
});
|
|
257
|
+
test('actual session caller refuses overlapping setup and standing-supervisor authority before spawning', async (t) => {
|
|
258
|
+
const f = await fixture(t);
|
|
259
|
+
await assert.rejects(createNamedSessionChildOwner(new AbortController().signal).run(() => f.call('session')), /named_session_child_owner_conflict/);
|
|
260
|
+
assert.equal(f.children.length, 0);
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=bootstrapProcessCaller.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapProcessCaller.test.js","sourceRoot":"","sources":["../src/bootstrapProcessCaller.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapRegistryCaller.test.d.ts","sourceRoot":"","sources":["../src/bootstrapRegistryCaller.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import * as fs from 'node:fs/promises';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { dirname, resolve } from 'node:path';
|
|
6
|
+
import { runInNewContext } from 'node:vm';
|
|
7
|
+
import test from 'node:test';
|
|
8
|
+
import ts from 'typescript';
|
|
9
|
+
import { currentBootstrapHostScope, runCodexBootstrapHost } from './bootstrapHostScope.js';
|
|
10
|
+
import { writeBootstrapHostJson } from './bootstrapHostFiles.js';
|
|
11
|
+
import { readWorkspaceRegistry } from './workspaceRegistry.js';
|
|
12
|
+
async function fixture(t) {
|
|
13
|
+
const root = await fs.mkdtemp(resolve(tmpdir(), 'dharma-registry-caller-'));
|
|
14
|
+
t.after(() => fs.rm(root, { recursive: true, force: true }));
|
|
15
|
+
const path = resolve(root, 'registry', 'workspaces.json'), now = Date.now(), digest = `sha256:${'a'.repeat(64)}`;
|
|
16
|
+
const id = (n) => `${String(n).padStart(8, '0')}-1111-4111-8111-111111111111`;
|
|
17
|
+
return { root, path, entry: { workspaceId: id(5), organizationId: 'org_demo', path: root },
|
|
18
|
+
input: { workspace: root, current: async () => true, signal: new AbortController().signal,
|
|
19
|
+
intent: { schema: 'dharma.codex-setup-intent/v1', operationId: id(1), setupReference: id(2),
|
|
20
|
+
organizationId: 'org_demo', recipientMembershipId: id(3), origin: 'https://hq.example',
|
|
21
|
+
repositoryFingerprint: digest, policyRevision: 'policy-v1', scopeDigest: digest, contractDigest: digest,
|
|
22
|
+
hostContextId: id(4), issuedAt: new Date(now - 1000).toISOString(), expiresAt: new Date(now + 60_000).toISOString() } } };
|
|
23
|
+
}
|
|
24
|
+
// Parse actual production declarations; inject only their C-only I/O dependencies.
|
|
25
|
+
async function callers(root, path, overrides = {}) {
|
|
26
|
+
const text = await fs.readFile(new URL('../src/index.ts', import.meta.url), 'utf8');
|
|
27
|
+
const ast = ts.createSourceFile('index.ts', text, ts.ScriptTarget.Latest, true);
|
|
28
|
+
const names = ['acquirePidLock', 'registry', 'saveRegistry', 'saveWorkspaceRecord', 'writeJsonAtomic',
|
|
29
|
+
'withFileLock', 'withRelayStartupMutation', 'withEvidenceLedgerLock'];
|
|
30
|
+
const declarations = names.map(name => {
|
|
31
|
+
const nodes = ast.statements.filter(node => ts.isFunctionDeclaration(node) && node.name?.text === name);
|
|
32
|
+
assert.equal(nodes.length, 1);
|
|
33
|
+
return nodes[0].getText(ast);
|
|
34
|
+
});
|
|
35
|
+
const output = ts.transpileModule(declarations.join('\n'), { compilerOptions: {
|
|
36
|
+
target: ts.ScriptTarget.ES2023, module: ts.ModuleKind.None
|
|
37
|
+
}, reportDiagnostics: true });
|
|
38
|
+
assert.equal(output.diagnostics?.filter(item => item.category === ts.DiagnosticCategory.Error).length, 0);
|
|
39
|
+
return runInNewContext(`${output.outputText}\nif (typeof wrapAcquisition === 'function') acquirePidLock = wrapAcquisition(acquirePidLock);\n({${names.join(',')}})`, { ...fs, dirname, resolve, randomUUID,
|
|
40
|
+
process, Date, setTimeout, structuredClone, exports: {}, currentBootstrapHostScope, readWorkspaceRegistry, writeBootstrapHostJson,
|
|
41
|
+
dharmaHome: () => root, workspaceRegistryPath: () => path, evidenceUploadLedgerPath: () => resolve(root, 'ledger.json'),
|
|
42
|
+
...overrides }, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } });
|
|
43
|
+
}
|
|
44
|
+
test('registry mutation callers refuse a closed owner before directory or lock effects', async (t) => {
|
|
45
|
+
const f = await fixture(t), c = await callers(f.root, f.path);
|
|
46
|
+
for (const name of ['saveRegistry', 'saveWorkspaceRecord']) {
|
|
47
|
+
let outcome = [];
|
|
48
|
+
await assert.rejects(runCodexBootstrapHost(f.input, async ({ scope }) => {
|
|
49
|
+
scope.close();
|
|
50
|
+
outcome = await Promise.allSettled([c[name](name === 'saveRegistry' ? [f.entry] : f.entry)]);
|
|
51
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
52
|
+
assert.equal(outcome[0]?.status, 'rejected');
|
|
53
|
+
assert.deepEqual(await fs.readdir(f.root), []);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
test('registry mutation caller denies continuation after its actual read withdraws the owner', async (t) => {
|
|
57
|
+
const f = await fixture(t);
|
|
58
|
+
await fs.mkdir(dirname(f.path));
|
|
59
|
+
await fs.writeFile(f.path, '[]\n');
|
|
60
|
+
let writesAfterRead = 0, withdrawn = false;
|
|
61
|
+
await assert.rejects(runCodexBootstrapHost(f.input, async ({ scope }) => {
|
|
62
|
+
const c = await callers(f.root, f.path, {
|
|
63
|
+
readFile: async (path, encoding) => {
|
|
64
|
+
const value = await fs.readFile(path, encoding);
|
|
65
|
+
if (path === f.path) {
|
|
66
|
+
withdrawn = true;
|
|
67
|
+
scope.close();
|
|
68
|
+
}
|
|
69
|
+
return value;
|
|
70
|
+
}, mkdir: async (path, options) => {
|
|
71
|
+
if (withdrawn)
|
|
72
|
+
writesAfterRead++;
|
|
73
|
+
return fs.mkdir(path, options);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return c.saveWorkspaceRecord(f.entry);
|
|
77
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
78
|
+
assert.equal(writesAfterRead, 0);
|
|
79
|
+
assert.equal(await fs.readFile(f.path, 'utf8'), '[]\n');
|
|
80
|
+
assert.deepEqual(await fs.readdir(dirname(f.path)), ['workspaces.json']);
|
|
81
|
+
});
|
|
82
|
+
test('registry mutation snapshots the original row before its first asynchronous effect', async (t) => {
|
|
83
|
+
const f = await fixture(t), originalId = f.entry.workspaceId;
|
|
84
|
+
await fs.mkdir(dirname(f.path));
|
|
85
|
+
await fs.writeFile(f.path, '[]\n');
|
|
86
|
+
const c = await callers(f.root, f.path, { readFile: async (path, encoding) => {
|
|
87
|
+
const value = await fs.readFile(path, encoding);
|
|
88
|
+
if (path === f.path)
|
|
89
|
+
f.entry.workspaceId = 'mutated-foreign-row';
|
|
90
|
+
return value;
|
|
91
|
+
} });
|
|
92
|
+
await runCodexBootstrapHost(f.input, () => c.saveWorkspaceRecord(f.entry));
|
|
93
|
+
assert.equal(JSON.parse(await fs.readFile(f.path, 'utf8'))[0].workspaceId, originalId);
|
|
94
|
+
});
|
|
95
|
+
test('registry mutation withholds diagnostics and rejects unsafe input before lock creation', async (t) => {
|
|
96
|
+
const f = await fixture(t), c = await callers(f.root, f.path);
|
|
97
|
+
const entry = Object.defineProperty({ ...f.entry }, 'workspaceId', { get() { throw new Error('private-row-canary'); } });
|
|
98
|
+
await assert.rejects(runCodexBootstrapHost(f.input, () => c.saveWorkspaceRecord(entry)), { message: 'workspace_registry_write_failed' });
|
|
99
|
+
assert.deepEqual(await fs.readdir(f.root), []);
|
|
100
|
+
});
|
|
101
|
+
test('current registry mutation preserves sibling rows and commits the intended row', async (t) => {
|
|
102
|
+
const f = await fixture(t), sibling = { ...f.entry, workspaceId: 'sibling-preserve' };
|
|
103
|
+
await fs.mkdir(dirname(f.path));
|
|
104
|
+
await fs.writeFile(f.path, `${JSON.stringify([sibling])}\n`);
|
|
105
|
+
const c = await callers(f.root, f.path);
|
|
106
|
+
await runCodexBootstrapHost(f.input, () => c.saveWorkspaceRecord(f.entry));
|
|
107
|
+
assert.deepEqual(JSON.parse(await fs.readFile(f.path, 'utf8')), [sibling, f.entry]);
|
|
108
|
+
assert.deepEqual(await fs.readdir(dirname(f.path)), ['workspaces.json']);
|
|
109
|
+
});
|
|
110
|
+
for (const name of ['withFileLock', 'withRelayStartupMutation', 'withEvidenceLedgerLock']) {
|
|
111
|
+
test(`${name} refuses a callback after scope loss at lock handoff and releases its lease`, async (t) => {
|
|
112
|
+
const f = await fixture(t);
|
|
113
|
+
let entered = false;
|
|
114
|
+
await assert.rejects(runCodexBootstrapHost(f.input, async ({ scope }) => {
|
|
115
|
+
const guarded = await callers(f.root, f.path, { wrapAcquisition: (actual) => async (...args) => {
|
|
116
|
+
const release = await actual(...args);
|
|
117
|
+
scope.close();
|
|
118
|
+
return release;
|
|
119
|
+
} });
|
|
120
|
+
const work = async () => { entered = true; };
|
|
121
|
+
return name === 'withFileLock' ? guarded[name](resolve(f.root, 'lock'), work)
|
|
122
|
+
: name === 'withRelayStartupMutation' ? guarded[name](work, f.root) : guarded[name](work);
|
|
123
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
124
|
+
assert.equal(entered, false);
|
|
125
|
+
assert.deepEqual(await fs.readdir(f.root), []);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=bootstrapRegistryCaller.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapRegistryCaller.test.js","sourceRoot":"","sources":["../src/bootstrapRegistryCaller.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapVaultScope.test.d.ts","sourceRoot":"","sources":["../src/bootstrapVaultScope.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { mkdtemp, readFile, rm } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { runInNewContext } from 'node:vm';
|
|
6
|
+
import test from 'node:test';
|
|
7
|
+
import ts from 'typescript';
|
|
8
|
+
import { LocalVault } from '@dharma-ai-labs/agent-fabric-local-vault';
|
|
9
|
+
import { currentBootstrapHostScope, runCodexBootstrapHost } from './bootstrapHostScope.js';
|
|
10
|
+
function input() {
|
|
11
|
+
const id = (n) => `${String(n).padStart(8, '0')}-1111-4111-8111-111111111111`;
|
|
12
|
+
const now = Date.now(), digest = `sha256:${'a'.repeat(64)}`;
|
|
13
|
+
return { workspace: process.cwd(), current: async () => true, signal: new AbortController().signal,
|
|
14
|
+
intent: { schema: 'dharma.codex-setup-intent/v1', operationId: id(1), setupReference: id(2),
|
|
15
|
+
organizationId: 'org_demo', recipientMembershipId: id(3), origin: 'https://hq.example',
|
|
16
|
+
repositoryFingerprint: digest, policyRevision: 'policy-v1', scopeDigest: digest, contractDigest: digest,
|
|
17
|
+
hostContextId: id(4), issuedAt: new Date(now - 1000).toISOString(), expiresAt: new Date(now + 60_000).toISOString() } };
|
|
18
|
+
}
|
|
19
|
+
async function caller(loadVaultModule) {
|
|
20
|
+
const source = await readFile(new URL('../src/index.ts', import.meta.url), 'utf8');
|
|
21
|
+
const ast = ts.createSourceFile('index.ts', source, ts.ScriptTarget.Latest, true);
|
|
22
|
+
const nodes = ast.statements.filter(node => ts.isFunctionDeclaration(node) && node.name?.text === 'openBootstrapVault');
|
|
23
|
+
assert.equal(nodes.length, 1, 'actual CLI scoped open owner missing');
|
|
24
|
+
const result = ts.transpileModule(nodes[0].getText(ast), { compilerOptions: {
|
|
25
|
+
target: ts.ScriptTarget.ES2023, module: ts.ModuleKind.None
|
|
26
|
+
} });
|
|
27
|
+
return runInNewContext(`${result.outputText}\nopenBootstrapVault`, { loadVaultModule, currentBootstrapHostScope }, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } });
|
|
28
|
+
}
|
|
29
|
+
test('actual CLI full-vault callsites all use the single scoped owner', async () => {
|
|
30
|
+
const source = await readFile(new URL('../src/index.ts', import.meta.url), 'utf8');
|
|
31
|
+
const ast = ts.createSourceFile('index.ts', source, ts.ScriptTarget.Latest, true);
|
|
32
|
+
const unscoped = [], owned = [];
|
|
33
|
+
function visit(node, owner = '') {
|
|
34
|
+
if (ts.isFunctionDeclaration(node))
|
|
35
|
+
owner = node.name?.text ?? owner;
|
|
36
|
+
if (ts.isCallExpression(node) && node.expression.getText(ast) === 'LocalVault.open' && owner !== 'openBootstrapVault') {
|
|
37
|
+
unscoped.push(owner);
|
|
38
|
+
}
|
|
39
|
+
if (ts.isCallExpression(node) && node.expression.getText(ast) === 'openBootstrapVault')
|
|
40
|
+
owned.push(owner);
|
|
41
|
+
ts.forEachChild(node, child => visit(child, owner));
|
|
42
|
+
}
|
|
43
|
+
visit(ast);
|
|
44
|
+
assert.deepEqual(unscoped, []);
|
|
45
|
+
assert.deepEqual(owned, ['superviseNamedSessions', 'startCodexBootstrapNativeHost', 'capture', 'namedSessionCommand', 'evidenceSync',
|
|
46
|
+
'processEvidenceRequest', 'syncSignedTaskTrajectory', 'stageSignedTaskTrajectoryRecovery',
|
|
47
|
+
'finalizeRecoveredSignedTaskTrajectories', 'finalizeRecoveredSignedTaskTrajectories',
|
|
48
|
+
'finalizeRecoveredSignedTaskTrajectories', 'finalizeRecoveredSignedTaskTrajectories', 'relayWorkspaceLoop']);
|
|
49
|
+
});
|
|
50
|
+
test('actual CLI full-vault owner refuses closed scope before module or key access', async () => {
|
|
51
|
+
let effects = 0;
|
|
52
|
+
const open = await caller(async () => { effects++; throw new Error('private fixture'); });
|
|
53
|
+
await assert.rejects(runCodexBootstrapHost(input(), async ({ scope }) => {
|
|
54
|
+
scope.close();
|
|
55
|
+
await open({ root: 'synthetic-root' });
|
|
56
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
57
|
+
assert.equal(effects, 0);
|
|
58
|
+
});
|
|
59
|
+
test('actual CLI full-vault owner binds original scope, snapshots options and wipes only owned key', async () => {
|
|
60
|
+
const options = { root: 'synthetic-root', rawLocalDays: 30 }, key = Buffer.alloc(32, 7);
|
|
61
|
+
let keyScope, openScope, observed;
|
|
62
|
+
const f = input();
|
|
63
|
+
const open = await caller(async () => {
|
|
64
|
+
options.root = 'changed-root';
|
|
65
|
+
options.rawLocalDays = 1;
|
|
66
|
+
return { loadOrCreateVaultMasterKey: async (_store, scope) => { keyScope = scope; return key; },
|
|
67
|
+
LocalVault: { open: async (args, scope) => { observed = args; openScope = scope; return { close: async () => { } }; } } };
|
|
68
|
+
});
|
|
69
|
+
await runCodexBootstrapHost(f, async ({ scope }) => {
|
|
70
|
+
await open(options);
|
|
71
|
+
assert.equal(openScope, scope);
|
|
72
|
+
assert.equal(keyScope, scope);
|
|
73
|
+
assert.equal(observed.root, 'synthetic-root');
|
|
74
|
+
assert.equal(observed.rawLocalDays, 30);
|
|
75
|
+
});
|
|
76
|
+
assert.ok(key.equals(Buffer.alloc(32)));
|
|
77
|
+
});
|
|
78
|
+
test('actual CLI full-vault owner closes an acquired vault if returned after withdrawal', async () => {
|
|
79
|
+
let closes = 0;
|
|
80
|
+
await assert.rejects(runCodexBootstrapHost(input(), async ({ scope }) => {
|
|
81
|
+
const open = await caller(async () => ({ loadOrCreateVaultMasterKey: async () => Buffer.alloc(32),
|
|
82
|
+
LocalVault: { open: async () => { scope.close(); return { close: async () => { closes++; } }; } } }));
|
|
83
|
+
await open({ root: 'synthetic-root' });
|
|
84
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
85
|
+
assert.equal(closes, 1);
|
|
86
|
+
});
|
|
87
|
+
test('actual CLI full-vault owner reaches the real public encrypted vault under the same scope', async (t) => {
|
|
88
|
+
const root = await mkdtemp(join(tmpdir(), 'bootstrap-full-vault-'));
|
|
89
|
+
t.after(() => rm(root, { recursive: true, force: true }));
|
|
90
|
+
const key = Buffer.alloc(32, 11), payload = Buffer.from('synthetic scoped full-vault evidence');
|
|
91
|
+
const open = await caller(async () => ({ LocalVault, loadOrCreateVaultMasterKey: async () => key }));
|
|
92
|
+
await runCodexBootstrapHost(input(), async () => {
|
|
93
|
+
const vault = await open({ root });
|
|
94
|
+
try {
|
|
95
|
+
assert.ok(key.equals(Buffer.alloc(32)));
|
|
96
|
+
const id = await vault.putBlob(payload, 'synthetic');
|
|
97
|
+
assert.deepEqual(await vault.getBlob(id), payload);
|
|
98
|
+
assert.deepEqual(await vault.stats(), { blobs: 1, capsules: 0, sessions: 0 });
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
await vault.close();
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=bootstrapVaultScope.test.js.map
|