@dharma-ai-labs/agent-fabric 0.2.153 → 0.2.155
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 +211 -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 +479 -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/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 +1642 -553
- 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/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,316 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import * as fs from 'node:fs/promises';
|
|
3
|
+
import * as syncFs from 'node:fs';
|
|
4
|
+
import * as crypto from 'node:crypto';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import * as url from 'node:url';
|
|
7
|
+
import { createRequire } from 'node:module';
|
|
8
|
+
import { tmpdir } from 'node:os';
|
|
9
|
+
import { runInNewContext } from 'node:vm';
|
|
10
|
+
import test from 'node:test';
|
|
11
|
+
import ts from 'typescript';
|
|
12
|
+
import { currentBootstrapHostScope, runCodexBootstrapHost } from './bootstrapHostScope.js';
|
|
13
|
+
const skill = '.agents/skills/dharma-agent-fabric';
|
|
14
|
+
function input(workspace) {
|
|
15
|
+
const id = (n) => `${String(n).padStart(8, '0')}-1111-4111-8111-111111111111`;
|
|
16
|
+
const now = Date.now(), digest = `sha256:${'a'.repeat(64)}`;
|
|
17
|
+
return { workspace, current: async () => true, signal: new AbortController().signal,
|
|
18
|
+
intent: { schema: 'dharma.codex-setup-intent/v1', operationId: id(1), setupReference: id(2),
|
|
19
|
+
organizationId: 'org_demo', recipientMembershipId: id(3), origin: 'https://hq.example',
|
|
20
|
+
repositoryFingerprint: digest, policyRevision: 'policy-v1', scopeDigest: digest, contractDigest: digest,
|
|
21
|
+
hostContextId: id(4), issuedAt: new Date(now - 1000).toISOString(), expiresAt: new Date(now + 60_000).toISOString() } };
|
|
22
|
+
}
|
|
23
|
+
async function fixture(t) {
|
|
24
|
+
const workspace = await fs.mkdtemp(path.join(tmpdir(), 'dharma-knowledge-scope-'));
|
|
25
|
+
t.after(() => fs.rm(workspace, { recursive: true, force: true }));
|
|
26
|
+
await fs.mkdir(path.join(workspace, skill), { recursive: true });
|
|
27
|
+
await fs.writeFile(path.join(workspace, skill, '.dharma-agent-fabric.json'), JSON.stringify({ managedBy: 'dharma-agent-fabric', workspaceId: 'synthetic' }));
|
|
28
|
+
return { workspace, organizationId: 'org_demo', repositoryAgentId: 'synthetic', now: new Date('2026-10-01T00:00:00.000Z') };
|
|
29
|
+
}
|
|
30
|
+
async function module(overrides = {}) {
|
|
31
|
+
const location = new URL('../src/repositoryKnowledge.ts', import.meta.url), require = createRequire(location);
|
|
32
|
+
const source = (await fs.readFile(location, 'utf8')).replaceAll('import.meta.url', JSON.stringify(location.href));
|
|
33
|
+
const result = ts.transpileModule(source, { compilerOptions: { target: ts.ScriptTarget.ES2023,
|
|
34
|
+
module: ts.ModuleKind.CommonJS }, reportDiagnostics: true });
|
|
35
|
+
assert.equal(result.diagnostics?.filter(item => item.category === ts.DiagnosticCategory.Error).length, 0);
|
|
36
|
+
const exports = {};
|
|
37
|
+
runInNewContext(result.outputText, { exports, Buffer, Date, process, require: (name) => {
|
|
38
|
+
if (name === 'node:fs')
|
|
39
|
+
return syncFs;
|
|
40
|
+
if (name === 'node:fs/promises')
|
|
41
|
+
return { ...fs, ...overrides };
|
|
42
|
+
if (name === 'node:crypto')
|
|
43
|
+
return crypto;
|
|
44
|
+
if (name === 'node:path')
|
|
45
|
+
return path;
|
|
46
|
+
if (name === 'node:url')
|
|
47
|
+
return url;
|
|
48
|
+
if (name === 'node:module')
|
|
49
|
+
return { createRequire: () => require };
|
|
50
|
+
if (name === './bootstrapHostScope.js')
|
|
51
|
+
return { currentBootstrapHostScope };
|
|
52
|
+
return require(name);
|
|
53
|
+
} }, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } });
|
|
54
|
+
return exports;
|
|
55
|
+
}
|
|
56
|
+
for (const scoped of [true, false])
|
|
57
|
+
for (const cleanup of [true, false]) {
|
|
58
|
+
test(`knowledge preserves replaced staging despite reused dev/ino (${scoped ? 'scoped' : 'legacy'}, ${cleanup ? 'cleanup' : 'publication'})`, async (t) => {
|
|
59
|
+
const f = await fixture(t);
|
|
60
|
+
let staging = '', foreign = '', acquired, unlinks = 0, links = 0;
|
|
61
|
+
const api = await module({ open: async (...args) => {
|
|
62
|
+
const handle = await fs.open(...args);
|
|
63
|
+
if (!(Number(args[1]) & syncFs.constants.O_CREAT))
|
|
64
|
+
return handle;
|
|
65
|
+
staging = String(args[0]);
|
|
66
|
+
const close = handle.close.bind(handle);
|
|
67
|
+
handle.close = async () => {
|
|
68
|
+
acquired = await handle.stat({ bigint: true });
|
|
69
|
+
await close();
|
|
70
|
+
const original = await fs.readFile(staging);
|
|
71
|
+
foreign = 'x'.repeat(original.length);
|
|
72
|
+
await fs.unlink(staging);
|
|
73
|
+
await fs.writeFile(staging, foreign);
|
|
74
|
+
};
|
|
75
|
+
return handle;
|
|
76
|
+
}, lstat: async (name, options) => {
|
|
77
|
+
const actual = await fs.lstat(name, options);
|
|
78
|
+
if (String(name) !== staging || !acquired || !options?.bigint)
|
|
79
|
+
return actual;
|
|
80
|
+
return Object.assign(Object.create(Object.getPrototypeOf(actual)), actual, { dev: acquired.dev, ino: acquired.ino });
|
|
81
|
+
}, unlink: async (...args) => { unlinks++; return fs.unlink(...args); },
|
|
82
|
+
link: async (...args) => {
|
|
83
|
+
links++;
|
|
84
|
+
if (cleanup)
|
|
85
|
+
throw new Error('fixture link failure');
|
|
86
|
+
return fs.link(...args);
|
|
87
|
+
} });
|
|
88
|
+
const operation = () => api.initializeRepositoryKnowledge(f);
|
|
89
|
+
const error = await (scoped ? runCodexBootstrapHost(input(f.workspace), operation) : operation()).then(() => null, (failure) => failure);
|
|
90
|
+
assert.equal(await fs.readFile(staging, 'utf8'), foreign);
|
|
91
|
+
assert.equal(unlinks, 0);
|
|
92
|
+
assert.equal(links, 0);
|
|
93
|
+
await assert.rejects(fs.stat(path.join(f.workspace, skill, '.repository-knowledge-init.json')), { code: 'ENOENT' });
|
|
94
|
+
assert.equal(error?.message, 'repository_knowledge_cleanup_unconfirmed');
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
test('knowledge verifies content even when an in-place edit reports unchanged metadata', async (t) => {
|
|
98
|
+
const f = await fixture(t);
|
|
99
|
+
let staging = '', foreign = '', acquired, unlinks = 0, links = 0;
|
|
100
|
+
const api = await module({ open: async (...args) => {
|
|
101
|
+
const handle = await fs.open(...args);
|
|
102
|
+
if (Number(args[1]) & syncFs.constants.O_CREAT) {
|
|
103
|
+
staging = String(args[0]);
|
|
104
|
+
const close = handle.close.bind(handle);
|
|
105
|
+
handle.close = async () => {
|
|
106
|
+
acquired = await handle.stat({ bigint: true });
|
|
107
|
+
await close();
|
|
108
|
+
foreign = 'x'.repeat(Number(acquired.size));
|
|
109
|
+
await fs.writeFile(staging, foreign);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
else if (String(args[0]) === staging)
|
|
113
|
+
handle.stat = (async () => acquired);
|
|
114
|
+
return handle;
|
|
115
|
+
}, lstat: async (name, options) => String(name) === staging && acquired && options?.bigint ? acquired : fs.lstat(name, options),
|
|
116
|
+
unlink: async (...args) => { unlinks++; return fs.unlink(...args); },
|
|
117
|
+
link: async (...args) => { links++; return fs.link(...args); } });
|
|
118
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge(f)), { message: 'repository_knowledge_cleanup_unconfirmed' });
|
|
119
|
+
assert.equal(await fs.readFile(staging, 'utf8'), foreign);
|
|
120
|
+
assert.equal(unlinks, 0);
|
|
121
|
+
assert.equal(links, 0);
|
|
122
|
+
});
|
|
123
|
+
test('knowledge closes its staging reader after read withdrawal without publication or cleanup', async (t) => {
|
|
124
|
+
const f = await fixture(t);
|
|
125
|
+
let staging = '', readersClosed = 0, unlinks = 0, links = 0;
|
|
126
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), async ({ scope }) => {
|
|
127
|
+
const api = await module({ open: async (...args) => {
|
|
128
|
+
const handle = await fs.open(...args);
|
|
129
|
+
if (Number(args[1]) & syncFs.constants.O_CREAT)
|
|
130
|
+
staging = String(args[0]);
|
|
131
|
+
else if (String(args[0]) === staging) {
|
|
132
|
+
const read = handle.read.bind(handle), close = handle.close.bind(handle);
|
|
133
|
+
handle.read = (async (...values) => { const result = await Reflect.apply(read, handle, values); scope.close(); return result; });
|
|
134
|
+
handle.close = async () => { readersClosed++; return close(); };
|
|
135
|
+
}
|
|
136
|
+
return handle;
|
|
137
|
+
}, unlink: async (...args) => { unlinks++; return fs.unlink(...args); },
|
|
138
|
+
link: async (...args) => { links++; return fs.link(...args); } });
|
|
139
|
+
await api.initializeRepositoryKnowledge(f);
|
|
140
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
141
|
+
assert.equal(readersClosed, 1);
|
|
142
|
+
assert.equal(unlinks, 0);
|
|
143
|
+
assert.equal(links, 0);
|
|
144
|
+
assert.equal(JSON.parse(await fs.readFile(staging, 'utf8')).organizationId, 'org_demo');
|
|
145
|
+
});
|
|
146
|
+
test('knowledge scope refuses workspace metadata before IO when original host is closed', async (t) => {
|
|
147
|
+
const f = await fixture(t);
|
|
148
|
+
let stats = 0;
|
|
149
|
+
const api = await module({ lstat: async (...args) => { stats++; return fs.lstat(...args); } });
|
|
150
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), async ({ scope }) => {
|
|
151
|
+
scope.close();
|
|
152
|
+
await api.initializeRepositoryKnowledge(f);
|
|
153
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
154
|
+
assert.equal(stats, 0);
|
|
155
|
+
});
|
|
156
|
+
test('knowledge scope stops after withdrawn workspace metadata without resolving another path', async (t) => {
|
|
157
|
+
const f = await fixture(t);
|
|
158
|
+
let stats = 0, resolutions = 0;
|
|
159
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), async ({ scope }) => {
|
|
160
|
+
const api = await module({ lstat: async (...args) => {
|
|
161
|
+
stats++;
|
|
162
|
+
const value = await fs.lstat(...args);
|
|
163
|
+
scope.close();
|
|
164
|
+
return value;
|
|
165
|
+
}, realpath: async (...args) => { resolutions++; return fs.realpath(...args); } });
|
|
166
|
+
await api.readRepositoryKnowledge(f);
|
|
167
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
168
|
+
assert.equal(stats, 1);
|
|
169
|
+
assert.equal(resolutions, 0);
|
|
170
|
+
});
|
|
171
|
+
test('knowledge scope closes acquired marker handle after withdrawal without reading', async (t) => {
|
|
172
|
+
const f = await fixture(t);
|
|
173
|
+
let reads = 0, closes = 0;
|
|
174
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), async ({ scope }) => {
|
|
175
|
+
const api = await module({ open: async (...args) => {
|
|
176
|
+
const handle = await fs.open(...args), close = handle.close.bind(handle), read = handle.read.bind(handle);
|
|
177
|
+
handle.close = async () => { closes++; return close(); };
|
|
178
|
+
handle.read = ((...values) => { reads++; return Reflect.apply(read, handle, values); });
|
|
179
|
+
scope.close();
|
|
180
|
+
return handle;
|
|
181
|
+
} });
|
|
182
|
+
await api.readRepositoryKnowledge(f);
|
|
183
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
184
|
+
assert.equal(reads, 0);
|
|
185
|
+
assert.equal(closes, 1);
|
|
186
|
+
});
|
|
187
|
+
test('knowledge scope snapshots identity and timestamp before workspace inspection yields', async (t) => {
|
|
188
|
+
const f = await fixture(t), intended = { ...f, now: new Date(f.now) };
|
|
189
|
+
const api = await module({ lstat: async (...args) => {
|
|
190
|
+
const value = await fs.lstat(...args);
|
|
191
|
+
f.organizationId = 'org_foreign';
|
|
192
|
+
f.now.setTime(0);
|
|
193
|
+
return value;
|
|
194
|
+
} });
|
|
195
|
+
const actual = await runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge(f));
|
|
196
|
+
assert.equal(actual.catalog.organizationId, intended.organizationId);
|
|
197
|
+
assert.equal(actual.catalog.initializedAt, intended.now.toISOString());
|
|
198
|
+
});
|
|
199
|
+
test('knowledge scope retains interrupted generated staging after write and closes only its handle', async (t) => {
|
|
200
|
+
const f = await fixture(t);
|
|
201
|
+
let links = 0, syncs = 0, closes = 0;
|
|
202
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), async ({ scope }) => {
|
|
203
|
+
const api = await module({ open: async (...args) => {
|
|
204
|
+
const handle = await fs.open(...args);
|
|
205
|
+
if (!(Number(args[1]) & syncFs.constants.O_CREAT))
|
|
206
|
+
return handle;
|
|
207
|
+
const write = handle.writeFile.bind(handle), sync = handle.sync.bind(handle), close = handle.close.bind(handle);
|
|
208
|
+
handle.writeFile = async (...values) => { const value = await write(...values); scope.close(); return value; };
|
|
209
|
+
handle.sync = async () => { syncs++; return sync(); };
|
|
210
|
+
handle.close = async () => { closes++; return close(); };
|
|
211
|
+
return handle;
|
|
212
|
+
}, link: async (...args) => { links++; return fs.link(...args); } });
|
|
213
|
+
await api.initializeRepositoryKnowledge(f);
|
|
214
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
215
|
+
assert.equal(links, 0);
|
|
216
|
+
assert.equal(syncs, 0);
|
|
217
|
+
assert.equal(closes, 1);
|
|
218
|
+
assert.equal((await fs.readdir(path.join(f.workspace, skill))).filter(name => name.startsWith('.knowledge-init-')).length, 1);
|
|
219
|
+
await assert.rejects(fs.stat(path.join(f.workspace, skill, 'knowledge')), { code: 'ENOENT' });
|
|
220
|
+
});
|
|
221
|
+
test('knowledge scope preserves published intent when link result withdraws host authority', async (t) => {
|
|
222
|
+
const f = await fixture(t);
|
|
223
|
+
let links = 0, unlinks = 0, directories = 0;
|
|
224
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), async ({ scope }) => {
|
|
225
|
+
const api = await module({ link: async (...args) => {
|
|
226
|
+
links++;
|
|
227
|
+
await fs.link(...args);
|
|
228
|
+
scope.close();
|
|
229
|
+
}, unlink: async (...args) => { unlinks++; return fs.unlink(...args); },
|
|
230
|
+
mkdir: async (...args) => { directories++; return fs.mkdir(...args); } });
|
|
231
|
+
await api.initializeRepositoryKnowledge(f);
|
|
232
|
+
}), { message: 'codex_setup_host_scope_unavailable' });
|
|
233
|
+
assert.equal(links, 1);
|
|
234
|
+
assert.equal(unlinks, 0);
|
|
235
|
+
assert.equal(directories, 0);
|
|
236
|
+
assert.equal(JSON.parse(await fs.readFile(path.join(f.workspace, skill, '.repository-knowledge-init.json'), 'utf8')).organizationId, f.organizationId);
|
|
237
|
+
});
|
|
238
|
+
test('knowledge scope never invokes a native error code accessor or discloses native diagnostics', async (t) => {
|
|
239
|
+
const f = await fixture(t);
|
|
240
|
+
let getters = 0;
|
|
241
|
+
const api = await module({ lstat: async () => {
|
|
242
|
+
throw Object.defineProperty(new Error('private native canary'), 'code', {
|
|
243
|
+
get: () => { getters++; throw new Error('private getter canary'); }
|
|
244
|
+
});
|
|
245
|
+
} });
|
|
246
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), () => api.readRepositoryKnowledge(f)), { message: 'repository_knowledge_storage_unavailable' });
|
|
247
|
+
assert.equal(getters, 0);
|
|
248
|
+
});
|
|
249
|
+
test('knowledge scope initializes and reuses byte-identical unsigned catalog under its original identity', async (t) => {
|
|
250
|
+
const f = await fixture(t), api = await module();
|
|
251
|
+
const first = await runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge(f));
|
|
252
|
+
const catalog = path.join(f.workspace, skill, 'knowledge', 'CATALOG.json'), bytes = await fs.readFile(catalog);
|
|
253
|
+
const second = await runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge({ ...f, now: new Date('2026-10-02T00:00:00.000Z') }));
|
|
254
|
+
assert.equal(first.disposition, 'initialized');
|
|
255
|
+
assert.equal(second.disposition, 'reused');
|
|
256
|
+
assert.deepEqual(second.catalog, first.catalog);
|
|
257
|
+
assert.deepEqual(await fs.readFile(catalog), bytes);
|
|
258
|
+
assert.equal(second.catalog.provenance.authority, 'unsigned');
|
|
259
|
+
});
|
|
260
|
+
test('knowledge scope snapshots input without invoking identity accessors', async (t) => {
|
|
261
|
+
const f = await fixture(t);
|
|
262
|
+
let getters = 0, stats = 0;
|
|
263
|
+
Object.defineProperty(f, 'organizationId', { get: () => { getters++; throw new Error('private input canary'); } });
|
|
264
|
+
const api = await module({ lstat: async (...args) => { stats++; return fs.lstat(...args); } });
|
|
265
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge(f)), { message: 'repository_knowledge_input_invalid' });
|
|
266
|
+
assert.equal(getters, 0);
|
|
267
|
+
assert.equal(stats, 0);
|
|
268
|
+
});
|
|
269
|
+
test('knowledge scope retains an unowned staging collision without cleanup or publication', async (t) => {
|
|
270
|
+
const f = await fixture(t);
|
|
271
|
+
let foreignPath = '', unlinks = 0;
|
|
272
|
+
const api = await module({ open: async (...args) => {
|
|
273
|
+
if (!(Number(args[1]) & syncFs.constants.O_CREAT))
|
|
274
|
+
return fs.open(...args);
|
|
275
|
+
foreignPath = String(args[0]);
|
|
276
|
+
await fs.writeFile(foreignPath, 'foreign');
|
|
277
|
+
throw Object.assign(new Error('private collision canary'), { code: 'EEXIST' });
|
|
278
|
+
}, unlink: async (...args) => { unlinks++; return fs.unlink(...args); } });
|
|
279
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge(f)), { message: 'repository_knowledge_storage_unavailable' });
|
|
280
|
+
assert.equal(unlinks, 0);
|
|
281
|
+
assert.equal(await fs.readFile(foreignPath, 'utf8'), 'foreign');
|
|
282
|
+
});
|
|
283
|
+
test('knowledge scope preserves foreign staging replacement after its acquired handle closes', async (t) => {
|
|
284
|
+
const f = await fixture(t);
|
|
285
|
+
let foreignPath = '', unlinks = 0;
|
|
286
|
+
const api = await module({ open: async (...args) => {
|
|
287
|
+
const handle = await fs.open(...args);
|
|
288
|
+
if (!(Number(args[1]) & syncFs.constants.O_CREAT))
|
|
289
|
+
return handle;
|
|
290
|
+
foreignPath = String(args[0]);
|
|
291
|
+
const close = handle.close.bind(handle);
|
|
292
|
+
handle.close = async () => { await close(); await fs.unlink(foreignPath); await fs.writeFile(foreignPath, 'foreign'); };
|
|
293
|
+
return handle;
|
|
294
|
+
}, link: async () => { throw new Error('private link canary'); },
|
|
295
|
+
unlink: async (...args) => { unlinks++; return fs.unlink(...args); } });
|
|
296
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge(f)), { message: 'repository_knowledge_cleanup_unconfirmed' });
|
|
297
|
+
assert.equal(unlinks, 0);
|
|
298
|
+
assert.equal(await fs.readFile(foreignPath, 'utf8'), 'foreign');
|
|
299
|
+
});
|
|
300
|
+
test('knowledge scope does not unlink generated evidence after uncertain staging close', async (t) => {
|
|
301
|
+
const f = await fixture(t);
|
|
302
|
+
let closes = 0, unlinks = 0;
|
|
303
|
+
const api = await module({ open: async (...args) => {
|
|
304
|
+
const handle = await fs.open(...args);
|
|
305
|
+
if (!(Number(args[1]) & syncFs.constants.O_CREAT))
|
|
306
|
+
return handle;
|
|
307
|
+
const close = handle.close.bind(handle);
|
|
308
|
+
handle.close = async () => { closes++; await close(); throw new Error('private close canary'); };
|
|
309
|
+
return handle;
|
|
310
|
+
}, unlink: async (...args) => { unlinks++; return fs.unlink(...args); } });
|
|
311
|
+
await assert.rejects(runCodexBootstrapHost(input(f.workspace), () => api.initializeRepositoryKnowledge(f)), { message: 'repository_knowledge_cleanup_unconfirmed' });
|
|
312
|
+
assert.equal(closes, 1);
|
|
313
|
+
assert.equal(unlinks, 0);
|
|
314
|
+
assert.equal((await fs.readdir(path.join(f.workspace, skill))).filter(name => name.startsWith('.knowledge-init-')).length, 1);
|
|
315
|
+
});
|
|
316
|
+
//# sourceMappingURL=repositoryKnowledgeScope.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositoryKnowledgeScope.test.js","sourceRoot":"","sources":["../src/repositoryKnowledgeScope.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAC,yBAAyB,EAAE,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAEzF,MAAM,KAAK,GAAG,oCAAoC,CAAC;AACnD,SAAS,KAAK,CAAC,SAAiB;IAC9B,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,8BAA8B,CAAC;IACtF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;QAChF,MAAM,EAAE,EAAC,MAAM,EAAE,8BAAuC,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;YACjG,cAAc,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB;YACtF,qBAAqB,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;YACvG,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,EAAC,EAAC,CAAC;AAC5H,CAAC;AACD,KAAK,UAAU,OAAO,CAAC,CAAyC;IAC9D,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,2BAA2B,CAAC,EACzE,IAAI,CAAC,SAAS,CAAC,EAAC,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC;IAChF,OAAO,EAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC,EAAC,CAAC;AAC5H,CAAC;AACD,KAAK,UAAU,MAAM,CAAC,YAAqC,EAAE;IAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClH,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,EAAC,eAAe,EAAE,EAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;YACzF,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAC,EAAE,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1G,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;YAC5F,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACtC,IAAI,IAAI,KAAK,kBAAkB;gBAAE,OAAO,EAAC,GAAG,EAAE,EAAE,GAAG,SAAS,EAAC,CAAC;YAC9D,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAO,MAAM,CAAC;YAC1C,IAAI,IAAI,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAC;YACtC,IAAI,IAAI,KAAK,UAAU;gBAAE,OAAO,GAAG,CAAC;YACpC,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAO,EAAC,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,EAAC,CAAC;YAClE,IAAI,IAAI,KAAK,yBAAyB;gBAAE,OAAO,EAAC,yBAAyB,EAAC,CAAC;YAC3E,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,EAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,EAAC,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IAAE,KAAK,MAAM,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,gEAAgE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;YACtJ,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,QAAwC,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;YAC7H,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;oBAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;oBACtC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;wBAAE,OAAO,MAAM,CAAC;oBACjE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnE,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;wBACxB,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;wBAAC,MAAM,KAAK,EAAE,CAAC;wBAC5D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;wBAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACnF,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBAAC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBACjE,CAAC,CAAC;oBACF,OAAO,MAAM,CAAC;gBAChB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAoC,EAAE,OAAa,EAAE,EAAE;oBACtE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,MAAM;wBAAE,OAAO,MAAM,CAAC;oBAC7E,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC;gBACrH,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAkC,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC;gBACnG,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;oBAClD,KAAK,EAAE,CAAC;oBAAC,IAAI,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzF,CAAC,EAAC,CAAC,CAAC;YACJ,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,OAAc,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;YAChJ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,iCAAiC,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;YAClH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,0CAA0C,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;AAED,IAAI,CAAC,kFAAkF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,QAAwC,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAC7H,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;YAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC/C,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnE,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;oBACxB,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;oBAAC,MAAM,KAAK,EAAE,CAAC;oBAC5D,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBAAC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpF,CAAC,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO;gBAAE,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,QAAS,CAAuB,CAAC;YACpG,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAoC,EAAE,OAAa,EAAE,EAAE,CACtE,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,QAAQ,IAAI,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;QAC9F,MAAM,EAAE,KAAK,EAAE,GAAG,IAAkC,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC;QAChG,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;IAC3F,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EACxG,EAAC,OAAO,EAAE,0CAA0C,EAAC,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9G,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0FAA0F,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACzG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,OAAO,GAAG,EAAE,EAAE,aAAa,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACxF,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;QAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;gBAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO;oBAAE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACrE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACzE,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,MAAa,EAAE,EAAE,GAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,CAAA,CAAC,CAAuB,CAAC;oBAC5J,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,GAAE,aAAa,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAkC,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC;YACnG,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;QAC3F,MAAM,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,EAAE,EAAC,OAAO,EAAE,oCAAoC,EAAC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC1F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mFAAmF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAiC,EAAE,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;IACxH,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;QAC/E,KAAK,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,EAAE,EAAC,OAAO,EAAE,oCAAoC,EAAC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,yFAAyF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACxG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;IAC3D,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;QAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAiC,EAAE,EAAE;gBAC9E,KAAK,EAAE,CAAC;gBAAC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,KAAK,CAAC;YAC9E,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAoC,EAAE,EAAE,GAAE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;QAChH,MAAM,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,EAAE,EAAC,OAAO,EAAE,oCAAoC,EAAC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,gFAAgF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC/F,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;QAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;gBAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1G,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,GAAE,MAAM,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC,CAAC;gBACvD,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAa,EAAE,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA,CAAC,CAAuB,CAAC;gBACnH,KAAK,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,MAAM,CAAC;YAC/B,CAAC,EAAC,CAAC,CAAC;QACJ,MAAM,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,EAAE,EAAC,OAAO,EAAE,oCAAoC,EAAC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,qFAAqF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACpG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAC,CAAC;IACpE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAiC,EAAE,EAAE;YAC9E,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,CAAC,CAAC,cAAc,GAAG,aAAa,CAAC;YAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,KAAK,CAAC;QAC1G,CAAC,EAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAQ,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,8FAA8F,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC7G,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IACjE,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;QAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;gBAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;oBAAE,OAAO,MAAM,CAAC;gBACjE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChH,MAAM,CAAC,SAAS,GAAG,KAAK,EAAE,GAAG,MAA2C,EAAE,EAAE,GAAE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,CAAA,CAAC,CAAC;gBAClJ,MAAM,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA,CAAC,CAAC;gBAAC,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,GAAE,MAAM,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC,CAAC;gBAC5G,OAAO,MAAM,CAAC;YAChB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;QAC9F,MAAM,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,EAAE,EAAC,OAAO,EAAE,oCAAoC,EAAC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9H,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,sFAAsF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACrG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;IACxE,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;QAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;gBAC5E,KAAK,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjD,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAkC,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC;YACnG,KAAK,EAAE,KAAK,EAAE,GAAG,IAAiC,EAAE,EAAE,GAAE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;QACpG,MAAM,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,EAAE,EAAC,OAAO,EAAE,oCAAoC,EAAC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,iCAAiC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;AACzJ,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,4FAA4F,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC3G,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,OAAO,GAAG,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAAE,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE;gBACpH,GAAG,EAAE,GAAG,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA,CAAC;aAAC,CAAC,CAAC;QAAA,CAAC,EAAC,CAAC,CAAC;IAC1E,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAClG,EAAC,OAAO,EAAE,0CAA0C,EAAC,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oGAAoG,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACnH,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;IACjD,MAAM,KAAK,GAAQ,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAQ,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CACvE,GAAG,CAAC,6BAA6B,CAAC,EAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC,EAAC,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC3F,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IACrG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACpF,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACvD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAC,GAAG,EAAE,GAAG,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;IAC/G,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAiC,EAAE,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;IACxH,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EACxG,EAAC,OAAO,EAAE,oCAAoC,EAAC,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qFAAqF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACpG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,WAAW,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;YAC5E,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3E,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC1E,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;QAC/E,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAkC,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;IACtG,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EACxG,EAAC,OAAO,EAAE,0CAA0C,EAAC,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wFAAwF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACvG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,WAAW,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;YAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO,MAAM,CAAC;YACjE,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,GAAE,MAAM,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAA,CAAC,CAAC;YACtH,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,GAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAA,CAAC;QAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAkC,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;IACnG,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EACxG,EAAC,OAAO,EAAE,0CAA0C,EAAC,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kFAAkF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAgC,EAAE,EAAE;YAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO,MAAM,CAAC;YACjE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,GAAE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA,CAAC,CAAC;YAAC,OAAO,MAAM,CAAC;QAChH,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAkC,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC;IACtG,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EACxG,EAAC,OAAO,EAAE,0CAA0C,EAAC,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChI,CAAC,CAAC,CAAC"}
|
|
@@ -8,6 +8,8 @@ import test from 'node:test';
|
|
|
8
8
|
import ts from 'typescript';
|
|
9
9
|
import { appendRecoveredWorkspace, resolveRegistryRecoveryProjection } from './workspaceRegistryRecovery.js';
|
|
10
10
|
import { bootstrapGrantMode } from './privateGrantInput.js';
|
|
11
|
+
import { assertBootstrapHostSource, currentBootstrapHostScope, runCodexBootstrapHost } from './bootstrapHostScope.js';
|
|
12
|
+
import { parseNamedCodexSkillObservation } from './namedCodexSkillDiscovery.js';
|
|
11
13
|
// Execute the actual function body, parsed by TypeScript rather than extracted
|
|
12
14
|
// by text matching. All I/O boundaries are injected: no enrollment, paid work,
|
|
13
15
|
// secret-store writes, daemon processes, or external requests can occur.
|
|
@@ -21,7 +23,9 @@ async function caller(name, dependencies) {
|
|
|
21
23
|
reportDiagnostics: true,
|
|
22
24
|
});
|
|
23
25
|
assert.equal(compiled.diagnostics?.filter(item => item.category === ts.DiagnosticCategory.Error).length, 0);
|
|
24
|
-
return runInNewContext(`${compiled.outputText}\n${name}`,
|
|
26
|
+
return runInNewContext(`${compiled.outputText}\n${name}`, {
|
|
27
|
+
assertBootstrapHostSource, currentBootstrapHostScope, parseNamedCodexSkillObservation, ...dependencies,
|
|
28
|
+
}, {
|
|
25
29
|
timeout: 1000, contextCodeGeneration: { strings: false, wasm: false },
|
|
26
30
|
});
|
|
27
31
|
}
|
|
@@ -99,10 +103,40 @@ function bootstrapDependencies(onboarding) {
|
|
|
99
103
|
requireCompletedBootstrapEvidence: () => undefined,
|
|
100
104
|
summarizeBootstrapOrganizationApi: () => ({ ok: true }),
|
|
101
105
|
loadAgentFabricOnboardingContract: async () => ({ markdown: '# fixture', sha256: 'a'.repeat(64) }),
|
|
102
|
-
namedSessionCommand: async () => {
|
|
106
|
+
namedSessionCommand: async (action, flags) => {
|
|
107
|
+
await record(`named_session:${action}`);
|
|
108
|
+
return { ok: true, state: 'running', name: String(flags.get('name')), bindingId: 'fixture_binding',
|
|
109
|
+
sessionId: 'fixture_session', organizationId: 'org_fixture', repositoryBindingId: 'fixture_repository',
|
|
110
|
+
workspaceId: String(flags.get('workspace-id')), endpointId: 'fixture_endpoint', membershipId: 'fixture_member',
|
|
111
|
+
deviceId: 'fixture_device', provider: 'codex',
|
|
112
|
+
nativeSkill: { schema: 'dharma.named-codex-skill-observation/v1', nativeDiscovered: true,
|
|
113
|
+
bundleId: '11111111-1111-4111-8111-111111111111', bundleHash: `sha256:${'a'.repeat(64)}`,
|
|
114
|
+
manifestHash: `sha256:${'b'.repeat(64)}`, catalogHash: `sha256:${'c'.repeat(64)}`,
|
|
115
|
+
skillsHash: `sha256:${'d'.repeat(64)}`, observedAt: new Date().toISOString() } };
|
|
116
|
+
},
|
|
103
117
|
};
|
|
104
118
|
return { dependencies, calls };
|
|
105
119
|
}
|
|
120
|
+
test('host onboarding cannot replace absent accepted enrollment with a legacy login', async () => {
|
|
121
|
+
const f = bootstrapDependencies({});
|
|
122
|
+
let logins = 0;
|
|
123
|
+
f.dependencies.login = async () => { logins++; return { status: 'pending' }; };
|
|
124
|
+
const onboard = await caller('onboard', f.dependencies);
|
|
125
|
+
const workspace = resolve('/fixture', 'onboard');
|
|
126
|
+
const flags = new Map([['workspace', workspace],
|
|
127
|
+
['organization-id', 'org_fixture'], ['policy-revision', 'policy-v1']]);
|
|
128
|
+
const uuid = '11111111-1111-4111-8111-111111111111', digest = `sha256:${'a'.repeat(64)}`;
|
|
129
|
+
const now = Date.now();
|
|
130
|
+
await assert.rejects(runCodexBootstrapHost({ workspace, signal: new AbortController().signal, current: async () => true,
|
|
131
|
+
intent: { schema: 'dharma.codex-setup-intent/v1', operationId: uuid, setupReference: uuid,
|
|
132
|
+
organizationId: 'org_fixture', recipientMembershipId: uuid, origin: 'https://fixture.invalid',
|
|
133
|
+
repositoryFingerprint: digest, policyRevision: 'policy-v1', scopeDigest: digest, contractDigest: digest,
|
|
134
|
+
hostContextId: uuid, issuedAt: new Date(now - 1000).toISOString(), expiresAt: new Date(now + 60_000).toISOString() },
|
|
135
|
+
}, async () => onboard(flags)), { message: 'codex_setup_host_enrollment_missing' });
|
|
136
|
+
assert.equal(logins, 0);
|
|
137
|
+
assert.equal((await onboard(flags)).stage, 'approve_device');
|
|
138
|
+
assert.equal(logins, 1, 'ordinary legacy onboarding keeps its existing login path');
|
|
139
|
+
});
|
|
106
140
|
test('registry recovery command plans before applying one current-device anchor row', async () => {
|
|
107
141
|
const workspace = resolve('/fixture', 'anchor');
|
|
108
142
|
const policyPath = resolve(workspace, '.dharma', 'approved-policy.json');
|
|
@@ -546,7 +580,7 @@ test('bootstrap completes after the relay installs the signed shared release', a
|
|
|
546
580
|
assert.equal(actual.repositoryReadiness.attempts, 3);
|
|
547
581
|
assert.equal(actual.namedSession.state, 'running');
|
|
548
582
|
assert.equal(actual.workflowReadiness.namedSession, 'ready');
|
|
549
|
-
assert.
|
|
583
|
+
assert.deepEqual(f.calls.filter(value => value.startsWith('named_session:')), ['named_session:start', 'named_session:readiness']);
|
|
550
584
|
});
|
|
551
585
|
test('published-package secret denial stays visible without repeating evidence capture', async () => {
|
|
552
586
|
const f = bootstrapDependencies({ ok: true, stage: 'ready', localStage: 'ready',
|
|
@@ -594,12 +628,35 @@ test('a failed named session cannot produce a complete bootstrap receipt', async
|
|
|
594
628
|
test('a stopped named session keeps an otherwise ready bootstrap incomplete', async () => {
|
|
595
629
|
const f = bootstrapDependencies({ ok: true, stage: 'ready', localStage: 'ready',
|
|
596
630
|
sharedRepositoryReady: true, workspaceId: 'workspace_fixture' });
|
|
597
|
-
f.dependencies.namedSessionCommand
|
|
631
|
+
const respond = f.dependencies.namedSessionCommand;
|
|
632
|
+
f.dependencies.namedSessionCommand = async (action, flags) => ({
|
|
633
|
+
...await respond(action, flags), state: 'stopped',
|
|
634
|
+
});
|
|
598
635
|
const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags(true));
|
|
599
636
|
assert.equal(actual.ok, false);
|
|
600
637
|
assert.equal(actual.stage, 'named_session_pending');
|
|
601
638
|
assert.equal(actual.workflowReadiness.namedSession, 'pending');
|
|
602
639
|
});
|
|
640
|
+
test('bootstrap rejects missing or malformed native observations using the real IPC parser', async () => {
|
|
641
|
+
for (const nativeSkill of [undefined, { schema: 'foreign-observation' }]) {
|
|
642
|
+
const f = bootstrapDependencies({ ok: true, stage: 'ready', localStage: 'ready',
|
|
643
|
+
sharedRepositoryReady: true, workspaceId: 'workspace_fixture' });
|
|
644
|
+
const respond = f.dependencies.namedSessionCommand;
|
|
645
|
+
f.dependencies.namedSessionCommand = async (action, flags) => ({
|
|
646
|
+
...await respond(action, flags), ...(action === 'readiness' ? { nativeSkill } : {}),
|
|
647
|
+
});
|
|
648
|
+
await assert.rejects((await caller('bootstrap', f.dependencies))(bootstrapFlags(true)), /named_session_native_skill_invalid/);
|
|
649
|
+
}
|
|
650
|
+
});
|
|
651
|
+
test('bootstrap rejects a readiness identity changed after named-session start', async () => {
|
|
652
|
+
const f = bootstrapDependencies({ ok: true, stage: 'ready', localStage: 'ready',
|
|
653
|
+
sharedRepositoryReady: true, workspaceId: 'workspace_fixture' });
|
|
654
|
+
const respond = f.dependencies.namedSessionCommand;
|
|
655
|
+
f.dependencies.namedSessionCommand = async (action, flags) => ({
|
|
656
|
+
...await respond(action, flags), ...(action === 'readiness' ? { membershipId: 'foreign_member' } : {}),
|
|
657
|
+
});
|
|
658
|
+
await assert.rejects((await caller('bootstrap', f.dependencies))(bootstrapFlags(true)), /named_session_readiness_scope_mismatch/);
|
|
659
|
+
});
|
|
603
660
|
test('bootstrap reports a blocked repository candidate without replaying enrollment', async () => {
|
|
604
661
|
const f = bootstrapDependencies({ ok: true, stage: 'shared_repository_pending', localStage: 'ready',
|
|
605
662
|
sharedRepositoryReady: false, workspaceId: 'workspace_fixture' });
|