@creatornader/agent-bridge 0.5.2 → 0.6.0
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/CHANGELOG.md +41 -1
- package/README.md +34 -31
- package/ROADMAP.md +56 -15
- package/SECURITY.md +6 -5
- package/dist/archive.d.ts +2 -2
- package/dist/{bridge-service-CNBKdYXh.d.ts → bridge-service-DjSYfjKt.d.ts} +4 -2
- package/dist/{bridge-store-ByJ6CaJk.d.ts → bridge-store-Bi_LCX8e.d.ts} +5 -1
- package/dist/bridge.d.ts +9 -37
- package/dist/bridge.js +6 -10
- package/dist/chunk-23UDQZMT.js +54 -0
- package/dist/chunk-23UDQZMT.js.map +1 -0
- package/dist/{chunk-AWE3DFZV.js → chunk-4V2PFJEF.js} +11 -4
- package/dist/chunk-4V2PFJEF.js.map +1 -0
- package/dist/{chunk-E4OWHGUE.js → chunk-62C63PIE.js} +8 -8
- package/dist/chunk-62C63PIE.js.map +1 -0
- package/dist/{chunk-HUHG7XTB.js → chunk-AIALYLGQ.js} +30 -193
- package/dist/chunk-AIALYLGQ.js.map +1 -0
- package/dist/{chunk-JUTJRAMA.js → chunk-FGERNG4X.js} +3 -3
- package/dist/{chunk-7VJI2MXI.js → chunk-IF5OKPBK.js} +32 -14
- package/dist/chunk-IF5OKPBK.js.map +1 -0
- package/dist/{chunk-QPC6JHA3.js → chunk-IMJ47WO4.js} +12 -16
- package/dist/chunk-IMJ47WO4.js.map +1 -0
- package/dist/{chunk-2EVLG3YA.js → chunk-UKFRCP6X.js} +10 -7
- package/dist/chunk-UKFRCP6X.js.map +1 -0
- package/dist/chunk-WQ4I5XGF.js +242 -0
- package/dist/chunk-WQ4I5XGF.js.map +1 -0
- package/dist/{chunk-SN7PIVDF.js → chunk-ZUZ7TCIH.js} +13 -1
- package/dist/{chunk-SN7PIVDF.js.map → chunk-ZUZ7TCIH.js.map} +1 -1
- package/dist/cli.js +41 -34
- package/dist/cli.js.map +1 -1
- package/dist/client-config.d.ts +1 -1
- package/dist/client-config.js +1 -1
- package/dist/client-runtime.d.ts +3 -3
- package/dist/client-runtime.js +5 -5
- package/dist/contracts/generate.js +2 -3
- package/dist/contracts/generate.js.map +1 -1
- package/dist/dr.d.ts +8 -0
- package/dist/dr.js +1 -1
- package/dist/{gateway-CW-61lvs.d.ts → gateway-BqmcKam8.d.ts} +2 -2
- package/dist/gateway-main.js +3 -3
- package/dist/gateway.d.ts +3 -3
- package/dist/gateway.js +3 -3
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/{postgres-bridge-store-C9KG9Z69.d.ts → postgres-bridge-store-ChoOuFEY.d.ts} +1 -1
- package/dist/server.d.ts +0 -2
- package/dist/server.js +8 -7
- package/dist/{sqlite-edge-store-CdMIOrho.d.ts → sqlite-edge-store-BAFUeysk.d.ts} +1 -1
- package/dist/sqlite.d.ts +7 -3
- package/dist/sqlite.js +1 -1
- package/docs/architecture-v2.md +22 -14
- package/docs/decisions/0001-protocol-layers-and-acknowledgment-semantics.md +2 -1
- package/docs/decisions/0002-canonical-operation-contract-registry.md +6 -1
- package/docs/decisions/0005-retire-direct-supabase-runtime.md +52 -0
- package/docs/deployment.md +17 -12
- package/docs/ecosystem.md +6 -4
- package/docs/troubleshooting.md +15 -0
- package/llms.txt +3 -3
- package/openapi/agent-bridge-v2.openapi.json +3 -6
- package/package.json +3 -3
- package/schemas/agent-bridge-v2.capabilities.json +4 -5
- package/schemas/agent-bridge-v2.mcp.json +6 -12
- package/schemas/agent-bridge-v2.schema.json +12 -24
- package/dist/chunk-2EVLG3YA.js.map +0 -1
- package/dist/chunk-7VJI2MXI.js.map +0 -1
- package/dist/chunk-AWE3DFZV.js.map +0 -1
- package/dist/chunk-E4OWHGUE.js.map +0 -1
- package/dist/chunk-HUHG7XTB.js.map +0 -1
- package/dist/chunk-QPC6JHA3.js.map +0 -1
- package/dist/chunk-Z6JP6MYD.js +0 -584
- package/dist/chunk-Z6JP6MYD.js.map +0 -1
- /package/dist/{chunk-JUTJRAMA.js.map → chunk-FGERNG4X.js.map} +0 -0
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/legacy-project-reconciliation.ts","../src/client-installer.ts","../src/enrollment-file.ts","../src/client-lifecycle.ts","../src/client-maintenance.ts","../src/client-operation.ts","../src/client-migration-stage.ts","../src/client-migration-cutover.ts","../src/owner-control.ts","../src/archive-cli.ts","../src/dr-cli.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport { basename, dirname, join } from \"node:path\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { mkdtempSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport pg from \"pg\";\nimport type { MessageDraft } from \"./bridge-domain.js\";\nimport { resolveClientConfig, type ClientConfig } from \"./client-config.js\";\nimport { createClientRuntime } from \"./client-runtime.js\";\nimport { loadMigrationPlan, runMigrations } from \"./migrations.js\";\nimport { reconcileLegacyProjects } from \"./legacy-project-reconciliation.js\";\nimport { legacyContextMetadata, legacyNumericMessageId } from \"./legacy-compat.js\";\nimport { BridgeHttpError } from \"./http-bridge-store.js\";\nimport { LegacySupabaseError } from \"./legacy-supabase-store.js\";\nimport { installClient, type InstallableRuntime } from \"./client-installer.js\";\nimport { adoptClient, inspectClient } from \"./client-lifecycle.js\";\nimport {\n repairManagedClient, resumeManagedClientOperation, rollbackManagedClient, uninstallManagedClient, updateManagedClient,\n} from \"./client-maintenance.js\";\nimport { CLIENT_OPERATION_VERSION, inspectClientOperation, listClientOperations, readClientOperation } from \"./client-operation.js\";\nimport { resumeClientMigrationStage, stageClientMigrationTarget } from \"./client-migration-stage.js\";\nimport {\n cutoverClientMigration, finalizeClientMigration, resumeClientMigrationCutover,\n} from \"./client-migration-cutover.js\";\nimport { capabilityDocument, operationForCli, parseCliResponse, validateRequest } from \"./contracts/registry.js\";\nimport { runOwnerCommand, type OwnerOptions } from \"./owner-control.js\";\nimport { ArchiveCommandError, runArchiveCommand } from \"./archive-cli.js\";\nimport { runDrCommand } from \"./dr-cli.js\";\nimport { NativeDrCommandError } from \"./sqlite-native-dr.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\ntype Options = Record<string, string | boolean | string[]>;\nconst SUPPORTED_OPTIONS = new Set([\n \"agent\", \"as\", \"atrib-receipt-id\", \"category\", \"causation-id\", \"config\",\n \"content\", \"content-type\", \"correlation-id\", \"cursor\", \"data\", \"db\", \"dead\",\n \"delivery-id\", \"delivery-max-attempts\", \"delivery-mode\", \"delivery-policy\",\n \"disposition\", \"error\", \"expires-at\", \"force\", \"idempotency-key\", \"ids\",\n \"informed-by\", \"instance\", \"interval-ms\", \"json\", \"key\", \"kind\", \"lease-ms\",\n \"lease-token\", \"limit\", \"max-attempts\", \"max-interval-ms\", \"message-id\",\n \"metadata\", \"not-before\", \"payload\", \"payload-ciphertext\", \"payload-mime\", \"payload-ref\",\n \"polls\", \"priority\", \"project\", \"provider\", \"reply-to-id\", \"since\", \"source\",\n \"target\", \"target-agent\", \"target-agents\", \"thread-id\", \"token\", \"type\",\n \"unacked-by\", \"url\", \"workspace\", \"mailbox\", \"receipt-state\",\n \"identity\", \"command\", \"scope\", \"backend-config\", \"config-path\",\n \"recipient\", \"retry-base-ms\", \"retry-jitter\", \"retry-max-ms\", \"role\", \"runtime\", \"capability\", \"state\",\n \"max-pages\", \"max-push\",\n \"latest\",\n \"apply\",\n \"display-name\", \"enrollment-file\",\n \"credential-id\", \"gateway-url\", \"grace-until\", \"invalidate-immediately\", \"label\",\n \"reason\", \"request-id\", \"resume\", \"runtime-type\", \"recover-lock\",\n \"scope-set\", \"workspace-name\", \"exclusive-edge\",\n]);\nconst BOOLEAN_OPTIONS = new Set([\"apply\", \"dead\", \"force\", \"invalidate-immediately\", \"json\", \"latest\", \"recover-lock\", \"exclusive-edge\"]);\nfunction parse(argv: string[]): { command: string; options: Options; positionals: string[] } {\n const command = argv[0] ?? \"help\"; const options: Options = {}; const positionals: string[] = [];\n for (let i = 1; i < argv.length; i++) {\n const value = argv[i]!;\n if (!value.startsWith(\"--\")) { positionals.push(value); continue; }\n const key = value.slice(2); const next = argv[i + 1];\n if (!next || next.startsWith(\"--\")) {\n if (!BOOLEAN_OPTIONS.has(key)) throw new Error(`--${key} requires a value`);\n options[key] = true;\n }\n else { i++; const previous = options[key]; options[key] = previous === undefined ? next : Array.isArray(previous) ? [...previous, next] : [String(previous), next]; }\n }\n return { command, options, positionals };\n}\nfunction one(options: Options, key: string): string | undefined { const value = options[key]; return Array.isArray(value) ? value[value.length - 1] : typeof value === \"string\" ? value : undefined; }\nfunction list(options: Options, key: string): string[] { const value = options[key]; return (Array.isArray(value) ? value : value ? [String(value)] : []).flatMap((item) => item.split(\",\")).map((item) => item.trim()).filter(Boolean); }\nfunction boolean(options: Options, key: string): boolean {\n const value = options[key];\n const selected = Array.isArray(value) ? value[value.length - 1] : value;\n if (selected === undefined) return false;\n if (selected === true || selected === \"true\") return true;\n if (selected === false || selected === \"false\") return false;\n throw new Error(`--${key} must be true or false`);\n}\nfunction integer(options: Options, key: string, fallback: number): number { const raw = one(options, key); const result = raw === undefined ? fallback : Number(raw); if (!Number.isSafeInteger(result) || result < 0) throw new Error(`--${key} must be a non-negative integer`); return result; }\nfunction json(options: Options, key: string): unknown {\n const raw = one(options, key);\n if (raw === undefined) return undefined;\n try { return JSON.parse(raw); } catch { throw new Error(`--${key} must be valid JSON`); }\n}\nfunction since(options: Options): string | undefined {\n const raw = one(options, \"since\");\n if (!raw) return undefined;\n const relative = raw.match(/^(\\d+)(h|d)$/);\n if (!relative) return raw;\n const amount = Number(relative[1]);\n const milliseconds = amount * (relative[2] === \"h\" ? 3_600_000 : 86_400_000);\n return new Date(Date.now() - milliseconds).toISOString();\n}\nfunction output(value: unknown): void { process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`); }\nfunction cliOutput(\n operationId: string,\n value: unknown,\n invocation?: { command: string; optionNames?: readonly string[] },\n): void { output(parseCliResponse(operationId, value, invocation)); }\nfunction failedClientStatus(\n config: ClientConfig,\n error: unknown,\n failure: { component: \"local-store\" | \"remote\"; remoteAttempted?: boolean },\n): void {\n const schemaVersion = config.provider === \"legacy-supabase\"\n ? \"legacy-v1\"\n : config.provider === \"gateway\" ? \"postgres-v2\" : \"local-v2\";\n const remote = config.provider === \"local\" || !failure.remoteAttempted ? null : false;\n const localHealthy = failure.component !== \"local-store\";\n const code = error && typeof error === \"object\" && \"code\" in error && typeof error.code === \"string\"\n ? error.code\n : \"diagnostics_failed\";\n cliOutput(\"client_status\", {\n status: \"failed\",\n localHealthy,\n connected: false,\n remoteReachable: remote,\n provider: config.provider,\n workspace: config.principal.workspace,\n agent: config.principal.agent,\n instance: config.principal.instance ?? null,\n schemaVersion,\n endpoint: config.url ?? null,\n database: config.provider === \"local\" ? config.databasePath : null,\n cursorPath: config.cursorPath,\n lastCursor: cursor(config.cursorPath) ?? null,\n queue: { schemaVersion, deliverySupported: false, pending: null, claimed: null, retrying: null, dead: null },\n checks: [{ name: failure.component, status: \"failed\", message: `${failure.component} diagnostics failed (${code})` }],\n });\n}\nfunction cursor(path: string): string | undefined { try { return readFileSync(path, \"utf8\").trim() || undefined; } catch { return undefined; } }\nfunction preparePrivateOutput(path: string): void {\n const directory = dirname(path);\n const existed = existsSync(directory);\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n if (!existed || basename(directory) === \".agent-bridge\") securePrivatePath(directory, \"directory\");\n else verifyPrivatePathAccess(directory, \"directory\");\n if (existsSync(path)) verifyPrivatePathAccess(path, \"file\");\n}\n\nfunction saveCursor(path: string, value: string | undefined): void {\n if (!value) return;\n preparePrivateOutput(path);\n const temporary = `${path}.${process.pid}.tmp`;\n try {\n writeFileSync(temporary, `${value}\\n`, { mode: 0o600 });\n securePrivatePath(temporary, \"file\");\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n } catch (error) {\n rmSync(temporary, { force: true });\n throw error;\n }\n}\nfunction watchCursorPath(path: string, project: string | undefined): string {\n if (!project) return path;\n const scope = createHash(\"sha256\").update(project).digest(\"hex\").slice(0, 16);\n return `${path}.project-${scope}`;\n}\nfunction packageVersion(): string {\n const manifest = JSON.parse(readFileSync(fileURLToPath(new URL(\"../package.json\", import.meta.url)), \"utf8\")) as { version?: unknown };\n if (typeof manifest.version !== \"string\" || !manifest.version) throw new Error(\"package version is unavailable\");\n return manifest.version;\n}\nfunction help(): void {\n process.stdout.write(`agent-bridge: provider-neutral agent messaging\\n\\nCommands:\\n init, doctor, status, capabilities, pending, migrate, reconcile-legacy-projects, sync, demo, join, presence\\n send (post), inbox (get), sent, history, acknowledge, claim, extend, ack, nack, watch\\n deliveries, dead-letters, delivery-events, cancel, requeue\\n owner <provision|inventory|rotate|revoke>\\n archive <export|verify|import>\\n dr <backup|verify|restore>\\n clients install <codex|claude-code|claude-desktop> --identity <name>\\n clients inspect <codex|claude-code|claude-desktop> --identity <name> --instance <key> --backend-config <path>\\n clients adopt <codex|claude-code|claude-desktop> --identity <name> --instance <key> --backend-config <path> [--apply]\\n clients repair <codex|claude-code|claude-desktop> --identity <name> --instance <key> [--apply] [--resume <uuid>] [--recover-lock]\\n clients update <codex|claude-code|claude-desktop> --identity <name> --instance <key> [--command <command>] [--apply] [--resume <uuid>] [--recover-lock]\\n clients uninstall <codex|claude-code|claude-desktop> --identity <name> --instance <key> [--apply] [--resume <uuid>] [--recover-lock]\\n clients rollback <source-operation-id> --identity <name> [--apply] [--recover-lock]\\n clients migrate stage <codex|claude-code|claude-desktop> --identity <name> --instance <key> --enrollment-file <path> [--apply] [--recover-lock]\\n clients migrate cutover <stage-operation-id> --exclusive-edge [--apply] [--recover-lock]\\n clients migrate finalize <cutover-operation-id> --exclusive-edge [--apply] [--recover-lock]\\n clients resume <operation-id> [--recover-lock]\\n clients operations [<operation-id>]\\n\\nOptions:\\n -V, --version Print the installed package version\\n -h, --help Show this help\\n`);\n}\nfunction rejectUnknownOptions(options: Options): void {\n const unknown = Object.keys(options).filter((key) => !SUPPORTED_OPTIONS.has(key));\n if (unknown.length) throw new Error(`unknown option: --${unknown[0]}`);\n}\nfunction rejectOptionsOutside(options: Options, allowed: ReadonlySet<string>, command: string): void {\n const invalid = Object.keys(options).find((key) => !allowed.has(key));\n if (invalid) throw new Error(`--${invalid} is not valid for ${command}`);\n}\n\nconst CLI_CONTEXT_OPTIONS = new Set([\n \"agent\", \"as\", \"config\", \"db\", \"instance\", \"json\", \"key\", \"provider\",\n \"token\", \"url\", \"workspace\",\n]);\n\nfunction validateCanonicalCommandOptions(command: string, options: Options, config: ClientConfig): void {\n const contract = operationForCli(command, config.provider, Object.keys(options));\n if (!contract?.cli) return;\n const allowed = new Set([...CLI_CONTEXT_OPTIONS, ...contract.cli.options]);\n const invalid = Object.keys(options).find((key) => !allowed.has(key));\n if (invalid) throw new Error(`--${invalid} is not valid for ${command}`);\n}\n\nasync function initialize(options: Options): Promise<void> {\n const home = process.env.HOME ?? homedir();\n const configPath = one(options, \"config\") ?? process.env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\");\n if (existsSync(configPath) && !boolean(options, \"force\")) {\n throw new Error(`Config already exists at ${configPath}; pass --force to replace it`);\n }\n const provider = one(options, \"provider\") ?? process.env.AGENT_BRIDGE_PROVIDER ?? \"local\";\n if (one(options, \"instance\")) {\n throw new Error(\"--instance is client-scoped; set it in the active client process\");\n }\n const values: Record<string, string | undefined> = {\n AGENT_BRIDGE_PROVIDER: provider,\n AGENT_BRIDGE_WORKSPACE: one(options, \"workspace\") ?? process.env.AGENT_BRIDGE_WORKSPACE ?? (provider === \"legacy-supabase\" || provider === \"legacy\" || provider === \"supabase\" ? \"*\" : \"default\"),\n AGENT_BRIDGE_DB: one(options, \"db\") ?? process.env.AGENT_BRIDGE_DB,\n AGENT_BRIDGE_EDGE_DB: process.env.AGENT_BRIDGE_EDGE_DB,\n AGENT_BRIDGE_URL: one(options, \"url\") ?? process.env.AGENT_BRIDGE_URL,\n AGENT_BRIDGE_KEY: one(options, \"key\") ?? process.env.AGENT_BRIDGE_KEY,\n };\n const verificationToken = one(options, \"token\") ?? process.env.AGENT_BRIDGE_TOKEN;\n for (const value of Object.values(values)) {\n if (value?.includes(\"\\n\") || value?.includes(\"\\r\")) throw new Error(\"config values cannot contain newlines\");\n }\n preparePrivateOutput(configPath);\n const temporary = `${configPath}.${process.pid}.tmp`;\n let config: ClientConfig;\n try {\n writeFileSync(\n temporary,\n Object.entries(values).filter((entry): entry is [string, string] => Boolean(entry[1])).map(([key, value]) => `${key}=${value}`).join(\"\\n\") + \"\\n\",\n { mode: 0o600 },\n );\n securePrivatePath(temporary, \"file\");\n config = resolveClientConfig(\n {\n HOME: home,\n AGENT_BRIDGE_CONFIG: temporary,\n AGENT_BRIDGE_TOKEN: verificationToken,\n },\n \"agent-bridge-init\",\n );\n const runtime = await createClientRuntime(config);\n try {\n if (config.provider === \"gateway\") await runtime.store.verifyRemote?.();\n } finally {\n await runtime.close();\n }\n renameSync(temporary, configPath);\n verifyPrivatePathAccess(configPath, \"file\");\n } catch (error) {\n rmSync(temporary, { force: true });\n throw error;\n }\n output({ status: \"ok\", config: configPath, provider: config.provider, workspace: config.principal.workspace, identity: \"process-scoped\", database: config.provider === \"local\" ? config.databasePath : null });\n}\n\nfunction configFor(options: Options, command: string): ClientConfig {\n const explicit = command === \"send\"\n ? one(options, \"source\") ?? one(options, \"agent\")\n : command === \"acknowledge\" || (command === \"ack\" && Boolean(one(options, \"ids\")))\n ? one(options, \"agent\")\n : one(options, \"as\");\n const environment = {\n ...process.env,\n ...(one(options, \"config\") ? { AGENT_BRIDGE_CONFIG: one(options, \"config\") } : {}),\n ...(one(options, \"provider\") ? { AGENT_BRIDGE_PROVIDER: one(options, \"provider\") } : {}),\n ...(one(options, \"db\") ? { AGENT_BRIDGE_DB: one(options, \"db\") } : {}),\n ...(one(options, \"url\") ? { AGENT_BRIDGE_URL: one(options, \"url\") } : {}),\n ...(one(options, \"key\") ? { AGENT_BRIDGE_KEY: one(options, \"key\") } : {}),\n ...(one(options, \"token\") ? { AGENT_BRIDGE_TOKEN: one(options, \"token\") } : {}),\n ...(one(options, \"instance\") ? { AGENT_BRIDGE_INSTANCE: one(options, \"instance\") } : {}),\n };\n const config = resolveClientConfig(environment, explicit);\n const assertedWorkspace = one(options, \"workspace\");\n if (config.provider === \"gateway\" && assertedWorkspace && assertedWorkspace !== config.principal.workspace) {\n throw new Error(\"--workspace must match the workspace bound to the gateway credential\");\n }\n if (config.provider === \"legacy-supabase\" && assertedWorkspace && assertedWorkspace !== \"*\") {\n throw new Error(\"--workspace is not supported by the global legacy Supabase schema\");\n }\n if (config.provider === \"local\" && assertedWorkspace && assertedWorkspace !== config.principal.workspace) {\n return resolveClientConfig(\n { ...environment, AGENT_BRIDGE_WORKSPACE: assertedWorkspace },\n explicit,\n );\n }\n return config;\n}\nfunction draft(options: Options, positionals: string[]): MessageDraft {\n const content = one(options, \"content\") ?? positionals.join(\" \");\n const metadataInput = json(options, \"metadata\");\n if (metadataInput !== undefined && (\n metadataInput === null || typeof metadataInput !== \"object\" || Array.isArray(metadataInput)\n )) throw new Error(\"--metadata must be a JSON object\");\n const metadata = (metadataInput ?? {}) as Record<string, unknown>;\n const envelope = typeof metadata.message_envelope === \"object\" && metadata.message_envelope\n ? { ...metadata.message_envelope as Record<string, unknown> }\n : {};\n if (one(options, \"payload-ref\")) envelope.payload_ref = one(options, \"payload-ref\");\n if (one(options, \"payload-ciphertext\")) envelope.payload_ciphertext = one(options, \"payload-ciphertext\");\n if (Object.keys(envelope).length) metadata.message_envelope = envelope;\n const deliveryMode = one(options, \"delivery-mode\");\n const deliveryTuning = [\"delivery-max-attempts\", \"retry-base-ms\", \"retry-max-ms\", \"retry-jitter\", \"not-before\"]\n .some((key) => one(options, key) !== undefined);\n if (deliveryTuning && !deliveryMode) throw new Error(\"--delivery-mode is required with delivery policy flags\");\n if (deliveryMode === \"mailbox\" && deliveryTuning) throw new Error(\"mailbox delivery mode does not accept retry or scheduling flags\");\n return {\n project: one(options, \"project\"),\n type: one(options, \"type\") ?? one(options, \"kind\") ?? one(options, \"category\") ?? \"operational\", content,\n targets: [...list(options, \"target\"), ...list(options, \"target-agent\"), ...list(options, \"target-agents\")],\n priority: one(options, \"priority\") as MessageDraft[\"priority\"], threadId: one(options, \"thread-id\"), replyToId: one(options, \"reply-to-id\"),\n correlationId: one(options, \"correlation-id\"), causationId: one(options, \"causation-id\"),\n id: one(options, \"message-id\"), idempotencyKey: one(options, \"idempotency-key\"), expiresAt: one(options, \"expires-at\"),\n contentType: one(options, \"content-type\") ?? one(options, \"payload-mime\"), atribReceiptId: one(options, \"atrib-receipt-id\"), informedBy: list(options, \"informed-by\"),\n data: (json(options, \"data\") ?? json(options, \"payload\")) as MessageDraft[\"data\"],\n metadata: metadata as MessageDraft[\"metadata\"],\n deliveryPolicy: (json(options,\"delivery-policy\") ?? (deliveryMode ? deliveryMode === \"mailbox\" ? { mode: \"mailbox\" } : { mode: deliveryMode, maxAttempts: integer(options,\"delivery-max-attempts\",5), retryBaseDelayMs: integer(options,\"retry-base-ms\",1000), retryMaxDelayMs: integer(options,\"retry-max-ms\",60000), retryJitterRatio: Number(one(options,\"retry-jitter\") ?? .2), notBefore: one(options,\"not-before\") } : undefined)) as MessageDraft[\"deliveryPolicy\"],\n };\n}\n\nasync function localDemo(): Promise<void> {\n const directory = mkdtempSync(join(tmpdir(), \"agent-bridge-demo-\")); const databasePath = join(directory, \"demo.sqlite3\");\n securePrivatePath(directory, \"directory\");\n const base = { provider: \"local\" as const, databasePath, edgeDatabasePath: join(directory, \"edge.sqlite3\"), cursorPath: join(directory, \"cursor\"), configPath: join(directory, \"config\"), credential: undefined, url: undefined };\n let sender: Awaited<ReturnType<typeof createClientRuntime>> | undefined;\n let worker: Awaited<ReturnType<typeof createClientRuntime>> | undefined;\n try {\n sender = await createClientRuntime({ ...base, principal: { workspace: \"demo\", agent: \"demo-sender\", instance: \"sender-1\" } });\n const sent = await sender.service.publish(sender.config.principal, { type: \"request\", content: \"deterministic local task\", targets: [\"demo-worker\"], idempotencyKey: \"demo-task-v1\" });\n await sender.close();\n sender = undefined;\n worker = await createClientRuntime({ ...base, principal: { workspace: \"demo\", agent: \"demo-worker\", instance: \"worker-1\" } });\n const history = await worker.service.history(worker.config.principal);\n const claim = await worker.service.claim(worker.config.principal, { leaseMs: 5_000 });\n if (!claim) throw new Error(\"demo claim failed\");\n const acked = await worker.service.ack(worker.config.principal, claim.delivery.id, claim.leaseToken);\n output({ status: \"ok\", principals: [\"demo-sender\", \"demo-worker\"], sent: sent.created, read: history.messages.length === 1, claimed: claim.delivery.state === \"claimed\", acknowledged: acked?.state === \"acked\" });\n } finally {\n await worker?.close();\n await sender?.close();\n rmSync(directory, { recursive: true, force: true });\n }\n}\n\nexport async function runCli(argv = process.argv.slice(2)): Promise<void> {\n if (argv.some((argument) => argument === \"-h\" || argument === \"--help\")) {\n help();\n return;\n }\n if (argv[0] === \"archive\") {\n output(await runArchiveCommand(argv.slice(1), process.env));\n return;\n }\n if (argv[0] === \"dr\") {\n output(await runDrCommand(argv.slice(1)));\n return;\n }\n const { command: raw, options, positionals } = parse(argv); const command = ({ post: \"send\", get: \"inbox\", receipt: \"acknowledge\" } as Record<string, string>)[raw] ?? raw;\n if ([\"-V\", \"--version\"].includes(command)) { process.stdout.write(`${packageVersion()}\\n`); return; }\n if (command === \"help\") { help(); return; }\n rejectUnknownOptions(options);\n if (command === \"owner\") {\n if (positionals.length !== 1) {\n throw new Error(\"usage: agent-bridge owner <provision|inventory|rotate|revoke>\");\n }\n const ownerOptions: OwnerOptions = {};\n for (const [key, value] of Object.entries(options)) {\n if (Array.isArray(value)) throw new Error(\"--\" + key + \" may only be provided once\");\n ownerOptions[key] = value;\n }\n output(await runOwnerCommand(positionals[0], ownerOptions, process.env));\n return;\n }\n if (command === \"clients\") {\n const action = positionals[0];\n if (action === \"operations\") {\n rejectOptionsOutside(options, new Set(), \"clients operations\");\n const operationId = positionals[1];\n const expectedLength = operationId ? 2 : 1;\n if (positionals.length !== expectedLength) {\n throw new Error(\"usage: agent-bridge clients operations [<operation-id>]\");\n }\n output(operationId ? inspectClientOperation(operationId, process.env) : {\n schemaVersion: CLIENT_OPERATION_VERSION,\n operations: listClientOperations(process.env),\n });\n return;\n }\n if (action === \"resume\") {\n rejectOptionsOutside(options, new Set([\"recover-lock\"]), \"clients resume\");\n if (positionals.length !== 2 || !positionals[1]) {\n throw new Error(\"usage: agent-bridge clients resume <operation-id> [--recover-lock]\");\n }\n const operation = readClientOperation(positionals[1], process.env);\n if (operation.version === 5 && operation.request?.kind === \"migrate\" && \"identity\" in operation.request) {\n output(await resumeClientMigrationStage({\n operationId: positionals[1], recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n } else if (operation.version === 6 && operation.request\n && [\"migrate-cutover\", \"migrate-finalize\"].includes(operation.request.kind)) {\n output(await resumeClientMigrationCutover({\n operationId: positionals[1], recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n } else {\n output(resumeManagedClientOperation({\n operationId: positionals[1], recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n }\n return;\n }\n if (action === \"rollback\") {\n rejectOptionsOutside(options, new Set([\"identity\", \"apply\", \"recover-lock\"]), \"clients rollback\");\n if (positionals.length !== 2 || !positionals[1]) {\n throw new Error(\"usage: agent-bridge clients rollback <source-operation-id> --identity <name> [--apply] [--recover-lock]\");\n }\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) {\n throw new Error(\"--recover-lock requires --apply\");\n }\n output(rollbackManagedClient({\n sourceOperationId: positionals[1], identity: one(options, \"identity\") ?? \"\",\n apply: boolean(options, \"apply\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n return;\n }\n if (action === \"migrate\") {\n const migrationAction = positionals[1];\n if (migrationAction === \"cutover\") {\n rejectOptionsOutside(options, new Set([\"apply\", \"recover-lock\", \"exclusive-edge\"]), \"clients migrate cutover\");\n if (positionals.length !== 3 || !positionals[2]) throw new Error(\"usage: agent-bridge clients migrate cutover <stage-operation-id> --exclusive-edge [--apply] [--recover-lock]\");\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) throw new Error(\"--recover-lock requires --apply\");\n output(await cutoverClientMigration({ stageOperationId: positionals[2], apply: boolean(options, \"apply\"), exclusiveEdge: boolean(options, \"exclusive-edge\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env }));\n } else if (migrationAction === \"finalize\") {\n rejectOptionsOutside(options, new Set([\"apply\", \"recover-lock\", \"exclusive-edge\"]), `clients migrate ${migrationAction}`);\n if (positionals.length !== 3 || !positionals[2]) throw new Error(`usage: agent-bridge clients migrate ${migrationAction} <cutover-operation-id> --exclusive-edge [--apply] [--recover-lock]`);\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) throw new Error(\"--recover-lock requires --apply\");\n const request = { cutoverOperationId: positionals[2], apply: boolean(options, \"apply\"), exclusiveEdge: boolean(options, \"exclusive-edge\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env };\n output(await finalizeClientMigration(request));\n } else {\n rejectOptionsOutside(options, new Set([\"identity\", \"instance\", \"enrollment-file\", \"apply\", \"recover-lock\"]), \"clients migrate stage\");\n if (positionals.length !== 3 || migrationAction !== \"stage\" || !positionals[2]) {\n throw new Error(\"usage: agent-bridge clients migrate stage <runtime> --identity <name> --instance <key> --enrollment-file <path> [--apply] [--recover-lock]\");\n }\n const runtime = positionals[2] as InstallableRuntime;\n if (![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) throw new Error(`unsupported client runtime: ${runtime}`);\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) throw new Error(\"--recover-lock requires --apply\");\n output(await stageClientMigrationTarget({ runtime, identity: one(options, \"identity\") ?? \"\", instance: one(options, \"instance\") ?? \"\", enrollmentFile: one(options, \"enrollment-file\") ?? \"\", apply: boolean(options, \"apply\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env }));\n }\n return;\n }\n if (positionals.length !== 2 || ![\"install\", \"inspect\", \"adopt\", \"repair\", \"update\", \"uninstall\"].includes(action ?? \"\") || !positionals[1]) {\n throw new Error(action === \"install\"\n ? \"usage: agent-bridge clients install <runtime> --identity <name>\"\n : \"usage: agent-bridge clients <install|inspect|adopt|repair|update|uninstall> <runtime>\");\n }\n const runtime = positionals[1] as InstallableRuntime | undefined;\n if (runtime && ![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) {\n throw new Error(`unsupported client runtime: ${runtime}`);\n }\n const scope = one(options, \"scope\");\n if (scope && ![\"local\", \"user\", \"project\"].includes(scope)) {\n throw new Error(\"--scope must be local, user, or project\");\n }\n if (action === \"repair\" || action === \"update\" || action === \"uninstall\") {\n rejectOptionsOutside(options, new Set([\n \"identity\", \"instance\", \"command\", \"apply\", \"resume\", \"recover-lock\",\n ]), `clients ${action}`);\n if (action !== \"update\" && options.command !== undefined) {\n throw new Error(`--command is not valid for clients ${action}`);\n }\n if (!boolean(options, \"apply\") && (options.resume !== undefined || options[\"recover-lock\"] !== undefined)) {\n throw new Error(\"--resume and --recover-lock require --apply\");\n }\n const maintenance = {\n runtime: runtime!, identity: one(options, \"identity\") ?? \"\", instance: one(options, \"instance\") ?? \"\",\n command: one(options, \"command\"), apply: boolean(options, \"apply\"),\n resume: one(options, \"resume\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n };\n output(action === \"repair\"\n ? repairManagedClient(maintenance)\n : action === \"update\"\n ? updateManagedClient(maintenance)\n : uninstallManagedClient(maintenance));\n return;\n }\n if (action === \"inspect\" || action === \"adopt\") {\n rejectOptionsOutside(options, new Set([\n \"identity\", \"command\", \"scope\", \"instance\", \"backend-config\", \"config-path\", \"apply\",\n ]), `clients ${action}`);\n if (action === \"inspect\" && options.apply !== undefined) {\n throw new Error(\"--apply is only valid for clients adopt\");\n }\n if (runtime !== \"claude-code\" && options.scope !== undefined) {\n throw new Error(\"--scope is only valid for the claude-code runtime\");\n }\n if (runtime !== \"claude-desktop\" && options[\"config-path\"] !== undefined) {\n throw new Error(\"--config-path is only valid for the claude-desktop runtime\");\n }\n const lifecycleOptions = {\n command: one(options, \"command\"),\n scope: scope as \"local\" | \"user\" | \"project\" | undefined,\n instance: one(options, \"instance\") ?? \"\",\n backendConfigPath: one(options, \"backend-config\") ?? \"\",\n configPath: one(options, \"config-path\"),\n apply: action === \"adopt\" ? boolean(options, \"apply\") : false,\n env: process.env,\n };\n output(action === \"inspect\"\n ? inspectClient(runtime!, one(options, \"identity\") ?? \"\", lifecycleOptions)\n : adoptClient(runtime!, one(options, \"identity\") ?? \"\", lifecycleOptions));\n return;\n }\n rejectOptionsOutside(options, new Set([\n \"identity\", \"command\", \"scope\", \"instance\", \"token\", \"enrollment-file\", \"recover-lock\",\n ]), \"clients install\");\n output(installClient(runtime, one(options, \"identity\") ?? \"\", {\n command: one(options, \"command\"),\n scope: scope as \"local\" | \"user\" | \"project\" | undefined,\n instance: one(options, \"instance\"),\n token: one(options, \"token\"),\n enrollmentFile: one(options, \"enrollment-file\"),\n recoverLock: boolean(options, \"recover-lock\"),\n env: process.env,\n }));\n return;\n }\n if (command === \"demo\") { await localDemo(); return; }\n if (command === \"init\") { await initialize(options); return; }\n if (command === \"migrate\") {\n const databaseUrl = process.env.AGENT_BRIDGE_DATABASE_URL;\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_DATABASE_URL is required\");\n const pool = new pg.Pool({ connectionString: databaseUrl, max: 1 });\n try {\n const applied = await runMigrations(\n pool,\n fileURLToPath(new URL(\"../sql/migrations\", import.meta.url)),\n );\n output({ status: \"ok\", applied });\n } finally { await pool.end(); }\n return;\n }\n if (command === \"reconcile-legacy-projects\") {\n const databaseUrl = process.env.AGENT_BRIDGE_DATABASE_URL;\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_DATABASE_URL is required\");\n const pool = new pg.Pool({ connectionString: databaseUrl, max: 1 });\n try {\n const directory = fileURLToPath(new URL(\"../sql/migrations\", import.meta.url));\n const migration = (await loadMigrationPlan(directory)).find((entry) => entry.version === 8);\n if (!migration || migration.name !== \"message_projects\") {\n throw new Error(\"migration 008_message_projects is missing from the migration plan\");\n }\n output(await reconcileLegacyProjects(pool, {\n apply: boolean(options, \"apply\"),\n migrationChecksum: migration.checksum,\n }));\n }\n finally { await pool.end(); }\n return;\n }\n const config = configFor(options, command);\n validateCanonicalCommandOptions(raw, options, config);\n const assertedUnackedBy = one(options, \"unacked-by\");\n if (assertedUnackedBy !== undefined && assertedUnackedBy !== config.principal.agent) throw new Error(\"--unacked-by must equal the configured principal\");\n if (command === \"capabilities\") {\n validateRequest(\"capabilities\", {});\n cliOutput(\"capabilities\", capabilityDocument({ surface: \"cli\", provider: config.provider }));\n return;\n }\n let runtime: Awaited<ReturnType<typeof createClientRuntime>>;\n try {\n runtime = await createClientRuntime(config, {\n autoSync: command !== \"doctor\" && command !== \"status\",\n initializationMode: command === \"status\" ? \"passive\" : \"active\",\n });\n } catch (error) {\n if (command !== \"doctor\" && command !== \"status\") throw error;\n const remoteInitialization = command === \"doctor\" && config.provider === \"legacy-supabase\";\n failedClientStatus(config, error, {\n component: remoteInitialization ? \"remote\" : \"local-store\",\n remoteAttempted: remoteInitialization,\n });\n process.exitCode = 1;\n return;\n }\n try {\n if (command === \"doctor\" || command === \"status\") {\n validateRequest(\"client_status\", {});\n const active = command === \"doctor\";\n try {\n const diagnostics = await runtime.store.diagnostics?.(config.principal, { mode: active ? \"probe\" : \"snapshot\" }) ?? { schemaVersion: config.provider === \"legacy-supabase\" ? \"legacy-v1\" as const : \"local-v2\" as const, deliverySupported: false, pending: null, claimed: null, retrying: null, dead: null };\n const remoteReachable = \"remoteReachable\" in diagnostics\n ? diagnostics.remoteReachable ?? null\n : active && config.provider === \"legacy-supabase\" ? true : null;\n type CheckStatus = \"ok\" | \"unknown\" | \"degraded\" | \"failed\";\n const checks: Array<{ name: string; status: CheckStatus; message: string }> = [{\n name: \"local-store\",\n status: \"ok\",\n message: \"local diagnostics are readable\",\n }];\n if (config.provider !== \"local\") {\n const provider = config.provider === \"gateway\" ? \"gateway\" : \"legacy provider\";\n const remoteError = \"remoteError\" in diagnostics && typeof diagnostics.remoteError === \"string\"\n ? diagnostics.remoteError\n : undefined;\n checks.push({\n name: \"remote\",\n status: remoteReachable === false ? \"degraded\" : remoteError ? \"failed\" : remoteReachable === true ? \"ok\" : \"unknown\",\n message: remoteReachable === false ? `${provider} is unreachable` : remoteError ? `${provider} rejected diagnostics (${remoteError})` : remoteReachable === true ? `${provider} is reachable` : `${provider} reachability has not been checked`,\n });\n }\n const blocked = \"outboxBlocked\" in diagnostics ? Number(diagnostics.outboxBlocked ?? 0) : 0;\n checks.push({ name: \"blocked-outbox\", status: blocked > 0 ? \"degraded\" : \"ok\", message: blocked > 0 ? `${blocked} outbound message(s) require intervention` : \"no blocked outbound messages\" });\n const expired = Number(diagnostics.expiredLeases ?? 0);\n checks.push({ name: \"expired-leases\", status: expired > 0 ? \"degraded\" : \"ok\", message: expired > 0 ? `${expired} delivery lease(s) are expired` : \"no expired delivery leases\" });\n const dead = Number(diagnostics.dead ?? 0);\n checks.push({ name: \"dead-deliveries\", status: dead > 0 ? \"degraded\" : \"ok\", message: dead > 0 ? `${dead} dead delivery/deliveries are visible` : \"no dead deliveries\" });\n const migrationState = \"migrationState\" in diagnostics ? diagnostics.migrationState : undefined;\n if (migrationState === \"draining\" || migrationState === \"retired\") {\n checks.push({\n name: \"migration-gate\",\n status: migrationState === \"retired\" ? \"failed\" : \"degraded\",\n message: migrationState === \"retired\"\n ? \"this edge scope was retired by a client migration\"\n : \"this edge scope is draining for a client migration\",\n });\n }\n const status: CheckStatus = checks.some((check) => check.status === \"failed\")\n ? \"failed\"\n : checks.some((check) => check.status === \"degraded\")\n ? \"degraded\"\n : checks.some((check) => check.status === \"unknown\") ? \"unknown\" : \"ok\";\n const remoteError = \"remoteError\" in diagnostics && typeof diagnostics.remoteError === \"string\";\n const connected = config.provider === \"local\" ? true : remoteReachable === true && !remoteError;\n const queue = { ...diagnostics } as Record<string, unknown>;\n delete queue.syncLoopState;\n delete queue.syncLoopError;\n cliOutput(\"client_status\", { status, localHealthy: true, connected, remoteReachable, provider: config.provider, workspace: config.principal.workspace, agent: config.principal.agent, instance: config.principal.instance ?? null, schemaVersion: diagnostics.schemaVersion, endpoint: config.url ?? null, database: config.provider === \"local\" ? config.databasePath : null, cursorPath: config.cursorPath, lastCursor: cursor(config.cursorPath) ?? null, queue, checks });\n if (active && status !== \"ok\") process.exitCode = status === \"failed\" ? 1 : 2;\n } catch (error) {\n failedClientStatus(config, error, { component: \"local-store\" });\n process.exitCode = 1;\n }\n return;\n }\n if (command === \"pending\") {\n const diagnostics = await runtime.store.diagnostics?.(config.principal, {\n mode: config.provider === \"gateway\" ? \"probe\" : \"snapshot\",\n });\n const page = await runtime.service.history(config.principal, {\n limit: 1,\n project: one(options, \"project\"),\n receiptState: \"unread\",\n });\n const pendingDeliveries = diagnostics?.pending ?? 0;\n const retryingDeliveries = diagnostics?.retrying ?? 0;\n const oldest = diagnostics?.oldestAvailableAt\n ? Date.parse(diagnostics.oldestAvailableAt)\n : Number.POSITIVE_INFINITY;\n const deliveryAvailable = pendingDeliveries > 0 ||\n (retryingDeliveries > 0 && oldest <= Date.now());\n const unread = page.messages.length > 0;\n const available = deliveryAvailable || unread;\n const diagnosticsAuthoritative = !diagnostics || !(\"remoteReachable\" in diagnostics) ||\n diagnostics.remoteReachable === true;\n const pageAuthority = page as typeof page & {\n source?: \"remote\" | \"cache\";\n stale?: boolean;\n acknowledgements?: \"authoritative\" | \"unknown\";\n };\n const historyAuthoritative = pageAuthority.acknowledgements !== \"unknown\" &&\n pageAuthority.source !== \"cache\" && pageAuthority.stale !== true;\n const authoritative = diagnosticsAuthoritative && historyAuthoritative;\n output({\n available,\n unread,\n deliveryAvailable,\n pending: pendingDeliveries,\n retrying: retryingDeliveries,\n authoritative,\n state: available ? \"available\" : authoritative ? \"empty\" : \"unknown\",\n });\n if (!available) process.exitCode = authoritative ? 1 : 2;\n return;\n }\n if (command === \"send\") { const message = draft(options, positionals); validateRequest(\"publish_message\", { ...message, source: one(options, \"source\") }); cliOutput(\"publish_message\", await runtime.service.publish(config.principal, message)); return; }\n if (command === \"join\") { const input = validateRequest(\"heartbeat\", { leaseMs: integer(options, \"lease-ms\", 60_000), runtimeType: one(options, \"runtime\"), capabilities: list(options, \"capability\") }); cliOutput(\"heartbeat\", await runtime.service.heartbeat(config.principal, input)); return; }\n if (command === \"presence\") { validateRequest(\"presence\", {}); cliOutput(\"presence\", { agents: await runtime.service.presence(config.principal) }); return; }\n if (command === \"sync\") {\n if (!runtime.store.sync) throw new Error(\"sync is available only with the gateway provider\");\n const input = validateRequest(\"sync\", {\n maxPush: integer(options, \"max-push\", integer(options, \"limit\", 100)),\n maxPages: integer(options, \"max-pages\", 20),\n });\n cliOutput(\"sync\", await runtime.store.sync(input));\n return;\n }\n if (command === \"history\" || command === \"inbox\" || command === \"sent\") { const query = validateRequest(\"history\", { cursor: one(options, \"cursor\"), limit: integer(options, \"limit\", 20), types: list(options, \"type\").concat(list(options, \"category\")), source: one(options, \"source\"), project: one(options, \"project\"), since: since(options), mailbox: command === \"inbox\" ? \"inbox\" : command === \"sent\" ? \"sent\" : one(options, \"mailbox\") as any, receiptState: one(options, \"receipt-state\") as any, unacknowledgedBy: assertedUnackedBy, threadId: one(options, \"thread-id\"), latest: raw === \"get\" || boolean(options, \"latest\") }); const page = await runtime.service.history(config.principal, query); if (raw === \"get\") { cliOutput(\"history\", page.messages.map((message) => ({ id: config.provider === \"legacy-supabase\" ? Number(message.sequence) : message.id, source: message.source, category: message.type, content: message.content, priority: message.priority, project: message.project ?? null, metadata: legacyContextMetadata(message), created_at: message.createdAt })), { command: raw, optionNames: Object.keys(options) }); } else cliOutput(\"history\", page); return; }\n if (command === \"acknowledge\" || (command === \"ack\" && one(options, \"ids\"))) {\n const rawIds = list(options, \"ids\");\n validateRequest(\"record_receipt\", { messageIds: rawIds });\n const acknowledged = config.provider === \"legacy-supabase\" &&\n runtime.store.recordLegacyReceipt && rawIds.every((id) => /^\\d+$/.test(id))\n ? await runtime.store.recordLegacyReceipt(rawIds, config.principal.agent)\n : await runtime.service.acknowledge(\n config.principal,\n rawIds.map(legacyNumericMessageId),\n );\n cliOutput(\"record_receipt\", { acknowledged, agent: config.principal.agent }, {\n command: raw,\n optionNames: Object.keys(options),\n });\n return;\n }\n if (command === \"claim\") { const input = validateRequest(\"claim_delivery\", { leaseMs: integer(options, \"lease-ms\", 30_000), messageId: one(options, \"message-id\"), maxAttempts: one(options,\"max-attempts\")===undefined?undefined:integer(options,\"max-attempts\",5) }); cliOutput(\"claim_delivery\", await runtime.service.claim(config.principal, input)); return; }\n if(command===\"deliveries\"||command===\"dead-letters\"){const input=validateRequest(\"list_deliveries\",{cursor:one(options,\"cursor\"),limit:integer(options,\"limit\",50),role:one(options,\"role\") as any,messageId:one(options,\"message-id\"),recipient:one(options,\"recipient\"),states:command===\"dead-letters\"?[\"dead\"]:list(options,\"state\") as any});cliOutput(\"list_deliveries\",await runtime.service.deliveries(config.principal,input));return;}\n if(command===\"delivery-events\"){const input=validateRequest(\"list_delivery_events\",{deliveryId:one(options,\"delivery-id\")??positionals[0],cursor:one(options,\"cursor\"),limit:integer(options,\"limit\",50)});cliOutput(\"list_delivery_events\",await runtime.service.deliveryEvents(config.principal,String(input.deliveryId),input));return;}\n if(command===\"cancel\"){const input=validateRequest(\"cancel_delivery\",{deliveryId:one(options,\"delivery-id\")??positionals[0]});cliOutput(\"cancel_delivery\",await runtime.service.cancel(config.principal,String(input.deliveryId)));return;}\n if(command===\"requeue\"){const input=validateRequest(\"requeue_delivery\",{deliveryId:one(options,\"delivery-id\")??positionals[0]});cliOutput(\"requeue_delivery\",await runtime.service.requeue(config.principal,String(input.deliveryId)));return;}\n const deliveryId = one(options, \"delivery-id\") ?? positionals[0]; const leaseToken = one(options, \"lease-token\") ?? positionals[1];\n if (!deliveryId || !leaseToken) { if ([\"extend\", \"ack\", \"nack\"].includes(command)) throw new Error(\"--delivery-id and --lease-token are required\"); }\n if (command === \"extend\") { const input=validateRequest(\"extend_delivery\",{deliveryId,leaseToken,leaseMs:integer(options,\"lease-ms\",30_000)}); cliOutput(\"extend_delivery\",await runtime.service.extend(config.principal,String(input.deliveryId),String(input.leaseToken),input.leaseMs as number)); return; }\n if (command === \"ack\") { const input=validateRequest(\"acknowledge_delivery\",{deliveryId,leaseToken}); cliOutput(\"acknowledge_delivery\",await runtime.service.ack(config.principal,String(input.deliveryId),String(input.leaseToken))); return; }\n if (command === \"nack\") { const disposition=one(options,\"disposition\")??(boolean(options,\"dead\")?\"dead\":\"retry\"); const input=validateRequest(\"negative_acknowledge_delivery\",{deliveryId,leaseToken,error:one(options,\"error\")??\"negative acknowledgment\",disposition}); cliOutput(\"negative_acknowledge_delivery\",await runtime.service.nack(config.principal,String(input.deliveryId),String(input.leaseToken),String(input.error),input.disposition as \"retry\"|\"dead\")); return; }\n if (command === \"watch\") {\n const polls = one(options, \"polls\") === undefined ? Number.POSITIVE_INFINITY : integer(options, \"polls\", 0);\n const baseInterval = Math.min(integer(options, \"interval-ms\", 1_000), 60_000);\n const maxInterval = Math.max(baseInterval, Math.min(integer(options, \"max-interval-ms\", 30_000), 300_000));\n let interval = baseInterval;\n const project = one(options, \"project\");\n const checkpointPath = watchCursorPath(config.cursorPath, project);\n let current = cursor(checkpointPath);\n let seen = 0;\n for (let i = 0; i < polls; i++) {\n try {\n const page = await runtime.service.history(config.principal, {\n cursor: current,\n limit: integer(options, \"limit\", 50),\n project,\n });\n for (const message of page.messages) output(message);\n seen += page.messages.length;\n current = page.cursor;\n saveCursor(checkpointPath, current);\n interval = page.messages.length ? baseInterval : Math.min(maxInterval, Math.max(baseInterval, interval * 2));\n } catch (error) {\n const status = error instanceof BridgeHttpError || error instanceof LegacySupabaseError\n ? error.status\n : undefined;\n const retryable = status !== undefined &&\n (status === 0 || status === 408 || status === 425 || status === 429 || status >= 500);\n if (!retryable) throw error;\n interval = Math.min(maxInterval, Math.max(baseInterval, interval * 2));\n }\n if (i + 1 < polls) {\n const jittered = Math.round(interval * (0.9 + Math.random() * 0.2));\n await new Promise((resolve) => setTimeout(resolve, jittered));\n }\n }\n if (!seen && boolean(options, \"json\")) output({ status: \"ok\", messages: 0, cursor: current ?? null });\n return;\n }\n throw new Error(`Unknown command: ${raw}`);\n } finally { await runtime.close(); }\n}\n\nexport function formatCliError(error: unknown, argv = process.argv.slice(2)): string {\n const message = error instanceof Error ? error.message : String(error);\n if (argv[0] === \"archive\") {\n return JSON.stringify({\n schemaVersion: 1,\n status: \"error\",\n operation: argv[1] ?? null,\n error: {\n code: error instanceof ArchiveCommandError ? error.code : \"ARCHIVE_COMMAND_ERROR\",\n message: error instanceof ArchiveCommandError ? error.message : \"archive command failed\",\n ...(error instanceof ArchiveCommandError && error.details ? { details: error.details } : {}),\n },\n }) + \"\\n\";\n }\n if (argv[0] === \"dr\") {\n return JSON.stringify({\n schemaVersion: 1,\n status: \"error\",\n operation: argv[1] ?? null,\n error: {\n code: error instanceof NativeDrCommandError ? error.code : \"DR_COMMAND_ERROR\",\n message: error instanceof NativeDrCommandError ? error.message : \"DR command failed\",\n ...(error instanceof NativeDrCommandError && error.details ? { details: error.details } : {}),\n },\n }) + \"\\n\";\n }\n if (argv[0] === \"owner\") {\n return JSON.stringify({\n schemaVersion: 1,\n status: \"error\",\n operation: argv[1] ?? null,\n error: { code: \"OWNER_COMMAND_ERROR\", message },\n }) + \"\\n\";\n }\n return `Error: ${message}\\n`;\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) runCli().catch((error) => {\n process.stderr.write(formatCliError(error));\n process.exitCode = 1;\n});\n","import type { PgQueryable } from \"./postgres-bridge-store.js\";\n\nexport interface LegacyProjectReconciliationReport {\n mode: \"dry-run\" | \"apply\";\n workspace: \"agent-bridge\";\n messages: number;\n receipts: number;\n deliveries: 0;\n changed: number;\n}\n\nexport interface LegacyProjectReconciliationOptions {\n apply?: boolean;\n migrationChecksum: string;\n}\n\ninterface ReconciliationCounts extends Record<string, unknown> {\n messages: number;\n receipts: number;\n changed: number;\n}\n\nconst lock = `LOCK TABLE public.shared_context IN SHARE MODE;\n LOCK TABLE agent_bridge.messages IN ACCESS EXCLUSIVE MODE;\n LOCK TABLE agent_bridge.receipts IN SHARE ROW EXCLUSIVE MODE;\n LOCK TABLE agent_bridge.deliveries IN SHARE MODE`;\n\nfunction preflight(migrationChecksum: string): string {\n return `DO $reconcile$ BEGIN\n IF to_regclass('public.shared_context') IS NULL THEN\n RAISE EXCEPTION 'public.shared_context does not exist';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM agent_bridge.schema_migrations\n WHERE version=8\n AND name='message_projects'\n AND checksum='${migrationChecksum}'\n ) THEN\n RAISE EXCEPTION 'migration 008_message_projects does not match the expected migration plan';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_schema='agent_bridge'\n AND table_name='messages'\n AND column_name='project'\n AND data_type='text'\n ) THEN\n RAISE EXCEPTION 'agent_bridge.messages.project is missing or has the wrong type';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM pg_constraint\n WHERE conrelid='agent_bridge.messages'::regclass\n AND conname='messages_project_label'\n AND contype='c'\n AND convalidated\n ) THEN\n RAISE EXCEPTION 'messages_project_label constraint is missing or invalid';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM pg_index index_state\n JOIN pg_class index_class ON index_class.oid=index_state.indexrelid\n WHERE index_state.indrelid='agent_bridge.messages'::regclass\n AND index_class.relname='messages_project'\n AND index_state.indisvalid\n AND index_state.indisready\n ) THEN\n RAISE EXCEPTION 'messages_project index is missing or invalid';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM agent_bridge.workspaces WHERE id='agent-bridge'\n ) THEN\n RAISE EXCEPTION 'canonical workspace agent-bridge must be provisioned before reconciliation';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context\n WHERE project IS NOT NULL\n AND (project<>btrim(project) OR char_length(project) NOT BETWEEN 1 AND 128)\n ) THEN\n RAISE EXCEPTION 'legacy shared_context contains invalid project labels';\n END IF;\n IF EXISTS (\n SELECT agent_bridge.legacy_message_uuid(id, metadata)\n FROM public.shared_context GROUP BY 1 HAVING count(*)>1\n ) THEN\n RAISE EXCEPTION 'legacy shared_context contains duplicate message IDs';\n END IF;\n IF (\n SELECT count(*) FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n ) <> (SELECT count(*) FROM public.shared_context) THEN\n RAISE EXCEPTION 'legacy shared_context and v2 message counts do not match';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n WHERE NOT (\n (message.workspace=coalesce(context.project,'legacy') AND message.project IS NULL)\n OR (message.workspace='agent-bridge' AND message.project IS NOT DISTINCT FROM context.project)\n )\n ) THEN\n RAISE EXCEPTION 'legacy message has a conflicting workspace or project';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n WHERE message.source IS DISTINCT FROM context.source\n OR message.type IS DISTINCT FROM coalesce(\n context.metadata #>> '{message_envelope,kind}', context.category\n )\n OR message.content IS DISTINCT FROM context.content\n OR message.content_type IS DISTINCT FROM coalesce(\n context.metadata #>> '{message_envelope,payload_mime}', 'text/plain'\n )\n OR message.data IS DISTINCT FROM context.metadata #> '{message_envelope,payload}'\n OR message.targets IS DISTINCT FROM CASE\n WHEN jsonb_typeof(context.metadata #> '{message_envelope,target_agents}')='array'\n THEN context.metadata #> '{message_envelope,target_agents}'\n ELSE '[]'::jsonb\n END\n OR message.thread_id IS DISTINCT FROM context.metadata #>> '{message_envelope,thread_id}'\n OR message.reply_to_id IS DISTINCT FROM context.metadata #>> '{message_envelope,reply_to_id}'\n OR message.correlation_id IS DISTINCT FROM context.metadata #>> '{message_envelope,correlation_id}'\n OR message.causation_id IS DISTINCT FROM context.metadata #>> '{message_envelope,causation_id}'\n OR message.priority IS DISTINCT FROM CASE\n WHEN context.priority IN ('info','high','urgent') THEN context.priority ELSE 'info'\n END\n OR message.expires_at IS DISTINCT FROM agent_bridge.safe_timestamptz(\n context.metadata #>> '{message_envelope,expires_at}'\n )\n OR message.idempotency_key IS DISTINCT FROM context.metadata #>> '{message_envelope,idempotency_key}'\n OR message.atrib_receipt_id IS DISTINCT FROM coalesce(\n context.atrib_receipt_id,\n context.metadata #>> '{message_envelope,atrib_receipt_id}'\n )\n OR message.informed_by IS DISTINCT FROM context.metadata #> '{message_envelope,informed_by}'\n OR message.metadata IS DISTINCT FROM context.metadata\n OR message.created_at IS DISTINCT FROM context.created_at\n ) THEN\n RAISE EXCEPTION 'legacy message content differs from migration 006 import';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n JOIN agent_bridge.deliveries delivery\n ON delivery.workspace=message.workspace AND delivery.message_id=message.id\n ) THEN\n RAISE EXCEPTION 'legacy messages with deliveries cannot be reconciled';\n END IF;\n IF EXISTS (\n WITH candidates AS (\n SELECT message.id, message.source, message.idempotency_key\n FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n WHERE message.idempotency_key IS NOT NULL\n ), canonical AS (\n SELECT candidate.id, candidate.source, candidate.idempotency_key FROM candidates candidate\n UNION ALL\n SELECT existing.id, existing.source, existing.idempotency_key\n FROM agent_bridge.messages existing\n WHERE existing.workspace='agent-bridge'\n AND existing.idempotency_key IS NOT NULL\n AND NOT EXISTS (SELECT 1 FROM candidates candidate WHERE candidate.id=existing.id)\n )\n SELECT source, idempotency_key FROM canonical\n GROUP BY source, idempotency_key HAVING count(*)>1\n ) THEN\n RAISE EXCEPTION 'legacy idempotency key collides in canonical workspace';\n END IF;\nEND $reconcile$`;\n}\n\nconst counts = `SELECT\n count(*)::int AS messages,\n count(*) FILTER (\n WHERE message.workspace<>'agent-bridge'\n OR message.project IS DISTINCT FROM context.project\n )::int AS changed,\n coalesce(sum((\n SELECT count(*) FROM agent_bridge.receipts receipt\n WHERE receipt.workspace=message.workspace AND receipt.message_id=message.id\n )),0)::int AS receipts\nFROM public.shared_context context\nJOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)`;\n\nfunction report(\n mode: \"dry-run\" | \"apply\",\n row: ReconciliationCounts | undefined,\n): LegacyProjectReconciliationReport {\n return {\n mode,\n workspace: \"agent-bridge\",\n messages: Number(row?.messages ?? 0),\n receipts: Number(row?.receipts ?? 0),\n deliveries: 0,\n changed: Number(row?.changed ?? 0),\n };\n}\n\nexport async function reconcileLegacyProjects(\n db: PgQueryable,\n options: LegacyProjectReconciliationOptions,\n): Promise<LegacyProjectReconciliationReport> {\n if (!/^[0-9a-f]{64}$/.test(options.migrationChecksum)) {\n throw new Error(\"migrationChecksum must be 64 lowercase hexadecimal characters\");\n }\n const apply = options.apply === true;\n const verify = preflight(options.migrationChecksum);\n await db.query(\"BEGIN\");\n try {\n await db.query(\"SELECT pg_advisory_xact_lock(1646705660)\");\n await db.query(verify);\n if (apply) {\n await db.query(lock);\n await db.query(verify);\n }\n const before = await db.query<ReconciliationCounts>(counts);\n const summary = report(apply ? \"apply\" : \"dry-run\", before.rows[0]);\n if (!apply) {\n await db.query(\"ROLLBACK\");\n return summary;\n }\n\n const totals = await db.query<{ messages: number; receipts: number }>(\n `SELECT\n (SELECT count(*)::int FROM agent_bridge.messages) AS messages,\n (SELECT count(*)::int FROM agent_bridge.receipts) AS receipts`,\n );\n await db.query(`CREATE TEMP TABLE reconcile_receipts ON COMMIT DROP AS\n SELECT receipt.* FROM agent_bridge.receipts receipt\n JOIN public.shared_context context\n ON receipt.message_id=agent_bridge.legacy_message_uuid(context.id,context.metadata)\n AND receipt.workspace=coalesce(context.project,'legacy')`);\n await db.query(`DELETE FROM agent_bridge.receipts receipt\n USING reconcile_receipts saved\n WHERE receipt.workspace=saved.workspace\n AND receipt.message_id=saved.message_id\n AND receipt.principal=saved.principal`);\n await db.query(\"ALTER TABLE agent_bridge.messages DISABLE TRIGGER messages_immutable\");\n await db.query(`UPDATE agent_bridge.messages message\n SET workspace='agent-bridge', project=context.project\n FROM public.shared_context context\n WHERE message.id=agent_bridge.legacy_message_uuid(context.id,context.metadata)\n AND (message.workspace<>'agent-bridge' OR message.project IS DISTINCT FROM context.project)`);\n await db.query(\"ALTER TABLE agent_bridge.messages ENABLE TRIGGER messages_immutable\");\n await db.query(`INSERT INTO agent_bridge.receipts (workspace,message_id,principal,read_at)\n SELECT 'agent-bridge',message_id,principal,read_at FROM reconcile_receipts`);\n\n const verified = await db.query<{\n messages: number;\n receipts: number;\n mismatches: number;\n deliveries: number;\n }>(`SELECT\n (SELECT count(*)::int FROM agent_bridge.messages) AS messages,\n (SELECT count(*)::int FROM agent_bridge.receipts) AS receipts,\n (SELECT count(*)::int FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id,context.metadata)\n WHERE message.workspace<>'agent-bridge'\n OR message.project IS DISTINCT FROM context.project) AS mismatches,\n (SELECT count(*)::int FROM public.shared_context context\n JOIN agent_bridge.deliveries delivery\n ON delivery.message_id=agent_bridge.legacy_message_uuid(context.id,context.metadata)) AS deliveries`);\n const expected = totals.rows[0];\n const actual = verified.rows[0];\n if (\n !expected || !actual ||\n Number(actual.messages) !== Number(expected.messages) ||\n Number(actual.receipts) !== Number(expected.receipts) ||\n Number(actual.mismatches) !== 0 ||\n Number(actual.deliveries) !== 0\n ) {\n throw new Error(\"legacy project reconciliation verification failed\");\n }\n await db.query(\"COMMIT\");\n return summary;\n } catch (error) {\n await db.query(\"ROLLBACK\").catch(() => undefined);\n throw error;\n }\n}\n","import {\n accessSync, closeSync, constants, existsSync, fsyncSync, mkdirSync, openSync, readFileSync,\n renameSync, rmSync, statSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { delimiter, dirname, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\nimport { readClientConfigFile, resolveClientConfig } from \"./client-config.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\nimport {\n acquireEnrollmentLock,\n deleteEnrollmentFile,\n readEnrollment,\n recoverEnrollmentLock,\n releaseEnrollmentLock,\n transitionEnrollment,\n type EnrollmentLock,\n type EnrollmentFile,\n} from \"./enrollment-file.js\";\n\nexport type InstallableRuntime = \"codex\" | \"claude-code\" | \"claude-desktop\";\n\nexport interface ClientInstallResult {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n method: \"native-cli\" | \"json-config\";\n configPath?: string;\n backendConfigPath: string;\n restartRequired: boolean;\n installed?: true;\n enrollmentDeleted?: boolean;\n enrollmentFile?: string;\n enrollmentStatus?: \"consumed\" | \"consumed-file-retained\" | \"consumed-file-missing\"\n | \"consumed-deletion-durability-unknown\";\n lockReleaseStatus?: \"released\" | \"retained\" | \"durability-unknown\";\n}\n\ntype Executor = (\n command: string,\n args: string[],\n) => SpawnSyncReturns<string>;\n\nexport interface ClientBackendBinding {\n credentialId: string;\n principal: string;\n instance: string;\n}\n\nexport interface DesktopLaunchContract {\n command: string;\n args: string[];\n}\n\nfunction assertExecutable(path: string): string {\n if (!existsSync(path)) {\n throw new Error(`Claude Desktop MCP executable does not exist: ${path}`);\n }\n if (!statSync(path).isFile()) {\n throw new Error(`Claude Desktop MCP executable is not a file: ${path}`);\n }\n try {\n accessSync(path, process.platform === \"win32\" ? constants.F_OK : constants.X_OK);\n } catch {\n throw new Error(`Claude Desktop MCP executable is not executable: ${path}`);\n }\n return path;\n}\n\nfunction resolveExecutable(command: string, env: NodeJS.ProcessEnv): string {\n if (isAbsolute(command) || command.includes(\"/\") || command.includes(\"\\\\\")) {\n return assertExecutable(resolve(command));\n }\n const searchPath = env.PATH ?? process.env.PATH ?? \"\";\n const extensions = process.platform === \"win32\" && !extname(command)\n ? (env.PATHEXT ?? process.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\")\n .split(\";\")\n .filter(Boolean)\n : [\"\"];\n for (const directory of searchPath.split(delimiter).filter(Boolean)) {\n for (const extension of extensions) {\n const candidate = join(directory, command + extension);\n if (!existsSync(candidate)) continue;\n return assertExecutable(resolve(candidate));\n }\n }\n throw new Error(`Claude Desktop MCP executable was not found on PATH: ${command}`);\n}\n\nfunction defaultServerEntry(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(moduleDirectory, \"index.js\"),\n join(moduleDirectory, \"..\", \"dist\", \"index.js\"),\n ];\n const entry = candidates.find((candidate) => existsSync(candidate) && statSync(candidate).isFile());\n if (!entry) {\n throw new Error(`Claude Desktop MCP server entry does not exist: ${candidates[0]}`);\n }\n return resolve(entry);\n}\n\nexport function resolveDesktopLaunchContract(\n requestedCommand: string | undefined,\n env: NodeJS.ProcessEnv,\n): DesktopLaunchContract {\n const command = requestedCommand?.trim();\n if (command) return { command: resolveExecutable(command, env), args: [] };\n return {\n command: assertExecutable(resolve(process.execPath)),\n args: [defaultServerEntry()],\n };\n}\n\nfunction desktopConfigPath(env: NodeJS.ProcessEnv): string {\n if (process.platform === \"win32\") {\n const appData = env.APPDATA;\n if (!appData) throw new Error(\"APPDATA is required for Claude Desktop installation\");\n return join(appData, \"Claude\", \"claude_desktop_config.json\");\n }\n const home = env.HOME ?? homedir();\n return process.platform === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")\n : join(home, \".config\", \"Claude\", \"claude_desktop_config.json\");\n}\n\nfunction safeComponent(value: string): string {\n const readable = value.replace(/[^A-Za-z0-9._-]+/g, \"_\").slice(0, 48) || \"client\";\n const suffix = createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n return `${readable}-${suffix}`;\n}\n\nfunction clientBackendConfigPath(\n runtime: InstallableRuntime,\n instance: string,\n env: NodeJS.ProcessEnv,\n): string {\n const home = env.HOME ?? homedir();\n return join(\n home,\n \".agent-bridge\",\n \"clients\",\n `${runtime}-${safeComponent(instance)}.config`,\n );\n}\n\nfunction replacePrivateFile(path: string, content: string | Buffer): void {\n const directory = dirname(path);\n const privateRoot = dirname(directory);\n mkdirSync(privateRoot, { recursive: true, mode: 0o700 });\n securePrivatePath(privateRoot, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n if (existsSync(path)) verifyPrivatePathAccess(path, \"file\");\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, content);\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n securePrivatePath(temporary, \"file\");\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const descriptor = openSync(directory, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n }\n}\n\nfunction writeClientBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: {\n token?: string;\n env: NodeJS.ProcessEnv;\n binding?: ClientBackendBinding;\n destinationPath?: string;\n gatewayUrl?: string;\n workspace?: string;\n edgeDatabasePath?: string;\n },\n): string {\n const env = options.env;\n const home = env.HOME ?? homedir();\n const sharedPath = env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\");\n const shared = readClientConfigFile(sharedPath);\n const stagedGateway = options.gatewayUrl !== undefined || options.workspace !== undefined\n || options.edgeDatabasePath !== undefined;\n if (stagedGateway && (!options.gatewayUrl || !options.workspace || !options.edgeDatabasePath)) {\n throw new Error(\"staged gateway backend requires URL, workspace, and edge database path\");\n }\n const configuredProvider = stagedGateway\n ? \"gateway\"\n : env.AGENT_BRIDGE_PROVIDER?.trim() || shared.AGENT_BRIDGE_PROVIDER?.trim();\n const inferredGateway = !configuredProvider && Boolean(\n env.AGENT_BRIDGE_TOKEN?.trim() || shared.AGENT_BRIDGE_TOKEN?.trim(),\n );\n const provider = configuredProvider === \"legacy\" || configuredProvider === \"supabase\"\n ? \"legacy-supabase\"\n : configuredProvider ?? (inferredGateway ? \"gateway\" : undefined);\n const clientToken = options.token?.trim() || env.AGENT_BRIDGE_CLIENT_TOKEN?.trim();\n if (provider === \"gateway\" && !clientToken) {\n throw new Error(\n \"gateway client installation requires --token or AGENT_BRIDGE_CLIENT_TOKEN\",\n );\n }\n const resolved = resolveClientConfig(stagedGateway\n ? {\n ...env,\n AGENT_BRIDGE_CONFIG: undefined,\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_URL: options.gatewayUrl,\n AGENT_BRIDGE_WORKSPACE: options.workspace,\n AGENT_BRIDGE_EDGE_DB: options.edgeDatabasePath,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_TOKEN: clientToken,\n }\n : {\n ...env,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_TOKEN: clientToken ?? env.AGENT_BRIDGE_TOKEN,\n }, identity);\n const values: Record<string, string | undefined> = {\n AGENT_BRIDGE_PROVIDER: resolved.provider,\n AGENT_BRIDGE_WORKSPACE: resolved.principal.workspace,\n AGENT_BRIDGE_URL: resolved.url,\n AGENT_BRIDGE_TOKEN: resolved.provider === \"gateway\" ? resolved.credential : undefined,\n AGENT_BRIDGE_KEY: resolved.provider === \"legacy-supabase\" ? resolved.credential : undefined,\n AGENT_BRIDGE_DB: resolved.provider === \"local\" ? resolved.databasePath : undefined,\n AGENT_BRIDGE_EDGE_DB: resolved.provider === \"gateway\" ? resolved.edgeDatabasePath : undefined,\n AGENT_BRIDGE_CREDENTIAL_ID: options.binding?.credentialId,\n AGENT_BRIDGE_PRINCIPAL: options.binding?.principal,\n AGENT_BRIDGE_CLIENT_INSTANCE: options.binding?.instance,\n };\n for (const value of Object.values(values)) {\n if (value?.includes(\"\\n\") || value?.includes(\"\\r\")) {\n throw new Error(\"client backend config values cannot contain newlines\");\n }\n }\n const path = options.destinationPath ?? clientBackendConfigPath(runtime, instance, env);\n replacePrivateFile(\n path,\n `${Object.entries(values)\n .filter((entry): entry is [string, string] => Boolean(entry[1]))\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")}\\n`,\n );\n return path;\n}\n\nexport interface StagedGatewayBackendPaths {\n directory: string;\n backendConfigPath: string;\n edgeDatabasePath: string;\n}\n\nfunction migrationOperationId(value: string): string {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n throw new Error(\"client migration operation ID is invalid\");\n }\n return value.toLowerCase();\n}\n\nexport function stagedGatewayBackendPaths(\n operationId: string,\n env: NodeJS.ProcessEnv = process.env,\n): StagedGatewayBackendPaths {\n const home = env.HOME ?? homedir();\n const directory = join(home, \".agent-bridge\", \"client-migrations\", migrationOperationId(operationId));\n return {\n directory,\n backendConfigPath: join(directory, \"target.config\"),\n edgeDatabasePath: join(directory, \"target.edge.sqlite3\"),\n };\n}\n\n/** Write only the fixed private target backend for a persisted migration operation. */\nexport function writeStagedGatewayBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n operationId: string,\n options: {\n token: string;\n gatewayUrl: string;\n workspace: string;\n credentialId: string;\n principal: string;\n env?: NodeJS.ProcessEnv;\n },\n): StagedGatewayBackendPaths {\n const env = options.env ?? process.env;\n const paths = stagedGatewayBackendPaths(operationId, env);\n writeClientBackendConfig(runtime, identity, instance, {\n token: options.token,\n env,\n binding: {\n credentialId: options.credentialId,\n principal: options.principal,\n instance,\n },\n destinationPath: paths.backendConfigPath,\n gatewayUrl: options.gatewayUrl,\n workspace: options.workspace,\n edgeDatabasePath: paths.edgeDatabasePath,\n });\n return paths;\n}\n\nfunction writeBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: { token?: string; env: NodeJS.ProcessEnv; binding?: ClientBackendBinding },\n): string {\n return writeClientBackendConfig(runtime, identity, instance, options);\n}\n\nfunction writeJsonConfig(\n path: string,\n identity: string,\n instance: string,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n): void {\n let config: Record<string, unknown> = {};\n if (existsSync(path)) {\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\"));\n if (!parsed || Array.isArray(parsed) || typeof parsed !== \"object\") throw new Error();\n config = parsed;\n } catch {\n throw new Error(`Claude Desktop config is not valid JSON: ${path}`);\n }\n }\n const currentServers = config.mcpServers;\n const mcpServers = currentServers && !Array.isArray(currentServers) && typeof currentServers === \"object\"\n ? currentServers as Record<string, unknown>\n : {};\n const next = {\n ...config,\n mcpServers: {\n ...mcpServers,\n \"agent-bridge\": {\n command: launch.command,\n args: launch.args,\n env: {\n AGENT_BRIDGE_AGENT: identity,\n AGENT_BRIDGE_INSTANCE: instance,\n AGENT_BRIDGE_CONFIG: backendConfigPath,\n },\n },\n },\n };\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n const temporary = `${path}.${process.pid}.tmp`;\n writeFileSync(temporary, `${JSON.stringify(next, null, 2)}\\n`, { mode: 0o600 });\n renameSync(temporary, path);\n}\n\nfunction assertEnrollmentConfiguration(\n enrollment: EnrollmentFile,\n assertions: {\n runtime?: InstallableRuntime;\n identity?: string;\n instance?: string;\n token?: string;\n env: NodeJS.ProcessEnv;\n },\n): void {\n const input = enrollment.input;\n const env = assertions.env;\n const home = env.HOME ?? homedir();\n const shared = readClientConfigFile(\n env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\"),\n );\n const conflicts: Array<[string, string | undefined, string]> = [\n [\"runtime\", assertions.runtime, input.runtime],\n [\"identity\", assertions.identity?.trim() || undefined, input.principal],\n [\"instance\", assertions.instance?.trim() || undefined, input.instance],\n [\"AGENT_BRIDGE_AGENT\", env.AGENT_BRIDGE_AGENT?.trim(), input.principal],\n [\"AGENT_BRIDGE_INSTANCE\", env.AGENT_BRIDGE_INSTANCE?.trim(), input.instance],\n [\"AGENT_BRIDGE_URL\", env.AGENT_BRIDGE_URL?.trim(), input.gatewayUrl],\n [\"AGENT_BRIDGE_WORKSPACE\", env.AGENT_BRIDGE_WORKSPACE?.trim(), input.workspaceId],\n [\"shared AGENT_BRIDGE_URL\", shared.AGENT_BRIDGE_URL?.trim(), input.gatewayUrl],\n [\"shared AGENT_BRIDGE_WORKSPACE\", shared.AGENT_BRIDGE_WORKSPACE?.trim(), input.workspaceId],\n ];\n for (const [name, actual, expected] of conflicts) {\n if (actual && actual !== expected) throw new Error(name + \" conflicts with the enrollment file\");\n }\n for (const [name, provider] of [\n [\"AGENT_BRIDGE_PROVIDER\", env.AGENT_BRIDGE_PROVIDER?.trim()],\n [\"shared AGENT_BRIDGE_PROVIDER\", shared.AGENT_BRIDGE_PROVIDER?.trim()],\n ] as const) {\n if (provider && provider !== \"gateway\") throw new Error(name + \" conflicts with the enrollment file\");\n }\n if (assertions.token) throw new Error(\"--token cannot be used with --enrollment-file\");\n if (env.AGENT_BRIDGE_CLIENT_TOKEN || env.AGENT_BRIDGE_TOKEN) {\n throw new Error(\"token environment variables cannot be used with --enrollment-file\");\n }\n}\n\nfunction removeConsumedEnrollment(\n path: string,\n result: ClientInstallResult,\n lock: EnrollmentLock,\n env: NodeJS.ProcessEnv,\n): ClientInstallResult {\n try {\n const deletion = deleteEnrollmentFile(path, lock, env);\n if (deletion === \"missing\") {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: false,\n enrollmentFile: path,\n enrollmentStatus: \"consumed-file-missing\",\n };\n }\n if (deletion === \"deleted-durability-unknown\") {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: true,\n enrollmentStatus: \"consumed-deletion-durability-unknown\",\n };\n }\n return {\n ...result,\n installed: true,\n enrollmentDeleted: true,\n enrollmentStatus: \"consumed\",\n };\n } catch {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: false,\n enrollmentFile: path,\n enrollmentStatus: \"consumed-file-retained\",\n };\n }\n}\n\nfunction backendMatches(\n path: string,\n enrollment: EnrollmentFile,\n credentialId: string,\n requireToken: boolean,\n): boolean {\n if (!existsSync(path)) return false;\n const config = readClientConfigFile(path);\n return config.AGENT_BRIDGE_PROVIDER === \"gateway\"\n && config.AGENT_BRIDGE_URL === enrollment.input.gatewayUrl\n && config.AGENT_BRIDGE_WORKSPACE === enrollment.input.workspaceId\n && config.AGENT_BRIDGE_CREDENTIAL_ID === credentialId\n && config.AGENT_BRIDGE_PRINCIPAL === enrollment.input.principal\n && config.AGENT_BRIDGE_CLIENT_INSTANCE === enrollment.input.instance\n && (!requireToken || config.AGENT_BRIDGE_TOKEN === enrollment.token);\n}\n\nfunction desktopRegistrationState(\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n env: NodeJS.ProcessEnv,\n): \"absent\" | \"matching\" | \"legacy\" | \"conflict\" {\n const path = desktopConfigPath(env);\n if (!existsSync(path)) return \"absent\";\n try {\n const config = JSON.parse(readFileSync(path, \"utf8\"));\n const server = config?.mcpServers?.[\"agent-bridge\"];\n if (!server) return \"absent\";\n const environment = server?.env;\n const exactEnvironment = environment && typeof environment === \"object\"\n && !Array.isArray(environment)\n && Object.keys(environment).sort().join(\",\")\n === \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\"\n && environment.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && environment.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && environment.AGENT_BRIDGE_CONFIG === backendConfigPath;\n if (server?.command === \"agent-bridge-mcp\"\n && (server?.args === undefined || (Array.isArray(server.args) && server.args.length === 0))\n && exactEnvironment) return \"legacy\";\n return server?.command === launch.command\n && Array.isArray(server?.args)\n && server.args.length === launch.args.length\n && server.args.every((arg: unknown, index: number) => arg === launch.args[index])\n && exactEnvironment\n ? \"matching\"\n : \"conflict\";\n } catch {\n return \"conflict\";\n }\n}\n\nfunction repairLegacyDesktopRegistration(\n state: \"absent\" | \"matching\" | \"legacy\" | \"conflict\",\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n env: NodeJS.ProcessEnv,\n): \"absent\" | \"matching\" | \"conflict\" {\n if (state !== \"legacy\") return state;\n writeJsonConfig(\n desktopConfigPath(env),\n enrollment.input.principal,\n enrollment.input.instance,\n backendConfigPath,\n launch,\n );\n const repaired = desktopRegistrationState(enrollment, backendConfigPath, launch, env);\n return repaired === \"legacy\" ? \"conflict\" : repaired;\n}\n\nfunction nativeRegistrationState(\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n command: string,\n scope: \"local\" | \"user\" | \"project\",\n execute: Executor,\n): \"absent\" | \"matching\" | \"conflict\" {\n const executable = enrollment.input.runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = enrollment.input.runtime === \"codex\"\n ? [\"mcp\", \"get\", \"agent-bridge\", \"--json\"]\n : [\"mcp\", \"get\", \"agent-bridge\"];\n const result = execute(executable, args);\n if (result.error) throw new Error(enrollment.input.runtime + \" MCP inspection failed\");\n if (result.status !== 0) {\n const output = (result.stdout + \"\\n\" + result.stderr).trim();\n const notFound = enrollment.input.runtime === \"codex\"\n ? output === \"Error: No MCP server named 'agent-bridge' found.\"\n : output === 'No MCP server named \"agent-bridge\".'\n || /^No MCP server named \"agent-bridge\"\\. Configured servers: [^\\r\\n]+$/.test(output);\n if (notFound) return \"absent\";\n throw new Error(enrollment.input.runtime + \" MCP inspection failed\");\n }\n if (enrollment.input.runtime === \"codex\") {\n try {\n const server = JSON.parse(result.stdout);\n const transport = server?.transport;\n const environment = transport?.env;\n const exactEnvironment = environment && typeof environment === \"object\"\n && !Array.isArray(environment)\n && Object.keys(environment).sort().join(\",\")\n === \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\";\n return server?.name === \"agent-bridge\" && server?.enabled === true\n && transport?.type === \"stdio\" && transport?.command === command\n && Array.isArray(transport?.args) && transport.args.length === 0\n && exactEnvironment\n && transport?.env?.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && transport?.env?.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && transport?.env?.AGENT_BRIDGE_CONFIG === backendConfigPath\n ? \"matching\"\n : \"conflict\";\n } catch {\n return \"conflict\";\n }\n }\n const lines = result.stdout.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const scopeLine = {\n local: \" Scope: Local config (private to you in this project)\",\n user: \" Scope: User config (available in all your projects)\",\n project: \" Scope: Project config (shared via .mcp.json)\",\n }[scope];\n const expectedPrefix = [\n \"agent-bridge:\",\n scopeLine,\n ];\n if (lines[0] !== expectedPrefix[0] || lines[1] !== expectedPrefix[1]\n || lines[3] !== \" Type: stdio\" || lines[4] !== \" Command: \" + command\n || lines[5] !== \" Args:\" || lines[6] !== \" Environment:\") return \"conflict\";\n const environmentLines: string[] = [];\n let index = 7;\n while (index < lines.length && lines[index]?.startsWith(\" \")) {\n environmentLines.push(lines[index]!);\n index += 1;\n }\n const expectedEnvironment = [\n \" AGENT_BRIDGE_AGENT=\" + enrollment.input.principal,\n \" AGENT_BRIDGE_INSTANCE=\" + enrollment.input.instance,\n \" AGENT_BRIDGE_CONFIG=\" + backendConfigPath,\n ].sort();\n if (environmentLines.sort().join(\"\\n\") !== expectedEnvironment.join(\"\\n\")) return \"conflict\";\n while (lines[index] === \"\") index += 1;\n if (lines[index] !== \"To remove this server, run: claude mcp remove agent-bridge -s \" + scope) {\n return \"conflict\";\n }\n if (lines.slice(index + 1).some((line) => line !== \"\")) return \"conflict\";\n return \"matching\";\n}\n\nfunction enrolledInstallLocked(\n runtimeAssertion: InstallableRuntime | undefined,\n identityAssertion: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile: string;\n env?: NodeJS.ProcessEnv;\n },\n execute: Executor,\n lock: EnrollmentLock,\n): ClientInstallResult {\n const env = options.env ?? process.env;\n let enrollment = readEnrollment(options.enrollmentFile, env);\n assertEnrollmentConfiguration(enrollment, {\n runtime: runtimeAssertion,\n identity: identityAssertion,\n instance: options.instance,\n token: options.token,\n env,\n });\n const runtime = enrollment.input.runtime;\n const identity = enrollment.input.principal;\n const expectedPath = clientBackendConfigPath(runtime, enrollment.input.instance, env);\n const command = options.command?.trim() || \"agent-bridge-mcp\";\n const desktopLaunch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : undefined;\n const scope = options.scope ?? \"user\";\n const baseResult: ClientInstallResult = {\n runtime,\n identity,\n instance: enrollment.input.instance,\n method: runtime === \"claude-desktop\" ? \"json-config\" : \"native-cli\",\n configPath: runtime === \"claude-desktop\" ? desktopConfigPath(env) : undefined,\n backendConfigPath: expectedPath,\n restartRequired: true,\n };\n if (enrollment.state === \"consumed\") {\n if (!enrollment.result\n || !backendMatches(expectedPath, enrollment, enrollment.result.credentialId, false)) {\n throw new Error(\"consumed enrollment no longer matches its client backend\");\n }\n const inspected = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n const registration = runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (registration !== \"matching\") {\n throw new Error(\"consumed enrollment no longer matches its MCP registration\");\n }\n return removeConsumedEnrollment(options.enrollmentFile, baseResult, lock, env);\n }\n if (enrollment.state === \"pending\") {\n throw new Error(\"enrollment is pending; resume the owner command first\");\n }\n const recovering = enrollment.state === \"consuming\";\n if (!recovering && enrollment.operation === \"provision\" && existsSync(expectedPath)) {\n throw new Error(\"provision enrollment would replace an existing client backend file\");\n }\n if (!recovering && enrollment.operation === \"provision\") {\n const registration = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n if (registration !== \"absent\") {\n throw new Error(\"provision enrollment would replace an existing MCP registration\");\n }\n }\n if (enrollment.state === \"ready\") {\n enrollment = transitionEnrollment(options.enrollmentFile, enrollment, \"consuming\", {}, env, lock);\n }\n if (enrollment.state !== \"consuming\" || !enrollment.token) {\n throw new Error(\"enrollment is not ready for installation\");\n }\n const derivedEnv: NodeJS.ProcessEnv = {\n ...env,\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_URL: enrollment.input.gatewayUrl,\n AGENT_BRIDGE_WORKSPACE: enrollment.input.workspaceId,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_CLIENT_TOKEN: undefined,\n };\n let result: ClientInstallResult;\n let sideEffectsCompleted = false;\n try {\n if (enrollment.operation === \"rotate\") {\n if (!enrollment.input.credentialId || !enrollment.result) {\n throw new Error(\"rotation enrollment lacks credential lineage\");\n }\n const predecessorMatches = backendMatches(\n expectedPath, enrollment, enrollment.input.credentialId, false,\n );\n const successorMatches = recovering && backendMatches(\n expectedPath, enrollment, enrollment.result.credentialId, true,\n );\n if (!predecessorMatches && !successorMatches) {\n throw new Error(\"rotation requires an exactly bound predecessor or successor backend\");\n }\n const inspected = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n const registration = runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (registration !== \"matching\") {\n throw new Error(\"rotation requires the exact existing MCP registration\");\n }\n if (predecessorMatches) {\n const previous = readFileSync(expectedPath);\n try {\n writeBackendConfig(runtime, identity, enrollment.input.instance, {\n token: enrollment.token,\n env: derivedEnv,\n binding: {\n credentialId: enrollment.result.credentialId,\n principal: identity,\n instance: enrollment.input.instance,\n },\n });\n } catch (error) {\n replacePrivateFile(expectedPath, previous);\n throw error;\n }\n }\n result = baseResult;\n sideEffectsCompleted = true;\n } else {\n if (recovering && existsSync(expectedPath) && !backendMatches(\n expectedPath, enrollment, enrollment.result!.credentialId, true,\n )) {\n throw new Error(\"consuming enrollment conflicts with its client backend file\");\n }\n const inspected = recovering\n ? runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute)\n : \"absent\";\n const registration = recovering && runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (recovering && registration === \"conflict\") {\n throw new Error(\"consuming enrollment conflicts with the registered MCP server\");\n }\n if (recovering && backendMatches(\n expectedPath, enrollment, enrollment.result!.credentialId, true,\n ) && registration === \"matching\") {\n result = baseResult;\n } else {\n result = installClient(runtime, identity, {\n command: runtime === \"claude-desktop\" ? options.command : command,\n scope: options.scope,\n instance: enrollment.input.instance,\n token: enrollment.token,\n backendBinding: {\n credentialId: enrollment.result!.credentialId,\n principal: identity,\n instance: enrollment.input.instance,\n },\n env: derivedEnv,\n }, execute);\n sideEffectsCompleted = true;\n const verified = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n if (verified !== \"matching\") throw new Error(\"MCP registration verification failed\");\n }\n }\n } catch (error) {\n if (!recovering && !sideEffectsCompleted) {\n transitionEnrollment(options.enrollmentFile, enrollment, \"ready\", {}, env, lock);\n }\n throw error;\n }\n enrollment = transitionEnrollment(\n options.enrollmentFile,\n enrollment,\n \"consumed\",\n { token: null },\n env,\n lock,\n );\n return removeConsumedEnrollment(options.enrollmentFile, result, lock, env);\n}\n\nfunction enrolledInstall(\n runtime: InstallableRuntime | undefined,\n identity: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n },\n execute: Executor,\n): ClientInstallResult {\n const env = options.env ?? process.env;\n if (options.recoverLock) recoverEnrollmentLock(options.enrollmentFile, env);\n const lock = acquireEnrollmentLock(options.enrollmentFile, env);\n let result: ClientInstallResult;\n try {\n result = enrolledInstallLocked(runtime, identity, options, execute, lock);\n } catch (error) {\n if (!lock.released) {\n try { releaseEnrollmentLock(lock); } catch {}\n }\n throw error;\n }\n let lockReleaseStatus: NonNullable<ClientInstallResult[\"lockReleaseStatus\"]>;\n try {\n const release = releaseEnrollmentLock(lock);\n lockReleaseStatus = release === \"released\" ? \"released\" : \"durability-unknown\";\n } catch {\n lockReleaseStatus = existsSync(lock.lockPath) ? \"retained\" : \"durability-unknown\";\n }\n return { ...result, lockReleaseStatus };\n}\n\nexport function installClient(\n runtime: InstallableRuntime | undefined,\n identity: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile?: string;\n recoverLock?: boolean;\n backendBinding?: ClientBackendBinding;\n env?: NodeJS.ProcessEnv;\n } = {},\n execute: Executor = (command, args) => spawnSync(command, args, { encoding: \"utf8\" }),\n): ClientInstallResult {\n if (options.enrollmentFile) {\n return enrolledInstall(runtime, identity, {\n ...options,\n enrollmentFile: options.enrollmentFile,\n }, execute);\n }\n if (!runtime) throw new Error(\"install runtime is required\");\n const normalizedIdentity = identity.trim();\n if (!normalizedIdentity || normalizedIdentity.length > 128) throw new Error(\"--identity is required\");\n const instance = options.instance?.trim() || `${runtime}-${randomUUID()}`;\n if (instance.length > 128) throw new Error(\"--instance exceeds 128 characters\");\n if (options.scope && ![\"local\", \"user\", \"project\"].includes(options.scope)) {\n throw new Error(\"scope must be local, user, or project\");\n }\n const command = options.command?.trim() || \"agent-bridge-mcp\";\n const env = options.env ?? process.env;\n const desktopLaunch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : undefined;\n const expectedPath = clientBackendConfigPath(runtime, instance, env);\n const previous = existsSync(expectedPath) ? readFileSync(expectedPath) : undefined;\n try {\n const backendConfigPath = writeBackendConfig(runtime, normalizedIdentity, instance, {\n token: options.token,\n env,\n binding: options.backendBinding,\n });\n if (runtime === \"claude-desktop\") {\n const path = desktopConfigPath(env);\n writeJsonConfig(path, normalizedIdentity, instance, backendConfigPath, desktopLaunch!);\n return { runtime, identity: normalizedIdentity, instance, method: \"json-config\", configPath: path, backendConfigPath, restartRequired: true };\n }\n const executable = runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = runtime === \"codex\"\n ? [\n \"mcp\", \"add\", \"agent-bridge\",\n \"--env\", `AGENT_BRIDGE_AGENT=${normalizedIdentity}`,\n \"--env\", `AGENT_BRIDGE_INSTANCE=${instance}`,\n \"--env\", `AGENT_BRIDGE_CONFIG=${backendConfigPath}`,\n \"--\", command,\n ]\n : [\n \"mcp\", \"add\", \"--scope\", options.scope ?? \"user\", \"agent-bridge\",\n \"-e\", `AGENT_BRIDGE_AGENT=${normalizedIdentity}`,\n \"-e\", `AGENT_BRIDGE_INSTANCE=${instance}`,\n \"-e\", `AGENT_BRIDGE_CONFIG=${backendConfigPath}`,\n \"--\", command,\n ];\n const result = execute(executable, args);\n if (result.error || result.status !== 0) {\n const detail = result.stderr?.trim() || result.error?.message || `exit ${result.status}`;\n throw new Error(`${runtime} MCP installation failed: ${detail}`);\n }\n return { runtime, identity: normalizedIdentity, instance, method: \"native-cli\", backendConfigPath, restartRequired: true };\n } catch (error) {\n try {\n if (previous) replacePrivateFile(expectedPath, previous);\n else rmSync(expectedPath, { force: true });\n } catch (rollbackError) {\n const detail = rollbackError instanceof Error ? rollbackError.message : String(rollbackError);\n throw new Error(`${error instanceof Error ? error.message : String(error)}; client config rollback failed: ${detail}`);\n }\n throw error;\n }\n}\n","import {\n closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync,\n mkdirSync, openSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir, hostname } from \"node:os\";\nimport { dirname, join, parse, relative, resolve, sep } from \"node:path\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nexport const ENROLLMENT_SCHEMA = \"agent-bridge.enrollment\";\nexport const ENROLLMENT_VERSION = 1;\nexport type EnrollmentState = \"pending\" | \"ready\" | \"consuming\" | \"consumed\";\nexport type EnrollmentOperation = \"provision\" | \"rotate\";\n\nexport interface EnrollmentInput {\n gatewayUrl: string;\n workspaceId: string;\n principal: string;\n runtime: \"codex\" | \"claude-code\" | \"claude-desktop\";\n instance: string;\n credentialId: string | null;\n workspaceName: string | null;\n displayName: string | null;\n runtimeType: string;\n label: string | null;\n scopeSetName: string;\n expiresAt: string | null;\n graceUntil: string | null;\n invalidateImmediately: boolean;\n}\n\nexport interface EnrollmentResult {\n workspaceId: string;\n principal: string;\n agentId: string | null;\n credentialId: string;\n replayed: boolean;\n}\n\nexport interface EnrollmentFile {\n schema: typeof ENROLLMENT_SCHEMA;\n version: typeof ENROLLMENT_VERSION;\n provider: \"gateway\";\n revision: number;\n state: EnrollmentState;\n operation: EnrollmentOperation;\n requestId: string;\n createdAt: string;\n completedAt: string | null;\n input: EnrollmentInput;\n token: string | null;\n result: EnrollmentResult | null;\n}\n\nexport interface EnrollmentLock {\n readonly enrollmentPath: string;\n readonly lockPath: string;\n readonly descriptor: number;\n readonly device: number;\n readonly inode: number;\n readonly nonce: string;\n released: boolean;\n}\n\nexport interface EnrollmentDurabilityDependencies {\n syncDirectory(path: string): void;\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(label + \" must be an object\");\n }\n return value as Record<string, unknown>;\n}\n\nfunction text(value: unknown, label: string, maximum = 128): string {\n if (typeof value !== \"string\" || !value || value !== value.trim()\n || value.length > maximum || /[\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(label + \" is invalid\");\n }\n return value;\n}\n\nfunction nullableText(value: unknown, label: string): string | null {\n return value === null ? null : text(value, label);\n}\n\nconst RFC3339 = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?(Z|([+-])(\\d{2}):(\\d{2}))$/;\n\nexport function canonicalTimestamp(value: unknown, label: string): string | null {\n if (value === null) return null;\n const selected = text(value, label, 64);\n const match = RFC3339.exec(selected);\n if (!match) throw new Error(label + \" must be RFC3339 with a timezone\");\n const [, yearText, monthText, dayText, hourText, minuteText, secondText,\n fraction = \"\", zone, sign, offsetHourText = \"0\", offsetMinuteText = \"0\"] = match;\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const hour = Number(hourText);\n const minute = Number(minuteText);\n const second = Number(secondText);\n const millisecond = Number(fraction.padEnd(3, \"0\"));\n const offsetHour = Number(offsetHourText);\n const offsetMinute = Number(offsetMinuteText);\n if (hour > 23 || minute > 59 || second > 59 || offsetHour > 23 || offsetMinute > 59) {\n throw new Error(label + \" is invalid\");\n }\n const wall = new Date(0);\n wall.setUTCFullYear(year, month - 1, day);\n wall.setUTCHours(hour, minute, second, millisecond);\n if (wall.getUTCFullYear() !== year || wall.getUTCMonth() !== month - 1\n || wall.getUTCDate() !== day || wall.getUTCHours() !== hour\n || wall.getUTCMinutes() !== minute || wall.getUTCSeconds() !== second\n || wall.getUTCMilliseconds() !== millisecond) {\n throw new Error(label + \" is invalid\");\n }\n const direction = zone === \"Z\" ? 0 : sign === \"+\" ? 1 : -1;\n const instant = new Date(wall.getTime() - direction * (offsetHour * 60 + offsetMinute) * 60_000);\n if (!Number.isFinite(instant.getTime())) throw new Error(label + \" is invalid\");\n return instant.toISOString();\n}\n\nexport function canonicalGatewayUrl(value: unknown, label: string): string {\n const selected = text(value, label, 2048);\n let parsed: URL;\n try { parsed = new URL(selected); } catch { throw new Error(label + \" is invalid\"); }\n if (parsed.username || parsed.password) throw new Error(label + \" cannot contain credentials\");\n if (parsed.hash) throw new Error(label + \" cannot contain a fragment\");\n const loopback = parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\"\n || parsed.hostname === \"[::1]\";\n if (parsed.protocol !== \"https:\" && !(parsed.protocol === \"http:\" && loopback)) {\n throw new Error(label + \" must use HTTPS, or HTTP on an explicit loopback host\");\n }\n return parsed.toString();\n}\n\nfunction uuid(value: unknown, label: string): string {\n const selected = text(value, label, 36);\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(selected)) {\n throw new Error(label + \" is invalid\");\n }\n return selected;\n}\n\nfunction runtime(value: unknown): EnrollmentInput[\"runtime\"] {\n if (value !== \"codex\" && value !== \"claude-code\" && value !== \"claude-desktop\") {\n throw new Error(\"enrollment runtime is invalid\");\n }\n return value;\n}\n\nfunction validateInput(value: unknown, operation: EnrollmentOperation): EnrollmentInput {\n const input = object(value, \"enrollment input\");\n const gatewayUrl = canonicalGatewayUrl(input.gatewayUrl, \"enrollment gatewayUrl\");\n const credentialId = input.credentialId === null ? null : uuid(input.credentialId, \"enrollment credentialId\");\n const workspaceName = nullableText(input.workspaceName, \"enrollment workspaceName\");\n const graceUntil = canonicalTimestamp(input.graceUntil, \"enrollment graceUntil\");\n const invalidateImmediately = input.invalidateImmediately;\n if (typeof invalidateImmediately !== \"boolean\") throw new Error(\"enrollment invalidateImmediately is invalid\");\n if (operation === \"provision\" && (credentialId !== null || workspaceName === null || graceUntil !== null || invalidateImmediately)) {\n throw new Error(\"provision enrollment input is invalid\");\n }\n if (operation === \"rotate\" && (credentialId === null || workspaceName !== null\n || (graceUntil === null) === !invalidateImmediately)) {\n throw new Error(\"rotation must choose graceUntil or invalidateImmediately\");\n }\n return {\n gatewayUrl,\n workspaceId: text(input.workspaceId, \"enrollment workspaceId\"),\n principal: text(input.principal, \"enrollment principal\"),\n runtime: runtime(input.runtime),\n instance: text(input.instance, \"enrollment instance\"),\n credentialId,\n workspaceName,\n displayName: nullableText(input.displayName, \"enrollment displayName\"),\n runtimeType: text(input.runtimeType, \"enrollment runtimeType\"),\n label: nullableText(input.label, \"enrollment label\"),\n scopeSetName: text(input.scopeSetName, \"enrollment scopeSetName\"),\n expiresAt: canonicalTimestamp(input.expiresAt, \"enrollment expiresAt\"),\n graceUntil,\n invalidateImmediately,\n };\n}\n\nfunction validateResult(value: unknown, input: EnrollmentInput): EnrollmentResult | null {\n if (value === null) return null;\n const result = object(value, \"enrollment result\");\n if (typeof result.replayed !== \"boolean\") throw new Error(\"enrollment result replayed is invalid\");\n const validated = {\n workspaceId: text(result.workspaceId, \"enrollment result workspaceId\"),\n principal: text(result.principal, \"enrollment result principal\"),\n agentId: result.agentId === null ? null : uuid(result.agentId, \"enrollment result agentId\"),\n credentialId: uuid(result.credentialId, \"enrollment result credentialId\"),\n replayed: result.replayed,\n };\n if (validated.workspaceId !== input.workspaceId || validated.principal !== input.principal) {\n throw new Error(\"enrollment result does not match its workspace and principal\");\n }\n return validated;\n}\n\nexport function enrollmentTokenHash(enrollment: Pick<EnrollmentFile, \"token\">): string {\n if (!enrollment.token) throw new Error(\"enrollment no longer contains a credential\");\n return createHash(\"sha256\").update(enrollment.token, \"utf8\").digest(\"hex\");\n}\n\nexport function validateEnrollmentFile(value: unknown): EnrollmentFile {\n const file = object(value, \"enrollment file\");\n if (file.schema !== ENROLLMENT_SCHEMA || file.version !== ENROLLMENT_VERSION) {\n throw new Error(\"unsupported enrollment schema or version\");\n }\n if (file.provider !== \"gateway\") throw new Error(\"enrollment provider must be gateway\");\n if (![\"pending\", \"ready\", \"consuming\", \"consumed\"].includes(String(file.state))) {\n throw new Error(\"enrollment state is invalid\");\n }\n if (file.operation !== \"provision\" && file.operation !== \"rotate\") {\n throw new Error(\"enrollment operation is invalid\");\n }\n const state = file.state as EnrollmentState;\n if (!Number.isSafeInteger(file.revision) || Number(file.revision) < 0) {\n throw new Error(\"enrollment revision is invalid\");\n }\n const input = validateInput(file.input, file.operation);\n const token = file.token === null ? null : text(file.token, \"enrollment token\", 4096);\n const result = validateResult(file.result, input);\n const completedAt = canonicalTimestamp(file.completedAt, \"enrollment completedAt\");\n if (state === \"pending\" && (result !== null || completedAt !== null || token === null)) {\n throw new Error(\"pending enrollment state is invalid\");\n }\n if ((state === \"ready\" || state === \"consuming\") && (result === null || completedAt === null || token === null)) {\n throw new Error(state + \" enrollment state is invalid\");\n }\n if (state === \"consumed\" && (result === null || completedAt === null || token !== null)) {\n throw new Error(\"consumed enrollment state is invalid\");\n }\n return {\n schema: ENROLLMENT_SCHEMA,\n version: ENROLLMENT_VERSION,\n provider: \"gateway\",\n revision: Number(file.revision),\n state,\n operation: file.operation,\n requestId: uuid(file.requestId, \"enrollment requestId\"),\n createdAt: (() => {\n const createdAt = canonicalTimestamp(file.createdAt, \"enrollment createdAt\");\n if (createdAt === null) throw new Error(\"enrollment createdAt is invalid\");\n return createdAt;\n })(),\n completedAt,\n input,\n token,\n result,\n };\n}\n\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\nconst durabilityDefaults: EnrollmentDurabilityDependencies = { syncDirectory };\n\nfunction prepareDirectory(path: string): void {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n securePrivatePath(path, \"directory\");\n}\n\nexport function enrollmentRoot(env: NodeJS.ProcessEnv = process.env): string {\n if (env.AGENT_BRIDGE_ENROLLMENT_DIR) return resolve(env.AGENT_BRIDGE_ENROLLMENT_DIR);\n const home = realpathSync(env.HOME ?? homedir());\n return join(home, \".agent-bridge\", \"enrollments\");\n}\n\nfunction rejectSymlinkComponents(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const component of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, component);\n if (!existsSync(current)) break;\n if (lstatSync(current).isSymbolicLink()) {\n throw new Error(\"enrollment paths cannot contain symbolic links\");\n }\n }\n}\n\ninterface DirectoryIdentity { device: number; inode: number }\n\nfunction verifyPrivateDirectory(path: string): DirectoryIdentity {\n rejectSymlinkComponents(path);\n const details = lstatSync(path);\n if (!details.isDirectory() || details.isSymbolicLink()) {\n throw new Error(\"enrollment directory must be a real directory\");\n }\n verifyPrivatePathAccess(path, \"directory\");\n return { device: details.dev, inode: details.ino };\n}\n\nfunction sameDirectory(path: string, expected: DirectoryIdentity): void {\n const actual = verifyPrivateDirectory(path);\n if (actual.device !== expected.device || actual.inode !== expected.inode) {\n throw new Error(\"enrollment directory changed during the operation\");\n }\n}\n\nfunction verifyPrivatePath(root: string, directory: string): void {\n verifyPrivateDirectory(root);\n const inside = relative(root, directory);\n if (!inside) return;\n let current = root;\n for (const component of inside.split(sep).filter(Boolean)) {\n current = join(current, component);\n verifyPrivateDirectory(current);\n }\n}\n\nfunction prepareEnrollmentRoot(env: NodeJS.ProcessEnv): string {\n const root = enrollmentRoot(env);\n rejectSymlinkComponents(dirname(root));\n prepareDirectory(root);\n verifyPrivateDirectory(root);\n return root;\n}\n\nexport function assertEnrollmentPath(path: string, env: NodeJS.ProcessEnv = process.env): string {\n const root = enrollmentRoot(env);\n const selected = resolve(path);\n const inside = relative(root, selected);\n if (!inside || inside.startsWith(\"..\" + sep) || inside === \"..\" || inside.includes(sep + \"..\" + sep)) {\n throw new Error(\"enrollment file must be inside the configured enrollment directory\");\n }\n rejectSymlinkComponents(root);\n rejectSymlinkComponents(dirname(selected));\n if (existsSync(root) && existsSync(dirname(selected))) {\n verifyPrivatePath(root, dirname(selected));\n }\n return selected;\n}\n\nfunction serialized(value: EnrollmentFile): string {\n return JSON.stringify(validateEnrollmentFile(value), null, 2) + \"\\n\";\n}\n\nexport function defaultEnrollmentPath(requestId: string, env: NodeJS.ProcessEnv = process.env): string {\n return join(enrollmentRoot(env), requestId + \".json\");\n}\n\nexport function createPendingEnrollment(\n path: string,\n enrollment: EnrollmentFile,\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (enrollment.state !== \"pending\") throw new Error(\"new enrollment must be pending\");\n if (enrollment.revision !== 0) throw new Error(\"new enrollment revision must be zero\");\n path = assertEnrollmentPath(path, env);\n prepareEnrollmentRoot(env);\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n prepareDirectory(directory);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const descriptor = openSync(path, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, serialized(enrollment), \"utf8\");\n fsyncSync(descriptor);\n closeSync(descriptor);\n securePrivatePath(path, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(path, { force: true });\n throw error;\n }\n}\n\nfunction readEnrollmentUnlocked(path: string, env: NodeJS.ProcessEnv): EnrollmentFile {\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile()) throw new Error(\"enrollment path must be a regular file, not a symbolic link\");\n if (process.platform !== \"win32\") {\n if ((details.mode & 0o077) !== 0) throw new Error(\"enrollment file permissions must be 0600\");\n if (typeof process.getuid === \"function\" && details.uid !== process.getuid()) {\n throw new Error(\"enrollment file must be owned by the current user\");\n }\n }\n let parsed: unknown;\n try { parsed = JSON.parse(readFileSync(descriptor, \"utf8\")); }\n catch { throw new Error(\"enrollment file is not valid JSON\"); }\n sameDirectory(directory, directoryIdentity);\n return validateEnrollmentFile(parsed);\n } finally {\n closeSync(descriptor);\n }\n}\n\nexport function readEnrollment(path: string, env: NodeJS.ProcessEnv = process.env): EnrollmentFile {\n return readEnrollmentUnlocked(path, env);\n}\n\nfunction assertActiveLock(lock: EnrollmentLock, enrollmentPath: string): void {\n if (lock.released || lock.enrollmentPath !== enrollmentPath) {\n throw new Error(\"enrollment lock does not cover this file\");\n }\n const open = fstatSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (open.dev !== lock.device || open.ino !== lock.inode\n || current.dev !== lock.device || current.ino !== lock.inode || current.isSymbolicLink()) {\n throw new Error(\"enrollment lock changed during the operation\");\n }\n}\n\nexport function acquireEnrollmentLock(\n path: string,\n env: NodeJS.ProcessEnv = process.env,\n): EnrollmentLock {\n prepareEnrollmentRoot(env);\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n prepareDirectory(directory);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const lockPath = path + \".lock\";\n const descriptor = openSync(lockPath, \"wx\", 0o600);\n const nonce = randomUUID();\n try {\n writeFileSync(descriptor, JSON.stringify({\n schema: \"agent-bridge.enrollment-lock\",\n version: 1,\n enrollmentPath: path,\n pid: process.pid,\n host: hostname(),\n createdAt: new Date().toISOString(),\n nonce,\n }) + \"\\n\", \"utf8\");\n fsyncSync(descriptor);\n securePrivatePath(lockPath, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n const details = fstatSync(descriptor);\n return {\n enrollmentPath: path,\n lockPath,\n descriptor,\n device: details.dev,\n inode: details.ino,\n nonce,\n released: false,\n };\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(lockPath, { force: true });\n throw error;\n }\n}\n\nexport function releaseEnrollmentLock(\n lock: EnrollmentLock,\n dependencies: EnrollmentDurabilityDependencies = durabilityDefaults,\n): \"released\" | \"durability-unknown\" {\n assertActiveLock(lock, lock.enrollmentPath);\n const directory = dirname(lock.lockPath);\n const directoryIdentity = verifyPrivateDirectory(directory);\n closeSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (current.dev !== lock.device || current.ino !== lock.inode) {\n throw new Error(\"enrollment lock changed before release\");\n }\n rmSync(lock.lockPath);\n lock.released = true;\n try {\n sameDirectory(directory, directoryIdentity);\n dependencies.syncDirectory(directory);\n } catch {\n return \"durability-unknown\";\n }\n return \"released\";\n}\n\nexport function recoverEnrollmentLock(\n path: string,\n env: NodeJS.ProcessEnv = process.env,\n now = Date.now(),\n): void {\n path = assertEnrollmentPath(path, env);\n const lockPath = path + \".lock\";\n verifyPrivatePathAccess(lockPath, \"file\");\n const descriptor = openSync(lockPath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile()) throw new Error(\"enrollment lock is not a regular file\");\n if (process.platform !== \"win32\") {\n if ((details.mode & 0o077) !== 0) throw new Error(\"enrollment lock permissions must be 0600\");\n if (typeof process.getuid === \"function\" && details.uid !== process.getuid()) {\n throw new Error(\"enrollment lock must be owned by the current user\");\n }\n }\n let metadata: Record<string, unknown>;\n try { metadata = object(JSON.parse(readFileSync(descriptor, \"utf8\")), \"enrollment lock\"); }\n catch { throw new Error(\"enrollment lock metadata is invalid\"); }\n if (metadata.schema !== \"agent-bridge.enrollment-lock\" || metadata.version !== 1\n || metadata.enrollmentPath !== path || metadata.host !== hostname()\n || typeof metadata.pid !== \"number\" || !Number.isSafeInteger(metadata.pid)\n || typeof metadata.createdAt !== \"string\" || !RFC3339.test(metadata.createdAt)) {\n throw new Error(\"enrollment lock metadata is invalid\");\n }\n const age = now - new Date(metadata.createdAt).getTime();\n if (age < 60_000) throw new Error(\"enrollment lock is too recent to recover\");\n try {\n process.kill(metadata.pid, 0);\n throw new Error(\"enrollment lock owner is still running\");\n } catch (error) {\n if (error instanceof Error && error.message === \"enrollment lock owner is still running\") throw error;\n if (!error || typeof error !== \"object\" || !(\"code\" in error) || error.code !== \"ESRCH\") {\n throw new Error(\"cannot prove that the enrollment lock owner has stopped\");\n }\n }\n const current = lstatSync(lockPath);\n if (current.dev !== details.dev || current.ino !== details.ino) {\n throw new Error(\"enrollment lock changed during recovery\");\n }\n } finally {\n closeSync(descriptor);\n }\n rmSync(lockPath);\n syncDirectory(dirname(lockPath));\n}\n\nexport function deleteEnrollmentFile(\n path: string,\n lock: EnrollmentLock,\n env: NodeJS.ProcessEnv = process.env,\n dependencies: EnrollmentDurabilityDependencies = durabilityDefaults,\n): \"deleted-and-durable\" | \"deleted-durability-unknown\" | \"missing\" {\n path = assertEnrollmentPath(path, env);\n assertActiveLock(lock, path);\n let current: EnrollmentFile;\n try {\n current = readEnrollmentUnlocked(path, env);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return \"missing\";\n }\n throw error;\n }\n if (current.state !== \"consumed\" || current.token !== null) {\n throw new Error(\"only a consumed enrollment can be deleted\");\n }\n const directory = dirname(path);\n const directoryIdentity = verifyPrivateDirectory(directory);\n try {\n rmSync(path);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return \"missing\";\n }\n throw error;\n }\n try {\n sameDirectory(directory, directoryIdentity);\n dependencies.syncDirectory(directory);\n } catch {\n return \"deleted-durability-unknown\";\n }\n return \"deleted-and-durable\";\n}\n\nexport function transitionEnrollment(\n path: string,\n current: EnrollmentFile,\n state: EnrollmentState,\n changes: Partial<Pick<EnrollmentFile, \"completedAt\" | \"result\" | \"token\">> = {},\n env: NodeJS.ProcessEnv = process.env,\n heldLock?: EnrollmentLock,\n): EnrollmentFile {\n path = assertEnrollmentPath(path, env);\n const lock = heldLock ?? acquireEnrollmentLock(path, env);\n try {\n assertActiveLock(lock, path);\n const onDisk = readEnrollmentUnlocked(path, env);\n if (onDisk.revision !== current.revision || onDisk.state !== current.state\n || onDisk.requestId !== current.requestId || onDisk.operation !== current.operation\n || onDisk.token !== current.token) {\n throw new Error(\"stale enrollment transition refused\");\n }\n const transition = current.state + \"->\" + state;\n if (!new Set([\n \"pending->ready\",\n \"ready->consuming\",\n \"consuming->ready\",\n \"consuming->consumed\",\n ]).has(transition)) {\n throw new Error(\"illegal enrollment state transition: \" + transition);\n }\n const next = validateEnrollmentFile({\n ...onDisk,\n ...changes,\n state,\n revision: onDisk.revision + 1,\n });\n const directory = dirname(path);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const temporary = path + \".\" + process.pid + \".\" + randomUUID() + \".tmp\";\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, serialized(next), \"utf8\");\n fsyncSync(descriptor);\n closeSync(descriptor);\n securePrivatePath(temporary, \"file\");\n sameDirectory(directory, directoryIdentity);\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n return next;\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(temporary, { force: true });\n throw error;\n }\n } finally {\n if (!heldLock) releaseEnrollmentLock(lock);\n }\n}\n","import {\n accessSync, closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync,\n readFileSync, renameSync, statSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, parse, resolve, sep } from \"node:path\";\nimport { spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { verifyPrivatePathAccess, securePrivatePath } from \"./private-path.js\";\nimport {\n resolveDesktopLaunchContract,\n type InstallableRuntime,\n} from \"./client-installer.js\";\n\nexport type ClientLifecycleState = \"absent\" | \"unmanaged\" | \"managed\" | \"drifted\";\n\nexport interface ClientCommandContext { cwd?: string; env?: NodeJS.ProcessEnv }\nexport type ClientLifecycleExecutor = (\n command: string, args: string[], context?: ClientCommandContext,\n) => SpawnSyncReturns<string>;\ntype Executor = ClientLifecycleExecutor;\n\nconst defaultExecutor: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n});\n\nexport interface ClientLifecycleOptions {\n instance: string;\n backendConfigPath: string;\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n configPath?: string;\n apply?: boolean;\n env?: NodeJS.ProcessEnv;\n}\n\nexport interface ClientInspection {\n schemaVersion: 1;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n registrationLocator: ClientRegistrationLocator;\n metadataPath: string;\n state: ClientLifecycleState;\n managed: boolean;\n exact: boolean;\n reason: string;\n}\n\nexport interface ClientAdoptionPlan {\n schemaVersion: 1;\n action: \"adopt\" | \"none\";\n applied: boolean;\n before: ClientLifecycleState;\n after: ClientLifecycleState;\n metadataPath: string;\n inspection: ClientInspection;\n}\n\nexport interface ManagedClientMetadata {\n schema: \"agent-bridge.client-management\";\n version: 1;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: { command: string; args: string[]; scope: \"local\" | \"user\" | \"project\" | null };\n locator: ClientRegistrationLocator;\n}\n\nexport type ClientRegistrationLocator =\n | { kind: \"codex-profile\"; configPath: string }\n | { kind: \"claude-code-scope\"; scope: \"local\" | \"user\" | \"project\"; contextPath: string | null }\n | { kind: \"claude-desktop-config\"; configPath: string };\n\nfunction safeComponent(value: string): string {\n const readable = value.replace(/[^A-Za-z0-9._-]+/g, \"_\").slice(0, 48) || \"client\";\n const suffix = createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n return `${readable}-${suffix}`;\n}\n\nexport function managedClientMetadataPath(\n runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env,\n): string {\n return join(env.HOME ?? homedir(), \".agent-bridge\", \"clients\", `${runtime}-${safeComponent(instance)}.managed.json`);\n}\n\nfunction desktopConfigPath(env: NodeJS.ProcessEnv): string {\n if (process.platform === \"win32\") {\n if (!env.APPDATA) throw new Error(\"APPDATA is required for Claude Desktop inspection\");\n return join(env.APPDATA, \"Claude\", \"claude_desktop_config.json\");\n }\n const home = env.HOME ?? homedir();\n return process.platform === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")\n : join(home, \".config\", \"Claude\", \"claude_desktop_config.json\");\n}\n\nfunction inspectedDesktopConfigPath(options: ClientLifecycleOptions, env: NodeJS.ProcessEnv): string {\n return resolve(options.configPath?.trim() || desktopConfigPath(env));\n}\n\nfunction clientRegistrationLocator(\n runtime: InstallableRuntime,\n scope: \"local\" | \"user\" | \"project\" | null,\n options: ClientLifecycleOptions,\n env: NodeJS.ProcessEnv,\n): ClientRegistrationLocator {\n if (runtime === \"claude-desktop\") {\n return { kind: \"claude-desktop-config\", configPath: inspectedDesktopConfigPath(options, env) };\n }\n if (runtime === \"claude-code\") {\n const claudeScope = scope!;\n return {\n kind: \"claude-code-scope\",\n scope: claudeScope,\n contextPath: claudeScope === \"user\" ? null : resolve(process.cwd()),\n };\n }\n const codexHome = env.CODEX_HOME?.trim() || join(env.HOME ?? homedir(), \".codex\");\n return { kind: \"codex-profile\", configPath: resolve(codexHome, \"config.toml\") };\n}\n\nexport function expectedManagedClientMetadata(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n env: NodeJS.ProcessEnv,\n): ManagedClientMetadata {\n const scope = runtime === \"claude-code\" ? options.scope ?? \"user\" : null;\n const launch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : { command: safeNativeExecutableContract(options.command === undefined ? \"agent-bridge-mcp\" : options.command, \"--command\"), args: [] };\n return {\n schema: \"agent-bridge.client-management\",\n version: 1,\n runtime,\n identity,\n instance: options.instance.trim(),\n backendConfigPath: resolve(options.backendConfigPath.trim()),\n launch: { ...launch, scope },\n locator: clientRegistrationLocator(runtime, scope, options, env),\n };\n}\n\nfunction exactObject(actual: unknown, expected: unknown): boolean {\n return isDeepStrictEqual(actual, expected);\n}\n\nconst REGISTRATION_ENV_KEYS = [\n \"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\",\n] as const;\n\ntype RegistrationState = \"absent\" | \"exact\" | \"inexact\";\ntype RegistrationEnvironment = Partial<Record<(typeof REGISTRATION_ENV_KEYS)[number], string>>;\n\nexport interface ManagedRegistrationObservation {\n state: RegistrationState;\n target: {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: ManagedClientMetadata[\"launch\"];\n locator: ClientRegistrationLocator;\n };\n observed: { state: \"absent\" } | {\n state: \"present\";\n command: string;\n args: string[];\n env: RegistrationEnvironment;\n };\n}\n\nfunction registrationTarget(metadata: ManagedClientMetadata): ManagedRegistrationObservation[\"target\"] {\n return {\n runtime: metadata.runtime,\n identity: metadata.identity,\n instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n };\n}\n\nexport function safeNativeExecutableContract(value: unknown, field: string): string {\n const command = strictText(value, field, 4096);\n if (/[?=#]/.test(command) || /:\\/\\//.test(command)\n || (!isAbsolute(command) && /\\s/.test(command))) {\n throw new Error(`${field} is invalid`);\n }\n return command;\n}\n\nexport function newNativeExecutableContract(value: unknown, field: string): string {\n const command = safeNativeExecutableContract(value, field);\n if (!isAbsolute(command)) return command;\n if (resolve(command) !== command || !existsSync(command) || !statSync(command).isFile()) {\n throw new Error(`${field} is not an existing executable`);\n }\n try { accessSync(command, process.platform === \"win32\" ? constants.F_OK : constants.X_OK); }\n catch { throw new Error(`${field} is not an existing executable`); }\n return command;\n}\n\nfunction safeEnvironment(value: unknown): RegistrationEnvironment {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"managed registration environment is invalid\");\n }\n const environment: RegistrationEnvironment = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n if (!REGISTRATION_ENV_KEYS.includes(key as (typeof REGISTRATION_ENV_KEYS)[number])) {\n throw new Error(\"managed registration contains an unsupported environment key\");\n }\n if (key === \"AGENT_BRIDGE_CONFIG\") environment.AGENT_BRIDGE_CONFIG = strictAbsolutePath(item, \"registration config\");\n else environment[key as \"AGENT_BRIDGE_AGENT\" | \"AGENT_BRIDGE_INSTANCE\"] = strictText(item, `registration ${key}`, 128);\n }\n return environment;\n}\n\nfunction exactRegistration(\n expected: ManagedClientMetadata,\n command: string,\n args: string[],\n environment: RegistrationEnvironment,\n): boolean {\n return command === expected.launch.command\n && isDeepStrictEqual(args, expected.launch.args)\n && isDeepStrictEqual(environment, {\n AGENT_BRIDGE_AGENT: expected.identity,\n AGENT_BRIDGE_INSTANCE: expected.instance,\n AGENT_BRIDGE_CONFIG: expected.backendConfigPath,\n });\n}\n\nfunction safeArgs(value: unknown, expected: string[], alternate: string[] = []): string[] {\n if (!Array.isArray(value) || value.length > 16) throw new Error(\"managed registration arguments are invalid\");\n const args = value.map((item) => strictText(item, \"registration argument\", 1024));\n if (!isDeepStrictEqual(args, expected) && !isDeepStrictEqual(args, alternate)) {\n throw new Error(\"managed registration arguments cannot be represented safely\");\n }\n return args;\n}\n\nfunction commandContext(\n metadata: ManagedClientMetadata,\n env: NodeJS.ProcessEnv,\n): ClientCommandContext {\n if (metadata.runtime === \"codex\") {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"codex-profile\" }>;\n return { env: { ...env, CODEX_HOME: dirname(locator.configPath) } };\n }\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n return { cwd: locator.contextPath ?? undefined, env: { ...env } };\n}\n\nfunction observeCodex(\n expected: ManagedClientMetadata,\n execute: Executor,\n env: NodeJS.ProcessEnv,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n const result = execute(\"codex\", [\"mcp\", \"get\", \"agent-bridge\", \"--json\"], {\n ...commandContext(expected, env),\n });\n if (result.error) throw new Error(\"codex MCP inspection failed\");\n if (result.status !== 0) {\n const output = `${result.stdout}\\n${result.stderr}`.trim();\n if (output === \"Error: No MCP server named 'agent-bridge' found.\") {\n return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n }\n throw new Error(\"codex MCP inspection failed\");\n }\n try {\n const server = JSON.parse(result.stdout) as Record<string, unknown>;\n const transport = server?.transport as Record<string, unknown> | undefined;\n const serverFields = new Set([\n \"name\", \"enabled\", \"disabled_reason\", \"transport\", \"enabled_tools\", \"disabled_tools\",\n \"startup_timeout_sec\", \"tool_timeout_sec\", \"status\",\n ]);\n const transportFields = new Set([\"type\", \"command\", \"args\", \"env\", \"env_vars\", \"cwd\"]);\n const hasNonNullSetting = (field: string): boolean => field in server && server[field] !== null;\n if (!server || typeof server !== \"object\" || Array.isArray(server)\n || server.name !== \"agent-bridge\" || server.enabled !== true\n || !transport || typeof transport !== \"object\" || Array.isArray(transport)\n || transport.type !== \"stdio\") {\n throw new Error(\"Codex MCP registration is not a supported stdio contract\");\n }\n if (Object.keys(server).some((field) => !serverFields.has(field))\n || Object.keys(transport).some((field) => !transportFields.has(field))\n || hasNonNullSetting(\"enabled_tools\") || hasNonNullSetting(\"disabled_tools\")) {\n throw new Error(\"Codex MCP registration contains an unsupported execution setting\");\n }\n if ((\"cwd\" in transport && transport.cwd !== null)\n || (\"env_vars\" in transport && (!Array.isArray(transport.env_vars) || transport.env_vars.length !== 0))) {\n throw new Error(\"Codex MCP registration contains an unsupported execution setting\");\n }\n const command = safeNativeExecutableContract(transport.command, \"Codex MCP command\");\n const args = safeArgs(transport.args, expected.launch.args, alternateArgs);\n const environment = safeEnvironment(transport.env);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n } catch {\n throw new Error(\"Codex MCP registration cannot be represented safely\");\n }\n}\n\nfunction observeClaudeCode(\n expected: ManagedClientMetadata,\n execute: Executor,\n env: NodeJS.ProcessEnv,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n const locator = expected.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n const result = execute(\"claude\", [\"mcp\", \"get\", \"agent-bridge\"], {\n ...commandContext(expected, env),\n });\n if (result.error) throw new Error(\"claude-code MCP inspection failed\");\n if (result.status !== 0) {\n const output = `${result.stdout}\\n${result.stderr}`.trim();\n if (output === 'No MCP server named \"agent-bridge\".'\n || /^No MCP server named \"agent-bridge\"\\. Configured servers: [^\\r\\n]+$/.test(output)) {\n return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n }\n throw new Error(\"claude-code MCP inspection failed\");\n }\n const scope = {\n local: \" Scope: Local config (private to you in this project)\",\n user: \" Scope: User config (available in all your projects)\",\n project: \" Scope: Project config (shared via .mcp.json)\",\n }[expected.launch.scope!];\n const lines = result.stdout.replace(/\\r\\n/g, \"\\n\").trimEnd().split(\"\\n\");\n if (lines[0] !== \"agent-bridge:\" || lines[1] !== scope) {\n throw new Error(\"Claude Code MCP registration scope is not the recorded scope\");\n }\n const typeIndex = lines.indexOf(\" Type: stdio\", 2);\n if (typeIndex < 0 || lines[typeIndex + 1] !== ` Command: ${expected.launch.command}`\n || lines[typeIndex + 2] !== \" Args:\" || lines[typeIndex + 3] !== \" Environment:\") {\n if (typeIndex < 0 || lines[typeIndex + 2] !== \" Args:\" || lines[typeIndex + 3] !== \" Environment:\") {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n }\n const commandLine = lines[typeIndex + 1];\n if (!commandLine?.startsWith(\" Command: \")) throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n const command = safeNativeExecutableContract(commandLine.slice(\" Command: \".length), \"Claude Code MCP command\");\n const environmentLines: string[] = [];\n let index = typeIndex + 4;\n while (index < lines.length && lines[index]?.startsWith(\" \")) {\n environmentLines.push(lines[index]!);\n index += 1;\n }\n const values: Record<string, string> = {};\n for (const line of environmentLines) {\n const match = /^ ([A-Z0-9_]+)=(.*)$/.exec(line);\n if (!match || Object.prototype.hasOwnProperty.call(values, match[1]!)) {\n throw new Error(\"Claude Code MCP environment is invalid\");\n }\n values[match[1]!] = match[2]!;\n }\n const environment = safeEnvironment(values);\n while (lines[index] === \"\") index += 1;\n if (lines[index] !== `To remove this server, run: claude mcp remove agent-bridge -s ${expected.launch.scope}`) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n if (lines.slice(index + 1).some((line) => line !== \"\")) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n const args = safeArgs([], expected.launch.args, alternateArgs);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n}\n\nexport function assertNoLinkedPathAncestors(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const part of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, part);\n try {\n if (lstatSync(current).isSymbolicLink()) throw new Error(\"Claude Desktop config path contains a link\");\n } catch (error) {\n if (error instanceof Error && error.message === \"Claude Desktop config path contains a link\") throw error;\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") break;\n throw new Error(\"Claude Desktop config path is unavailable\");\n }\n }\n}\n\nfunction observeDesktop(\n expected: ManagedClientMetadata,\n path: string,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n assertNoLinkedPathAncestors(path);\n if (!existsSync(path)) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n try {\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > 4 * 1024 * 1024) {\n throw new Error(\"Claude Desktop config is not a safe regular JSON file\");\n }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n let parsed: unknown;\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > 4 * 1024 * 1024\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n } finally { closeSync(descriptor); }\n const servers = (parsed as { mcpServers?: unknown })?.mcpServers;\n if (servers === undefined) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n throw new Error(\"Claude Desktop mcpServers is invalid\");\n }\n const server = (servers as Record<string, unknown>)[\"agent-bridge\"];\n if (server === undefined) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n if (!server || typeof server !== \"object\" || Array.isArray(server)\n || Object.keys(server as Record<string, unknown>).sort().join(\",\") !== \"args,command,env\") {\n throw new Error(\"Claude Desktop MCP registration cannot be represented safely\");\n }\n const entry = server as Record<string, unknown>;\n const command = strictAbsolutePath(entry.command, \"Claude Desktop MCP command\");\n const args = safeArgs(entry.args, expected.launch.args, alternateArgs);\n const environment = safeEnvironment(entry.env);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n } catch {\n throw new Error(\"Claude Desktop MCP registration cannot be represented safely\");\n }\n}\n\n/** Observe only the bounded, credential-free portion of a metadata-owned registration. */\nexport function observeManagedRegistration(\n metadata: ManagedClientMetadata,\n execute: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n alternateArgs: string[] = [],\n): ManagedRegistrationObservation {\n return metadata.runtime === \"codex\"\n ? observeCodex(metadata, execute, env, alternateArgs)\n : metadata.runtime === \"claude-code\"\n ? observeClaudeCode(metadata, execute, env, alternateArgs)\n : observeDesktop(\n metadata,\n (metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-desktop-config\" }>).configPath,\n alternateArgs,\n );\n}\n\n/** Inspect the registration using only the locator and launch contract stored in managed metadata. */\nexport function inspectManagedRegistration(\n metadata: ManagedClientMetadata,\n execute: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): RegistrationState {\n try { return observeManagedRegistration(metadata, execute, env).state; }\n catch { return \"inexact\"; }\n}\n\nconst MAX_MANAGED_METADATA_BYTES = 64 * 1024;\n\nfunction strictText(value: unknown, field: string, maximum = 1024): string {\n if (typeof value !== \"string\" || !value || value.length > maximum || value.trim() !== value\n || /[\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(`managed metadata ${field} is invalid`);\n }\n return value;\n}\n\nfunction strictAbsolutePath(value: unknown, field: string): string {\n const path = strictText(value, field, 4096);\n if (!isAbsolute(path) || resolve(path) !== path) throw new Error(`managed metadata ${field} is invalid`);\n return path;\n}\n\nfunction strictLocator(\n runtime: InstallableRuntime,\n value: unknown,\n): ClientRegistrationLocator {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n const locator = value as Record<string, unknown>;\n if (runtime === \"codex\") {\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\"\n || locator.kind !== \"codex-profile\") throw new Error(\"managed metadata locator is invalid\");\n const configPath = strictAbsolutePath(locator.configPath, \"locator configPath\");\n if (!configPath.endsWith(\"/config.toml\") && !configPath.endsWith(\"\\\\config.toml\")) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n return { kind: \"codex-profile\", configPath };\n }\n if (runtime === \"claude-code\") {\n if (Object.keys(locator).sort().join(\",\") !== \"contextPath,kind,scope\"\n || locator.kind !== \"claude-code-scope\"\n || ![\"local\", \"user\", \"project\"].includes(locator.scope as string)) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n const scope = locator.scope as \"local\" | \"user\" | \"project\";\n if ((scope === \"user\" && locator.contextPath !== null)\n || (scope !== \"user\" && typeof locator.contextPath !== \"string\")) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n return {\n kind: \"claude-code-scope\", scope,\n contextPath: scope === \"user\" ? null : strictAbsolutePath(locator.contextPath, \"locator contextPath\"),\n };\n }\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\"\n || locator.kind !== \"claude-desktop-config\") throw new Error(\"managed metadata locator is invalid\");\n return { kind: \"claude-desktop-config\", configPath: strictAbsolutePath(locator.configPath, \"locator configPath\") };\n}\n\nfunction strictManagedMetadata(\n value: unknown, runtime: InstallableRuntime, instance: string,\n): ManagedClientMetadata {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"managed metadata is invalid\");\n const metadata = value as Record<string, unknown>;\n if (Object.keys(metadata).sort().join(\",\")\n !== \"backendConfigPath,identity,instance,launch,locator,runtime,schema,version\"\n || metadata.schema !== \"agent-bridge.client-management\" || metadata.version !== 1\n || metadata.runtime !== runtime) throw new Error(\"managed metadata is invalid\");\n const identity = strictText(metadata.identity, \"identity\", 128);\n const recordedInstance = strictText(metadata.instance, \"instance\", 128);\n if (recordedInstance !== instance) throw new Error(\"managed metadata instance does not match its locator\");\n const backendConfigPath = strictAbsolutePath(metadata.backendConfigPath, \"backendConfigPath\");\n if (!metadata.launch || typeof metadata.launch !== \"object\" || Array.isArray(metadata.launch)) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n const launch = metadata.launch as Record<string, unknown>;\n if (Object.keys(launch).sort().join(\",\") !== \"args,command,scope\"\n || !Array.isArray(launch.args) || launch.args.length > 16\n || launch.args.some((arg) => {\n try { strictText(arg, \"launch argument\", 1024); return false; } catch { return true; }\n })\n || ![null, \"local\", \"user\", \"project\"].includes(launch.scope as string | null)) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n const locator = strictLocator(runtime, metadata.locator);\n const scope = launch.scope as \"local\" | \"user\" | \"project\" | null;\n if ((runtime !== \"claude-code\" && scope !== null)\n || (runtime === \"claude-code\" && scope !== (locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>).scope)\n || ((runtime === \"codex\" || runtime === \"claude-code\") && launch.args.length !== 0)\n || (runtime === \"claude-desktop\" && !isAbsolute(strictText(launch.command, \"launch command\", 4096)))\n || ((runtime === \"codex\" || runtime === \"claude-code\")\n && (() => { try { safeNativeExecutableContract(launch.command, \"launch command\"); return false; } catch { return true; } })())) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n return {\n schema: \"agent-bridge.client-management\", version: 1, runtime, identity, instance: recordedInstance,\n backendConfigPath,\n launch: { command: strictText(launch.command, \"launch command\", 4096), args: [...launch.args] as string[], scope },\n locator,\n };\n}\n\n/** Load the owner-private record that is the only mutation authority for a managed client. */\nexport function loadManagedClientMetadata(\n runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env,\n): ManagedClientMetadata {\n const normalizedInstance = strictText(instance, \"instance\", 128);\n const path = managedClientMetadataPath(runtime, normalizedInstance, env);\n verifyPrivatePathAccess(dirname(dirname(path)), \"directory\");\n verifyPrivatePathAccess(dirname(path), \"directory\");\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > MAX_MANAGED_METADATA_BYTES) {\n throw new Error(\"managed metadata is invalid\");\n }\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > MAX_MANAGED_METADATA_BYTES\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"managed metadata changed during access\");\n }\n const parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"managed metadata changed during access\");\n }\n return strictManagedMetadata(parsed, runtime, normalizedInstance);\n } finally { closeSync(descriptor); }\n}\n\nfunction readMetadata(path: string, runtime: InstallableRuntime, instance: string): unknown {\n if (!existsSync(path)) return undefined;\n try { return loadManagedClientMetadata(runtime, instance, { HOME: dirname(dirname(dirname(path))) }); }\n catch { return null; }\n}\n\nexport function writeManagedClientMetadata(path: string, metadata: ManagedClientMetadata): void {\n const directory = dirname(path);\n const privateRoot = dirname(directory);\n mkdirSync(privateRoot, { recursive: true, mode: 0o700 });\n securePrivatePath(privateRoot, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n const directoryBefore = lstatSync(directory);\n if (directoryBefore.isSymbolicLink() || !directoryBefore.isDirectory()) {\n throw new Error(\"managed metadata directory is invalid\");\n }\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n const opened = fstatSync(descriptor);\n securePrivatePath(temporary, \"file\");\n const secured = lstatSync(temporary);\n if (!opened.isFile() || secured.isSymbolicLink() || !secured.isFile()\n || secured.dev !== opened.dev || secured.ino !== opened.ino) {\n throw new Error(\"managed metadata temporary file changed during access\");\n }\n writeFileSync(descriptor, `${JSON.stringify(metadata, null, 2)}\\n`);\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n const beforeRename = lstatSync(directory);\n const temporaryBeforeRename = lstatSync(temporary);\n if (beforeRename.isSymbolicLink() || beforeRename.dev !== directoryBefore.dev\n || beforeRename.ino !== directoryBefore.ino || temporaryBeforeRename.isSymbolicLink()\n || !temporaryBeforeRename.isFile()) {\n throw new Error(\"managed metadata directory changed before publication\");\n }\n verifyPrivatePathAccess(temporary, \"file\");\n renameSync(temporary, path);\n const afterRename = lstatSync(directory);\n if (afterRename.isSymbolicLink() || afterRename.dev !== directoryBefore.dev\n || afterRename.ino !== directoryBefore.ino) {\n throw new Error(\"managed metadata directory changed during publication\");\n }\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const directoryDescriptor = openSync(directory, \"r\");\n try { fsyncSync(directoryDescriptor); } finally { closeSync(directoryDescriptor); }\n }\n}\n\nfunction validate(runtime: InstallableRuntime, identity: string, options: ClientLifecycleOptions): void {\n if (!identity.trim() || identity.trim().length > 128) throw new Error(\"--identity is required\");\n if (!options.instance.trim() || options.instance.trim().length > 128) throw new Error(\"--instance is required\");\n if (!options.backendConfigPath.trim()) throw new Error(\"--backend-config is required\");\n if (runtime === \"claude-code\" && options.scope && ![\"local\", \"user\", \"project\"].includes(options.scope)) {\n throw new Error(\"scope must be local, user, or project\");\n }\n}\n\nfunction backendState(path: string): \"absent\" | \"private-file\" | \"invalid\" {\n if (!existsSync(path)) return \"absent\";\n try {\n verifyPrivatePathAccess(dirname(path), \"directory\");\n verifyPrivatePathAccess(path, \"file\");\n return statSync(path).isFile() ? \"private-file\" : \"invalid\";\n } catch {\n return \"invalid\";\n }\n}\n\nexport function inspectClient(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n execute: Executor = defaultExecutor,\n): ClientInspection {\n validate(runtime, identity, options);\n const env = options.env ?? process.env;\n const normalizedIdentity = identity.trim();\n const expected = expectedManagedClientMetadata(runtime, normalizedIdentity, options, env);\n const path = managedClientMetadataPath(runtime, expected.instance, env);\n const registration = inspectManagedRegistration(expected, execute, env);\n const metadata = readMetadata(path, runtime, expected.instance);\n const backend = backendState(expected.backendConfigPath);\n let state: ClientLifecycleState;\n let reason: string;\n if (registration === \"absent\" && metadata === undefined && backend === \"absent\") {\n state = \"absent\"; reason = \"registration is absent\";\n } else if (registration === \"exact\" && backend === \"private-file\" && metadata === undefined) {\n state = \"unmanaged\"; reason = \"exact registration has no managed metadata\";\n } else if (registration === \"exact\" && backend === \"private-file\" && exactObject(metadata, expected)) {\n state = \"managed\"; reason = \"registration and managed metadata are exact\";\n } else {\n state = \"drifted\"; reason = backend !== \"private-file\"\n ? \"backend path or its immediate parent is absent or not owner-private\"\n : \"registration or managed metadata differs from the requested contract\";\n }\n return {\n schemaVersion: 1,\n runtime,\n identity: normalizedIdentity,\n instance: expected.instance,\n backendConfigPath: expected.backendConfigPath,\n registrationLocator: expected.locator,\n metadataPath: path,\n state,\n managed: state === \"managed\",\n exact: registration === \"exact\" && backend === \"private-file\",\n reason,\n };\n}\n\nexport function adoptClient(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n execute: Executor = defaultExecutor,\n): ClientAdoptionPlan {\n const inspection = inspectClient(runtime, identity, options, execute);\n if (inspection.state === \"managed\") {\n return { schemaVersion: 1, action: \"none\", applied: false, before: \"managed\", after: \"managed\", metadataPath: inspection.metadataPath, inspection };\n }\n if (inspection.state !== \"unmanaged\") {\n throw new Error(\"only an exact unmanaged registration can be adopted\");\n }\n if (options.apply) {\n writeManagedClientMetadata(\n inspection.metadataPath,\n expectedManagedClientMetadata(runtime, inspection.identity, options, options.env ?? process.env),\n );\n const postcondition = inspectClient(runtime, identity, options, execute);\n if (postcondition.state !== \"managed\") {\n throw new Error(\"client registration changed while adoption was applied\");\n }\n return {\n schemaVersion: 1, action: \"adopt\", applied: true, before: \"unmanaged\",\n after: \"managed\", metadataPath: inspection.metadataPath, inspection: postcondition,\n };\n }\n return {\n schemaVersion: 1,\n action: \"adopt\",\n applied: false,\n before: \"unmanaged\",\n after: \"managed\",\n metadataPath: inspection.metadataPath,\n inspection,\n };\n}\n","import {\n closeSync, constants, existsSync, fchmodSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync,\n readFileSync, renameSync, rmSync, unlinkSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport { hostname } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport {\n beginClientOperation, classifyClientOperationRestart, completeClientOperationCleanup,\n readClientOperation, recordClientOperationStepApplied, recordClientOperationStepIntent,\n recoverClientOperationLock, releaseClientOperationLock, resumeClientOperation,\n transitionClientOperation, writeClientOperationSnapshot, type ClientOperationLaunch,\n type ClientOperationManifest, type ClientOperationRegistrationProof,\n type ClientOperationRollbackContract,\n} from \"./client-operation.js\";\nimport {\n assertNoLinkedPathAncestors, loadManagedClientMetadata, managedClientMetadataPath,\n newNativeExecutableContract,\n observeManagedRegistration,\n writeManagedClientMetadata, type ClientLifecycleExecutor, type ClientRegistrationLocator,\n type ManagedClientMetadata, type ManagedRegistrationObservation,\n} from \"./client-lifecycle.js\";\nimport { resolveDesktopLaunchContract, type InstallableRuntime } from \"./client-installer.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nconst MAX_DESKTOP_CONFIG_BYTES = 4 * 1024 * 1024;\n\ntype BackendState = \"private\" | \"repairable\";\ntype PlannedKind = \"backend\" | \"backend-delete\" | \"native-remove\" | \"native-add\"\n | \"desktop-replace\" | \"desktop-remove\" | \"metadata\" | \"metadata-delete\";\n\ninterface BackendProof {\n role: \"backend\";\n file: { device: number; inode: number };\n parent: { device: number; inode: number };\n state: BackendState;\n}\n\ninterface BackendAbsentProof {\n role: \"backend\";\n parent: { device: number; inode: number };\n state: \"absent\";\n directoryDurability: \"durable\" | \"unavailable\";\n}\n\ninterface MetadataAbsentProof {\n role: \"metadata\";\n runtime: InstallableRuntime;\n instance: string;\n parent: { device: number; inode: number };\n state: \"absent\";\n directoryDurability: \"durable\" | \"unavailable\";\n}\n\ninterface PlannedStep {\n kind: PlannedKind;\n target: \"backend\" | \"registration\" | \"metadata\";\n locator: string;\n before: string;\n after: string;\n registrationMetadata?: \"source\" | \"target\";\n afterRegistrationMetadata?: \"source\" | \"target\";\n}\n\nexport interface ClientMaintenancePlan {\n schemaVersion: 1;\n action: \"repair\" | \"update\" | \"uninstall\" | \"rollback\" | \"none\";\n applied: boolean;\n operationId?: string;\n runtime: InstallableRuntime;\n instance: string;\n identity: string;\n metadataPath: string;\n steps: Array<{ target: \"backend\" | \"registration\" | \"metadata\"; action: string }>;\n}\n\ninterface ClientMaintenanceTestHooks {\n afterLock?: () => void;\n beforeOperationBegin?: () => void;\n beforeApply?: (step: { target: PlannedStep[\"target\"]; action: PlannedKind }) => void;\n afterApply?: (step: { target: PlannedStep[\"target\"]; action: PlannedKind }) => void;\n afterBackendPin?: () => void;\n desktop?: DesktopMaintenanceHooks;\n}\n\nexport interface ClientMaintenanceOptions {\n action: \"repair\" | \"update\" | \"uninstall\";\n runtime: InstallableRuntime;\n instance: string;\n identity: string;\n command?: string;\n apply?: boolean;\n resume?: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n /** Test-only fault injection for mutation-boundary regression coverage. */\n testHooks?: ClientMaintenanceTestHooks;\n}\n\nexport interface ClientMaintenanceResumeOptions {\n operationId: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n /** Test-only fault injection for mutation-boundary regression coverage. */\n testHooks?: ClientMaintenanceTestHooks;\n}\n\nexport interface ClientRollbackOptions {\n sourceOperationId: string;\n identity: string;\n apply?: boolean;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n /** Test-only fault injection for mutation-boundary regression coverage. */\n testHooks?: ClientMaintenanceTestHooks;\n}\n\nfunction digest(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction fixedEnvKeys(): ClientOperationLaunch[\"envKeys\"] {\n return [\"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\"];\n}\n\nfunction canonical(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n if (!value || typeof value !== \"object\") return JSON.stringify(value);\n return `{${Object.keys(value as Record<string, unknown>).sort()\n .map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\n\nfunction assertCurrentOperationManifest(current: ClientOperationManifest, env: NodeJS.ProcessEnv): void {\n const persisted = readClientOperation(current.operationId, env);\n if (!isDeepStrictEqual(persisted, current) || canonical(persisted) !== canonical(current)) {\n throw new Error(\"operation manifest changed while the client lock is held\");\n }\n}\n\nfunction assertRuntime(runtime: string): asserts runtime is InstallableRuntime {\n if (![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) {\n throw new Error(`unsupported client runtime: ${runtime}`);\n }\n}\n\nfunction assertIdentity(metadata: ManagedClientMetadata, assertion: string): void {\n if (!assertion || assertion.trim() !== assertion || assertion !== metadata.identity) {\n throw new Error(\"--identity must exactly match managed metadata\");\n }\n}\n\nfunction registrationProof(observation: ManagedRegistrationObservation): string {\n return canonical({ role: \"registration\", observation });\n}\n\nfunction exactRegistrationObservation(metadata: ManagedClientMetadata): ManagedRegistrationObservation {\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n },\n },\n };\n}\n\nfunction rollbackContract(\n prior: ManagedClientMetadata,\n forward: ManagedClientMetadata,\n): ClientOperationRollbackContract {\n const priorRegistration = exactRegistrationObservation(prior);\n const forwardRegistration = exactRegistrationObservation(forward);\n return {\n schema: \"agent-bridge.client-update-rollback\", version: 1, identity: prior.identity,\n priorMetadata: prior,\n priorRegistration: priorRegistration as ClientOperationRegistrationProof,\n forwardMetadataSha256: digest(metadataProof(forward)),\n forwardRegistrationSha256: digest(registrationProof(forwardRegistration)),\n };\n}\n\nfunction managedMetadataFromRollback(\n contract: ClientOperationRollbackContract,\n): ManagedClientMetadata {\n return contract.priorMetadata as ManagedClientMetadata;\n}\n\nfunction assertRollbackContract(\n contract: ClientOperationRollbackContract,\n runtime: InstallableRuntime,\n instance: string,\n): { prior: ManagedClientMetadata } {\n const prior = managedMetadataFromRollback(contract);\n if (prior.runtime !== runtime || prior.instance !== instance || prior.identity !== contract.identity) {\n throw new Error(\"rollback source does not match its recorded managed client\");\n }\n const expectedPrior = exactRegistrationObservation(prior);\n if (canonical(contract.priorRegistration) !== canonical(expectedPrior)) {\n throw new Error(\"rollback source inverse registration contract is invalid\");\n }\n return { prior };\n}\n\nfunction metadataProof(metadata: ManagedClientMetadata): string {\n return canonical({ role: \"metadata\", metadata });\n}\n\nfunction operationLaunch(metadata: ManagedClientMetadata): ClientOperationLaunch {\n return {\n command: metadata.launch.command,\n args: [...metadata.launch.args],\n scope: metadata.launch.scope,\n envKeys: fixedEnvKeys(),\n };\n}\n\nfunction updateMetadata(metadata: ManagedClientMetadata, launch: ClientOperationLaunch): ManagedClientMetadata {\n return {\n ...metadata,\n launch: { command: launch.command, args: [...launch.args], scope: launch.scope },\n };\n}\n\nfunction resolveUpdateLaunch(\n metadata: ManagedClientMetadata,\n command: string | undefined,\n env: NodeJS.ProcessEnv,\n): ClientOperationLaunch {\n if (metadata.runtime === \"claude-desktop\") {\n const launch = resolveDesktopLaunchContract(command, env);\n return { command: launch.command, args: [...launch.args], scope: null, envKeys: fixedEnvKeys() };\n }\n const requested = command === undefined ? \"agent-bridge-mcp\" : command;\n newNativeExecutableContract(requested, \"--command\");\n return {\n command: requested,\n args: [],\n scope: metadata.runtime === \"claude-code\" ? metadata.launch.scope : null,\n envKeys: fixedEnvKeys(),\n };\n}\n\nfunction backendPolicy(path: string): BackendProof {\n const parentPath = dirname(path);\n const parent = lstatSync(parentPath);\n const file = lstatSync(path);\n if (parent.isSymbolicLink() || !parent.isDirectory() || file.isSymbolicLink() || !file.isFile()) {\n throw new Error(\"managed backend path cannot be a link or non-regular file\");\n }\n if (typeof process.getuid === \"function\" && (parent.uid !== process.getuid() || file.uid !== process.getuid())) {\n throw new Error(\"managed backend path is not owned by the current user\");\n }\n if (process.platform === \"win32\") {\n try {\n verifyPrivatePathAccess(parentPath, \"directory\");\n verifyPrivatePathAccess(path, \"file\");\n return {\n role: \"backend\", file: { device: file.dev, inode: file.ino },\n parent: { device: parent.dev, inode: parent.ino }, state: \"private\",\n };\n } catch {\n throw new Error(\"managed backend policy cannot be tightened safely on this platform\");\n }\n }\n const exactPrivate = (parent.mode & 0o777) === 0o700 && (file.mode & 0o777) === 0o600;\n if (exactPrivate) {\n verifyPrivatePathAccess(parentPath, \"directory\");\n verifyPrivatePathAccess(path, \"file\");\n return {\n role: \"backend\", file: { device: file.dev, inode: file.ino },\n parent: { device: parent.dev, inode: parent.ino }, state: \"private\",\n };\n }\n if ((parent.mode & 0o700) !== 0o700 || (file.mode & 0o600) !== 0o600\n || (parent.mode & 0o7000) !== 0 || (file.mode & 0o7000) !== 0) {\n throw new Error(\"managed backend policy would require nonmonotonic permission changes\");\n }\n return {\n role: \"backend\", file: { device: file.dev, inode: file.ino },\n parent: { device: parent.dev, inode: parent.ino }, state: \"repairable\",\n };\n}\n\nfunction privateDirectoryProof(path: string, message: string): { device: number; inode: number } {\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isDirectory()) throw new Error(message);\n verifyPrivatePathAccess(path, \"directory\");\n const after = lstatSync(path);\n if (after.isSymbolicLink() || !after.isDirectory() || after.dev !== before.dev || after.ino !== before.ino) {\n throw new Error(message);\n }\n return { device: before.dev, inode: before.ino };\n}\n\nfunction samePrivateDirectory(\n path: string,\n expected: { device: number; inode: number },\n message: string,\n): void {\n const current = lstatSync(path);\n if (current.isSymbolicLink() || !current.isDirectory()\n || current.dev !== expected.device || current.ino !== expected.inode) {\n throw new Error(message);\n }\n verifyPrivatePathAccess(path, \"directory\");\n}\n\nfunction pathEntryIsAbsent(path: string): boolean {\n try {\n lstatSync(path);\n return false;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return true;\n throw error;\n }\n}\n\nfunction syncPrivateDirectory(\n path: string,\n expected: { device: number; inode: number },\n message: string,\n): \"durable\" | \"unavailable\" {\n samePrivateDirectory(path, expected, message);\n if (process.platform === \"win32\") return \"unavailable\";\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isDirectory() || opened.dev !== expected.device || opened.ino !== expected.inode) {\n throw new Error(message);\n }\n fsyncSync(descriptor);\n } finally { closeSync(descriptor); }\n samePrivateDirectory(path, expected, message);\n return \"durable\";\n}\n\nfunction expectedBackendAbsentProof(before: BackendProof): BackendAbsentProof {\n return {\n role: \"backend\", parent: { ...before.parent }, state: \"absent\",\n directoryDurability: process.platform === \"win32\" ? \"unavailable\" : \"durable\",\n };\n}\n\nfunction observedBackendAbsentProof(\n path: string,\n expected: { device: number; inode: number },\n): BackendAbsentProof {\n const parentPath = dirname(path);\n samePrivateDirectory(parentPath, expected, \"managed backend directory changed during deletion\");\n if (!pathEntryIsAbsent(path)) throw new Error(\"managed backend remains after deletion\");\n const directoryDurability = syncPrivateDirectory(\n parentPath, expected, \"managed backend directory changed during deletion\",\n );\n return { role: \"backend\", parent: { ...expected }, state: \"absent\", directoryDurability };\n}\n\nfunction expectedMetadataAbsentProof(\n metadata: ManagedClientMetadata,\n env: NodeJS.ProcessEnv,\n): MetadataAbsentProof {\n const parent = privateDirectoryProof(\n dirname(managedClientMetadataPath(metadata.runtime, metadata.instance, env)),\n \"managed metadata directory is invalid\",\n );\n return {\n role: \"metadata\", runtime: metadata.runtime, instance: metadata.instance,\n parent, state: \"absent\", directoryDurability: process.platform === \"win32\" ? \"unavailable\" : \"durable\",\n };\n}\n\nfunction observedMetadataAbsentProof(\n runtime: InstallableRuntime,\n instance: string,\n env: NodeJS.ProcessEnv,\n expected: { device: number; inode: number },\n): MetadataAbsentProof {\n const path = managedClientMetadataPath(runtime, instance, env);\n const parentPath = dirname(path);\n samePrivateDirectory(parentPath, expected, \"managed metadata directory changed during deletion\");\n if (!pathEntryIsAbsent(path)) throw new Error(\"managed metadata remains after deletion\");\n const directoryDurability = syncPrivateDirectory(\n parentPath, expected, \"managed metadata directory changed during deletion\",\n );\n return { role: \"metadata\", runtime, instance, parent: { ...expected }, state: \"absent\", directoryDurability };\n}\n\nfunction deletePrivateFile(\n path: string,\n expectedFile: { device: number; inode: number },\n expectedParent: { device: number; inode: number },\n description: string,\n): \"durable\" | \"unavailable\" {\n const parentPath = dirname(path);\n samePrivateDirectory(parentPath, expectedParent, `${description} directory changed during deletion`);\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.dev !== expectedFile.device || opened.ino !== expectedFile.inode) {\n throw new Error(`${description} changed during deletion`);\n }\n } finally { closeSync(descriptor); }\n const current = lstatSync(path);\n if (current.isSymbolicLink() || !current.isFile()\n || current.dev !== expectedFile.device || current.ino !== expectedFile.inode) {\n throw new Error(`${description} changed during deletion`);\n }\n unlinkSync(path);\n if (!pathEntryIsAbsent(path)) throw new Error(`${description} remains after deletion`);\n return syncPrivateDirectory(parentPath, expectedParent, `${description} directory changed during deletion`);\n}\n\nfunction deleteManagedClientMetadata(metadata: ManagedClientMetadata, env: NodeJS.ProcessEnv): \"durable\" | \"unavailable\" {\n const current = loadManagedClientMetadata(metadata.runtime, metadata.instance, env);\n if (!isDeepStrictEqual(current, metadata)) throw new Error(\"managed metadata changed before deletion\");\n const path = managedClientMetadataPath(metadata.runtime, metadata.instance, env);\n const parent = privateDirectoryProof(dirname(path), \"managed metadata directory is invalid\");\n const file = lstatSync(path);\n if (file.isSymbolicLink() || !file.isFile()) throw new Error(\"managed metadata changed before deletion\");\n verifyPrivatePathAccess(path, \"file\");\n return deletePrivateFile(path, { device: file.dev, inode: file.ino }, parent, \"managed metadata\");\n}\n\nfunction deleteBackend(\n path: string,\n before: BackendProof,\n): \"durable\" | \"unavailable\" {\n if (before.state !== \"private\") throw new Error(\"managed backend must be private before deletion\");\n const current = backendPolicy(path);\n if (current.state !== \"private\" || current.file.device !== before.file.device\n || current.file.inode !== before.file.inode || current.parent.device !== before.parent.device\n || current.parent.inode !== before.parent.inode) {\n throw new Error(\"managed backend changed before deletion\");\n }\n return deletePrivateFile(path, before.file, before.parent, \"managed backend\");\n}\n\nfunction tightenBackendPolicy(path: string, before: BackendProof, afterPin?: () => void): void {\n const current = backendPolicy(path);\n if (current.state !== \"repairable\" || current.file.device !== before.file.device\n || current.file.inode !== before.file.inode || current.parent.device !== before.parent.device\n || current.parent.inode !== before.parent.inode) {\n throw new Error(\"managed backend changed before privacy repair\");\n }\n if (process.platform === \"win32\") throw new Error(\"managed backend policy cannot be tightened safely on this platform\");\n const parentDescriptor = openSync(dirname(path), constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0));\n try {\n const parent = fstatSync(parentDescriptor);\n if (!parent.isDirectory() || parent.dev !== before.parent.device || parent.ino !== before.parent.inode\n || (typeof process.getuid === \"function\" && parent.uid !== process.getuid())) {\n throw new Error(\"managed backend parent changed during privacy repair\");\n }\n const fileDescriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const file = fstatSync(fileDescriptor);\n if (!file.isFile() || file.dev !== before.file.device || file.ino !== before.file.inode\n || (typeof process.getuid === \"function\" && file.uid !== process.getuid())) {\n throw new Error(\"managed backend changed during privacy repair\");\n }\n afterPin?.();\n fchmodSync(parentDescriptor, 0o700);\n fchmodSync(fileDescriptor, 0o600);\n const securedParent = fstatSync(parentDescriptor);\n const securedFile = fstatSync(fileDescriptor);\n if (securedParent.dev !== before.parent.device || securedParent.ino !== before.parent.inode\n || securedFile.dev !== before.file.device || securedFile.ino !== before.file.inode\n || (securedParent.mode & 0o777) !== 0o700 || (securedFile.mode & 0o777) !== 0o600) {\n throw new Error(\"managed backend changed during privacy repair\");\n }\n } finally { closeSync(fileDescriptor); }\n } finally { closeSync(parentDescriptor); }\n if (backendPolicy(path).state !== \"private\") throw new Error(\"managed backend privacy repair failed\");\n}\n\nfunction nativeContext(metadata: ManagedClientMetadata, env: NodeJS.ProcessEnv): { cwd?: string; env: NodeJS.ProcessEnv } {\n if (metadata.runtime === \"codex\") {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"codex-profile\" }>;\n return { env: { ...env, CODEX_HOME: dirname(locator.configPath) } };\n }\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n return { cwd: locator.contextPath ?? undefined, env: { ...env } };\n}\n\nfunction nativeExecute(\n metadata: ManagedClientMetadata,\n action: \"remove\" | \"add\",\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): void {\n const context = nativeContext(metadata, env);\n const executable = metadata.runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = action === \"remove\"\n ? metadata.runtime === \"codex\"\n ? [\"mcp\", \"remove\", \"agent-bridge\"]\n : [\"mcp\", \"remove\", \"agent-bridge\", \"-s\", metadata.launch.scope!]\n : metadata.runtime === \"codex\"\n ? [\n \"mcp\", \"add\", \"agent-bridge\",\n \"--env\", `AGENT_BRIDGE_AGENT=${metadata.identity}`,\n \"--env\", `AGENT_BRIDGE_INSTANCE=${metadata.instance}`,\n \"--env\", `AGENT_BRIDGE_CONFIG=${metadata.backendConfigPath}`,\n \"--\", metadata.launch.command,\n ]\n : [\n \"mcp\", \"add\", \"--scope\", metadata.launch.scope!, \"agent-bridge\",\n \"-e\", `AGENT_BRIDGE_AGENT=${metadata.identity}`,\n \"-e\", `AGENT_BRIDGE_INSTANCE=${metadata.instance}`,\n \"-e\", `AGENT_BRIDGE_CONFIG=${metadata.backendConfigPath}`,\n \"--\", metadata.launch.command,\n ];\n const result = execute(executable, args, context);\n if (result.error || result.status !== 0) {\n throw new Error(`${metadata.runtime} MCP ${action} failed`);\n }\n}\n\ninterface DesktopConfigRead {\n config: Record<string, unknown>;\n identity: { device: number; inode: number } | null;\n}\n\nfunction readDesktopConfigNoFollow(path: string): DesktopConfigRead {\n assertNoLinkedPathAncestors(path);\n if (!existsSync(path)) return { config: {}, identity: null };\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > MAX_DESKTOP_CONFIG_BYTES) {\n throw new Error(\"Claude Desktop config is not a safe regular JSON file\");\n }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > MAX_DESKTOP_CONFIG_BYTES\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n const parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Claude Desktop config is not valid JSON\");\n }\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n return { config: parsed as Record<string, unknown>, identity: { device: opened.dev, inode: opened.ino } };\n } finally { closeSync(descriptor); }\n}\n\ninterface DesktopMaintenanceHooks {\n afterTemporarySync?: () => void;\n beforeRename?: () => void;\n afterRename?: () => void;\n}\n\nfunction sameIdentity(path: string, identity: { device: number; inode: number }, message: string): void {\n const current = lstatSync(path);\n if (current.isSymbolicLink() || !current.isFile()\n || current.dev !== identity.device || current.ino !== identity.inode) {\n throw new Error(message);\n }\n}\n\nfunction temporaryIdentity(path: string, privateRequired = true): { device: number; inode: number } {\n const details = lstatSync(path);\n if (details.isSymbolicLink() || !details.isFile()\n || (typeof process.getuid === \"function\" && details.uid !== process.getuid())) {\n throw new Error(\"Claude Desktop temporary config is not safe\");\n }\n if (privateRequired && process.platform !== \"win32\" && (details.mode & 0o777) !== 0o600) {\n throw new Error(\"Claude Desktop temporary config is not private\");\n }\n if (privateRequired) verifyPrivatePathAccess(path, \"file\");\n return { device: details.dev, inode: details.ino };\n}\n\nfunction syncDesktopDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\nfunction removeKnownTemporary(path: string, identity: { device: number; inode: number } | null): void {\n if (!existsSync(path)) return;\n const current = temporaryIdentity(path);\n if (identity && (current.device !== identity.device || current.inode !== identity.inode)) {\n throw new Error(\"Claude Desktop temporary config changed during cleanup\");\n }\n rmSync(path);\n syncDesktopDirectory(dirname(path));\n}\n\nfunction mutateDesktopRegistration(\n metadata: ManagedClientMetadata,\n operationId: string,\n stepIndex: number,\n action: \"replace\" | \"remove\",\n hooks?: DesktopMaintenanceHooks,\n): void {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-desktop-config\" }>;\n const path = locator.configPath;\n const directory = dirname(path);\n assertNoLinkedPathAncestors(directory);\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n assertNoLinkedPathAncestors(path);\n const directoryInfo = lstatSync(directory);\n if (directoryInfo.isSymbolicLink() || !directoryInfo.isDirectory()) {\n throw new Error(\"Claude Desktop config directory is not safe\");\n }\n const directoryIdentity = { device: directoryInfo.dev, inode: directoryInfo.ino };\n const read = readDesktopConfigNoFollow(path);\n const servers = read.config.mcpServers;\n if (servers !== undefined && (!servers || typeof servers !== \"object\" || Array.isArray(servers))) {\n throw new Error(\"Claude Desktop mcpServers is not an object\");\n }\n const nextServers = { ...(servers as Record<string, unknown> | undefined) };\n if (action === \"replace\") {\n nextServers[\"agent-bridge\"] = {\n command: metadata.launch.command,\n args: metadata.launch.args,\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n },\n };\n } else {\n delete nextServers[\"agent-bridge\"];\n }\n const next = {\n ...read.config,\n mcpServers: nextServers,\n };\n const temporary = join(directory, `.ab-${operationId.slice(0, 8)}-${stepIndex}-${digest(path).slice(0, 12)}.tmp`);\n removeKnownTemporary(temporary, null);\n let temporaryFile: { device: number; inode: number } | null = null;\n let operationError: unknown;\n try {\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n temporaryFile = temporaryIdentity(temporary, false);\n securePrivatePath(temporary, \"file\");\n temporaryFile = temporaryIdentity(temporary);\n writeFileSync(descriptor, `${JSON.stringify(next, null, 2)}\\n`);\n fsyncSync(descriptor);\n } finally { closeSync(descriptor); }\n temporaryFile = temporaryIdentity(temporary);\n hooks?.afterTemporarySync?.();\n const currentDirectory = lstatSync(directory);\n if (currentDirectory.isSymbolicLink() || !currentDirectory.isDirectory()\n || currentDirectory.dev !== directoryIdentity.device || currentDirectory.ino !== directoryIdentity.inode) {\n throw new Error(\"Claude Desktop config directory changed before publication\");\n }\n if (read.identity) {\n sameIdentity(path, read.identity, \"Claude Desktop config changed before publication\");\n } else if (existsSync(path)) {\n throw new Error(\"Claude Desktop config appeared before publication\");\n }\n hooks?.beforeRename?.();\n if (read.identity) sameIdentity(path, read.identity, \"Claude Desktop config changed before publication\");\n else if (existsSync(path)) throw new Error(\"Claude Desktop config appeared before publication\");\n temporaryIdentity(temporary);\n renameSync(temporary, path);\n temporaryFile = null;\n hooks?.afterRename?.();\n securePrivatePath(path, \"file\");\n verifyPrivatePathAccess(path, \"file\");\n const publishedDirectory = lstatSync(directory);\n if (publishedDirectory.isSymbolicLink() || publishedDirectory.dev !== directoryIdentity.device\n || publishedDirectory.ino !== directoryIdentity.inode) {\n throw new Error(\"Claude Desktop config directory changed during publication\");\n }\n if (process.platform !== \"win32\") {\n const directoryDescriptor = openSync(directory, \"r\");\n try { fsyncSync(directoryDescriptor); } finally { closeSync(directoryDescriptor); }\n }\n const verified = readDesktopConfigNoFollow(path);\n const servers = verified.config.mcpServers as Record<string, unknown> | undefined;\n const entry = servers?.[\"agent-bridge\"] as Record<string, unknown> | undefined;\n if (action === \"remove\") {\n if (entry !== undefined) throw new Error(\"Claude Desktop registration removal was not verified\");\n } else if (!entry || entry.command !== metadata.launch.command\n || !isDeepStrictEqual(entry.args, metadata.launch.args)\n || !isDeepStrictEqual(entry.env, {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n })) {\n throw new Error(\"Claude Desktop registration postcondition was not met\");\n }\n } catch (error) {\n operationError = error;\n throw error;\n } finally {\n if (temporaryFile) {\n try { removeKnownTemporary(temporary, temporaryFile); }\n catch (error) { if (!operationError) throw error; }\n }\n }\n}\n\nfunction buildPlan(\n metadata: ManagedClientMetadata,\n target: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): PlannedStep[] {\n const steps: PlannedStep[] = [];\n const policy = backendPolicy(metadata.backendConfigPath);\n if (policy.state === \"repairable\") {\n steps.push({\n kind: \"backend\", target: \"backend\", locator: \"managed-backend-policy\",\n before: canonical(policy), after: canonical({ ...policy, state: \"private\" }),\n });\n }\n const registration = observeManagedRegistration(target, execute, env, metadata.launch.args);\n const absentRegistration: ManagedRegistrationObservation = {\n state: \"absent\", target: registration.target, observed: { state: \"absent\" },\n };\n const exactRegistration: ManagedRegistrationObservation = {\n state: \"exact\", target: registration.target,\n observed: {\n state: \"present\", command: target.launch.command, args: [...target.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: target.identity,\n AGENT_BRIDGE_INSTANCE: target.instance,\n AGENT_BRIDGE_CONFIG: target.backendConfigPath,\n },\n },\n };\n if (target.runtime === \"claude-desktop\") {\n if (registration.state !== \"exact\") {\n steps.push({\n kind: \"desktop-replace\", target: \"registration\", locator: \"claude-desktop:agent-bridge\",\n before: registrationProof(registration), after: registrationProof(exactRegistration),\n });\n }\n } else if (registration.state === \"inexact\") {\n steps.push({\n kind: \"native-remove\", target: \"registration\", locator: `${target.runtime}:agent-bridge`,\n before: registrationProof(registration), after: registrationProof(absentRegistration),\n });\n steps.push({\n kind: \"native-add\", target: \"registration\", locator: `${target.runtime}:agent-bridge`,\n before: registrationProof(absentRegistration), after: registrationProof(exactRegistration),\n });\n } else if (registration.state === \"absent\") {\n steps.push({\n kind: \"native-add\", target: \"registration\", locator: `${target.runtime}:agent-bridge`,\n before: registrationProof(absentRegistration), after: registrationProof(exactRegistration),\n });\n }\n if (!isDeepStrictEqual(metadata.launch, target.launch)) {\n steps.push({\n kind: \"metadata\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(metadata), after: metadataProof(target),\n });\n }\n return steps;\n}\n\nfunction expectedBackendAbsentFromParent(parent: { device: number; inode: number }): BackendAbsentProof {\n return {\n role: \"backend\", parent: { ...parent }, state: \"absent\",\n directoryDurability: process.platform === \"win32\" ? \"unavailable\" : \"durable\",\n };\n}\n\nfunction uninstallBackendObservation(path: string): BackendProof | BackendAbsentProof {\n try { return backendPolicy(path); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n const parent = privateDirectoryProof(dirname(path), \"managed backend directory is invalid\");\n if (!pathEntryIsAbsent(path)) throw new Error(\"managed backend appeared during uninstall planning\");\n return expectedBackendAbsentFromParent(parent);\n }\n}\n\nfunction assertUninstallPathIsolation(metadata: ManagedClientMetadata, env: NodeJS.ProcessEnv): void {\n const paths = [\n [\"backend\", metadata.backendConfigPath],\n [\"metadata\", managedClientMetadataPath(metadata.runtime, metadata.instance, env)],\n ] as Array<[string, string]>;\n if (metadata.runtime === \"claude-desktop\") {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-desktop-config\" }>;\n paths.push([\"Desktop config\", locator.configPath]);\n }\n const seen = new Map<string, string>();\n const existing = new Map<string, string>();\n for (const [role, path] of paths) {\n const resolved = resolve(path);\n const normalized = process.platform === \"win32\" ? resolved.toLowerCase() : resolved;\n const prior = seen.get(normalized);\n if (prior) throw new Error(`managed uninstall paths alias: ${prior} and ${role}`);\n seen.set(normalized, role);\n try {\n const entry = lstatSync(resolved, { bigint: true });\n const identity = `${entry.dev}:${entry.ino}`;\n const existingRole = existing.get(identity);\n if (existingRole) throw new Error(`managed uninstall paths alias: ${existingRole} and ${role}`);\n existing.set(identity, role);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n }\n}\n\nfunction buildUninstallPlan(\n metadata: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): PlannedStep[] {\n const steps: PlannedStep[] = [];\n const registration = observeManagedRegistration(metadata, execute, env, metadata.launch.args);\n const absentRegistration: ManagedRegistrationObservation = {\n state: \"absent\", target: registration.target, observed: { state: \"absent\" },\n };\n if (registration.state !== \"absent\") {\n steps.push({\n kind: metadata.runtime === \"claude-desktop\" ? \"desktop-remove\" : \"native-remove\",\n target: \"registration\", locator: `${metadata.runtime}:agent-bridge`,\n before: registrationProof(registration), after: registrationProof(absentRegistration),\n });\n }\n const backend = uninstallBackendObservation(metadata.backendConfigPath);\n if (backend.state === \"repairable\") {\n throw new Error(\"managed backend must be private before uninstall deletes it\");\n }\n if (backend.state === \"private\") {\n steps.push({\n kind: \"backend-delete\", target: \"backend\", locator: \"managed-backend-policy\",\n before: canonical(backend), after: canonical(expectedBackendAbsentProof(backend)),\n });\n }\n const metadataAbsent = expectedMetadataAbsentProof(metadata, env);\n steps.push({\n kind: \"metadata-delete\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(metadata), after: canonical(metadataAbsent),\n });\n return steps;\n}\n\nfunction buildRollbackPlan(\n forward: ManagedClientMetadata,\n prior: ManagedClientMetadata,\n): PlannedStep[] {\n const forwardRegistration = exactRegistrationObservation(forward);\n const priorRegistration = exactRegistrationObservation(prior);\n if (forward.runtime === \"claude-desktop\") {\n return [\n {\n kind: \"desktop-replace\", target: \"registration\", locator: \"claude-desktop:agent-bridge\",\n before: registrationProof(forwardRegistration), after: registrationProof(priorRegistration),\n registrationMetadata: \"source\", afterRegistrationMetadata: \"target\",\n },\n {\n kind: \"metadata\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(forward), after: metadataProof(prior),\n },\n ];\n }\n const absentForward: ManagedRegistrationObservation = {\n state: \"absent\", target: forwardRegistration.target, observed: { state: \"absent\" },\n };\n const absentPrior: ManagedRegistrationObservation = {\n state: \"absent\", target: priorRegistration.target, observed: { state: \"absent\" },\n };\n return [\n {\n kind: \"native-remove\", target: \"registration\", locator: `${forward.runtime}:agent-bridge`,\n before: registrationProof(forwardRegistration), after: registrationProof(absentForward),\n registrationMetadata: \"source\", afterRegistrationMetadata: \"source\",\n },\n {\n kind: \"native-add\", target: \"registration\", locator: `${forward.runtime}:agent-bridge`,\n before: registrationProof(absentPrior), after: registrationProof(priorRegistration),\n registrationMetadata: \"target\", afterRegistrationMetadata: \"target\",\n },\n {\n kind: \"metadata\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(forward), after: metadataProof(prior),\n },\n ];\n}\n\nfunction rollbackExecutionStepsFromManifest(\n manifest: ClientOperationManifest,\n prior: ManagedClientMetadata,\n): PlannedStep[] {\n let registrationIndex = 0;\n return manifest.steps.map((step) => {\n if (step.target === \"metadata\") {\n return { kind: \"metadata\", target: \"metadata\", locator: step.locator, before: \"\", after: \"\" };\n }\n if (prior.runtime === \"claude-desktop\") {\n return {\n kind: \"desktop-replace\", target: \"registration\", locator: step.locator,\n before: \"\", after: \"\", registrationMetadata: \"source\", afterRegistrationMetadata: \"target\",\n };\n }\n const kind = registrationIndex++ === 0 ? \"native-remove\" : \"native-add\";\n return {\n kind, target: \"registration\", locator: step.locator, before: \"\", after: \"\",\n registrationMetadata: kind === \"native-remove\" ? \"source\" : \"target\",\n afterRegistrationMetadata: kind === \"native-remove\" ? \"source\" : \"target\",\n };\n });\n}\n\nfunction rollbackMetadataReachedAfterState(\n manifest: ClientOperationManifest | null,\n prior: ManagedClientMetadata,\n env: NodeJS.ProcessEnv,\n): boolean {\n const metadataStep = manifest?.steps.find((step) => step.target === \"metadata\");\n if (!metadataStep) return false;\n if (metadataStep.state === \"observed-applied\") return true;\n if (metadataStep.state !== \"intent-recorded\") return false;\n const current = loadManagedClientMetadata(manifest!.runtime, manifest!.instance, env);\n return isDeepStrictEqual(current, prior)\n && digest(metadataProof(current)) === metadataStep.expectedAfterSha256;\n}\n\nfunction rollbackRegistrationHasProgress(manifest: ClientOperationManifest | null): boolean {\n return manifest?.steps.some((step) => step.target === \"registration\" && step.state !== \"pending\") ?? false;\n}\n\nfunction assertForwardRollbackMetadataState(\n forward: ManagedClientMetadata,\n contract: ClientOperationRollbackContract,\n): void {\n if (digest(metadataProof(forward)) !== contract.forwardMetadataSha256) {\n throw new Error(\"managed client no longer matches the forward update metadata state\");\n }\n}\n\nfunction assertForwardRollbackRegistrationState(\n forward: ManagedClientMetadata,\n contract: ClientOperationRollbackContract,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): void {\n const registration = observeManagedRegistration(forward, execute, env);\n if (digest(registrationProof(registration)) !== contract.forwardRegistrationSha256) {\n throw new Error(\"managed client no longer matches the forward update registration state\");\n }\n}\n\nfunction executionStepsFromManifest(\n manifest: ClientOperationManifest,\n target: ManagedClientMetadata,\n action: \"repair\" | \"update\" | \"uninstall\",\n): PlannedStep[] {\n const registrationSteps = manifest.steps.filter((step) => step.target === \"registration\");\n let registrationIndex = 0;\n return manifest.steps.map((step) => {\n let kind: PlannedKind;\n if (action === \"uninstall\") {\n if (step.target === \"backend\") kind = \"backend-delete\";\n else if (step.target === \"metadata\") kind = \"metadata-delete\";\n else kind = target.runtime === \"claude-desktop\" ? \"desktop-remove\" : \"native-remove\";\n } else if (step.target === \"backend\") kind = \"backend\";\n else if (step.target === \"metadata\") kind = \"metadata\";\n else if (target.runtime === \"claude-desktop\") kind = \"desktop-replace\";\n else {\n kind = registrationSteps.length === 2 && registrationIndex++ === 0 ? \"native-remove\" : \"native-add\";\n }\n return { kind, target: step.target as PlannedStep[\"target\"], locator: step.locator, before: \"\", after: \"\" };\n });\n}\n\ninterface ObservedStep {\n proof: string;\n backend?: BackendProof;\n}\n\nfunction observedProof(\n step: PlannedStep,\n metadata: ManagedClientMetadata,\n target: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n phase: \"before\" | \"after\" = \"before\",\n): ObservedStep {\n if (step.kind === \"backend\") {\n const backend = backendPolicy(metadata.backendConfigPath);\n return { proof: canonical(backend), backend };\n }\n if (step.kind === \"backend-delete\") {\n if (!pathEntryIsAbsent(metadata.backendConfigPath)) {\n const backend = backendPolicy(metadata.backendConfigPath);\n return { proof: canonical(backend), backend };\n }\n const parent = privateDirectoryProof(dirname(metadata.backendConfigPath), \"managed backend directory is invalid\");\n return { proof: canonical(observedBackendAbsentProof(metadata.backendConfigPath, parent)) };\n }\n if (step.kind === \"metadata\") {\n return { proof: metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) };\n }\n if (step.kind === \"metadata-delete\") {\n const metadataPath = managedClientMetadataPath(metadata.runtime, metadata.instance, env);\n if (!pathEntryIsAbsent(metadataPath)) {\n return { proof: metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) };\n }\n const parent = privateDirectoryProof(dirname(metadataPath), \"managed metadata directory is invalid\");\n return { proof: canonical(observedMetadataAbsentProof(metadata.runtime, metadata.instance, env, parent)) };\n }\n const registrationRole = phase === \"after\"\n ? step.afterRegistrationMetadata ?? step.registrationMetadata\n : step.registrationMetadata;\n const registrationMetadata = registrationRole === \"source\" ? metadata : target;\n const alternateArgs = registrationRole === \"source\" ? target.launch.args : metadata.launch.args;\n return {\n proof: registrationProof(observeManagedRegistration(\n registrationMetadata, execute, env, alternateArgs,\n )),\n };\n}\n\nfunction applyStep(\n step: PlannedStep,\n observed: ObservedStep,\n metadata: ManagedClientMetadata,\n target: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n operationId: string,\n stepIndex: number,\n desktopHooks?: DesktopMaintenanceHooks,\n afterBackendPin?: () => void,\n): void {\n if (step.kind === \"backend\") {\n if (!observed.backend) throw new Error(\"backend proof is unavailable\");\n tightenBackendPolicy(metadata.backendConfigPath, observed.backend, afterBackendPin);\n return;\n }\n if (step.kind === \"backend-delete\") {\n if (!observed.backend) throw new Error(\"backend proof is unavailable\");\n deleteBackend(metadata.backendConfigPath, observed.backend);\n return;\n }\n const beforeRegistration = step.registrationMetadata === \"source\" ? metadata : target;\n const afterRegistration = step.afterRegistrationMetadata === \"source\" ? metadata : target;\n if (step.kind === \"native-remove\") return nativeExecute(beforeRegistration, \"remove\", execute, env);\n if (step.kind === \"native-add\") return nativeExecute(afterRegistration, \"add\", execute, env);\n if (step.kind === \"desktop-replace\") return mutateDesktopRegistration(afterRegistration, operationId, stepIndex, \"replace\", desktopHooks);\n if (step.kind === \"desktop-remove\") return mutateDesktopRegistration(target, operationId, stepIndex, \"remove\", desktopHooks);\n if (step.kind === \"metadata-delete\") {\n deleteManagedClientMetadata(metadata, env);\n return;\n }\n const current = loadManagedClientMetadata(metadata.runtime, metadata.instance, env);\n if (!isDeepStrictEqual(current, metadata)) throw new Error(\"managed metadata changed before update\");\n writeManagedClientMetadata(managedClientMetadataPath(target.runtime, target.instance, env), target);\n const after = loadManagedClientMetadata(target.runtime, target.instance, env);\n if (!isDeepStrictEqual(after, target)) throw new Error(\"managed metadata update was not verified\");\n}\n\n/** Remove a native registration as one crash-classifiable journal step. */\nexport function removeManagedClientRegistration(\n before: ManagedClientMetadata,\n execute: ClientLifecycleExecutor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (before.runtime === \"claude-desktop\") throw new Error(\"Desktop registration removal is not a cutover transition\");\n const observed = observeManagedRegistration(before, execute, env);\n if (observed.state !== \"exact\") throw new Error(\"managed registration changed before endpoint cutover\");\n nativeExecute(before, \"remove\", execute, env);\n if (observeManagedRegistration(before, execute, env).state !== \"absent\") {\n throw new Error(\"managed registration removal was not verified\");\n }\n}\n\n/** Add a native registration as one crash-classifiable journal step. */\nexport function addManagedClientRegistration(\n after: ManagedClientMetadata,\n execute: ClientLifecycleExecutor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (after.runtime === \"claude-desktop\") throw new Error(\"Desktop registration add is not a cutover transition\");\n if (observeManagedRegistration(after, execute, env).state !== \"absent\") {\n throw new Error(\"managed registration is not absent before endpoint cutover\");\n }\n nativeExecute(after, \"add\", execute, env);\n const verified = observeManagedRegistration(after, execute, env);\n if (verified.state !== \"exact\") throw new Error(\"managed registration add was not verified\");\n}\n\n/** Desktop applies a bounded JSON replacement through its atomic publish path. */\nexport function replaceManagedDesktopRegistration(\n before: ManagedClientMetadata,\n after: ManagedClientMetadata,\n operationId: string,\n stepIndex: number,\n execute: ClientLifecycleExecutor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (before.runtime !== \"claude-desktop\" || after.runtime !== \"claude-desktop\"\n || before.instance !== after.instance || before.identity !== after.identity) {\n throw new Error(\"Desktop registration switch does not preserve client identity\");\n }\n if (observeManagedRegistration(before, execute, env).state !== \"exact\") {\n throw new Error(\"managed registration changed before endpoint cutover\");\n }\n mutateDesktopRegistration(after, operationId, stepIndex, \"replace\");\n if (observeManagedRegistration(after, execute, env).state !== \"exact\") {\n throw new Error(\"Desktop registration switch was not verified\");\n }\n}\n\n/** Write and immediately re-read the bounded management metadata after a verified switch. */\nexport function switchManagedClientMetadata(\n before: ManagedClientMetadata,\n after: ManagedClientMetadata,\n env: NodeJS.ProcessEnv = process.env,\n): void {\n const current = loadManagedClientMetadata(before.runtime, before.instance, env);\n if (!isDeepStrictEqual(current, before)) throw new Error(\"managed metadata changed before endpoint cutover\");\n writeManagedClientMetadata(managedClientMetadataPath(after.runtime, after.instance, env), after);\n if (!isDeepStrictEqual(loadManagedClientMetadata(after.runtime, after.instance, env), after)) {\n throw new Error(\"managed metadata switch was not verified\");\n }\n}\n\nfunction resumeAction(\n metadata: ManagedClientMetadata,\n manifest: ClientOperationManifest,\n command: string | undefined,\n env: NodeJS.ProcessEnv,\n action: \"repair\" | \"update\" | \"uninstall\",\n): ManagedClientMetadata {\n if (manifest.runtime !== metadata.runtime || manifest.instance !== metadata.instance) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n if (manifest.version !== 3 && manifest.version !== 4) {\n throw new Error(\"--resume requires an identity-bound operation request\");\n }\n if (action === \"repair\") {\n if (manifest.version !== 3 || !manifest.request || manifest.request.kind !== \"repair\" || !(\"identity\" in manifest.request)\n || manifest.request.identity !== metadata.identity) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n if (command !== undefined) throw new Error(\"--command is not valid for clients repair\");\n return metadata;\n }\n if (action === \"uninstall\") {\n if (manifest.version !== 3 || !manifest.request || manifest.request.kind !== \"uninstall\" || !(\"identity\" in manifest.request)\n || manifest.request.identity !== metadata.identity) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n if (command !== undefined) throw new Error(\"--command is not valid for clients uninstall\");\n return metadata;\n }\n if (!manifest.request || manifest.request.kind !== \"update\" || !(\"identity\" in manifest.request)\n || !(\"launch\" in manifest.request) || manifest.request.identity !== metadata.identity) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n const recorded = manifest.request.launch;\n if (manifest.version === 4) assertRollbackContract(manifest.request.rollback!, metadata.runtime, metadata.instance);\n if (metadata.runtime === \"claude-desktop\") {\n const resolved = recorded.args.length === 0\n ? resolveDesktopLaunchContract(recorded.command, env)\n : resolveDesktopLaunchContract(undefined, env);\n if (resolved.command !== recorded.command || !isDeepStrictEqual(resolved.args, recorded.args)) {\n throw new Error(\"recorded Desktop update launch is invalid\");\n }\n }\n if (command !== undefined) {\n const supplied = resolveUpdateLaunch(metadata, command, env);\n if (!isDeepStrictEqual(supplied, recorded)) {\n throw new Error(\"--command does not match the recorded update request\");\n }\n }\n return updateMetadata(metadata, recorded);\n}\n\nfunction planResult(\n action: \"repair\" | \"update\" | \"uninstall\" | \"rollback\" | \"none\", applied: boolean, metadata: ManagedClientMetadata,\n steps: PlannedStep[], env: NodeJS.ProcessEnv, operationId?: string,\n): ClientMaintenancePlan {\n return {\n schemaVersion: 1, action, applied, operationId, runtime: metadata.runtime,\n instance: metadata.instance, identity: metadata.identity,\n metadataPath: managedClientMetadataPath(metadata.runtime, metadata.instance, env),\n steps: steps.map((step) => ({ target: step.target, action: step.kind })),\n };\n}\n\n/**\n * Repair, update, or forward-only uninstall one metadata-owned registration. The dry-run path does not acquire a lock,\n * create operation state, or touch the registration, backend, or metadata file.\n */\nexport function maintainManagedClient(options: ClientMaintenanceOptions): ClientMaintenancePlan {\n assertRuntime(options.runtime);\n const env = options.env ?? process.env;\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }));\n const metadata = loadManagedClientMetadata(options.runtime, options.instance, env);\n assertIdentity(metadata, options.identity);\n const authority = metadataProof(metadata);\n const requestedAction = options.action;\n if (requestedAction === \"uninstall\") assertUninstallPathIsolation(metadata, env);\n const manifest = options.resume ? readClientOperation(options.resume, env) : undefined;\n const target = manifest\n ? resumeAction(metadata, manifest, options.command, env, requestedAction)\n : requestedAction === \"update\"\n ? updateMetadata(metadata, resolveUpdateLaunch(metadata, options.command, env))\n : metadata;\n const steps = options.resume && options.apply ? []\n : requestedAction === \"uninstall\"\n ? buildUninstallPlan(metadata, execute, env)\n : buildPlan(metadata, target, execute, env);\n if (!options.apply) {\n if (options.resume || options.recoverLock) throw new Error(\"--resume and --recover-lock require --apply\");\n return planResult(steps.length === 0 ? \"none\" : requestedAction, false, metadata, steps, env);\n }\n if (options.recoverLock) recoverClientOperationLock(metadata.runtime, metadata.instance, env);\n if (steps.length === 0 && !options.resume) return planResult(\"none\", false, metadata, steps, env);\n const begun = options.resume\n ? resumeClientOperation(options.resume, env)\n : beginClientOperation({\n version: requestedAction === \"update\" ? 4 : 3,\n request: requestedAction === \"repair\"\n ? { kind: \"repair\", identity: metadata.identity }\n : requestedAction === \"update\"\n ? {\n kind: \"update\", identity: metadata.identity, launch: operationLaunch(target),\n rollback: rollbackContract(metadata, target),\n }\n : { kind: \"uninstall\", identity: metadata.identity },\n runtime: metadata.runtime, instance: metadata.instance,\n steps: steps.map((step, index) => ({\n target: step.target, locator: step.locator,\n beforeArtifact: `step-${index}.before`, afterArtifact: `step-${index}.after`,\n expectedBeforeSha256: digest(step.before), expectedAfterSha256: digest(step.after),\n })),\n }, env);\n let current = begun.manifest;\n try {\n options.testHooks?.afterLock?.();\n assertCurrentOperationManifest(current, env);\n if (metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) !== authority) {\n throw new Error(\"managed metadata changed while acquiring the client lock\");\n }\n const recordedSteps = options.resume && current.state !== \"prepared\"\n ? executionStepsFromManifest(current, target, requestedAction)\n : requestedAction === \"uninstall\"\n ? buildUninstallPlan(metadata, execute, env)\n : buildPlan(metadata, target, execute, env);\n if (recordedSteps.length !== current.steps.length) {\n throw new Error(\"operation request no longer matches the managed client state\");\n }\n if (current.state === \"prepared\") {\n if (recordedSteps.some((step, index) => digest(step.before) !== current.steps[index]?.expectedBeforeSha256\n || digest(step.after) !== current.steps[index]?.expectedAfterSha256)) {\n throw new Error(\"operation request no longer matches the managed client state\");\n }\n for (let index = 0; index < recordedSteps.length; index += 1) {\n current = writeClientOperationSnapshot(\n current.operationId, current, `step-${index}.before`, recordedSteps[index]!.before, begun.lock, env,\n );\n }\n current = transitionClientOperation(current.operationId, current, \"snapshotted\", begun.lock, env);\n }\n for (let index = 0; index < recordedSteps.length; index += 1) {\n const step = recordedSteps[index]!;\n const journalStep = current.steps[index]!;\n if (step.kind !== \"metadata\"\n && metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) !== authority) {\n throw new Error(\"managed metadata changed before a client mutation\");\n }\n let actual = observedProof(step, metadata, target, execute, env, \"before\");\n let intentAlreadyRecorded = false;\n if (journalStep.state === \"intent-recorded\") {\n let classification = classifyClientOperationRestart(current, digest(actual.proof));\n if (classification.disposition === \"blocked\" && step.afterRegistrationMetadata\n && step.afterRegistrationMetadata !== step.registrationMetadata) {\n const after = observedProof(step, metadata, target, execute, env, \"after\");\n const afterClassification = classifyClientOperationRestart(current, digest(after.proof));\n if (afterClassification.disposition === \"advance\") {\n actual = after;\n classification = afterClassification;\n }\n }\n if (classification.disposition === \"advance\") {\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n continue;\n }\n if (classification.disposition !== \"retryable\") throw new Error(classification.reason);\n intentAlreadyRecorded = true;\n } else if (journalStep.state === \"observed-applied\") {\n const supersededByLaterStep = current.steps.slice(index + 1)\n .some((later) => later.target === journalStep.target && later.state !== \"pending\");\n if (supersededByLaterStep) continue;\n actual = observedProof(step, metadata, target, execute, env, \"after\");\n if (digest(actual.proof) !== journalStep.expectedAfterSha256) {\n throw new Error(`completed operation step ${index} no longer matches its after-state`);\n }\n continue;\n } else if (digest(actual.proof) !== journalStep.expectedBeforeSha256) {\n throw new Error(\"operation step no longer matches its before-state\");\n }\n if (!intentAlreadyRecorded) {\n current = recordClientOperationStepIntent(current.operationId, current, index, begun.lock, env);\n }\n options.testHooks?.beforeApply?.({ target: step.target, action: step.kind });\n assertCurrentOperationManifest(current, env);\n applyStep(\n step, actual, metadata, target, execute, env, current.operationId, index,\n options.testHooks?.desktop, options.testHooks?.afterBackendPin,\n );\n options.testHooks?.afterApply?.({ target: step.target, action: step.kind });\n actual = observedProof(step, metadata, target, execute, env, \"after\");\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n }\n current = completeClientOperationCleanup(current.operationId, current, begun.lock, env);\n return planResult(requestedAction, true, target, recordedSteps, env, current.operationId);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\nfunction uninstallStepAction(step: { target: \"registration\" | \"backend\" | \"metadata\" }, runtime: InstallableRuntime): PlannedKind {\n if (step.target === \"registration\") return runtime === \"claude-desktop\" ? \"desktop-remove\" : \"native-remove\";\n return step.target === \"backend\" ? \"backend-delete\" : \"metadata-delete\";\n}\n\nfunction resumeUninstallAfterMetadataDeletion(\n manifest: ClientOperationManifest,\n identity: string,\n options: ClientMaintenanceResumeOptions,\n): ClientMaintenancePlan {\n const env = options.env ?? process.env;\n if (options.recoverLock) recoverClientOperationLock(manifest.runtime, manifest.instance, env);\n const begun = resumeClientOperation(manifest.operationId, env);\n let current = begun.manifest;\n const steps = current.steps.map((step) => ({\n target: step.target as \"registration\" | \"backend\" | \"metadata\",\n action: uninstallStepAction(step as { target: \"registration\" | \"backend\" | \"metadata\" }, current.runtime),\n }));\n try {\n if (current.version !== 3 || !current.request || current.request.kind !== \"uninstall\"\n || !(\"identity\" in current.request) || current.request.identity !== identity) {\n throw new Error(\"operation is not an identity-bound uninstall request\");\n }\n const pending = current.steps.find((step) => step.state !== \"observed-applied\");\n if (pending) {\n const earlierComplete = current.steps.slice(0, pending.index).every((step) => step.state === \"observed-applied\");\n if (!earlierComplete || pending.target !== \"metadata\" || pending.state !== \"intent-recorded\") {\n throw new Error(\"managed metadata is missing before uninstall reached its final deletion step\");\n }\n const metadataPath = managedClientMetadataPath(current.runtime, current.instance, env);\n if (!pathEntryIsAbsent(metadataPath)) throw new Error(\"managed metadata reappeared during uninstall resume\");\n const parent = privateDirectoryProof(dirname(metadataPath), \"managed metadata directory is invalid\");\n const actual = canonical(observedMetadataAbsentProof(current.runtime, current.instance, env, parent));\n const classification = classifyClientOperationRestart(current, digest(actual));\n if (classification.disposition !== \"advance\") throw new Error(classification.reason);\n current = recordClientOperationStepApplied(\n current.operationId, current, pending.index, actual, begun.lock, env,\n );\n }\n current = completeClientOperationCleanup(current.operationId, current, begun.lock, env);\n return {\n schemaVersion: 1, action: \"uninstall\", applied: true, operationId: current.operationId,\n runtime: manifest.runtime, instance: manifest.instance, identity,\n metadataPath: managedClientMetadataPath(manifest.runtime, manifest.instance, env), steps,\n };\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\nfunction loadRollbackSource(\n sourceOperationId: string,\n identity: string,\n env: NodeJS.ProcessEnv,\n): { source: ClientOperationManifest; contract: ClientOperationRollbackContract; prior: ManagedClientMetadata } {\n const source = readClientOperation(sourceOperationId, env);\n if (source.state !== \"committed\" || source.version !== 4 || source.host !== hostname()) {\n throw new Error(\"rollback source must be a committed same-host v4 update\");\n }\n if (source.completion?.operation !== \"update\" || !source.completion.rollback) {\n throw new Error(\"rollback source does not retain an update inverse contract\");\n }\n const contract = source.completion.rollback;\n const { prior } = assertRollbackContract(contract, source.runtime, source.instance);\n if (!identity || identity.trim() !== identity || identity !== contract.identity) {\n throw new Error(\"--identity must exactly match the rollback source\");\n }\n return { source, contract, prior };\n}\n\nfunction assertRollbackOperationAuthority(\n manifest: ClientOperationManifest,\n sourceOperationId: string,\n identity: string,\n contract: ClientOperationRollbackContract,\n): void {\n if (manifest.version !== 4 || manifest.request?.kind !== \"rollback\"\n || manifest.request.sourceOperationId !== sourceOperationId\n || manifest.request.identity !== identity\n || canonical(manifest.request.rollback) !== canonical(contract)) {\n throw new Error(\"locked rollback operation no longer matches its committed update authority\");\n }\n}\n\nfunction rollbackPlanResult(\n applied: boolean,\n metadata: ManagedClientMetadata,\n steps: PlannedStep[],\n env: NodeJS.ProcessEnv,\n operationId?: string,\n): ClientMaintenancePlan {\n return planResult(\"rollback\", applied, metadata, steps, env, operationId);\n}\n\nfunction runManagedClientRollback(\n options: ClientRollbackOptions,\n resumeOperationId?: string,\n): ClientMaintenancePlan {\n const env = options.env ?? process.env;\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }));\n const reverse = resumeOperationId ? readClientOperation(resumeOperationId, env) : null;\n let sourceOperationId = options.sourceOperationId;\n let identity = options.identity;\n if (reverse) {\n if (reverse.version !== 4 || !reverse.request || reverse.request.kind !== \"rollback\") {\n throw new Error(\"operation is not a resumable rollback request\");\n }\n sourceOperationId = reverse.request.sourceOperationId;\n identity = reverse.request.identity;\n }\n const { source, contract, prior } = loadRollbackSource(sourceOperationId, identity, env);\n const reverseRequest = reverse?.request?.kind === \"rollback\" ? reverse.request : null;\n if (reverseRequest && canonical(reverseRequest.rollback) !== canonical(contract)) {\n throw new Error(\"rollback request no longer matches its committed source\");\n }\n const metadataStepApplied = rollbackMetadataReachedAfterState(reverse, prior, env);\n const forward = metadataStepApplied ? prior : loadManagedClientMetadata(source.runtime, source.instance, env);\n const registrationHasProgress = rollbackRegistrationHasProgress(reverse);\n if (!metadataStepApplied) {\n assertForwardRollbackMetadataState(forward, contract);\n if (!registrationHasProgress) assertForwardRollbackRegistrationState(forward, contract, execute, env);\n }\n const steps = reverse && reverse.state !== \"prepared\"\n ? rollbackExecutionStepsFromManifest(reverse, prior)\n : buildRollbackPlan(forward, prior);\n if (!options.apply) {\n if (options.recoverLock) throw new Error(\"--recover-lock requires --apply\");\n return rollbackPlanResult(false, forward, steps, env);\n }\n if (options.recoverLock) recoverClientOperationLock(source.runtime, source.instance, env);\n options.testHooks?.beforeOperationBegin?.();\n const begun = reverse\n ? resumeClientOperation(reverse.operationId, env)\n : beginClientOperation({\n version: 4,\n request: { kind: \"rollback\", identity, sourceOperationId: source.operationId, rollback: contract },\n runtime: source.runtime, instance: source.instance,\n steps: steps.map((step, index) => ({\n target: step.target, locator: step.locator,\n beforeArtifact: `step-${index}.before`, afterArtifact: `step-${index}.after`,\n expectedBeforeSha256: digest(step.before), expectedAfterSha256: digest(step.after),\n })),\n }, env);\n let current = begun.manifest;\n try {\n assertRollbackOperationAuthority(current, source.operationId, identity, contract);\n options.testHooks?.afterLock?.();\n assertCurrentOperationManifest(current, env);\n const refreshed = loadRollbackSource(source.operationId, identity, env);\n if (canonical(refreshed.contract) !== canonical(contract)) {\n throw new Error(\"rollback source changed while acquiring the client lock\");\n }\n const metadataApplied = rollbackMetadataReachedAfterState(current, prior, env);\n const currentForward = metadataApplied ? prior : loadManagedClientMetadata(source.runtime, source.instance, env);\n const currentRegistrationHasProgress = rollbackRegistrationHasProgress(current);\n if (!metadataApplied) {\n assertForwardRollbackMetadataState(currentForward, contract);\n if (!currentRegistrationHasProgress) assertForwardRollbackRegistrationState(currentForward, contract, execute, env);\n }\n const recordedSteps = current.state === \"prepared\"\n ? buildRollbackPlan(currentForward, prior)\n : rollbackExecutionStepsFromManifest(current, prior);\n if (recordedSteps.length !== current.steps.length) {\n throw new Error(\"rollback request no longer matches the recorded operation plan\");\n }\n if (current.state === \"prepared\") {\n if (recordedSteps.some((step, index) => digest(step.before) !== current.steps[index]?.expectedBeforeSha256\n || digest(step.after) !== current.steps[index]?.expectedAfterSha256)) {\n throw new Error(\"rollback request no longer matches the forward update state\");\n }\n for (let index = 0; index < recordedSteps.length; index += 1) {\n current = writeClientOperationSnapshot(\n current.operationId, current, `step-${index}.before`, recordedSteps[index]!.before, begun.lock, env,\n );\n }\n current = transitionClientOperation(current.operationId, current, \"snapshotted\", begun.lock, env);\n }\n const forwardMetadataAuthority = contract.forwardMetadataSha256;\n for (let index = 0; index < recordedSteps.length; index += 1) {\n const step = recordedSteps[index]!;\n const journalStep = current.steps[index]!;\n if (step.kind !== \"metadata\" && journalStep.state !== \"observed-applied\"\n && digest(metadataProof(loadManagedClientMetadata(source.runtime, source.instance, env))) !== forwardMetadataAuthority) {\n throw new Error(\"managed metadata changed before rollback mutated a client registration\");\n }\n let actual = observedProof(step, currentForward, prior, execute, env, \"before\");\n let intentAlreadyRecorded = false;\n if (journalStep.state === \"intent-recorded\") {\n let classification = classifyClientOperationRestart(current, digest(actual.proof));\n if (classification.disposition === \"blocked\" && step.afterRegistrationMetadata\n && step.afterRegistrationMetadata !== step.registrationMetadata) {\n const after = observedProof(step, currentForward, prior, execute, env, \"after\");\n const afterClassification = classifyClientOperationRestart(current, digest(after.proof));\n if (afterClassification.disposition === \"advance\") {\n actual = after;\n classification = afterClassification;\n }\n }\n if (classification.disposition === \"advance\") {\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n continue;\n }\n if (classification.disposition !== \"retryable\") throw new Error(classification.reason);\n intentAlreadyRecorded = true;\n } else if (journalStep.state === \"observed-applied\") {\n const supersededByLaterStep = current.steps.slice(index + 1)\n .some((later) => later.target === journalStep.target && later.state !== \"pending\");\n if (supersededByLaterStep) continue;\n actual = observedProof(step, currentForward, prior, execute, env, \"after\");\n if (digest(actual.proof) !== journalStep.expectedAfterSha256) {\n throw new Error(`completed rollback step ${index} no longer matches its after-state`);\n }\n continue;\n } else if (digest(actual.proof) !== journalStep.expectedBeforeSha256) {\n throw new Error(\"rollback step no longer matches its before-state\");\n }\n if (!intentAlreadyRecorded) {\n current = recordClientOperationStepIntent(current.operationId, current, index, begun.lock, env);\n }\n options.testHooks?.beforeApply?.({ target: step.target, action: step.kind });\n assertCurrentOperationManifest(current, env);\n applyStep(\n step, actual, currentForward, prior, execute, env, current.operationId, index,\n options.testHooks?.desktop, options.testHooks?.afterBackendPin,\n );\n options.testHooks?.afterApply?.({ target: step.target, action: step.kind });\n actual = observedProof(step, currentForward, prior, execute, env, \"after\");\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n }\n current = completeClientOperationCleanup(current.operationId, current, begun.lock, env);\n return rollbackPlanResult(true, prior, recordedSteps, env, current.operationId);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\n/** Plan or explicitly apply one update-only reverse journal. */\nexport function rollbackManagedClient(options: ClientRollbackOptions): ClientMaintenancePlan {\n return runManagedClientRollback(options);\n}\n\n/** Resume exactly one supported managed-client operation using recorded authority only. */\nexport function resumeManagedClientOperation(options: ClientMaintenanceResumeOptions): ClientMaintenancePlan {\n const env = options.env ?? process.env;\n const manifest = readClientOperation(options.operationId, env);\n if (manifest.version === 4 && manifest.request?.kind === \"rollback\") {\n return runManagedClientRollback({\n sourceOperationId: manifest.request.sourceOperationId, identity: manifest.request.identity,\n apply: true, recoverLock: options.recoverLock, env, execute: options.execute, testHooks: options.testHooks,\n }, manifest.operationId);\n }\n if (!manifest.request || ![\"repair\", \"update\", \"uninstall\"].includes(manifest.request.kind)\n || !(\"identity\" in manifest.request)\n || (manifest.version !== 3 && manifest.version !== 4)\n || (manifest.version === 4 && manifest.request.kind !== \"update\")) {\n throw new Error(\"operation is not a resumable identity-bound managed client request\");\n }\n const action = manifest.request.kind as \"repair\" | \"update\" | \"uninstall\";\n const identity = manifest.request.identity;\n const metadataPath = managedClientMetadataPath(manifest.runtime, manifest.instance, env);\n if (action === \"uninstall\" && pathEntryIsAbsent(metadataPath)) {\n return resumeUninstallAfterMetadataDeletion(manifest, identity, options);\n }\n return maintainManagedClient({\n action, runtime: manifest.runtime, instance: manifest.instance, identity,\n apply: true, resume: manifest.operationId, recoverLock: options.recoverLock,\n env, execute: options.execute, testHooks: options.testHooks,\n });\n}\n\nexport function repairManagedClient(options: Omit<ClientMaintenanceOptions, \"command\" | \"action\">): ClientMaintenancePlan {\n return maintainManagedClient({ ...options, action: \"repair\" });\n}\n\nexport function updateManagedClient(options: Omit<ClientMaintenanceOptions, \"action\">): ClientMaintenancePlan {\n return maintainManagedClient({ ...options, action: \"update\" });\n}\n\nexport function uninstallManagedClient(options: Omit<ClientMaintenanceOptions, \"command\" | \"action\">): ClientMaintenancePlan {\n return maintainManagedClient({ ...options, action: \"uninstall\" });\n}\n","import {\n closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync,\n linkSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir, hostname } from \"node:os\";\nimport { basename, dirname, isAbsolute, join, parse, relative, resolve, sep } from \"node:path\";\nimport {\n createPrivateDirectoryAccessCache, PrivatePathError, securePrivatePath, type PrivateDirectoryAccessCache,\n verifyPrivatePathAccess,\n} from \"./private-path.js\";\nimport type { InstallableRuntime } from \"./client-installer.js\";\n\nexport const CLIENT_OPERATION_SCHEMA = \"agent-bridge.client-operation\";\nexport const CLIENT_OPERATION_VERSION = 6;\nexport type ClientOperationVersion = 2 | 3 | 4 | 5 | typeof CLIENT_OPERATION_VERSION;\nexport type ClientOperationState =\n | \"prepared\" | \"snapshotted\" | \"in-progress\" | \"applied\" | \"cleaning\" | \"committed\";\nexport type ClientOperationKind = \"repair\" | \"update\" | \"uninstall\" | \"rollback\" | \"migrate\"\n | \"migrate-cutover\" | \"migrate-finalize\";\nexport interface ClientOperationLaunch {\n command: string;\n args: string[];\n scope: \"local\" | \"user\" | \"project\" | null;\n envKeys: [\"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\"];\n}\nexport interface ClientOperationManagedMetadata {\n schema: \"agent-bridge.client-management\";\n version: 1;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: { command: string; args: string[]; scope: \"local\" | \"user\" | \"project\" | null };\n locator:\n | { kind: \"codex-profile\"; configPath: string }\n | { kind: \"claude-code-scope\"; scope: \"local\" | \"user\" | \"project\"; contextPath: string | null }\n | { kind: \"claude-desktop-config\"; configPath: string };\n}\nexport interface ClientOperationRegistrationProof {\n state: \"exact\";\n target: {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: ClientOperationManagedMetadata[\"launch\"];\n locator: ClientOperationManagedMetadata[\"locator\"];\n };\n observed: {\n state: \"present\";\n command: string;\n args: string[];\n env: {\n AGENT_BRIDGE_AGENT: string;\n AGENT_BRIDGE_CONFIG: string;\n AGENT_BRIDGE_INSTANCE: string;\n };\n };\n}\nexport interface ClientOperationRollbackContract {\n schema: \"agent-bridge.client-update-rollback\";\n version: 1;\n identity: string;\n priorMetadata: ClientOperationManagedMetadata;\n priorRegistration: ClientOperationRegistrationProof;\n forwardMetadataSha256: string;\n forwardRegistrationSha256: string;\n}\n/** Credential-free request for a staged gateway target. It never authorizes a host switch. */\nexport interface ClientMigrationStageRequest {\n kind: \"migrate\";\n identity: string;\n enrollmentPath: string;\n enrollmentRequestId: string;\n sourceBackendPath: string;\n sourceEdgeDatabasePath: string;\n sourceScopeKey: string;\n targetBackendPath: string;\n stageRecordPath: string;\n predecessorGraceUntil: string;\n targetWorkspace: string;\n sourceEndpointSha256: string;\n targetEndpointSha256: string;\n predecessorCredentialId: string;\n successorCredentialId: string;\n}\n/** Credential-free authority for one v6 endpoint transition. */\nexport interface ClientMigrationCutoverRequest extends Omit<ClientMigrationStageRequest, \"kind\"> {\n kind: \"migrate-cutover\" | \"migrate-finalize\";\n /** The manifest ID selected before the request is journaled. */\n migrationOperationId: string;\n stageOperationId: string;\n /** The completed forward cutover that authorizes finalization. */\n sourceCutoverOperationId: string | null;\n /** Exact target edge selected from the staged private backend before journaling. */\n targetEdgeDatabasePath: string;\n /** Credential-free normalized source route retained for successor-only recovery. */\n sourceGatewayUrl: string;\n gatewayAuthorityId: string;\n /** Operator acknowledgement that unmanaged publishers cannot be enumerated. */\n exclusiveEdgeAssertion: true;\n /** The bounded v5 source of authority. It is retained through every v6 phase. */\n stageContract: ClientMigrationStageContract;\n /** Full credential-free source and target registration contracts. */\n sourceMetadata: ClientOperationManagedMetadata;\n targetMetadata: ClientOperationManagedMetadata;\n sourceRegistration: ClientOperationRegistrationProof;\n targetRegistration: ClientOperationRegistrationProof;\n sourceMetadataSha256: string;\n targetMetadataSha256: string;\n sourceRegistrationSha256: string;\n targetRegistrationSha256: string;\n}\n/** Immutable, credential-free bridge from an inert v5 stage into v6. */\nexport interface ClientMigrationStageContract {\n schema: \"agent-bridge.client-migration-stage-contract\";\n version: 1;\n stageOperationId: string;\n request: ClientMigrationStageRequest;\n stageRecordSha256: string;\n targetBackendProjectionSha256: string;\n}\nexport type ClientOperationRequest =\n | { kind: \"repair\"; identity: string }\n | { kind: \"update\"; identity: string; launch: ClientOperationLaunch; rollback?: ClientOperationRollbackContract }\n | { kind: \"uninstall\"; identity: string }\n | { kind: \"rollback\"; identity: string; sourceOperationId: string; rollback: ClientOperationRollbackContract }\n | ClientMigrationStageRequest\n | ClientMigrationCutoverRequest;\ntype LegacyClientOperationRequest =\n | { kind: \"repair\" }\n | { kind: \"update\"; release: string }\n | { kind: \"uninstall\" }\n | { kind: \"migrate\"; endpoint: string; workspace: string };\ntype RecordedClientOperationRequest = ClientOperationRequest | LegacyClientOperationRequest;\nexport interface ClientOperationCompletion {\n operation: ClientOperationKind;\n stepCount: number;\n completedAt: string;\n cleanupDirectoryDurability: \"durable\" | \"unavailable\";\n rollback?: ClientOperationRollbackContract | null;\n /** Retains only credential-free v5/v6 migration authority after cleanup. */\n migration?: ClientMigrationStageContract | ClientMigrationCutoverRequest | null;\n}\nexport type ClientOperationTargetKind = \"registration\" | \"backend\" | \"metadata\"\n | \"stage-backend\" | \"stage-record\" | \"enrollment\" | \"edge-gate\";\nexport type ClientOperationStepState = \"pending\" | \"intent-recorded\" | \"observed-applied\";\n\nexport interface ClientOperationStep {\n index: number;\n target: ClientOperationTargetKind;\n locator: string;\n beforeArtifact: string;\n afterArtifact: string;\n expectedBeforeSha256: string;\n expectedAfterSha256: string;\n state: ClientOperationStepState;\n intentRecordedAt: string | null;\n observedAppliedAt: string | null;\n}\n\nexport interface ClientOperationArtifact {\n name: string;\n stepIndex: number;\n phase: \"before\" | \"after\";\n bytes: number;\n sha256: string;\n cleanupIntentAt: string | null;\n removedAt: string | null;\n directoryDurability: \"durable\" | \"unavailable\" | null;\n}\n\nexport interface ClientOperationManifest {\n schema: typeof CLIENT_OPERATION_SCHEMA;\n version: ClientOperationVersion;\n operationId: string;\n request: RecordedClientOperationRequest | null;\n runtime: InstallableRuntime;\n instance: string;\n state: ClientOperationState;\n revision: number;\n host: string;\n createdAt: string;\n updatedAt: string;\n completion: ClientOperationCompletion | null;\n artifacts: ClientOperationArtifact[];\n steps: ClientOperationStep[];\n}\n\nexport interface ClientOperationSummary {\n /** Version of the inspected durable manifest, including retained v5 stages. */\n schemaVersion: ClientOperationVersion;\n operationId: string;\n operation: ClientOperationKind | null;\n runtime: InstallableRuntime | null;\n instance: string | null;\n state: ClientOperationState | \"corrupt\";\n inspectionState: \"resumable\" | \"classification-required\" | \"blocked\" | \"complete\";\n revision: number | null;\n createdAt: string | null;\n updatedAt: string | null;\n completedAt: string | null;\n cleanupDirectoryDurability: \"durable\" | \"unavailable\" | null;\n artifacts: ClientOperationArtifact[];\n pendingStep: number | null;\n recoverable: boolean;\n reason: string;\n}\n\nexport interface ClientOperationLock {\n readonly runtime: InstallableRuntime;\n readonly instance: string;\n readonly lockPath: string;\n readonly descriptor: number;\n readonly device: number;\n readonly inode: number;\n released: boolean;\n}\n\nexport class ClientOperationError extends Error {\n constructor(readonly code: string, message: string) { super(message); this.name = \"ClientOperationError\"; }\n}\n\nconst operationLockPrivatePathCaches = new WeakMap<ClientOperationLock, PrivateDirectoryAccessCache>();\n\nfunction privatePathCacheForLock(lock: ClientOperationLock): PrivateDirectoryAccessCache {\n const cache = operationLockPrivatePathCaches.get(lock);\n if (!cache) fail(\"LOCK_REPLACED\", \"client lock is no longer held\");\n return cache;\n}\n\nexport type ClientOperationFilesystemEvent =\n | \"before-publish-rename\" | \"after-publish-rename\" | \"before-publish-link\"\n | \"after-publish-link\" | \"before-directory-sync\"\n | \"before-cleanup\" | \"after-snapshot-directory-read\" | \"before-snapshot-file-open\"\n | \"after-snapshots-created\" | \"before-lock-remove\"\n | \"after-cleanup-intent\" | \"before-artifact-unlink\" | \"after-artifact-unlink\"\n | \"after-artifact-directory-sync\" | \"before-cleanup-commit\";\nexport interface ClientOperationFilesystem {\n hook(event: ClientOperationFilesystemEvent, path: string): void;\n link(source: string, target: string): void;\n rename(source: string, target: string): void;\n remove(path: string, options?: { force?: boolean; recursive?: boolean }): void;\n syncDirectory(path: string): void;\n}\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst MAX_MANIFEST_BYTES = 1024 * 1024;\nconst MAX_LOCK_BYTES = 16 * 1024;\nconst MAX_OPERATION_STEPS = 128;\nconst MAX_OPERATION_ARTIFACTS = MAX_OPERATION_STEPS * 2;\nconst MAX_LISTED_OPERATIONS = 1000;\nconst MAX_SNAPSHOT_BYTES = 16 * 1024 * 1024;\nconst MAX_TOTAL_SNAPSHOT_BYTES = 64 * 1024 * 1024;\nconst STATES: ClientOperationState[] = [\"prepared\", \"snapshotted\", \"in-progress\", \"applied\", \"cleaning\", \"committed\"];\nconst OPERATIONS: ClientOperationKind[] = [\n \"repair\", \"update\", \"uninstall\", \"rollback\", \"migrate\",\n \"migrate-cutover\", \"migrate-finalize\",\n];\nconst RUNTIMES: InstallableRuntime[] = [\"codex\", \"claude-code\", \"claude-desktop\"];\nconst RESUMABLE_OPERATION_KINDS: Readonly<Record<ClientOperationVersion, ReadonlySet<ClientOperationKind>>> = {\n 2: new Set(),\n 3: new Set([\"repair\", \"update\", \"uninstall\"]),\n 4: new Set([\"update\", \"rollback\"]),\n 5: new Set([\"migrate\"]),\n 6: new Set([\"migrate-cutover\", \"migrate-finalize\"]),\n};\n\nfunction fail(code: string, message: string): never { throw new ClientOperationError(code, message); }\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\nconst filesystemDefaults: ClientOperationFilesystem = {\n hook: () => {}, link: linkSync, rename: renameSync, remove: rmSync,\n syncDirectory,\n};\nfunction safeText(value: unknown, label: string, maximum = 128): string {\n if (typeof value !== \"string\" || !value || value !== value.trim()\n || value.length > maximum || /[\\u0000-\\u001f\\u007f]/.test(value)) fail(\"INVALID_MANIFEST\", `${label} is invalid`);\n return value;\n}\nfunction safeIdentity(value: unknown): string {\n return safeText(value, \"identity\", 128);\n}\nfunction safeNativeLaunchCommand(value: unknown): string {\n const command = safeText(value, \"launch command\", 1024);\n if (/[?=#]/.test(command) || /:\\/\\//.test(command)\n || (!isAbsolute(command) && /\\s/.test(command))) {\n fail(\"INVALID_MANIFEST\", \"launch command is invalid\");\n }\n return command;\n}\nfunction rejectLinks(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const part of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, part);\n try {\n if (lstatSync(current).isSymbolicLink()) fail(\"INSECURE_PATH\", \"operation paths cannot contain links\");\n } catch (error) {\n if (error instanceof ClientOperationError) throw error;\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") break;\n fail(\"INSECURE_PATH\", \"operation path ancestry is unavailable\");\n }\n }\n}\nfunction privateDirectory(path: string, cache?: PrivateDirectoryAccessCache): { device: number; inode: number } {\n rejectLinks(path);\n let details;\n try { details = lstatSync(path); } catch { fail(\"INSECURE_PATH\", \"operation directory is unavailable\"); }\n if (!details.isDirectory() || details.isSymbolicLink()) fail(\"INSECURE_PATH\", \"operation directory is invalid\");\n try {\n if (cache) cache.verify(path);\n else verifyPrivatePathAccess(path, \"directory\");\n } catch (error) {\n if (error instanceof PrivatePathError && error.code === \"PATH_REPLACED\") {\n fail(\"PATH_REPLACED\", \"operation directory changed during access\");\n }\n fail(\"INSECURE_PATH\", \"operation directory is not owner-private\");\n }\n return { device: details.dev, inode: details.ino };\n}\nfunction sameDirectory(path: string, identity: { device: number; inode: number }, cache?: PrivateDirectoryAccessCache): void {\n const current = privateDirectory(path, cache);\n if (current.device !== identity.device || current.inode !== identity.inode) {\n fail(\"PATH_REPLACED\", \"operation directory changed during access\");\n }\n}\nfunction prepareDirectory(path: string, cache?: PrivateDirectoryAccessCache): void {\n rejectLinks(path);\n mkdirSync(path, { recursive: true, mode: 0o700 });\n try {\n if (cache) cache.secure(path);\n else securePrivatePath(path, \"directory\");\n } catch { fail(\"INSECURE_PATH\", \"operation directory is not owner-private\"); }\n privateDirectory(path, cache);\n}\n\nexport function clientOperationRoot(env: NodeJS.ProcessEnv = process.env): string {\n if (env.AGENT_BRIDGE_OPERATION_DIR) return resolve(env.AGENT_BRIDGE_OPERATION_DIR);\n return join(realpathSync(env.HOME ?? homedir()), \".agent-bridge\", \"operations\");\n}\nfunction prepareRoot(env: NodeJS.ProcessEnv, cache?: PrivateDirectoryAccessCache): string {\n const root = clientOperationRoot(env);\n prepareDirectory(root, cache);\n prepareDirectory(join(root, \"locks\"), cache);\n return root;\n}\n\ninterface PinnedOperationRoot {\n root: string;\n rootIdentity: { device: number; inode: number };\n locks: string;\n locksIdentity: { device: number; inode: number };\n}\n\nfunction pinOperationRoot(env: NodeJS.ProcessEnv, create: boolean, cache?: PrivateDirectoryAccessCache): PinnedOperationRoot {\n const root = clientOperationRoot(env);\n if (create) prepareRoot(env, cache);\n const rootIdentity = privateDirectory(root, cache);\n const locks = join(root, \"locks\");\n const locksIdentity = privateDirectory(locks, cache);\n sameDirectory(root, rootIdentity, cache);\n return { root, rootIdentity, locks, locksIdentity };\n}\n\nfunction assertPinnedRoot(pinned: PinnedOperationRoot, cache?: PrivateDirectoryAccessCache): void {\n sameDirectory(pinned.root, pinned.rootIdentity, cache);\n sameDirectory(pinned.locks, pinned.locksIdentity, cache);\n}\nfunction operationDirectory(operationId: string, env: NodeJS.ProcessEnv): string {\n if (!UUID.test(operationId)) fail(\"INVALID_OPERATION_ID\", \"operation id is invalid\");\n return join(clientOperationRoot(env), operationId.toLowerCase());\n}\nfunction verifyInsideRoot(path: string, env: NodeJS.ProcessEnv, cache?: PrivateDirectoryAccessCache): void {\n const root = clientOperationRoot(env);\n const inside = relative(root, resolve(path));\n if (!inside || inside === \"..\" || inside.startsWith(`..${sep}`)) fail(\"INSECURE_PATH\", \"operation path is outside the operation root\");\n privateDirectory(root, cache);\n}\nfunction manifestPath(operationId: string, env: NodeJS.ProcessEnv): string {\n return join(operationDirectory(operationId, env), \"manifest.json\");\n}\nfunction validateArtifact(value: unknown): ClientOperationArtifact {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const artifact = value as Record<string, unknown>;\n const name = safeText(artifact.name, \"artifact name\", 80);\n const timestamp = (item: unknown): item is string | null => item === null\n || (typeof item === \"string\" && Number.isFinite(Date.parse(item)));\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name) || name.includes(\"..\")) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (!Number.isSafeInteger(artifact.stepIndex) || Number(artifact.stepIndex) < 0\n || ![\"before\", \"after\"].includes(String(artifact.phase))\n || !Number.isSafeInteger(artifact.bytes) || Number(artifact.bytes) < 0\n || Number(artifact.bytes) > MAX_SNAPSHOT_BYTES\n || typeof artifact.sha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(artifact.sha256)\n || !timestamp(artifact.cleanupIntentAt) || !timestamp(artifact.removedAt)\n || ![null, \"durable\", \"unavailable\"].includes(artifact.directoryDurability as null | string)\n || (artifact.removedAt !== null && artifact.cleanupIntentAt === null)\n || (artifact.removedAt !== null && artifact.directoryDurability === null)\n || (artifact.removedAt === null && artifact.directoryDurability !== null)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n name, stepIndex: Number(artifact.stepIndex), phase: artifact.phase as \"before\" | \"after\",\n bytes: Number(artifact.bytes), sha256: artifact.sha256,\n cleanupIntentAt: artifact.cleanupIntentAt as string | null,\n removedAt: artifact.removedAt as string | null,\n directoryDurability: artifact.directoryDurability as \"durable\" | \"unavailable\" | null,\n };\n}\nfunction validateStep(value: unknown, index: number, version: ClientOperationVersion): ClientOperationStep {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const step = value as Record<string, unknown>;\n const targets: ClientOperationTargetKind[] = version === 5\n ? [\"stage-backend\", \"stage-record\", \"enrollment\"]\n : version === 6\n ? [\"edge-gate\", \"registration\", \"metadata\"]\n : [\"registration\", \"backend\", \"metadata\"];\n const states: ClientOperationStepState[] = [\"pending\", \"intent-recorded\", \"observed-applied\"];\n const locator = safeText(step.locator, \"step locator\", 512);\n const beforeArtifact = safeText(step.beforeArtifact, \"before artifact\", 80);\n const afterArtifact = safeText(step.afterArtifact, \"after artifact\", 80);\n const digest = (item: unknown): item is string => typeof item === \"string\" && /^[0-9a-f]{64}$/.test(item);\n const timestamp = (item: unknown): item is string | null => item === null\n || (typeof item === \"string\" && Number.isFinite(Date.parse(item)));\n if (step.index !== index || !targets.includes(step.target as ClientOperationTargetKind)\n || !states.includes(step.state as ClientOperationStepState)\n || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(beforeArtifact) || beforeArtifact.includes(\"..\")\n || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(afterArtifact) || afterArtifact.includes(\"..\")\n || beforeArtifact === afterArtifact\n || !digest(step.expectedBeforeSha256) || !digest(step.expectedAfterSha256)\n || !timestamp(step.intentRecordedAt) || !timestamp(step.observedAppliedAt)\n || (step.state === \"pending\" && (step.intentRecordedAt !== null || step.observedAppliedAt !== null))\n || (step.state === \"intent-recorded\" && (step.intentRecordedAt === null || step.observedAppliedAt !== null))\n || (step.state === \"observed-applied\" && (step.intentRecordedAt === null || step.observedAppliedAt === null))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n index, target: step.target as ClientOperationTargetKind, locator, beforeArtifact, afterArtifact,\n expectedBeforeSha256: step.expectedBeforeSha256, expectedAfterSha256: step.expectedAfterSha256,\n state: step.state as ClientOperationStepState,\n intentRecordedAt: step.intentRecordedAt as string | null,\n observedAppliedAt: step.observedAppliedAt as string | null,\n };\n}\n\nfunction safeAbsolutePath(value: unknown, label: string): string {\n const path = safeText(value, label, 4096);\n if (!isAbsolute(path) || resolve(path) !== path) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return path;\n}\n\nfunction validateOperationLocator(\n runtime: InstallableRuntime,\n value: unknown,\n): ClientOperationManagedMetadata[\"locator\"] {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const locator = value as Record<string, unknown>;\n if (runtime === \"codex\") {\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\" || locator.kind !== \"codex-profile\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const configPath = safeAbsolutePath(locator.configPath, \"locator configPath\");\n if (!configPath.endsWith(\"/config.toml\") && !configPath.endsWith(\"\\\\config.toml\")) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { kind: \"codex-profile\", configPath };\n }\n if (runtime === \"claude-code\") {\n if (Object.keys(locator).sort().join(\",\") !== \"contextPath,kind,scope\"\n || locator.kind !== \"claude-code-scope\"\n || ![\"local\", \"user\", \"project\"].includes(String(locator.scope))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const scope = locator.scope as \"local\" | \"user\" | \"project\";\n if ((scope === \"user\" && locator.contextPath !== null)\n || (scope !== \"user\" && typeof locator.contextPath !== \"string\")) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n kind: \"claude-code-scope\", scope,\n contextPath: scope === \"user\" ? null : safeAbsolutePath(locator.contextPath, \"locator contextPath\"),\n };\n }\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\" || locator.kind !== \"claude-desktop-config\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { kind: \"claude-desktop-config\", configPath: safeAbsolutePath(locator.configPath, \"locator configPath\") };\n}\n\nfunction validateOperationMetadata(\n value: unknown,\n runtime?: InstallableRuntime,\n instance?: string,\n): ClientOperationManagedMetadata {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const metadata = value as Record<string, unknown>;\n if (Object.keys(metadata).sort().join(\",\")\n !== \"backendConfigPath,identity,instance,launch,locator,runtime,schema,version\"\n || metadata.schema !== \"agent-bridge.client-management\" || metadata.version !== 1\n || !RUNTIMES.includes(metadata.runtime as InstallableRuntime)\n || (runtime !== undefined && metadata.runtime !== runtime)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const recordedRuntime = metadata.runtime as InstallableRuntime;\n const identity = safeIdentity(metadata.identity);\n const recordedInstance = safeText(metadata.instance, \"instance\", 128);\n if (instance !== undefined && recordedInstance !== instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const backendConfigPath = safeAbsolutePath(metadata.backendConfigPath, \"backend config path\");\n if (!metadata.launch || typeof metadata.launch !== \"object\" || Array.isArray(metadata.launch)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const launch = metadata.launch as Record<string, unknown>;\n if (Object.keys(launch).sort().join(\",\") !== \"args,command,scope\"\n || !Array.isArray(launch.args) || launch.args.length > 16\n || launch.args.some((arg) => {\n try { safeText(arg, \"launch argument\", 1024); return false; } catch { return true; }\n })\n || ![null, \"local\", \"user\", \"project\"].includes(launch.scope as null | string)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const locator = validateOperationLocator(recordedRuntime, metadata.locator);\n const command = safeText(launch.command, \"launch command\", 4096);\n const scope = launch.scope as \"local\" | \"user\" | \"project\" | null;\n if ((recordedRuntime !== \"claude-code\" && scope !== null)\n || (recordedRuntime === \"claude-code\"\n && scope !== (locator as Extract<ClientOperationManagedMetadata[\"locator\"], { kind: \"claude-code-scope\" }>).scope)\n || ((recordedRuntime === \"codex\" || recordedRuntime === \"claude-code\") && launch.args.length !== 0)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (recordedRuntime === \"codex\" || recordedRuntime === \"claude-code\") safeNativeLaunchCommand(command);\n if (recordedRuntime === \"claude-desktop\" && !isAbsolute(command)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return {\n schema: \"agent-bridge.client-management\", version: 1, runtime: recordedRuntime, identity, instance: recordedInstance,\n backendConfigPath, launch: { command, args: [...launch.args] as string[], scope }, locator,\n };\n}\n\nfunction canonical(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n if (!value || typeof value !== \"object\") return JSON.stringify(value);\n return `{${Object.keys(value as Record<string, unknown>).sort()\n .map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\n\nfunction sameCanonicalValue(left: unknown, right: unknown): boolean {\n return canonical(left) === canonical(right);\n}\n\nfunction canonicalDigest(value: unknown): string {\n return createHash(\"sha256\").update(canonical(value)).digest(\"hex\");\n}\n\nfunction exactRegistrationProof(metadata: ClientOperationManagedMetadata): ClientOperationRegistrationProof {\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n },\n },\n };\n}\n\nfunction forwardMetadataFromUpdate(\n prior: ClientOperationManagedMetadata,\n launch: ClientOperationLaunch,\n): ClientOperationManagedMetadata {\n return {\n ...prior,\n launch: { command: launch.command, args: [...launch.args], scope: launch.scope },\n };\n}\n\nfunction validateRegistrationProof(\n value: unknown,\n metadata: ClientOperationManagedMetadata,\n): ClientOperationRegistrationProof {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const proof = value as Record<string, unknown>;\n if (Object.keys(proof).sort().join(\",\") !== \"observed,state,target\" || proof.state !== \"exact\"\n || !proof.target || typeof proof.target !== \"object\" || Array.isArray(proof.target)\n || !proof.observed || typeof proof.observed !== \"object\" || Array.isArray(proof.observed)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const target = proof.target as Record<string, unknown>;\n if (Object.keys(target).sort().join(\",\") !== \"backendConfigPath,identity,instance,launch,locator,runtime\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const targetMetadata = validateOperationMetadata({\n schema: \"agent-bridge.client-management\", version: 1,\n runtime: target.runtime, identity: target.identity, instance: target.instance,\n backendConfigPath: target.backendConfigPath, launch: target.launch, locator: target.locator,\n }, metadata.runtime, metadata.instance);\n if (!sameCanonicalValue(targetMetadata, metadata)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const observed = proof.observed as Record<string, unknown>;\n if (Object.keys(observed).sort().join(\",\") !== \"args,command,env,state\" || observed.state !== \"present\"\n || safeText(observed.command, \"registration command\", 4096) !== metadata.launch.command\n || !Array.isArray(observed.args) || !sameCanonicalValue(observed.args, metadata.launch.args)\n || !observed.env || typeof observed.env !== \"object\" || Array.isArray(observed.env)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const env = observed.env as Record<string, unknown>;\n if (Object.keys(env).sort().join(\",\") !== \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\"\n || env.AGENT_BRIDGE_AGENT !== metadata.identity\n || env.AGENT_BRIDGE_CONFIG !== metadata.backendConfigPath\n || env.AGENT_BRIDGE_INSTANCE !== metadata.instance) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n },\n },\n };\n}\n\nfunction validateRollbackContract(\n value: unknown,\n runtime: InstallableRuntime,\n instance: string,\n): ClientOperationRollbackContract {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const contract = value as Record<string, unknown>;\n if (Object.keys(contract).sort().join(\",\")\n !== \"forwardMetadataSha256,forwardRegistrationSha256,identity,priorMetadata,priorRegistration,schema,version\"\n || contract.schema !== \"agent-bridge.client-update-rollback\" || contract.version !== 1\n || typeof contract.forwardMetadataSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.forwardMetadataSha256)\n || typeof contract.forwardRegistrationSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.forwardRegistrationSha256)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const priorMetadata = validateOperationMetadata(contract.priorMetadata, runtime, instance);\n const identity = safeIdentity(contract.identity);\n if (identity !== priorMetadata.identity) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const priorRegistration = validateRegistrationProof(contract.priorRegistration, priorMetadata);\n return {\n schema: \"agent-bridge.client-update-rollback\", version: 1, identity,\n priorMetadata, priorRegistration,\n forwardMetadataSha256: contract.forwardMetadataSha256,\n forwardRegistrationSha256: contract.forwardRegistrationSha256,\n };\n}\n\nexport function clientOperationSupportsResume(version: ClientOperationVersion, kind: ClientOperationKind): boolean {\n return RESUMABLE_OPERATION_KINDS[version].has(kind);\n}\nfunction validateRequest(\n value: unknown, runtime?: InstallableRuntime, version: ClientOperationVersion = CLIENT_OPERATION_VERSION,\n instance?: string,\n): RecordedClientOperationRequest {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const request = value as Record<string, unknown>;\n if (!OPERATIONS.includes(request.kind as ClientOperationKind)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const keys = Object.keys(request).sort().join(\",\");\n if (version === 2) {\n if (request.kind === \"repair\") {\n if (keys !== \"kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"repair\" };\n }\n if (request.kind === \"update\") {\n if (keys !== \"kind,release\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const release = safeText(request.release, \"release\", 128);\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(release)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { kind: \"update\", release };\n }\n if (request.kind === \"uninstall\") {\n if (keys !== \"kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"uninstall\" };\n }\n if (keys !== \"endpoint,kind,workspace\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const endpoint = safeText(request.endpoint, \"endpoint\", 512);\n let parsed: URL;\n try { parsed = new URL(endpoint); } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password || parsed.search || parsed.hash) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const workspace = safeText(request.workspace, \"workspace\");\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(workspace)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"migrate\", endpoint: parsed.toString(), workspace };\n }\n if (request.kind === \"repair\") {\n if (version === 4 || version === 5 || version === 6) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (keys !== \"identity,kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"repair\", identity: safeIdentity(request.identity) };\n }\n if (request.kind === \"uninstall\") {\n if (version === 4 || version === 5 || version === 6) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (keys !== \"identity,kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"uninstall\", identity: safeIdentity(request.identity) };\n }\n if (request.kind === \"update\") {\n if (version === 5 || version === 6) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const expectedKeys = version === 4 ? \"identity,kind,launch,rollback\" : \"identity,kind,launch\";\n if (keys !== expectedKeys || !request.launch || typeof request.launch !== \"object\"\n || Array.isArray(request.launch)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const launch = request.launch as Record<string, unknown>;\n if (Object.keys(launch).sort().join(\",\") !== \"args,command,envKeys,scope\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const command = safeText(launch.command, \"launch command\", 1024);\n if (!Array.isArray(launch.args) || launch.args.length > 16\n || launch.args.some((arg) => {\n try { safeText(arg, \"launch argument\", 1024); return false; } catch { return true; }\n })\n || !Array.isArray(launch.envKeys)\n || launch.envKeys.join(\",\") !== \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\"\n || ![null, \"local\", \"user\", \"project\"].includes(launch.scope as null | string)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if ((runtime === \"codex\" || runtime === \"claude-code\")\n && ((launch.args as unknown[]).length !== 0\n || (runtime === \"claude-code\" ? ![\"local\", \"user\", \"project\"].includes(launch.scope as string)\n : launch.scope !== null))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (runtime === \"codex\" || runtime === \"claude-code\") safeNativeLaunchCommand(command);\n if (runtime === \"claude-desktop\" && (launch.scope !== null || !isAbsolute(command))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const base: { kind: \"update\"; identity: string; launch: ClientOperationLaunch } = {\n kind: \"update\",\n identity: safeIdentity(request.identity),\n launch: {\n command,\n args: [...launch.args] as string[],\n scope: launch.scope as \"local\" | \"user\" | \"project\" | null,\n envKeys: [\"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\"],\n },\n };\n if (version === 4) {\n if (!runtime) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (!instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const rollback = validateRollbackContract(request.rollback, runtime, instance);\n if (base.identity !== rollback.identity) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const forwardMetadata = forwardMetadataFromUpdate(rollback.priorMetadata, base.launch);\n const forwardRegistration = exactRegistrationProof(forwardMetadata);\n if (canonicalDigest({ role: \"metadata\", metadata: forwardMetadata }) !== rollback.forwardMetadataSha256\n || canonicalDigest({ role: \"registration\", observation: forwardRegistration })\n !== rollback.forwardRegistrationSha256) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { ...base, rollback };\n }\n return base;\n }\n if (request.kind === \"rollback\") {\n if (version !== 4 || keys !== \"identity,kind,rollback,sourceOperationId\" || !runtime) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceOperationId = safeText(request.sourceOperationId, \"source operation id\", 36).toLowerCase();\n if (!UUID.test(sourceOperationId)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (!instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const rollback = validateRollbackContract(request.rollback, runtime, instance);\n if (rollback.identity !== safeIdentity(request.identity)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"rollback\", identity: rollback.identity, sourceOperationId, rollback };\n }\n if ([\"migrate\", \"migrate-cutover\", \"migrate-finalize\"].includes(String(request.kind))) {\n if (version === 5 || version === 6) {\n const v5Keys = \"enrollmentPath,enrollmentRequestId,identity,kind,predecessorCredentialId,predecessorGraceUntil,sourceBackendPath,sourceEdgeDatabasePath,sourceEndpointSha256,sourceScopeKey,stageRecordPath,successorCredentialId,targetBackendPath,targetEndpointSha256,targetWorkspace\";\n const v6Keys = \"enrollmentPath,enrollmentRequestId,exclusiveEdgeAssertion,gatewayAuthorityId,identity,kind,migrationOperationId,predecessorCredentialId,predecessorGraceUntil,sourceBackendPath,sourceCutoverOperationId,sourceEdgeDatabasePath,sourceEndpointSha256,sourceGatewayUrl,sourceMetadata,sourceMetadataSha256,sourceRegistration,sourceRegistrationSha256,sourceScopeKey,stageContract,stageOperationId,stageRecordPath,successorCredentialId,targetBackendPath,targetEdgeDatabasePath,targetEndpointSha256,targetMetadata,targetMetadataSha256,targetRegistration,targetRegistrationSha256,targetWorkspace\";\n if (keys !== (version === 5 ? v5Keys : v6Keys)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if ((version === 5 && request.kind !== \"migrate\")\n || (version === 6 && ![\"migrate-cutover\", \"migrate-finalize\"].includes(String(request.kind)))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const absolute = (item: unknown, label: string): string => safeAbsolutePath(item, label);\n const hash = (item: unknown): string => {\n const value = safeText(item, \"migration digest\", 64);\n if (!/^[0-9a-f]{64}$/.test(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return value;\n };\n const id = (item: unknown, label: string): string => {\n const value = safeText(item, label, 36).toLowerCase();\n if (!UUID.test(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return value;\n };\n const sourceEndpointSha256 = hash(request.sourceEndpointSha256);\n const targetEndpointSha256 = hash(request.targetEndpointSha256);\n const sourceScopeKey = hash(request.sourceScopeKey);\n if (sourceEndpointSha256 === targetEndpointSha256) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const stage: ClientMigrationStageRequest = {\n kind: \"migrate\",\n identity: safeIdentity(request.identity),\n enrollmentPath: absolute(request.enrollmentPath, \"enrollment path\"),\n enrollmentRequestId: id(request.enrollmentRequestId, \"enrollment request ID\"),\n sourceBackendPath: absolute(request.sourceBackendPath, \"source backend path\"),\n sourceEdgeDatabasePath: absolute(request.sourceEdgeDatabasePath, \"source edge database path\"),\n sourceScopeKey,\n targetBackendPath: absolute(request.targetBackendPath, \"target backend path\"),\n stageRecordPath: absolute(request.stageRecordPath, \"stage record path\"),\n predecessorGraceUntil: (() => {\n const value = safeText(request.predecessorGraceUntil, \"predecessor grace cutoff\", 64);\n if (new Date(value).toISOString() !== value) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return value;\n })(),\n targetWorkspace: safeText(request.targetWorkspace, \"target workspace\", 128),\n sourceEndpointSha256,\n targetEndpointSha256,\n predecessorCredentialId: id(request.predecessorCredentialId, \"predecessor credential ID\"),\n successorCredentialId: id(request.successorCredentialId, \"successor credential ID\"),\n };\n if (version === 5) return stage;\n if (!runtime || !instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const migrationOperationId = id(request.migrationOperationId, \"migration operation ID\");\n const stageOperationId = id(request.stageOperationId, \"stage operation ID\");\n const targetEdgeDatabasePath = absolute(request.targetEdgeDatabasePath, \"target edge database path\");\n if (targetEdgeDatabasePath === stage.sourceEdgeDatabasePath) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const sourceGatewayUrl = safeText(request.sourceGatewayUrl, \"source gateway URL\", 2048);\n let parsedSourceGatewayUrl: URL;\n try { parsedSourceGatewayUrl = new URL(sourceGatewayUrl); }\n catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n if (parsedSourceGatewayUrl.username || parsedSourceGatewayUrl.password || parsedSourceGatewayUrl.search\n || parsedSourceGatewayUrl.hash || sourceGatewayUrl !== parsedSourceGatewayUrl.toString().replace(/\\/$/, \"\")) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (createHash(\"sha256\").update(sourceGatewayUrl, \"utf8\").digest(\"hex\") !== sourceEndpointSha256) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceCutoverOperationId = request.sourceCutoverOperationId === null\n ? null\n : id(request.sourceCutoverOperationId, \"source cutover operation ID\");\n if ((request.kind === \"migrate-cutover\") !== (sourceCutoverOperationId === null)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (sourceCutoverOperationId === migrationOperationId) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const stageContract = validateStageContract(request.stageContract, runtime, instance);\n if (stageContract.stageOperationId !== stageOperationId\n || !sameCanonicalValue(stageContract.request, stage)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceMetadata = validateOperationMetadata(request.sourceMetadata, runtime, instance);\n const targetMetadata = validateOperationMetadata(request.targetMetadata, runtime, instance);\n if (sourceMetadata.identity !== stage.identity || targetMetadata.identity !== stage.identity\n || sourceMetadata.backendConfigPath !== stage.sourceBackendPath\n || targetMetadata.backendConfigPath !== stage.targetBackendPath\n || sameCanonicalValue(sourceMetadata, targetMetadata)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceRegistration = validateRegistrationProof(request.sourceRegistration, sourceMetadata);\n const targetRegistration = validateRegistrationProof(request.targetRegistration, targetMetadata);\n const contractDigest = (value: unknown): string => {\n const recorded = hash(value);\n return recorded;\n };\n const sourceMetadataSha256 = contractDigest(request.sourceMetadataSha256);\n const targetMetadataSha256 = contractDigest(request.targetMetadataSha256);\n const sourceRegistrationSha256 = contractDigest(request.sourceRegistrationSha256);\n const targetRegistrationSha256 = contractDigest(request.targetRegistrationSha256);\n if (sourceMetadataSha256 !== canonicalDigest({ role: \"metadata\", metadata: sourceMetadata })\n || targetMetadataSha256 !== canonicalDigest({ role: \"metadata\", metadata: targetMetadata })\n || sourceRegistrationSha256 !== canonicalDigest({ role: \"registration\", observation: sourceRegistration })\n || targetRegistrationSha256 !== canonicalDigest({ role: \"registration\", observation: targetRegistration })) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n ...stage,\n kind: request.kind as ClientMigrationCutoverRequest[\"kind\"],\n migrationOperationId,\n stageOperationId,\n sourceCutoverOperationId,\n targetEdgeDatabasePath,\n sourceGatewayUrl,\n gatewayAuthorityId: id(request.gatewayAuthorityId, \"gateway authority ID\"),\n exclusiveEdgeAssertion: request.exclusiveEdgeAssertion === true\n ? true\n : fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"),\n stageContract,\n sourceMetadata,\n targetMetadata,\n sourceRegistration,\n targetRegistration,\n sourceMetadataSha256,\n targetMetadataSha256,\n sourceRegistrationSha256,\n targetRegistrationSha256,\n };\n }\n if (version === 4) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (keys !== \"endpoint,kind,workspace\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const endpoint = safeText(request.endpoint, \"endpoint\", 512);\n let parsed: URL;\n try { parsed = new URL(endpoint); } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password || parsed.search || parsed.hash) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const workspace = safeText(request.workspace, \"workspace\");\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(workspace)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"migrate\", endpoint: parsed.toString(), workspace };\n }\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n}\nfunction validateStageContract(value: unknown, runtime: InstallableRuntime, instance: string): ClientMigrationStageContract {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const contract = value as Record<string, unknown>;\n if (Object.keys(contract).sort().join(\",\") !== \"request,schema,stageOperationId,stageRecordSha256,targetBackendProjectionSha256,version\"\n || contract.schema !== \"agent-bridge.client-migration-stage-contract\" || contract.version !== 1) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const stageOperationId = safeText(contract.stageOperationId, \"stage operation ID\", 36).toLowerCase();\n if (!UUID.test(stageOperationId)\n || typeof contract.stageRecordSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.stageRecordSha256)\n || typeof contract.targetBackendProjectionSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.targetBackendProjectionSha256)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const request = validateRequest(contract.request, runtime, 5, instance) as ClientMigrationStageRequest;\n if (request.kind !== \"migrate\" || request.stageRecordPath !== resolve(request.stageRecordPath)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { schema: \"agent-bridge.client-migration-stage-contract\", version: 1, stageOperationId, request,\n stageRecordSha256: contract.stageRecordSha256, targetBackendProjectionSha256: contract.targetBackendProjectionSha256 };\n}\nfunction validateCompletion(value: unknown, version: ClientOperationVersion, runtime: InstallableRuntime, instance: string): ClientOperationCompletion {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const completion = value as Record<string, unknown>;\n const completionKeys = Object.keys(completion).sort().join(\",\");\n const expectedKeys = version === 4\n ? \"cleanupDirectoryDurability,completedAt,operation,rollback,stepCount\"\n : version === 5 || version === 6\n ? \"cleanupDirectoryDurability,completedAt,migration,operation,stepCount\"\n : \"cleanupDirectoryDurability,completedAt,operation,stepCount\";\n if ((completionKeys !== expectedKeys\n && !(version === 5 && completionKeys === \"cleanupDirectoryDurability,completedAt,operation,stepCount\"))\n || !OPERATIONS.includes(completion.operation as ClientOperationKind)\n || !Number.isSafeInteger(completion.stepCount) || Number(completion.stepCount) < 1\n || Number(completion.stepCount) > MAX_OPERATION_STEPS\n || typeof completion.completedAt !== \"string\" || !Number.isFinite(Date.parse(completion.completedAt))\n || ![\"durable\", \"unavailable\"].includes(String(completion.cleanupDirectoryDurability))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const rollback = version === 4\n ? completion.rollback === null ? null : validateRollbackContract(completion.rollback, runtime, instance)\n : undefined;\n const migration = version === 5 || version === 6\n ? completion.migration === null || completion.migration === undefined\n ? null\n : version === 5\n ? validateStageContract(completion.migration, runtime, instance)\n : validateRequest(completion.migration, runtime, version, instance) as ClientMigrationCutoverRequest\n : undefined;\n const allowedOperations = version === 4\n ? [\"update\", \"rollback\"]\n : version === 5\n ? [\"migrate\"]\n : version === 6\n ? [\"migrate-cutover\", \"migrate-finalize\"]\n : [\"repair\", \"update\", \"uninstall\", \"migrate\"];\n if (!allowedOperations.includes(String(completion.operation))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (version === 4 && completion.operation !== \"update\" && rollback !== null) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n operation: completion.operation as ClientOperationKind,\n stepCount: Number(completion.stepCount), completedAt: completion.completedAt,\n cleanupDirectoryDurability: completion.cleanupDirectoryDurability as \"durable\" | \"unavailable\",\n ...(version === 4 ? { rollback } : {}),\n ...(version === 5 || version === 6 ? { migration } : {}),\n };\n}\nexport function validateClientOperation(value: unknown): ClientOperationManifest {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const file = value as Record<string, unknown>;\n if (file.schema !== CLIENT_OPERATION_SCHEMA || ![2, 3, 4, 5, CLIENT_OPERATION_VERSION].includes(Number(file.version))\n || !UUID.test(String(file.operationId))\n || !RUNTIMES.includes(file.runtime as InstallableRuntime) || !STATES.includes(file.state as ClientOperationState)\n || !Number.isSafeInteger(file.revision) || Number(file.revision) < 0\n || !Array.isArray(file.artifacts) || file.artifacts.length > MAX_OPERATION_ARTIFACTS\n || !Array.isArray(file.steps)\n || file.steps.length > MAX_OPERATION_STEPS) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const createdAt = safeText(file.createdAt, \"createdAt\", 64);\n const updatedAt = safeText(file.updatedAt, \"updatedAt\", 64);\n if (!Number.isFinite(Date.parse(createdAt)) || !Number.isFinite(Date.parse(updatedAt))) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const terminal = file.state === \"committed\";\n const version = file.version as ClientOperationVersion;\n const instance = safeText(file.instance, \"instance\");\n const request = terminal && file.request === null\n ? null\n : validateRequest(file.request, file.runtime as InstallableRuntime, version, instance);\n const completion = terminal ? validateCompletion(file.completion, version, file.runtime as InstallableRuntime, instance) : null;\n const artifacts = file.artifacts.map(validateArtifact);\n const steps = file.steps.map((step, index) => validateStep(step, index, version));\n if ((!terminal && (!request || file.completion !== null || steps.length === 0))\n || (terminal && (request !== null || steps.length !== 0 || artifacts.length !== 0))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (terminal && version === 4 && completion?.operation === \"update\" && completion.rollback === null) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (terminal && version === 6 && completion?.migration === null) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (version === 6) {\n const migration = terminal\n ? completion?.migration as ClientMigrationCutoverRequest | null | undefined\n : request as ClientMigrationCutoverRequest;\n if (!migration || migration.migrationOperationId !== String(file.operationId).toLowerCase()) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n }\n if (!terminal && version === 5) {\n const migration = request as ClientMigrationStageRequest;\n const expected = [\n [\"stage-backend\", migration.targetBackendPath],\n [\"stage-record\", migration.stageRecordPath],\n [\"enrollment\", migration.enrollmentPath],\n ] as const;\n if (steps.length !== expected.length || steps.some((step, index) => step.target !== expected[index]![0]\n || step.locator !== expected[index]![1])) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n }\n if (!terminal && version === 6) {\n const migration = request as ClientMigrationCutoverRequest;\n const native = file.runtime !== \"claude-desktop\";\n const expected = migration.kind === \"migrate-cutover\"\n ? native ? [\"edge-gate\", \"registration\", \"registration\", \"metadata\"] : [\"edge-gate\", \"registration\", \"metadata\"]\n : [\"edge-gate\"];\n if (steps.length !== expected.length || steps.some((step, index) => step.target !== expected[index])) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n }\n const firstIncomplete = steps.findIndex((step) => step.state !== \"observed-applied\");\n const tail = firstIncomplete < 0 ? [] : steps.slice(firstIncomplete + 1);\n const artifactNames = artifacts.map((artifact) => artifact.name);\n const stepArtifacts = steps.flatMap((step) => [step.beforeArtifact, step.afterArtifact]);\n const artifactsValid = new Set(artifactNames).size === artifactNames.length\n && artifacts.every((artifact) => {\n const step = steps[artifact.stepIndex];\n return Boolean(step && (artifact.phase === \"before\"\n ? step.beforeArtifact === artifact.name && step.expectedBeforeSha256 === artifact.sha256\n : step.afterArtifact === artifact.name && step.expectedAfterSha256 === artifact.sha256));\n });\n const completeSnapshots = artifactsValid\n && steps.every((step) => artifacts.some((artifact) => artifact.name === step.beforeArtifact));\n const exactAfterArtifacts = steps.every((step) => {\n const count = artifacts.filter((artifact) => artifact.name === step.afterArtifact && artifact.phase === \"after\").length;\n return count === (step.state === \"observed-applied\" ? 1 : 0);\n });\n const allPending = steps.every((step) => step.state === \"pending\");\n const allApplied = steps.every((step) => step.state === \"observed-applied\");\n const hasProgress = steps.some((step) => step.state !== \"pending\");\n const allArtifacts = artifacts.length === stepArtifacts.length;\n const anyCleanup = artifacts.some((artifact) => artifact.cleanupIntentAt !== null);\n const stateConsistent = terminal ? true : file.state === \"prepared\"\n ? allPending && !anyCleanup\n : file.state === \"snapshotted\"\n ? allPending && completeSnapshots && !anyCleanup\n : file.state === \"in-progress\"\n ? hasProgress && !allApplied && completeSnapshots && !anyCleanup\n : file.state === \"applied\"\n ? allApplied && completeSnapshots && allArtifacts && !anyCleanup\n : allApplied && completeSnapshots && allArtifacts && anyCleanup;\n if (tail.some((step) => step.state !== \"pending\")\n || steps.filter((step) => step.state === \"intent-recorded\").length > 1\n || new Set(stepArtifacts).size !== stepArtifacts.length\n || !artifactsValid || !exactAfterArtifacts\n || artifacts.reduce((total, artifact) => total + artifact.bytes, 0) > MAX_TOTAL_SNAPSHOT_BYTES\n || !stateConsistent) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n schema: CLIENT_OPERATION_SCHEMA, version,\n operationId: String(file.operationId).toLowerCase(), request,\n runtime: file.runtime as InstallableRuntime, instance,\n state: file.state as ClientOperationState, revision: Number(file.revision),\n host: safeText(file.host, \"host\", 255), createdAt, updatedAt, completion,\n artifacts, steps,\n };\n}\nfunction serialize(manifest: ClientOperationManifest): string { return `${JSON.stringify(validateClientOperation(manifest), null, 2)}\\n`; }\nfunction hasCompleteSnapshots(manifest: ClientOperationManifest): boolean {\n return manifest.steps.every((step) => manifest.artifacts.some((artifact) => artifact.name === step.beforeArtifact\n && artifact.phase === \"before\" && artifact.sha256 === step.expectedBeforeSha256));\n}\nfunction publish(\n path: string, content: string | Buffer, filesystem: ClientOperationFilesystem = filesystemDefaults,\n expectedDirectory?: { device: number; inode: number }, cache?: PrivateDirectoryAccessCache,\n): void {\n const directory = dirname(path);\n const identity = privateDirectory(directory, cache);\n if (expectedDirectory && (identity.device !== expectedDirectory.device || identity.inode !== expectedDirectory.inode)) {\n fail(\"PATH_REPLACED\", \"operation directory changed during publication\");\n }\n const temporary = join(directory, `.${basename(path)}.${process.pid}.${randomUUID()}.tmp`);\n let descriptor: number | undefined;\n try {\n descriptor = openSync(temporary, \"wx\", 0o600);\n writeFileSync(descriptor, content);\n fsyncSync(descriptor);\n closeSync(descriptor); descriptor = undefined;\n securePrivatePath(temporary, \"file\");\n filesystem.hook(\"before-publish-rename\", path);\n sameDirectory(directory, identity, cache);\n filesystem.rename(temporary, path);\n filesystem.hook(\"after-publish-rename\", path);\n verifyPrivatePathAccess(path, \"file\");\n sameDirectory(directory, identity, cache);\n filesystem.hook(\"before-directory-sync\", directory);\n filesystem.syncDirectory(directory);\n } catch (error) {\n if (descriptor !== undefined) try { closeSync(descriptor); } catch {}\n // Never follow a replaced directory while cleaning up. Residue inside the\n // original, now-unreachable directory is safer than deleting an external file.\n try {\n filesystem.hook(\"before-cleanup\", temporary);\n sameDirectory(directory, identity, cache);\n filesystem.remove(temporary, { force: true });\n } catch {}\n cache?.clear();\n if (error instanceof ClientOperationError) throw error;\n fail(\"DURABILITY_FAILED\", \"operation state could not be published durably\");\n }\n}\n\nfunction publishNoReplace(\n path: string, content: string | Buffer, filesystem: ClientOperationFilesystem,\n cache?: PrivateDirectoryAccessCache,\n): void {\n const directory = dirname(path);\n const identity = privateDirectory(directory, cache);\n const temporary = join(directory, `.${basename(path)}.${process.pid}.${randomUUID()}.tmp`);\n let descriptor: number | undefined;\n try {\n descriptor = openSync(temporary, \"wx\", 0o600);\n writeFileSync(descriptor, content);\n fsyncSync(descriptor);\n securePrivatePath(temporary, \"file\");\n const temporaryIdentity = fstatSync(descriptor);\n filesystem.hook(\"before-publish-link\", path);\n sameDirectory(directory, identity, cache);\n filesystem.link(temporary, path);\n filesystem.hook(\"after-publish-link\", path);\n const published = lstatSync(path);\n if (!published.isFile() || published.isSymbolicLink()\n || published.dev !== temporaryIdentity.dev || published.ino !== temporaryIdentity.ino) {\n fail(\"PATH_REPLACED\", \"snapshot path changed during publication\");\n }\n verifyPrivatePathAccess(path, \"file\");\n const verified = lstatSync(path);\n if (!verified.isFile() || verified.isSymbolicLink()\n || verified.dev !== temporaryIdentity.dev || verified.ino !== temporaryIdentity.ino) {\n fail(\"PATH_REPLACED\", \"snapshot path changed during publication\");\n }\n sameDirectory(directory, identity, cache);\n closeSync(descriptor); descriptor = undefined;\n filesystem.remove(temporary);\n filesystem.hook(\"before-directory-sync\", directory);\n filesystem.syncDirectory(directory);\n } catch (error) {\n if (descriptor !== undefined) try { closeSync(descriptor); } catch {}\n try {\n filesystem.hook(\"before-cleanup\", temporary);\n sameDirectory(directory, identity, cache);\n filesystem.remove(temporary, { force: true });\n } catch {}\n cache?.clear();\n if (error instanceof ClientOperationError) throw error;\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") {\n fail(\"AMBIGUOUS_OPERATION\", \"snapshot path already exists outside the durable manifest\");\n }\n fail(\"DURABILITY_FAILED\", \"operation state could not be published durably\");\n }\n}\n\nfunction publishAfterArtifact(\n path: string, content: Buffer, filesystem: ClientOperationFilesystem,\n cache?: PrivateDirectoryAccessCache,\n): void {\n try {\n if (!existsSync(path)) { publishNoReplace(path, content, filesystem, cache); return; }\n const directory = dirname(path); const identity = privateDirectory(directory, cache);\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size !== content.byteLength\n || createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") !== createHash(\"sha256\").update(content).digest(\"hex\")) {\n fail(\"AMBIGUOUS_OPERATION\", \"existing after artifact does not match the verified after-state\");\n }\n sameDirectory(directory, identity, cache);\n } finally { closeSync(descriptor); }\n filesystem.hook(\"before-directory-sync\", directory);\n sameDirectory(directory, identity, cache);\n filesystem.syncDirectory(directory);\n sameDirectory(directory, identity, cache);\n } catch (error) {\n cache?.clear();\n throw error;\n }\n}\n\nfunction createClientOperationWithCache(input: {\n operationId?: string; createdAt?: string; version?: 3 | 4 | 5 | typeof CLIENT_OPERATION_VERSION; request: ClientOperationRequest; runtime: InstallableRuntime; instance: string;\n steps: Array<Pick<ClientOperationStep, \"target\" | \"locator\" | \"beforeArtifact\" | \"afterArtifact\" | \"expectedBeforeSha256\" | \"expectedAfterSha256\">>;\n}, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\ncache?: PrivateDirectoryAccessCache): ClientOperationManifest {\n const operationId = (input.operationId ?? randomUUID()).toLowerCase();\n if (!UUID.test(operationId) || !RUNTIMES.includes(input.runtime)) {\n fail(\"INVALID_OPERATION\", \"operation request is invalid\");\n }\n const instance = safeText(input.instance.trim(), \"instance\");\n const version = input.version ?? 3;\n const request = validateRequest(input.request, input.runtime, version, instance) as ClientOperationRequest;\n const pinned = pinOperationRoot(env, true, cache);\n const directory = join(pinned.root, operationId);\n assertPinnedRoot(pinned, cache);\n try { mkdirSync(directory, { mode: 0o700 }); } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"EEXIST\") fail(\"OPERATION_EXISTS\", \"operation already exists\");\n fail(\"DURABILITY_FAILED\", \"operation could not be created\");\n }\n assertPinnedRoot(pinned, cache);\n if (cache) cache.secure(directory);\n else securePrivatePath(directory, \"directory\");\n assertPinnedRoot(pinned, cache);\n prepareDirectory(join(directory, \"snapshots\"), cache);\n assertPinnedRoot(pinned, cache);\n const now = input.createdAt === undefined ? new Date().toISOString() : safeText(input.createdAt, \"createdAt\", 64);\n if (!Number.isFinite(Date.parse(now))) fail(\"INVALID_OPERATION\", \"operation request is invalid\");\n const manifest: ClientOperationManifest = {\n schema: CLIENT_OPERATION_SCHEMA, version, operationId,\n request, runtime: input.runtime, instance, state: \"prepared\", revision: 0,\n host: hostname(), createdAt: now, updatedAt: now, completion: null, artifacts: [],\n steps: input.steps.map((step, index) => ({ ...step, index, state: \"pending\" as const, intentRecordedAt: null, observedAppliedAt: null })),\n };\n try {\n filesystem.hook(\"after-snapshots-created\", directory);\n assertPinnedRoot(pinned, cache);\n publish(join(directory, \"manifest.json\"), serialize(manifest), filesystem, undefined, cache);\n assertPinnedRoot(pinned, cache);\n filesystem.syncDirectory(pinned.root);\n assertPinnedRoot(pinned, cache);\n }\n catch (error) {\n try {\n assertPinnedRoot(pinned, cache);\n const publishedManifest = join(directory, \"manifest.json\");\n if (!existsSync(publishedManifest)) {\n filesystem.hook(\"before-cleanup\", directory);\n assertPinnedRoot(pinned, cache);\n filesystem.remove(directory, { recursive: true, force: true });\n assertPinnedRoot(pinned, cache);\n }\n } catch {}\n throw error;\n }\n return manifest;\n}\n\nexport function createClientOperation(input: {\n operationId?: string; createdAt?: string; version?: 3 | 4 | 5 | typeof CLIENT_OPERATION_VERSION; request: ClientOperationRequest; runtime: InstallableRuntime; instance: string;\n steps: Array<Pick<ClientOperationStep, \"target\" | \"locator\" | \"beforeArtifact\" | \"afterArtifact\" | \"expectedBeforeSha256\" | \"expectedAfterSha256\">>;\n}, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationManifest {\n return createClientOperationWithCache(input, env, filesystem);\n}\n\nexport interface BegunClientOperation { manifest: ClientOperationManifest; lock: ClientOperationLock }\n\n/** Acquire the client lock before checking or creating any operation state. */\nexport function beginClientOperation(input: Parameters<typeof createClientOperation>[0], env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): BegunClientOperation {\n const lock = acquireClientOperationLock(input.runtime, input.instance, env);\n try {\n const operations = listClientOperations(env, filesystem);\n if (operations.some((summary) => summary.inspectionState === \"blocked\")) {\n fail(\"BLOCKED_OPERATION\", \"a blocked operation must be resolved before another client mutation can begin\");\n }\n const unfinished = operations.find((summary) => summary.runtime === input.runtime\n && summary.instance === input.instance && summary.inspectionState !== \"complete\");\n if (unfinished) fail(\"UNFINISHED_OPERATION\", `unfinished operation ${unfinished.operationId} already owns this client`);\n return { manifest: createClientOperationWithCache(input, env, filesystem, privatePathCacheForLock(lock)), lock };\n } catch (error) {\n try { releaseClientOperationLock(lock); } catch {}\n throw error;\n }\n}\n\n/** Resume is same-host only and returns with the per-client lock held. */\nexport function resumeClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): BegunClientOperation {\n const manifest = readClientOperation(operationId, env);\n if (manifest.state === \"committed\") fail(\"OPERATION_COMPLETE\", \"committed operation cannot be resumed\");\n if (!manifest.request || !clientOperationSupportsResume(manifest.version, manifest.request.kind)) {\n fail(\"LEGACY_OPERATION\", \"legacy operation cannot resume without an identity-bound request\");\n }\n if (manifest.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only resume on its creating host\");\n const lock = acquireClientOperationLock(manifest.runtime, manifest.instance, env);\n try {\n const operations = listClientOperations(env, filesystem);\n if (operations.some((summary) => summary.inspectionState === \"blocked\")) {\n fail(\"BLOCKED_OPERATION\", \"a blocked operation must be resolved before another client mutation can resume\");\n }\n const summary = inspectClientOperation(operationId, env, filesystem);\n if (summary.inspectionState === \"blocked\") fail(\"OPERATION_BLOCKED\", summary.reason);\n const resumed = readClientOperation(operationId, env);\n if (resumed.runtime !== lock.runtime || resumed.instance !== lock.instance\n || resumed.operationId !== manifest.operationId || resumed.host !== hostname()) {\n fail(\"LOCK_MISMATCH\", \"client lock does not cover the resumed operation\");\n }\n return { manifest: resumed, lock };\n } catch (error) {\n try { releaseClientOperationLock(lock); } catch {}\n throw error;\n }\n}\n\nfunction readClientOperationWithCache(\n operationId: string,\n env: NodeJS.ProcessEnv,\n cache?: PrivateDirectoryAccessCache,\n): ClientOperationManifest {\n const path = manifestPath(operationId, env);\n verifyInsideRoot(path, env, cache);\n const directory = dirname(path);\n const identity = privateDirectory(directory, cache);\n try {\n verifyPrivatePathAccess(path, \"file\");\n } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is unavailable or insecure\"); }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size > MAX_MANIFEST_BYTES) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n let value: unknown;\n try { value = JSON.parse(readFileSync(descriptor, \"utf8\")); } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n sameDirectory(directory, identity, cache);\n const manifest = validateClientOperation(value);\n if (manifest.operationId !== operationId.toLowerCase()) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return manifest;\n } finally { closeSync(descriptor); }\n}\nexport function readClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env): ClientOperationManifest {\n return readClientOperationWithCache(operationId, env);\n}\n\nfunction lockName(runtime: InstallableRuntime, instance: string): string {\n const digest = createHash(\"sha256\").update(`${runtime}\\0${instance}`).digest(\"hex\");\n return `${runtime}-${digest}.lock`;\n}\nexport function hasClientOperationLock(\n runtime: InstallableRuntime,\n instance: string,\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n return existsSync(join(clientOperationRoot(env), \"locks\", lockName(runtime, instance)));\n}\nexport function acquireClientOperationLock(runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env): ClientOperationLock {\n if (!RUNTIMES.includes(runtime)) fail(\"INVALID_OPERATION\", \"client runtime is invalid\");\n instance = safeText(instance.trim(), \"instance\");\n const cache = createPrivateDirectoryAccessCache();\n const root = prepareRoot(env, cache);\n const directory = join(root, \"locks\");\n const identity = privateDirectory(directory, cache);\n const lockPath = join(directory, lockName(runtime, instance));\n let descriptor: number;\n try { descriptor = openSync(lockPath, \"wx\", 0o600); }\n catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"EEXIST\") fail(\"CLIENT_LOCKED\", \"another operation holds the client lock\");\n fail(\"LOCK_FAILED\", \"client lock could not be acquired\");\n }\n try {\n writeFileSync(descriptor, `${JSON.stringify({ schema: \"agent-bridge.client-operation-lock\", version: 1, runtime, instance, pid: process.pid, host: hostname(), createdAt: new Date().toISOString(), nonce: randomUUID() })}\\n`);\n fsyncSync(descriptor);\n securePrivatePath(lockPath, \"file\");\n sameDirectory(directory, identity, cache); syncDirectory(directory);\n const details = fstatSync(descriptor);\n const lock = { runtime, instance, lockPath, descriptor, device: details.dev, inode: details.ino, released: false };\n operationLockPrivatePathCaches.set(lock, cache);\n return lock;\n } catch {\n cache.clear();\n try { closeSync(descriptor); } catch {} rmSync(lockPath, { force: true });\n fail(\"LOCK_FAILED\", \"client lock could not be acquired\");\n }\n}\nfunction assertLock(lock: ClientOperationLock): void {\n if (lock.released) fail(\"LOCK_REPLACED\", \"client lock is no longer held\");\n const opened = fstatSync(lock.descriptor);\n let current;\n try { current = lstatSync(lock.lockPath); } catch { fail(\"LOCK_REPLACED\", \"client lock changed while held\"); }\n if (current.isSymbolicLink() || current.dev !== lock.device || current.ino !== lock.inode\n || opened.dev !== lock.device || opened.ino !== lock.inode) fail(\"LOCK_REPLACED\", \"client lock changed while held\");\n}\nexport function releaseClientOperationLock(lock: ClientOperationLock): \"released\" | \"durability-unknown\" {\n const cache = privatePathCacheForLock(lock);\n try {\n assertLock(lock);\n const directory = dirname(lock.lockPath); const identity = privateDirectory(directory, cache);\n closeSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (current.dev !== lock.device || current.ino !== lock.inode) fail(\"LOCK_REPLACED\", \"client lock changed before release\");\n rmSync(lock.lockPath); lock.released = true;\n try { sameDirectory(directory, identity, cache); syncDirectory(directory); return \"released\"; } catch { return \"durability-unknown\"; }\n } finally {\n cache.clear();\n operationLockPrivatePathCaches.delete(lock);\n }\n}\nexport function recoverClientOperationLock(runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env, now = Date.now(), filesystem: ClientOperationFilesystem = filesystemDefaults): void {\n if (!RUNTIMES.includes(runtime)) fail(\"INVALID_OPERATION\", \"client runtime is invalid\");\n instance = safeText(instance.trim(), \"instance\");\n const pinned = pinOperationRoot(env, false);\n const path = join(pinned.locks, lockName(runtime, instance));\n try { verifyPrivatePathAccess(path, \"file\"); } catch { fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\"); }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n let details;\n try {\n details = fstatSync(descriptor);\n if (!details.isFile() || details.size > MAX_LOCK_BYTES) {\n fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\");\n }\n let metadata: Record<string, unknown>;\n try { metadata = JSON.parse(readFileSync(descriptor, \"utf8\")); } catch { fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\"); }\n if (metadata.schema !== \"agent-bridge.client-operation-lock\" || metadata.version !== 1\n || metadata.runtime !== runtime || metadata.instance !== instance || metadata.host !== hostname()\n || !Number.isSafeInteger(metadata.pid) || typeof metadata.createdAt !== \"string\"\n || !Number.isFinite(Date.parse(metadata.createdAt))) fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\");\n if (now - Date.parse(metadata.createdAt) < 60_000) fail(\"LOCK_RECOVERY_REFUSED\", \"client lock is too recent to recover\");\n try { process.kill(Number(metadata.pid), 0); fail(\"CLIENT_LOCKED\", \"client lock owner is still running\"); }\n catch (error) {\n if (error instanceof ClientOperationError) throw error;\n if (!error || typeof error !== \"object\" || !(\"code\" in error) || error.code !== \"ESRCH\") {\n fail(\"LOCK_RECOVERY_REFUSED\", \"cannot prove that the client lock owner stopped\");\n }\n }\n assertPinnedRoot(pinned);\n const current = lstatSync(path);\n if (current.dev !== details.dev || current.ino !== details.ino || current.isSymbolicLink()) fail(\"LOCK_REPLACED\", \"client lock changed during recovery\");\n } finally { closeSync(descriptor); }\n assertPinnedRoot(pinned);\n filesystem.hook(\"before-lock-remove\", path);\n assertPinnedRoot(pinned);\n filesystem.remove(path);\n assertPinnedRoot(pinned);\n filesystem.hook(\"before-directory-sync\", pinned.locks);\n filesystem.syncDirectory(pinned.locks);\n assertPinnedRoot(pinned);\n}\n\nconst TRANSITIONS = new Set([\"prepared->snapshotted\"]);\nexport function transitionClientOperation(operationId: string, current: ClientOperationManifest, state: ClientOperationState, lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env): ClientOperationManifest {\n assertLock(lock);\n const cache = privatePathCacheForLock(lock);\n const disk = readClientOperationWithCache(operationId, env, cache);\n if (disk.runtime !== lock.runtime || disk.instance !== lock.instance) fail(\"LOCK_MISMATCH\", \"client lock does not cover this operation\");\n if (disk.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only mutate on its creating host\");\n if (disk.revision !== current.revision || disk.state !== current.state || disk.operationId !== current.operationId) fail(\"STALE_OPERATION\", \"stale operation transition refused\");\n if (!TRANSITIONS.has(`${disk.state}->${state}`)) fail(\"ILLEGAL_TRANSITION\", \"operation state transition is not allowed\");\n if (state === \"snapshotted\" && !hasCompleteSnapshots(disk)) {\n fail(\"MISSING_SNAPSHOT\", \"operation requires a durable snapshot for every ordered step\");\n }\n const next = validateClientOperation({ ...disk, state, revision: disk.revision + 1, updatedAt: new Date().toISOString() });\n publish(manifestPath(operationId, env), serialize(next), filesystemDefaults, undefined, cache);\n return next;\n}\n\nfunction pendingStep(manifest: ClientOperationManifest): ClientOperationStep | undefined {\n return manifest.steps.find((step) => step.state !== \"observed-applied\");\n}\n\nfunction verifyOperationLock(operationId: string, current: ClientOperationManifest, lock: ClientOperationLock, env: NodeJS.ProcessEnv): ClientOperationManifest {\n assertLock(lock);\n const disk = readClientOperationWithCache(operationId, env, privatePathCacheForLock(lock));\n if (disk.runtime !== lock.runtime || disk.instance !== lock.instance) fail(\"LOCK_MISMATCH\", \"client lock does not cover this operation\");\n if (disk.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only mutate on its creating host\");\n if (disk.revision !== current.revision || disk.state !== current.state || disk.operationId !== current.operationId) {\n fail(\"STALE_OPERATION\", \"stale operation transition refused\");\n }\n return disk;\n}\n\n/** Persist this intent before the caller performs the corresponding external write. */\nexport function recordClientOperationStepIntent(\n operationId: string, current: ClientOperationManifest, stepIndex: number,\n lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env,\n): ClientOperationManifest {\n const disk = verifyOperationLock(operationId, current, lock, env);\n if (disk.state !== \"snapshotted\" && disk.state !== \"in-progress\") fail(\"ILLEGAL_TRANSITION\", \"operation is not ready to apply a step\");\n const step = pendingStep(disk);\n if (!step || step.index !== stepIndex || step.state !== \"pending\"\n || !disk.artifacts.some((artifact) => artifact.name === step.beforeArtifact && artifact.phase === \"before\")) {\n fail(\"ILLEGAL_TRANSITION\", \"operation step intent is out of order or lacks its snapshot\");\n }\n const now = new Date().toISOString();\n const steps = disk.steps.map((item) => item.index === stepIndex\n ? { ...item, state: \"intent-recorded\" as const, intentRecordedAt: now }\n : item);\n const next = validateClientOperation({ ...disk, state: \"in-progress\", revision: disk.revision + 1, updatedAt: now, steps });\n publish(manifestPath(operationId, env), serialize(next), filesystemDefaults, undefined, privatePathCacheForLock(lock));\n return next;\n}\n\n/** Persist observed-applied only after the caller has verified the external digest. */\nexport function recordClientOperationStepApplied(\n operationId: string, current: ClientOperationManifest, stepIndex: number, afterContents: string | Buffer,\n lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\n): ClientOperationManifest {\n const disk = verifyOperationLock(operationId, current, lock, env);\n const step = pendingStep(disk);\n const buffer = Buffer.isBuffer(afterContents) ? afterContents : Buffer.from(afterContents);\n const observedSha256 = createHash(\"sha256\").update(buffer).digest(\"hex\");\n if (disk.state !== \"in-progress\" || !step || step.index !== stepIndex || step.state !== \"intent-recorded\"\n || observedSha256 !== step.expectedAfterSha256) fail(\"AMBIGUOUS_OPERATION\", \"operation step after-state was not verified\");\n if (buffer.byteLength > MAX_SNAPSHOT_BYTES) fail(\"SNAPSHOT_TOO_LARGE\", \"artifact exceeds the operation size limit\");\n const artifactPath = join(operationDirectory(operationId, env), \"snapshots\", step.afterArtifact);\n const cache = privatePathCacheForLock(lock);\n publishAfterArtifact(artifactPath, buffer, filesystem, cache);\n const now = new Date().toISOString();\n const steps = disk.steps.map((item) => item.index === stepIndex\n ? { ...item, state: \"observed-applied\" as const, observedAppliedAt: now }\n : item);\n const artifact: ClientOperationArtifact = {\n name: step.afterArtifact, stepIndex, phase: \"after\", bytes: buffer.byteLength, sha256: observedSha256,\n cleanupIntentAt: null, removedAt: null, directoryDurability: null,\n };\n const state: ClientOperationState = steps.every((item) => item.state === \"observed-applied\") ? \"applied\" : \"in-progress\";\n const next = validateClientOperation({ ...disk, state, revision: disk.revision + 1, updatedAt: now, steps, artifacts: [...disk.artifacts, artifact] });\n try { publish(manifestPath(operationId, env), serialize(next), filesystem, undefined, cache); }\n catch { fail(\"AMBIGUOUS_OPERATION\", \"after artifact publication left ambiguous operation state\"); }\n return next;\n}\n\nexport interface ClientOperationRestartClassification {\n stepIndex: number | null;\n disposition: \"complete\" | \"retryable\" | \"advance\" | \"blocked\";\n reason: string;\n}\n\n/** Classify one externally observed digest without changing either operation or client state. */\nexport function classifyClientOperationRestart(\n manifest: ClientOperationManifest, observedSha256: string,\n): ClientOperationRestartClassification {\n const step = pendingStep(manifest);\n if (!step) return { stepIndex: null, disposition: \"complete\", reason: \"all ordered steps are durably observed applied\" };\n if (!/^[0-9a-f]{64}$/.test(observedSha256)) return { stepIndex: step.index, disposition: \"blocked\", reason: \"the pending step state is ambiguous\" };\n if (observedSha256 === step.expectedAfterSha256 && step.state === \"intent-recorded\") return { stepIndex: step.index, disposition: \"advance\", reason: \"the pending step matches its expected after-state\" };\n if (observedSha256 === step.expectedBeforeSha256) return { stepIndex: step.index, disposition: \"retryable\", reason: \"the pending step matches its expected before-state\" };\n return { stepIndex: step.index, disposition: \"blocked\", reason: \"the pending step state is ambiguous\" };\n}\nexport function writeClientOperationSnapshot(operationId: string, current: ClientOperationManifest, name: string, contents: string | Buffer, lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationManifest {\n assertLock(lock);\n const cache = privatePathCacheForLock(lock);\n name = safeText(name, \"snapshot name\", 80);\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name) || name.includes(\"..\")) fail(\"INVALID_SNAPSHOT\", \"snapshot name is invalid\");\n const disk = readClientOperationWithCache(operationId, env, cache);\n if (disk.runtime !== lock.runtime || disk.instance !== lock.instance) fail(\"LOCK_MISMATCH\", \"client lock does not cover this operation\");\n if (disk.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only mutate on its creating host\");\n const step = disk.steps.find((item) => item.beforeArtifact === name);\n if (disk.revision !== current.revision || disk.state !== \"prepared\"\n || disk.artifacts.some((item) => item.name === name) || !step) {\n fail(\"STALE_OPERATION\", \"snapshot publication refused\");\n }\n const buffer = Buffer.isBuffer(contents) ? contents : Buffer.from(contents);\n if (buffer.byteLength > MAX_SNAPSHOT_BYTES\n || disk.artifacts.reduce((total, artifact) => total + artifact.bytes, 0) + buffer.byteLength > MAX_TOTAL_SNAPSHOT_BYTES) {\n fail(\"SNAPSHOT_TOO_LARGE\", \"snapshot exceeds the operation size limit\");\n }\n const sha256 = createHash(\"sha256\").update(buffer).digest(\"hex\");\n if (sha256 !== step.expectedBeforeSha256) fail(\"SNAPSHOT_MISMATCH\", \"snapshot does not match the expected before-state\");\n const snapshotDirectory = join(operationDirectory(operationId, env), \"snapshots\");\n privateDirectory(snapshotDirectory, cache);\n publishNoReplace(join(snapshotDirectory, name), buffer, filesystem, cache);\n const artifact: ClientOperationArtifact = {\n name, stepIndex: step.index, phase: \"before\", bytes: buffer.byteLength, sha256,\n cleanupIntentAt: null, removedAt: null, directoryDurability: null,\n };\n const next = validateClientOperation({ ...disk, revision: disk.revision + 1, updatedAt: new Date().toISOString(), artifacts: [...disk.artifacts, artifact] });\n try { publish(manifestPath(operationId, env), serialize(next), filesystem, undefined, cache); }\n catch (error) { fail(\"AMBIGUOUS_OPERATION\", \"snapshot publication left ambiguous operation state\"); }\n return next;\n}\n\n/** Remove one artifact with durable intent. Call repeatedly until committed. */\nexport function cleanupClientOperationArtifact(\n operationId: string, current: ClientOperationManifest, lock: ClientOperationLock,\n env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\n): ClientOperationManifest {\n if (!UUID.test(operationId)) fail(\"INVALID_OPERATION_ID\", \"operation id is invalid\");\n const cache = privatePathCacheForLock(lock);\n try {\n return cleanupClientOperationArtifactWithCache(operationId, current, lock, env, filesystem, cache);\n } catch (error) {\n cache.clear();\n throw error;\n }\n}\n\nfunction cleanupClientOperationArtifactWithCache(\n operationId: string, current: ClientOperationManifest, lock: ClientOperationLock,\n env: NodeJS.ProcessEnv, filesystem: ClientOperationFilesystem, cache: PrivateDirectoryAccessCache,\n): ClientOperationManifest {\n const pinned = pinOperationRoot(env, false, cache);\n const operationPath = join(pinned.root, operationId.toLowerCase());\n const operationIdentity = privateDirectory(operationPath, cache);\n const directory = join(operationPath, \"snapshots\");\n const identity = privateDirectory(directory, cache);\n const operationManifest = join(operationPath, \"manifest.json\");\n const assertCleanupPaths = () => {\n assertPinnedRoot(pinned, cache);\n sameDirectory(operationPath, operationIdentity, cache);\n sameDirectory(directory, identity, cache);\n };\n assertCleanupPaths();\n let disk = verifyOperationLock(operationId, current, lock, env);\n assertCleanupPaths();\n if (disk.state === \"committed\") return disk;\n if (disk.state !== \"applied\" && disk.state !== \"cleaning\") fail(\"ILLEGAL_TRANSITION\", \"operation writes are not fully applied\");\n let artifact = disk.artifacts.find((item) => item.removedAt === null);\n if (!artifact) {\n filesystem.hook(\"before-cleanup-commit\", operationManifest);\n assertCleanupPaths();\n const now = new Date().toISOString();\n const rollback = disk.version === 4 && disk.request?.kind === \"update\" && \"rollback\" in disk.request\n ? disk.request.rollback ?? null\n : null;\n const migration = disk.version === 5 && disk.request?.kind === \"migrate\"\n ? {\n schema: \"agent-bridge.client-migration-stage-contract\" as const,\n version: 1 as const,\n stageOperationId: disk.operationId,\n request: disk.request as ClientMigrationStageRequest,\n stageRecordSha256: disk.steps[1]!.expectedAfterSha256,\n targetBackendProjectionSha256: disk.steps[0]!.expectedAfterSha256,\n }\n : disk.version === 6 && [\"migrate-cutover\", \"migrate-finalize\"].includes(String(disk.request?.kind))\n ? disk.request as ClientMigrationCutoverRequest\n : null;\n const completion: ClientOperationCompletion = {\n operation: disk.request!.kind,\n stepCount: disk.steps.length,\n completedAt: now,\n cleanupDirectoryDurability: disk.artifacts.some((item) => item.directoryDurability === \"unavailable\")\n ? \"unavailable\" : \"durable\",\n ...(disk.version === 4 ? { rollback } : {}),\n ...(disk.version === 5 || disk.version === 6 ? { migration } : {}),\n };\n const terminal = validateClientOperation({\n ...disk, request: null, state: \"committed\", revision: disk.revision + 1,\n updatedAt: now, completion, artifacts: [], steps: [],\n });\n publish(operationManifest, serialize(terminal), filesystem, operationIdentity, cache);\n assertCleanupPaths();\n return terminal;\n }\n const intentPredatedInvocation = artifact.cleanupIntentAt !== null;\n const path = join(directory, artifact.name);\n if (!intentPredatedInvocation) {\n let preflight: number;\n try { preflight = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n fail(\"CLEANUP_BLOCKED\", \"artifact disappeared before cleanup intent could authorize recovery\");\n }\n fail(\"CLEANUP_BLOCKED\", \"artifact cannot be safely opened for cleanup\");\n }\n try {\n const details = fstatSync(preflight);\n if (!details.isFile() || details.size !== artifact.bytes\n || createHash(\"sha256\").update(readFileSync(preflight)).digest(\"hex\") !== artifact.sha256) {\n fail(\"CLEANUP_BLOCKED\", \"artifact no longer matches its durable record\");\n }\n sameDirectory(directory, identity, cache);\n const currentPath = lstatSync(path);\n if (currentPath.isSymbolicLink() || currentPath.dev !== details.dev || currentPath.ino !== details.ino) {\n fail(\"PATH_REPLACED\", \"artifact changed during cleanup\");\n }\n } finally { closeSync(preflight); }\n assertCleanupPaths();\n const now = new Date().toISOString();\n const artifacts = disk.artifacts.map((item) => item.name === artifact!.name ? { ...item, cleanupIntentAt: now } : item);\n disk = validateClientOperation({ ...disk, state: \"cleaning\", revision: disk.revision + 1, updatedAt: now, artifacts });\n publish(operationManifest, serialize(disk), filesystem, operationIdentity, cache);\n assertCleanupPaths();\n filesystem.hook(\"after-cleanup-intent\", artifact.name);\n assertCleanupPaths();\n artifact = disk.artifacts.find((item) => item.name === artifact!.name)!;\n }\n let absent = false;\n let descriptor: number | undefined;\n try { descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\" && intentPredatedInvocation) absent = true;\n else if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n fail(\"CLEANUP_BLOCKED\", \"artifact disappeared before cleanup intent could authorize recovery\");\n }\n else fail(\"CLEANUP_BLOCKED\", \"artifact cannot be safely opened for cleanup\");\n }\n if (descriptor !== undefined) {\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size !== artifact.bytes\n || createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") !== artifact.sha256) {\n fail(\"CLEANUP_BLOCKED\", \"artifact no longer matches its durable record\");\n }\n sameDirectory(directory, identity, cache);\n const currentPath = lstatSync(path);\n if (currentPath.isSymbolicLink() || currentPath.dev !== details.dev || currentPath.ino !== details.ino) {\n fail(\"PATH_REPLACED\", \"artifact changed during cleanup\");\n }\n } finally { closeSync(descriptor); }\n }\n if (!absent) {\n filesystem.hook(\"before-artifact-unlink\", path);\n assertCleanupPaths();\n filesystem.remove(path);\n filesystem.hook(\"after-artifact-unlink\", path);\n }\n assertCleanupPaths();\n let directoryDurability: \"durable\" | \"unavailable\";\n if (process.platform === \"win32\") directoryDurability = \"unavailable\";\n else {\n filesystem.hook(\"before-directory-sync\", directory);\n assertCleanupPaths();\n filesystem.syncDirectory(directory);\n assertCleanupPaths();\n directoryDurability = \"durable\";\n }\n filesystem.hook(\"after-artifact-directory-sync\", path);\n const now = new Date().toISOString();\n const artifacts = disk.artifacts.map((item) => item.name === artifact!.name\n ? { ...item, removedAt: now, directoryDurability } : item);\n const next = validateClientOperation({ ...disk, state: \"cleaning\", revision: disk.revision + 1, updatedAt: now, artifacts });\n assertCleanupPaths();\n publish(operationManifest, serialize(next), filesystem, operationIdentity, cache);\n assertCleanupPaths();\n return next;\n}\n\nexport function completeClientOperationCleanup(\n operationId: string, current: ClientOperationManifest, lock: ClientOperationLock,\n env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\n): ClientOperationManifest {\n let manifest = current;\n while (manifest.state !== \"committed\") manifest = cleanupClientOperationArtifact(operationId, manifest, lock, env, filesystem);\n return manifest;\n}\n\ninterface ClientOperationArtifactInspection { intact: boolean; resumableResidue: boolean }\nfunction inspectOperationArtifacts(manifest: ClientOperationManifest, env: NodeJS.ProcessEnv, filesystem: ClientOperationFilesystem): ClientOperationArtifactInspection {\n const directory = join(operationDirectory(manifest.operationId, env), \"snapshots\");\n try {\n const identity = privateDirectory(directory);\n const names = readdirSync(directory).sort();\n filesystem.hook(\"after-snapshot-directory-read\", directory);\n sameDirectory(directory, identity);\n const retained = manifest.artifacts.filter((item) => item.removedAt === null);\n const retainedNames = new Set(retained.map((item) => item.name));\n const pending = pendingStep(manifest);\n const orphanAfter = pending?.state === \"intent-recorded\"\n && !manifest.artifacts.some((item) => item.name === pending.afterArtifact)\n ? pending : null;\n let resumableResidue = false;\n for (const name of names) {\n if (retainedNames.has(name)) continue;\n if (!orphanAfter || name !== orphanAfter.afterArtifact) return { intact: false, resumableResidue: false };\n sameDirectory(directory, identity);\n const path = join(directory, name); verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size > MAX_SNAPSHOT_BYTES\n || createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") !== orphanAfter.expectedAfterSha256) {\n return { intact: false, resumableResidue: false };\n }\n sameDirectory(directory, identity);\n resumableResidue = true;\n } finally { closeSync(descriptor); }\n }\n for (const artifact of retained) {\n if (!names.includes(artifact.name)) {\n if (artifact.cleanupIntentAt !== null) { resumableResidue = true; continue; }\n return { intact: false, resumableResidue: false };\n }\n sameDirectory(directory, identity);\n const path = join(directory, artifact.name); verifyPrivatePathAccess(path, \"file\");\n filesystem.hook(\"before-snapshot-file-open\", path);\n sameDirectory(directory, identity);\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size !== artifact.bytes || details.size > MAX_SNAPSHOT_BYTES) {\n return { intact: false, resumableResidue: false };\n }\n const matches = createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") === artifact.sha256;\n sameDirectory(directory, identity);\n if (!matches) return { intact: false, resumableResidue: false };\n } finally { closeSync(descriptor); }\n }\n return { intact: true, resumableResidue };\n } catch { return { intact: false, resumableResidue: false }; }\n}\nexport function inspectClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationSummary {\n try {\n const manifest = readClientOperation(operationId, env);\n const artifactInspection = inspectOperationArtifacts(manifest, env, filesystem);\n const intact = artifactInspection.intact;\n const pending = pendingStep(manifest);\n const ambiguous = pending?.state === \"intent-recorded\";\n const sameHost = manifest.host === hostname();\n const unsupported = manifest.state !== \"committed\"\n && (!manifest.request || !clientOperationSupportsResume(manifest.version, manifest.request.kind));\n const inspectionState: ClientOperationSummary[\"inspectionState\"] = !intact\n ? \"blocked\" : manifest.state === \"committed\" ? \"complete\" : !sameHost\n ? \"blocked\" : unsupported ? \"blocked\" : ambiguous ? \"classification-required\" : \"resumable\";\n return {\n schemaVersion: manifest.version, operationId: manifest.operationId,\n operation: manifest.request?.kind ?? manifest.completion?.operation ?? null,\n runtime: manifest.runtime, instance: manifest.instance,\n state: intact ? manifest.state : \"corrupt\", inspectionState, revision: manifest.revision,\n createdAt: manifest.createdAt, updatedAt: manifest.updatedAt,\n completedAt: manifest.completion?.completedAt ?? null,\n cleanupDirectoryDurability: manifest.completion?.cleanupDirectoryDurability ?? null,\n artifacts: intact ? manifest.artifacts : [], pendingStep: intact ? (pending?.index ?? null) : null,\n recoverable: inspectionState === \"resumable\" || inspectionState === \"classification-required\",\n reason: !intact ? \"operation artifacts do not match the durable manifest\"\n : !sameHost ? \"operation can only resume on its creating host\"\n : unsupported ? manifest.version === 2\n ? \"legacy operation lacks an identity-bound request and cannot resume\"\n : \"operation format and kind do not support resume\"\n : ambiguous ? `operation stopped at ordered step ${pending.index} and requires external-state classification`\n : manifest.state === \"committed\" ? \"operation is complete and retains a credential-free audit record\"\n : artifactInspection.resumableResidue ? \"operation contains expected crash residue and can resume safely\"\n : \"operation state is internally consistent\",\n };\n } catch (error) {\n if (!(error instanceof ClientOperationError) || error.code === \"INVALID_OPERATION_ID\") throw error;\n return { schemaVersion: CLIENT_OPERATION_VERSION, operationId: operationId.toLowerCase(), operation: null, runtime: null, instance: null, state: \"corrupt\", inspectionState: \"blocked\", revision: null, createdAt: null, updatedAt: null, completedAt: null, cleanupDirectoryDurability: null, artifacts: [], pendingStep: null, recoverable: false, reason: \"operation state is corrupt or insecure\" };\n }\n}\nexport function reconcileClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env): ClientOperationSummary {\n const summary = inspectClientOperation(operationId, env);\n if (summary.inspectionState === \"blocked\") fail(\"CORRUPT_OPERATION\", \"operation state cannot be safely reconciled\");\n if (summary.inspectionState === \"classification-required\") fail(\"AMBIGUOUS_OPERATION\", \"operation requires external-state classification at its pending step\");\n return summary;\n}\nexport function listClientOperations(env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationSummary[] {\n const root = clientOperationRoot(env);\n if (!existsSync(root)) return [];\n privateDirectory(root);\n const entries = readdirSync(root, { withFileTypes: true })\n .filter((entry) => UUID.test(entry.name));\n if (entries.length > MAX_LISTED_OPERATIONS) {\n fail(\"OPERATION_LIMIT\", \"operation directory exceeds the inspection limit\");\n }\n return entries\n .map((entry) => inspectClientOperation(entry.name, env, filesystem))\n .sort((a, b) => (b.updatedAt ?? \"\").localeCompare(a.updatedAt ?? \"\"));\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport {\n closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync,\n readFileSync, renameSync, rmSync, writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { HttpBridgeStore } from \"./http-bridge-store.js\";\nimport { edgeScopeKey, SQLiteEdgeStore } from \"./sqlite-edge-store.js\";\nimport {\n stagedGatewayBackendPaths,\n writeStagedGatewayBackendConfig,\n type InstallableRuntime,\n} from \"./client-installer.js\";\nimport {\n beginClientOperation,\n classifyClientOperationRestart,\n completeClientOperationCleanup,\n hasClientOperationLock,\n readClientOperation,\n recordClientOperationStepApplied,\n recordClientOperationStepIntent,\n recoverClientOperationLock,\n releaseClientOperationLock,\n resumeClientOperation,\n transitionClientOperation,\n writeClientOperationSnapshot,\n type ClientMigrationStageRequest,\n type ClientOperationLock,\n type ClientOperationManifest,\n} from \"./client-operation.js\";\nimport {\n loadManagedClientMetadata,\n observeManagedRegistration,\n type ClientLifecycleExecutor,\n type ManagedClientMetadata,\n} from \"./client-lifecycle.js\";\nimport {\n acquireEnrollmentLock,\n deleteEnrollmentFile,\n readEnrollment,\n recoverEnrollmentLock,\n releaseEnrollmentLock,\n transitionEnrollment,\n type EnrollmentFile,\n type EnrollmentLock,\n} from \"./enrollment-file.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst BACKEND_KEYS = [\n \"AGENT_BRIDGE_PROVIDER\",\n \"AGENT_BRIDGE_WORKSPACE\",\n \"AGENT_BRIDGE_URL\",\n \"AGENT_BRIDGE_TOKEN\",\n \"AGENT_BRIDGE_EDGE_DB\",\n \"AGENT_BRIDGE_CREDENTIAL_ID\",\n \"AGENT_BRIDGE_PRINCIPAL\",\n \"AGENT_BRIDGE_CLIENT_INSTANCE\",\n] as const;\nconst MIN_PREDECESSOR_GRACE_MS = 5 * 60_000;\n\ntype BackendKey = (typeof BACKEND_KEYS)[number];\ntype BackendValues = Record<BackendKey, string>;\n\ninterface BackendProjection {\n provider: \"gateway\";\n workspace: string;\n endpointSha256: string;\n edgeDatabasePath: string;\n credentialId: string;\n principal: string;\n instance: string;\n}\n\ninterface StageRecord {\n schema: \"agent-bridge.client-migration-stage\";\n version: 1;\n state: \"staged\";\n operationId: string;\n createdAt: string;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n enrollmentRequestId: string;\n source: {\n backendConfigPath: string;\n edgeDatabasePath: string;\n scopeKey: string;\n endpointSha256: string;\n credentialId: string;\n graceUntil: string;\n };\n target: {\n backendConfigPath: string;\n edgeDatabasePath: string;\n endpointSha256: string;\n credentialId: string;\n workspace: string;\n principal: string;\n };\n}\n\nexport interface ClientMigrationStagePlan {\n schemaVersion: 1;\n action: \"migrate-stage\";\n applied: boolean;\n operationId: string | null;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n enrollmentFile: string;\n sourceBackendPath: string;\n sourceEdgeDatabasePath: string;\n sourceScopeKey: string;\n targetBackendPath: string | null;\n stageRecordPath: string | null;\n sourceEndpointSha256: string;\n targetEndpointSha256: string;\n successorCredentialId: string;\n enrollmentStatus: \"ready\" | \"consumed-file-retained\" | \"consumed-file-missing\" | \"consumed-deletion-durability-unknown\";\n}\n\nexport interface ClientMigrationStageOptions {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n enrollmentFile: string;\n apply?: boolean;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n verifyTarget?: (input: {\n url: string;\n token: string;\n workspace: string;\n principal: string;\n instance: string;\n }) => Promise<void>;\n verifySource?: (input: {\n url: string;\n token: string;\n workspace: string;\n principal: string;\n instance: string;\n }) => Promise<void>;\n now?: () => Date;\n}\n\nexport interface ResumeClientMigrationStageOptions {\n operationId: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n verifyTarget?: ClientMigrationStageOptions[\"verifyTarget\"];\n verifySource?: ClientMigrationStageOptions[\"verifySource\"];\n now?: () => Date;\n}\n\nclass ClientMigrationStageError extends Error {\n constructor(readonly code: string, message: string) {\n super(message);\n this.name = \"ClientMigrationStageError\";\n }\n}\n\nfunction fail(code: string, message: string): never {\n throw new ClientMigrationStageError(code, message);\n}\n\nfunction text(value: unknown, label: string, maximum = 512): string {\n if (typeof value !== \"string\" || !value || value !== value.trim() || value.length > maximum\n || /[\\u0000-\\u001f\\u007f]/u.test(value)) {\n fail(\"INVALID_STAGE\", `${label} is invalid`);\n }\n return value;\n}\n\nfunction identity(value: unknown): string {\n const selected = text(value, \"identity\", 128);\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(selected)) fail(\"INVALID_STAGE\", \"identity is invalid\");\n return selected;\n}\n\nfunction uuid(value: unknown, label: string): string {\n const selected = text(value, label, 36).toLowerCase();\n if (!UUID.test(selected)) fail(\"INVALID_STAGE\", `${label} is invalid`);\n return selected;\n}\n\nfunction canonical(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n const object = value as Record<string, unknown>;\n return `{${Object.keys(object).sort().map((key) => `${JSON.stringify(key)}:${canonical(object[key])}`).join(\",\")}}`;\n}\n\nfunction digest(value: unknown): string {\n return createHash(\"sha256\").update(canonical(value), \"utf8\").digest(\"hex\");\n}\n\nfunction endpointSha256(value: string): string {\n let parsed: URL;\n try { parsed = new URL(value); } catch { fail(\"INVALID_STAGE\", \"gateway endpoint is invalid\"); }\n if (parsed.username || parsed.password || parsed.hash || parsed.search) {\n fail(\"INVALID_STAGE\", \"gateway endpoint is invalid\");\n }\n return createHash(\"sha256\").update(parsed.toString().replace(/\\/$/, \"\"), \"utf8\").digest(\"hex\");\n}\n\nfunction stageAbsentProof(): Record<string, boolean> { return { exists: false }; }\n\nfunction enrollmentProof(enrollment: EnrollmentFile): Record<string, unknown> {\n return {\n state: enrollment.state,\n operation: enrollment.operation,\n requestId: enrollment.requestId,\n credentialId: enrollment.result?.credentialId ?? null,\n inputCredentialId: enrollment.input.credentialId,\n workspaceId: enrollment.input.workspaceId,\n principal: enrollment.input.principal,\n runtime: enrollment.input.runtime,\n instance: enrollment.input.instance,\n };\n}\n\nfunction readPrivateText(path: string): string {\n verifyPrivatePathAccess(path, \"file\");\n const before = lstatSync(path);\n if (!before.isFile() || before.isSymbolicLink()) fail(\"UNSAFE_STAGE_PATH\", \"private stage file is not a regular file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.dev !== before.dev || details.ino !== before.ino) {\n fail(\"UNSAFE_STAGE_PATH\", \"private stage file changed while reading\");\n }\n return readFileSync(descriptor, \"utf8\");\n } finally {\n closeSync(descriptor);\n }\n}\n\nfunction parseBackendValues(path: string): BackendValues {\n const output: Partial<Record<BackendKey, string>> = {};\n for (const raw of readPrivateText(path).split(/\\r?\\n/u)) {\n if (!raw) continue;\n const separator = raw.indexOf(\"=\");\n if (separator <= 0) fail(\"INVALID_BACKEND\", \"client backend config is invalid\");\n const key = raw.slice(0, separator) as BackendKey;\n const value = raw.slice(separator + 1);\n if (!(BACKEND_KEYS as readonly string[]).includes(key) || key in output || !value || /[\\r\\n]/u.test(value)) {\n fail(\"INVALID_BACKEND\", \"client backend config is invalid\");\n }\n output[key] = value;\n }\n if (Object.keys(output).sort().join(\",\") !== [...BACKEND_KEYS].sort().join(\",\")) {\n fail(\"INVALID_BACKEND\", \"client backend config has an unexpected binding\");\n }\n return output as BackendValues;\n}\n\nfunction backendProjection(values: BackendValues): BackendProjection {\n if (values.AGENT_BRIDGE_PROVIDER !== \"gateway\") fail(\"INVALID_BACKEND\", \"client backend is not gateway-backed\");\n const workspace = text(values.AGENT_BRIDGE_WORKSPACE, \"workspace\", 128);\n const edgeDatabasePath = text(values.AGENT_BRIDGE_EDGE_DB, \"edge database path\", 4096);\n if (edgeDatabasePath === \":memory:\" || !isAbsolute(edgeDatabasePath) || resolve(edgeDatabasePath) !== edgeDatabasePath) {\n fail(\"INVALID_BACKEND\", \"gateway edge database path must be an absolute normalized file path\");\n }\n const credentialId = uuid(values.AGENT_BRIDGE_CREDENTIAL_ID, \"credential ID\");\n const principal = identity(values.AGENT_BRIDGE_PRINCIPAL);\n const instance = text(values.AGENT_BRIDGE_CLIENT_INSTANCE, \"instance\", 128);\n return {\n provider: \"gateway\",\n workspace,\n endpointSha256: endpointSha256(values.AGENT_BRIDGE_URL),\n edgeDatabasePath,\n credentialId,\n principal,\n instance,\n };\n}\n\nfunction backendProof(path: string, expected?: BackendProjection): Record<string, unknown> {\n if (!existsSync(path)) return stageAbsentProof();\n const actual = backendProjection(parseBackendValues(path));\n if (expected && canonical(actual) !== canonical(expected)) {\n fail(\"STAGED_BACKEND_DRIFT\", \"staged backend no longer matches its verified target\");\n }\n return { exists: true, backend: actual };\n}\n\nfunction stageRecordPaths(operationId: string, env: NodeJS.ProcessEnv): {\n backendConfigPath: string;\n edgeDatabasePath: string;\n stageRecordPath: string;\n} {\n const paths = stagedGatewayBackendPaths(operationId, env);\n return {\n backendConfigPath: paths.backendConfigPath,\n edgeDatabasePath: paths.edgeDatabasePath,\n stageRecordPath: join(paths.directory, \"stage.json\"),\n };\n}\n\nfunction assertStagePath(path: string, operationId: string, env: NodeJS.ProcessEnv): void {\n const paths = stageRecordPaths(operationId, env);\n if (![paths.backendConfigPath, paths.stageRecordPath].includes(resolve(path))) {\n fail(\"UNSAFE_STAGE_PATH\", \"stage path is outside its operation directory\");\n }\n const directory = dirname(paths.backendConfigPath);\n if (relative(directory, resolve(path)).startsWith(\"..\")) fail(\"UNSAFE_STAGE_PATH\", \"stage path is outside its operation directory\");\n}\n\nfunction assertStageTargetsAbsent(operationId: string, env: NodeJS.ProcessEnv): void {\n const paths = stageRecordPaths(operationId, env);\n for (const path of [paths.backendConfigPath, paths.stageRecordPath]) {\n if (!existsSync(path)) continue;\n assertStagePath(path, operationId, env);\n verifyPrivatePathAccess(path, \"file\");\n fail(\"AMBIGUOUS_OPERATION\", \"migration stage target already exists\");\n }\n}\n\nfunction writeStageRecord(path: string, record: StageRecord, operationId: string, env: NodeJS.ProcessEnv): string {\n assertStagePath(path, operationId, env);\n const content = `${canonical(record)}\\n`;\n const directory = dirname(path);\n const root = dirname(directory);\n mkdirSync(root, { recursive: true, mode: 0o700 });\n securePrivatePath(root, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n if (existsSync(path)) verifyPrivatePathAccess(path, \"file\");\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, content, \"utf8\");\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n securePrivatePath(temporary, \"file\");\n try {\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const directoryDescriptor = openSync(directory, \"r\");\n try { fsyncSync(directoryDescriptor); } finally { closeSync(directoryDescriptor); }\n }\n } catch (error) {\n try { rmSync(temporary, { force: true }); } catch {}\n throw error;\n }\n return content;\n}\n\nfunction readStageRecord(path: string, operationId: string, env: NodeJS.ProcessEnv): string | undefined {\n assertStagePath(path, operationId, env);\n return existsSync(path) ? readPrivateText(path) : undefined;\n}\n\nfunction expectedStageRecord(\n operationId: string,\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n request: ClientMigrationStageRequest,\n target: BackendProjection,\n createdAt: string,\n): StageRecord {\n return {\n schema: \"agent-bridge.client-migration-stage\",\n version: 1,\n state: \"staged\",\n operationId,\n createdAt,\n runtime,\n identity: identityValue,\n instance,\n enrollmentRequestId: request.enrollmentRequestId,\n source: {\n backendConfigPath: request.sourceBackendPath,\n edgeDatabasePath: request.sourceEdgeDatabasePath,\n scopeKey: request.sourceScopeKey,\n endpointSha256: request.sourceEndpointSha256,\n credentialId: request.predecessorCredentialId,\n graceUntil: request.predecessorGraceUntil,\n },\n target: {\n backendConfigPath: request.targetBackendPath,\n edgeDatabasePath: target.edgeDatabasePath,\n endpointSha256: request.targetEndpointSha256,\n credentialId: request.successorCredentialId,\n workspace: target.workspace,\n principal: target.principal,\n },\n };\n}\n\nfunction stageRecordContents(record: StageRecord): string {\n return `${canonical(record)}\\n`;\n}\n\nfunction stageRecordProof(contents: string): Record<string, unknown> {\n return { exists: true, sha256: digest(contents) };\n}\n\nfunction missingPath(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\");\n}\n\nfunction enrollmentLockPath(path: string): string {\n return `${resolve(path)}.lock`;\n}\n\n/** A surviving enrollment lock is evidence of an interrupted owner. Never bypass it. */\nfunction requireNoEnrollmentLock(path: string): void {\n const lockPath = enrollmentLockPath(path);\n if (!existsSync(lockPath)) return;\n verifyPrivatePathAccess(lockPath, \"file\");\n fail(\"ENROLLMENT_LOCKED\", \"rotation enrollment has an unfinished lock; use --recover-lock after proving it is stale\");\n}\n\nfunction recoverEnrollmentLockIfPresent(path: string, env: NodeJS.ProcessEnv): void {\n if (existsSync(enrollmentLockPath(path))) recoverEnrollmentLock(path, env);\n}\n\nfunction checkMetadata(\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n execute: ClientLifecycleExecutor | undefined,\n env: NodeJS.ProcessEnv,\n): ManagedClientMetadata {\n const metadata = loadManagedClientMetadata(runtime, instance, env);\n if (metadata.identity !== identityValue || metadata.instance !== instance || metadata.runtime !== runtime) {\n fail(\"MANAGED_CLIENT_DRIFT\", \"managed client identity does not match the requested migration\");\n }\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state !== \"exact\") fail(\"MANAGED_CLIENT_DRIFT\", \"managed client registration is not exact\");\n return metadata;\n}\n\nfunction checkEnrollment(\n enrollment: EnrollmentFile,\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n source: BackendProjection,\n minimumGraceMs = MIN_PREDECESSOR_GRACE_MS,\n now = new Date(),\n): void {\n const graceUntil = enrollment.input.graceUntil;\n if (enrollment.operation !== \"rotate\" || enrollment.input.runtime !== runtime\n || enrollment.input.principal !== identityValue || enrollment.input.instance !== instance\n || enrollment.input.credentialId !== source.credentialId || enrollment.input.workspaceId !== source.workspace\n || enrollment.result === null || enrollment.result.credentialId === source.credentialId\n || enrollment.result.principal !== identityValue || enrollment.result.workspaceId !== enrollment.input.workspaceId\n || enrollment.input.invalidateImmediately || graceUntil === null\n || new Date(graceUntil).getTime() - now.getTime() <= minimumGraceMs) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment does not match the managed client\");\n }\n}\n\nfunction makeRequest(\n operationId: string,\n metadata: ManagedClientMetadata,\n source: BackendProjection,\n enrollment: EnrollmentFile,\n enrollmentPath: string,\n env: NodeJS.ProcessEnv,\n): ClientMigrationStageRequest {\n const paths = stageRecordPaths(operationId, env);\n const successorCredentialId = enrollment.result?.credentialId;\n if (!successorCredentialId) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment has no successor credential\");\n const targetEndpointSha256 = endpointSha256(enrollment.input.gatewayUrl);\n if (source.endpointSha256 === targetEndpointSha256) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment must use a different gateway endpoint\");\n }\n return {\n kind: \"migrate\",\n identity: metadata.identity,\n enrollmentPath: resolve(enrollmentPath),\n enrollmentRequestId: enrollment.requestId,\n sourceBackendPath: metadata.backendConfigPath,\n sourceEdgeDatabasePath: source.edgeDatabasePath,\n sourceScopeKey: edgeScopeKey({\n endpoint: parseBackendValues(metadata.backendConfigPath).AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n }),\n targetBackendPath: paths.backendConfigPath,\n stageRecordPath: paths.stageRecordPath,\n predecessorGraceUntil: enrollment.input.graceUntil!,\n targetWorkspace: enrollment.input.workspaceId,\n sourceEndpointSha256: source.endpointSha256,\n targetEndpointSha256,\n predecessorCredentialId: source.credentialId,\n successorCredentialId,\n };\n}\n\nasync function verifyGatewayBackend(\n values: BackendValues,\n projection: BackendProjection,\n verifier: ClientMigrationStageOptions[\"verifyTarget\"] | ClientMigrationStageOptions[\"verifySource\"],\n): Promise<void> {\n if (verifier) {\n await verifier({\n url: values.AGENT_BRIDGE_URL,\n token: values.AGENT_BRIDGE_TOKEN,\n workspace: projection.workspace,\n principal: projection.principal,\n instance: projection.instance,\n });\n return;\n }\n const remote = new HttpBridgeStore({\n baseUrl: values.AGENT_BRIDGE_URL,\n token: values.AGENT_BRIDGE_TOKEN,\n principal: { workspace: projection.workspace, agent: projection.principal, instance: projection.instance },\n });\n try { await remote.initialize(); } finally { await remote.close?.(); }\n}\n\nasync function verifySourceStage(\n values: BackendValues,\n source: BackendProjection,\n sourceScopeKey: string,\n verifier: ClientMigrationStageOptions[\"verifySource\"],\n): Promise<void> {\n const derivedScopeKey = edgeScopeKey({\n endpoint: values.AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n });\n if (derivedScopeKey !== sourceScopeKey) fail(\"MANAGED_CLIENT_DRIFT\", \"managed source edge scope changed during migration staging\");\n await verifyGatewayBackend(values, source, verifier);\n const edge = new SQLiteEdgeStore(source.edgeDatabasePath, {\n endpoint: values.AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n });\n try {\n await edge.initialize();\n const gate = await edge.migrationGate();\n if (gate.state !== \"active\" || gate.scopeKey !== sourceScopeKey) {\n fail(\"SOURCE_EDGE_NOT_ACTIVE\", \"recorded source edge scope is not active for migration staging\");\n }\n } finally {\n await edge.close();\n }\n}\n\nfunction targetValuesFromEnrollment(enrollment: EnrollmentFile, target: BackendProjection): BackendValues {\n if (!enrollment.token) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment no longer contains a credential\");\n return {\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_WORKSPACE: target.workspace,\n AGENT_BRIDGE_URL: enrollment.input.gatewayUrl,\n AGENT_BRIDGE_TOKEN: enrollment.token,\n AGENT_BRIDGE_EDGE_DB: target.edgeDatabasePath,\n AGENT_BRIDGE_CREDENTIAL_ID: target.credentialId,\n AGENT_BRIDGE_PRINCIPAL: target.principal,\n AGENT_BRIDGE_CLIENT_INSTANCE: target.instance,\n };\n}\n\nasync function verifyStagedTargetBeforeConsumption(\n request: ClientMigrationStageRequest,\n target: BackendProjection,\n recordContents: string,\n enrollment: EnrollmentFile,\n verifier: ClientMigrationStageOptions[\"verifyTarget\"],\n operationId: string,\n env: NodeJS.ProcessEnv,\n): Promise<void> {\n const values = parseBackendValues(request.targetBackendPath);\n backendProof(request.targetBackendPath, target);\n if (!enrollment.token || values.AGENT_BRIDGE_TOKEN !== enrollment.token) {\n fail(\"STAGED_BACKEND_DRIFT\", \"staged backend credential no longer matches the rotation enrollment\");\n }\n await verifyGatewayBackend(values, target, verifier);\n if (readStageRecord(request.stageRecordPath, operationId, env) !== recordContents) {\n fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches the verified target\");\n }\n}\n\nfunction requireStageRequest(manifest: ClientOperationManifest): ClientMigrationStageRequest {\n if (manifest.version !== 5 || manifest.request?.kind !== \"migrate\"\n || !(\"identity\" in manifest.request)) {\n fail(\"CORRUPT_OPERATION\", \"operation is not a staged client migration\");\n }\n return manifest.request as ClientMigrationStageRequest;\n}\n\nfunction snapshotStageOperation(\n manifest: ClientOperationManifest,\n lock: ClientOperationLock,\n enrollment: EnrollmentFile,\n env: NodeJS.ProcessEnv,\n): ClientOperationManifest {\n let current = manifest;\n const request = requireStageRequest(current);\n const backendBefore = backendProof(request.targetBackendPath);\n const recordBefore = readStageRecord(request.stageRecordPath, current.operationId, env) === undefined\n ? stageAbsentProof()\n : { exists: true };\n if (canonical(backendBefore) !== canonical(stageAbsentProof())\n || canonical(recordBefore) !== canonical(stageAbsentProof())) {\n fail(\"AMBIGUOUS_OPERATION\", \"migration stage targets must be absent before snapshots are recorded\");\n }\n const before = [\n backendBefore,\n recordBefore,\n enrollmentProof(enrollment),\n ];\n for (const [index, proof] of before.entries()) {\n current = writeClientOperationSnapshot(current.operationId, current, current.steps[index]!.beforeArtifact,\n canonical(proof), lock, env);\n }\n return transitionClientOperation(current.operationId, current, \"snapshotted\", lock, env);\n}\n\nfunction assertPersistedManifest(current: ClientOperationManifest, env: NodeJS.ProcessEnv): void {\n if (canonical(readClientOperation(current.operationId, env)) !== canonical(current)) {\n fail(\"MANIFEST_DRIFT\", \"migration operation manifest changed before a staged write\");\n }\n}\n\nfunction checkRequestAgainstCurrent(\n manifest: ClientOperationManifest,\n execute: ClientLifecycleExecutor | undefined,\n env: NodeJS.ProcessEnv,\n now: Date,\n): { metadata: ManagedClientMetadata; source: BackendProjection; enrollment?: EnrollmentFile; target: BackendProjection } {\n const request = requireStageRequest(manifest);\n if (new Date(request.predecessorGraceUntil).getTime() <= now.getTime()) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment grace window has expired\");\n }\n const metadata = checkMetadata(manifest.runtime, request.identity, manifest.instance, execute, env);\n if (resolve(metadata.backendConfigPath) !== request.sourceBackendPath) {\n fail(\"MANAGED_CLIENT_DRIFT\", \"managed backend path changed during migration staging\");\n }\n const sourceValues = parseBackendValues(request.sourceBackendPath);\n const source = backendProjection(sourceValues);\n if (source.endpointSha256 !== request.sourceEndpointSha256 || source.credentialId !== request.predecessorCredentialId\n || source.edgeDatabasePath !== request.sourceEdgeDatabasePath\n || edgeScopeKey({ endpoint: sourceValues.AGENT_BRIDGE_URL, principal: { workspace: source.workspace, agent: source.principal } })\n !== request.sourceScopeKey\n || source.principal !== request.identity || source.instance !== manifest.instance) {\n fail(\"MANAGED_CLIENT_DRIFT\", \"managed backend binding changed during migration staging\");\n }\n let enrollment: EnrollmentFile | undefined;\n try { enrollment = readEnrollment(request.enrollmentPath, env); }\n catch (error) {\n const deletionMayBeInProgress = manifest.steps[0]?.state === \"observed-applied\"\n && manifest.steps[1]?.state === \"observed-applied\"\n && manifest.steps[2]?.state === \"intent-recorded\";\n if (!missingPath(error) || !deletionMayBeInProgress) throw error;\n }\n if (enrollment) {\n checkEnrollment(enrollment, manifest.runtime, request.identity, manifest.instance, source, 0, now);\n if (enrollment.requestId !== request.enrollmentRequestId || enrollment.result?.credentialId !== request.successorCredentialId\n || enrollment.input.graceUntil !== request.predecessorGraceUntil) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment changed during migration staging\");\n }\n }\n const target = {\n provider: \"gateway\" as const,\n workspace: request.targetWorkspace,\n endpointSha256: request.targetEndpointSha256,\n edgeDatabasePath: stageRecordPaths(manifest.operationId, env).edgeDatabasePath,\n credentialId: request.successorCredentialId,\n principal: request.identity,\n instance: manifest.instance,\n };\n if ((enrollment && (target.endpointSha256 !== endpointSha256(enrollment.input.gatewayUrl)\n || target.workspace !== enrollment.input.workspaceId))\n || target.endpointSha256 === request.sourceEndpointSha256\n || resolve(request.targetBackendPath) !== stageRecordPaths(manifest.operationId, env).backendConfigPath\n || resolve(request.stageRecordPath) !== stageRecordPaths(manifest.operationId, env).stageRecordPath) {\n fail(\"CORRUPT_OPERATION\", \"migration target paths or endpoint do not match the operation\");\n }\n return { metadata, source, enrollment, target };\n}\n\nasync function applyStageOperation(\n manifest: ClientOperationManifest,\n lock: ClientOperationLock,\n execute: ClientLifecycleExecutor | undefined,\n verifier: ClientMigrationStageOptions[\"verifyTarget\"],\n sourceVerifier: ClientMigrationStageOptions[\"verifySource\"],\n env: NodeJS.ProcessEnv,\n now: Date,\n): Promise<{ manifest: ClientOperationManifest; enrollmentStatus: ClientMigrationStagePlan[\"enrollmentStatus\"] }> {\n let current = manifest;\n const request = requireStageRequest(current);\n const checked = checkRequestAgainstCurrent(current, execute, env, now);\n let enrollment = checked.enrollment;\n if (!enrollment) requireNoEnrollmentLock(request.enrollmentPath);\n const enrollmentLock = enrollment ? acquireEnrollmentLock(request.enrollmentPath, env) : undefined;\n let enrollmentStatus: ClientMigrationStagePlan[\"enrollmentStatus\"] = \"ready\";\n try {\n if (enrollment && enrollmentLock) {\n enrollment = readEnrollment(request.enrollmentPath, env);\n checkEnrollment(enrollment, current.runtime, request.identity, current.instance, checked.source, 0, now);\n }\n if (current.state === \"prepared\") {\n if (!enrollment) fail(\"ENROLLMENT_MISMATCH\", \"missing enrollment cannot start migration staging\");\n current = snapshotStageOperation(current, lock, enrollment, env);\n }\n\n const record = expectedStageRecord(\n current.operationId, current.runtime, request.identity, current.instance, request, checked.target, current.createdAt,\n );\n const recordContents = stageRecordContents(record);\n\n const backendStep = current.steps[0]!;\n if (backendStep.state === \"observed-applied\"\n && digest(backendProof(request.targetBackendPath, checked.target)) !== backendStep.expectedAfterSha256) {\n fail(\"STAGED_BACKEND_DRIFT\", \"staged backend no longer matches its journal proof\");\n }\n if (backendStep.state !== \"observed-applied\") {\n const before = backendProof(request.targetBackendPath, checked.target);\n const classification = classifyClientOperationRestart(current, digest(before));\n if (classification.disposition === \"blocked\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n if (backendStep.state === \"pending\") {\n assertPersistedManifest(current, env);\n current = recordClientOperationStepIntent(current.operationId, current, 0, lock, env);\n assertPersistedManifest(current, env);\n }\n if (classification.disposition === \"retryable\") {\n const activeEnrollment = enrollment;\n if (!activeEnrollment || (activeEnrollment.state !== \"ready\" && activeEnrollment.state !== \"consuming\")) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment cannot create a staged backend\");\n }\n const token = activeEnrollment.token;\n if (!token) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment no longer contains a credential\");\n assertPersistedManifest(current, env);\n writeStagedGatewayBackendConfig(current.runtime, request.identity, current.instance, current.operationId, {\n token,\n gatewayUrl: activeEnrollment.input.gatewayUrl,\n workspace: activeEnrollment.input.workspaceId,\n credentialId: request.successorCredentialId,\n principal: request.identity,\n env,\n });\n }\n const after = backendProof(request.targetBackendPath, checked.target);\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 0, canonical(after), lock, env);\n }\n\n const recordStep = current.steps[1]!;\n if (recordStep.state === \"observed-applied\") {\n const contents = readStageRecord(request.stageRecordPath, current.operationId, env);\n if (contents !== recordContents || digest(stageRecordProof(contents)) !== recordStep.expectedAfterSha256) {\n fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches its journal proof\");\n }\n }\n if (recordStep.state !== \"observed-applied\") {\n const values = parseBackendValues(request.targetBackendPath);\n await verifyGatewayBackend(values, checked.target, verifier);\n const prior = readStageRecord(request.stageRecordPath, current.operationId, env);\n const proof = prior === undefined ? stageAbsentProof() : stageRecordProof(prior);\n const classification = classifyClientOperationRestart(current, digest(proof));\n if (classification.disposition === \"blocked\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n if (recordStep.state === \"pending\") {\n assertPersistedManifest(current, env);\n current = recordClientOperationStepIntent(current.operationId, current, 1, lock, env);\n assertPersistedManifest(current, env);\n }\n if (classification.disposition === \"retryable\") {\n assertPersistedManifest(current, env);\n writeStageRecord(request.stageRecordPath, record, current.operationId, env);\n }\n const afterRecord = readStageRecord(request.stageRecordPath, current.operationId, env);\n if (afterRecord !== recordContents) fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches the verified target\");\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 1,\n canonical(stageRecordProof(afterRecord)), lock, env);\n }\n\n const enrollmentStep = current.steps[2]!;\n if (enrollmentStep.state === \"observed-applied\") {\n if (existsSync(request.enrollmentPath)) {\n fail(\"ENROLLMENT_MISMATCH\", \"consumed enrollment remains after its deletion step\");\n }\n if (digest(stageAbsentProof()) !== enrollmentStep.expectedAfterSha256) {\n fail(\"CORRUPT_OPERATION\", \"enrollment deletion proof is invalid\");\n }\n }\n if (enrollmentStep.state !== \"observed-applied\") {\n if (!enrollment) {\n const fresh = checkRequestAgainstCurrent(current, execute, env, now);\n await verifySourceStage(\n parseBackendValues(request.sourceBackendPath), fresh.source, request.sourceScopeKey, sourceVerifier,\n );\n const values = parseBackendValues(request.targetBackendPath);\n backendProof(request.targetBackendPath, checked.target);\n await verifyGatewayBackend(values, checked.target, verifier);\n if (readStageRecord(request.stageRecordPath, current.operationId, env) !== recordContents) {\n fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches the verified target\");\n }\n const classification = classifyClientOperationRestart(current, digest(stageAbsentProof()));\n if (classification.disposition !== \"advance\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 2,\n canonical(stageAbsentProof()), lock, env);\n enrollmentStatus = \"consumed-file-missing\";\n } else {\n const before = enrollmentProof(enrollment);\n const classification = classifyClientOperationRestart(current, digest(before));\n if (!enrollmentLock) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment lock is unavailable\");\n if (enrollment.state === \"ready\" || enrollment.state === \"consuming\") {\n if (enrollmentStep.state === \"pending\" && classification.disposition !== \"retryable\") {\n fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n }\n // This must finish before durable intent says enrollment destruction can begin.\n const fresh = checkRequestAgainstCurrent(current, execute, env, now);\n await verifySourceStage(\n parseBackendValues(request.sourceBackendPath), fresh.source, request.sourceScopeKey, sourceVerifier,\n );\n await verifyStagedTargetBeforeConsumption(\n request,\n checked.target,\n recordContents,\n enrollment,\n verifier,\n current.operationId,\n env,\n );\n if (enrollmentStep.state === \"pending\") {\n assertPersistedManifest(current, env);\n current = recordClientOperationStepIntent(current.operationId, current, 2, lock, env);\n assertPersistedManifest(current, env);\n }\n } else if (enrollment.state !== \"consumed\" || enrollmentStep.state !== \"intent-recorded\") {\n fail(\"AMBIGUOUS_OPERATION\", \"enrollment state does not match the migration journal\");\n }\n if (enrollment.state === \"ready\") {\n assertPersistedManifest(current, env);\n enrollment = transitionEnrollment(request.enrollmentPath, enrollment, \"consuming\", {}, env, enrollmentLock);\n }\n if (enrollment.state === \"consuming\") {\n assertPersistedManifest(current, env);\n enrollment = transitionEnrollment(request.enrollmentPath, enrollment, \"consumed\", { token: null }, env, enrollmentLock);\n }\n if (enrollment.state !== \"consumed\") fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment did not reach consumed state\");\n assertPersistedManifest(current, env);\n const deletion = deleteEnrollmentFile(request.enrollmentPath, enrollmentLock, env);\n enrollmentStatus = deletion === \"deleted-and-durable\" || deletion === \"missing\" ? \"consumed-file-missing\"\n : \"consumed-deletion-durability-unknown\";\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 2,\n canonical(stageAbsentProof()), lock, env);\n }\n }\n\n current = completeClientOperationCleanup(current.operationId, current, lock, env);\n return { manifest: current, enrollmentStatus };\n } finally {\n if (enrollmentLock) releaseEnrollmentLock(enrollmentLock);\n }\n}\n\nfunction planFrom(\n metadata: ManagedClientMetadata,\n source: BackendProjection,\n enrollment: EnrollmentFile | undefined,\n enrollmentFile: string,\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n applied: boolean,\n operationId: string | null,\n enrollmentStatus: ClientMigrationStagePlan[\"enrollmentStatus\"] = \"ready\",\n env: NodeJS.ProcessEnv,\n request?: ClientMigrationStageRequest,\n): ClientMigrationStagePlan {\n const paths = operationId ? stageRecordPaths(operationId, env) : null;\n return {\n schemaVersion: 1,\n action: \"migrate-stage\",\n applied,\n operationId,\n runtime,\n identity: identityValue,\n instance,\n enrollmentFile: resolve(enrollmentFile),\n sourceBackendPath: metadata.backendConfigPath,\n sourceEdgeDatabasePath: source.edgeDatabasePath,\n sourceScopeKey: edgeScopeKey({\n endpoint: parseBackendValues(metadata.backendConfigPath).AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n }),\n targetBackendPath: paths?.backendConfigPath ?? null,\n stageRecordPath: paths?.stageRecordPath ?? null,\n sourceEndpointSha256: source.endpointSha256,\n targetEndpointSha256: enrollment ? endpointSha256(enrollment.input.gatewayUrl) : request?.targetEndpointSha256 ?? \"\",\n successorCredentialId: enrollment?.result?.credentialId ?? request?.successorCredentialId ?? \"\",\n enrollmentStatus,\n };\n}\n\nfunction completedPlanFromRequest(\n manifest: ClientOperationManifest,\n request: ClientMigrationStageRequest,\n): ClientMigrationStagePlan {\n return {\n schemaVersion: 1,\n action: \"migrate-stage\",\n applied: true,\n operationId: manifest.operationId,\n runtime: manifest.runtime,\n identity: request.identity,\n instance: manifest.instance,\n enrollmentFile: request.enrollmentPath,\n sourceBackendPath: request.sourceBackendPath,\n sourceEdgeDatabasePath: request.sourceEdgeDatabasePath,\n sourceScopeKey: request.sourceScopeKey,\n targetBackendPath: request.targetBackendPath,\n stageRecordPath: request.stageRecordPath,\n sourceEndpointSha256: request.sourceEndpointSha256,\n targetEndpointSha256: request.targetEndpointSha256,\n successorCredentialId: request.successorCredentialId,\n enrollmentStatus: \"consumed-file-missing\",\n };\n}\n\nexport async function stageClientMigrationTarget(options: ClientMigrationStageOptions): Promise<ClientMigrationStagePlan> {\n const env = options.env ?? process.env;\n const runtime = options.runtime;\n const identityValue = identity(options.identity);\n const instance = text(options.instance, \"instance\", 128);\n const enrollmentFile = resolve(options.enrollmentFile);\n if (options.recoverLock && !options.apply) {\n fail(\"INVALID_STAGE\", \"--recover-lock requires --apply\");\n }\n if (options.recoverLock) {\n if (hasClientOperationLock(runtime, instance, env)) recoverClientOperationLock(runtime, instance, env);\n recoverEnrollmentLockIfPresent(enrollmentFile, env);\n }\n requireNoEnrollmentLock(enrollmentFile);\n const metadata = checkMetadata(runtime, identityValue, instance, options.execute, env);\n const source = backendProjection(parseBackendValues(metadata.backendConfigPath));\n const enrollment = readEnrollment(enrollmentFile, env);\n const now = options.now?.() ?? new Date();\n checkEnrollment(enrollment, runtime, identityValue, instance, source, MIN_PREDECESSOR_GRACE_MS, now);\n if (enrollment.state !== \"ready\") fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment is not ready for staging\");\n if (!options.apply) {\n return planFrom(metadata, source, enrollment, enrollmentFile, runtime, identityValue, instance, false, null, \"ready\", env);\n }\n const operationId = randomUUID();\n assertStageTargetsAbsent(operationId, env);\n const stageCreatedAt = new Date().toISOString();\n const request = makeRequest(\n operationId,\n metadata,\n source,\n enrollment,\n enrollmentFile,\n env,\n );\n const target = {\n provider: \"gateway\" as const,\n workspace: request.targetWorkspace,\n endpointSha256: request.targetEndpointSha256,\n edgeDatabasePath: stageRecordPaths(operationId, env).edgeDatabasePath,\n credentialId: request.successorCredentialId,\n principal: identityValue,\n instance,\n };\n await verifySourceStage(\n parseBackendValues(metadata.backendConfigPath), source, request.sourceScopeKey, options.verifySource,\n );\n await verifyGatewayBackend(targetValuesFromEnrollment(enrollment, target), target, options.verifyTarget);\n const record = expectedStageRecord(operationId, runtime, identityValue, instance, request, target, stageCreatedAt);\n const begun = beginClientOperation({\n operationId,\n createdAt: stageCreatedAt,\n version: 5,\n request,\n runtime,\n instance,\n steps: [\n { target: \"stage-backend\", locator: request.targetBackendPath, beforeArtifact: \"backend-before\", afterArtifact: \"backend-after\", expectedBeforeSha256: digest(stageAbsentProof()), expectedAfterSha256: digest({ exists: true, backend: target }) },\n { target: \"stage-record\", locator: request.stageRecordPath, beforeArtifact: \"record-before\", afterArtifact: \"record-after\", expectedBeforeSha256: digest(stageAbsentProof()), expectedAfterSha256: digest({ exists: true, sha256: digest(stageRecordContents(record)) }) },\n { target: \"enrollment\", locator: request.enrollmentPath, beforeArtifact: \"enrollment-before\", afterArtifact: \"enrollment-after\", expectedBeforeSha256: digest(enrollmentProof(enrollment)), expectedAfterSha256: digest(stageAbsentProof()) },\n ],\n }, env);\n if (begun.manifest.createdAt !== stageCreatedAt) {\n releaseClientOperationLock(begun.lock);\n fail(\"CORRUPT_OPERATION\", \"migration stage record timestamp does not match the operation journal\");\n }\n try {\n const result = await applyStageOperation(\n begun.manifest, begun.lock, options.execute, options.verifyTarget, options.verifySource, env, now,\n );\n return planFrom(metadata, source, enrollment, enrollmentFile, runtime, identityValue, instance, true,\n result.manifest.operationId, result.enrollmentStatus, env, request);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\nexport async function resumeClientMigrationStage(\n options: ResumeClientMigrationStageOptions,\n): Promise<ClientMigrationStagePlan> {\n const env = options.env ?? process.env;\n const operation = readClientOperation(options.operationId, env);\n const request = requireStageRequest(operation);\n if (options.recoverLock) {\n if (hasClientOperationLock(operation.runtime, operation.instance, env)) {\n recoverClientOperationLock(operation.runtime, operation.instance, env);\n }\n recoverEnrollmentLockIfPresent(request.enrollmentPath, env);\n }\n requireNoEnrollmentLock(request.enrollmentPath);\n const begun = resumeClientOperation(options.operationId, env);\n try {\n if (begun.manifest.steps.every((step) => step.state === \"observed-applied\")) {\n const completed = completeClientOperationCleanup(\n begun.manifest.operationId, begun.manifest, begun.lock, env,\n );\n return completedPlanFromRequest(completed, request);\n }\n const now = options.now?.() ?? new Date();\n const checked = checkRequestAgainstCurrent(begun.manifest, options.execute, env, now);\n const result = await applyStageOperation(\n begun.manifest, begun.lock, options.execute, options.verifyTarget, options.verifySource, env, now,\n );\n return planFrom(checked.metadata, checked.source, checked.enrollment, request.enrollmentPath,\n begun.manifest.runtime, request.identity, begun.manifest.instance, true,\n result.manifest.operationId, result.enrollmentStatus, env, request);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n","import { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport { closeSync, constants, existsSync, fstatSync, lstatSync, openSync, readFileSync, readdirSync } from \"node:fs\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport { verifyPrivatePathAccess } from \"./private-path.js\";\nimport { spawnSync } from \"node:child_process\";\nimport {\n beginClientOperation, classifyClientOperationRestart, completeClientOperationCleanup,\n hasClientOperationLock, readClientOperation, recordClientOperationStepApplied,\n recordClientOperationStepIntent, recoverClientOperationLock, releaseClientOperationLock,\n resumeClientOperation, transitionClientOperation, writeClientOperationSnapshot,\n type ClientMigrationCutoverRequest, type ClientMigrationStageContract, type ClientMigrationStageRequest,\n type ClientOperationLock, type ClientOperationManagedMetadata, type ClientOperationManifest,\n type ClientOperationRegistrationProof,\n} from \"./client-operation.js\";\nimport {\n addManagedClientRegistration, removeManagedClientRegistration, replaceManagedDesktopRegistration,\n switchManagedClientMetadata,\n} from \"./client-maintenance.js\";\nimport {\n loadManagedClientMetadata, managedClientMetadataPath, observeManagedRegistration,\n type ClientLifecycleExecutor, type ManagedClientMetadata, type ManagedRegistrationObservation,\n} from \"./client-lifecycle.js\";\nimport {\n edgeScopeKey, inspectEdgeScopeReadOnly, SQLiteEdgeStore,\n type EdgeDrainLease, type EdgeMigrationGate,\n} from \"./sqlite-edge-store.js\";\nimport { SyncingBridgeStore } from \"./syncing-bridge-store.js\";\nimport { HttpBridgeStore } from \"./http-bridge-store.js\";\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst BACKEND_KEYS = [\n \"AGENT_BRIDGE_PROVIDER\", \"AGENT_BRIDGE_WORKSPACE\", \"AGENT_BRIDGE_URL\", \"AGENT_BRIDGE_TOKEN\",\n \"AGENT_BRIDGE_EDGE_DB\", \"AGENT_BRIDGE_CREDENTIAL_ID\", \"AGENT_BRIDGE_PRINCIPAL\", \"AGENT_BRIDGE_CLIENT_INSTANCE\",\n] as const;\ntype BackendKey = (typeof BACKEND_KEYS)[number];\ntype Backend = Record<BackendKey, string>;\ntype Phase = \"migrate-cutover\" | \"migrate-finalize\";\n\nexport interface ClientMigrationCutoverPlan {\n schemaVersion: 1;\n action: \"migrate-cutover\" | \"migrate-finalize\";\n applied: boolean;\n operationId: string | null;\n stageOperationId: string;\n sourceCutoverOperationId: string | null;\n runtime: \"codex\" | \"claude-code\" | \"claude-desktop\";\n instance: string;\n sourceScopeKey: string;\n exclusiveEdgeRequired: true;\n}\n\nexport interface CutoverOptions {\n stageOperationId: string;\n apply?: boolean;\n exclusiveEdge?: boolean;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n fetch?: typeof fetch;\n now?: () => Date;\n}\nexport interface CutoverResumeOptions {\n operationId: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n fetch?: typeof fetch;\n now?: () => Date;\n}\n\nclass CutoverError extends Error {\n constructor(readonly code: string, message: string) { super(message); this.name = \"CutoverError\"; }\n}\nfunction fail(code: string, message: string): never { throw new CutoverError(code, message); }\nfunction canonical(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n return `{${Object.keys(value as Record<string, unknown>).sort().map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\nfunction digest(value: unknown): string { return createHash(\"sha256\").update(canonical(value), \"utf8\").digest(\"hex\"); }\nfunction uuid(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !UUID.test(value)) fail(\"CORRUPT_OPERATION\", `${label} is invalid`);\n return value.toLowerCase();\n}\nfunction text(value: unknown, label: string, maximum = 4096): string {\n if (typeof value !== \"string\" || !value || value !== value.trim() || value.length > maximum || /[\\u0000-\\u001f\\u007f]/u.test(value)) {\n fail(\"CORRUPT_OPERATION\", `${label} is invalid`);\n }\n return value;\n}\nfunction readPrivateText(path: string): string {\n verifyPrivatePathAccess(path, \"file\");\n const before = lstatSync(path);\n if (!before.isFile() || before.isSymbolicLink()) fail(\"BACKEND_DRIFT\", \"managed backend is not a private regular file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.dev !== before.dev || opened.ino !== before.ino) {\n fail(\"BACKEND_DRIFT\", \"managed backend changed while it was opened\");\n }\n const contents = readFileSync(descriptor, \"utf8\");\n const after = lstatSync(path);\n if (!after.isFile() || after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n fail(\"BACKEND_DRIFT\", \"managed backend changed while it was read\");\n }\n return contents;\n } finally { closeSync(descriptor); }\n}\nfunction parseBackend(path: string): Backend {\n const source = readPrivateText(path);\n const values: Partial<Record<BackendKey, string>> = {};\n for (const line of source.split(/\\r?\\n/u)) {\n if (!line) continue;\n const at = line.indexOf(\"=\");\n if (at < 1) fail(\"BACKEND_DRIFT\", \"managed backend is invalid\");\n const key = line.slice(0, at) as BackendKey;\n const value = line.slice(at + 1);\n if (!(BACKEND_KEYS as readonly string[]).includes(key) || values[key] !== undefined || !value) {\n fail(\"BACKEND_DRIFT\", \"managed backend is invalid\");\n }\n values[key] = value;\n }\n if (Object.keys(values).length !== BACKEND_KEYS.length) fail(\"BACKEND_DRIFT\", \"managed backend is invalid\");\n return values as Backend;\n}\nfunction normalizedGatewayUrl(url: string): string {\n let parsed: URL;\n try { parsed = new URL(url); } catch { fail(\"BACKEND_DRIFT\", \"gateway URL is invalid\"); }\n if (parsed.username || parsed.password || parsed.search || parsed.hash) fail(\"BACKEND_DRIFT\", \"gateway URL is invalid\");\n return parsed.toString().replace(/\\/$/, \"\");\n}\nfunction endpointDigest(url: string): string {\n return createHash(\"sha256\").update(normalizedGatewayUrl(url), \"utf8\").digest(\"hex\");\n}\nfunction projection(values: Backend) {\n if (values.AGENT_BRIDGE_PROVIDER !== \"gateway\") {\n fail(\"BACKEND_DRIFT\", \"managed backend must use gateway provider\");\n }\n const edge = text(values.AGENT_BRIDGE_EDGE_DB, \"edge database path\");\n if (!isAbsolute(edge) || resolve(edge) !== edge || edge === \":memory:\") fail(\"BACKEND_DRIFT\", \"edge database path is invalid\");\n return {\n provider: \"gateway\",\n workspace: text(values.AGENT_BRIDGE_WORKSPACE, \"workspace\", 128),\n principal: text(values.AGENT_BRIDGE_PRINCIPAL, \"principal\", 128),\n instance: text(values.AGENT_BRIDGE_CLIENT_INSTANCE, \"instance\", 128),\n credentialId: uuid(values.AGENT_BRIDGE_CREDENTIAL_ID, \"credential ID\"),\n endpointSha256: endpointDigest(values.AGENT_BRIDGE_URL), edgeDatabasePath: edge,\n };\n}\nfunction gateProof(gate: EdgeMigrationGate): { state: string; operationId: string | null } {\n return { state: gate.state, operationId: gate.operationId ?? null };\n}\nfunction registrationContract(metadata: ManagedClientMetadata): ClientOperationRegistrationProof {\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n },\n },\n };\n}\nfunction observedExactRegistration(\n metadata: ManagedClientMetadata, execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv,\n): ClientOperationRegistrationProof {\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state !== \"exact\" || observed.observed.state !== \"present\") {\n fail(\"REGISTRATION_DRIFT\", \"managed registration is not exact\");\n }\n const expected = registrationContract(metadata);\n if (canonical(observed) !== canonical(expected)) fail(\"REGISTRATION_DRIFT\", \"managed registration proof drifted\");\n return expected;\n}\nfunction observedAbsentRegistration(\n metadata: ManagedClientMetadata, execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv,\n): ManagedRegistrationObservation {\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state !== \"absent\" || observed.observed.state !== \"absent\") {\n fail(\"REGISTRATION_DRIFT\", \"managed registration is not absent\");\n }\n return observed;\n}\n\nfunction stageContract(stageOperationId: string, env: NodeJS.ProcessEnv): ClientMigrationStageContract {\n const stage = readClientOperation(stageOperationId, env);\n if (stage.version !== 5 || stage.state !== \"committed\" || stage.completion?.operation !== \"migrate\") {\n fail(\"STAGE_UNAVAILABLE\", \"cutover requires a committed v5 migration stage\");\n }\n const contract = stage.completion.migration;\n if (!contract || !(\"request\" in contract) || contract.request.kind !== \"migrate\" || contract.stageOperationId !== stage.operationId) {\n fail(\"STAGE_UNAVAILABLE\", \"legacy v5 stages without a retained contract cannot authorize cutover\");\n }\n const request = contract.request;\n verifyPrivatePathAccess(request.stageRecordPath, \"file\");\n verifyPrivatePathAccess(request.targetBackendPath, \"file\");\n const recordBytes = readPrivateText(request.stageRecordPath);\n // v5 records the canonical string digest, rather than the raw-byte digest.\n // Preserve that framing here so a valid retained stage can be re-attested.\n const recordProof = digest({ exists: true, sha256: digest(recordBytes) });\n const targetProjection = projection(parseBackend(request.targetBackendPath));\n const targetProof = digest({ exists: true, backend: targetProjection });\n if (recordProof !== contract.stageRecordSha256 || targetProof !== contract.targetBackendProjectionSha256) {\n fail(\"STAGE_DRIFT\", \"retained stage contract no longer matches its private artifacts\");\n }\n return contract as ClientMigrationStageContract;\n}\nfunction stageCurrent(stageOperationId: string, env: NodeJS.ProcessEnv, execute: ClientLifecycleExecutor) {\n const contract = stageContract(stageOperationId, env);\n const request = contract.request;\n const operation = readClientOperation(stageOperationId, env);\n const metadata = loadManagedClientMetadata(operation.runtime, operation.instance, env);\n if (resolve(metadata.backendConfigPath) !== request.sourceBackendPath || metadata.identity !== request.identity) {\n fail(\"STAGE_DRIFT\", \"managed client no longer matches the staged source\");\n }\n const sourceRegistration = observedExactRegistration(metadata, execute, env);\n const sourceValues = parseBackend(request.sourceBackendPath);\n const targetValues = parseBackend(request.targetBackendPath);\n const source = projection(sourceValues); const target = projection(targetValues);\n if (source.endpointSha256 !== request.sourceEndpointSha256 || source.edgeDatabasePath !== request.sourceEdgeDatabasePath\n || source.credentialId !== request.predecessorCredentialId || source.principal !== request.identity\n || source.instance !== metadata.instance || target.endpointSha256 !== request.targetEndpointSha256\n || target.credentialId !== request.successorCredentialId || target.workspace !== request.targetWorkspace\n || target.principal !== request.identity || target.instance !== metadata.instance\n || request.sourceScopeKey !== edgeScopeKey({ endpoint: sourceValues.AGENT_BRIDGE_URL, principal: { workspace: source.workspace, agent: source.principal } })) {\n fail(\"STAGE_DRIFT\", \"stage backend bindings changed\");\n }\n const targetMetadata: ManagedClientMetadata = { ...metadata, backendConfigPath: request.targetBackendPath };\n const targetRegistration = registrationContract(targetMetadata);\n return { contract, request, metadata, targetMetadata, sourceRegistration, targetRegistration, sourceValues, targetValues, source, target };\n}\ntype StagedMigrationCurrent = ReturnType<typeof stageCurrent>;\n\nfunction retainedCurrent(\n request: ClientMigrationCutoverRequest,\n env: NodeJS.ProcessEnv,\n): StagedMigrationCurrent {\n const contract = stageContract(request.stageOperationId, env);\n if (canonical(contract) !== canonical(request.stageContract)) {\n fail(\"STAGE_DRIFT\", \"retained stage contract changed after cutover authorization\");\n }\n const targetValues = parseBackend(request.targetBackendPath);\n const sourceValues: Backend = {\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_WORKSPACE: targetValues.AGENT_BRIDGE_WORKSPACE,\n AGENT_BRIDGE_URL: request.sourceGatewayUrl,\n AGENT_BRIDGE_TOKEN: targetValues.AGENT_BRIDGE_TOKEN,\n AGENT_BRIDGE_EDGE_DB: request.sourceEdgeDatabasePath,\n AGENT_BRIDGE_CREDENTIAL_ID: targetValues.AGENT_BRIDGE_CREDENTIAL_ID,\n AGENT_BRIDGE_PRINCIPAL: request.identity,\n AGENT_BRIDGE_CLIENT_INSTANCE: request.sourceMetadata.instance,\n };\n const source = projection(sourceValues);\n const target = projection(targetValues);\n if (source.endpointSha256 !== request.sourceEndpointSha256\n || source.edgeDatabasePath !== request.sourceEdgeDatabasePath\n || source.credentialId !== request.successorCredentialId\n || source.workspace !== request.targetWorkspace\n || target.endpointSha256 !== request.targetEndpointSha256\n || target.credentialId !== request.successorCredentialId\n || target.workspace !== request.targetWorkspace\n || target.edgeDatabasePath !== request.targetEdgeDatabasePath\n || targetValues.AGENT_BRIDGE_PRINCIPAL !== request.identity\n || targetValues.AGENT_BRIDGE_CLIENT_INSTANCE !== request.targetMetadata.instance\n || edgeScopeKey({ endpoint: sourceValues.AGENT_BRIDGE_URL, principal: { workspace: source.workspace, agent: source.principal } }) !== request.sourceScopeKey\n || canonical(request.sourceMetadata) !== canonical({ ...request.sourceMetadata, backendConfigPath: request.sourceBackendPath })\n || canonical(request.targetMetadata) !== canonical({ ...request.targetMetadata, backendConfigPath: request.targetBackendPath })\n || digest(metadataProof(request.sourceMetadata)) !== request.sourceMetadataSha256\n || digest(metadataProof(request.targetMetadata)) !== request.targetMetadataSha256\n || digest(registrationProof(request.sourceRegistration)) !== request.sourceRegistrationSha256\n || digest(registrationProof(request.targetRegistration)) !== request.targetRegistrationSha256) {\n fail(\"STAGE_DRIFT\", \"retained endpoint contract no longer matches its backends\");\n }\n if (source.workspace !== sourceValues.AGENT_BRIDGE_WORKSPACE || source.principal !== request.identity\n || target.workspace !== targetValues.AGENT_BRIDGE_WORKSPACE || target.principal !== request.identity) {\n fail(\"STAGE_DRIFT\", \"retained endpoint principal bindings changed\");\n }\n assertDistinctEdges(request.sourceEdgeDatabasePath, request.targetEdgeDatabasePath);\n return {\n contract,\n request: contract.request,\n metadata: request.sourceMetadata,\n targetMetadata: request.targetMetadata,\n sourceRegistration: request.sourceRegistration,\n targetRegistration: request.targetRegistration,\n sourceValues,\n targetValues,\n source,\n target,\n };\n}\n\nfunction targetCurrent(\n request: ClientMigrationCutoverRequest,\n env: NodeJS.ProcessEnv,\n execute: ClientLifecycleExecutor,\n): StagedMigrationCurrent {\n const retained = retainedCurrent(request, env);\n const metadata = loadManagedClientMetadata(request.targetMetadata.runtime, request.targetMetadata.instance, env);\n if (canonical(metadata) !== canonical(request.targetMetadata)\n || canonical(observedExactRegistration(metadata, execute, env)) !== canonical(request.targetRegistration)) {\n fail(\"TARGET_DRIFT\", \"managed client no longer matches the retained target contract\");\n }\n return retained;\n}\n\nfunction edgeIdentity(path: string): { dev: number; ino: number } | null {\n if (!existsSync(path)) return null;\n verifyPrivatePathAccess(path, \"file\");\n const details = lstatSync(path);\n if (!details.isFile() || details.isSymbolicLink()) fail(\"EDGE_ALIAS\", \"edge database is not a private regular file\");\n return { dev: details.dev, ino: details.ino };\n}\nfunction managedEdgeCohort(\n metadata: ManagedClientMetadata,\n edgePath: string,\n env: NodeJS.ProcessEnv,\n scopeKey?: string,\n): string[] {\n const directory = dirname(managedClientMetadataPath(metadata.runtime, metadata.instance, env));\n verifyPrivatePathAccess(directory, \"directory\");\n const matches: string[] = [];\n const edgePathIdentity = edgeIdentity(edgePath);\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (!entry.isFile() || !entry.name.endsWith(\".managed.json\")) continue;\n try {\n const raw = JSON.parse(readPrivateText(resolve(directory, entry.name))) as { runtime?: string; instance?: string };\n if (!raw.runtime || !raw.instance || ![\"codex\", \"claude-code\", \"claude-desktop\"].includes(raw.runtime)) continue;\n const candidate = loadManagedClientMetadata(raw.runtime as ManagedClientMetadata[\"runtime\"], raw.instance, env);\n if (!existsSync(candidate.backendConfigPath)) continue;\n const values = parseBackend(candidate.backendConfigPath);\n const candidateProjection = projection(values);\n const candidateScope = edgeScopeKey({ endpoint: values.AGENT_BRIDGE_URL, principal: { workspace: candidateProjection.workspace, agent: candidateProjection.principal } });\n if (scopeKey !== undefined && candidateScope !== scopeKey) continue;\n const candidateIdentity = edgeIdentity(candidateProjection.edgeDatabasePath);\n const samePath = resolve(candidateProjection.edgeDatabasePath) === resolve(edgePath);\n const sameFile = edgePathIdentity !== null && candidateIdentity !== null\n && edgePathIdentity.dev === candidateIdentity.dev && edgePathIdentity.ino === candidateIdentity.ino;\n if (samePath || sameFile) matches.push(candidate.backendConfigPath);\n } catch { fail(\"SHARED_EDGE_COHORT\", \"managed edge cohort could not be inspected\"); }\n }\n return matches;\n}\nfunction assertExclusiveEdge(metadata: ManagedClientMetadata, edgePath: string, scopeKey: string, env: NodeJS.ProcessEnv): void {\n const matches = managedEdgeCohort(metadata, edgePath, env, scopeKey);\n if (new Set(matches).size !== 1 || matches.length !== 1 || matches[0] !== metadata.backendConfigPath) {\n fail(\"SHARED_EDGE_COHORT\", \"shared_edge_cohort: another managed registration uses this edge scope\");\n }\n}\nfunction assertRetainedSourceEdgeExclusive(\n metadata: ManagedClientMetadata, edgePath: string, scopeKey: string, env: NodeJS.ProcessEnv,\n): void {\n const matches = managedEdgeCohort(metadata, edgePath, env, scopeKey);\n if (matches.some((path) => path !== metadata.backendConfigPath)) {\n fail(\"SHARED_EDGE_COHORT\", \"shared_edge_cohort: another managed registration uses this edge scope\");\n }\n}\nfunction assertSourceRetirementCohort(metadata: ManagedClientMetadata, sourceEdge: string, env: NodeJS.ProcessEnv): void {\n if (managedEdgeCohort(metadata, sourceEdge, env).length !== 0) {\n fail(\"SHARED_EDGE_COHORT\", \"source_edge_cohort: a managed registration still uses the source edge\");\n }\n}\n\ninterface GatewayBinding { authorityId: string; credentialId: string; }\nasync function gatewayStatus(values: Backend, expected: { workspace: string; principal: string; credentialId: string }, fetchImpl: typeof fetch): Promise<GatewayBinding> {\n const response = await fetchImpl(`${values.AGENT_BRIDGE_URL.replace(/\\/$/, \"\")}/v2/status`, {\n headers: {\n authorization: `Bearer ${values.AGENT_BRIDGE_TOKEN}`,\n \"x-agent-bridge-protocol-version\": \"2.1\",\n \"x-agent-bridge-instance\": values.AGENT_BRIDGE_CLIENT_INSTANCE,\n },\n });\n const selected = response.headers.get(\"x-agent-bridge-protocol-version\");\n const supported = response.headers.get(\"x-agent-bridge-supported-protocol-versions\")?.split(\",\").map((item) => item.trim()) ?? [];\n if (!response.ok || selected !== \"2.1\" || !supported.includes(\"2.1\")) fail(\"GATEWAY_ATTESTATION\", \"gateway does not negotiate HTTP 2.1\");\n const status = await response.json() as Record<string, unknown>;\n const principal = status.principal as Record<string, unknown> | undefined;\n if (!principal || principal.workspace !== expected.workspace || principal.agent !== expected.principal\n || status.credentialId !== expected.credentialId || typeof status.gatewayAuthorityId !== \"string\" || !UUID.test(status.gatewayAuthorityId)) {\n fail(\"GATEWAY_ATTESTATION\", \"gateway status binding does not match the staged credential\");\n }\n return { authorityId: status.gatewayAuthorityId.toLowerCase(), credentialId: expected.credentialId };\n}\nasync function gatewayCapabilities(values: Backend, fetchImpl: typeof fetch): Promise<readonly string[]> {\n const response = await fetchImpl(values.AGENT_BRIDGE_URL.replace(/\\/$/, \"\") + \"/v2/capabilities\", {\n headers: {\n authorization: \"Bearer \" + values.AGENT_BRIDGE_TOKEN,\n \"x-agent-bridge-protocol-version\": \"2.1\",\n \"x-agent-bridge-instance\": values.AGENT_BRIDGE_CLIENT_INSTANCE,\n },\n });\n const selected = response.headers.get(\"x-agent-bridge-protocol-version\");\n const supported = response.headers.get(\"x-agent-bridge-supported-protocol-versions\")?.split(\",\").map((item) => item.trim()) ?? [];\n if (!response.ok || selected !== \"2.1\" || !supported.includes(\"2.1\")) {\n fail(\"GATEWAY_CAPABILITIES\", \"gateway does not negotiate HTTP 2.1 capabilities\");\n }\n const document = await response.json() as Record<string, unknown>;\n const grantedScopes = document.grantedScopes;\n if (!Array.isArray(grantedScopes) || grantedScopes.some((scope) => typeof scope !== \"string\" || !scope)) {\n fail(\"GATEWAY_CAPABILITIES\", \"gateway capabilities response does not include valid granted scopes\");\n }\n return grantedScopes;\n}\nasync function requireSuccessorScopes(values: Backend, fetchImpl: typeof fetch): Promise<void> {\n const grantedScopes = await gatewayCapabilities(values, fetchImpl);\n for (const scope of [\"status:read\", \"messages:write\"]) {\n if (!grantedScopes.includes(scope)) {\n fail(\"SUCCESSOR_SCOPE_MISSING\", \"successor credential lacks \" + scope);\n }\n }\n}\nasync function postChallenge(values: Backend, path: string, body: Record<string, string>, fetchImpl: typeof fetch): Promise<Record<string, unknown>> {\n const response = await fetchImpl(`${values.AGENT_BRIDGE_URL.replace(/\\/$/, \"\")}${path}`, {\n method: \"POST\", headers: {\n authorization: `Bearer ${values.AGENT_BRIDGE_TOKEN}`, \"content-type\": \"application/json\",\n \"x-agent-bridge-protocol-version\": \"2.1\", \"x-agent-bridge-instance\": values.AGENT_BRIDGE_CLIENT_INSTANCE,\n }, body: JSON.stringify(body),\n });\n if (!response.ok || response.headers.get(\"x-agent-bridge-protocol-version\") !== \"2.1\") {\n fail(\"ROUTE_CHALLENGE\", \"gateway does not support endpoint migration route challenges\");\n }\n return response.json() as Promise<Record<string, unknown>>;\n}\nasync function proveRoutes(source: Backend, target: Backend, expectedAuthority: string, fetchImpl: typeof fetch): Promise<void> {\n const challenge = randomBytes(32).toString(\"hex\");\n const issuerCredentialId = projection(source).credentialId;\n const verifierCredentialId = projection(target).credentialId;\n const issued = await postChallenge(source, \"/v2/endpoint-migration-challenges\", {\n challenge, expectedGatewayAuthorityId: expectedAuthority, verifierCredentialId,\n }, fetchImpl);\n const issuedIssuerCredentialId = typeof issued.issuerCredentialId === \"string\"\n ? issued.issuerCredentialId : null;\n const issuedVerifierCredentialId = typeof issued.verifierCredentialId === \"string\"\n ? issued.verifierCredentialId : null;\n if (issued.gatewayAuthorityId !== expectedAuthority\n || !issuedIssuerCredentialId\n || issuedIssuerCredentialId !== issuerCredentialId\n || issuedVerifierCredentialId !== verifierCredentialId) {\n fail(\"ROUTE_CHALLENGE\", \"issuer gateway challenge does not match the staged route pair\");\n }\n const consumed = await postChallenge(target, \"/v2/endpoint-migration-challenges/consume\", {\n challenge, expectedGatewayAuthorityId: expectedAuthority, issuerCredentialId: issuedIssuerCredentialId,\n }, fetchImpl);\n if (consumed.gatewayAuthorityId !== expectedAuthority\n || consumed.issuerCredentialId !== issuerCredentialId\n || consumed.verifierCredentialId !== verifierCredentialId\n || consumed.consumed !== true) {\n fail(\"ROUTE_CHALLENGE\", \"gateway endpoints did not prove one shared live authority\");\n }\n}\nasync function attestRoutePair(\n issuer: Backend, issuerExpected: ReturnType<typeof projection>,\n consumer: Backend, consumerExpected: ReturnType<typeof projection>,\n authorityId: string, fetchImpl: typeof fetch,\n): Promise<void> {\n const [issuerStatus, consumerStatus] = await Promise.all([\n gatewayStatus(issuer, issuerExpected, fetchImpl), gatewayStatus(consumer, consumerExpected, fetchImpl),\n ]);\n if (issuerStatus.authorityId !== authorityId || consumerStatus.authorityId !== authorityId\n || issuerStatus.authorityId !== consumerStatus.authorityId) {\n fail(\"GATEWAY_AUTHORITY_MISMATCH\", \"live endpoint authority no longer matches the retained migration contract\");\n }\n await proveRoutes(issuer, consumer, authorityId, fetchImpl);\n}\nfunction sourceWithSuccessor(staged: StagedMigrationCurrent): Backend {\n return {\n ...staged.sourceValues,\n AGENT_BRIDGE_TOKEN: staged.targetValues.AGENT_BRIDGE_TOKEN,\n AGENT_BRIDGE_CREDENTIAL_ID: staged.targetValues.AGENT_BRIDGE_CREDENTIAL_ID,\n };\n}\nasync function attestPhaseAuthority(\n staged: StagedMigrationCurrent, request: ClientMigrationCutoverRequest, fetchImpl: typeof fetch,\n): Promise<void> {\n const target = await gatewayStatus(staged.targetValues, staged.target, fetchImpl);\n if (target.authorityId !== request.gatewayAuthorityId) {\n fail(\"GATEWAY_AUTHORITY_MISMATCH\", \"target gateway authority no longer matches the retained migration contract\");\n }\n await proveRoutes(sourceWithSuccessor(staged), staged.targetValues, target.authorityId, fetchImpl);\n}\nfunction assertPhaseManagedCohort(\n phase: Phase,\n staged: StagedMigrationCurrent,\n request: ClientMigrationCutoverRequest,\n env: NodeJS.ProcessEnv,\n): void {\n if (phase === \"migrate-cutover\") {\n assertRetainedSourceEdgeExclusive(staged.metadata, staged.source.edgeDatabasePath, request.sourceScopeKey, env);\n return;\n }\n assertSourceRetirementCohort(staged.targetMetadata, staged.source.edgeDatabasePath, env);\n}\n\nasync function openEdge(values: Backend): Promise<SQLiteEdgeStore> {\n const edge = new SQLiteEdgeStore(values.AGENT_BRIDGE_EDGE_DB, {\n endpoint: values.AGENT_BRIDGE_URL, principal: { workspace: values.AGENT_BRIDGE_WORKSPACE, agent: values.AGENT_BRIDGE_PRINCIPAL },\n });\n await edge.initialize(); return edge;\n}\nasync function requireUntouchedTarget(values: Backend): Promise<void> {\n const edge = await openEdge(values);\n try {\n const stats = await edge.stats();\n if (stats.migrationState !== \"active\" || stats.pending !== 0 || stats.due !== 0 || stats.scheduled !== 0\n || stats.leased !== 0 || stats.blocked !== 0 || stats.cached !== 0) {\n fail(\"TARGET_EDGE_NOT_EMPTY\", \"target edge must be active and exactly empty\");\n }\n } finally { await edge.close(); }\n}\nfunction inspectEdge(values: Backend, now: Date) {\n return inspectEdgeScopeReadOnly(values.AGENT_BRIDGE_EDGE_DB, {\n endpoint: values.AGENT_BRIDGE_URL,\n principal: { workspace: values.AGENT_BRIDGE_WORKSPACE, agent: values.AGENT_BRIDGE_PRINCIPAL },\n }, now);\n}\nfunction assertForwardLocalPreconditions(\n source: Backend, target: Backend, now: Date,\n): void {\n const sourceInspection = inspectEdge(source, now);\n const targetInspection = inspectEdge(target, now);\n if (sourceInspection.gate.state !== \"active\") fail(\"EDGE_GATE_DRIFT\", \"source edge must be active before cutover\");\n if (targetInspection.gate.state !== \"active\" || targetInspection.pending !== 0 || targetInspection.due !== 0\n || targetInspection.scheduled !== 0 || targetInspection.leased !== 0 || targetInspection.blocked !== 0\n || targetInspection.cached !== 0) {\n fail(\"TARGET_EDGE_NOT_EMPTY\", \"target edge must be active and exactly empty\");\n }\n}\nfunction assertDistinctEdges(sourcePath: string, targetPath: string, requirePresent = true): void {\n if (resolve(sourcePath) === resolve(targetPath)) {\n fail(\"EDGE_ALIAS\", \"source and target edge paths must differ\");\n }\n const source = edgeIdentity(sourcePath);\n const target = edgeIdentity(targetPath);\n if (requirePresent && (!source || !target)) fail(\"EDGE_ALIAS\", \"source and target edge paths must be initialized before mutation\");\n if (source && target && source.dev === target.dev && source.ino === target.ino) {\n fail(\"EDGE_ALIAS\", \"source and target edges must not alias the same file\");\n }\n}\nasync function assertFinalizeGatePreconditions(\n staged: StagedMigrationCurrent,\n sourceCutoverOperationId: string,\n now: Date,\n): Promise<void> {\n const source = inspectEdge(staged.sourceValues, now);\n if (source.gate.state !== \"draining\" || source.gate.operationId !== sourceCutoverOperationId) {\n fail(\"EDGE_GATE_DRIFT\", \"finalization requires the retained source drain\");\n }\n}\nasync function drain(\n edge: SQLiteEdgeStore,\n remoteValues: Backend,\n lease: EdgeDrainLease,\n fetchImpl: typeof fetch,\n now: () => Date,\n): Promise<EdgeDrainLease> {\n const gate = await edge.migrationGate();\n if (gate.state !== \"draining\" || gate.operationId !== lease.operationId) {\n fail(\"EDGE_GATE_DRIFT\", \"edge is not draining for the recorded migration operation\");\n }\n const remote = new HttpBridgeStore({ baseUrl: remoteValues.AGENT_BRIDGE_URL, token: remoteValues.AGENT_BRIDGE_TOKEN,\n principal: { workspace: remoteValues.AGENT_BRIDGE_WORKSPACE, agent: remoteValues.AGENT_BRIDGE_PRINCIPAL, instance: remoteValues.AGENT_BRIDGE_CLIENT_INSTANCE }, fetch: fetchImpl });\n const sync = new SyncingBridgeStore(edge, remote, {\n workspace: remoteValues.AGENT_BRIDGE_WORKSPACE,\n agent: remoteValues.AGENT_BRIDGE_PRINCIPAL,\n instance: remoteValues.AGENT_BRIDGE_CLIENT_INSTANCE,\n }, { autoSync: false, edgeDrainLease: lease, closeEdge: false, now });\n try {\n await sync.initialize();\n for (;;) {\n lease = await edge.renewDrainLease(lease, now());\n sync.setDrainLease(lease);\n const report = await sync.sync({ maxPush: 1, maxPages: 0 });\n lease = await edge.renewDrainLease(lease, now());\n sync.setDrainLease(lease);\n const stats = await edge.stats(now());\n if (stats.blocked > 0) fail(\"SOURCE_EDGE_BLOCKED\", \"edge drain refuses blocked outbox work\");\n if (stats.pending === 0 && stats.leased === 0 && stats.scheduled === 0 && stats.due === 0) {\n await edge.assertDrainComplete(lease, now());\n return lease;\n }\n if (report.lastError || stats.scheduled > 0 || stats.leased > 0) {\n fail(\"EDGE_NOT_DRAINED\", \"edge contains scheduled, leased, or retrying work\");\n }\n }\n } finally {\n await sync.close();\n }\n}\n\nfunction metadataProof(metadata: ClientOperationManagedMetadata): Record<string, unknown> {\n return { role: \"metadata\", metadata };\n}\nfunction registrationProof(registration: ClientOperationRegistrationProof): Record<string, unknown> {\n return { role: \"registration\", observation: registration };\n}\nfunction absentRegistrationProof(registration: ClientOperationRegistrationProof): Record<string, unknown> {\n return { state: \"absent\", target: registration.target, observed: { state: \"absent\" } };\n}\nfunction requestFor(\n phase: Phase,\n migrationOperationId: string,\n sourceCutoverOperationId: string | null,\n authorityId: string,\n current: StagedMigrationCurrent,\n): ClientMigrationCutoverRequest {\n const stage = current.request;\n return {\n ...stage,\n kind: phase,\n migrationOperationId: uuid(migrationOperationId, \"migration operation ID\"),\n stageOperationId: current.contract.stageOperationId,\n sourceCutoverOperationId,\n sourceGatewayUrl: normalizedGatewayUrl(current.sourceValues.AGENT_BRIDGE_URL),\n targetEdgeDatabasePath: current.target.edgeDatabasePath,\n gatewayAuthorityId: authorityId,\n exclusiveEdgeAssertion: true,\n stageContract: current.contract,\n sourceMetadata: current.metadata,\n targetMetadata: current.targetMetadata,\n sourceRegistration: current.sourceRegistration,\n targetRegistration: current.targetRegistration,\n sourceMetadataSha256: digest(metadataProof(current.metadata)),\n targetMetadataSha256: digest(metadataProof(current.targetMetadata)),\n sourceRegistrationSha256: digest(registrationProof(current.sourceRegistration)),\n targetRegistrationSha256: digest(registrationProof(current.targetRegistration)),\n };\n}\ninterface MigrationStepSpec {\n name: string;\n target: \"edge-gate\" | \"registration\" | \"metadata\";\n locator: string;\n before: unknown;\n after: unknown;\n}\nfunction phaseStepSpecs(phase: Phase, runtime: ManagedClientMetadata[\"runtime\"], request: ClientMigrationCutoverRequest): MigrationStepSpec[] {\n const native = runtime !== \"claude-desktop\";\n const sourceActive = { state: \"active\", operationId: null };\n const sourceDraining = { state: \"draining\", operationId: request.sourceCutoverOperationId };\n const sourceExact = registrationProof(request.sourceRegistration);\n const sourceAbsent = absentRegistrationProof(request.sourceRegistration);\n const targetExact = registrationProof(request.targetRegistration);\n const targetAbsent = absentRegistrationProof(request.targetRegistration);\n const sourceMetadata = metadataProof(request.sourceMetadata);\n const targetMetadata = metadataProof(request.targetMetadata);\n if (phase === \"migrate-cutover\") {\n const steps: MigrationStepSpec[] = [{ name: \"source-drain\", target: \"edge-gate\", locator: request.sourceEdgeDatabasePath, before: sourceActive, after: { state: \"draining\", operationId: request.migrationOperationId } }];\n if (native) steps.push(\n { name: \"native-remove-source\", target: \"registration\", locator: \"native-remove-source\", before: sourceExact, after: sourceAbsent },\n { name: \"native-add-target\", target: \"registration\", locator: \"native-add-target\", before: targetAbsent, after: targetExact },\n );\n else steps.push({ name: \"desktop-replace-target\", target: \"registration\", locator: \"desktop-replace-target\", before: sourceExact, after: targetExact });\n steps.push({ name: \"metadata-switch-target\", target: \"metadata\", locator: request.sourceBackendPath, before: sourceMetadata, after: targetMetadata });\n return steps;\n }\n return [{ name: \"source-retire\", target: \"edge-gate\", locator: request.sourceEdgeDatabasePath, before: sourceDraining, after: { state: \"retired\", operationId: request.sourceCutoverOperationId! } }];\n}\nfunction phaseSteps(phase: Phase, runtime: ManagedClientMetadata[\"runtime\"], request: ClientMigrationCutoverRequest) {\n return phaseStepSpecs(phase, runtime, request).map((step) => ({\n target: step.target,\n locator: step.locator,\n beforeArtifact: `${step.name}.before`,\n afterArtifact: `${step.name}.after`,\n expectedBeforeSha256: digest(step.before),\n expectedAfterSha256: digest(step.after),\n }));\n}\nfunction specForStep(\n request: ClientMigrationCutoverRequest, phase: Phase, runtime: ManagedClientMetadata[\"runtime\"],\n step: ClientOperationManifest[\"steps\"][number],\n): MigrationStepSpec {\n const match = phaseStepSpecs(phase, runtime, request).find((candidate) => candidate.target === step.target\n && candidate.locator === step.locator && `${candidate.name}.before` === step.beforeArtifact\n && `${candidate.name}.after` === step.afterArtifact && digest(candidate.before) === step.expectedBeforeSha256\n && digest(candidate.after) === step.expectedAfterSha256);\n if (!match) fail(\"CORRUPT_OPERATION\", \"migration journal step does not match its retained phase contract\");\n return match;\n}\n\nfunction plan(phase: Phase, applied: boolean, operationId: string | null, request: ClientMigrationCutoverRequest, runtime: ManagedClientMetadata[\"runtime\"], instance: string): ClientMigrationCutoverPlan {\n return { schemaVersion: 1, action: phase, applied, operationId, stageOperationId: request.stageOperationId,\n sourceCutoverOperationId: request.sourceCutoverOperationId, runtime, instance, sourceScopeKey: request.sourceScopeKey, exclusiveEdgeRequired: true };\n}\n\nexport async function cutoverClientMigration(options: CutoverOptions): Promise<ClientMigrationCutoverPlan> {\n const env = options.env ?? process.env; const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, { encoding: \"utf8\", cwd: context?.cwd, env: context?.env }));\n if (!options.exclusiveEdge) fail(\"EXCLUSIVE_EDGE_REQUIRED\", \"--exclusive-edge is required because unmanaged publishers cannot be enumerated\");\n const now = options.now ?? (() => new Date());\n const current = stageCurrent(options.stageOperationId, env, execute);\n assertExclusiveEdge(current.metadata, current.source.edgeDatabasePath, current.request.sourceScopeKey, env);\n assertDistinctEdges(current.source.edgeDatabasePath, current.target.edgeDatabasePath, false);\n assertForwardLocalPreconditions(current.sourceValues, current.targetValues, now());\n if (!options.apply) {\n return plan(\"migrate-cutover\", false, null, requestFor(\n \"migrate-cutover\", \"00000000-0000-7000-8000-000000000000\", null,\n \"00000000-0000-7000-8000-000000000000\", current,\n ), current.metadata.runtime, current.metadata.instance);\n }\n const initializedSource = await openEdge(current.sourceValues);\n await initializedSource.close();\n const fetchImpl = options.fetch ?? fetch;\n assertExclusiveEdge(current.metadata, current.source.edgeDatabasePath, current.request.sourceScopeKey, env);\n await requireUntouchedTarget(current.targetValues);\n assertDistinctEdges(current.source.edgeDatabasePath, current.target.edgeDatabasePath);\n assertForwardLocalPreconditions(current.sourceValues, current.targetValues, now());\n const sourceBinding = await gatewayStatus(current.sourceValues, current.source, fetchImpl);\n const targetBinding = await gatewayStatus(current.targetValues, current.target, fetchImpl);\n if (sourceBinding.authorityId !== targetBinding.authorityId) fail(\"GATEWAY_AUTHORITY_MISMATCH\", \"gateway authority IDs differ\");\n await requireSuccessorScopes(current.targetValues, fetchImpl);\n await proveRoutes(current.sourceValues, current.targetValues, sourceBinding.authorityId, fetchImpl);\n const request = requestFor(\"migrate-cutover\", randomUUID(), null, sourceBinding.authorityId, current);\n if (options.recoverLock && hasClientOperationLock(current.metadata.runtime, current.metadata.instance, env)) recoverClientOperationLock(current.metadata.runtime, current.metadata.instance, env);\n const begun = beginClientOperation({ operationId: request.migrationOperationId, version: 6, request, runtime: current.metadata.runtime, instance: current.metadata.instance, steps: phaseSteps(request.kind, current.metadata.runtime, request) }, env);\n try {\n // The predecessor credentials authorize only the pre-journal challenge.\n // Every journal mutation uses the retained successor route instead.\n return await applyOperation(begun.manifest, begun.lock, retainedCurrent(request, env), execute, fetchImpl, now, env);\n }\n finally { releaseClientOperationLock(begun.lock); }\n}\n\nfunction currentRegistrationProof(metadata: ManagedClientMetadata, contract: ClientOperationRegistrationProof,\n execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv): unknown {\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state === \"exact\" && observed.observed.state === \"present\") {\n if (canonical(observed) !== canonical(contract)) fail(\"REGISTRATION_DRIFT\", \"managed registration proof drifted\");\n return registrationProof(contract);\n }\n if (observed.state === \"absent\" && observed.observed.state === \"absent\") return absentRegistrationProof(contract);\n fail(\"REGISTRATION_DRIFT\", \"managed registration is neither the recorded before nor after state\");\n}\nfunction currentDesktopReplacementProof(\n beforeMetadata: ManagedClientMetadata, before: ClientOperationRegistrationProof,\n afterMetadata: ManagedClientMetadata, after: ClientOperationRegistrationProof,\n execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv,\n): unknown {\n const beforeObserved = observeManagedRegistration(beforeMetadata, execute, env);\n if (beforeObserved.state === \"exact\" && beforeObserved.observed.state === \"present\"\n && canonical(beforeObserved) === canonical(before)) return registrationProof(before);\n const afterObserved = observeManagedRegistration(afterMetadata, execute, env);\n if (afterObserved.state === \"exact\" && afterObserved.observed.state === \"present\"\n && canonical(afterObserved) === canonical(after)) return registrationProof(after);\n fail(\"REGISTRATION_DRIFT\", \"Desktop registration is neither recorded replacement state\");\n}\n\nasync function observedStepProof(\n request: ClientMigrationCutoverRequest,\n phase: Phase,\n step: ClientOperationManifest[\"steps\"][number],\n sourceGate: SQLiteEdgeStore,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): Promise<unknown> {\n const spec = specForStep(request, phase, request.sourceMetadata.runtime, step);\n if (spec.target === \"edge-gate\") {\n return gateProof(await sourceGate.migrationGate());\n }\n if (spec.name === \"desktop-replace-target\") {\n return currentDesktopReplacementProof(request.sourceMetadata, request.sourceRegistration,\n request.targetMetadata, request.targetRegistration, execute, env);\n }\n if (spec.name === \"native-remove-source\") {\n return currentRegistrationProof(request.sourceMetadata, request.sourceRegistration, execute, env);\n }\n if (spec.name === \"native-add-target\") return currentRegistrationProof(request.targetMetadata, request.targetRegistration, execute, env);\n return metadataProof(loadManagedClientMetadata(request.sourceMetadata.runtime, request.sourceMetadata.instance, env));\n}\n\nasync function claimDrain(\n edge: SQLiteEdgeStore, operationId: string, now: Date,\n): Promise<EdgeDrainLease> {\n const gate = await edge.migrationGate();\n if (gate.state === \"active\") return edge.beginDrain(operationId, now);\n if (gate.state === \"draining\" && gate.operationId === operationId) return edge.resumeDrain(operationId, now);\n fail(\"EDGE_GATE_DRIFT\", \"edge gate cannot be claimed by this migration phase\");\n}\n\nasync function applyOperation(\n manifest: ClientOperationManifest,\n lock: ClientOperationLock,\n staged: StagedMigrationCurrent,\n execute: ClientLifecycleExecutor,\n fetchImpl: typeof fetch,\n now: () => Date,\n env: NodeJS.ProcessEnv,\n): Promise<ClientMigrationCutoverPlan> {\n const request = manifest.request as ClientMigrationCutoverRequest;\n let current = manifest;\n const phase = request.kind;\n if (current.state === \"prepared\") {\n for (const step of current.steps) {\n const spec = specForStep(request, phase, current.runtime, step);\n current = writeClientOperationSnapshot(current.operationId, current, step.beforeArtifact,\n canonical(spec.before), lock, env);\n }\n current = transitionClientOperation(current.operationId, current, \"snapshotted\", lock, env);\n }\n const sourceGate = await openEdge(staged.sourceValues);\n let sourceLease: EdgeDrainLease | undefined;\n let forwardDrained = false;\n try {\n for (let index = 0; index < current.steps.length; index += 1) {\n const step = current.steps[index]!;\n const spec = specForStep(request, phase, current.runtime, step);\n let observed = await observedStepProof(request, phase, step, sourceGate, execute, env);\n if (step.state === \"observed-applied\") {\n if (digest(observed) !== step.expectedAfterSha256) fail(\"AMBIGUOUS_OPERATION\", \"applied migration step no longer matches its durable after-state\");\n continue;\n }\n const classification = classifyClientOperationRestart(current, digest(observed));\n if (classification.disposition === \"blocked\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n if (classification.disposition === \"advance\") {\n current = recordClientOperationStepApplied(current.operationId, current, index, canonical(observed), lock, env);\n continue;\n }\n // Every real edge or host mutation is preceded by a fresh, apply-only\n // authority check. Dry-run paths never enter this function.\n await attestPhaseAuthority(staged, request, fetchImpl);\n // A resumed journal can observe a changed managed cohort after its last\n // durable step. Check the phase-specific cohort immediately before each\n // new mutation, rather than trusting the original cutover assertion.\n assertPhaseManagedCohort(phase, staged, request, env);\n if (step.state === \"pending\") current = recordClientOperationStepIntent(current.operationId, current, index, lock, env);\n\n if (step.target === \"edge-gate\") {\n if (phase === \"migrate-cutover\") {\n sourceLease = await claimDrain(sourceGate, request.migrationOperationId, now());\n } else {\n if (new Date(request.predecessorGraceUntil).getTime() > now().getTime()) {\n fail(\"FINALIZE_REFUSED\", \"source edge is not eligible for finalization\");\n }\n sourceLease = await claimDrain(sourceGate, request.sourceCutoverOperationId!, now());\n await sourceGate.assertDrainComplete(sourceLease, now());\n await sourceGate.retireScope(sourceLease, now());\n }\n } else if (phase === \"migrate-cutover\") {\n if (!sourceLease) sourceLease = await claimDrain(sourceGate, request.migrationOperationId, now());\n if (!forwardDrained) {\n sourceLease = await drain(sourceGate, staged.targetValues, sourceLease, fetchImpl, now);\n forwardDrained = true;\n }\n // Drain work can take arbitrarily long. Re-attest the route before the\n // registration or metadata write that follows it.\n await attestPhaseAuthority(staged, request, fetchImpl);\n assertPhaseManagedCohort(phase, staged, request, env);\n await sourceGate.assertDrainComplete(sourceLease, now());\n sourceLease = await sourceGate.renewDrainLease(sourceLease, now());\n await sourceGate.assertDrainLease(sourceLease, now());\n if (spec.name === \"native-remove-source\") removeManagedClientRegistration(request.sourceMetadata, execute, env);\n else if (spec.name === \"native-add-target\") addManagedClientRegistration(request.targetMetadata, execute, env);\n else if (spec.name === \"desktop-replace-target\") {\n replaceManagedDesktopRegistration(request.sourceMetadata, request.targetMetadata, current.operationId, index, execute, env);\n } else if (spec.name === \"metadata-switch-target\") {\n switchManagedClientMetadata(request.sourceMetadata, request.targetMetadata, env);\n } else fail(\"CORRUPT_OPERATION\", \"unexpected forward migration step\");\n } else {\n fail(\"CORRUPT_OPERATION\", \"unexpected finalization step\");\n }\n observed = await observedStepProof(request, phase, step, sourceGate, execute, env);\n current = recordClientOperationStepApplied(current.operationId, current, index, canonical(observed), lock, env);\n }\n } finally {\n await sourceGate.close();\n }\n current = completeClientOperationCleanup(current.operationId, current, lock, env);\n return plan(phase, true, current.operationId, request, current.runtime, current.instance);\n}\n\nexport async function resumeClientMigrationCutover(options: CutoverResumeOptions): Promise<ClientMigrationCutoverPlan> {\n const env = options.env ?? process.env; const original = readClientOperation(options.operationId, env);\n if (original.version !== 6 || !original.request || ![\"migrate-cutover\", \"migrate-finalize\"].includes(original.request.kind)) fail(\"CORRUPT_OPERATION\", \"operation is not a v6 endpoint migration\");\n if (options.recoverLock && hasClientOperationLock(original.runtime, original.instance, env)) recoverClientOperationLock(original.runtime, original.instance, env);\n const begun = resumeClientOperation(options.operationId, env);\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, { encoding: \"utf8\", cwd: context?.cwd, env: context?.env }));\n try {\n const request = begun.manifest.request as ClientMigrationCutoverRequest;\n // A resumed journal is allowed to be between its recorded before and after\n // registration or metadata states. Per-step classification owns that proof.\n const staged = retainedCurrent(request, env);\n return await applyOperation(begun.manifest, begun.lock, staged, execute, options.fetch ?? fetch, options.now ?? (() => new Date()), env);\n } finally { releaseClientOperationLock(begun.lock); }\n}\n\nexport async function finalizeClientMigration(options: Omit<CutoverOptions, \"stageOperationId\"> & { cutoverOperationId: string }): Promise<ClientMigrationCutoverPlan> {\n const env = options.env ?? process.env; const source = readClientOperation(options.cutoverOperationId, env);\n const prior = source.completion?.migration;\n if (source.version !== 6 || source.completion?.operation !== \"migrate-cutover\" || !prior || !(\"kind\" in prior) || prior.kind !== \"migrate-cutover\") fail(\"FINALIZE_REFUSED\", \"finalize requires a committed forward cutover\");\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, { encoding: \"utf8\", cwd: context?.cwd, env: context?.env }));\n const dryCurrent = targetCurrent(prior, env, execute);\n const now = options.now ?? (() => new Date());\n if (!options.exclusiveEdge) fail(\"EXCLUSIVE_EDGE_REQUIRED\", \"--exclusive-edge is required because finalization mutates the retained source cohort\");\n assertSourceRetirementCohort(dryCurrent.targetMetadata, dryCurrent.source.edgeDatabasePath, env);\n if (new Date(prior.predecessorGraceUntil).getTime() > now().getTime()) fail(\"FINALIZE_REFUSED\", \"source edge is not eligible for finalization\");\n await assertFinalizeGatePreconditions(dryCurrent, source.operationId, now());\n if (!options.apply) return plan(\"migrate-finalize\", false, null, requestFor(\n \"migrate-finalize\", \"00000000-0000-7000-8000-000000000000\", source.operationId,\n prior.gatewayAuthorityId, dryCurrent,\n ), source.runtime, source.instance);\n const staged = dryCurrent;\n const request = requestFor(\"migrate-finalize\", randomUUID(), source.operationId, prior.gatewayAuthorityId, staged);\n if (options.recoverLock && hasClientOperationLock(source.runtime, source.instance, env)) {\n recoverClientOperationLock(source.runtime, source.instance, env);\n }\n const begun = beginClientOperation({ operationId: request.migrationOperationId, version: 6, request, runtime: source.runtime, instance: source.instance, steps: phaseSteps(request.kind, source.runtime, request) }, env);\n try { return await applyOperation(begun.manifest, begun.lock, staged, execute, options.fetch ?? fetch, now, env); }\n finally { releaseClientOperationLock(begun.lock); }\n}\n","import { randomBytes, randomUUID } from \"node:crypto\";\nimport pg from \"pg\";\nimport {\n canonicalGatewayUrl,\n canonicalTimestamp,\n acquireEnrollmentLock,\n createPendingEnrollment,\n defaultEnrollmentPath,\n enrollmentTokenHash,\n readEnrollment,\n recoverEnrollmentLock,\n releaseEnrollmentLock,\n transitionEnrollment,\n type EnrollmentLock,\n type EnrollmentFile,\n type EnrollmentInput,\n type EnrollmentResult,\n} from \"./enrollment-file.js\";\n\nexport type OwnerOptionValue = string | boolean | undefined;\nexport type OwnerOptions = Record<string, OwnerOptionValue>;\ntype Queryable = Pick<pg.Pool, \"query\">;\n\nclass OwnerDatabaseFailure extends Error {\n constructor(readonly driverCode: string) {\n super(\"owner database operation failed\");\n }\n}\n\nasync function ownerQuery<T extends pg.QueryResultRow>(\n db: Queryable,\n sql: string,\n values: unknown[],\n): Promise<pg.QueryResult<T>> {\n try {\n return await db.query<T>(sql, values);\n } catch (error) {\n const code = error && typeof error === \"object\" && \"code\" in error\n ? String((error as { code?: unknown }).code ?? \"\")\n : \"\";\n throw new OwnerDatabaseFailure(code);\n }\n}\n\nexport interface OwnerDependencies {\n connect(databaseUrl: string): { db: Queryable; close(): Promise<void> };\n now(): Date;\n requestId(): string;\n token(): string;\n instance(runtime: EnrollmentInput[\"runtime\"]): string;\n}\n\nconst defaultDependencies: OwnerDependencies = {\n connect(databaseUrl) {\n const pool = new pg.Pool({\n connectionString: databaseUrl,\n max: 1,\n connectionTimeoutMillis: 10_000,\n query_timeout: 30_000,\n });\n return { db: pool, close: () => pool.end() };\n },\n now: () => new Date(),\n requestId: () => randomUUID(),\n token: () => randomBytes(32).toString(\"base64url\"),\n instance: (runtime) => runtime + \"-\" + randomUUID(),\n};\n\nfunction stringOption(options: OwnerOptions, name: string): string | undefined {\n const value = options[name];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction required(options: OwnerOptions, name: string): string {\n const value = stringOption(options, name);\n if (!value) throw new Error(\"--\" + name + \" is required\");\n return value;\n}\n\nfunction selectWithEnvironment(\n options: OwnerOptions,\n name: string,\n env: NodeJS.ProcessEnv,\n environmentName: string,\n requiredValue: boolean,\n): string | undefined {\n const explicit = stringOption(options, name);\n const environment = env[environmentName]?.trim() || undefined;\n if (explicit && environment && explicit !== environment) {\n throw new Error(\"--\" + name + \" conflicts with \" + environmentName);\n }\n const selected = explicit ?? environment;\n if (requiredValue && !selected) {\n throw new Error(\"--\" + name + \" or \" + environmentName + \" is required\");\n }\n return selected;\n}\n\nfunction timestamp(options: OwnerOptions, name: string): string | null {\n const value = stringOption(options, name) ?? null;\n return canonicalTimestamp(value, \"--\" + name);\n}\n\nfunction installRuntime(options: OwnerOptions): EnrollmentInput[\"runtime\"] {\n const value = required(options, \"runtime\");\n if (value !== \"codex\" && value !== \"claude-code\" && value !== \"claude-desktop\") {\n throw new Error(\"--runtime must be codex, claude-code, or claude-desktop\");\n }\n return value;\n}\n\nfunction scopeSet(options: OwnerOptions): string {\n const value = required(options, \"scope-set\");\n if (!/^[a-z][a-z0-9-]{0,63}$/.test(value)) throw new Error(\"--scope-set is invalid\");\n return value;\n}\n\nfunction uuidValue(value: string, label: string): string {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n throw new Error(label + \" must be a UUID\");\n }\n return value;\n}\n\nfunction uuidOption(options: OwnerOptions, name: string): string {\n return uuidValue(required(options, name), \"--\" + name);\n}\n\nconst OWNER_OPTIONS: Record<string, ReadonlySet<string>> = {\n provision: new Set([\n \"workspace\", \"workspace-name\", \"identity\", \"runtime\", \"instance\", \"gateway-url\",\n \"scope-set\", \"display-name\", \"runtime-type\", \"label\", \"expires-at\", \"request-id\",\n \"enrollment-file\", \"recover-lock\",\n ]),\n rotate: new Set([\n \"workspace\", \"identity\", \"runtime\", \"instance\", \"gateway-url\", \"scope-set\",\n \"runtime-type\", \"label\", \"expires-at\", \"grace-until\", \"invalidate-immediately\",\n \"credential-id\", \"request-id\", \"enrollment-file\", \"recover-lock\",\n ]),\n inventory: new Set([\"workspace\", \"cursor\", \"limit\"]),\n revoke: new Set([\"credential-id\", \"reason\", \"request-id\"]),\n};\n\nfunction validateOwnerOptions(subcommand: string, options: OwnerOptions): void {\n if (stringOption(options, \"resume\")) {\n const override = Object.keys(options).find((key) => key !== \"resume\" && key !== \"recover-lock\");\n if (override) throw new Error(\"--\" + override + \" cannot be used with --resume\");\n if (subcommand !== \"provision\" && subcommand !== \"rotate\") {\n throw new Error(\"--resume is valid only for provision or rotate\");\n }\n return;\n }\n const allowed = OWNER_OPTIONS[subcommand];\n const invalid = Object.keys(options).find((key) => !allowed?.has(key));\n if (invalid) throw new Error(\"--\" + invalid + \" is not valid for owner \" + subcommand);\n}\n\nfunction requestId(options: OwnerOptions, dependencies: OwnerDependencies): string {\n return stringOption(options, \"request-id\") ? uuidOption(options, \"request-id\") : dependencies.requestId();\n}\n\nfunction initialEnrollment(\n operation: \"provision\" | \"rotate\",\n options: OwnerOptions,\n env: NodeJS.ProcessEnv,\n dependencies: OwnerDependencies,\n): { path: string; enrollment: EnrollmentFile } {\n const request = requestId(options, dependencies);\n const runtime = installRuntime(options);\n const gatewayUrl = canonicalGatewayUrl(\n selectWithEnvironment(options, \"gateway-url\", env, \"AGENT_BRIDGE_URL\", true),\n \"--gateway-url\",\n );\n const workspaceId = required(options, \"workspace\");\n const principal = required(options, \"identity\");\n const explicitInstance = stringOption(options, \"instance\");\n const instance = operation === \"rotate\"\n ? explicitInstance ?? (() => { throw new Error(\"--instance is required for rotation\"); })()\n : explicitInstance ?? dependencies.instance(runtime);\n const graceUntil = timestamp(options, \"grace-until\");\n const invalidateImmediately = options[\"invalidate-immediately\"] === true\n || options[\"invalidate-immediately\"] === \"true\";\n if (operation === \"rotate\" && (graceUntil === null) === !invalidateImmediately) {\n throw new Error(\"rotation requires exactly one of --grace-until or --invalidate-immediately\");\n }\n if (operation === \"provision\" && (graceUntil !== null || invalidateImmediately)) {\n throw new Error(\"provision does not accept rotation invalidation options\");\n }\n const input: EnrollmentInput = {\n gatewayUrl,\n workspaceId,\n principal,\n runtime,\n instance,\n credentialId: operation === \"rotate\" ? uuidOption(options, \"credential-id\") : null,\n workspaceName: operation === \"provision\" ? required(options, \"workspace-name\") : null,\n displayName: stringOption(options, \"display-name\") ?? null,\n runtimeType: stringOption(options, \"runtime-type\") ?? runtime,\n label: stringOption(options, \"label\") ?? null,\n scopeSetName: scopeSet(options),\n expiresAt: timestamp(options, \"expires-at\"),\n graceUntil,\n invalidateImmediately,\n };\n if (operation === \"rotate\" && input.displayName !== null) {\n throw new Error(\"rotate does not accept --display-name\");\n }\n const enrollment: EnrollmentFile = {\n schema: \"agent-bridge.enrollment\",\n version: 1,\n provider: \"gateway\",\n revision: 0,\n state: \"pending\",\n operation,\n requestId: request,\n createdAt: dependencies.now().toISOString(),\n completedAt: null,\n input,\n token: dependencies.token(),\n result: null,\n };\n const path = stringOption(options, \"enrollment-file\") ?? defaultEnrollmentPath(request, env);\n createPendingEnrollment(path, enrollment, env);\n return { path, enrollment };\n}\n\nfunction enrollment(\n operation: \"provision\" | \"rotate\",\n options: OwnerOptions,\n env: NodeJS.ProcessEnv,\n dependencies: OwnerDependencies,\n): { path: string; enrollment: EnrollmentFile } {\n const resume = stringOption(options, \"resume\");\n if (!resume) return initialEnrollment(operation, options, env, dependencies);\n const loaded = readEnrollment(resume, env);\n if (loaded.operation !== operation) {\n throw new Error(\"enrollment operation is \" + loaded.operation + \", not \" + operation);\n }\n return { path: resume, enrollment: loaded };\n}\n\nfunction publicEnrollment(path: string, enrollment: EnrollmentFile): Record<string, unknown> {\n if (!enrollment.result) throw new Error(\"enrollment has no completed result\");\n return {\n schemaVersion: 1,\n status: \"ok\",\n operation: enrollment.operation,\n requestId: enrollment.requestId,\n enrollmentFile: path,\n enrollmentState: enrollment.state,\n ...enrollment.result,\n };\n}\n\nasync function runProvision(\n db: Queryable,\n path: string,\n enrollment: EnrollmentFile,\n completedAt: string,\n env: NodeJS.ProcessEnv,\n lock: EnrollmentLock,\n): Promise<Record<string, unknown>> {\n if (enrollment.state !== \"pending\") return publicEnrollment(path, enrollment);\n const input = enrollment.input;\n const response = await ownerQuery<{\n workspace_id: string; agent_id: string; credential_id: string; replayed: boolean;\n }>(\n db,\n \"SELECT * FROM agent_bridge.control_provision(\" +\n \"$1::uuid,$2::text,$3::text,$4::text,$5::text,$6::text,$7::char(64),\" +\n \"$8::text,$9::text,$10::timestamptz)\",\n [enrollment.requestId, input.workspaceId, input.workspaceName, input.principal,\n input.displayName, input.runtimeType, enrollmentTokenHash(enrollment),\n input.label, input.scopeSetName, input.expiresAt],\n );\n const row = response.rows[0];\n if (!row) throw new Error(\"owner provision returned no result\");\n const result: EnrollmentResult = {\n workspaceId: row.workspace_id,\n principal: input.principal,\n agentId: row.agent_id,\n credentialId: row.credential_id,\n replayed: row.replayed,\n };\n const ready = transitionEnrollment(path, enrollment, \"ready\", { completedAt, result }, env, lock);\n return publicEnrollment(path, ready);\n}\n\nasync function runRotate(\n db: Queryable,\n path: string,\n enrollment: EnrollmentFile,\n completedAt: string,\n env: NodeJS.ProcessEnv,\n lock: EnrollmentLock,\n): Promise<Record<string, unknown>> {\n if (enrollment.state !== \"pending\") return publicEnrollment(path, enrollment);\n const input = enrollment.input;\n const response = await ownerQuery<{\n credential_id: string; workspace_id: string; principal: string; replayed: boolean;\n }>(\n db,\n \"SELECT * FROM agent_bridge.control_rotate_credential(\" +\n \"$1::uuid,$2::uuid,$3::text,$4::text,$5::char(64),$6::text,$7::text,\" +\n \"$8::timestamptz,$9::timestamptz)\",\n [enrollment.requestId, input.credentialId, input.workspaceId, input.principal,\n enrollmentTokenHash(enrollment), input.label, input.scopeSetName,\n input.expiresAt, input.graceUntil],\n );\n const row = response.rows[0];\n if (!row) throw new Error(\"owner rotation returned no result\");\n const result: EnrollmentResult = {\n workspaceId: row.workspace_id,\n principal: row.principal,\n agentId: null,\n credentialId: row.credential_id,\n replayed: row.replayed,\n };\n const ready = transitionEnrollment(path, enrollment, \"ready\", { completedAt, result }, env, lock);\n return publicEnrollment(path, ready);\n}\n\ninterface InventoryCursor {\n v: 1;\n workspace: string | null;\n createdAt: string;\n credentialId: string;\n}\n\nfunction decodeCursor(raw: string | undefined, workspace: string | null): InventoryCursor | null {\n if (!raw) return null;\n let parsed: unknown;\n try { parsed = JSON.parse(Buffer.from(raw, \"base64url\").toString(\"utf8\")); }\n catch { throw new Error(\"--cursor is not a valid owner inventory cursor\"); }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"--cursor is not a valid owner inventory cursor\");\n }\n const cursor = parsed as Record<string, unknown>;\n if (cursor.v !== 1 || cursor.workspace !== workspace\n || typeof cursor.createdAt !== \"string\"\n || typeof cursor.credentialId !== \"string\") {\n throw new Error(\"--cursor does not match this inventory request\");\n }\n let createdAt: string | null;\n try { createdAt = canonicalTimestamp(cursor.createdAt, \"inventory cursor createdAt\"); }\n catch { throw new Error(\"--cursor is not a valid owner inventory cursor\"); }\n if (createdAt === null) throw new Error(\"--cursor is not a valid owner inventory cursor\");\n let credentialId: string;\n try { credentialId = uuidValue(cursor.credentialId, \"inventory cursor credentialId\"); }\n catch { throw new Error(\"--cursor is not a valid owner inventory cursor\"); }\n return { v: 1, workspace, createdAt, credentialId };\n}\n\nfunction encodeCursor(cursor: InventoryCursor): string {\n return Buffer.from(JSON.stringify(cursor), \"utf8\").toString(\"base64url\");\n}\n\nfunction instant(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n return value instanceof Date ? value.toISOString() : new Date(String(value)).toISOString();\n}\n\nasync function runInventory(db: Queryable, options: OwnerOptions): Promise<Record<string, unknown>> {\n const rawLimit = stringOption(options, \"limit\");\n const limit = rawLimit === undefined ? 100 : Number(rawLimit);\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 1000) {\n throw new Error(\"--limit must be an integer between 1 and 1000\");\n }\n const workspace = stringOption(options, \"workspace\") ?? null;\n const cursor = decodeCursor(stringOption(options, \"cursor\"), workspace);\n const response = await ownerQuery<Record<string, unknown>>(\n db,\n \"SELECT * FROM agent_bridge.control_credential_inventory(\" +\n \"$1::text,$2::timestamptz,$3::uuid,$4::integer)\",\n [workspace, cursor?.createdAt ?? null, cursor?.credentialId ?? null, limit],\n );\n const credentials = response.rows.map((row) => ({\n credentialId: row.credential_id,\n workspaceId: row.workspace_id,\n principal: row.principal,\n label: row.label,\n scopes: row.scopes,\n scopeSetName: row.scope_set_name,\n expiresAt: instant(row.expires_at),\n revokedAt: instant(row.revoked_at),\n revokedBy: row.revoked_by,\n revocationReason: row.revocation_reason,\n replacesCredentialId: row.replaces_credential_id,\n expiryGraceUntil: instant(row.expiry_grace_until),\n createdAt: instant(row.created_at),\n lastUsedAt: instant(row.last_used_at),\n agentDisabledAt: instant(row.agent_disabled_at),\n workspaceDisabledAt: instant(row.workspace_disabled_at),\n }));\n const last = credentials.length ? credentials[credentials.length - 1] : undefined;\n const nextCursor = credentials.length === limit && last?.createdAt\n ? encodeCursor({\n v: 1,\n workspace,\n createdAt: last.createdAt,\n credentialId: String(last.credentialId),\n })\n : null;\n return {\n schemaVersion: 1,\n status: \"ok\",\n operation: \"inventory\",\n items: credentials,\n page: { limit, nextCursor },\n };\n}\n\nasync function runRevoke(\n db: Queryable,\n options: OwnerOptions,\n dependencies: OwnerDependencies,\n): Promise<Record<string, unknown>> {\n const selectedRequestId = requestId(options, dependencies);\n const credentialId = uuidOption(options, \"credential-id\");\n const reason = stringOption(options, \"reason\") ?? \"operator_request\";\n if (![\"operator_request\", \"rotation\", \"compromise\", \"retired\"].includes(reason)) {\n throw new Error(\"--reason must be operator_request, rotation, compromise, or retired\");\n }\n const response = await ownerQuery<{ revoked: boolean; replayed: boolean }>(\n db,\n \"SELECT * FROM agent_bridge.control_revoke_credential($1::uuid,$2::uuid,$3::text)\",\n [selectedRequestId, credentialId, reason],\n );\n const row = response.rows[0];\n if (!row) throw new Error(\"owner revoke returned no result\");\n return {\n schemaVersion: 1,\n status: \"ok\",\n operation: \"revoke\",\n requestId: selectedRequestId,\n credentialId,\n revoked: row.revoked,\n replayed: row.replayed,\n };\n}\n\nexport async function runOwnerCommand(\n subcommand: string | undefined,\n options: OwnerOptions,\n env: NodeJS.ProcessEnv = process.env,\n dependencies: OwnerDependencies = defaultDependencies,\n): Promise<Record<string, unknown>> {\n if (!subcommand || subcommand === \"help\") {\n if (Object.keys(options).length) throw new Error(\"owner help does not accept options\");\n return {\n command: \"agent-bridge owner\",\n subcommands: [\"provision\", \"inventory\", \"rotate\", \"revoke\"],\n authority: \"AGENT_BRIDGE_OPERATOR_DATABASE_URL\",\n };\n }\n if (![\"provision\", \"inventory\", \"rotate\", \"revoke\"].includes(subcommand)) {\n throw new Error(\"unsupported owner command: \" + subcommand);\n }\n validateOwnerOptions(subcommand, options);\n if (options[\"recover-lock\"] === true && !stringOption(options, \"resume\")) {\n throw new Error(\"--recover-lock requires --resume\");\n }\n const databaseUrl = env.AGENT_BRIDGE_OPERATOR_DATABASE_URL?.trim();\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_OPERATOR_DATABASE_URL is required\");\n let connection: ReturnType<OwnerDependencies[\"connect\"]>;\n try {\n connection = dependencies.connect(databaseUrl);\n } catch {\n throw new Error(\"owner database connection failed\");\n }\n try {\n if (subcommand === \"inventory\") return await runInventory(connection.db, options);\n if (subcommand === \"revoke\") return await runRevoke(connection.db, options, dependencies);\n const mutation = subcommand as \"provision\" | \"rotate\";\n const selected = enrollment(mutation, options, env, dependencies);\n if (options[\"recover-lock\"] === true) recoverEnrollmentLock(selected.path, env);\n const lock = acquireEnrollmentLock(selected.path, env);\n try {\n const current = readEnrollment(selected.path, env);\n if (current.operation !== mutation) {\n throw new Error(\"enrollment operation is \" + current.operation + \", not \" + mutation);\n }\n if (subcommand === \"provision\") {\n return await runProvision(\n connection.db, selected.path, current, dependencies.now().toISOString(), env, lock,\n );\n }\n return await runRotate(\n connection.db, selected.path, current, dependencies.now().toISOString(), env, lock,\n );\n } finally {\n releaseEnrollmentLock(lock);\n }\n } catch (error) {\n if (!(error instanceof OwnerDatabaseFailure)) throw error;\n const code = error.driverCode;\n if (code === \"42501\") throw new Error(\"owner database authorization denied\");\n if (code === \"23505\") throw new Error(\"owner request conflicts with existing state\");\n if (code === \"22P02\" || code === \"22007\" || code === \"22023\") {\n throw new Error(\"owner database rejected invalid input\");\n }\n throw new Error(\"owner database operation failed\");\n } finally {\n try {\n await connection.close();\n } catch {\n throw new Error(\"owner database close failed\");\n }\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n closeSync, constants, existsSync, fstatSync, fsyncSync, linkSync, lstatSync,\n openSync, renameSync, unlinkSync, writeSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport pg from \"pg\";\nimport { readClientConfigFile } from \"./client-config.js\";\nimport { PortableArchiveFile } from \"./portable-archive-file.js\";\nimport { PortableArchiveError, validatePortableArchiveRequestId } from \"./portable-archive-format.js\";\nimport type { PortableArchiveExportSession, PortableArchiveMetadata, PortableArchiveStore } from \"./portable-archive-store.js\";\nimport { streamPortableArchive } from \"./portable-archive.js\";\nimport { PostgresPortableArchiveStore } from \"./postgres-portable-archive-store.js\";\nimport { PrivatePathError, securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\nimport { SQLitePortableArchiveStore } from \"./sqlite-portable-archive-store.js\";\n\ntype ArchiveProvider = \"local\" | \"postgres\";\ntype ArchiveOperation = \"export\" | \"verify\" | \"import\";\ntype ArchiveOptions = Record<string, string | true>;\nconst BOOLEAN_OPTIONS = new Set([\"apply\", \"dry-run\", \"force\"]);\nconst OPERATION_OPTIONS: Record<ArchiveOperation, ReadonlySet<string>> = {\n export: new Set([\"provider\", \"workspace\", \"output\", \"db\", \"config\", \"force\", \"request-id\"]),\n verify: new Set([\"file\"]),\n import: new Set([\"provider\", \"file\", \"db\", \"config\", \"workspace\", \"request-id\", \"apply\", \"dry-run\"]),\n};\n\nexport class ArchiveCommandError extends Error {\n constructor(readonly code: string, message: string, readonly details?: Record<string, unknown>) { super(message); }\n}\nfunction fail(code: string, message: string, details?: Record<string, unknown>): never { throw new ArchiveCommandError(code, message, details); }\n\nfunction parseArchiveArgs(argv: string[]): { operation: ArchiveOperation; options: ArchiveOptions } {\n const operation = argv[0];\n if (operation !== \"export\" && operation !== \"verify\" && operation !== \"import\") fail(\"INVALID_COMMAND\", \"usage: agent-bridge archive <export|verify|import>\");\n const options: ArchiveOptions = {};\n for (let index = 1; index < argv.length; index += 1) {\n const argument = argv[index]!;\n if (!argument.startsWith(\"--\") || argument === \"--\") fail(\"INVALID_ARGUMENT\", `unexpected positional argument: ${argument}`);\n const name = argument.slice(2);\n if (!name || name.includes(\"=\")) fail(\"INVALID_OPTION\", `invalid option: ${argument}`);\n if (!OPERATION_OPTIONS[operation].has(name)) fail(\"INVALID_OPTION\", `--${name} is not valid for archive ${operation}`);\n if (options[name] !== undefined) fail(\"DUPLICATE_OPTION\", `--${name} may only be provided once`);\n if (BOOLEAN_OPTIONS.has(name)) { options[name] = true; continue; }\n const selected = argv[index + 1];\n if (!selected || selected.startsWith(\"--\")) fail(\"MISSING_OPTION_VALUE\", `--${name} requires a value`);\n options[name] = selected; index += 1;\n }\n if (operation === \"import\" && options.apply === true && options[\"dry-run\"] === true) fail(\"INVALID_OPTION\", \"--apply and --dry-run are mutually exclusive\");\n return { operation, options };\n}\n\nconst stringOption = (options: ArchiveOptions, name: string): string | undefined => typeof options[name] === \"string\" ? options[name] as string : undefined;\nfunction archiveRequestId(options: ArchiveOptions): string {\n const value = stringOption(options, \"request-id\") ?? randomUUID();\n try { return validatePortableArchiveRequestId(value); }\n catch { return fail(\"INVALID_REQUEST_ID\", \"--request-id must be a UUID\"); }\n}\nfunction required(options: ArchiveOptions, name: string): string { const selected = stringOption(options, name)?.trim(); if (!selected) fail(\"MISSING_OPTION\", `--${name} is required`); return selected; }\nfunction provider(options: ArchiveOptions): ArchiveProvider {\n const selected = required(options, \"provider\");\n if (selected !== \"local\" && selected !== \"postgres\") fail(\"INVALID_PROVIDER\", \"--provider must be local or postgres\");\n if (selected === \"postgres\" && (options.db !== undefined || options.config !== undefined)) fail(\"INVALID_OPTION\", \"PostgreSQL archives accept authority only from AGENT_BRIDGE_ARCHIVE_DATABASE_URL\");\n return selected;\n}\nconst home = (env: NodeJS.ProcessEnv): string => env.HOME?.trim() || homedir();\nfunction localDatabase(options: ArchiveOptions, env: NodeJS.ProcessEnv): string {\n const configPath = stringOption(options, \"config\") ?? env.AGENT_BRIDGE_CONFIG?.trim() ?? join(home(env), \".agent-bridge\", \"config\");\n const config = readClientConfigFile(configPath);\n const selected = stringOption(options, \"db\") ?? env.AGENT_BRIDGE_DB?.trim() ?? config.AGENT_BRIDGE_DB?.trim() ?? join(home(env), \".agent-bridge\", \"bridge.sqlite3\");\n return isAbsolute(selected) ? selected : resolve(selected);\n}\nfunction createStore(selected: ArchiveProvider, options: ArchiveOptions, env: NodeJS.ProcessEnv): { store: PortableArchiveStore; close(): Promise<void> } {\n if (selected === \"local\") { const store = new SQLitePortableArchiveStore(localDatabase(options, env)); return { store, close: async () => { store.close(); } }; }\n const databaseUrl = env.AGENT_BRIDGE_ARCHIVE_DATABASE_URL?.trim();\n if (!databaseUrl) fail(\"MISSING_AUTHORITY\", \"AGENT_BRIDGE_ARCHIVE_DATABASE_URL is required\");\n const pool = new pg.Pool({ connectionString: databaseUrl, max: 1, connectionTimeoutMillis: 10_000, query_timeout: 30_000 });\n return { store: new PostgresPortableArchiveStore(pool), close: () => pool.end() };\n}\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\"); try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\ntype ArchiveStreamer = typeof streamPortableArchive;\nexport interface ArchivePublicationFileOperations {\n link(source: string, target: string): void;\n rename(source: string, target: string): void;\n unlink(path: string): void;\n syncDirectory(path: string): void;\n}\n\nexport async function publishArchive(\n path: string,\n force: boolean,\n session: PortableArchiveExportSession,\n workspace: string,\n options: { requestId: string; stream?: ArchiveStreamer; fileOperations?: Partial<ArchivePublicationFileOperations> },\n) {\n const exportRequestId = validatePortableArchiveRequestId(options.requestId);\n const target = resolve(path);\n const directory = dirname(target);\n const temporary = join(directory, `.${exportRequestId}.agent-bridge-archive.tmp`);\n const backup = join(directory, `.${exportRequestId}.agent-bridge-archive.backup`);\n const operations: ArchivePublicationFileOperations = {\n link: options.fileOperations?.link ?? linkSync,\n rename: options.fileOperations?.rename ?? renameSync,\n unlink: options.fileOperations?.unlink ?? unlinkSync,\n syncDirectory: options.fileOperations?.syncDirectory ?? syncDirectory,\n };\n let descriptor: number | undefined; let created = false; let linked = false;\n let replacementVisible = false; let durablyPublished = false; let backupCreated = false;\n let preserveBackup = false; let targetExisted = false;\n const ambiguous = (message: string) => new ArchiveCommandError(\n \"ARCHIVE_PUBLICATION_AMBIGUOUS\",\n message,\n {\n requestId: exportRequestId, file: target, published: \"unknown\", auditStatus: \"started\",\n ...(backupCreated ? { backupFile: backup } : {}),\n },\n );\n try {\n verifyPrivatePathAccess(directory, \"directory\");\n if (existsSync(target)) {\n const stat = lstatSync(target);\n if (stat.isSymbolicLink() || !stat.isFile()) fail(\"INVALID_OUTPUT\", \"archive output must be a regular file\");\n if (!force) fail(\"OUTPUT_EXISTS\", \"archive output already exists; pass --force to replace it\");\n targetExisted = true;\n }\n descriptor = openSync(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600); created = true;\n securePrivatePath(temporary, \"file\");\n const metadata = await (options.stream ?? streamPortableArchive)(session, workspace, exportRequestId, (bytes) => {\n let offset = 0; while (offset < bytes.length) offset += writeSync(descriptor!, bytes, offset, bytes.length - offset);\n });\n fsyncSync(descriptor);\n const opened = fstatSync(descriptor); const named = lstatSync(temporary);\n if (opened.dev !== named.dev || opened.ino !== named.ino || !named.isFile() || named.isSymbolicLink()) fail(\"INVALID_OUTPUT\", \"archive temporary path identity changed before publication\");\n if (force && targetExisted) {\n const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const targetDescriptor = openSync(target, constants.O_RDONLY | noFollow);\n try {\n const openedTarget = fstatSync(targetDescriptor); const namedTarget = lstatSync(target);\n if (!openedTarget.isFile() || namedTarget.isSymbolicLink()\n || openedTarget.dev !== namedTarget.dev || openedTarget.ino !== namedTarget.ino) {\n fail(\"INVALID_OUTPUT\", \"archive output identity changed before replacement\");\n }\n verifyPrivatePathAccess(target, \"file\");\n operations.link(target, backup); backupCreated = true;\n const backupStat = lstatSync(backup);\n if (!backupStat.isFile() || backupStat.isSymbolicLink()\n || openedTarget.dev !== backupStat.dev || openedTarget.ino !== backupStat.ino) {\n fail(\"INVALID_OUTPUT\", \"archive backup identity changed before replacement\");\n }\n verifyPrivatePathAccess(backup, \"file\"); operations.syncDirectory(directory);\n } finally { closeSync(targetDescriptor); }\n }\n if (force) { operations.rename(temporary, target); created = false; replacementVisible = true; }\n else {\n try { operations.link(temporary, target); }\n catch (error) { if ((error as NodeJS.ErrnoException).code === \"EEXIST\") fail(\"OUTPUT_EXISTS\", \"archive output already exists; pass --force to replace it\"); throw error; }\n linked = true; operations.unlink(temporary); created = false;\n }\n verifyPrivatePathAccess(target, \"file\"); operations.syncDirectory(directory); durablyPublished = true;\n if (backupCreated) {\n try {\n operations.unlink(backup);\n } catch {\n preserveBackup = true;\n fail(\"ARCHIVE_BACKUP_RETAINED\", \"archive was published but backup cleanup could not be proved; retry the same request ID\", {\n requestId: exportRequestId, file: target, backupFile: backup,\n backupState: \"retained\", published: true, auditStatus: \"started\",\n });\n }\n backupCreated = false;\n try { operations.syncDirectory(directory); }\n catch {\n fail(\"ARCHIVE_BACKUP_CLEANUP_AMBIGUOUS\", \"archive was published but backup deletion durability is unknown; retry the same request ID\", {\n requestId: exportRequestId, file: target, backupFile: backup,\n backupState: \"unknown\", published: true, auditStatus: \"started\",\n });\n }\n }\n try { await session.complete({ ...metadata, publishedAt: new Date().toISOString() }); }\n catch {\n let auditStatus: \"abandoned\" | \"unknown\" = \"unknown\";\n try { await session.abandon(\"audit_failed\"); auditStatus = \"abandoned\"; } catch {}\n const details = { requestId: exportRequestId, file: target, published: true, auditStatus };\n if (auditStatus === \"abandoned\") fail(\"ARCHIVE_AUDIT_ABANDONED\", \"archive was published but its completion audit was abandoned\", details);\n fail(\"ARCHIVE_AUDIT_AMBIGUOUS\", \"archive was published but its completion audit outcome is unknown\", details);\n }\n return metadata;\n } catch (error) {\n if (!durablyPublished) {\n if (force && replacementVisible) {\n if (backupCreated) {\n try {\n operations.rename(backup, target); backupCreated = false; replacementVisible = false;\n verifyPrivatePathAccess(target, \"file\"); operations.syncDirectory(directory);\n } catch { preserveBackup = true; throw ambiguous(\"archive replacement failed and restoration could not be proved; use owner reconciliation\"); }\n } else {\n try { operations.unlink(target); replacementVisible = false; operations.syncDirectory(directory); }\n catch { throw ambiguous(\"archive replacement failed and removal could not be proved; use owner reconciliation\"); }\n }\n } else if (backupCreated) {\n try { operations.unlink(backup); backupCreated = false; operations.syncDirectory(directory); }\n catch { preserveBackup = true; throw ambiguous(\"archive backup cleanup could not be proved; use owner reconciliation\"); }\n }\n if (linked && descriptor !== undefined) {\n try {\n const opened = fstatSync(descriptor); const named = lstatSync(target);\n if (opened.dev === named.dev && opened.ino === named.ino) {\n operations.unlink(target); linked = false; operations.syncDirectory(directory);\n }\n } catch { throw ambiguous(\"archive publication failed and output removal could not be proved; use owner reconciliation\"); }\n }\n try { await session.abandon(\"publication_failed\"); }\n catch {\n throw new ArchiveCommandError(\n \"ARCHIVE_AUDIT_AMBIGUOUS\",\n \"archive publication did not complete but its audit outcome is unknown\",\n { requestId: exportRequestId, file: target, published: false, auditStatus: \"unknown\" },\n );\n }\n }\n throw error;\n } finally {\n if (descriptor !== undefined) closeSync(descriptor);\n if (created) { try { operations.unlink(temporary); } catch {} }\n if (backupCreated && !preserveBackup && !replacementVisible) { try { operations.unlink(backup); operations.syncDirectory(directory); } catch {} }\n }\n}\n\nconst success = (operation: ArchiveOperation, value: Record<string, unknown>): Record<string, unknown> => ({ schemaVersion: 1, status: \"ok\", operation, ...value });\n\nfunction recoveryArtifactPaths(target: string, requestId: string): string[] {\n const directory = dirname(target);\n return [\n join(directory, `.${requestId}.agent-bridge-archive.tmp`),\n join(directory, `.${requestId}.agent-bridge-archive.backup`),\n ];\n}\n\nfunction existingRecoveryArtifacts(target: string, requestId: string): string[] {\n return recoveryArtifactPaths(target, requestId).filter((path) => existsSync(path));\n}\n\nfunction openVerifiedPrivateFile(path: string): number {\n verifyPrivatePathAccess(path, \"file\");\n const before = lstatSync(path);\n const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDONLY | noFollow);\n try {\n const opened = fstatSync(descriptor); const after = lstatSync(path);\n if (!opened.isFile() || before.isSymbolicLink() || after.isSymbolicLink()\n || opened.dev !== before.dev || opened.ino !== before.ino\n || opened.dev !== after.dev || opened.ino !== after.ino) {\n fail(\"INVALID_OUTPUT\", \"archive recovery path identity changed\");\n }\n return descriptor;\n } catch (error) { closeSync(descriptor); throw error; }\n}\n\nfunction removeRecoveryArtifacts(target: string, requestId: string): void {\n for (const path of existingRecoveryArtifacts(target, requestId)) {\n const descriptor = openVerifiedPrivateFile(path);\n try {\n const opened = fstatSync(descriptor); const named = lstatSync(path);\n if (opened.dev !== named.dev || opened.ino !== named.ino) fail(\"INVALID_OUTPUT\", \"archive recovery path identity changed\");\n unlinkSync(path);\n } finally { closeSync(descriptor); }\n syncDirectory(dirname(path));\n }\n}\n\nexport function verifyCompletedExport(\n path: string,\n requestId: string,\n expected: PortableArchiveMetadata & { publishedAt: string },\n): PortableArchiveMetadata {\n const target = resolve(path);\n const recoveryPaths = existingRecoveryArtifacts(target, requestId);\n if (!existsSync(target)) fail(\"ARCHIVE_REPLAY_FILE_MISSING\", \"completed export file is missing; use a new request ID\", { requestId, file: target, recoveryPaths });\n let archive: PortableArchiveFile | undefined;\n try {\n try { archive = new PortableArchiveFile(target); }\n catch { fail(\"ARCHIVE_REPLAY_FILE_MISMATCH\", \"completed export file is not a valid private archive\", { requestId, file: target, recoveryPaths }); }\n let actual: PortableArchiveMetadata;\n try { actual = archive.verify(); }\n catch { fail(\"ARCHIVE_REPLAY_FILE_MISMATCH\", \"completed export file is not a valid matching archive\", { requestId, file: target, recoveryPaths }); }\n if (actual.exportRequestId !== requestId || expected.exportRequestId !== requestId\n || actual.workspace !== expected.workspace || actual.digest !== expected.digest\n || actual.messageCount !== expected.messageCount || actual.receiptCount !== expected.receiptCount) {\n fail(\"ARCHIVE_REPLAY_FILE_MISMATCH\", \"completed export file does not match the recorded audit; use a new request ID\", { requestId, file: target, recoveryPaths });\n }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_REPLAY_DURABILITY_AMBIGUOUS\", \"completed export file durability could not be reproved\", { requestId, file: target, published: true, auditStatus: \"completed\", recoveryPaths }); }\n try { removeRecoveryArtifacts(target, requestId); }\n catch { fail(\"ARCHIVE_RECOVERY_ARTIFACT_RETAINED\", \"completed export recovery artifacts could not be removed\", { requestId, file: target, published: true, auditStatus: \"completed\", recoveryPaths: existingRecoveryArtifacts(target, requestId) }); }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_REPLAY_DURABILITY_AMBIGUOUS\", \"completed export file durability could not be reproved after cleanup\", { requestId, file: target, published: true, auditStatus: \"completed\", recoveryPaths: existingRecoveryArtifacts(target, requestId) }); }\n return actual;\n } finally { archive?.close(); }\n}\n\nexport async function reconcileActiveExport(\n path: string,\n requestId: string,\n workspace: string,\n session: PortableArchiveExportSession,\n): Promise<PortableArchiveMetadata & { publishedAt: string }> {\n const target = resolve(path);\n const details = { requestId, file: target, recoveryPaths: existingRecoveryArtifacts(target, requestId), published: \"unknown\", auditStatus: \"started\" };\n if (!existsSync(target)) fail(\"ARCHIVE_RECONCILIATION_FILE_MISSING\", \"active export file is missing; use a new request ID or owner reconciliation\", details);\n let archive: PortableArchiveFile | undefined;\n try {\n try { archive = new PortableArchiveFile(target); }\n catch { fail(\"ARCHIVE_RECONCILIATION_FILE_MISMATCH\", \"active export file is not a valid private archive\", details); }\n let metadata: PortableArchiveMetadata;\n try { metadata = archive.verify(); }\n catch { fail(\"ARCHIVE_RECONCILIATION_FILE_MISMATCH\", \"active export file is not a valid matching archive\", details); }\n if (metadata.exportRequestId !== requestId || metadata.workspace !== workspace) {\n fail(\"ARCHIVE_RECONCILIATION_FILE_MISMATCH\", \"active export file does not match the requested workspace; use a new request ID or owner reconciliation\", details);\n }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_RECONCILIATION_DURABILITY_AMBIGUOUS\", \"active export file durability could not be proved; retry the same request ID\", details); }\n try { removeRecoveryArtifacts(target, requestId); }\n catch {\n fail(\"ARCHIVE_RECOVERY_ARTIFACT_RETAINED\", \"active export recovery artifacts could not be removed; retry the same request ID\", {\n ...details, recoveryPaths: existingRecoveryArtifacts(target, requestId), published: true,\n });\n }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_RECONCILIATION_DURABILITY_AMBIGUOUS\", \"active export durability after cleanup could not be proved; retry the same request ID\", { ...details, published: true }); }\n const publishedAt = new Date().toISOString();\n try { await session.reconcile({ ...metadata, publishedAt }); }\n catch {\n fail(\"ARCHIVE_RECONCILIATION_AMBIGUOUS\", \"active export reconciliation outcome is unknown; retry the same request ID\", { ...details, published: true, auditStatus: \"unknown\" });\n }\n return { ...metadata, publishedAt };\n } finally { archive?.close(); }\n}\n\nexport async function runArchiveCommand(argv: string[], env: NodeJS.ProcessEnv = process.env): Promise<Record<string, unknown>> {\n const { operation, options } = parseArchiveArgs(argv);\n try {\n if (operation === \"verify\") {\n const path = required(options, \"file\"); let archive: PortableArchiveFile | undefined;\n try { archive = new PortableArchiveFile(path); const metadata = archive.verify(); return success(operation, { file: resolve(path), exportRequestId: metadata.exportRequestId, workspace: metadata.workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount }); }\n finally { archive?.close(); }\n }\n const selected = provider(options);\n if (operation === \"export\") {\n const workspace = required(options, \"workspace\"); const path = required(options, \"output\");\n const requestId = archiveRequestId(options);\n const connection = createStore(selected, options, env); let session: PortableArchiveExportSession | undefined;\n try {\n const start = await connection.store.beginExport(requestId, workspace);\n if (start.status === \"completed\") {\n const metadata = verifyCompletedExport(path, requestId, start.metadata);\n return success(operation, { provider: selected, requestId, replayed: true, reconciled: false, file: resolve(path), workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount, publishedAt: start.metadata.publishedAt });\n }\n session = start.session;\n if (start.replayed) {\n const metadata = await reconcileActiveExport(path, requestId, workspace, session);\n return success(operation, { provider: selected, requestId, replayed: true, reconciled: true, file: resolve(path), workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount, publishedAt: metadata.publishedAt });\n }\n const metadata = await publishArchive(path, options.force === true, session, workspace, { requestId });\n return success(operation, { provider: selected, requestId, replayed: false, reconciled: false, file: resolve(path), workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount });\n } finally { await session?.close(); await connection.close(); }\n }\n const path = required(options, \"file\"); const archive = new PortableArchiveFile(path);\n try {\n const metadata = archive.verify(); const assertedWorkspace = stringOption(options, \"workspace\")?.trim();\n if (assertedWorkspace && assertedWorkspace !== metadata.workspace) fail(\"WORKSPACE_MISMATCH\", \"--workspace does not match the archive workspace\");\n const requestId = archiveRequestId(options);\n const connection = createStore(selected, options, env);\n try {\n const result = await connection.store.importWorkspace(requestId, metadata, archive, { apply: options.apply === true });\n return success(operation, { provider: selected, file: resolve(path), exportRequestId: metadata.exportRequestId, ...result });\n } finally { await connection.close(); }\n } finally { archive.close(); }\n } catch (error) {\n if (error instanceof ArchiveCommandError) throw error;\n if (error instanceof PrivatePathError) fail(\"INSECURE_PATH\", \"archive file or directory does not satisfy the private path policy\");\n if (error instanceof PortableArchiveError) fail(\"INVALID_ARCHIVE\", error.message);\n fail(\"ARCHIVE_OPERATION_FAILED\", \"archive operation failed\");\n }\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport {\n closeSync, constants, existsSync, fstatSync, fsyncSync, linkSync, lstatSync, mkdirSync, openSync, rmSync, unlinkSync,\n type Stats,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n NativeDrBundleError, NativeDrBundleReader, writeNativeDrBundle, type NativeDrBundleInput, type NativeDrBundleMetadata,\n} from \"./native-dr-bundle.js\";\nimport {\n backupPostgresNativeDr, PostgresNativeDrError, restorePostgresNativeDr, verifyPostgresNativeDrArtifacts,\n type PostgresNativeDrArtifactAnchor, type PostgresNativeDrArtifactAnchors,\n type PostgresNativeDrBundleInput, type PostgresNativeDrSchema, type RestorePostgresNativeDrResult,\n} from \"./postgres-native-dr.js\";\nimport {\n preparePrivateFileLocation, PrivatePathError, securePrivatePath, verifyPrivatePathAccess,\n} from \"./private-path.js\";\nimport {\n backupLocalSqlite, NativeDrCommandError, restoreLocalSqlite, validateNativeDrId, validateNativeDrTimeout,\n verifyNativeDrBundle,\n} from \"./sqlite-native-dr.js\";\n\ntype DrOperation = \"backup\" | \"verify\" | \"restore\";\ntype DrProvider = \"local\" | \"postgres\";\ntype DrOptions = Record<string, string | true>;\n\nconst POSTGRES_DUMP_ENTRY = \"postgres/database.dump\";\nconst POSTGRES_ROLES_ENTRY = \"postgres/roles.json\";\nconst OPTIONS: Record<DrOperation, ReadonlySet<string>> = {\n backup: new Set([\"provider\", \"source\", \"output\", \"backup-id\", \"timeout-ms\", \"tool-directory\"]),\n verify: new Set([\"provider\", \"bundle\", \"tool-directory\"]),\n restore: new Set([\"provider\", \"bundle\", \"target\", \"request-id\", \"timeout-ms\", \"tool-directory\", \"accept-source-sql-risk\"]),\n};\nconst FLAGS: Record<DrOperation, ReadonlySet<string>> = {\n backup: new Set(), verify: new Set(), restore: new Set([\"accept-source-sql-risk\"]),\n};\n\ninterface DrFileOperations {\n link(source: string, target: string): void;\n syncDirectory(path: string): boolean;\n syncFile(path: string): void;\n afterPublish?(target: string): void;\n}\n\nexport interface DrCommandDependencies {\n environment?: NodeJS.ProcessEnv;\n platform?: NodeJS.Platform;\n backupPostgres?: typeof backupPostgresNativeDr;\n verifyPostgres?: typeof verifyPostgresNativeDrArtifacts;\n restorePostgres?: typeof restorePostgresNativeDr;\n fileOperations?: Partial<DrFileOperations>;\n}\n\nconst fail = (code: string, message: string, details?: Record<string, unknown>): never => {\n throw new NativeDrCommandError(code, message, details);\n};\n\nfunction parse(argv: string[]): { operation: DrOperation; options: DrOptions } {\n const operation = argv[0];\n if (operation !== \"backup\" && operation !== \"verify\" && operation !== \"restore\") {\n fail(\"INVALID_COMMAND\", \"usage: agent-bridge dr <backup|verify|restore>\");\n }\n const selectedOperation = operation as DrOperation;\n const options: DrOptions = {};\n for (let index = 1; index < argv.length; index += 1) {\n const argument = argv[index]!;\n if (!argument.startsWith(\"--\") || argument === \"--\") {\n fail(\"INVALID_ARGUMENT\", \"DR commands do not accept positional arguments\");\n }\n const name = argument.slice(2);\n if (!name || name.includes(\"=\") || !OPTIONS[selectedOperation].has(name)) {\n fail(\"INVALID_OPTION\", `--${name} is not valid for dr ${selectedOperation}`);\n }\n if (options[name] !== undefined) fail(\"DUPLICATE_OPTION\", `--${name} may only be provided once`);\n if (FLAGS[selectedOperation].has(name)) { options[name] = true; continue; }\n const value = argv[index + 1];\n if (!value || value.startsWith(\"--\")) fail(\"MISSING_OPTION_VALUE\", `--${name} requires a value`);\n options[name] = value; index += 1;\n }\n return { operation: selectedOperation, options };\n}\n\nfunction optional(options: DrOptions, name: string): string | undefined {\n const value = options[name];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction required(options: DrOptions, name: string): string {\n const value = optional(options, name);\n if (!value) fail(\"MISSING_OPTION\", `--${name} is required`);\n return value!;\n}\n\nfunction timeout(options: DrOptions): number | undefined {\n const value = optional(options, \"timeout-ms\");\n return value === undefined ? undefined : validateNativeDrTimeout(Number(value));\n}\n\nfunction provider(options: DrOptions): DrProvider {\n const selected = required(options, \"provider\");\n if (selected !== \"local\" && selected !== \"postgres\") fail(\"INVALID_PROVIDER\", \"--provider must be local or postgres\");\n return selected as DrProvider;\n}\n\nfunction rejectProviderOption(options: DrOptions, name: string, selected: DrProvider, operation: DrOperation): void {\n if (options[name] !== undefined) fail(\"INVALID_OPTION\", `--${name} is not valid for ${selected} DR ${operation}`);\n}\n\nfunction syncFile(path: string): void {\n const before = lstatSync(path); const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDWR | noFollow);\n try {\n const opened = fstatSync(descriptor); const named = lstatSync(path);\n if (!opened.isFile() || before.isSymbolicLink() || named.isSymbolicLink()\n || !sameNode(before, opened) || !sameNode(opened, named)) {\n fail(\"INSECURE_PATH\", \"DR publication path identity changed before file synchronization\");\n }\n fsyncSync(descriptor);\n } finally { closeSync(descriptor); }\n}\n\nfunction syncDirectory(path: string, platform: NodeJS.Platform = process.platform): boolean {\n if (platform === \"win32\") return false;\n const descriptor = openSync(path, constants.O_RDONLY);\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n return true;\n}\n\nfunction fileOperations(dependencies: DrCommandDependencies): DrFileOperations {\n return {\n link: dependencies.fileOperations?.link ?? linkSync,\n syncDirectory: dependencies.fileOperations?.syncDirectory\n ?? ((path) => syncDirectory(path, dependencies.platform ?? process.platform)),\n syncFile: dependencies.fileOperations?.syncFile ?? syncFile,\n afterPublish: dependencies.fileOperations?.afterPublish,\n };\n}\n\nfunction sameNode(left: Stats, right: Stats): boolean { return left.dev === right.dev && left.ino === right.ino; }\n\nfunction createPrivateDirectory(path: string): Stats {\n mkdirSync(path, { mode: 0o700 });\n const before = lstatSync(path);\n securePrivatePath(path, \"directory\"); verifyPrivatePathAccess(path, \"directory\");\n const after = lstatSync(path);\n if (!before.isDirectory() || before.isSymbolicLink() || !sameNode(before, after)) {\n fail(\"INSECURE_PATH\", \"DR staging directory identity changed while securing it\");\n }\n return after;\n}\n\nfunction openPrivateFile(path: string): { descriptor: number; identity: Stats } {\n const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDWR | constants.O_CREAT | constants.O_EXCL | noFollow, 0o600);\n try {\n const before = fstatSync(descriptor);\n securePrivatePath(path, \"file\"); verifyPrivatePathAccess(path, \"file\");\n const after = lstatSync(path);\n if (!before.isFile() || after.isSymbolicLink() || !sameNode(before, after)) {\n fail(\"INSECURE_PATH\", \"DR staging file identity changed while securing it\");\n }\n return { descriptor, identity: after };\n } catch (error) { closeSync(descriptor); throw error; }\n}\n\nfunction artifactAnchor(descriptor: number, sha256: string): PostgresNativeDrArtifactAnchor {\n const stat = fstatSync(descriptor, { bigint: true });\n if (!stat.isFile()) fail(\"ARTIFACT_ANCHOR_INVALID\", \"PostgreSQL DR artifact anchor is not a regular file\");\n return {\n descriptor,\n device: stat.dev.toString(),\n inode: stat.ino.toString(),\n size: stat.size.toString(),\n ctimeNanoseconds: stat.ctimeNs.toString(),\n mtimeNanoseconds: stat.mtimeNs.toString(),\n sha256,\n };\n}\n\ninterface ExtractedPostgresBundle {\n metadata: NativeDrBundleMetadata;\n dumpPath: string;\n rolesPath: string;\n artifactAnchors: PostgresNativeDrArtifactAnchors;\n descriptors: Map<string, { descriptor: number; identity: Stats; path: string }>;\n}\n\nfunction extractPostgresBundle(bundle: string, stage: string): ExtractedPostgresBundle {\n const descriptors = new Map<string, { descriptor: number; identity: Stats; path: string }>();\n try {\n for (const [name, filename] of [\n [POSTGRES_DUMP_ENTRY, \"postgres-database.dump\"],\n [POSTGRES_ROLES_ENTRY, \"postgres-roles.json\"],\n ] as const) {\n const path = join(stage, filename);\n descriptors.set(name, { ...openPrivateFile(path), path });\n }\n const reader = new NativeDrBundleReader(bundle);\n let metadata: NativeDrBundleMetadata;\n try { metadata = reader.inspect((entry) => descriptors.get(entry.name)?.descriptor); }\n finally { reader.close(); }\n if (metadata.manifest.kind !== \"postgres\") {\n fail(\"PROVIDER_MISMATCH\", `DR bundle provider is ${metadata.manifest.kind}, not postgres`);\n }\n for (const value of descriptors.values()) {\n const opened = fstatSync(value.descriptor); const named = lstatSync(value.path);\n if (!opened.isFile() || named.isSymbolicLink() || !sameNode(opened, named)) {\n fail(\"INSECURE_PATH\", \"DR extraction path identity changed while reading the bundle\");\n }\n fsyncSync(value.descriptor);\n securePrivatePath(value.path, \"file\"); verifyPrivatePathAccess(value.path, \"file\");\n }\n const dump = descriptors.get(POSTGRES_DUMP_ENTRY)!;\n const roles = descriptors.get(POSTGRES_ROLES_ENTRY)!;\n const dumpEntry = metadata.manifest.entries.find((entry) => entry.name === POSTGRES_DUMP_ENTRY)!;\n const rolesEntry = metadata.manifest.entries.find((entry) => entry.name === POSTGRES_ROLES_ENTRY)!;\n return {\n metadata,\n dumpPath: dump.path,\n rolesPath: roles.path,\n artifactAnchors: {\n dump: artifactAnchor(dump.descriptor, dumpEntry.sha256),\n roles: artifactAnchor(roles.descriptor, rolesEntry.sha256),\n },\n descriptors,\n };\n } catch (error) {\n for (const value of descriptors.values()) {\n try { closeSync(value.descriptor); } catch { /* cleanup reports the primary failure */ }\n }\n throw error;\n }\n}\n\nfunction closeExtractedPostgresBundle(extracted: ExtractedPostgresBundle): void {\n for (const value of extracted.descriptors.values()) {\n try { closeSync(value.descriptor); } catch { /* cleanup handles any retained stage */ }\n }\n extracted.descriptors.clear();\n}\n\nfunction removeOwnedFile(path: string, identity: Stats | undefined): boolean {\n if (!existsSync(path)) return true;\n try {\n const current = lstatSync(path);\n if (!identity || !current.isFile() || current.isSymbolicLink() || !sameNode(current, identity)) return false;\n unlinkSync(path); return !existsSync(path);\n } catch { return false; }\n}\n\nfunction removeOwnedDirectory(path: string, identity: Stats | undefined): boolean {\n if (!existsSync(path)) return true;\n try {\n const current = lstatSync(path);\n if (!identity || !current.isDirectory() || current.isSymbolicLink() || !sameNode(current, identity)) return false;\n // Owner-private paths exclude other OS principals. Node has no portable\n // handle-relative recursive delete, so a hostile same-account process is\n // outside this cleanup-only race boundary. Execution inputs remain FD-bound.\n rmSync(path, { recursive: true }); return !existsSync(path);\n } catch { return false; }\n}\n\nfunction recoveryPaths(paths: readonly string[]): string[] { return paths.filter(existsSync); }\n\nfunction verifyProviderBundle(path: string, expected: DrProvider): NativeDrBundleMetadata {\n const expectedKind = expected === \"local\" ? \"sqlite\" : \"postgres\";\n const reader = new NativeDrBundleReader(path);\n try {\n const metadata = reader.inspect();\n if (metadata.manifest.kind !== expectedKind) {\n fail(\"PROVIDER_MISMATCH\", `DR bundle provider is ${metadata.manifest.kind}, not ${expected}`);\n }\n return expected === \"local\" ? verifyNativeDrBundle(path) : metadata;\n } finally { reader.close(); }\n}\n\nfunction commandErrorWithRecovery(\n error: unknown,\n identity: { backupId?: string; requestId?: string },\n paths: readonly string[],\n): NativeDrCommandError {\n const details = error instanceof NativeDrCommandError || error instanceof PostgresNativeDrError\n ? { ...error.details } as Record<string, unknown>\n : {};\n const nested = Array.isArray(details.recoveryPaths)\n ? details.recoveryPaths.filter((path): path is string => typeof path === \"string\")\n : [];\n delete details.recoveryPaths;\n const retained = recoveryPaths([...new Set([...nested, ...paths])]);\n if (error instanceof NativeDrCommandError) {\n return new NativeDrCommandError(error.code, error.message, {\n ...details, ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n if (error instanceof PostgresNativeDrError) {\n return new NativeDrCommandError(error.code, error.message, {\n ...details, ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n if (error instanceof PrivatePathError) {\n return new NativeDrCommandError(\"INSECURE_PATH\", \"DR path does not satisfy the private path policy\", {\n ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n if (error instanceof NativeDrBundleError) {\n return new NativeDrCommandError(\"INVALID_DR_BUNDLE\", \"DR bundle verification failed\", {\n ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n return new NativeDrCommandError(\"DR_COMMAND_FAILED\", \"DR command failed\", {\n ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n}\n\nasync function backupPostgresBundle(\n outputPath: string,\n backupId: string,\n toolDirectory: string | undefined,\n dependencies: DrCommandDependencies,\n): Promise<{ metadata: NativeDrBundleMetadata; directoryDurability: \"confirmed\" | \"unavailable\" }> {\n const target = resolve(outputPath); preparePrivateFileLocation(target);\n const directory = dirname(target);\n const stage = join(directory, `.${backupId}.agent-bridge-dr.postgres.stage`);\n const bundleStage = join(directory, `.${backupId}.agent-bridge-dr.bundle.tmp`);\n const priorRecovery = recoveryPaths([bundleStage, stage]);\n if (priorRecovery.length) fail(\"DR_RECOVERY_REQUIRED\", \"a prior PostgreSQL DR backup with this ID requires recovery\", {\n backupId, output: target, outputExists: existsSync(target), published: existsSync(target) ? \"unknown\" : false,\n recoveryPaths: priorRecovery,\n });\n if (existsSync(target)) fail(\"OUTPUT_EXISTS\", \"DR output already exists\");\n let stageIdentity: Stats | undefined; let bundleIdentity: Stats | undefined; let descriptor: number | undefined;\n let published = false; let durable = false;\n let directoryDurability: \"confirmed\" | \"unavailable\" = \"confirmed\";\n const operations = fileOperations(dependencies);\n const platform = dependencies.platform ?? process.platform;\n try {\n stageIdentity = createPrivateDirectory(stage);\n operations.syncDirectory(directory);\n const input = await (dependencies.backupPostgres ?? backupPostgresNativeDr)({\n stagingDirectory: stage,\n backupId,\n environment: dependencies.environment ?? process.env,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n if (input.backupId !== backupId || input.kind !== \"postgres\" || input.entries.length !== 2\n || input.entries[0]?.name !== POSTGRES_DUMP_ENTRY || resolve(input.entries[0].path) !== join(stage, \"postgres-database.dump\")\n || input.entries[1]?.name !== POSTGRES_ROLES_ENTRY || resolve(input.entries[1].path) !== join(stage, \"postgres-roles.json\")) {\n fail(\"POSTGRES_STAGE_INVALID\", \"PostgreSQL DR adapter returned an unexpected staging contract\");\n }\n operations.syncDirectory(stage);\n const opened = openPrivateFile(bundleStage); descriptor = opened.descriptor; bundleIdentity = opened.identity;\n writeNativeDrBundle(descriptor, input as unknown as NativeDrBundleInput, bundleStage);\n closeSync(descriptor); descriptor = undefined;\n const verificationStage = join(stage, \"bundle-verification\");\n createPrivateDirectory(verificationStage);\n const extracted = extractPostgresBundle(bundleStage, verificationStage);\n try {\n await (dependencies.verifyPostgres ?? verifyPostgresNativeDrArtifacts)({\n dumpPath: extracted.dumpPath,\n rolesPath: extracted.rolesPath,\n schema: extracted.metadata.manifest.schema as unknown as PostgresNativeDrSchema,\n artifactAnchors: extracted.artifactAnchors,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n } finally { closeExtractedPostgresBundle(extracted); }\n const beforePublication = extracted.metadata;\n try { operations.link(bundleStage, target); published = true; }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") fail(\"OUTPUT_EXISTS\", \"DR output already exists\");\n throw error;\n }\n const publishedIdentity = lstatSync(target);\n if (!bundleIdentity || !publishedIdentity.isFile() || publishedIdentity.isSymbolicLink()\n || !sameNode(bundleIdentity, publishedIdentity)) {\n fail(\"DR_PUBLICATION_INVALID\", \"published DR output does not reference the verified staging file\", {\n backupId, output: target, published: true, durable: false, verified: false,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n try {\n operations.syncFile(target); operations.afterPublish?.(target);\n if (!operations.syncDirectory(directory)) {\n if (platform === \"win32\") directoryDurability = \"unavailable\";\n else {\n fail(\"DR_PUBLICATION_AMBIGUOUS\", \"DR output is visible but directory durability is unproved\", {\n backupId, output: target, published: true, durable: \"unknown\", platform,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n }\n durable = true;\n } catch {\n fail(\"DR_PUBLICATION_AMBIGUOUS\", \"DR output is visible but durability is unknown\", {\n backupId, output: target, published: true, durable: \"unknown\", recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n let publishedMetadata: NativeDrBundleMetadata | undefined;\n try { publishedMetadata = verifyProviderBundle(target, \"postgres\"); }\n catch {\n fail(\"DR_PUBLICATION_INVALID\", \"published DR output could not be verified\", {\n backupId, output: target, published: true, durable: true, verified: false,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n if (!publishedMetadata) throw new NativeDrCommandError(\"DR_PUBLICATION_INVALID\", \"published DR output could not be verified\");\n if (publishedMetadata.bundleSha256 !== beforePublication.bundleSha256) {\n fail(\"DR_PUBLICATION_INVALID\", \"published DR output does not match its verified staging bundle\", {\n backupId, output: target, published: true, durable: true, verified: false,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n const bundleRemoved = removeOwnedFile(bundleStage, bundleIdentity);\n const stageRemoved = removeOwnedDirectory(stage, stageIdentity);\n if (!bundleRemoved || !stageRemoved) {\n fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"DR output is valid but a recovery artifact remains\", {\n backupId, output: target, published: true, durable: true, verified: true,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n try {\n if (!operations.syncDirectory(directory) && platform !== \"win32\") {\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR output is valid but staging cleanup durability is unproved\", {\n backupId, output: target, published: true, durable: true, verified: true,\n cleanupDurability: \"unproved\", platform,\n });\n }\n }\n catch (error) {\n if (error instanceof NativeDrCommandError) throw error;\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR output is valid but staging cleanup durability is unknown\", {\n backupId, output: target, published: true, durable: true, verified: true,\n });\n }\n return { metadata: publishedMetadata, directoryDurability };\n } catch (error) {\n if (descriptor !== undefined) { closeSync(descriptor); descriptor = undefined; }\n if (!published) {\n removeOwnedFile(bundleStage, bundleIdentity); removeOwnedDirectory(stage, stageIdentity);\n try {\n if (!operations.syncDirectory(directory)) {\n if (platform === \"win32\") {\n const primary = commandErrorWithRecovery(error, { backupId }, [bundleStage, stage]);\n throw new NativeDrCommandError(primary.code, primary.message, {\n ...primary.details, cleanupDirectoryDurability: \"unavailable\", platform,\n });\n }\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR backup failure cleanup durability is unproved\", {\n backupId, cleanupDurability: \"unproved\", platform,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n } catch (cleanupError) {\n if (cleanupError instanceof NativeDrCommandError) throw cleanupError;\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR backup failure cleanup durability is unknown\", {\n backupId, cleanupDurability: \"unknown\", platform,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n throw commandErrorWithRecovery(error, { backupId }, [bundleStage, stage]);\n }\n if (error instanceof NativeDrCommandError) throw error;\n throw new NativeDrCommandError(\"DR_PUBLICATION_AMBIGUOUS\", \"DR publication outcome is incomplete\", {\n backupId, output: target, published: true, durable: durable || \"unknown\",\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n } finally { if (descriptor !== undefined) closeSync(descriptor); }\n}\n\nasync function restorePostgresBundle(\n bundlePath: string,\n requestId: string,\n toolDirectory: string | undefined,\n dependencies: DrCommandDependencies,\n): Promise<{\n metadata: NativeDrBundleMetadata;\n result: RestorePostgresNativeDrResult;\n cleanupDirectoryDurability: \"confirmed\" | \"unavailable\";\n}> {\n const bundle = resolve(bundlePath); const directory = dirname(bundle);\n const stage = join(directory, `.${requestId}.agent-bridge-dr.postgres-restore.stage`);\n if (existsSync(stage)) fail(\"DR_RECOVERY_REQUIRED\", \"a prior PostgreSQL DR restore with this ID requires recovery\", {\n requestId, bundle, recoveryPaths: [stage],\n });\n let stageIdentity: Stats | undefined;\n let targetRestored = false;\n const platform = dependencies.platform ?? process.platform;\n const operations = fileOperations(dependencies);\n let extracted: ExtractedPostgresBundle | undefined;\n try {\n stageIdentity = createPrivateDirectory(stage);\n operations.syncDirectory(directory);\n extracted = extractPostgresBundle(bundle, stage);\n operations.syncDirectory(stage);\n const result = await (dependencies.restorePostgres ?? restorePostgresNativeDr)({\n dumpPath: extracted.dumpPath,\n rolesPath: extracted.rolesPath,\n schema: extracted.metadata.manifest.schema as unknown as PostgresNativeDrSchema,\n artifactAnchors: extracted.artifactAnchors,\n acceptSourceSqlRisk: true,\n environment: dependencies.environment ?? process.env,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n targetRestored = true;\n const metadata = extracted.metadata;\n closeExtractedPostgresBundle(extracted); extracted = undefined;\n if (!removeOwnedDirectory(stage, stageIdentity)) {\n fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"PostgreSQL restore completed but a recovery artifact remains\", {\n requestId, recoveryPaths: recoveryPaths([stage]),\n });\n }\n try {\n if (!operations.syncDirectory(directory) && platform !== \"win32\") {\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore completed but cleanup durability is unproved\", {\n requestId, targetRestored: true, cleanupDurability: \"unproved\", platform,\n });\n }\n }\n catch (error) {\n if (error instanceof NativeDrCommandError) throw error;\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore completed but cleanup durability is unknown\", {\n requestId, targetRestored: true, cleanupDurability: \"unknown\", platform,\n });\n }\n return { metadata, result, cleanupDirectoryDurability: platform === \"win32\" ? \"unavailable\" : \"confirmed\" };\n } catch (error) {\n if (extracted) { closeExtractedPostgresBundle(extracted); extracted = undefined; }\n const targetMutated = error instanceof PostgresNativeDrError\n && (error.details.targetMutated === true || error.details.restoreCompleted === true);\n if (targetRestored || targetMutated) throw commandErrorWithRecovery(error, { requestId }, [stage]);\n removeOwnedDirectory(stage, stageIdentity);\n try {\n if (!operations.syncDirectory(directory)) {\n if (platform === \"win32\") {\n const primary = commandErrorWithRecovery(error, { requestId }, [stage]);\n throw new NativeDrCommandError(primary.code, primary.message, {\n ...primary.details, cleanupDirectoryDurability: \"unavailable\", platform,\n });\n }\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore failure cleanup durability is unproved\", {\n requestId, cleanupDurability: \"unproved\", platform,\n recoveryPaths: recoveryPaths([stage]),\n });\n }\n } catch (cleanupError) {\n if (cleanupError instanceof NativeDrCommandError) throw cleanupError;\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore failure cleanup durability is unknown\", {\n requestId, cleanupDurability: \"unknown\", platform,\n recoveryPaths: recoveryPaths([stage]),\n });\n }\n throw commandErrorWithRecovery(error, { requestId }, [stage]);\n }\n}\n\nasync function verifyPostgresBundle(\n bundlePath: string,\n toolDirectory: string | undefined,\n dependencies: DrCommandDependencies,\n): Promise<{ metadata: NativeDrBundleMetadata; cleanupDirectoryDurability: \"confirmed\" | \"unavailable\" }> {\n const bundle = resolve(bundlePath); const directory = dirname(bundle);\n const bundlePathId = createHash(\"sha256\").update(bundle).digest(\"hex\").slice(0, 32);\n const stage = join(directory, `.${bundlePathId}.agent-bridge-dr.postgres-verify.stage`);\n if (existsSync(stage)) fail(\"DR_RECOVERY_REQUIRED\", \"a prior PostgreSQL DR verification requires recovery\", {\n bundle, recoveryPaths: [stage],\n });\n const platform = dependencies.platform ?? process.platform;\n const operations = fileOperations(dependencies);\n let stageIdentity: Stats | undefined; let extracted: ExtractedPostgresBundle | undefined;\n let verificationCompleted = false;\n try {\n stageIdentity = createPrivateDirectory(stage);\n extracted = extractPostgresBundle(bundle, stage);\n await (dependencies.verifyPostgres ?? verifyPostgresNativeDrArtifacts)({\n dumpPath: extracted.dumpPath,\n rolesPath: extracted.rolesPath,\n schema: extracted.metadata.manifest.schema as unknown as PostgresNativeDrSchema,\n artifactAnchors: extracted.artifactAnchors,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n verificationCompleted = true;\n const metadata = extracted.metadata;\n closeExtractedPostgresBundle(extracted); extracted = undefined;\n if (!removeOwnedDirectory(stage, stageIdentity)) {\n fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"PostgreSQL verification completed but a recovery artifact remains\", {\n backupId: metadata.manifest.backupId, recoveryPaths: recoveryPaths([stage]),\n });\n }\n const durable = operations.syncDirectory(directory);\n if (!durable && platform !== \"win32\") {\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL verification cleanup durability is unproved\", {\n backupId: metadata.manifest.backupId, cleanupDurability: \"unproved\", platform,\n });\n }\n return { metadata, cleanupDirectoryDurability: durable ? \"confirmed\" : \"unavailable\" };\n } catch (error) {\n if (extracted) closeExtractedPostgresBundle(extracted);\n if (verificationCompleted) throw commandErrorWithRecovery(error, {}, [stage]);\n removeOwnedDirectory(stage, stageIdentity);\n try { operations.syncDirectory(directory); } catch { /* primary error remains authoritative */ }\n throw commandErrorWithRecovery(error, {}, [stage]);\n }\n}\n\nconst success = (operation: DrOperation, fields: Record<string, unknown>): Record<string, unknown> => ({\n schemaVersion: 1, status: \"ok\", operation, ...fields,\n});\n\nexport async function runDrCommand(argv: string[], dependencies: DrCommandDependencies = {}): Promise<Record<string, unknown>> {\n const { operation, options } = parse(argv);\n try {\n const selected = provider(options);\n if (selected === \"local\") {\n rejectProviderOption(options, \"tool-directory\", selected, operation);\n rejectProviderOption(options, \"accept-source-sql-risk\", selected, operation);\n if (operation === \"backup\") {\n const source = required(options, \"source\"); const output = required(options, \"output\");\n const backupId = optional(options, \"backup-id\") ? validateNativeDrId(required(options, \"backup-id\")) : randomUUID();\n const metadata = await backupLocalSqlite(source, output, backupId, { timeoutMs: timeout(options) });\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n output: resolve(output), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n });\n }\n const bundle = required(options, \"bundle\");\n if (operation === \"verify\") {\n const metadata = verifyProviderBundle(bundle, selected);\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n bundle: resolve(bundle), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n });\n }\n const target = required(options, \"target\");\n const requestId = optional(options, \"request-id\") ? validateNativeDrId(required(options, \"request-id\")) : randomUUID();\n const metadata = await restoreLocalSqlite(bundle, target, requestId, { timeoutMs: timeout(options) });\n return success(operation, {\n provider: selected, requestId: metadata.requestId, backupId: metadata.manifest.backupId,\n target: resolve(target), bundleSha256: metadata.bundleSha256,\n });\n }\n\n rejectProviderOption(options, \"source\", selected, operation);\n rejectProviderOption(options, \"target\", selected, operation);\n rejectProviderOption(options, \"timeout-ms\", selected, operation);\n const toolDirectory = optional(options, \"tool-directory\");\n if (operation === \"backup\") {\n const output = required(options, \"output\");\n const backupId = validateNativeDrId(required(options, \"backup-id\"));\n const { metadata, directoryDurability } = await backupPostgresBundle(output, backupId, toolDirectory, dependencies);\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n output: resolve(output), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n directoryDurability, ...(directoryDurability === \"unavailable\" ? { platform: \"win32\" } : {}),\n });\n }\n const bundle = required(options, \"bundle\");\n if (operation === \"verify\") {\n const { metadata, cleanupDirectoryDurability } = await verifyPostgresBundle(bundle, toolDirectory, dependencies);\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n bundle: resolve(bundle), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n cleanupDirectoryDurability,\n ...(cleanupDirectoryDurability === \"unavailable\" ? { platform: \"win32\" } : {}),\n });\n }\n if (options[\"accept-source-sql-risk\"] !== true) {\n fail(\"SOURCE_SQL_RISK_NOT_ACCEPTED\", \"PostgreSQL native restore requires --accept-source-sql-risk\");\n }\n const requestId = validateNativeDrId(required(options, \"request-id\"));\n const { metadata, result, cleanupDirectoryDurability } = await restorePostgresBundle(bundle, requestId, toolDirectory, dependencies);\n return success(operation, {\n provider: selected, requestId, backupId: metadata.manifest.backupId, bundleSha256: metadata.bundleSha256,\n databaseName: result.databaseName, normalizedClaimedDeliveries: result.normalizedClaimedDeliveries,\n tableCounts: result.tableCounts, readiness: result.readiness, cleanupDirectoryDurability,\n ...(cleanupDirectoryDurability === \"unavailable\" ? { platform: \"win32\" } : {}),\n });\n } catch (error) {\n if (error instanceof NativeDrCommandError) throw error;\n if (error instanceof PostgresNativeDrError) throw new NativeDrCommandError(error.code, error.message, error.details);\n if (error instanceof PrivatePathError) fail(\"INSECURE_PATH\", \"DR path does not satisfy the private path policy\");\n if (error instanceof NativeDrBundleError) fail(\"INVALID_DR_BUNDLE\", \"DR bundle verification failed\");\n fail(\"DR_COMMAND_FAILED\", \"DR command failed\");\n }\n throw new NativeDrCommandError(\"DR_COMMAND_FAILED\", \"DR command failed\");\n}\n"],"mappings":"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","names":["existsSync","mkdirSync","readFileSync","renameSync","rmSync","writeFileSync","createHash","basename","dirname","join","homedir","fileURLToPath","pg","closeSync","constants","existsSync","fsyncSync","mkdirSync","openSync","readFileSync","renameSync","rmSync","writeFileSync","createHash","randomUUID","homedir","dirname","join","resolve","instant","enrollment","home","requestId","lock","existsSync","constants","resolve","join","dirname","home","homedir","createHash","runtime","mkdirSync","randomUUID","openSync","writeFileSync","fsyncSync","closeSync","renameSync","descriptor","identity","provider","readFileSync","enrollment","lock","output","rmSync","accessSync","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","renameSync","statSync","writeFileSync","createHash","randomUUID","homedir","dirname","isAbsolute","join","parse","resolve","sep","spawnSync","spawnSync","safeComponent","createHash","runtime","join","homedir","desktopConfigPath","home","resolve","identity","isAbsolute","existsSync","statSync","accessSync","constants","locator","dirname","output","parse","sep","lstatSync","openSync","fstatSync","readFileSync","closeSync","mkdirSync","randomUUID","writeFileSync","fsyncSync","renameSync","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","renameSync","rmSync","writeFileSync","createHash","hostname","dirname","join","resolve","spawnSync","isDeepStrictEqual","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","realpathSync","renameSync","rmSync","writeFileSync","createHash","randomUUID","homedir","hostname","dirname","isAbsolute","join","parse","relative","resolve","sep","lock","syncDirectory","openSync","fsyncSync","closeSync","renameSync","rmSync","isAbsolute","parse","sep","join","lstatSync","sameDirectory","identity","prepareDirectory","mkdirSync","resolve","realpathSync","homedir","relative","timestamp","digest","runtime","createHash","validateRequest","value","migrationOperationId","stageContract","dirname","randomUUID","writeFileSync","temporaryIdentity","fstatSync","existsSync","constants","readFileSync","hostname","lock","hostname","summary","dirname","identity","openSync","constants","fstatSync","readFileSync","sameDirectory","closeSync","runtime","digest","createHash","existsSync","join","writeFileSync","randomUUID","fsyncSync","syncDirectory","rmSync","lstatSync","artifact","now","preflight","artifacts","existsSync","createHash","canonical","isDeepStrictEqual","runtime","dirname","lstatSync","openSync","constants","fstatSync","fsyncSync","closeSync","locator","existsSync","readFileSync","identity","rmSync","mkdirSync","join","writeFileSync","renameSync","servers","exactRegistration","resolve","spawnSync","hostname","createHash","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","renameSync","rmSync","writeFileSync","dirname","isAbsolute","join","relative","resolve","UUID","fail","text","uuid","canonical","object","digest","createHash","enrollment","lstatSync","openSync","constants","fstatSync","readFileSync","closeSync","output","isAbsolute","resolve","existsSync","join","dirname","relative","mkdirSync","randomUUID","writeFileSync","fsyncSync","renameSync","rmSync","runtime","projection","lock","createHash","randomUUID","closeSync","constants","existsSync","fstatSync","lstatSync","openSync","readFileSync","readdirSync","dirname","isAbsolute","resolve","spawnSync","UUID","BACKEND_KEYS","fail","canonical","digest","createHash","uuid","text","readPrivateText","lstatSync","openSync","constants","fstatSync","readFileSync","closeSync","isAbsolute","resolve","fail","readPrivateText","digest","resolve","canonical","metadataProof","registrationProof","existsSync","lstatSync","dirname","readdirSync","UUID","fail","resolve","report","metadataProof","registrationProof","migrationOperationId","uuid","digest","runtime","spawnSync","randomUUID","canonical","lock","randomBytes","randomUUID","randomUUID","randomBytes","runtime","enrollment","lock","cursor","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","linkSync","lstatSync","openSync","renameSync","unlinkSync","homedir","dirname","isAbsolute","join","resolve","pg","fail","stringOption","randomUUID","required","homedir","join","isAbsolute","resolve","pg","syncDirectory","openSync","fsyncSync","closeSync","dirname","linkSync","renameSync","unlinkSync","existsSync","lstatSync","constants","fstatSync","requestId","recoveryPaths","path","archive","metadata","createHash","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","linkSync","lstatSync","mkdirSync","openSync","rmSync","unlinkSync","dirname","join","resolve","fail","parse","required","provider","lstatSync","constants","openSync","fstatSync","fsyncSync","closeSync","syncDirectory","linkSync","mkdirSync","join","identity","existsSync","unlinkSync","rmSync","resolve","dirname","requestId","createHash","success","output","randomUUID","metadata","bundle","cleanupDirectoryDurability","BOOLEAN_OPTIONS","parse","relative","readFileSync","dirname","existsSync","mkdirSync","basename","writeFileSync","renameSync","rmSync","createHash","fileURLToPath","home","homedir","join","provider","runtime","pg","remoteError","resolve"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/legacy-project-reconciliation.ts","../src/client-installer.ts","../src/enrollment-file.ts","../src/client-lifecycle.ts","../src/client-maintenance.ts","../src/client-operation.ts","../src/client-migration-stage.ts","../src/client-migration-cutover.ts","../src/owner-control.ts","../src/archive-cli.ts","../src/dr-cli.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport { basename, dirname, join } from \"node:path\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { mkdtempSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport pg from \"pg\";\nimport type { MessageDraft } from \"./bridge-domain.js\";\nimport { resolveClientConfig, type ClientConfig } from \"./client-config.js\";\nimport { createClientRuntime } from \"./client-runtime.js\";\nimport { loadMigrationPlan, runMigrations } from \"./migrations.js\";\nimport { reconcileLegacyProjects } from \"./legacy-project-reconciliation.js\";\nimport { legacyContextMetadata, legacyNumericMessageId } from \"./legacy-compat.js\";\nimport { BridgeHttpError } from \"./http-bridge-store.js\";\nimport { installClient, type InstallableRuntime } from \"./client-installer.js\";\nimport { adoptClient, inspectClient } from \"./client-lifecycle.js\";\nimport {\n repairManagedClient, resumeManagedClientOperation, rollbackManagedClient, uninstallManagedClient, updateManagedClient,\n} from \"./client-maintenance.js\";\nimport { CLIENT_OPERATION_VERSION, inspectClientOperation, listClientOperations, readClientOperation } from \"./client-operation.js\";\nimport { resumeClientMigrationStage, stageClientMigrationTarget } from \"./client-migration-stage.js\";\nimport {\n cutoverClientMigration, finalizeClientMigration, resumeClientMigrationCutover,\n} from \"./client-migration-cutover.js\";\nimport { capabilityDocument, operationForCli, parseCliResponse, validateRequest } from \"./contracts/registry.js\";\nimport { runOwnerCommand, type OwnerOptions } from \"./owner-control.js\";\nimport { ArchiveCommandError, runArchiveCommand } from \"./archive-cli.js\";\nimport { runDrCommand } from \"./dr-cli.js\";\nimport { NativeDrCommandError } from \"./sqlite-native-dr.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\ntype Options = Record<string, string | boolean | string[]>;\nconst SUPPORTED_OPTIONS = new Set([\n \"agent\", \"as\", \"atrib-receipt-id\", \"category\", \"causation-id\", \"config\",\n \"content\", \"content-type\", \"correlation-id\", \"cursor\", \"data\", \"db\", \"dead\",\n \"delivery-id\", \"delivery-max-attempts\", \"delivery-mode\", \"delivery-policy\",\n \"disposition\", \"error\", \"expires-at\", \"force\", \"idempotency-key\", \"ids\",\n \"informed-by\", \"instance\", \"interval-ms\", \"json\", \"key\", \"kind\", \"lease-ms\",\n \"lease-token\", \"limit\", \"max-attempts\", \"max-interval-ms\", \"message-id\",\n \"metadata\", \"not-before\", \"payload\", \"payload-ciphertext\", \"payload-mime\", \"payload-ref\",\n \"polls\", \"priority\", \"project\", \"provider\", \"reply-to-id\", \"since\", \"source\",\n \"target\", \"target-agent\", \"target-agents\", \"thread-id\", \"token\", \"type\",\n \"unacked-by\", \"url\", \"workspace\", \"mailbox\", \"receipt-state\",\n \"identity\", \"command\", \"scope\", \"backend-config\", \"config-path\",\n \"recipient\", \"retry-base-ms\", \"retry-jitter\", \"retry-max-ms\", \"role\", \"runtime\", \"capability\", \"state\",\n \"max-pages\", \"max-push\",\n \"latest\",\n \"apply\",\n \"display-name\", \"enrollment-file\",\n \"credential-id\", \"gateway-url\", \"grace-until\", \"invalidate-immediately\", \"label\",\n \"reason\", \"request-id\", \"resume\", \"runtime-type\", \"recover-lock\",\n \"scope-set\", \"workspace-name\", \"exclusive-edge\", \"queue-only\",\n]);\nconst BOOLEAN_OPTIONS = new Set([\"apply\", \"dead\", \"force\", \"invalidate-immediately\", \"json\", \"latest\", \"recover-lock\", \"exclusive-edge\", \"queue-only\"]);\nfunction parse(argv: string[]): { command: string; options: Options; positionals: string[] } {\n const command = argv[0] ?? \"help\"; const options: Options = {}; const positionals: string[] = [];\n for (let i = 1; i < argv.length; i++) {\n const value = argv[i]!;\n if (!value.startsWith(\"--\")) { positionals.push(value); continue; }\n const key = value.slice(2); const next = argv[i + 1];\n if (!next || next.startsWith(\"--\")) {\n if (!BOOLEAN_OPTIONS.has(key)) throw new Error(`--${key} requires a value`);\n options[key] = true;\n }\n else { i++; const previous = options[key]; options[key] = previous === undefined ? next : Array.isArray(previous) ? [...previous, next] : [String(previous), next]; }\n }\n return { command, options, positionals };\n}\nfunction one(options: Options, key: string): string | undefined { const value = options[key]; return Array.isArray(value) ? value[value.length - 1] : typeof value === \"string\" ? value : undefined; }\nfunction list(options: Options, key: string): string[] { const value = options[key]; return (Array.isArray(value) ? value : value ? [String(value)] : []).flatMap((item) => item.split(\",\")).map((item) => item.trim()).filter(Boolean); }\nfunction boolean(options: Options, key: string): boolean {\n const value = options[key];\n const selected = Array.isArray(value) ? value[value.length - 1] : value;\n if (selected === undefined) return false;\n if (selected === true || selected === \"true\") return true;\n if (selected === false || selected === \"false\") return false;\n throw new Error(`--${key} must be true or false`);\n}\nfunction integer(options: Options, key: string, fallback: number): number { const raw = one(options, key); const result = raw === undefined ? fallback : Number(raw); if (!Number.isSafeInteger(result) || result < 0) throw new Error(`--${key} must be a non-negative integer`); return result; }\nfunction json(options: Options, key: string): unknown {\n const raw = one(options, key);\n if (raw === undefined) return undefined;\n try { return JSON.parse(raw); } catch { throw new Error(`--${key} must be valid JSON`); }\n}\nfunction since(options: Options): string | undefined {\n const raw = one(options, \"since\");\n if (!raw) return undefined;\n const relative = raw.match(/^(\\d+)(h|d)$/);\n if (!relative) return raw;\n const amount = Number(relative[1]);\n const milliseconds = amount * (relative[2] === \"h\" ? 3_600_000 : 86_400_000);\n return new Date(Date.now() - milliseconds).toISOString();\n}\nfunction output(value: unknown): void { process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`); }\nfunction cliOutput(\n operationId: string,\n value: unknown,\n invocation?: { command: string; optionNames?: readonly string[] },\n): void { output(parseCliResponse(operationId, value, invocation)); }\nfunction failedClientStatus(\n config: ClientConfig,\n error: unknown,\n failure: { component: \"local-store\" | \"remote\"; remoteAttempted?: boolean },\n): void {\n const schemaVersion = config.provider === \"gateway\" ? \"postgres-v2\" : \"local-v2\";\n const remote = config.provider === \"local\" || !failure.remoteAttempted ? null : false;\n const localHealthy = failure.component !== \"local-store\";\n const code = error && typeof error === \"object\" && \"code\" in error && typeof error.code === \"string\"\n ? error.code\n : \"diagnostics_failed\";\n cliOutput(\"client_status\", {\n status: \"failed\",\n localHealthy,\n connected: false,\n remoteReachable: remote,\n provider: config.provider,\n workspace: config.principal.workspace,\n agent: config.principal.agent,\n instance: config.principal.instance ?? null,\n schemaVersion,\n endpoint: config.url ?? null,\n database: config.provider === \"local\" ? config.databasePath : null,\n cursorPath: config.cursorPath,\n lastCursor: cursor(config.cursorPath) ?? null,\n queue: { schemaVersion, deliverySupported: false, pending: null, claimed: null, retrying: null, dead: null },\n checks: [{ name: failure.component, status: \"failed\", message: `${failure.component} diagnostics failed (${code})` }],\n });\n}\nfunction cursor(path: string): string | undefined { try { return readFileSync(path, \"utf8\").trim() || undefined; } catch { return undefined; } }\nfunction preparePrivateOutput(path: string): void {\n const directory = dirname(path);\n const existed = existsSync(directory);\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n if (!existed || basename(directory) === \".agent-bridge\") securePrivatePath(directory, \"directory\");\n else verifyPrivatePathAccess(directory, \"directory\");\n if (existsSync(path)) verifyPrivatePathAccess(path, \"file\");\n}\n\nfunction saveCursor(path: string, value: string | undefined): void {\n if (!value) return;\n preparePrivateOutput(path);\n const temporary = `${path}.${process.pid}.tmp`;\n try {\n writeFileSync(temporary, `${value}\\n`, { mode: 0o600 });\n securePrivatePath(temporary, \"file\");\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n } catch (error) {\n rmSync(temporary, { force: true });\n throw error;\n }\n}\nfunction watchCursorPath(path: string, project: string | undefined): string {\n if (!project) return path;\n const scope = createHash(\"sha256\").update(project).digest(\"hex\").slice(0, 16);\n return `${path}.project-${scope}`;\n}\nfunction packageVersion(): string {\n const manifest = JSON.parse(readFileSync(fileURLToPath(new URL(\"../package.json\", import.meta.url)), \"utf8\")) as { version?: unknown };\n if (typeof manifest.version !== \"string\" || !manifest.version) throw new Error(\"package version is unavailable\");\n return manifest.version;\n}\nfunction help(): void {\n process.stdout.write(`agent-bridge: provider-neutral agent messaging\\n\\nCommands:\\n init, doctor, status, capabilities, pending, migrate, reconcile-legacy-projects, sync, demo, join, presence\\n send (post), inbox (get), sent, history, acknowledge, claim, extend, ack, nack, watch\\n deliveries, dead-letters, delivery-events, cancel, requeue\\n owner <provision|inventory|rotate|revoke>\\n archive <export|verify|import>\\n dr <backup|verify|restore>\\n clients install <codex|claude-code|claude-desktop> --identity <name>\\n clients inspect <codex|claude-code|claude-desktop> --identity <name> --instance <key> --backend-config <path>\\n clients adopt <codex|claude-code|claude-desktop> --identity <name> --instance <key> --backend-config <path> [--apply]\\n clients repair <codex|claude-code|claude-desktop> --identity <name> --instance <key> [--apply] [--resume <uuid>] [--recover-lock]\\n clients update <codex|claude-code|claude-desktop> --identity <name> --instance <key> [--command <command>] [--apply] [--resume <uuid>] [--recover-lock]\\n clients uninstall <codex|claude-code|claude-desktop> --identity <name> --instance <key> [--apply] [--resume <uuid>] [--recover-lock]\\n clients rollback <source-operation-id> --identity <name> [--apply] [--recover-lock]\\n clients migrate stage <codex|claude-code|claude-desktop> --identity <name> --instance <key> --enrollment-file <path> [--apply] [--recover-lock]\\n clients migrate cutover <stage-operation-id> --exclusive-edge [--apply] [--recover-lock]\\n clients migrate finalize <cutover-operation-id> --exclusive-edge [--apply] [--recover-lock]\\n clients resume <operation-id> [--recover-lock]\\n clients operations [<operation-id>]\\n\\nOptions:\\n -V, --version Print the installed package version\\n -h, --help Show this help\\n`);\n}\nfunction rejectUnknownOptions(options: Options): void {\n const unknown = Object.keys(options).filter((key) => !SUPPORTED_OPTIONS.has(key));\n if (unknown.length) throw new Error(`unknown option: --${unknown[0]}`);\n}\nfunction rejectOptionsOutside(options: Options, allowed: ReadonlySet<string>, command: string): void {\n const invalid = Object.keys(options).find((key) => !allowed.has(key));\n if (invalid) throw new Error(`--${invalid} is not valid for ${command}`);\n}\n\nconst CLI_CONTEXT_OPTIONS = new Set([\n \"agent\", \"as\", \"config\", \"db\", \"instance\", \"json\", \"key\", \"provider\",\n \"token\", \"url\", \"workspace\",\n]);\n\nfunction validateCanonicalCommandOptions(command: string, options: Options, config: ClientConfig): void {\n const contract = operationForCli(command, config.provider, Object.keys(options));\n if (!contract?.cli) return;\n const allowed = new Set([...CLI_CONTEXT_OPTIONS, ...contract.cli.options]);\n const invalid = Object.keys(options).find((key) => !allowed.has(key));\n if (invalid) throw new Error(`--${invalid} is not valid for ${command}`);\n}\n\nasync function initialize(options: Options): Promise<void> {\n const home = process.env.HOME ?? homedir();\n const configPath = one(options, \"config\") ?? process.env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\");\n if (existsSync(configPath) && !boolean(options, \"force\")) {\n throw new Error(`Config already exists at ${configPath}; pass --force to replace it`);\n }\n const provider = one(options, \"provider\") ?? process.env.AGENT_BRIDGE_PROVIDER ?? \"local\";\n if (one(options, \"instance\")) {\n throw new Error(\"--instance is client-scoped; set it in the active client process\");\n }\n const values: Record<string, string | undefined> = {\n AGENT_BRIDGE_PROVIDER: provider,\n AGENT_BRIDGE_WORKSPACE: one(options, \"workspace\") ?? process.env.AGENT_BRIDGE_WORKSPACE ?? \"default\",\n AGENT_BRIDGE_DB: one(options, \"db\") ?? process.env.AGENT_BRIDGE_DB,\n AGENT_BRIDGE_EDGE_DB: process.env.AGENT_BRIDGE_EDGE_DB,\n AGENT_BRIDGE_URL: one(options, \"url\") ?? process.env.AGENT_BRIDGE_URL,\n AGENT_BRIDGE_KEY: one(options, \"key\") ?? process.env.AGENT_BRIDGE_KEY,\n };\n const verificationToken = one(options, \"token\") ?? process.env.AGENT_BRIDGE_TOKEN;\n for (const value of Object.values(values)) {\n if (value?.includes(\"\\n\") || value?.includes(\"\\r\")) throw new Error(\"config values cannot contain newlines\");\n }\n preparePrivateOutput(configPath);\n const temporary = `${configPath}.${process.pid}.tmp`;\n let config: ClientConfig;\n try {\n writeFileSync(\n temporary,\n Object.entries(values).filter((entry): entry is [string, string] => Boolean(entry[1])).map(([key, value]) => `${key}=${value}`).join(\"\\n\") + \"\\n\",\n { mode: 0o600 },\n );\n securePrivatePath(temporary, \"file\");\n config = resolveClientConfig(\n {\n HOME: home,\n AGENT_BRIDGE_CONFIG: temporary,\n AGENT_BRIDGE_TOKEN: verificationToken,\n },\n \"agent-bridge-init\",\n );\n const runtime = await createClientRuntime(config);\n try {\n if (config.provider === \"gateway\") await runtime.store.verifyRemote?.();\n } finally {\n await runtime.close();\n }\n renameSync(temporary, configPath);\n verifyPrivatePathAccess(configPath, \"file\");\n } catch (error) {\n rmSync(temporary, { force: true });\n throw error;\n }\n output({ status: \"ok\", config: configPath, provider: config.provider, workspace: config.principal.workspace, identity: \"process-scoped\", database: config.provider === \"local\" ? config.databasePath : null });\n}\n\nfunction configFor(options: Options, command: string): ClientConfig {\n const explicit = command === \"send\"\n ? one(options, \"source\") ?? one(options, \"agent\")\n : command === \"acknowledge\" || (command === \"ack\" && Boolean(one(options, \"ids\")))\n ? one(options, \"agent\")\n : one(options, \"as\");\n const environment = {\n ...process.env,\n ...(one(options, \"config\") ? { AGENT_BRIDGE_CONFIG: one(options, \"config\") } : {}),\n ...(one(options, \"provider\") ? { AGENT_BRIDGE_PROVIDER: one(options, \"provider\") } : {}),\n ...(one(options, \"db\") ? { AGENT_BRIDGE_DB: one(options, \"db\") } : {}),\n ...(one(options, \"url\") ? { AGENT_BRIDGE_URL: one(options, \"url\") } : {}),\n ...(one(options, \"key\") ? { AGENT_BRIDGE_KEY: one(options, \"key\") } : {}),\n ...(one(options, \"token\") ? { AGENT_BRIDGE_TOKEN: one(options, \"token\") } : {}),\n ...(one(options, \"instance\") ? { AGENT_BRIDGE_INSTANCE: one(options, \"instance\") } : {}),\n };\n const config = resolveClientConfig(environment, explicit);\n const assertedWorkspace = one(options, \"workspace\");\n if (config.provider === \"gateway\" && assertedWorkspace && assertedWorkspace !== config.principal.workspace) {\n throw new Error(\"--workspace must match the workspace bound to the gateway credential\");\n }\n if (config.provider === \"local\" && assertedWorkspace && assertedWorkspace !== config.principal.workspace) {\n return resolveClientConfig(\n { ...environment, AGENT_BRIDGE_WORKSPACE: assertedWorkspace },\n explicit,\n );\n }\n return config;\n}\nfunction draft(options: Options, positionals: string[]): MessageDraft {\n const content = one(options, \"content\") ?? positionals.join(\" \");\n const metadataInput = json(options, \"metadata\");\n if (metadataInput !== undefined && (\n metadataInput === null || typeof metadataInput !== \"object\" || Array.isArray(metadataInput)\n )) throw new Error(\"--metadata must be a JSON object\");\n const metadata = (metadataInput ?? {}) as Record<string, unknown>;\n const envelope = typeof metadata.message_envelope === \"object\" && metadata.message_envelope\n ? { ...metadata.message_envelope as Record<string, unknown> }\n : {};\n if (one(options, \"payload-ref\")) envelope.payload_ref = one(options, \"payload-ref\");\n if (one(options, \"payload-ciphertext\")) envelope.payload_ciphertext = one(options, \"payload-ciphertext\");\n if (Object.keys(envelope).length) metadata.message_envelope = envelope;\n const deliveryMode = one(options, \"delivery-mode\");\n const deliveryTuning = [\"delivery-max-attempts\", \"retry-base-ms\", \"retry-max-ms\", \"retry-jitter\", \"not-before\"]\n .some((key) => one(options, key) !== undefined);\n if (deliveryTuning && !deliveryMode) throw new Error(\"--delivery-mode is required with delivery policy flags\");\n if (deliveryMode === \"mailbox\" && deliveryTuning) throw new Error(\"mailbox delivery mode does not accept retry or scheduling flags\");\n return {\n project: one(options, \"project\"),\n type: one(options, \"type\") ?? one(options, \"kind\") ?? one(options, \"category\") ?? \"operational\", content,\n targets: [...list(options, \"target\"), ...list(options, \"target-agent\"), ...list(options, \"target-agents\")],\n priority: one(options, \"priority\") as MessageDraft[\"priority\"], threadId: one(options, \"thread-id\"), replyToId: one(options, \"reply-to-id\"),\n correlationId: one(options, \"correlation-id\"), causationId: one(options, \"causation-id\"),\n id: one(options, \"message-id\"), idempotencyKey: one(options, \"idempotency-key\"), expiresAt: one(options, \"expires-at\"),\n contentType: one(options, \"content-type\") ?? one(options, \"payload-mime\"), atribReceiptId: one(options, \"atrib-receipt-id\"), informedBy: list(options, \"informed-by\"),\n data: (json(options, \"data\") ?? json(options, \"payload\")) as MessageDraft[\"data\"],\n metadata: metadata as MessageDraft[\"metadata\"],\n deliveryPolicy: (json(options,\"delivery-policy\") ?? (deliveryMode ? deliveryMode === \"mailbox\" ? { mode: \"mailbox\" } : { mode: deliveryMode, maxAttempts: integer(options,\"delivery-max-attempts\",5), retryBaseDelayMs: integer(options,\"retry-base-ms\",1000), retryMaxDelayMs: integer(options,\"retry-max-ms\",60000), retryJitterRatio: Number(one(options,\"retry-jitter\") ?? .2), notBefore: one(options,\"not-before\") } : undefined)) as MessageDraft[\"deliveryPolicy\"],\n };\n}\n\nasync function localDemo(): Promise<void> {\n const directory = mkdtempSync(join(tmpdir(), \"agent-bridge-demo-\")); const databasePath = join(directory, \"demo.sqlite3\");\n securePrivatePath(directory, \"directory\");\n const base = { provider: \"local\" as const, databasePath, edgeDatabasePath: join(directory, \"edge.sqlite3\"), cursorPath: join(directory, \"cursor\"), configPath: join(directory, \"config\"), credential: undefined, url: undefined };\n let sender: Awaited<ReturnType<typeof createClientRuntime>> | undefined;\n let worker: Awaited<ReturnType<typeof createClientRuntime>> | undefined;\n try {\n sender = await createClientRuntime({ ...base, principal: { workspace: \"demo\", agent: \"demo-sender\", instance: \"sender-1\" } });\n const sent = await sender.service.publish(sender.config.principal, { type: \"request\", content: \"deterministic local task\", targets: [\"demo-worker\"], idempotencyKey: \"demo-task-v1\" });\n await sender.close();\n sender = undefined;\n worker = await createClientRuntime({ ...base, principal: { workspace: \"demo\", agent: \"demo-worker\", instance: \"worker-1\" } });\n const history = await worker.service.history(worker.config.principal);\n const claim = await worker.service.claim(worker.config.principal, { leaseMs: 5_000 });\n if (!claim) throw new Error(\"demo claim failed\");\n const acked = await worker.service.ack(worker.config.principal, claim.delivery.id, claim.leaseToken);\n output({ status: \"ok\", principals: [\"demo-sender\", \"demo-worker\"], sent: sent.created, read: history.messages.length === 1, claimed: claim.delivery.state === \"claimed\", acknowledged: acked?.state === \"acked\" });\n } finally {\n await worker?.close();\n await sender?.close();\n rmSync(directory, { recursive: true, force: true });\n }\n}\n\nexport async function runCli(argv = process.argv.slice(2)): Promise<void> {\n if (argv.some((argument) => argument === \"-h\" || argument === \"--help\")) {\n help();\n return;\n }\n if (argv[0] === \"archive\") {\n output(await runArchiveCommand(argv.slice(1), process.env));\n return;\n }\n if (argv[0] === \"dr\") {\n output(await runDrCommand(argv.slice(1)));\n return;\n }\n const { command: raw, options, positionals } = parse(argv); const command = ({ post: \"send\", get: \"inbox\", receipt: \"acknowledge\" } as Record<string, string>)[raw] ?? raw;\n if ([\"-V\", \"--version\"].includes(command)) { process.stdout.write(`${packageVersion()}\\n`); return; }\n if (command === \"help\") { help(); return; }\n rejectUnknownOptions(options);\n if (command === \"owner\") {\n if (positionals.length !== 1) {\n throw new Error(\"usage: agent-bridge owner <provision|inventory|rotate|revoke>\");\n }\n const ownerOptions: OwnerOptions = {};\n for (const [key, value] of Object.entries(options)) {\n if (Array.isArray(value)) throw new Error(\"--\" + key + \" may only be provided once\");\n ownerOptions[key] = value;\n }\n output(await runOwnerCommand(positionals[0], ownerOptions, process.env));\n return;\n }\n if (command === \"clients\") {\n const action = positionals[0];\n if (action === \"operations\") {\n rejectOptionsOutside(options, new Set(), \"clients operations\");\n const operationId = positionals[1];\n const expectedLength = operationId ? 2 : 1;\n if (positionals.length !== expectedLength) {\n throw new Error(\"usage: agent-bridge clients operations [<operation-id>]\");\n }\n output(operationId ? inspectClientOperation(operationId, process.env) : {\n schemaVersion: CLIENT_OPERATION_VERSION,\n operations: listClientOperations(process.env),\n });\n return;\n }\n if (action === \"resume\") {\n rejectOptionsOutside(options, new Set([\"recover-lock\"]), \"clients resume\");\n if (positionals.length !== 2 || !positionals[1]) {\n throw new Error(\"usage: agent-bridge clients resume <operation-id> [--recover-lock]\");\n }\n const operation = readClientOperation(positionals[1], process.env);\n if (operation.version === 5 && operation.request?.kind === \"migrate\" && \"identity\" in operation.request) {\n output(await resumeClientMigrationStage({\n operationId: positionals[1], recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n } else if (operation.version === 6 && operation.request\n && [\"migrate-cutover\", \"migrate-finalize\"].includes(operation.request.kind)) {\n output(await resumeClientMigrationCutover({\n operationId: positionals[1], recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n } else {\n output(resumeManagedClientOperation({\n operationId: positionals[1], recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n }\n return;\n }\n if (action === \"rollback\") {\n rejectOptionsOutside(options, new Set([\"identity\", \"apply\", \"recover-lock\"]), \"clients rollback\");\n if (positionals.length !== 2 || !positionals[1]) {\n throw new Error(\"usage: agent-bridge clients rollback <source-operation-id> --identity <name> [--apply] [--recover-lock]\");\n }\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) {\n throw new Error(\"--recover-lock requires --apply\");\n }\n output(rollbackManagedClient({\n sourceOperationId: positionals[1], identity: one(options, \"identity\") ?? \"\",\n apply: boolean(options, \"apply\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n }));\n return;\n }\n if (action === \"migrate\") {\n const migrationAction = positionals[1];\n if (migrationAction === \"cutover\") {\n rejectOptionsOutside(options, new Set([\"apply\", \"recover-lock\", \"exclusive-edge\"]), \"clients migrate cutover\");\n if (positionals.length !== 3 || !positionals[2]) throw new Error(\"usage: agent-bridge clients migrate cutover <stage-operation-id> --exclusive-edge [--apply] [--recover-lock]\");\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) throw new Error(\"--recover-lock requires --apply\");\n output(await cutoverClientMigration({ stageOperationId: positionals[2], apply: boolean(options, \"apply\"), exclusiveEdge: boolean(options, \"exclusive-edge\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env }));\n } else if (migrationAction === \"finalize\") {\n rejectOptionsOutside(options, new Set([\"apply\", \"recover-lock\", \"exclusive-edge\"]), `clients migrate ${migrationAction}`);\n if (positionals.length !== 3 || !positionals[2]) throw new Error(`usage: agent-bridge clients migrate ${migrationAction} <cutover-operation-id> --exclusive-edge [--apply] [--recover-lock]`);\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) throw new Error(\"--recover-lock requires --apply\");\n const request = { cutoverOperationId: positionals[2], apply: boolean(options, \"apply\"), exclusiveEdge: boolean(options, \"exclusive-edge\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env };\n output(await finalizeClientMigration(request));\n } else {\n rejectOptionsOutside(options, new Set([\"identity\", \"instance\", \"enrollment-file\", \"apply\", \"recover-lock\"]), \"clients migrate stage\");\n if (positionals.length !== 3 || migrationAction !== \"stage\" || !positionals[2]) {\n throw new Error(\"usage: agent-bridge clients migrate stage <runtime> --identity <name> --instance <key> --enrollment-file <path> [--apply] [--recover-lock]\");\n }\n const runtime = positionals[2] as InstallableRuntime;\n if (![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) throw new Error(`unsupported client runtime: ${runtime}`);\n if (!boolean(options, \"apply\") && options[\"recover-lock\"] !== undefined) throw new Error(\"--recover-lock requires --apply\");\n output(await stageClientMigrationTarget({ runtime, identity: one(options, \"identity\") ?? \"\", instance: one(options, \"instance\") ?? \"\", enrollmentFile: one(options, \"enrollment-file\") ?? \"\", apply: boolean(options, \"apply\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env }));\n }\n return;\n }\n if (positionals.length !== 2 || ![\"install\", \"inspect\", \"adopt\", \"repair\", \"update\", \"uninstall\"].includes(action ?? \"\") || !positionals[1]) {\n throw new Error(action === \"install\"\n ? \"usage: agent-bridge clients install <runtime> --identity <name>\"\n : \"usage: agent-bridge clients <install|inspect|adopt|repair|update|uninstall> <runtime>\");\n }\n const runtime = positionals[1] as InstallableRuntime | undefined;\n if (runtime && ![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) {\n throw new Error(`unsupported client runtime: ${runtime}`);\n }\n const scope = one(options, \"scope\");\n if (scope && ![\"local\", \"user\", \"project\"].includes(scope)) {\n throw new Error(\"--scope must be local, user, or project\");\n }\n if (action === \"repair\" || action === \"update\" || action === \"uninstall\") {\n rejectOptionsOutside(options, new Set([\n \"identity\", \"instance\", \"command\", \"apply\", \"resume\", \"recover-lock\",\n ]), `clients ${action}`);\n if (action !== \"update\" && options.command !== undefined) {\n throw new Error(`--command is not valid for clients ${action}`);\n }\n if (!boolean(options, \"apply\") && (options.resume !== undefined || options[\"recover-lock\"] !== undefined)) {\n throw new Error(\"--resume and --recover-lock require --apply\");\n }\n const maintenance = {\n runtime: runtime!, identity: one(options, \"identity\") ?? \"\", instance: one(options, \"instance\") ?? \"\",\n command: one(options, \"command\"), apply: boolean(options, \"apply\"),\n resume: one(options, \"resume\"), recoverLock: boolean(options, \"recover-lock\"), env: process.env,\n };\n output(action === \"repair\"\n ? repairManagedClient(maintenance)\n : action === \"update\"\n ? updateManagedClient(maintenance)\n : uninstallManagedClient(maintenance));\n return;\n }\n if (action === \"inspect\" || action === \"adopt\") {\n rejectOptionsOutside(options, new Set([\n \"identity\", \"command\", \"scope\", \"instance\", \"backend-config\", \"config-path\", \"apply\",\n ]), `clients ${action}`);\n if (action === \"inspect\" && options.apply !== undefined) {\n throw new Error(\"--apply is only valid for clients adopt\");\n }\n if (runtime !== \"claude-code\" && options.scope !== undefined) {\n throw new Error(\"--scope is only valid for the claude-code runtime\");\n }\n if (runtime !== \"claude-desktop\" && options[\"config-path\"] !== undefined) {\n throw new Error(\"--config-path is only valid for the claude-desktop runtime\");\n }\n const lifecycleOptions = {\n command: one(options, \"command\"),\n scope: scope as \"local\" | \"user\" | \"project\" | undefined,\n instance: one(options, \"instance\") ?? \"\",\n backendConfigPath: one(options, \"backend-config\") ?? \"\",\n configPath: one(options, \"config-path\"),\n apply: action === \"adopt\" ? boolean(options, \"apply\") : false,\n env: process.env,\n };\n output(action === \"inspect\"\n ? inspectClient(runtime!, one(options, \"identity\") ?? \"\", lifecycleOptions)\n : adoptClient(runtime!, one(options, \"identity\") ?? \"\", lifecycleOptions));\n return;\n }\n rejectOptionsOutside(options, new Set([\n \"identity\", \"command\", \"scope\", \"instance\", \"token\", \"enrollment-file\", \"recover-lock\",\n ]), \"clients install\");\n output(installClient(runtime, one(options, \"identity\") ?? \"\", {\n command: one(options, \"command\"),\n scope: scope as \"local\" | \"user\" | \"project\" | undefined,\n instance: one(options, \"instance\"),\n token: one(options, \"token\"),\n enrollmentFile: one(options, \"enrollment-file\"),\n recoverLock: boolean(options, \"recover-lock\"),\n env: process.env,\n }));\n return;\n }\n if (command === \"demo\") { await localDemo(); return; }\n if (command === \"init\") { await initialize(options); return; }\n if (command === \"migrate\") {\n const databaseUrl = process.env.AGENT_BRIDGE_DATABASE_URL;\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_DATABASE_URL is required\");\n const pool = new pg.Pool({ connectionString: databaseUrl, max: 1 });\n try {\n const applied = await runMigrations(\n pool,\n fileURLToPath(new URL(\"../sql/migrations\", import.meta.url)),\n );\n output({ status: \"ok\", applied });\n } finally { await pool.end(); }\n return;\n }\n if (command === \"reconcile-legacy-projects\") {\n const databaseUrl = process.env.AGENT_BRIDGE_DATABASE_URL;\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_DATABASE_URL is required\");\n const pool = new pg.Pool({ connectionString: databaseUrl, max: 1 });\n try {\n const directory = fileURLToPath(new URL(\"../sql/migrations\", import.meta.url));\n const migration = (await loadMigrationPlan(directory)).find((entry) => entry.version === 8);\n if (!migration || migration.name !== \"message_projects\") {\n throw new Error(\"migration 008_message_projects is missing from the migration plan\");\n }\n output(await reconcileLegacyProjects(pool, {\n apply: boolean(options, \"apply\"),\n migrationChecksum: migration.checksum,\n }));\n }\n finally { await pool.end(); }\n return;\n }\n const config = configFor(options, command);\n validateCanonicalCommandOptions(raw, options, config);\n const assertedUnackedBy = one(options, \"unacked-by\");\n if (assertedUnackedBy !== undefined && assertedUnackedBy !== config.principal.agent) throw new Error(\"--unacked-by must equal the configured principal\");\n if (command === \"capabilities\") {\n validateRequest(\"capabilities\", {});\n cliOutput(\"capabilities\", capabilityDocument({ surface: \"cli\", provider: config.provider }));\n return;\n }\n let runtime: Awaited<ReturnType<typeof createClientRuntime>>;\n try {\n const queueOnly = command === \"send\" && boolean(options, \"queue-only\");\n runtime = await createClientRuntime(config, {\n autoSync: command !== \"doctor\" && command !== \"status\" && !queueOnly,\n initializationMode: command === \"status\" ? \"passive\" : \"active\",\n });\n } catch (error) {\n if (command !== \"doctor\" && command !== \"status\") throw error;\n failedClientStatus(config, error, {\n component: \"local-store\",\n remoteAttempted: false,\n });\n process.exitCode = 1;\n return;\n }\n try {\n if (command === \"doctor\" || command === \"status\") {\n validateRequest(\"client_status\", {});\n const active = command === \"doctor\";\n try {\n const diagnostics = await runtime.store.diagnostics?.(config.principal, { mode: active ? \"probe\" : \"snapshot\" }) ?? { schemaVersion: \"local-v2\" as const, deliverySupported: false, pending: null, claimed: null, retrying: null, dead: null };\n const remoteReachable = \"remoteReachable\" in diagnostics\n ? diagnostics.remoteReachable ?? null\n : null;\n type CheckStatus = \"ok\" | \"unknown\" | \"degraded\" | \"failed\";\n const checks: Array<{ name: string; status: CheckStatus; message: string }> = [{\n name: \"local-store\",\n status: \"ok\",\n message: \"local diagnostics are readable\",\n }];\n if (config.provider !== \"local\") {\n const provider = \"gateway\";\n const remoteError = \"remoteError\" in diagnostics && typeof diagnostics.remoteError === \"string\"\n ? diagnostics.remoteError\n : undefined;\n checks.push({\n name: \"remote\",\n status: remoteReachable === false ? \"degraded\" : remoteError ? \"failed\" : remoteReachable === true ? \"ok\" : \"unknown\",\n message: remoteReachable === false ? `${provider} is unreachable` : remoteError ? `${provider} rejected diagnostics (${remoteError})` : remoteReachable === true ? `${provider} is reachable` : `${provider} reachability has not been checked`,\n });\n }\n const blocked = \"outboxBlocked\" in diagnostics ? Number(diagnostics.outboxBlocked ?? 0) : 0;\n checks.push({ name: \"blocked-outbox\", status: blocked > 0 ? \"degraded\" : \"ok\", message: blocked > 0 ? `${blocked} outbound message(s) require intervention` : \"no blocked outbound messages\" });\n const expired = Number(diagnostics.expiredLeases ?? 0);\n checks.push({ name: \"expired-leases\", status: expired > 0 ? \"degraded\" : \"ok\", message: expired > 0 ? `${expired} delivery lease(s) are expired` : \"no expired delivery leases\" });\n const dead = Number(diagnostics.dead ?? 0);\n checks.push({ name: \"dead-deliveries\", status: dead > 0 ? \"degraded\" : \"ok\", message: dead > 0 ? `${dead} dead delivery/deliveries are visible` : \"no dead deliveries\" });\n const migrationState = \"migrationState\" in diagnostics ? diagnostics.migrationState : undefined;\n if (migrationState === \"draining\" || migrationState === \"retired\") {\n checks.push({\n name: \"migration-gate\",\n status: migrationState === \"retired\" ? \"failed\" : \"degraded\",\n message: migrationState === \"retired\"\n ? \"this edge scope was retired by a client migration\"\n : \"this edge scope is draining for a client migration\",\n });\n }\n const status: CheckStatus = checks.some((check) => check.status === \"failed\")\n ? \"failed\"\n : checks.some((check) => check.status === \"degraded\")\n ? \"degraded\"\n : checks.some((check) => check.status === \"unknown\") ? \"unknown\" : \"ok\";\n const remoteError = \"remoteError\" in diagnostics && typeof diagnostics.remoteError === \"string\";\n const connected = config.provider === \"local\" ? true : remoteReachable === true && !remoteError;\n const queue = { ...diagnostics } as Record<string, unknown>;\n delete queue.syncLoopState;\n delete queue.syncLoopError;\n cliOutput(\"client_status\", { status, localHealthy: true, connected, remoteReachable, provider: config.provider, workspace: config.principal.workspace, agent: config.principal.agent, instance: config.principal.instance ?? null, schemaVersion: diagnostics.schemaVersion, endpoint: config.url ?? null, database: config.provider === \"local\" ? config.databasePath : null, cursorPath: config.cursorPath, lastCursor: cursor(config.cursorPath) ?? null, queue, checks });\n if (active && status !== \"ok\") process.exitCode = status === \"failed\" ? 1 : 2;\n } catch (error) {\n failedClientStatus(config, error, { component: \"local-store\" });\n process.exitCode = 1;\n }\n return;\n }\n if (command === \"pending\") {\n const diagnostics = await runtime.store.diagnostics?.(config.principal, {\n mode: config.provider === \"gateway\" ? \"probe\" : \"snapshot\",\n });\n const page = await runtime.service.history(config.principal, {\n limit: 1,\n project: one(options, \"project\"),\n receiptState: \"unread\",\n });\n const pendingDeliveries = diagnostics?.pending ?? 0;\n const retryingDeliveries = diagnostics?.retrying ?? 0;\n const oldest = diagnostics?.oldestAvailableAt\n ? Date.parse(diagnostics.oldestAvailableAt)\n : Number.POSITIVE_INFINITY;\n const deliveryAvailable = pendingDeliveries > 0 ||\n (retryingDeliveries > 0 && oldest <= Date.now());\n const unread = page.messages.length > 0;\n const available = deliveryAvailable || unread;\n const diagnosticsAuthoritative = !diagnostics || !(\"remoteReachable\" in diagnostics) ||\n diagnostics.remoteReachable === true;\n const pageAuthority = page as typeof page & {\n source?: \"remote\" | \"cache\";\n stale?: boolean;\n acknowledgements?: \"authoritative\" | \"unknown\";\n };\n const historyAuthoritative = pageAuthority.acknowledgements !== \"unknown\" &&\n pageAuthority.source !== \"cache\" && pageAuthority.stale !== true;\n const authoritative = diagnosticsAuthoritative && historyAuthoritative;\n output({\n available,\n unread,\n deliveryAvailable,\n pending: pendingDeliveries,\n retrying: retryingDeliveries,\n authoritative,\n state: available ? \"available\" : authoritative ? \"empty\" : \"unknown\",\n });\n if (!available) process.exitCode = authoritative ? 1 : 2;\n return;\n }\n if (command === \"send\") { const message = draft(options, positionals); validateRequest(\"publish_message\", { ...message, source: one(options, \"source\") }); cliOutput(\"publish_message\", await runtime.service.publish(config.principal, message, { queueOnly: boolean(options, \"queue-only\") })); return; }\n if (command === \"join\") { const input = validateRequest(\"heartbeat\", { leaseMs: integer(options, \"lease-ms\", 60_000), runtimeType: one(options, \"runtime\"), capabilities: list(options, \"capability\") }); cliOutput(\"heartbeat\", await runtime.service.heartbeat(config.principal, input)); return; }\n if (command === \"presence\") { validateRequest(\"presence\", {}); cliOutput(\"presence\", { agents: await runtime.service.presence(config.principal) }); return; }\n if (command === \"sync\") {\n if (!runtime.store.sync) throw new Error(\"sync is available only with the gateway provider\");\n const input = validateRequest(\"sync\", {\n maxPush: integer(options, \"max-push\", integer(options, \"limit\", 100)),\n maxPages: integer(options, \"max-pages\", 20),\n });\n cliOutput(\"sync\", await runtime.store.sync(input));\n return;\n }\n if (command === \"history\" || command === \"inbox\" || command === \"sent\") { const query = validateRequest(\"history\", { cursor: one(options, \"cursor\"), limit: integer(options, \"limit\", 20), types: list(options, \"type\").concat(list(options, \"category\")), source: one(options, \"source\"), project: one(options, \"project\"), since: since(options), mailbox: command === \"inbox\" ? \"inbox\" : command === \"sent\" ? \"sent\" : one(options, \"mailbox\") as any, receiptState: one(options, \"receipt-state\") as any, unacknowledgedBy: assertedUnackedBy, threadId: one(options, \"thread-id\"), latest: raw === \"get\" || boolean(options, \"latest\") }); const page = await runtime.service.history(config.principal, query); if (raw === \"get\") { cliOutput(\"history\", page.messages.map((message) => ({ id: message.id, source: message.source, category: message.type, content: message.content, priority: message.priority, project: message.project ?? null, metadata: legacyContextMetadata(message), created_at: message.createdAt })), { command: raw, optionNames: Object.keys(options) }); } else cliOutput(\"history\", page); return; }\n if (command === \"acknowledge\" || (command === \"ack\" && one(options, \"ids\"))) {\n const rawIds = list(options, \"ids\");\n validateRequest(\"record_receipt\", { messageIds: rawIds });\n const acknowledged = await runtime.service.acknowledge(\n config.principal,\n rawIds.map(legacyNumericMessageId),\n );\n cliOutput(\"record_receipt\", { acknowledged, agent: config.principal.agent }, {\n command: raw,\n optionNames: Object.keys(options),\n });\n return;\n }\n if (command === \"claim\") { const input = validateRequest(\"claim_delivery\", { leaseMs: integer(options, \"lease-ms\", 30_000), messageId: one(options, \"message-id\"), maxAttempts: one(options,\"max-attempts\")===undefined?undefined:integer(options,\"max-attempts\",5) }); cliOutput(\"claim_delivery\", await runtime.service.claim(config.principal, input)); return; }\n if(command===\"deliveries\"||command===\"dead-letters\"){const input=validateRequest(\"list_deliveries\",{cursor:one(options,\"cursor\"),limit:integer(options,\"limit\",50),role:one(options,\"role\") as any,messageId:one(options,\"message-id\"),recipient:one(options,\"recipient\"),states:command===\"dead-letters\"?[\"dead\"]:list(options,\"state\") as any});cliOutput(\"list_deliveries\",await runtime.service.deliveries(config.principal,input));return;}\n if(command===\"delivery-events\"){const input=validateRequest(\"list_delivery_events\",{deliveryId:one(options,\"delivery-id\")??positionals[0],cursor:one(options,\"cursor\"),limit:integer(options,\"limit\",50)});cliOutput(\"list_delivery_events\",await runtime.service.deliveryEvents(config.principal,String(input.deliveryId),input));return;}\n if(command===\"cancel\"){const input=validateRequest(\"cancel_delivery\",{deliveryId:one(options,\"delivery-id\")??positionals[0]});cliOutput(\"cancel_delivery\",await runtime.service.cancel(config.principal,String(input.deliveryId)));return;}\n if(command===\"requeue\"){const input=validateRequest(\"requeue_delivery\",{deliveryId:one(options,\"delivery-id\")??positionals[0]});cliOutput(\"requeue_delivery\",await runtime.service.requeue(config.principal,String(input.deliveryId)));return;}\n const deliveryId = one(options, \"delivery-id\") ?? positionals[0]; const leaseToken = one(options, \"lease-token\") ?? positionals[1];\n if (!deliveryId || !leaseToken) { if ([\"extend\", \"ack\", \"nack\"].includes(command)) throw new Error(\"--delivery-id and --lease-token are required\"); }\n if (command === \"extend\") { const input=validateRequest(\"extend_delivery\",{deliveryId,leaseToken,leaseMs:integer(options,\"lease-ms\",30_000)}); cliOutput(\"extend_delivery\",await runtime.service.extend(config.principal,String(input.deliveryId),String(input.leaseToken),input.leaseMs as number)); return; }\n if (command === \"ack\") { const input=validateRequest(\"acknowledge_delivery\",{deliveryId,leaseToken}); cliOutput(\"acknowledge_delivery\",await runtime.service.ack(config.principal,String(input.deliveryId),String(input.leaseToken))); return; }\n if (command === \"nack\") { const disposition=one(options,\"disposition\")??(boolean(options,\"dead\")?\"dead\":\"retry\"); const input=validateRequest(\"negative_acknowledge_delivery\",{deliveryId,leaseToken,error:one(options,\"error\")??\"negative acknowledgment\",disposition}); cliOutput(\"negative_acknowledge_delivery\",await runtime.service.nack(config.principal,String(input.deliveryId),String(input.leaseToken),String(input.error),input.disposition as \"retry\"|\"dead\")); return; }\n if (command === \"watch\") {\n const polls = one(options, \"polls\") === undefined ? Number.POSITIVE_INFINITY : integer(options, \"polls\", 0);\n const baseInterval = Math.min(integer(options, \"interval-ms\", 1_000), 60_000);\n const maxInterval = Math.max(baseInterval, Math.min(integer(options, \"max-interval-ms\", 30_000), 300_000));\n let interval = baseInterval;\n const project = one(options, \"project\");\n const checkpointPath = watchCursorPath(config.cursorPath, project);\n let current = cursor(checkpointPath);\n let seen = 0;\n for (let i = 0; i < polls; i++) {\n try {\n const page = await runtime.service.history(config.principal, {\n cursor: current,\n limit: integer(options, \"limit\", 50),\n project,\n });\n for (const message of page.messages) output(message);\n seen += page.messages.length;\n current = page.cursor;\n saveCursor(checkpointPath, current);\n interval = page.messages.length ? baseInterval : Math.min(maxInterval, Math.max(baseInterval, interval * 2));\n } catch (error) {\n const status = error instanceof BridgeHttpError\n ? error.status\n : undefined;\n const retryable = status !== undefined &&\n (status === 0 || status === 408 || status === 425 || status === 429 || status >= 500);\n if (!retryable) throw error;\n interval = Math.min(maxInterval, Math.max(baseInterval, interval * 2));\n }\n if (i + 1 < polls) {\n const jittered = Math.round(interval * (0.9 + Math.random() * 0.2));\n await new Promise((resolve) => setTimeout(resolve, jittered));\n }\n }\n if (!seen && boolean(options, \"json\")) output({ status: \"ok\", messages: 0, cursor: current ?? null });\n return;\n }\n throw new Error(`Unknown command: ${raw}`);\n } finally { await runtime.close(); }\n}\n\nexport function formatCliError(error: unknown, argv = process.argv.slice(2)): string {\n const message = error instanceof Error ? error.message : String(error);\n if (argv[0] === \"archive\") {\n return JSON.stringify({\n schemaVersion: 1,\n status: \"error\",\n operation: argv[1] ?? null,\n error: {\n code: error instanceof ArchiveCommandError ? error.code : \"ARCHIVE_COMMAND_ERROR\",\n message: error instanceof ArchiveCommandError ? error.message : \"archive command failed\",\n ...(error instanceof ArchiveCommandError && error.details ? { details: error.details } : {}),\n },\n }) + \"\\n\";\n }\n if (argv[0] === \"dr\") {\n return JSON.stringify({\n schemaVersion: 1,\n status: \"error\",\n operation: argv[1] ?? null,\n error: {\n code: error instanceof NativeDrCommandError ? error.code : \"DR_COMMAND_ERROR\",\n message: error instanceof NativeDrCommandError ? error.message : \"DR command failed\",\n ...(error instanceof NativeDrCommandError && error.details ? { details: error.details } : {}),\n },\n }) + \"\\n\";\n }\n if (argv[0] === \"owner\") {\n return JSON.stringify({\n schemaVersion: 1,\n status: \"error\",\n operation: argv[1] ?? null,\n error: { code: \"OWNER_COMMAND_ERROR\", message },\n }) + \"\\n\";\n }\n return `Error: ${message}\\n`;\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) runCli().catch((error) => {\n process.stderr.write(formatCliError(error));\n process.exitCode = 1;\n});\n","import type { PgQueryable } from \"./postgres-bridge-store.js\";\n\nexport interface LegacyProjectReconciliationReport {\n mode: \"dry-run\" | \"apply\";\n workspace: \"agent-bridge\";\n messages: number;\n receipts: number;\n deliveries: 0;\n changed: number;\n}\n\nexport interface LegacyProjectReconciliationOptions {\n apply?: boolean;\n migrationChecksum: string;\n}\n\ninterface ReconciliationCounts extends Record<string, unknown> {\n messages: number;\n receipts: number;\n changed: number;\n}\n\nconst lock = `LOCK TABLE public.shared_context IN SHARE MODE;\n LOCK TABLE agent_bridge.messages IN ACCESS EXCLUSIVE MODE;\n LOCK TABLE agent_bridge.receipts IN SHARE ROW EXCLUSIVE MODE;\n LOCK TABLE agent_bridge.deliveries IN SHARE MODE`;\n\nfunction preflight(migrationChecksum: string): string {\n return `DO $reconcile$ BEGIN\n IF to_regclass('public.shared_context') IS NULL THEN\n RAISE EXCEPTION 'public.shared_context does not exist';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM agent_bridge.schema_migrations\n WHERE version=8\n AND name='message_projects'\n AND checksum='${migrationChecksum}'\n ) THEN\n RAISE EXCEPTION 'migration 008_message_projects does not match the expected migration plan';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_schema='agent_bridge'\n AND table_name='messages'\n AND column_name='project'\n AND data_type='text'\n ) THEN\n RAISE EXCEPTION 'agent_bridge.messages.project is missing or has the wrong type';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM pg_constraint\n WHERE conrelid='agent_bridge.messages'::regclass\n AND conname='messages_project_label'\n AND contype='c'\n AND convalidated\n ) THEN\n RAISE EXCEPTION 'messages_project_label constraint is missing or invalid';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM pg_index index_state\n JOIN pg_class index_class ON index_class.oid=index_state.indexrelid\n WHERE index_state.indrelid='agent_bridge.messages'::regclass\n AND index_class.relname='messages_project'\n AND index_state.indisvalid\n AND index_state.indisready\n ) THEN\n RAISE EXCEPTION 'messages_project index is missing or invalid';\n END IF;\n IF NOT EXISTS (\n SELECT 1 FROM agent_bridge.workspaces WHERE id='agent-bridge'\n ) THEN\n RAISE EXCEPTION 'canonical workspace agent-bridge must be provisioned before reconciliation';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context\n WHERE project IS NOT NULL\n AND (project<>btrim(project) OR char_length(project) NOT BETWEEN 1 AND 128)\n ) THEN\n RAISE EXCEPTION 'legacy shared_context contains invalid project labels';\n END IF;\n IF EXISTS (\n SELECT agent_bridge.legacy_message_uuid(id, metadata)\n FROM public.shared_context GROUP BY 1 HAVING count(*)>1\n ) THEN\n RAISE EXCEPTION 'legacy shared_context contains duplicate message IDs';\n END IF;\n IF (\n SELECT count(*) FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n ) <> (SELECT count(*) FROM public.shared_context) THEN\n RAISE EXCEPTION 'legacy shared_context and v2 message counts do not match';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n WHERE NOT (\n (message.workspace=coalesce(context.project,'legacy') AND message.project IS NULL)\n OR (message.workspace='agent-bridge' AND message.project IS NOT DISTINCT FROM context.project)\n )\n ) THEN\n RAISE EXCEPTION 'legacy message has a conflicting workspace or project';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n WHERE message.source IS DISTINCT FROM context.source\n OR message.type IS DISTINCT FROM coalesce(\n context.metadata #>> '{message_envelope,kind}', context.category\n )\n OR message.content IS DISTINCT FROM context.content\n OR message.content_type IS DISTINCT FROM coalesce(\n context.metadata #>> '{message_envelope,payload_mime}', 'text/plain'\n )\n OR message.data IS DISTINCT FROM context.metadata #> '{message_envelope,payload}'\n OR message.targets IS DISTINCT FROM CASE\n WHEN jsonb_typeof(context.metadata #> '{message_envelope,target_agents}')='array'\n THEN context.metadata #> '{message_envelope,target_agents}'\n ELSE '[]'::jsonb\n END\n OR message.thread_id IS DISTINCT FROM context.metadata #>> '{message_envelope,thread_id}'\n OR message.reply_to_id IS DISTINCT FROM context.metadata #>> '{message_envelope,reply_to_id}'\n OR message.correlation_id IS DISTINCT FROM context.metadata #>> '{message_envelope,correlation_id}'\n OR message.causation_id IS DISTINCT FROM context.metadata #>> '{message_envelope,causation_id}'\n OR message.priority IS DISTINCT FROM CASE\n WHEN context.priority IN ('info','high','urgent') THEN context.priority ELSE 'info'\n END\n OR message.expires_at IS DISTINCT FROM agent_bridge.safe_timestamptz(\n context.metadata #>> '{message_envelope,expires_at}'\n )\n OR message.idempotency_key IS DISTINCT FROM context.metadata #>> '{message_envelope,idempotency_key}'\n OR message.atrib_receipt_id IS DISTINCT FROM coalesce(\n context.atrib_receipt_id,\n context.metadata #>> '{message_envelope,atrib_receipt_id}'\n )\n OR message.informed_by IS DISTINCT FROM context.metadata #> '{message_envelope,informed_by}'\n OR message.metadata IS DISTINCT FROM context.metadata\n OR message.created_at IS DISTINCT FROM context.created_at\n ) THEN\n RAISE EXCEPTION 'legacy message content differs from migration 006 import';\n END IF;\n IF EXISTS (\n SELECT 1 FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n JOIN agent_bridge.deliveries delivery\n ON delivery.workspace=message.workspace AND delivery.message_id=message.id\n ) THEN\n RAISE EXCEPTION 'legacy messages with deliveries cannot be reconciled';\n END IF;\n IF EXISTS (\n WITH candidates AS (\n SELECT message.id, message.source, message.idempotency_key\n FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)\n WHERE message.idempotency_key IS NOT NULL\n ), canonical AS (\n SELECT candidate.id, candidate.source, candidate.idempotency_key FROM candidates candidate\n UNION ALL\n SELECT existing.id, existing.source, existing.idempotency_key\n FROM agent_bridge.messages existing\n WHERE existing.workspace='agent-bridge'\n AND existing.idempotency_key IS NOT NULL\n AND NOT EXISTS (SELECT 1 FROM candidates candidate WHERE candidate.id=existing.id)\n )\n SELECT source, idempotency_key FROM canonical\n GROUP BY source, idempotency_key HAVING count(*)>1\n ) THEN\n RAISE EXCEPTION 'legacy idempotency key collides in canonical workspace';\n END IF;\nEND $reconcile$`;\n}\n\nconst counts = `SELECT\n count(*)::int AS messages,\n count(*) FILTER (\n WHERE message.workspace<>'agent-bridge'\n OR message.project IS DISTINCT FROM context.project\n )::int AS changed,\n coalesce(sum((\n SELECT count(*) FROM agent_bridge.receipts receipt\n WHERE receipt.workspace=message.workspace AND receipt.message_id=message.id\n )),0)::int AS receipts\nFROM public.shared_context context\nJOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id, context.metadata)`;\n\nfunction report(\n mode: \"dry-run\" | \"apply\",\n row: ReconciliationCounts | undefined,\n): LegacyProjectReconciliationReport {\n return {\n mode,\n workspace: \"agent-bridge\",\n messages: Number(row?.messages ?? 0),\n receipts: Number(row?.receipts ?? 0),\n deliveries: 0,\n changed: Number(row?.changed ?? 0),\n };\n}\n\nexport async function reconcileLegacyProjects(\n db: PgQueryable,\n options: LegacyProjectReconciliationOptions,\n): Promise<LegacyProjectReconciliationReport> {\n if (!/^[0-9a-f]{64}$/.test(options.migrationChecksum)) {\n throw new Error(\"migrationChecksum must be 64 lowercase hexadecimal characters\");\n }\n const apply = options.apply === true;\n const verify = preflight(options.migrationChecksum);\n await db.query(\"BEGIN\");\n try {\n await db.query(\"SELECT pg_advisory_xact_lock(1646705660)\");\n await db.query(verify);\n if (apply) {\n await db.query(lock);\n await db.query(verify);\n }\n const before = await db.query<ReconciliationCounts>(counts);\n const summary = report(apply ? \"apply\" : \"dry-run\", before.rows[0]);\n if (!apply) {\n await db.query(\"ROLLBACK\");\n return summary;\n }\n\n const totals = await db.query<{ messages: number; receipts: number }>(\n `SELECT\n (SELECT count(*)::int FROM agent_bridge.messages) AS messages,\n (SELECT count(*)::int FROM agent_bridge.receipts) AS receipts`,\n );\n await db.query(`CREATE TEMP TABLE reconcile_receipts ON COMMIT DROP AS\n SELECT receipt.* FROM agent_bridge.receipts receipt\n JOIN public.shared_context context\n ON receipt.message_id=agent_bridge.legacy_message_uuid(context.id,context.metadata)\n AND receipt.workspace=coalesce(context.project,'legacy')`);\n await db.query(`DELETE FROM agent_bridge.receipts receipt\n USING reconcile_receipts saved\n WHERE receipt.workspace=saved.workspace\n AND receipt.message_id=saved.message_id\n AND receipt.principal=saved.principal`);\n await db.query(\"ALTER TABLE agent_bridge.messages DISABLE TRIGGER messages_immutable\");\n await db.query(`UPDATE agent_bridge.messages message\n SET workspace='agent-bridge', project=context.project\n FROM public.shared_context context\n WHERE message.id=agent_bridge.legacy_message_uuid(context.id,context.metadata)\n AND (message.workspace<>'agent-bridge' OR message.project IS DISTINCT FROM context.project)`);\n await db.query(\"ALTER TABLE agent_bridge.messages ENABLE TRIGGER messages_immutable\");\n await db.query(`INSERT INTO agent_bridge.receipts (workspace,message_id,principal,read_at)\n SELECT 'agent-bridge',message_id,principal,read_at FROM reconcile_receipts`);\n\n const verified = await db.query<{\n messages: number;\n receipts: number;\n mismatches: number;\n deliveries: number;\n }>(`SELECT\n (SELECT count(*)::int FROM agent_bridge.messages) AS messages,\n (SELECT count(*)::int FROM agent_bridge.receipts) AS receipts,\n (SELECT count(*)::int FROM public.shared_context context\n JOIN agent_bridge.messages message\n ON message.id=agent_bridge.legacy_message_uuid(context.id,context.metadata)\n WHERE message.workspace<>'agent-bridge'\n OR message.project IS DISTINCT FROM context.project) AS mismatches,\n (SELECT count(*)::int FROM public.shared_context context\n JOIN agent_bridge.deliveries delivery\n ON delivery.message_id=agent_bridge.legacy_message_uuid(context.id,context.metadata)) AS deliveries`);\n const expected = totals.rows[0];\n const actual = verified.rows[0];\n if (\n !expected || !actual ||\n Number(actual.messages) !== Number(expected.messages) ||\n Number(actual.receipts) !== Number(expected.receipts) ||\n Number(actual.mismatches) !== 0 ||\n Number(actual.deliveries) !== 0\n ) {\n throw new Error(\"legacy project reconciliation verification failed\");\n }\n await db.query(\"COMMIT\");\n return summary;\n } catch (error) {\n await db.query(\"ROLLBACK\").catch(() => undefined);\n throw error;\n }\n}\n","import {\n accessSync, closeSync, constants, existsSync, fsyncSync, mkdirSync, openSync, readFileSync,\n renameSync, rmSync, statSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { delimiter, dirname, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\nimport { readClientConfigFile, resolveClientConfig } from \"./client-config.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\nimport {\n acquireEnrollmentLock,\n deleteEnrollmentFile,\n readEnrollment,\n recoverEnrollmentLock,\n releaseEnrollmentLock,\n transitionEnrollment,\n type EnrollmentLock,\n type EnrollmentFile,\n} from \"./enrollment-file.js\";\n\nexport type InstallableRuntime = \"codex\" | \"claude-code\" | \"claude-desktop\";\n\nexport interface ClientInstallResult {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n method: \"native-cli\" | \"json-config\";\n configPath?: string;\n backendConfigPath: string;\n restartRequired: boolean;\n installed?: true;\n enrollmentDeleted?: boolean;\n enrollmentFile?: string;\n enrollmentStatus?: \"consumed\" | \"consumed-file-retained\" | \"consumed-file-missing\"\n | \"consumed-deletion-durability-unknown\";\n lockReleaseStatus?: \"released\" | \"retained\" | \"durability-unknown\";\n}\n\ntype Executor = (\n command: string,\n args: string[],\n) => SpawnSyncReturns<string>;\n\nexport interface ClientBackendBinding {\n credentialId: string;\n principal: string;\n instance: string;\n}\n\nexport interface DesktopLaunchContract {\n command: string;\n args: string[];\n}\n\nfunction assertExecutable(path: string): string {\n if (!existsSync(path)) {\n throw new Error(`Claude Desktop MCP executable does not exist: ${path}`);\n }\n if (!statSync(path).isFile()) {\n throw new Error(`Claude Desktop MCP executable is not a file: ${path}`);\n }\n try {\n accessSync(path, process.platform === \"win32\" ? constants.F_OK : constants.X_OK);\n } catch {\n throw new Error(`Claude Desktop MCP executable is not executable: ${path}`);\n }\n return path;\n}\n\nfunction resolveExecutable(command: string, env: NodeJS.ProcessEnv): string {\n if (isAbsolute(command) || command.includes(\"/\") || command.includes(\"\\\\\")) {\n return assertExecutable(resolve(command));\n }\n const searchPath = env.PATH ?? process.env.PATH ?? \"\";\n const extensions = process.platform === \"win32\" && !extname(command)\n ? (env.PATHEXT ?? process.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\")\n .split(\";\")\n .filter(Boolean)\n : [\"\"];\n for (const directory of searchPath.split(delimiter).filter(Boolean)) {\n for (const extension of extensions) {\n const candidate = join(directory, command + extension);\n if (!existsSync(candidate)) continue;\n return assertExecutable(resolve(candidate));\n }\n }\n throw new Error(`Claude Desktop MCP executable was not found on PATH: ${command}`);\n}\n\nfunction defaultServerEntry(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(moduleDirectory, \"index.js\"),\n join(moduleDirectory, \"..\", \"dist\", \"index.js\"),\n ];\n const entry = candidates.find((candidate) => existsSync(candidate) && statSync(candidate).isFile());\n if (!entry) {\n throw new Error(`Claude Desktop MCP server entry does not exist: ${candidates[0]}`);\n }\n return resolve(entry);\n}\n\nexport function resolveDesktopLaunchContract(\n requestedCommand: string | undefined,\n env: NodeJS.ProcessEnv,\n): DesktopLaunchContract {\n const command = requestedCommand?.trim();\n if (command) return { command: resolveExecutable(command, env), args: [] };\n return {\n command: assertExecutable(resolve(process.execPath)),\n args: [defaultServerEntry()],\n };\n}\n\nfunction desktopConfigPath(env: NodeJS.ProcessEnv): string {\n if (process.platform === \"win32\") {\n const appData = env.APPDATA;\n if (!appData) throw new Error(\"APPDATA is required for Claude Desktop installation\");\n return join(appData, \"Claude\", \"claude_desktop_config.json\");\n }\n const home = env.HOME ?? homedir();\n return process.platform === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")\n : join(home, \".config\", \"Claude\", \"claude_desktop_config.json\");\n}\n\nfunction safeComponent(value: string): string {\n const readable = value.replace(/[^A-Za-z0-9._-]+/g, \"_\").slice(0, 48) || \"client\";\n const suffix = createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n return `${readable}-${suffix}`;\n}\n\nfunction clientBackendConfigPath(\n runtime: InstallableRuntime,\n instance: string,\n env: NodeJS.ProcessEnv,\n): string {\n const home = env.HOME ?? homedir();\n return join(\n home,\n \".agent-bridge\",\n \"clients\",\n `${runtime}-${safeComponent(instance)}.config`,\n );\n}\n\nfunction replacePrivateFile(path: string, content: string | Buffer): void {\n const directory = dirname(path);\n const privateRoot = dirname(directory);\n mkdirSync(privateRoot, { recursive: true, mode: 0o700 });\n securePrivatePath(privateRoot, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n if (existsSync(path)) verifyPrivatePathAccess(path, \"file\");\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, content);\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n securePrivatePath(temporary, \"file\");\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const descriptor = openSync(directory, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n }\n}\n\nfunction writeClientBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: {\n token?: string;\n env: NodeJS.ProcessEnv;\n binding?: ClientBackendBinding;\n destinationPath?: string;\n gatewayUrl?: string;\n workspace?: string;\n edgeDatabasePath?: string;\n },\n): string {\n const env = options.env;\n const home = env.HOME ?? homedir();\n const sharedPath = env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\");\n const shared = readClientConfigFile(sharedPath);\n const stagedGateway = options.gatewayUrl !== undefined || options.workspace !== undefined\n || options.edgeDatabasePath !== undefined;\n if (stagedGateway && (!options.gatewayUrl || !options.workspace || !options.edgeDatabasePath)) {\n throw new Error(\"staged gateway backend requires URL, workspace, and edge database path\");\n }\n const configuredProvider = stagedGateway\n ? \"gateway\"\n : env.AGENT_BRIDGE_PROVIDER?.trim() || shared.AGENT_BRIDGE_PROVIDER?.trim();\n const inferredGateway = !configuredProvider && Boolean(\n env.AGENT_BRIDGE_TOKEN?.trim() || shared.AGENT_BRIDGE_TOKEN?.trim(),\n );\n const provider = configuredProvider ?? (inferredGateway ? \"gateway\" : undefined);\n const clientToken = options.token?.trim() || env.AGENT_BRIDGE_CLIENT_TOKEN?.trim();\n if (provider === \"gateway\" && !clientToken) {\n throw new Error(\n \"gateway client installation requires --token or AGENT_BRIDGE_CLIENT_TOKEN\",\n );\n }\n const resolved = resolveClientConfig(stagedGateway\n ? {\n ...env,\n AGENT_BRIDGE_CONFIG: undefined,\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_URL: options.gatewayUrl,\n AGENT_BRIDGE_WORKSPACE: options.workspace,\n AGENT_BRIDGE_EDGE_DB: options.edgeDatabasePath,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_TOKEN: clientToken,\n }\n : {\n ...env,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_TOKEN: clientToken ?? env.AGENT_BRIDGE_TOKEN,\n }, identity);\n const values: Record<string, string | undefined> = {\n AGENT_BRIDGE_PROVIDER: resolved.provider,\n AGENT_BRIDGE_WORKSPACE: resolved.principal.workspace,\n AGENT_BRIDGE_URL: resolved.url,\n AGENT_BRIDGE_TOKEN: resolved.provider === \"gateway\" ? resolved.credential : undefined,\n AGENT_BRIDGE_DB: resolved.provider === \"local\" ? resolved.databasePath : undefined,\n AGENT_BRIDGE_EDGE_DB: resolved.provider === \"gateway\" ? resolved.edgeDatabasePath : undefined,\n AGENT_BRIDGE_CREDENTIAL_ID: options.binding?.credentialId,\n AGENT_BRIDGE_PRINCIPAL: options.binding?.principal,\n AGENT_BRIDGE_CLIENT_INSTANCE: options.binding?.instance,\n };\n for (const value of Object.values(values)) {\n if (value?.includes(\"\\n\") || value?.includes(\"\\r\")) {\n throw new Error(\"client backend config values cannot contain newlines\");\n }\n }\n const path = options.destinationPath ?? clientBackendConfigPath(runtime, instance, env);\n replacePrivateFile(\n path,\n `${Object.entries(values)\n .filter((entry): entry is [string, string] => Boolean(entry[1]))\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")}\\n`,\n );\n return path;\n}\n\nexport interface StagedGatewayBackendPaths {\n directory: string;\n backendConfigPath: string;\n edgeDatabasePath: string;\n}\n\nfunction migrationOperationId(value: string): string {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n throw new Error(\"client migration operation ID is invalid\");\n }\n return value.toLowerCase();\n}\n\nexport function stagedGatewayBackendPaths(\n operationId: string,\n env: NodeJS.ProcessEnv = process.env,\n): StagedGatewayBackendPaths {\n const home = env.HOME ?? homedir();\n const directory = join(home, \".agent-bridge\", \"client-migrations\", migrationOperationId(operationId));\n return {\n directory,\n backendConfigPath: join(directory, \"target.config\"),\n edgeDatabasePath: join(directory, \"target.edge.sqlite3\"),\n };\n}\n\n/** Write only the fixed private target backend for a persisted migration operation. */\nexport function writeStagedGatewayBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n operationId: string,\n options: {\n token: string;\n gatewayUrl: string;\n workspace: string;\n credentialId: string;\n principal: string;\n env?: NodeJS.ProcessEnv;\n },\n): StagedGatewayBackendPaths {\n const env = options.env ?? process.env;\n const paths = stagedGatewayBackendPaths(operationId, env);\n writeClientBackendConfig(runtime, identity, instance, {\n token: options.token,\n env,\n binding: {\n credentialId: options.credentialId,\n principal: options.principal,\n instance,\n },\n destinationPath: paths.backendConfigPath,\n gatewayUrl: options.gatewayUrl,\n workspace: options.workspace,\n edgeDatabasePath: paths.edgeDatabasePath,\n });\n return paths;\n}\n\nfunction writeBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: { token?: string; env: NodeJS.ProcessEnv; binding?: ClientBackendBinding },\n): string {\n return writeClientBackendConfig(runtime, identity, instance, options);\n}\n\nfunction writeJsonConfig(\n path: string,\n identity: string,\n instance: string,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n): void {\n let config: Record<string, unknown> = {};\n if (existsSync(path)) {\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\"));\n if (!parsed || Array.isArray(parsed) || typeof parsed !== \"object\") throw new Error();\n config = parsed;\n } catch {\n throw new Error(`Claude Desktop config is not valid JSON: ${path}`);\n }\n }\n const currentServers = config.mcpServers;\n const mcpServers = currentServers && !Array.isArray(currentServers) && typeof currentServers === \"object\"\n ? currentServers as Record<string, unknown>\n : {};\n const next = {\n ...config,\n mcpServers: {\n ...mcpServers,\n \"agent-bridge\": {\n command: launch.command,\n args: launch.args,\n env: {\n AGENT_BRIDGE_AGENT: identity,\n AGENT_BRIDGE_INSTANCE: instance,\n AGENT_BRIDGE_CONFIG: backendConfigPath,\n },\n },\n },\n };\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n const temporary = `${path}.${process.pid}.tmp`;\n writeFileSync(temporary, `${JSON.stringify(next, null, 2)}\\n`, { mode: 0o600 });\n renameSync(temporary, path);\n}\n\nfunction assertEnrollmentConfiguration(\n enrollment: EnrollmentFile,\n assertions: {\n runtime?: InstallableRuntime;\n identity?: string;\n instance?: string;\n token?: string;\n env: NodeJS.ProcessEnv;\n },\n): void {\n const input = enrollment.input;\n const env = assertions.env;\n const home = env.HOME ?? homedir();\n const shared = readClientConfigFile(\n env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\"),\n );\n const conflicts: Array<[string, string | undefined, string]> = [\n [\"runtime\", assertions.runtime, input.runtime],\n [\"identity\", assertions.identity?.trim() || undefined, input.principal],\n [\"instance\", assertions.instance?.trim() || undefined, input.instance],\n [\"AGENT_BRIDGE_AGENT\", env.AGENT_BRIDGE_AGENT?.trim(), input.principal],\n [\"AGENT_BRIDGE_INSTANCE\", env.AGENT_BRIDGE_INSTANCE?.trim(), input.instance],\n [\"AGENT_BRIDGE_URL\", env.AGENT_BRIDGE_URL?.trim(), input.gatewayUrl],\n [\"AGENT_BRIDGE_WORKSPACE\", env.AGENT_BRIDGE_WORKSPACE?.trim(), input.workspaceId],\n [\"shared AGENT_BRIDGE_URL\", shared.AGENT_BRIDGE_URL?.trim(), input.gatewayUrl],\n [\"shared AGENT_BRIDGE_WORKSPACE\", shared.AGENT_BRIDGE_WORKSPACE?.trim(), input.workspaceId],\n ];\n for (const [name, actual, expected] of conflicts) {\n if (actual && actual !== expected) throw new Error(name + \" conflicts with the enrollment file\");\n }\n for (const [name, provider] of [\n [\"AGENT_BRIDGE_PROVIDER\", env.AGENT_BRIDGE_PROVIDER?.trim()],\n [\"shared AGENT_BRIDGE_PROVIDER\", shared.AGENT_BRIDGE_PROVIDER?.trim()],\n ] as const) {\n if (provider && provider !== \"gateway\") throw new Error(name + \" conflicts with the enrollment file\");\n }\n if (assertions.token) throw new Error(\"--token cannot be used with --enrollment-file\");\n if (env.AGENT_BRIDGE_CLIENT_TOKEN || env.AGENT_BRIDGE_TOKEN) {\n throw new Error(\"token environment variables cannot be used with --enrollment-file\");\n }\n}\n\nfunction removeConsumedEnrollment(\n path: string,\n result: ClientInstallResult,\n lock: EnrollmentLock,\n env: NodeJS.ProcessEnv,\n): ClientInstallResult {\n try {\n const deletion = deleteEnrollmentFile(path, lock, env);\n if (deletion === \"missing\") {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: false,\n enrollmentFile: path,\n enrollmentStatus: \"consumed-file-missing\",\n };\n }\n if (deletion === \"deleted-durability-unknown\") {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: true,\n enrollmentStatus: \"consumed-deletion-durability-unknown\",\n };\n }\n return {\n ...result,\n installed: true,\n enrollmentDeleted: true,\n enrollmentStatus: \"consumed\",\n };\n } catch {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: false,\n enrollmentFile: path,\n enrollmentStatus: \"consumed-file-retained\",\n };\n }\n}\n\nfunction backendMatches(\n path: string,\n enrollment: EnrollmentFile,\n credentialId: string,\n requireToken: boolean,\n): boolean {\n if (!existsSync(path)) return false;\n const config = readClientConfigFile(path);\n return config.AGENT_BRIDGE_PROVIDER === \"gateway\"\n && config.AGENT_BRIDGE_URL === enrollment.input.gatewayUrl\n && config.AGENT_BRIDGE_WORKSPACE === enrollment.input.workspaceId\n && config.AGENT_BRIDGE_CREDENTIAL_ID === credentialId\n && config.AGENT_BRIDGE_PRINCIPAL === enrollment.input.principal\n && config.AGENT_BRIDGE_CLIENT_INSTANCE === enrollment.input.instance\n && (!requireToken || config.AGENT_BRIDGE_TOKEN === enrollment.token);\n}\n\nfunction desktopRegistrationState(\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n env: NodeJS.ProcessEnv,\n): \"absent\" | \"matching\" | \"legacy\" | \"conflict\" {\n const path = desktopConfigPath(env);\n if (!existsSync(path)) return \"absent\";\n try {\n const config = JSON.parse(readFileSync(path, \"utf8\"));\n const server = config?.mcpServers?.[\"agent-bridge\"];\n if (!server) return \"absent\";\n const environment = server?.env;\n const exactEnvironment = environment && typeof environment === \"object\"\n && !Array.isArray(environment)\n && Object.keys(environment).sort().join(\",\")\n === \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\"\n && environment.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && environment.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && environment.AGENT_BRIDGE_CONFIG === backendConfigPath;\n if (server?.command === \"agent-bridge-mcp\"\n && (server?.args === undefined || (Array.isArray(server.args) && server.args.length === 0))\n && exactEnvironment) return \"legacy\";\n return server?.command === launch.command\n && Array.isArray(server?.args)\n && server.args.length === launch.args.length\n && server.args.every((arg: unknown, index: number) => arg === launch.args[index])\n && exactEnvironment\n ? \"matching\"\n : \"conflict\";\n } catch {\n return \"conflict\";\n }\n}\n\nfunction repairLegacyDesktopRegistration(\n state: \"absent\" | \"matching\" | \"legacy\" | \"conflict\",\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n env: NodeJS.ProcessEnv,\n): \"absent\" | \"matching\" | \"conflict\" {\n if (state !== \"legacy\") return state;\n writeJsonConfig(\n desktopConfigPath(env),\n enrollment.input.principal,\n enrollment.input.instance,\n backendConfigPath,\n launch,\n );\n const repaired = desktopRegistrationState(enrollment, backendConfigPath, launch, env);\n return repaired === \"legacy\" ? \"conflict\" : repaired;\n}\n\nfunction nativeRegistrationState(\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n command: string,\n scope: \"local\" | \"user\" | \"project\",\n execute: Executor,\n): \"absent\" | \"matching\" | \"conflict\" {\n const executable = enrollment.input.runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = enrollment.input.runtime === \"codex\"\n ? [\"mcp\", \"get\", \"agent-bridge\", \"--json\"]\n : [\"mcp\", \"get\", \"agent-bridge\"];\n const result = execute(executable, args);\n if (result.error) throw new Error(enrollment.input.runtime + \" MCP inspection failed\");\n if (result.status !== 0) {\n const output = (result.stdout + \"\\n\" + result.stderr).trim();\n const notFound = enrollment.input.runtime === \"codex\"\n ? output === \"Error: No MCP server named 'agent-bridge' found.\"\n : output === 'No MCP server named \"agent-bridge\".'\n || /^No MCP server named \"agent-bridge\"\\. Configured servers: [^\\r\\n]+$/.test(output);\n if (notFound) return \"absent\";\n throw new Error(enrollment.input.runtime + \" MCP inspection failed\");\n }\n if (enrollment.input.runtime === \"codex\") {\n try {\n const server = JSON.parse(result.stdout);\n const transport = server?.transport;\n const environment = transport?.env;\n const exactEnvironment = environment && typeof environment === \"object\"\n && !Array.isArray(environment)\n && Object.keys(environment).sort().join(\",\")\n === \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\";\n return server?.name === \"agent-bridge\" && server?.enabled === true\n && transport?.type === \"stdio\" && transport?.command === command\n && Array.isArray(transport?.args) && transport.args.length === 0\n && exactEnvironment\n && transport?.env?.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && transport?.env?.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && transport?.env?.AGENT_BRIDGE_CONFIG === backendConfigPath\n ? \"matching\"\n : \"conflict\";\n } catch {\n return \"conflict\";\n }\n }\n const lines = result.stdout.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const scopeLine = {\n local: \" Scope: Local config (private to you in this project)\",\n user: \" Scope: User config (available in all your projects)\",\n project: \" Scope: Project config (shared via .mcp.json)\",\n }[scope];\n const expectedPrefix = [\n \"agent-bridge:\",\n scopeLine,\n ];\n if (lines[0] !== expectedPrefix[0] || lines[1] !== expectedPrefix[1]\n || lines[3] !== \" Type: stdio\" || lines[4] !== \" Command: \" + command\n || lines[5] !== \" Args:\" || lines[6] !== \" Environment:\") return \"conflict\";\n const environmentLines: string[] = [];\n let index = 7;\n while (index < lines.length && lines[index]?.startsWith(\" \")) {\n environmentLines.push(lines[index]!);\n index += 1;\n }\n const expectedEnvironment = [\n \" AGENT_BRIDGE_AGENT=\" + enrollment.input.principal,\n \" AGENT_BRIDGE_INSTANCE=\" + enrollment.input.instance,\n \" AGENT_BRIDGE_CONFIG=\" + backendConfigPath,\n ].sort();\n if (environmentLines.sort().join(\"\\n\") !== expectedEnvironment.join(\"\\n\")) return \"conflict\";\n while (lines[index] === \"\") index += 1;\n if (lines[index] !== \"To remove this server, run: claude mcp remove agent-bridge -s \" + scope) {\n return \"conflict\";\n }\n if (lines.slice(index + 1).some((line) => line !== \"\")) return \"conflict\";\n return \"matching\";\n}\n\nfunction enrolledInstallLocked(\n runtimeAssertion: InstallableRuntime | undefined,\n identityAssertion: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile: string;\n env?: NodeJS.ProcessEnv;\n },\n execute: Executor,\n lock: EnrollmentLock,\n): ClientInstallResult {\n const env = options.env ?? process.env;\n let enrollment = readEnrollment(options.enrollmentFile, env);\n assertEnrollmentConfiguration(enrollment, {\n runtime: runtimeAssertion,\n identity: identityAssertion,\n instance: options.instance,\n token: options.token,\n env,\n });\n const runtime = enrollment.input.runtime;\n const identity = enrollment.input.principal;\n const expectedPath = clientBackendConfigPath(runtime, enrollment.input.instance, env);\n const command = options.command?.trim() || \"agent-bridge-mcp\";\n const desktopLaunch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : undefined;\n const scope = options.scope ?? \"user\";\n const baseResult: ClientInstallResult = {\n runtime,\n identity,\n instance: enrollment.input.instance,\n method: runtime === \"claude-desktop\" ? \"json-config\" : \"native-cli\",\n configPath: runtime === \"claude-desktop\" ? desktopConfigPath(env) : undefined,\n backendConfigPath: expectedPath,\n restartRequired: true,\n };\n if (enrollment.state === \"consumed\") {\n if (!enrollment.result\n || !backendMatches(expectedPath, enrollment, enrollment.result.credentialId, false)) {\n throw new Error(\"consumed enrollment no longer matches its client backend\");\n }\n const inspected = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n const registration = runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (registration !== \"matching\") {\n throw new Error(\"consumed enrollment no longer matches its MCP registration\");\n }\n return removeConsumedEnrollment(options.enrollmentFile, baseResult, lock, env);\n }\n if (enrollment.state === \"pending\") {\n throw new Error(\"enrollment is pending; resume the owner command first\");\n }\n const recovering = enrollment.state === \"consuming\";\n if (!recovering && enrollment.operation === \"provision\" && existsSync(expectedPath)) {\n throw new Error(\"provision enrollment would replace an existing client backend file\");\n }\n if (!recovering && enrollment.operation === \"provision\") {\n const registration = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n if (registration !== \"absent\") {\n throw new Error(\"provision enrollment would replace an existing MCP registration\");\n }\n }\n if (enrollment.state === \"ready\") {\n enrollment = transitionEnrollment(options.enrollmentFile, enrollment, \"consuming\", {}, env, lock);\n }\n if (enrollment.state !== \"consuming\" || !enrollment.token) {\n throw new Error(\"enrollment is not ready for installation\");\n }\n const derivedEnv: NodeJS.ProcessEnv = {\n ...env,\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_URL: enrollment.input.gatewayUrl,\n AGENT_BRIDGE_WORKSPACE: enrollment.input.workspaceId,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_CLIENT_TOKEN: undefined,\n };\n let result: ClientInstallResult;\n let sideEffectsCompleted = false;\n try {\n if (enrollment.operation === \"rotate\") {\n if (!enrollment.input.credentialId || !enrollment.result) {\n throw new Error(\"rotation enrollment lacks credential lineage\");\n }\n const predecessorMatches = backendMatches(\n expectedPath, enrollment, enrollment.input.credentialId, false,\n );\n const successorMatches = recovering && backendMatches(\n expectedPath, enrollment, enrollment.result.credentialId, true,\n );\n if (!predecessorMatches && !successorMatches) {\n throw new Error(\"rotation requires an exactly bound predecessor or successor backend\");\n }\n const inspected = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n const registration = runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (registration !== \"matching\") {\n throw new Error(\"rotation requires the exact existing MCP registration\");\n }\n if (predecessorMatches) {\n const previous = readFileSync(expectedPath);\n try {\n writeBackendConfig(runtime, identity, enrollment.input.instance, {\n token: enrollment.token,\n env: derivedEnv,\n binding: {\n credentialId: enrollment.result.credentialId,\n principal: identity,\n instance: enrollment.input.instance,\n },\n });\n } catch (error) {\n replacePrivateFile(expectedPath, previous);\n throw error;\n }\n }\n result = baseResult;\n sideEffectsCompleted = true;\n } else {\n if (recovering && existsSync(expectedPath) && !backendMatches(\n expectedPath, enrollment, enrollment.result!.credentialId, true,\n )) {\n throw new Error(\"consuming enrollment conflicts with its client backend file\");\n }\n const inspected = recovering\n ? runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute)\n : \"absent\";\n const registration = recovering && runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (recovering && registration === \"conflict\") {\n throw new Error(\"consuming enrollment conflicts with the registered MCP server\");\n }\n if (recovering && backendMatches(\n expectedPath, enrollment, enrollment.result!.credentialId, true,\n ) && registration === \"matching\") {\n result = baseResult;\n } else {\n result = installClient(runtime, identity, {\n command: runtime === \"claude-desktop\" ? options.command : command,\n scope: options.scope,\n instance: enrollment.input.instance,\n token: enrollment.token,\n backendBinding: {\n credentialId: enrollment.result!.credentialId,\n principal: identity,\n instance: enrollment.input.instance,\n },\n env: derivedEnv,\n }, execute);\n sideEffectsCompleted = true;\n const verified = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n if (verified !== \"matching\") throw new Error(\"MCP registration verification failed\");\n }\n }\n } catch (error) {\n if (!recovering && !sideEffectsCompleted) {\n transitionEnrollment(options.enrollmentFile, enrollment, \"ready\", {}, env, lock);\n }\n throw error;\n }\n enrollment = transitionEnrollment(\n options.enrollmentFile,\n enrollment,\n \"consumed\",\n { token: null },\n env,\n lock,\n );\n return removeConsumedEnrollment(options.enrollmentFile, result, lock, env);\n}\n\nfunction enrolledInstall(\n runtime: InstallableRuntime | undefined,\n identity: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n },\n execute: Executor,\n): ClientInstallResult {\n const env = options.env ?? process.env;\n if (options.recoverLock) recoverEnrollmentLock(options.enrollmentFile, env);\n const lock = acquireEnrollmentLock(options.enrollmentFile, env);\n let result: ClientInstallResult;\n try {\n result = enrolledInstallLocked(runtime, identity, options, execute, lock);\n } catch (error) {\n if (!lock.released) {\n try { releaseEnrollmentLock(lock); } catch {}\n }\n throw error;\n }\n let lockReleaseStatus: NonNullable<ClientInstallResult[\"lockReleaseStatus\"]>;\n try {\n const release = releaseEnrollmentLock(lock);\n lockReleaseStatus = release === \"released\" ? \"released\" : \"durability-unknown\";\n } catch {\n lockReleaseStatus = existsSync(lock.lockPath) ? \"retained\" : \"durability-unknown\";\n }\n return { ...result, lockReleaseStatus };\n}\n\nexport function installClient(\n runtime: InstallableRuntime | undefined,\n identity: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile?: string;\n recoverLock?: boolean;\n backendBinding?: ClientBackendBinding;\n env?: NodeJS.ProcessEnv;\n } = {},\n execute: Executor = (command, args) => spawnSync(command, args, { encoding: \"utf8\" }),\n): ClientInstallResult {\n if (options.enrollmentFile) {\n return enrolledInstall(runtime, identity, {\n ...options,\n enrollmentFile: options.enrollmentFile,\n }, execute);\n }\n if (!runtime) throw new Error(\"install runtime is required\");\n const normalizedIdentity = identity.trim();\n if (!normalizedIdentity || normalizedIdentity.length > 128) throw new Error(\"--identity is required\");\n const instance = options.instance?.trim() || `${runtime}-${randomUUID()}`;\n if (instance.length > 128) throw new Error(\"--instance exceeds 128 characters\");\n if (options.scope && ![\"local\", \"user\", \"project\"].includes(options.scope)) {\n throw new Error(\"scope must be local, user, or project\");\n }\n const command = options.command?.trim() || \"agent-bridge-mcp\";\n const env = options.env ?? process.env;\n const desktopLaunch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : undefined;\n const expectedPath = clientBackendConfigPath(runtime, instance, env);\n const previous = existsSync(expectedPath) ? readFileSync(expectedPath) : undefined;\n try {\n const backendConfigPath = writeBackendConfig(runtime, normalizedIdentity, instance, {\n token: options.token,\n env,\n binding: options.backendBinding,\n });\n if (runtime === \"claude-desktop\") {\n const path = desktopConfigPath(env);\n writeJsonConfig(path, normalizedIdentity, instance, backendConfigPath, desktopLaunch!);\n return { runtime, identity: normalizedIdentity, instance, method: \"json-config\", configPath: path, backendConfigPath, restartRequired: true };\n }\n const executable = runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = runtime === \"codex\"\n ? [\n \"mcp\", \"add\", \"agent-bridge\",\n \"--env\", `AGENT_BRIDGE_AGENT=${normalizedIdentity}`,\n \"--env\", `AGENT_BRIDGE_INSTANCE=${instance}`,\n \"--env\", `AGENT_BRIDGE_CONFIG=${backendConfigPath}`,\n \"--\", command,\n ]\n : [\n \"mcp\", \"add\", \"--scope\", options.scope ?? \"user\", \"agent-bridge\",\n \"-e\", `AGENT_BRIDGE_AGENT=${normalizedIdentity}`,\n \"-e\", `AGENT_BRIDGE_INSTANCE=${instance}`,\n \"-e\", `AGENT_BRIDGE_CONFIG=${backendConfigPath}`,\n \"--\", command,\n ];\n const result = execute(executable, args);\n if (result.error || result.status !== 0) {\n const detail = result.stderr?.trim() || result.error?.message || `exit ${result.status}`;\n throw new Error(`${runtime} MCP installation failed: ${detail}`);\n }\n return { runtime, identity: normalizedIdentity, instance, method: \"native-cli\", backendConfigPath, restartRequired: true };\n } catch (error) {\n try {\n if (previous) replacePrivateFile(expectedPath, previous);\n else rmSync(expectedPath, { force: true });\n } catch (rollbackError) {\n const detail = rollbackError instanceof Error ? rollbackError.message : String(rollbackError);\n throw new Error(`${error instanceof Error ? error.message : String(error)}; client config rollback failed: ${detail}`);\n }\n throw error;\n }\n}\n","import {\n closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync,\n mkdirSync, openSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir, hostname } from \"node:os\";\nimport { dirname, join, parse, relative, resolve, sep } from \"node:path\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nexport const ENROLLMENT_SCHEMA = \"agent-bridge.enrollment\";\nexport const ENROLLMENT_VERSION = 1;\nexport type EnrollmentState = \"pending\" | \"ready\" | \"consuming\" | \"consumed\";\nexport type EnrollmentOperation = \"provision\" | \"rotate\";\n\nexport interface EnrollmentInput {\n gatewayUrl: string;\n workspaceId: string;\n principal: string;\n runtime: \"codex\" | \"claude-code\" | \"claude-desktop\";\n instance: string;\n credentialId: string | null;\n workspaceName: string | null;\n displayName: string | null;\n runtimeType: string;\n label: string | null;\n scopeSetName: string;\n expiresAt: string | null;\n graceUntil: string | null;\n invalidateImmediately: boolean;\n}\n\nexport interface EnrollmentResult {\n workspaceId: string;\n principal: string;\n agentId: string | null;\n credentialId: string;\n replayed: boolean;\n}\n\nexport interface EnrollmentFile {\n schema: typeof ENROLLMENT_SCHEMA;\n version: typeof ENROLLMENT_VERSION;\n provider: \"gateway\";\n revision: number;\n state: EnrollmentState;\n operation: EnrollmentOperation;\n requestId: string;\n createdAt: string;\n completedAt: string | null;\n input: EnrollmentInput;\n token: string | null;\n result: EnrollmentResult | null;\n}\n\nexport interface EnrollmentLock {\n readonly enrollmentPath: string;\n readonly lockPath: string;\n readonly descriptor: number;\n readonly device: number;\n readonly inode: number;\n readonly nonce: string;\n released: boolean;\n}\n\nexport interface EnrollmentDurabilityDependencies {\n syncDirectory(path: string): void;\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(label + \" must be an object\");\n }\n return value as Record<string, unknown>;\n}\n\nfunction text(value: unknown, label: string, maximum = 128): string {\n if (typeof value !== \"string\" || !value || value !== value.trim()\n || value.length > maximum || /[\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(label + \" is invalid\");\n }\n return value;\n}\n\nfunction nullableText(value: unknown, label: string): string | null {\n return value === null ? null : text(value, label);\n}\n\nconst RFC3339 = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?(Z|([+-])(\\d{2}):(\\d{2}))$/;\n\nexport function canonicalTimestamp(value: unknown, label: string): string | null {\n if (value === null) return null;\n const selected = text(value, label, 64);\n const match = RFC3339.exec(selected);\n if (!match) throw new Error(label + \" must be RFC3339 with a timezone\");\n const [, yearText, monthText, dayText, hourText, minuteText, secondText,\n fraction = \"\", zone, sign, offsetHourText = \"0\", offsetMinuteText = \"0\"] = match;\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const hour = Number(hourText);\n const minute = Number(minuteText);\n const second = Number(secondText);\n const millisecond = Number(fraction.padEnd(3, \"0\"));\n const offsetHour = Number(offsetHourText);\n const offsetMinute = Number(offsetMinuteText);\n if (hour > 23 || minute > 59 || second > 59 || offsetHour > 23 || offsetMinute > 59) {\n throw new Error(label + \" is invalid\");\n }\n const wall = new Date(0);\n wall.setUTCFullYear(year, month - 1, day);\n wall.setUTCHours(hour, minute, second, millisecond);\n if (wall.getUTCFullYear() !== year || wall.getUTCMonth() !== month - 1\n || wall.getUTCDate() !== day || wall.getUTCHours() !== hour\n || wall.getUTCMinutes() !== minute || wall.getUTCSeconds() !== second\n || wall.getUTCMilliseconds() !== millisecond) {\n throw new Error(label + \" is invalid\");\n }\n const direction = zone === \"Z\" ? 0 : sign === \"+\" ? 1 : -1;\n const instant = new Date(wall.getTime() - direction * (offsetHour * 60 + offsetMinute) * 60_000);\n if (!Number.isFinite(instant.getTime())) throw new Error(label + \" is invalid\");\n return instant.toISOString();\n}\n\nexport function canonicalGatewayUrl(value: unknown, label: string): string {\n const selected = text(value, label, 2048);\n let parsed: URL;\n try { parsed = new URL(selected); } catch { throw new Error(label + \" is invalid\"); }\n if (parsed.username || parsed.password) throw new Error(label + \" cannot contain credentials\");\n if (parsed.hash) throw new Error(label + \" cannot contain a fragment\");\n const loopback = parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\"\n || parsed.hostname === \"[::1]\";\n if (parsed.protocol !== \"https:\" && !(parsed.protocol === \"http:\" && loopback)) {\n throw new Error(label + \" must use HTTPS, or HTTP on an explicit loopback host\");\n }\n return parsed.toString();\n}\n\nfunction uuid(value: unknown, label: string): string {\n const selected = text(value, label, 36);\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(selected)) {\n throw new Error(label + \" is invalid\");\n }\n return selected;\n}\n\nfunction runtime(value: unknown): EnrollmentInput[\"runtime\"] {\n if (value !== \"codex\" && value !== \"claude-code\" && value !== \"claude-desktop\") {\n throw new Error(\"enrollment runtime is invalid\");\n }\n return value;\n}\n\nfunction validateInput(value: unknown, operation: EnrollmentOperation): EnrollmentInput {\n const input = object(value, \"enrollment input\");\n const gatewayUrl = canonicalGatewayUrl(input.gatewayUrl, \"enrollment gatewayUrl\");\n const credentialId = input.credentialId === null ? null : uuid(input.credentialId, \"enrollment credentialId\");\n const workspaceName = nullableText(input.workspaceName, \"enrollment workspaceName\");\n const graceUntil = canonicalTimestamp(input.graceUntil, \"enrollment graceUntil\");\n const invalidateImmediately = input.invalidateImmediately;\n if (typeof invalidateImmediately !== \"boolean\") throw new Error(\"enrollment invalidateImmediately is invalid\");\n if (operation === \"provision\" && (credentialId !== null || workspaceName === null || graceUntil !== null || invalidateImmediately)) {\n throw new Error(\"provision enrollment input is invalid\");\n }\n if (operation === \"rotate\" && (credentialId === null || workspaceName !== null\n || (graceUntil === null) === !invalidateImmediately)) {\n throw new Error(\"rotation must choose graceUntil or invalidateImmediately\");\n }\n return {\n gatewayUrl,\n workspaceId: text(input.workspaceId, \"enrollment workspaceId\"),\n principal: text(input.principal, \"enrollment principal\"),\n runtime: runtime(input.runtime),\n instance: text(input.instance, \"enrollment instance\"),\n credentialId,\n workspaceName,\n displayName: nullableText(input.displayName, \"enrollment displayName\"),\n runtimeType: text(input.runtimeType, \"enrollment runtimeType\"),\n label: nullableText(input.label, \"enrollment label\"),\n scopeSetName: text(input.scopeSetName, \"enrollment scopeSetName\"),\n expiresAt: canonicalTimestamp(input.expiresAt, \"enrollment expiresAt\"),\n graceUntil,\n invalidateImmediately,\n };\n}\n\nfunction validateResult(value: unknown, input: EnrollmentInput): EnrollmentResult | null {\n if (value === null) return null;\n const result = object(value, \"enrollment result\");\n if (typeof result.replayed !== \"boolean\") throw new Error(\"enrollment result replayed is invalid\");\n const validated = {\n workspaceId: text(result.workspaceId, \"enrollment result workspaceId\"),\n principal: text(result.principal, \"enrollment result principal\"),\n agentId: result.agentId === null ? null : uuid(result.agentId, \"enrollment result agentId\"),\n credentialId: uuid(result.credentialId, \"enrollment result credentialId\"),\n replayed: result.replayed,\n };\n if (validated.workspaceId !== input.workspaceId || validated.principal !== input.principal) {\n throw new Error(\"enrollment result does not match its workspace and principal\");\n }\n return validated;\n}\n\nexport function enrollmentTokenHash(enrollment: Pick<EnrollmentFile, \"token\">): string {\n if (!enrollment.token) throw new Error(\"enrollment no longer contains a credential\");\n return createHash(\"sha256\").update(enrollment.token, \"utf8\").digest(\"hex\");\n}\n\nexport function validateEnrollmentFile(value: unknown): EnrollmentFile {\n const file = object(value, \"enrollment file\");\n if (file.schema !== ENROLLMENT_SCHEMA || file.version !== ENROLLMENT_VERSION) {\n throw new Error(\"unsupported enrollment schema or version\");\n }\n if (file.provider !== \"gateway\") throw new Error(\"enrollment provider must be gateway\");\n if (![\"pending\", \"ready\", \"consuming\", \"consumed\"].includes(String(file.state))) {\n throw new Error(\"enrollment state is invalid\");\n }\n if (file.operation !== \"provision\" && file.operation !== \"rotate\") {\n throw new Error(\"enrollment operation is invalid\");\n }\n const state = file.state as EnrollmentState;\n if (!Number.isSafeInteger(file.revision) || Number(file.revision) < 0) {\n throw new Error(\"enrollment revision is invalid\");\n }\n const input = validateInput(file.input, file.operation);\n const token = file.token === null ? null : text(file.token, \"enrollment token\", 4096);\n const result = validateResult(file.result, input);\n const completedAt = canonicalTimestamp(file.completedAt, \"enrollment completedAt\");\n if (state === \"pending\" && (result !== null || completedAt !== null || token === null)) {\n throw new Error(\"pending enrollment state is invalid\");\n }\n if ((state === \"ready\" || state === \"consuming\") && (result === null || completedAt === null || token === null)) {\n throw new Error(state + \" enrollment state is invalid\");\n }\n if (state === \"consumed\" && (result === null || completedAt === null || token !== null)) {\n throw new Error(\"consumed enrollment state is invalid\");\n }\n return {\n schema: ENROLLMENT_SCHEMA,\n version: ENROLLMENT_VERSION,\n provider: \"gateway\",\n revision: Number(file.revision),\n state,\n operation: file.operation,\n requestId: uuid(file.requestId, \"enrollment requestId\"),\n createdAt: (() => {\n const createdAt = canonicalTimestamp(file.createdAt, \"enrollment createdAt\");\n if (createdAt === null) throw new Error(\"enrollment createdAt is invalid\");\n return createdAt;\n })(),\n completedAt,\n input,\n token,\n result,\n };\n}\n\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\nconst durabilityDefaults: EnrollmentDurabilityDependencies = { syncDirectory };\n\nfunction prepareDirectory(path: string): void {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n securePrivatePath(path, \"directory\");\n}\n\nexport function enrollmentRoot(env: NodeJS.ProcessEnv = process.env): string {\n if (env.AGENT_BRIDGE_ENROLLMENT_DIR) return resolve(env.AGENT_BRIDGE_ENROLLMENT_DIR);\n const home = realpathSync(env.HOME ?? homedir());\n return join(home, \".agent-bridge\", \"enrollments\");\n}\n\nfunction rejectSymlinkComponents(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const component of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, component);\n if (!existsSync(current)) break;\n if (lstatSync(current).isSymbolicLink()) {\n throw new Error(\"enrollment paths cannot contain symbolic links\");\n }\n }\n}\n\ninterface DirectoryIdentity { device: number; inode: number }\n\nfunction verifyPrivateDirectory(path: string): DirectoryIdentity {\n rejectSymlinkComponents(path);\n const details = lstatSync(path);\n if (!details.isDirectory() || details.isSymbolicLink()) {\n throw new Error(\"enrollment directory must be a real directory\");\n }\n verifyPrivatePathAccess(path, \"directory\");\n return { device: details.dev, inode: details.ino };\n}\n\nfunction sameDirectory(path: string, expected: DirectoryIdentity): void {\n const actual = verifyPrivateDirectory(path);\n if (actual.device !== expected.device || actual.inode !== expected.inode) {\n throw new Error(\"enrollment directory changed during the operation\");\n }\n}\n\nfunction verifyPrivatePath(root: string, directory: string): void {\n verifyPrivateDirectory(root);\n const inside = relative(root, directory);\n if (!inside) return;\n let current = root;\n for (const component of inside.split(sep).filter(Boolean)) {\n current = join(current, component);\n verifyPrivateDirectory(current);\n }\n}\n\nfunction prepareEnrollmentRoot(env: NodeJS.ProcessEnv): string {\n const root = enrollmentRoot(env);\n rejectSymlinkComponents(dirname(root));\n prepareDirectory(root);\n verifyPrivateDirectory(root);\n return root;\n}\n\nexport function assertEnrollmentPath(path: string, env: NodeJS.ProcessEnv = process.env): string {\n const root = enrollmentRoot(env);\n const selected = resolve(path);\n const inside = relative(root, selected);\n if (!inside || inside.startsWith(\"..\" + sep) || inside === \"..\" || inside.includes(sep + \"..\" + sep)) {\n throw new Error(\"enrollment file must be inside the configured enrollment directory\");\n }\n rejectSymlinkComponents(root);\n rejectSymlinkComponents(dirname(selected));\n if (existsSync(root) && existsSync(dirname(selected))) {\n verifyPrivatePath(root, dirname(selected));\n }\n return selected;\n}\n\nfunction serialized(value: EnrollmentFile): string {\n return JSON.stringify(validateEnrollmentFile(value), null, 2) + \"\\n\";\n}\n\nexport function defaultEnrollmentPath(requestId: string, env: NodeJS.ProcessEnv = process.env): string {\n return join(enrollmentRoot(env), requestId + \".json\");\n}\n\nexport function createPendingEnrollment(\n path: string,\n enrollment: EnrollmentFile,\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (enrollment.state !== \"pending\") throw new Error(\"new enrollment must be pending\");\n if (enrollment.revision !== 0) throw new Error(\"new enrollment revision must be zero\");\n path = assertEnrollmentPath(path, env);\n prepareEnrollmentRoot(env);\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n prepareDirectory(directory);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const descriptor = openSync(path, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, serialized(enrollment), \"utf8\");\n fsyncSync(descriptor);\n closeSync(descriptor);\n securePrivatePath(path, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(path, { force: true });\n throw error;\n }\n}\n\nfunction readEnrollmentUnlocked(path: string, env: NodeJS.ProcessEnv): EnrollmentFile {\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile()) throw new Error(\"enrollment path must be a regular file, not a symbolic link\");\n if (process.platform !== \"win32\") {\n if ((details.mode & 0o077) !== 0) throw new Error(\"enrollment file permissions must be 0600\");\n if (typeof process.getuid === \"function\" && details.uid !== process.getuid()) {\n throw new Error(\"enrollment file must be owned by the current user\");\n }\n }\n let parsed: unknown;\n try { parsed = JSON.parse(readFileSync(descriptor, \"utf8\")); }\n catch { throw new Error(\"enrollment file is not valid JSON\"); }\n sameDirectory(directory, directoryIdentity);\n return validateEnrollmentFile(parsed);\n } finally {\n closeSync(descriptor);\n }\n}\n\nexport function readEnrollment(path: string, env: NodeJS.ProcessEnv = process.env): EnrollmentFile {\n return readEnrollmentUnlocked(path, env);\n}\n\nfunction assertActiveLock(lock: EnrollmentLock, enrollmentPath: string): void {\n if (lock.released || lock.enrollmentPath !== enrollmentPath) {\n throw new Error(\"enrollment lock does not cover this file\");\n }\n const open = fstatSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (open.dev !== lock.device || open.ino !== lock.inode\n || current.dev !== lock.device || current.ino !== lock.inode || current.isSymbolicLink()) {\n throw new Error(\"enrollment lock changed during the operation\");\n }\n}\n\nexport function acquireEnrollmentLock(\n path: string,\n env: NodeJS.ProcessEnv = process.env,\n): EnrollmentLock {\n prepareEnrollmentRoot(env);\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n prepareDirectory(directory);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const lockPath = path + \".lock\";\n const descriptor = openSync(lockPath, \"wx\", 0o600);\n const nonce = randomUUID();\n try {\n writeFileSync(descriptor, JSON.stringify({\n schema: \"agent-bridge.enrollment-lock\",\n version: 1,\n enrollmentPath: path,\n pid: process.pid,\n host: hostname(),\n createdAt: new Date().toISOString(),\n nonce,\n }) + \"\\n\", \"utf8\");\n fsyncSync(descriptor);\n securePrivatePath(lockPath, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n const details = fstatSync(descriptor);\n return {\n enrollmentPath: path,\n lockPath,\n descriptor,\n device: details.dev,\n inode: details.ino,\n nonce,\n released: false,\n };\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(lockPath, { force: true });\n throw error;\n }\n}\n\nexport function releaseEnrollmentLock(\n lock: EnrollmentLock,\n dependencies: EnrollmentDurabilityDependencies = durabilityDefaults,\n): \"released\" | \"durability-unknown\" {\n assertActiveLock(lock, lock.enrollmentPath);\n const directory = dirname(lock.lockPath);\n const directoryIdentity = verifyPrivateDirectory(directory);\n closeSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (current.dev !== lock.device || current.ino !== lock.inode) {\n throw new Error(\"enrollment lock changed before release\");\n }\n rmSync(lock.lockPath);\n lock.released = true;\n try {\n sameDirectory(directory, directoryIdentity);\n dependencies.syncDirectory(directory);\n } catch {\n return \"durability-unknown\";\n }\n return \"released\";\n}\n\nexport function recoverEnrollmentLock(\n path: string,\n env: NodeJS.ProcessEnv = process.env,\n now = Date.now(),\n): void {\n path = assertEnrollmentPath(path, env);\n const lockPath = path + \".lock\";\n verifyPrivatePathAccess(lockPath, \"file\");\n const descriptor = openSync(lockPath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile()) throw new Error(\"enrollment lock is not a regular file\");\n if (process.platform !== \"win32\") {\n if ((details.mode & 0o077) !== 0) throw new Error(\"enrollment lock permissions must be 0600\");\n if (typeof process.getuid === \"function\" && details.uid !== process.getuid()) {\n throw new Error(\"enrollment lock must be owned by the current user\");\n }\n }\n let metadata: Record<string, unknown>;\n try { metadata = object(JSON.parse(readFileSync(descriptor, \"utf8\")), \"enrollment lock\"); }\n catch { throw new Error(\"enrollment lock metadata is invalid\"); }\n if (metadata.schema !== \"agent-bridge.enrollment-lock\" || metadata.version !== 1\n || metadata.enrollmentPath !== path || metadata.host !== hostname()\n || typeof metadata.pid !== \"number\" || !Number.isSafeInteger(metadata.pid)\n || typeof metadata.createdAt !== \"string\" || !RFC3339.test(metadata.createdAt)) {\n throw new Error(\"enrollment lock metadata is invalid\");\n }\n const age = now - new Date(metadata.createdAt).getTime();\n if (age < 60_000) throw new Error(\"enrollment lock is too recent to recover\");\n try {\n process.kill(metadata.pid, 0);\n throw new Error(\"enrollment lock owner is still running\");\n } catch (error) {\n if (error instanceof Error && error.message === \"enrollment lock owner is still running\") throw error;\n if (!error || typeof error !== \"object\" || !(\"code\" in error) || error.code !== \"ESRCH\") {\n throw new Error(\"cannot prove that the enrollment lock owner has stopped\");\n }\n }\n const current = lstatSync(lockPath);\n if (current.dev !== details.dev || current.ino !== details.ino) {\n throw new Error(\"enrollment lock changed during recovery\");\n }\n } finally {\n closeSync(descriptor);\n }\n rmSync(lockPath);\n syncDirectory(dirname(lockPath));\n}\n\nexport function deleteEnrollmentFile(\n path: string,\n lock: EnrollmentLock,\n env: NodeJS.ProcessEnv = process.env,\n dependencies: EnrollmentDurabilityDependencies = durabilityDefaults,\n): \"deleted-and-durable\" | \"deleted-durability-unknown\" | \"missing\" {\n path = assertEnrollmentPath(path, env);\n assertActiveLock(lock, path);\n let current: EnrollmentFile;\n try {\n current = readEnrollmentUnlocked(path, env);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return \"missing\";\n }\n throw error;\n }\n if (current.state !== \"consumed\" || current.token !== null) {\n throw new Error(\"only a consumed enrollment can be deleted\");\n }\n const directory = dirname(path);\n const directoryIdentity = verifyPrivateDirectory(directory);\n try {\n rmSync(path);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return \"missing\";\n }\n throw error;\n }\n try {\n sameDirectory(directory, directoryIdentity);\n dependencies.syncDirectory(directory);\n } catch {\n return \"deleted-durability-unknown\";\n }\n return \"deleted-and-durable\";\n}\n\nexport function transitionEnrollment(\n path: string,\n current: EnrollmentFile,\n state: EnrollmentState,\n changes: Partial<Pick<EnrollmentFile, \"completedAt\" | \"result\" | \"token\">> = {},\n env: NodeJS.ProcessEnv = process.env,\n heldLock?: EnrollmentLock,\n): EnrollmentFile {\n path = assertEnrollmentPath(path, env);\n const lock = heldLock ?? acquireEnrollmentLock(path, env);\n try {\n assertActiveLock(lock, path);\n const onDisk = readEnrollmentUnlocked(path, env);\n if (onDisk.revision !== current.revision || onDisk.state !== current.state\n || onDisk.requestId !== current.requestId || onDisk.operation !== current.operation\n || onDisk.token !== current.token) {\n throw new Error(\"stale enrollment transition refused\");\n }\n const transition = current.state + \"->\" + state;\n if (!new Set([\n \"pending->ready\",\n \"ready->consuming\",\n \"consuming->ready\",\n \"consuming->consumed\",\n ]).has(transition)) {\n throw new Error(\"illegal enrollment state transition: \" + transition);\n }\n const next = validateEnrollmentFile({\n ...onDisk,\n ...changes,\n state,\n revision: onDisk.revision + 1,\n });\n const directory = dirname(path);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const temporary = path + \".\" + process.pid + \".\" + randomUUID() + \".tmp\";\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, serialized(next), \"utf8\");\n fsyncSync(descriptor);\n closeSync(descriptor);\n securePrivatePath(temporary, \"file\");\n sameDirectory(directory, directoryIdentity);\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n return next;\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(temporary, { force: true });\n throw error;\n }\n } finally {\n if (!heldLock) releaseEnrollmentLock(lock);\n }\n}\n","import {\n accessSync, closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync,\n readFileSync, renameSync, statSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, parse, resolve, sep } from \"node:path\";\nimport { spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { verifyPrivatePathAccess, securePrivatePath } from \"./private-path.js\";\nimport {\n resolveDesktopLaunchContract,\n type InstallableRuntime,\n} from \"./client-installer.js\";\n\nexport type ClientLifecycleState = \"absent\" | \"unmanaged\" | \"managed\" | \"drifted\";\n\nexport interface ClientCommandContext { cwd?: string; env?: NodeJS.ProcessEnv }\nexport type ClientLifecycleExecutor = (\n command: string, args: string[], context?: ClientCommandContext,\n) => SpawnSyncReturns<string>;\ntype Executor = ClientLifecycleExecutor;\n\nconst defaultExecutor: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n});\n\nexport interface ClientLifecycleOptions {\n instance: string;\n backendConfigPath: string;\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n configPath?: string;\n apply?: boolean;\n env?: NodeJS.ProcessEnv;\n}\n\nexport interface ClientInspection {\n schemaVersion: 1;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n registrationLocator: ClientRegistrationLocator;\n metadataPath: string;\n state: ClientLifecycleState;\n managed: boolean;\n exact: boolean;\n reason: string;\n}\n\nexport interface ClientAdoptionPlan {\n schemaVersion: 1;\n action: \"adopt\" | \"none\";\n applied: boolean;\n before: ClientLifecycleState;\n after: ClientLifecycleState;\n metadataPath: string;\n inspection: ClientInspection;\n}\n\nexport interface ManagedClientMetadata {\n schema: \"agent-bridge.client-management\";\n version: 1;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: { command: string; args: string[]; scope: \"local\" | \"user\" | \"project\" | null };\n locator: ClientRegistrationLocator;\n}\n\nexport type ClientRegistrationLocator =\n | { kind: \"codex-profile\"; configPath: string }\n | { kind: \"claude-code-scope\"; scope: \"local\" | \"user\" | \"project\"; contextPath: string | null }\n | { kind: \"claude-desktop-config\"; configPath: string };\n\nfunction safeComponent(value: string): string {\n const readable = value.replace(/[^A-Za-z0-9._-]+/g, \"_\").slice(0, 48) || \"client\";\n const suffix = createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n return `${readable}-${suffix}`;\n}\n\nexport function managedClientMetadataPath(\n runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env,\n): string {\n return join(env.HOME ?? homedir(), \".agent-bridge\", \"clients\", `${runtime}-${safeComponent(instance)}.managed.json`);\n}\n\nfunction desktopConfigPath(env: NodeJS.ProcessEnv): string {\n if (process.platform === \"win32\") {\n if (!env.APPDATA) throw new Error(\"APPDATA is required for Claude Desktop inspection\");\n return join(env.APPDATA, \"Claude\", \"claude_desktop_config.json\");\n }\n const home = env.HOME ?? homedir();\n return process.platform === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")\n : join(home, \".config\", \"Claude\", \"claude_desktop_config.json\");\n}\n\nfunction inspectedDesktopConfigPath(options: ClientLifecycleOptions, env: NodeJS.ProcessEnv): string {\n return resolve(options.configPath?.trim() || desktopConfigPath(env));\n}\n\nfunction clientRegistrationLocator(\n runtime: InstallableRuntime,\n scope: \"local\" | \"user\" | \"project\" | null,\n options: ClientLifecycleOptions,\n env: NodeJS.ProcessEnv,\n): ClientRegistrationLocator {\n if (runtime === \"claude-desktop\") {\n return { kind: \"claude-desktop-config\", configPath: inspectedDesktopConfigPath(options, env) };\n }\n if (runtime === \"claude-code\") {\n const claudeScope = scope!;\n return {\n kind: \"claude-code-scope\",\n scope: claudeScope,\n contextPath: claudeScope === \"user\" ? null : resolve(process.cwd()),\n };\n }\n const codexHome = env.CODEX_HOME?.trim() || join(env.HOME ?? homedir(), \".codex\");\n return { kind: \"codex-profile\", configPath: resolve(codexHome, \"config.toml\") };\n}\n\nexport function expectedManagedClientMetadata(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n env: NodeJS.ProcessEnv,\n): ManagedClientMetadata {\n const scope = runtime === \"claude-code\" ? options.scope ?? \"user\" : null;\n const launch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : { command: safeNativeExecutableContract(options.command === undefined ? \"agent-bridge-mcp\" : options.command, \"--command\"), args: [] };\n return {\n schema: \"agent-bridge.client-management\",\n version: 1,\n runtime,\n identity,\n instance: options.instance.trim(),\n backendConfigPath: resolve(options.backendConfigPath.trim()),\n launch: { ...launch, scope },\n locator: clientRegistrationLocator(runtime, scope, options, env),\n };\n}\n\nfunction exactObject(actual: unknown, expected: unknown): boolean {\n return isDeepStrictEqual(actual, expected);\n}\n\nconst REGISTRATION_ENV_KEYS = [\n \"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\",\n] as const;\n\ntype RegistrationState = \"absent\" | \"exact\" | \"inexact\";\ntype RegistrationEnvironment = Partial<Record<(typeof REGISTRATION_ENV_KEYS)[number], string>>;\n\nexport interface ManagedRegistrationObservation {\n state: RegistrationState;\n target: {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: ManagedClientMetadata[\"launch\"];\n locator: ClientRegistrationLocator;\n };\n observed: { state: \"absent\" } | {\n state: \"present\";\n command: string;\n args: string[];\n env: RegistrationEnvironment;\n };\n}\n\nfunction registrationTarget(metadata: ManagedClientMetadata): ManagedRegistrationObservation[\"target\"] {\n return {\n runtime: metadata.runtime,\n identity: metadata.identity,\n instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n };\n}\n\nexport function safeNativeExecutableContract(value: unknown, field: string): string {\n const command = strictText(value, field, 4096);\n if (/[?=#]/.test(command) || /:\\/\\//.test(command)\n || (!isAbsolute(command) && /\\s/.test(command))) {\n throw new Error(`${field} is invalid`);\n }\n return command;\n}\n\nexport function newNativeExecutableContract(value: unknown, field: string): string {\n const command = safeNativeExecutableContract(value, field);\n if (!isAbsolute(command)) return command;\n if (resolve(command) !== command || !existsSync(command) || !statSync(command).isFile()) {\n throw new Error(`${field} is not an existing executable`);\n }\n try { accessSync(command, process.platform === \"win32\" ? constants.F_OK : constants.X_OK); }\n catch { throw new Error(`${field} is not an existing executable`); }\n return command;\n}\n\nfunction safeEnvironment(value: unknown): RegistrationEnvironment {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"managed registration environment is invalid\");\n }\n const environment: RegistrationEnvironment = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n if (!REGISTRATION_ENV_KEYS.includes(key as (typeof REGISTRATION_ENV_KEYS)[number])) {\n throw new Error(\"managed registration contains an unsupported environment key\");\n }\n if (key === \"AGENT_BRIDGE_CONFIG\") environment.AGENT_BRIDGE_CONFIG = strictAbsolutePath(item, \"registration config\");\n else environment[key as \"AGENT_BRIDGE_AGENT\" | \"AGENT_BRIDGE_INSTANCE\"] = strictText(item, `registration ${key}`, 128);\n }\n return environment;\n}\n\nfunction exactRegistration(\n expected: ManagedClientMetadata,\n command: string,\n args: string[],\n environment: RegistrationEnvironment,\n): boolean {\n return command === expected.launch.command\n && isDeepStrictEqual(args, expected.launch.args)\n && isDeepStrictEqual(environment, {\n AGENT_BRIDGE_AGENT: expected.identity,\n AGENT_BRIDGE_INSTANCE: expected.instance,\n AGENT_BRIDGE_CONFIG: expected.backendConfigPath,\n });\n}\n\nfunction safeArgs(value: unknown, expected: string[], alternate: string[] = []): string[] {\n if (!Array.isArray(value) || value.length > 16) throw new Error(\"managed registration arguments are invalid\");\n const args = value.map((item) => strictText(item, \"registration argument\", 1024));\n if (!isDeepStrictEqual(args, expected) && !isDeepStrictEqual(args, alternate)) {\n throw new Error(\"managed registration arguments cannot be represented safely\");\n }\n return args;\n}\n\nfunction commandContext(\n metadata: ManagedClientMetadata,\n env: NodeJS.ProcessEnv,\n): ClientCommandContext {\n if (metadata.runtime === \"codex\") {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"codex-profile\" }>;\n return { env: { ...env, CODEX_HOME: dirname(locator.configPath) } };\n }\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n return { cwd: locator.contextPath ?? undefined, env: { ...env } };\n}\n\nfunction observeCodex(\n expected: ManagedClientMetadata,\n execute: Executor,\n env: NodeJS.ProcessEnv,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n const result = execute(\"codex\", [\"mcp\", \"get\", \"agent-bridge\", \"--json\"], {\n ...commandContext(expected, env),\n });\n if (result.error) throw new Error(\"codex MCP inspection failed\");\n if (result.status !== 0) {\n const output = `${result.stdout}\\n${result.stderr}`.trim();\n if (output === \"Error: No MCP server named 'agent-bridge' found.\") {\n return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n }\n throw new Error(\"codex MCP inspection failed\");\n }\n try {\n const server = JSON.parse(result.stdout) as Record<string, unknown>;\n const transport = server?.transport as Record<string, unknown> | undefined;\n const serverFields = new Set([\n \"name\", \"enabled\", \"disabled_reason\", \"transport\", \"enabled_tools\", \"disabled_tools\",\n \"startup_timeout_sec\", \"tool_timeout_sec\", \"status\",\n ]);\n const transportFields = new Set([\"type\", \"command\", \"args\", \"env\", \"env_vars\", \"cwd\"]);\n const hasNonNullSetting = (field: string): boolean => field in server && server[field] !== null;\n if (!server || typeof server !== \"object\" || Array.isArray(server)\n || server.name !== \"agent-bridge\" || server.enabled !== true\n || !transport || typeof transport !== \"object\" || Array.isArray(transport)\n || transport.type !== \"stdio\") {\n throw new Error(\"Codex MCP registration is not a supported stdio contract\");\n }\n if (Object.keys(server).some((field) => !serverFields.has(field))\n || Object.keys(transport).some((field) => !transportFields.has(field))\n || hasNonNullSetting(\"enabled_tools\") || hasNonNullSetting(\"disabled_tools\")) {\n throw new Error(\"Codex MCP registration contains an unsupported execution setting\");\n }\n if ((\"cwd\" in transport && transport.cwd !== null)\n || (\"env_vars\" in transport && (!Array.isArray(transport.env_vars) || transport.env_vars.length !== 0))) {\n throw new Error(\"Codex MCP registration contains an unsupported execution setting\");\n }\n const command = safeNativeExecutableContract(transport.command, \"Codex MCP command\");\n const args = safeArgs(transport.args, expected.launch.args, alternateArgs);\n const environment = safeEnvironment(transport.env);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n } catch {\n throw new Error(\"Codex MCP registration cannot be represented safely\");\n }\n}\n\nfunction observeClaudeCode(\n expected: ManagedClientMetadata,\n execute: Executor,\n env: NodeJS.ProcessEnv,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n const locator = expected.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n const result = execute(\"claude\", [\"mcp\", \"get\", \"agent-bridge\"], {\n ...commandContext(expected, env),\n });\n if (result.error) throw new Error(\"claude-code MCP inspection failed\");\n if (result.status !== 0) {\n const output = `${result.stdout}\\n${result.stderr}`.trim();\n if (output === 'No MCP server named \"agent-bridge\".'\n || /^No MCP server named \"agent-bridge\"\\. Configured servers: [^\\r\\n]+$/.test(output)) {\n return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n }\n throw new Error(\"claude-code MCP inspection failed\");\n }\n const scope = {\n local: \" Scope: Local config (private to you in this project)\",\n user: \" Scope: User config (available in all your projects)\",\n project: \" Scope: Project config (shared via .mcp.json)\",\n }[expected.launch.scope!];\n const lines = result.stdout.replace(/\\r\\n/g, \"\\n\").trimEnd().split(\"\\n\");\n if (lines[0] !== \"agent-bridge:\" || lines[1] !== scope) {\n throw new Error(\"Claude Code MCP registration scope is not the recorded scope\");\n }\n const typeIndex = lines.indexOf(\" Type: stdio\", 2);\n if (typeIndex < 0 || lines[typeIndex + 1] !== ` Command: ${expected.launch.command}`\n || lines[typeIndex + 2] !== \" Args:\" || lines[typeIndex + 3] !== \" Environment:\") {\n if (typeIndex < 0 || lines[typeIndex + 2] !== \" Args:\" || lines[typeIndex + 3] !== \" Environment:\") {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n }\n const commandLine = lines[typeIndex + 1];\n if (!commandLine?.startsWith(\" Command: \")) throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n const command = safeNativeExecutableContract(commandLine.slice(\" Command: \".length), \"Claude Code MCP command\");\n const environmentLines: string[] = [];\n let index = typeIndex + 4;\n while (index < lines.length && lines[index]?.startsWith(\" \")) {\n environmentLines.push(lines[index]!);\n index += 1;\n }\n const values: Record<string, string> = {};\n for (const line of environmentLines) {\n const match = /^ ([A-Z0-9_]+)=(.*)$/.exec(line);\n if (!match || Object.prototype.hasOwnProperty.call(values, match[1]!)) {\n throw new Error(\"Claude Code MCP environment is invalid\");\n }\n values[match[1]!] = match[2]!;\n }\n const environment = safeEnvironment(values);\n while (lines[index] === \"\") index += 1;\n if (lines[index] !== `To remove this server, run: claude mcp remove agent-bridge -s ${expected.launch.scope}`) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n if (lines.slice(index + 1).some((line) => line !== \"\")) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n const args = safeArgs([], expected.launch.args, alternateArgs);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n}\n\nexport function assertNoLinkedPathAncestors(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const part of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, part);\n try {\n if (lstatSync(current).isSymbolicLink()) throw new Error(\"Claude Desktop config path contains a link\");\n } catch (error) {\n if (error instanceof Error && error.message === \"Claude Desktop config path contains a link\") throw error;\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") break;\n throw new Error(\"Claude Desktop config path is unavailable\");\n }\n }\n}\n\nfunction observeDesktop(\n expected: ManagedClientMetadata,\n path: string,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n assertNoLinkedPathAncestors(path);\n if (!existsSync(path)) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n try {\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > 4 * 1024 * 1024) {\n throw new Error(\"Claude Desktop config is not a safe regular JSON file\");\n }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n let parsed: unknown;\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > 4 * 1024 * 1024\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n } finally { closeSync(descriptor); }\n const servers = (parsed as { mcpServers?: unknown })?.mcpServers;\n if (servers === undefined) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n throw new Error(\"Claude Desktop mcpServers is invalid\");\n }\n const server = (servers as Record<string, unknown>)[\"agent-bridge\"];\n if (server === undefined) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n if (!server || typeof server !== \"object\" || Array.isArray(server)\n || Object.keys(server as Record<string, unknown>).sort().join(\",\") !== \"args,command,env\") {\n throw new Error(\"Claude Desktop MCP registration cannot be represented safely\");\n }\n const entry = server as Record<string, unknown>;\n const command = strictAbsolutePath(entry.command, \"Claude Desktop MCP command\");\n const args = safeArgs(entry.args, expected.launch.args, alternateArgs);\n const environment = safeEnvironment(entry.env);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n } catch {\n throw new Error(\"Claude Desktop MCP registration cannot be represented safely\");\n }\n}\n\n/** Observe only the bounded, credential-free portion of a metadata-owned registration. */\nexport function observeManagedRegistration(\n metadata: ManagedClientMetadata,\n execute: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n alternateArgs: string[] = [],\n): ManagedRegistrationObservation {\n return metadata.runtime === \"codex\"\n ? observeCodex(metadata, execute, env, alternateArgs)\n : metadata.runtime === \"claude-code\"\n ? observeClaudeCode(metadata, execute, env, alternateArgs)\n : observeDesktop(\n metadata,\n (metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-desktop-config\" }>).configPath,\n alternateArgs,\n );\n}\n\n/** Inspect the registration using only the locator and launch contract stored in managed metadata. */\nexport function inspectManagedRegistration(\n metadata: ManagedClientMetadata,\n execute: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): RegistrationState {\n try { return observeManagedRegistration(metadata, execute, env).state; }\n catch { return \"inexact\"; }\n}\n\nconst MAX_MANAGED_METADATA_BYTES = 64 * 1024;\n\nfunction strictText(value: unknown, field: string, maximum = 1024): string {\n if (typeof value !== \"string\" || !value || value.length > maximum || value.trim() !== value\n || /[\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(`managed metadata ${field} is invalid`);\n }\n return value;\n}\n\nfunction strictAbsolutePath(value: unknown, field: string): string {\n const path = strictText(value, field, 4096);\n if (!isAbsolute(path) || resolve(path) !== path) throw new Error(`managed metadata ${field} is invalid`);\n return path;\n}\n\nfunction strictLocator(\n runtime: InstallableRuntime,\n value: unknown,\n): ClientRegistrationLocator {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n const locator = value as Record<string, unknown>;\n if (runtime === \"codex\") {\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\"\n || locator.kind !== \"codex-profile\") throw new Error(\"managed metadata locator is invalid\");\n const configPath = strictAbsolutePath(locator.configPath, \"locator configPath\");\n if (!configPath.endsWith(\"/config.toml\") && !configPath.endsWith(\"\\\\config.toml\")) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n return { kind: \"codex-profile\", configPath };\n }\n if (runtime === \"claude-code\") {\n if (Object.keys(locator).sort().join(\",\") !== \"contextPath,kind,scope\"\n || locator.kind !== \"claude-code-scope\"\n || ![\"local\", \"user\", \"project\"].includes(locator.scope as string)) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n const scope = locator.scope as \"local\" | \"user\" | \"project\";\n if ((scope === \"user\" && locator.contextPath !== null)\n || (scope !== \"user\" && typeof locator.contextPath !== \"string\")) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n return {\n kind: \"claude-code-scope\", scope,\n contextPath: scope === \"user\" ? null : strictAbsolutePath(locator.contextPath, \"locator contextPath\"),\n };\n }\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\"\n || locator.kind !== \"claude-desktop-config\") throw new Error(\"managed metadata locator is invalid\");\n return { kind: \"claude-desktop-config\", configPath: strictAbsolutePath(locator.configPath, \"locator configPath\") };\n}\n\nfunction strictManagedMetadata(\n value: unknown, runtime: InstallableRuntime, instance: string,\n): ManagedClientMetadata {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"managed metadata is invalid\");\n const metadata = value as Record<string, unknown>;\n if (Object.keys(metadata).sort().join(\",\")\n !== \"backendConfigPath,identity,instance,launch,locator,runtime,schema,version\"\n || metadata.schema !== \"agent-bridge.client-management\" || metadata.version !== 1\n || metadata.runtime !== runtime) throw new Error(\"managed metadata is invalid\");\n const identity = strictText(metadata.identity, \"identity\", 128);\n const recordedInstance = strictText(metadata.instance, \"instance\", 128);\n if (recordedInstance !== instance) throw new Error(\"managed metadata instance does not match its locator\");\n const backendConfigPath = strictAbsolutePath(metadata.backendConfigPath, \"backendConfigPath\");\n if (!metadata.launch || typeof metadata.launch !== \"object\" || Array.isArray(metadata.launch)) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n const launch = metadata.launch as Record<string, unknown>;\n if (Object.keys(launch).sort().join(\",\") !== \"args,command,scope\"\n || !Array.isArray(launch.args) || launch.args.length > 16\n || launch.args.some((arg) => {\n try { strictText(arg, \"launch argument\", 1024); return false; } catch { return true; }\n })\n || ![null, \"local\", \"user\", \"project\"].includes(launch.scope as string | null)) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n const locator = strictLocator(runtime, metadata.locator);\n const scope = launch.scope as \"local\" | \"user\" | \"project\" | null;\n if ((runtime !== \"claude-code\" && scope !== null)\n || (runtime === \"claude-code\" && scope !== (locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>).scope)\n || ((runtime === \"codex\" || runtime === \"claude-code\") && launch.args.length !== 0)\n || (runtime === \"claude-desktop\" && !isAbsolute(strictText(launch.command, \"launch command\", 4096)))\n || ((runtime === \"codex\" || runtime === \"claude-code\")\n && (() => { try { safeNativeExecutableContract(launch.command, \"launch command\"); return false; } catch { return true; } })())) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n return {\n schema: \"agent-bridge.client-management\", version: 1, runtime, identity, instance: recordedInstance,\n backendConfigPath,\n launch: { command: strictText(launch.command, \"launch command\", 4096), args: [...launch.args] as string[], scope },\n locator,\n };\n}\n\n/** Load the owner-private record that is the only mutation authority for a managed client. */\nexport function loadManagedClientMetadata(\n runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env,\n): ManagedClientMetadata {\n const normalizedInstance = strictText(instance, \"instance\", 128);\n const path = managedClientMetadataPath(runtime, normalizedInstance, env);\n verifyPrivatePathAccess(dirname(dirname(path)), \"directory\");\n verifyPrivatePathAccess(dirname(path), \"directory\");\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > MAX_MANAGED_METADATA_BYTES) {\n throw new Error(\"managed metadata is invalid\");\n }\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > MAX_MANAGED_METADATA_BYTES\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"managed metadata changed during access\");\n }\n const parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"managed metadata changed during access\");\n }\n return strictManagedMetadata(parsed, runtime, normalizedInstance);\n } finally { closeSync(descriptor); }\n}\n\nfunction readMetadata(path: string, runtime: InstallableRuntime, instance: string): unknown {\n if (!existsSync(path)) return undefined;\n try { return loadManagedClientMetadata(runtime, instance, { HOME: dirname(dirname(dirname(path))) }); }\n catch { return null; }\n}\n\nexport function writeManagedClientMetadata(path: string, metadata: ManagedClientMetadata): void {\n const directory = dirname(path);\n const privateRoot = dirname(directory);\n mkdirSync(privateRoot, { recursive: true, mode: 0o700 });\n securePrivatePath(privateRoot, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n const directoryBefore = lstatSync(directory);\n if (directoryBefore.isSymbolicLink() || !directoryBefore.isDirectory()) {\n throw new Error(\"managed metadata directory is invalid\");\n }\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n const opened = fstatSync(descriptor);\n securePrivatePath(temporary, \"file\");\n const secured = lstatSync(temporary);\n if (!opened.isFile() || secured.isSymbolicLink() || !secured.isFile()\n || secured.dev !== opened.dev || secured.ino !== opened.ino) {\n throw new Error(\"managed metadata temporary file changed during access\");\n }\n writeFileSync(descriptor, `${JSON.stringify(metadata, null, 2)}\\n`);\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n const beforeRename = lstatSync(directory);\n const temporaryBeforeRename = lstatSync(temporary);\n if (beforeRename.isSymbolicLink() || beforeRename.dev !== directoryBefore.dev\n || beforeRename.ino !== directoryBefore.ino || temporaryBeforeRename.isSymbolicLink()\n || !temporaryBeforeRename.isFile()) {\n throw new Error(\"managed metadata directory changed before publication\");\n }\n verifyPrivatePathAccess(temporary, \"file\");\n renameSync(temporary, path);\n const afterRename = lstatSync(directory);\n if (afterRename.isSymbolicLink() || afterRename.dev !== directoryBefore.dev\n || afterRename.ino !== directoryBefore.ino) {\n throw new Error(\"managed metadata directory changed during publication\");\n }\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const directoryDescriptor = openSync(directory, \"r\");\n try { fsyncSync(directoryDescriptor); } finally { closeSync(directoryDescriptor); }\n }\n}\n\nfunction validate(runtime: InstallableRuntime, identity: string, options: ClientLifecycleOptions): void {\n if (!identity.trim() || identity.trim().length > 128) throw new Error(\"--identity is required\");\n if (!options.instance.trim() || options.instance.trim().length > 128) throw new Error(\"--instance is required\");\n if (!options.backendConfigPath.trim()) throw new Error(\"--backend-config is required\");\n if (runtime === \"claude-code\" && options.scope && ![\"local\", \"user\", \"project\"].includes(options.scope)) {\n throw new Error(\"scope must be local, user, or project\");\n }\n}\n\nfunction backendState(path: string): \"absent\" | \"private-file\" | \"invalid\" {\n if (!existsSync(path)) return \"absent\";\n try {\n verifyPrivatePathAccess(dirname(path), \"directory\");\n verifyPrivatePathAccess(path, \"file\");\n return statSync(path).isFile() ? \"private-file\" : \"invalid\";\n } catch {\n return \"invalid\";\n }\n}\n\nexport function inspectClient(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n execute: Executor = defaultExecutor,\n): ClientInspection {\n validate(runtime, identity, options);\n const env = options.env ?? process.env;\n const normalizedIdentity = identity.trim();\n const expected = expectedManagedClientMetadata(runtime, normalizedIdentity, options, env);\n const path = managedClientMetadataPath(runtime, expected.instance, env);\n const registration = inspectManagedRegistration(expected, execute, env);\n const metadata = readMetadata(path, runtime, expected.instance);\n const backend = backendState(expected.backendConfigPath);\n let state: ClientLifecycleState;\n let reason: string;\n if (registration === \"absent\" && metadata === undefined && backend === \"absent\") {\n state = \"absent\"; reason = \"registration is absent\";\n } else if (registration === \"exact\" && backend === \"private-file\" && metadata === undefined) {\n state = \"unmanaged\"; reason = \"exact registration has no managed metadata\";\n } else if (registration === \"exact\" && backend === \"private-file\" && exactObject(metadata, expected)) {\n state = \"managed\"; reason = \"registration and managed metadata are exact\";\n } else {\n state = \"drifted\"; reason = backend !== \"private-file\"\n ? \"backend path or its immediate parent is absent or not owner-private\"\n : \"registration or managed metadata differs from the requested contract\";\n }\n return {\n schemaVersion: 1,\n runtime,\n identity: normalizedIdentity,\n instance: expected.instance,\n backendConfigPath: expected.backendConfigPath,\n registrationLocator: expected.locator,\n metadataPath: path,\n state,\n managed: state === \"managed\",\n exact: registration === \"exact\" && backend === \"private-file\",\n reason,\n };\n}\n\nexport function adoptClient(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n execute: Executor = defaultExecutor,\n): ClientAdoptionPlan {\n const inspection = inspectClient(runtime, identity, options, execute);\n if (inspection.state === \"managed\") {\n return { schemaVersion: 1, action: \"none\", applied: false, before: \"managed\", after: \"managed\", metadataPath: inspection.metadataPath, inspection };\n }\n if (inspection.state !== \"unmanaged\") {\n throw new Error(\"only an exact unmanaged registration can be adopted\");\n }\n if (options.apply) {\n writeManagedClientMetadata(\n inspection.metadataPath,\n expectedManagedClientMetadata(runtime, inspection.identity, options, options.env ?? process.env),\n );\n const postcondition = inspectClient(runtime, identity, options, execute);\n if (postcondition.state !== \"managed\") {\n throw new Error(\"client registration changed while adoption was applied\");\n }\n return {\n schemaVersion: 1, action: \"adopt\", applied: true, before: \"unmanaged\",\n after: \"managed\", metadataPath: inspection.metadataPath, inspection: postcondition,\n };\n }\n return {\n schemaVersion: 1,\n action: \"adopt\",\n applied: false,\n before: \"unmanaged\",\n after: \"managed\",\n metadataPath: inspection.metadataPath,\n inspection,\n };\n}\n","import {\n closeSync, constants, existsSync, fchmodSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync,\n readFileSync, renameSync, rmSync, unlinkSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport { hostname } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport {\n beginClientOperation, classifyClientOperationRestart, completeClientOperationCleanup,\n readClientOperation, recordClientOperationStepApplied, recordClientOperationStepIntent,\n recoverClientOperationLock, releaseClientOperationLock, resumeClientOperation,\n transitionClientOperation, writeClientOperationSnapshot, type ClientOperationLaunch,\n type ClientOperationManifest, type ClientOperationRegistrationProof,\n type ClientOperationRollbackContract,\n} from \"./client-operation.js\";\nimport {\n assertNoLinkedPathAncestors, loadManagedClientMetadata, managedClientMetadataPath,\n newNativeExecutableContract,\n observeManagedRegistration,\n writeManagedClientMetadata, type ClientLifecycleExecutor, type ClientRegistrationLocator,\n type ManagedClientMetadata, type ManagedRegistrationObservation,\n} from \"./client-lifecycle.js\";\nimport { resolveDesktopLaunchContract, type InstallableRuntime } from \"./client-installer.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nconst MAX_DESKTOP_CONFIG_BYTES = 4 * 1024 * 1024;\n\ntype BackendState = \"private\" | \"repairable\";\ntype PlannedKind = \"backend\" | \"backend-delete\" | \"native-remove\" | \"native-add\"\n | \"desktop-replace\" | \"desktop-remove\" | \"metadata\" | \"metadata-delete\";\n\ninterface BackendProof {\n role: \"backend\";\n file: { device: number; inode: number };\n parent: { device: number; inode: number };\n state: BackendState;\n}\n\ninterface BackendAbsentProof {\n role: \"backend\";\n parent: { device: number; inode: number };\n state: \"absent\";\n directoryDurability: \"durable\" | \"unavailable\";\n}\n\ninterface MetadataAbsentProof {\n role: \"metadata\";\n runtime: InstallableRuntime;\n instance: string;\n parent: { device: number; inode: number };\n state: \"absent\";\n directoryDurability: \"durable\" | \"unavailable\";\n}\n\ninterface PlannedStep {\n kind: PlannedKind;\n target: \"backend\" | \"registration\" | \"metadata\";\n locator: string;\n before: string;\n after: string;\n registrationMetadata?: \"source\" | \"target\";\n afterRegistrationMetadata?: \"source\" | \"target\";\n}\n\nexport interface ClientMaintenancePlan {\n schemaVersion: 1;\n action: \"repair\" | \"update\" | \"uninstall\" | \"rollback\" | \"none\";\n applied: boolean;\n operationId?: string;\n runtime: InstallableRuntime;\n instance: string;\n identity: string;\n metadataPath: string;\n steps: Array<{ target: \"backend\" | \"registration\" | \"metadata\"; action: string }>;\n}\n\ninterface ClientMaintenanceTestHooks {\n afterLock?: () => void;\n beforeOperationBegin?: () => void;\n beforeApply?: (step: { target: PlannedStep[\"target\"]; action: PlannedKind }) => void;\n afterApply?: (step: { target: PlannedStep[\"target\"]; action: PlannedKind }) => void;\n afterBackendPin?: () => void;\n desktop?: DesktopMaintenanceHooks;\n}\n\nexport interface ClientMaintenanceOptions {\n action: \"repair\" | \"update\" | \"uninstall\";\n runtime: InstallableRuntime;\n instance: string;\n identity: string;\n command?: string;\n apply?: boolean;\n resume?: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n /** Test-only fault injection for mutation-boundary regression coverage. */\n testHooks?: ClientMaintenanceTestHooks;\n}\n\nexport interface ClientMaintenanceResumeOptions {\n operationId: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n /** Test-only fault injection for mutation-boundary regression coverage. */\n testHooks?: ClientMaintenanceTestHooks;\n}\n\nexport interface ClientRollbackOptions {\n sourceOperationId: string;\n identity: string;\n apply?: boolean;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n /** Test-only fault injection for mutation-boundary regression coverage. */\n testHooks?: ClientMaintenanceTestHooks;\n}\n\nfunction digest(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction fixedEnvKeys(): ClientOperationLaunch[\"envKeys\"] {\n return [\"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\"];\n}\n\nfunction canonical(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n if (!value || typeof value !== \"object\") return JSON.stringify(value);\n return `{${Object.keys(value as Record<string, unknown>).sort()\n .map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\n\nfunction assertCurrentOperationManifest(current: ClientOperationManifest, env: NodeJS.ProcessEnv): void {\n const persisted = readClientOperation(current.operationId, env);\n if (!isDeepStrictEqual(persisted, current) || canonical(persisted) !== canonical(current)) {\n throw new Error(\"operation manifest changed while the client lock is held\");\n }\n}\n\nfunction assertRuntime(runtime: string): asserts runtime is InstallableRuntime {\n if (![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) {\n throw new Error(`unsupported client runtime: ${runtime}`);\n }\n}\n\nfunction assertIdentity(metadata: ManagedClientMetadata, assertion: string): void {\n if (!assertion || assertion.trim() !== assertion || assertion !== metadata.identity) {\n throw new Error(\"--identity must exactly match managed metadata\");\n }\n}\n\nfunction registrationProof(observation: ManagedRegistrationObservation): string {\n return canonical({ role: \"registration\", observation });\n}\n\nfunction exactRegistrationObservation(metadata: ManagedClientMetadata): ManagedRegistrationObservation {\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n },\n },\n };\n}\n\nfunction rollbackContract(\n prior: ManagedClientMetadata,\n forward: ManagedClientMetadata,\n): ClientOperationRollbackContract {\n const priorRegistration = exactRegistrationObservation(prior);\n const forwardRegistration = exactRegistrationObservation(forward);\n return {\n schema: \"agent-bridge.client-update-rollback\", version: 1, identity: prior.identity,\n priorMetadata: prior,\n priorRegistration: priorRegistration as ClientOperationRegistrationProof,\n forwardMetadataSha256: digest(metadataProof(forward)),\n forwardRegistrationSha256: digest(registrationProof(forwardRegistration)),\n };\n}\n\nfunction managedMetadataFromRollback(\n contract: ClientOperationRollbackContract,\n): ManagedClientMetadata {\n return contract.priorMetadata as ManagedClientMetadata;\n}\n\nfunction assertRollbackContract(\n contract: ClientOperationRollbackContract,\n runtime: InstallableRuntime,\n instance: string,\n): { prior: ManagedClientMetadata } {\n const prior = managedMetadataFromRollback(contract);\n if (prior.runtime !== runtime || prior.instance !== instance || prior.identity !== contract.identity) {\n throw new Error(\"rollback source does not match its recorded managed client\");\n }\n const expectedPrior = exactRegistrationObservation(prior);\n if (canonical(contract.priorRegistration) !== canonical(expectedPrior)) {\n throw new Error(\"rollback source inverse registration contract is invalid\");\n }\n return { prior };\n}\n\nfunction metadataProof(metadata: ManagedClientMetadata): string {\n return canonical({ role: \"metadata\", metadata });\n}\n\nfunction operationLaunch(metadata: ManagedClientMetadata): ClientOperationLaunch {\n return {\n command: metadata.launch.command,\n args: [...metadata.launch.args],\n scope: metadata.launch.scope,\n envKeys: fixedEnvKeys(),\n };\n}\n\nfunction updateMetadata(metadata: ManagedClientMetadata, launch: ClientOperationLaunch): ManagedClientMetadata {\n return {\n ...metadata,\n launch: { command: launch.command, args: [...launch.args], scope: launch.scope },\n };\n}\n\nfunction resolveUpdateLaunch(\n metadata: ManagedClientMetadata,\n command: string | undefined,\n env: NodeJS.ProcessEnv,\n): ClientOperationLaunch {\n if (metadata.runtime === \"claude-desktop\") {\n const launch = resolveDesktopLaunchContract(command, env);\n return { command: launch.command, args: [...launch.args], scope: null, envKeys: fixedEnvKeys() };\n }\n const requested = command === undefined ? \"agent-bridge-mcp\" : command;\n newNativeExecutableContract(requested, \"--command\");\n return {\n command: requested,\n args: [],\n scope: metadata.runtime === \"claude-code\" ? metadata.launch.scope : null,\n envKeys: fixedEnvKeys(),\n };\n}\n\nfunction backendPolicy(path: string): BackendProof {\n const parentPath = dirname(path);\n const parent = lstatSync(parentPath);\n const file = lstatSync(path);\n if (parent.isSymbolicLink() || !parent.isDirectory() || file.isSymbolicLink() || !file.isFile()) {\n throw new Error(\"managed backend path cannot be a link or non-regular file\");\n }\n if (typeof process.getuid === \"function\" && (parent.uid !== process.getuid() || file.uid !== process.getuid())) {\n throw new Error(\"managed backend path is not owned by the current user\");\n }\n if (process.platform === \"win32\") {\n try {\n verifyPrivatePathAccess(parentPath, \"directory\");\n verifyPrivatePathAccess(path, \"file\");\n return {\n role: \"backend\", file: { device: file.dev, inode: file.ino },\n parent: { device: parent.dev, inode: parent.ino }, state: \"private\",\n };\n } catch {\n throw new Error(\"managed backend policy cannot be tightened safely on this platform\");\n }\n }\n const exactPrivate = (parent.mode & 0o777) === 0o700 && (file.mode & 0o777) === 0o600;\n if (exactPrivate) {\n verifyPrivatePathAccess(parentPath, \"directory\");\n verifyPrivatePathAccess(path, \"file\");\n return {\n role: \"backend\", file: { device: file.dev, inode: file.ino },\n parent: { device: parent.dev, inode: parent.ino }, state: \"private\",\n };\n }\n if ((parent.mode & 0o700) !== 0o700 || (file.mode & 0o600) !== 0o600\n || (parent.mode & 0o7000) !== 0 || (file.mode & 0o7000) !== 0) {\n throw new Error(\"managed backend policy would require nonmonotonic permission changes\");\n }\n return {\n role: \"backend\", file: { device: file.dev, inode: file.ino },\n parent: { device: parent.dev, inode: parent.ino }, state: \"repairable\",\n };\n}\n\nfunction privateDirectoryProof(path: string, message: string): { device: number; inode: number } {\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isDirectory()) throw new Error(message);\n verifyPrivatePathAccess(path, \"directory\");\n const after = lstatSync(path);\n if (after.isSymbolicLink() || !after.isDirectory() || after.dev !== before.dev || after.ino !== before.ino) {\n throw new Error(message);\n }\n return { device: before.dev, inode: before.ino };\n}\n\nfunction samePrivateDirectory(\n path: string,\n expected: { device: number; inode: number },\n message: string,\n): void {\n const current = lstatSync(path);\n if (current.isSymbolicLink() || !current.isDirectory()\n || current.dev !== expected.device || current.ino !== expected.inode) {\n throw new Error(message);\n }\n verifyPrivatePathAccess(path, \"directory\");\n}\n\nfunction pathEntryIsAbsent(path: string): boolean {\n try {\n lstatSync(path);\n return false;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return true;\n throw error;\n }\n}\n\nfunction syncPrivateDirectory(\n path: string,\n expected: { device: number; inode: number },\n message: string,\n): \"durable\" | \"unavailable\" {\n samePrivateDirectory(path, expected, message);\n if (process.platform === \"win32\") return \"unavailable\";\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isDirectory() || opened.dev !== expected.device || opened.ino !== expected.inode) {\n throw new Error(message);\n }\n fsyncSync(descriptor);\n } finally { closeSync(descriptor); }\n samePrivateDirectory(path, expected, message);\n return \"durable\";\n}\n\nfunction expectedBackendAbsentProof(before: BackendProof): BackendAbsentProof {\n return {\n role: \"backend\", parent: { ...before.parent }, state: \"absent\",\n directoryDurability: process.platform === \"win32\" ? \"unavailable\" : \"durable\",\n };\n}\n\nfunction observedBackendAbsentProof(\n path: string,\n expected: { device: number; inode: number },\n): BackendAbsentProof {\n const parentPath = dirname(path);\n samePrivateDirectory(parentPath, expected, \"managed backend directory changed during deletion\");\n if (!pathEntryIsAbsent(path)) throw new Error(\"managed backend remains after deletion\");\n const directoryDurability = syncPrivateDirectory(\n parentPath, expected, \"managed backend directory changed during deletion\",\n );\n return { role: \"backend\", parent: { ...expected }, state: \"absent\", directoryDurability };\n}\n\nfunction expectedMetadataAbsentProof(\n metadata: ManagedClientMetadata,\n env: NodeJS.ProcessEnv,\n): MetadataAbsentProof {\n const parent = privateDirectoryProof(\n dirname(managedClientMetadataPath(metadata.runtime, metadata.instance, env)),\n \"managed metadata directory is invalid\",\n );\n return {\n role: \"metadata\", runtime: metadata.runtime, instance: metadata.instance,\n parent, state: \"absent\", directoryDurability: process.platform === \"win32\" ? \"unavailable\" : \"durable\",\n };\n}\n\nfunction observedMetadataAbsentProof(\n runtime: InstallableRuntime,\n instance: string,\n env: NodeJS.ProcessEnv,\n expected: { device: number; inode: number },\n): MetadataAbsentProof {\n const path = managedClientMetadataPath(runtime, instance, env);\n const parentPath = dirname(path);\n samePrivateDirectory(parentPath, expected, \"managed metadata directory changed during deletion\");\n if (!pathEntryIsAbsent(path)) throw new Error(\"managed metadata remains after deletion\");\n const directoryDurability = syncPrivateDirectory(\n parentPath, expected, \"managed metadata directory changed during deletion\",\n );\n return { role: \"metadata\", runtime, instance, parent: { ...expected }, state: \"absent\", directoryDurability };\n}\n\nfunction deletePrivateFile(\n path: string,\n expectedFile: { device: number; inode: number },\n expectedParent: { device: number; inode: number },\n description: string,\n): \"durable\" | \"unavailable\" {\n const parentPath = dirname(path);\n samePrivateDirectory(parentPath, expectedParent, `${description} directory changed during deletion`);\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.dev !== expectedFile.device || opened.ino !== expectedFile.inode) {\n throw new Error(`${description} changed during deletion`);\n }\n } finally { closeSync(descriptor); }\n const current = lstatSync(path);\n if (current.isSymbolicLink() || !current.isFile()\n || current.dev !== expectedFile.device || current.ino !== expectedFile.inode) {\n throw new Error(`${description} changed during deletion`);\n }\n unlinkSync(path);\n if (!pathEntryIsAbsent(path)) throw new Error(`${description} remains after deletion`);\n return syncPrivateDirectory(parentPath, expectedParent, `${description} directory changed during deletion`);\n}\n\nfunction deleteManagedClientMetadata(metadata: ManagedClientMetadata, env: NodeJS.ProcessEnv): \"durable\" | \"unavailable\" {\n const current = loadManagedClientMetadata(metadata.runtime, metadata.instance, env);\n if (!isDeepStrictEqual(current, metadata)) throw new Error(\"managed metadata changed before deletion\");\n const path = managedClientMetadataPath(metadata.runtime, metadata.instance, env);\n const parent = privateDirectoryProof(dirname(path), \"managed metadata directory is invalid\");\n const file = lstatSync(path);\n if (file.isSymbolicLink() || !file.isFile()) throw new Error(\"managed metadata changed before deletion\");\n verifyPrivatePathAccess(path, \"file\");\n return deletePrivateFile(path, { device: file.dev, inode: file.ino }, parent, \"managed metadata\");\n}\n\nfunction deleteBackend(\n path: string,\n before: BackendProof,\n): \"durable\" | \"unavailable\" {\n if (before.state !== \"private\") throw new Error(\"managed backend must be private before deletion\");\n const current = backendPolicy(path);\n if (current.state !== \"private\" || current.file.device !== before.file.device\n || current.file.inode !== before.file.inode || current.parent.device !== before.parent.device\n || current.parent.inode !== before.parent.inode) {\n throw new Error(\"managed backend changed before deletion\");\n }\n return deletePrivateFile(path, before.file, before.parent, \"managed backend\");\n}\n\nfunction tightenBackendPolicy(path: string, before: BackendProof, afterPin?: () => void): void {\n const current = backendPolicy(path);\n if (current.state !== \"repairable\" || current.file.device !== before.file.device\n || current.file.inode !== before.file.inode || current.parent.device !== before.parent.device\n || current.parent.inode !== before.parent.inode) {\n throw new Error(\"managed backend changed before privacy repair\");\n }\n if (process.platform === \"win32\") throw new Error(\"managed backend policy cannot be tightened safely on this platform\");\n const parentDescriptor = openSync(dirname(path), constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0));\n try {\n const parent = fstatSync(parentDescriptor);\n if (!parent.isDirectory() || parent.dev !== before.parent.device || parent.ino !== before.parent.inode\n || (typeof process.getuid === \"function\" && parent.uid !== process.getuid())) {\n throw new Error(\"managed backend parent changed during privacy repair\");\n }\n const fileDescriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const file = fstatSync(fileDescriptor);\n if (!file.isFile() || file.dev !== before.file.device || file.ino !== before.file.inode\n || (typeof process.getuid === \"function\" && file.uid !== process.getuid())) {\n throw new Error(\"managed backend changed during privacy repair\");\n }\n afterPin?.();\n fchmodSync(parentDescriptor, 0o700);\n fchmodSync(fileDescriptor, 0o600);\n const securedParent = fstatSync(parentDescriptor);\n const securedFile = fstatSync(fileDescriptor);\n if (securedParent.dev !== before.parent.device || securedParent.ino !== before.parent.inode\n || securedFile.dev !== before.file.device || securedFile.ino !== before.file.inode\n || (securedParent.mode & 0o777) !== 0o700 || (securedFile.mode & 0o777) !== 0o600) {\n throw new Error(\"managed backend changed during privacy repair\");\n }\n } finally { closeSync(fileDescriptor); }\n } finally { closeSync(parentDescriptor); }\n if (backendPolicy(path).state !== \"private\") throw new Error(\"managed backend privacy repair failed\");\n}\n\nfunction nativeContext(metadata: ManagedClientMetadata, env: NodeJS.ProcessEnv): { cwd?: string; env: NodeJS.ProcessEnv } {\n if (metadata.runtime === \"codex\") {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"codex-profile\" }>;\n return { env: { ...env, CODEX_HOME: dirname(locator.configPath) } };\n }\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n return { cwd: locator.contextPath ?? undefined, env: { ...env } };\n}\n\nfunction nativeExecute(\n metadata: ManagedClientMetadata,\n action: \"remove\" | \"add\",\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): void {\n const context = nativeContext(metadata, env);\n const executable = metadata.runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = action === \"remove\"\n ? metadata.runtime === \"codex\"\n ? [\"mcp\", \"remove\", \"agent-bridge\"]\n : [\"mcp\", \"remove\", \"agent-bridge\", \"-s\", metadata.launch.scope!]\n : metadata.runtime === \"codex\"\n ? [\n \"mcp\", \"add\", \"agent-bridge\",\n \"--env\", `AGENT_BRIDGE_AGENT=${metadata.identity}`,\n \"--env\", `AGENT_BRIDGE_INSTANCE=${metadata.instance}`,\n \"--env\", `AGENT_BRIDGE_CONFIG=${metadata.backendConfigPath}`,\n \"--\", metadata.launch.command,\n ]\n : [\n \"mcp\", \"add\", \"--scope\", metadata.launch.scope!, \"agent-bridge\",\n \"-e\", `AGENT_BRIDGE_AGENT=${metadata.identity}`,\n \"-e\", `AGENT_BRIDGE_INSTANCE=${metadata.instance}`,\n \"-e\", `AGENT_BRIDGE_CONFIG=${metadata.backendConfigPath}`,\n \"--\", metadata.launch.command,\n ];\n const result = execute(executable, args, context);\n if (result.error || result.status !== 0) {\n throw new Error(`${metadata.runtime} MCP ${action} failed`);\n }\n}\n\ninterface DesktopConfigRead {\n config: Record<string, unknown>;\n identity: { device: number; inode: number } | null;\n}\n\nfunction readDesktopConfigNoFollow(path: string): DesktopConfigRead {\n assertNoLinkedPathAncestors(path);\n if (!existsSync(path)) return { config: {}, identity: null };\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > MAX_DESKTOP_CONFIG_BYTES) {\n throw new Error(\"Claude Desktop config is not a safe regular JSON file\");\n }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > MAX_DESKTOP_CONFIG_BYTES\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n const parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Claude Desktop config is not valid JSON\");\n }\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n return { config: parsed as Record<string, unknown>, identity: { device: opened.dev, inode: opened.ino } };\n } finally { closeSync(descriptor); }\n}\n\ninterface DesktopMaintenanceHooks {\n afterTemporarySync?: () => void;\n beforeRename?: () => void;\n afterRename?: () => void;\n}\n\nfunction sameIdentity(path: string, identity: { device: number; inode: number }, message: string): void {\n const current = lstatSync(path);\n if (current.isSymbolicLink() || !current.isFile()\n || current.dev !== identity.device || current.ino !== identity.inode) {\n throw new Error(message);\n }\n}\n\nfunction temporaryIdentity(path: string, privateRequired = true): { device: number; inode: number } {\n const details = lstatSync(path);\n if (details.isSymbolicLink() || !details.isFile()\n || (typeof process.getuid === \"function\" && details.uid !== process.getuid())) {\n throw new Error(\"Claude Desktop temporary config is not safe\");\n }\n if (privateRequired && process.platform !== \"win32\" && (details.mode & 0o777) !== 0o600) {\n throw new Error(\"Claude Desktop temporary config is not private\");\n }\n if (privateRequired) verifyPrivatePathAccess(path, \"file\");\n return { device: details.dev, inode: details.ino };\n}\n\nfunction syncDesktopDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\nfunction removeKnownTemporary(path: string, identity: { device: number; inode: number } | null): void {\n if (!existsSync(path)) return;\n const current = temporaryIdentity(path);\n if (identity && (current.device !== identity.device || current.inode !== identity.inode)) {\n throw new Error(\"Claude Desktop temporary config changed during cleanup\");\n }\n rmSync(path);\n syncDesktopDirectory(dirname(path));\n}\n\nfunction mutateDesktopRegistration(\n metadata: ManagedClientMetadata,\n operationId: string,\n stepIndex: number,\n action: \"replace\" | \"remove\",\n hooks?: DesktopMaintenanceHooks,\n): void {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-desktop-config\" }>;\n const path = locator.configPath;\n const directory = dirname(path);\n assertNoLinkedPathAncestors(directory);\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n assertNoLinkedPathAncestors(path);\n const directoryInfo = lstatSync(directory);\n if (directoryInfo.isSymbolicLink() || !directoryInfo.isDirectory()) {\n throw new Error(\"Claude Desktop config directory is not safe\");\n }\n const directoryIdentity = { device: directoryInfo.dev, inode: directoryInfo.ino };\n const read = readDesktopConfigNoFollow(path);\n const servers = read.config.mcpServers;\n if (servers !== undefined && (!servers || typeof servers !== \"object\" || Array.isArray(servers))) {\n throw new Error(\"Claude Desktop mcpServers is not an object\");\n }\n const nextServers = { ...(servers as Record<string, unknown> | undefined) };\n if (action === \"replace\") {\n nextServers[\"agent-bridge\"] = {\n command: metadata.launch.command,\n args: metadata.launch.args,\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n },\n };\n } else {\n delete nextServers[\"agent-bridge\"];\n }\n const next = {\n ...read.config,\n mcpServers: nextServers,\n };\n const temporary = join(directory, `.ab-${operationId.slice(0, 8)}-${stepIndex}-${digest(path).slice(0, 12)}.tmp`);\n removeKnownTemporary(temporary, null);\n let temporaryFile: { device: number; inode: number } | null = null;\n let operationError: unknown;\n try {\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n temporaryFile = temporaryIdentity(temporary, false);\n securePrivatePath(temporary, \"file\");\n temporaryFile = temporaryIdentity(temporary);\n writeFileSync(descriptor, `${JSON.stringify(next, null, 2)}\\n`);\n fsyncSync(descriptor);\n } finally { closeSync(descriptor); }\n temporaryFile = temporaryIdentity(temporary);\n hooks?.afterTemporarySync?.();\n const currentDirectory = lstatSync(directory);\n if (currentDirectory.isSymbolicLink() || !currentDirectory.isDirectory()\n || currentDirectory.dev !== directoryIdentity.device || currentDirectory.ino !== directoryIdentity.inode) {\n throw new Error(\"Claude Desktop config directory changed before publication\");\n }\n if (read.identity) {\n sameIdentity(path, read.identity, \"Claude Desktop config changed before publication\");\n } else if (existsSync(path)) {\n throw new Error(\"Claude Desktop config appeared before publication\");\n }\n hooks?.beforeRename?.();\n if (read.identity) sameIdentity(path, read.identity, \"Claude Desktop config changed before publication\");\n else if (existsSync(path)) throw new Error(\"Claude Desktop config appeared before publication\");\n temporaryIdentity(temporary);\n renameSync(temporary, path);\n temporaryFile = null;\n hooks?.afterRename?.();\n securePrivatePath(path, \"file\");\n verifyPrivatePathAccess(path, \"file\");\n const publishedDirectory = lstatSync(directory);\n if (publishedDirectory.isSymbolicLink() || publishedDirectory.dev !== directoryIdentity.device\n || publishedDirectory.ino !== directoryIdentity.inode) {\n throw new Error(\"Claude Desktop config directory changed during publication\");\n }\n if (process.platform !== \"win32\") {\n const directoryDescriptor = openSync(directory, \"r\");\n try { fsyncSync(directoryDescriptor); } finally { closeSync(directoryDescriptor); }\n }\n const verified = readDesktopConfigNoFollow(path);\n const servers = verified.config.mcpServers as Record<string, unknown> | undefined;\n const entry = servers?.[\"agent-bridge\"] as Record<string, unknown> | undefined;\n if (action === \"remove\") {\n if (entry !== undefined) throw new Error(\"Claude Desktop registration removal was not verified\");\n } else if (!entry || entry.command !== metadata.launch.command\n || !isDeepStrictEqual(entry.args, metadata.launch.args)\n || !isDeepStrictEqual(entry.env, {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n })) {\n throw new Error(\"Claude Desktop registration postcondition was not met\");\n }\n } catch (error) {\n operationError = error;\n throw error;\n } finally {\n if (temporaryFile) {\n try { removeKnownTemporary(temporary, temporaryFile); }\n catch (error) { if (!operationError) throw error; }\n }\n }\n}\n\nfunction buildPlan(\n metadata: ManagedClientMetadata,\n target: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): PlannedStep[] {\n const steps: PlannedStep[] = [];\n const policy = backendPolicy(metadata.backendConfigPath);\n if (policy.state === \"repairable\") {\n steps.push({\n kind: \"backend\", target: \"backend\", locator: \"managed-backend-policy\",\n before: canonical(policy), after: canonical({ ...policy, state: \"private\" }),\n });\n }\n const registration = observeManagedRegistration(target, execute, env, metadata.launch.args);\n const absentRegistration: ManagedRegistrationObservation = {\n state: \"absent\", target: registration.target, observed: { state: \"absent\" },\n };\n const exactRegistration: ManagedRegistrationObservation = {\n state: \"exact\", target: registration.target,\n observed: {\n state: \"present\", command: target.launch.command, args: [...target.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: target.identity,\n AGENT_BRIDGE_INSTANCE: target.instance,\n AGENT_BRIDGE_CONFIG: target.backendConfigPath,\n },\n },\n };\n if (target.runtime === \"claude-desktop\") {\n if (registration.state !== \"exact\") {\n steps.push({\n kind: \"desktop-replace\", target: \"registration\", locator: \"claude-desktop:agent-bridge\",\n before: registrationProof(registration), after: registrationProof(exactRegistration),\n });\n }\n } else if (registration.state === \"inexact\") {\n steps.push({\n kind: \"native-remove\", target: \"registration\", locator: `${target.runtime}:agent-bridge`,\n before: registrationProof(registration), after: registrationProof(absentRegistration),\n });\n steps.push({\n kind: \"native-add\", target: \"registration\", locator: `${target.runtime}:agent-bridge`,\n before: registrationProof(absentRegistration), after: registrationProof(exactRegistration),\n });\n } else if (registration.state === \"absent\") {\n steps.push({\n kind: \"native-add\", target: \"registration\", locator: `${target.runtime}:agent-bridge`,\n before: registrationProof(absentRegistration), after: registrationProof(exactRegistration),\n });\n }\n if (!isDeepStrictEqual(metadata.launch, target.launch)) {\n steps.push({\n kind: \"metadata\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(metadata), after: metadataProof(target),\n });\n }\n return steps;\n}\n\nfunction expectedBackendAbsentFromParent(parent: { device: number; inode: number }): BackendAbsentProof {\n return {\n role: \"backend\", parent: { ...parent }, state: \"absent\",\n directoryDurability: process.platform === \"win32\" ? \"unavailable\" : \"durable\",\n };\n}\n\nfunction uninstallBackendObservation(path: string): BackendProof | BackendAbsentProof {\n try { return backendPolicy(path); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n const parent = privateDirectoryProof(dirname(path), \"managed backend directory is invalid\");\n if (!pathEntryIsAbsent(path)) throw new Error(\"managed backend appeared during uninstall planning\");\n return expectedBackendAbsentFromParent(parent);\n }\n}\n\nfunction assertUninstallPathIsolation(metadata: ManagedClientMetadata, env: NodeJS.ProcessEnv): void {\n const paths = [\n [\"backend\", metadata.backendConfigPath],\n [\"metadata\", managedClientMetadataPath(metadata.runtime, metadata.instance, env)],\n ] as Array<[string, string]>;\n if (metadata.runtime === \"claude-desktop\") {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-desktop-config\" }>;\n paths.push([\"Desktop config\", locator.configPath]);\n }\n const seen = new Map<string, string>();\n const existing = new Map<string, string>();\n for (const [role, path] of paths) {\n const resolved = resolve(path);\n const normalized = process.platform === \"win32\" ? resolved.toLowerCase() : resolved;\n const prior = seen.get(normalized);\n if (prior) throw new Error(`managed uninstall paths alias: ${prior} and ${role}`);\n seen.set(normalized, role);\n try {\n const entry = lstatSync(resolved, { bigint: true });\n const identity = `${entry.dev}:${entry.ino}`;\n const existingRole = existing.get(identity);\n if (existingRole) throw new Error(`managed uninstall paths alias: ${existingRole} and ${role}`);\n existing.set(identity, role);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n }\n}\n\nfunction buildUninstallPlan(\n metadata: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): PlannedStep[] {\n const steps: PlannedStep[] = [];\n const registration = observeManagedRegistration(metadata, execute, env, metadata.launch.args);\n const absentRegistration: ManagedRegistrationObservation = {\n state: \"absent\", target: registration.target, observed: { state: \"absent\" },\n };\n if (registration.state !== \"absent\") {\n steps.push({\n kind: metadata.runtime === \"claude-desktop\" ? \"desktop-remove\" : \"native-remove\",\n target: \"registration\", locator: `${metadata.runtime}:agent-bridge`,\n before: registrationProof(registration), after: registrationProof(absentRegistration),\n });\n }\n const backend = uninstallBackendObservation(metadata.backendConfigPath);\n if (backend.state === \"repairable\") {\n throw new Error(\"managed backend must be private before uninstall deletes it\");\n }\n if (backend.state === \"private\") {\n steps.push({\n kind: \"backend-delete\", target: \"backend\", locator: \"managed-backend-policy\",\n before: canonical(backend), after: canonical(expectedBackendAbsentProof(backend)),\n });\n }\n const metadataAbsent = expectedMetadataAbsentProof(metadata, env);\n steps.push({\n kind: \"metadata-delete\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(metadata), after: canonical(metadataAbsent),\n });\n return steps;\n}\n\nfunction buildRollbackPlan(\n forward: ManagedClientMetadata,\n prior: ManagedClientMetadata,\n): PlannedStep[] {\n const forwardRegistration = exactRegistrationObservation(forward);\n const priorRegistration = exactRegistrationObservation(prior);\n if (forward.runtime === \"claude-desktop\") {\n return [\n {\n kind: \"desktop-replace\", target: \"registration\", locator: \"claude-desktop:agent-bridge\",\n before: registrationProof(forwardRegistration), after: registrationProof(priorRegistration),\n registrationMetadata: \"source\", afterRegistrationMetadata: \"target\",\n },\n {\n kind: \"metadata\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(forward), after: metadataProof(prior),\n },\n ];\n }\n const absentForward: ManagedRegistrationObservation = {\n state: \"absent\", target: forwardRegistration.target, observed: { state: \"absent\" },\n };\n const absentPrior: ManagedRegistrationObservation = {\n state: \"absent\", target: priorRegistration.target, observed: { state: \"absent\" },\n };\n return [\n {\n kind: \"native-remove\", target: \"registration\", locator: `${forward.runtime}:agent-bridge`,\n before: registrationProof(forwardRegistration), after: registrationProof(absentForward),\n registrationMetadata: \"source\", afterRegistrationMetadata: \"source\",\n },\n {\n kind: \"native-add\", target: \"registration\", locator: `${forward.runtime}:agent-bridge`,\n before: registrationProof(absentPrior), after: registrationProof(priorRegistration),\n registrationMetadata: \"target\", afterRegistrationMetadata: \"target\",\n },\n {\n kind: \"metadata\", target: \"metadata\", locator: \"managed-client-metadata\",\n before: metadataProof(forward), after: metadataProof(prior),\n },\n ];\n}\n\nfunction rollbackExecutionStepsFromManifest(\n manifest: ClientOperationManifest,\n prior: ManagedClientMetadata,\n): PlannedStep[] {\n let registrationIndex = 0;\n return manifest.steps.map((step) => {\n if (step.target === \"metadata\") {\n return { kind: \"metadata\", target: \"metadata\", locator: step.locator, before: \"\", after: \"\" };\n }\n if (prior.runtime === \"claude-desktop\") {\n return {\n kind: \"desktop-replace\", target: \"registration\", locator: step.locator,\n before: \"\", after: \"\", registrationMetadata: \"source\", afterRegistrationMetadata: \"target\",\n };\n }\n const kind = registrationIndex++ === 0 ? \"native-remove\" : \"native-add\";\n return {\n kind, target: \"registration\", locator: step.locator, before: \"\", after: \"\",\n registrationMetadata: kind === \"native-remove\" ? \"source\" : \"target\",\n afterRegistrationMetadata: kind === \"native-remove\" ? \"source\" : \"target\",\n };\n });\n}\n\nfunction rollbackMetadataReachedAfterState(\n manifest: ClientOperationManifest | null,\n prior: ManagedClientMetadata,\n env: NodeJS.ProcessEnv,\n): boolean {\n const metadataStep = manifest?.steps.find((step) => step.target === \"metadata\");\n if (!metadataStep) return false;\n if (metadataStep.state === \"observed-applied\") return true;\n if (metadataStep.state !== \"intent-recorded\") return false;\n const current = loadManagedClientMetadata(manifest!.runtime, manifest!.instance, env);\n return isDeepStrictEqual(current, prior)\n && digest(metadataProof(current)) === metadataStep.expectedAfterSha256;\n}\n\nfunction rollbackRegistrationHasProgress(manifest: ClientOperationManifest | null): boolean {\n return manifest?.steps.some((step) => step.target === \"registration\" && step.state !== \"pending\") ?? false;\n}\n\nfunction assertForwardRollbackMetadataState(\n forward: ManagedClientMetadata,\n contract: ClientOperationRollbackContract,\n): void {\n if (digest(metadataProof(forward)) !== contract.forwardMetadataSha256) {\n throw new Error(\"managed client no longer matches the forward update metadata state\");\n }\n}\n\nfunction assertForwardRollbackRegistrationState(\n forward: ManagedClientMetadata,\n contract: ClientOperationRollbackContract,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): void {\n const registration = observeManagedRegistration(forward, execute, env);\n if (digest(registrationProof(registration)) !== contract.forwardRegistrationSha256) {\n throw new Error(\"managed client no longer matches the forward update registration state\");\n }\n}\n\nfunction executionStepsFromManifest(\n manifest: ClientOperationManifest,\n target: ManagedClientMetadata,\n action: \"repair\" | \"update\" | \"uninstall\",\n): PlannedStep[] {\n const registrationSteps = manifest.steps.filter((step) => step.target === \"registration\");\n let registrationIndex = 0;\n return manifest.steps.map((step) => {\n let kind: PlannedKind;\n if (action === \"uninstall\") {\n if (step.target === \"backend\") kind = \"backend-delete\";\n else if (step.target === \"metadata\") kind = \"metadata-delete\";\n else kind = target.runtime === \"claude-desktop\" ? \"desktop-remove\" : \"native-remove\";\n } else if (step.target === \"backend\") kind = \"backend\";\n else if (step.target === \"metadata\") kind = \"metadata\";\n else if (target.runtime === \"claude-desktop\") kind = \"desktop-replace\";\n else {\n kind = registrationSteps.length === 2 && registrationIndex++ === 0 ? \"native-remove\" : \"native-add\";\n }\n return { kind, target: step.target as PlannedStep[\"target\"], locator: step.locator, before: \"\", after: \"\" };\n });\n}\n\ninterface ObservedStep {\n proof: string;\n backend?: BackendProof;\n}\n\nfunction observedProof(\n step: PlannedStep,\n metadata: ManagedClientMetadata,\n target: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n phase: \"before\" | \"after\" = \"before\",\n): ObservedStep {\n if (step.kind === \"backend\") {\n const backend = backendPolicy(metadata.backendConfigPath);\n return { proof: canonical(backend), backend };\n }\n if (step.kind === \"backend-delete\") {\n if (!pathEntryIsAbsent(metadata.backendConfigPath)) {\n const backend = backendPolicy(metadata.backendConfigPath);\n return { proof: canonical(backend), backend };\n }\n const parent = privateDirectoryProof(dirname(metadata.backendConfigPath), \"managed backend directory is invalid\");\n return { proof: canonical(observedBackendAbsentProof(metadata.backendConfigPath, parent)) };\n }\n if (step.kind === \"metadata\") {\n return { proof: metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) };\n }\n if (step.kind === \"metadata-delete\") {\n const metadataPath = managedClientMetadataPath(metadata.runtime, metadata.instance, env);\n if (!pathEntryIsAbsent(metadataPath)) {\n return { proof: metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) };\n }\n const parent = privateDirectoryProof(dirname(metadataPath), \"managed metadata directory is invalid\");\n return { proof: canonical(observedMetadataAbsentProof(metadata.runtime, metadata.instance, env, parent)) };\n }\n const registrationRole = phase === \"after\"\n ? step.afterRegistrationMetadata ?? step.registrationMetadata\n : step.registrationMetadata;\n const registrationMetadata = registrationRole === \"source\" ? metadata : target;\n const alternateArgs = registrationRole === \"source\" ? target.launch.args : metadata.launch.args;\n return {\n proof: registrationProof(observeManagedRegistration(\n registrationMetadata, execute, env, alternateArgs,\n )),\n };\n}\n\nfunction applyStep(\n step: PlannedStep,\n observed: ObservedStep,\n metadata: ManagedClientMetadata,\n target: ManagedClientMetadata,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n operationId: string,\n stepIndex: number,\n desktopHooks?: DesktopMaintenanceHooks,\n afterBackendPin?: () => void,\n): void {\n if (step.kind === \"backend\") {\n if (!observed.backend) throw new Error(\"backend proof is unavailable\");\n tightenBackendPolicy(metadata.backendConfigPath, observed.backend, afterBackendPin);\n return;\n }\n if (step.kind === \"backend-delete\") {\n if (!observed.backend) throw new Error(\"backend proof is unavailable\");\n deleteBackend(metadata.backendConfigPath, observed.backend);\n return;\n }\n const beforeRegistration = step.registrationMetadata === \"source\" ? metadata : target;\n const afterRegistration = step.afterRegistrationMetadata === \"source\" ? metadata : target;\n if (step.kind === \"native-remove\") return nativeExecute(beforeRegistration, \"remove\", execute, env);\n if (step.kind === \"native-add\") return nativeExecute(afterRegistration, \"add\", execute, env);\n if (step.kind === \"desktop-replace\") return mutateDesktopRegistration(afterRegistration, operationId, stepIndex, \"replace\", desktopHooks);\n if (step.kind === \"desktop-remove\") return mutateDesktopRegistration(target, operationId, stepIndex, \"remove\", desktopHooks);\n if (step.kind === \"metadata-delete\") {\n deleteManagedClientMetadata(metadata, env);\n return;\n }\n const current = loadManagedClientMetadata(metadata.runtime, metadata.instance, env);\n if (!isDeepStrictEqual(current, metadata)) throw new Error(\"managed metadata changed before update\");\n writeManagedClientMetadata(managedClientMetadataPath(target.runtime, target.instance, env), target);\n const after = loadManagedClientMetadata(target.runtime, target.instance, env);\n if (!isDeepStrictEqual(after, target)) throw new Error(\"managed metadata update was not verified\");\n}\n\n/** Remove a native registration as one crash-classifiable journal step. */\nexport function removeManagedClientRegistration(\n before: ManagedClientMetadata,\n execute: ClientLifecycleExecutor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (before.runtime === \"claude-desktop\") throw new Error(\"Desktop registration removal is not a cutover transition\");\n const observed = observeManagedRegistration(before, execute, env);\n if (observed.state !== \"exact\") throw new Error(\"managed registration changed before endpoint cutover\");\n nativeExecute(before, \"remove\", execute, env);\n if (observeManagedRegistration(before, execute, env).state !== \"absent\") {\n throw new Error(\"managed registration removal was not verified\");\n }\n}\n\n/** Add a native registration as one crash-classifiable journal step. */\nexport function addManagedClientRegistration(\n after: ManagedClientMetadata,\n execute: ClientLifecycleExecutor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (after.runtime === \"claude-desktop\") throw new Error(\"Desktop registration add is not a cutover transition\");\n if (observeManagedRegistration(after, execute, env).state !== \"absent\") {\n throw new Error(\"managed registration is not absent before endpoint cutover\");\n }\n nativeExecute(after, \"add\", execute, env);\n const verified = observeManagedRegistration(after, execute, env);\n if (verified.state !== \"exact\") throw new Error(\"managed registration add was not verified\");\n}\n\n/** Desktop applies a bounded JSON replacement through its atomic publish path. */\nexport function replaceManagedDesktopRegistration(\n before: ManagedClientMetadata,\n after: ManagedClientMetadata,\n operationId: string,\n stepIndex: number,\n execute: ClientLifecycleExecutor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (before.runtime !== \"claude-desktop\" || after.runtime !== \"claude-desktop\"\n || before.instance !== after.instance || before.identity !== after.identity) {\n throw new Error(\"Desktop registration switch does not preserve client identity\");\n }\n if (observeManagedRegistration(before, execute, env).state !== \"exact\") {\n throw new Error(\"managed registration changed before endpoint cutover\");\n }\n mutateDesktopRegistration(after, operationId, stepIndex, \"replace\");\n if (observeManagedRegistration(after, execute, env).state !== \"exact\") {\n throw new Error(\"Desktop registration switch was not verified\");\n }\n}\n\n/** Write and immediately re-read the bounded management metadata after a verified switch. */\nexport function switchManagedClientMetadata(\n before: ManagedClientMetadata,\n after: ManagedClientMetadata,\n env: NodeJS.ProcessEnv = process.env,\n): void {\n const current = loadManagedClientMetadata(before.runtime, before.instance, env);\n if (!isDeepStrictEqual(current, before)) throw new Error(\"managed metadata changed before endpoint cutover\");\n writeManagedClientMetadata(managedClientMetadataPath(after.runtime, after.instance, env), after);\n if (!isDeepStrictEqual(loadManagedClientMetadata(after.runtime, after.instance, env), after)) {\n throw new Error(\"managed metadata switch was not verified\");\n }\n}\n\nfunction resumeAction(\n metadata: ManagedClientMetadata,\n manifest: ClientOperationManifest,\n command: string | undefined,\n env: NodeJS.ProcessEnv,\n action: \"repair\" | \"update\" | \"uninstall\",\n): ManagedClientMetadata {\n if (manifest.runtime !== metadata.runtime || manifest.instance !== metadata.instance) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n if (manifest.version !== 3 && manifest.version !== 4) {\n throw new Error(\"--resume requires an identity-bound operation request\");\n }\n if (action === \"repair\") {\n if (manifest.version !== 3 || !manifest.request || manifest.request.kind !== \"repair\" || !(\"identity\" in manifest.request)\n || manifest.request.identity !== metadata.identity) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n if (command !== undefined) throw new Error(\"--command is not valid for clients repair\");\n return metadata;\n }\n if (action === \"uninstall\") {\n if (manifest.version !== 3 || !manifest.request || manifest.request.kind !== \"uninstall\" || !(\"identity\" in manifest.request)\n || manifest.request.identity !== metadata.identity) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n if (command !== undefined) throw new Error(\"--command is not valid for clients uninstall\");\n return metadata;\n }\n if (!manifest.request || manifest.request.kind !== \"update\" || !(\"identity\" in manifest.request)\n || !(\"launch\" in manifest.request) || manifest.request.identity !== metadata.identity) {\n throw new Error(\"--resume does not match this client action, runtime, or instance\");\n }\n const recorded = manifest.request.launch;\n if (manifest.version === 4) assertRollbackContract(manifest.request.rollback!, metadata.runtime, metadata.instance);\n if (metadata.runtime === \"claude-desktop\") {\n const resolved = recorded.args.length === 0\n ? resolveDesktopLaunchContract(recorded.command, env)\n : resolveDesktopLaunchContract(undefined, env);\n if (resolved.command !== recorded.command || !isDeepStrictEqual(resolved.args, recorded.args)) {\n throw new Error(\"recorded Desktop update launch is invalid\");\n }\n }\n if (command !== undefined) {\n const supplied = resolveUpdateLaunch(metadata, command, env);\n if (!isDeepStrictEqual(supplied, recorded)) {\n throw new Error(\"--command does not match the recorded update request\");\n }\n }\n return updateMetadata(metadata, recorded);\n}\n\nfunction planResult(\n action: \"repair\" | \"update\" | \"uninstall\" | \"rollback\" | \"none\", applied: boolean, metadata: ManagedClientMetadata,\n steps: PlannedStep[], env: NodeJS.ProcessEnv, operationId?: string,\n): ClientMaintenancePlan {\n return {\n schemaVersion: 1, action, applied, operationId, runtime: metadata.runtime,\n instance: metadata.instance, identity: metadata.identity,\n metadataPath: managedClientMetadataPath(metadata.runtime, metadata.instance, env),\n steps: steps.map((step) => ({ target: step.target, action: step.kind })),\n };\n}\n\n/**\n * Repair, update, or forward-only uninstall one metadata-owned registration. The dry-run path does not acquire a lock,\n * create operation state, or touch the registration, backend, or metadata file.\n */\nexport function maintainManagedClient(options: ClientMaintenanceOptions): ClientMaintenancePlan {\n assertRuntime(options.runtime);\n const env = options.env ?? process.env;\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }));\n const metadata = loadManagedClientMetadata(options.runtime, options.instance, env);\n assertIdentity(metadata, options.identity);\n const authority = metadataProof(metadata);\n const requestedAction = options.action;\n if (requestedAction === \"uninstall\") assertUninstallPathIsolation(metadata, env);\n const manifest = options.resume ? readClientOperation(options.resume, env) : undefined;\n const target = manifest\n ? resumeAction(metadata, manifest, options.command, env, requestedAction)\n : requestedAction === \"update\"\n ? updateMetadata(metadata, resolveUpdateLaunch(metadata, options.command, env))\n : metadata;\n const steps = options.resume && options.apply ? []\n : requestedAction === \"uninstall\"\n ? buildUninstallPlan(metadata, execute, env)\n : buildPlan(metadata, target, execute, env);\n if (!options.apply) {\n if (options.resume || options.recoverLock) throw new Error(\"--resume and --recover-lock require --apply\");\n return planResult(steps.length === 0 ? \"none\" : requestedAction, false, metadata, steps, env);\n }\n if (options.recoverLock) recoverClientOperationLock(metadata.runtime, metadata.instance, env);\n if (steps.length === 0 && !options.resume) return planResult(\"none\", false, metadata, steps, env);\n const begun = options.resume\n ? resumeClientOperation(options.resume, env)\n : beginClientOperation({\n version: requestedAction === \"update\" ? 4 : 3,\n request: requestedAction === \"repair\"\n ? { kind: \"repair\", identity: metadata.identity }\n : requestedAction === \"update\"\n ? {\n kind: \"update\", identity: metadata.identity, launch: operationLaunch(target),\n rollback: rollbackContract(metadata, target),\n }\n : { kind: \"uninstall\", identity: metadata.identity },\n runtime: metadata.runtime, instance: metadata.instance,\n steps: steps.map((step, index) => ({\n target: step.target, locator: step.locator,\n beforeArtifact: `step-${index}.before`, afterArtifact: `step-${index}.after`,\n expectedBeforeSha256: digest(step.before), expectedAfterSha256: digest(step.after),\n })),\n }, env);\n let current = begun.manifest;\n try {\n options.testHooks?.afterLock?.();\n assertCurrentOperationManifest(current, env);\n if (metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) !== authority) {\n throw new Error(\"managed metadata changed while acquiring the client lock\");\n }\n const recordedSteps = options.resume && current.state !== \"prepared\"\n ? executionStepsFromManifest(current, target, requestedAction)\n : requestedAction === \"uninstall\"\n ? buildUninstallPlan(metadata, execute, env)\n : buildPlan(metadata, target, execute, env);\n if (recordedSteps.length !== current.steps.length) {\n throw new Error(\"operation request no longer matches the managed client state\");\n }\n if (current.state === \"prepared\") {\n if (recordedSteps.some((step, index) => digest(step.before) !== current.steps[index]?.expectedBeforeSha256\n || digest(step.after) !== current.steps[index]?.expectedAfterSha256)) {\n throw new Error(\"operation request no longer matches the managed client state\");\n }\n for (let index = 0; index < recordedSteps.length; index += 1) {\n current = writeClientOperationSnapshot(\n current.operationId, current, `step-${index}.before`, recordedSteps[index]!.before, begun.lock, env,\n );\n }\n current = transitionClientOperation(current.operationId, current, \"snapshotted\", begun.lock, env);\n }\n for (let index = 0; index < recordedSteps.length; index += 1) {\n const step = recordedSteps[index]!;\n const journalStep = current.steps[index]!;\n if (step.kind !== \"metadata\"\n && metadataProof(loadManagedClientMetadata(metadata.runtime, metadata.instance, env)) !== authority) {\n throw new Error(\"managed metadata changed before a client mutation\");\n }\n let actual = observedProof(step, metadata, target, execute, env, \"before\");\n let intentAlreadyRecorded = false;\n if (journalStep.state === \"intent-recorded\") {\n let classification = classifyClientOperationRestart(current, digest(actual.proof));\n if (classification.disposition === \"blocked\" && step.afterRegistrationMetadata\n && step.afterRegistrationMetadata !== step.registrationMetadata) {\n const after = observedProof(step, metadata, target, execute, env, \"after\");\n const afterClassification = classifyClientOperationRestart(current, digest(after.proof));\n if (afterClassification.disposition === \"advance\") {\n actual = after;\n classification = afterClassification;\n }\n }\n if (classification.disposition === \"advance\") {\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n continue;\n }\n if (classification.disposition !== \"retryable\") throw new Error(classification.reason);\n intentAlreadyRecorded = true;\n } else if (journalStep.state === \"observed-applied\") {\n const supersededByLaterStep = current.steps.slice(index + 1)\n .some((later) => later.target === journalStep.target && later.state !== \"pending\");\n if (supersededByLaterStep) continue;\n actual = observedProof(step, metadata, target, execute, env, \"after\");\n if (digest(actual.proof) !== journalStep.expectedAfterSha256) {\n throw new Error(`completed operation step ${index} no longer matches its after-state`);\n }\n continue;\n } else if (digest(actual.proof) !== journalStep.expectedBeforeSha256) {\n throw new Error(\"operation step no longer matches its before-state\");\n }\n if (!intentAlreadyRecorded) {\n current = recordClientOperationStepIntent(current.operationId, current, index, begun.lock, env);\n }\n options.testHooks?.beforeApply?.({ target: step.target, action: step.kind });\n assertCurrentOperationManifest(current, env);\n applyStep(\n step, actual, metadata, target, execute, env, current.operationId, index,\n options.testHooks?.desktop, options.testHooks?.afterBackendPin,\n );\n options.testHooks?.afterApply?.({ target: step.target, action: step.kind });\n actual = observedProof(step, metadata, target, execute, env, \"after\");\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n }\n current = completeClientOperationCleanup(current.operationId, current, begun.lock, env);\n return planResult(requestedAction, true, target, recordedSteps, env, current.operationId);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\nfunction uninstallStepAction(step: { target: \"registration\" | \"backend\" | \"metadata\" }, runtime: InstallableRuntime): PlannedKind {\n if (step.target === \"registration\") return runtime === \"claude-desktop\" ? \"desktop-remove\" : \"native-remove\";\n return step.target === \"backend\" ? \"backend-delete\" : \"metadata-delete\";\n}\n\nfunction resumeUninstallAfterMetadataDeletion(\n manifest: ClientOperationManifest,\n identity: string,\n options: ClientMaintenanceResumeOptions,\n): ClientMaintenancePlan {\n const env = options.env ?? process.env;\n if (options.recoverLock) recoverClientOperationLock(manifest.runtime, manifest.instance, env);\n const begun = resumeClientOperation(manifest.operationId, env);\n let current = begun.manifest;\n const steps = current.steps.map((step) => ({\n target: step.target as \"registration\" | \"backend\" | \"metadata\",\n action: uninstallStepAction(step as { target: \"registration\" | \"backend\" | \"metadata\" }, current.runtime),\n }));\n try {\n if (current.version !== 3 || !current.request || current.request.kind !== \"uninstall\"\n || !(\"identity\" in current.request) || current.request.identity !== identity) {\n throw new Error(\"operation is not an identity-bound uninstall request\");\n }\n const pending = current.steps.find((step) => step.state !== \"observed-applied\");\n if (pending) {\n const earlierComplete = current.steps.slice(0, pending.index).every((step) => step.state === \"observed-applied\");\n if (!earlierComplete || pending.target !== \"metadata\" || pending.state !== \"intent-recorded\") {\n throw new Error(\"managed metadata is missing before uninstall reached its final deletion step\");\n }\n const metadataPath = managedClientMetadataPath(current.runtime, current.instance, env);\n if (!pathEntryIsAbsent(metadataPath)) throw new Error(\"managed metadata reappeared during uninstall resume\");\n const parent = privateDirectoryProof(dirname(metadataPath), \"managed metadata directory is invalid\");\n const actual = canonical(observedMetadataAbsentProof(current.runtime, current.instance, env, parent));\n const classification = classifyClientOperationRestart(current, digest(actual));\n if (classification.disposition !== \"advance\") throw new Error(classification.reason);\n current = recordClientOperationStepApplied(\n current.operationId, current, pending.index, actual, begun.lock, env,\n );\n }\n current = completeClientOperationCleanup(current.operationId, current, begun.lock, env);\n return {\n schemaVersion: 1, action: \"uninstall\", applied: true, operationId: current.operationId,\n runtime: manifest.runtime, instance: manifest.instance, identity,\n metadataPath: managedClientMetadataPath(manifest.runtime, manifest.instance, env), steps,\n };\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\nfunction loadRollbackSource(\n sourceOperationId: string,\n identity: string,\n env: NodeJS.ProcessEnv,\n): { source: ClientOperationManifest; contract: ClientOperationRollbackContract; prior: ManagedClientMetadata } {\n const source = readClientOperation(sourceOperationId, env);\n if (source.state !== \"committed\" || source.version !== 4 || source.host !== hostname()) {\n throw new Error(\"rollback source must be a committed same-host v4 update\");\n }\n if (source.completion?.operation !== \"update\" || !source.completion.rollback) {\n throw new Error(\"rollback source does not retain an update inverse contract\");\n }\n const contract = source.completion.rollback;\n const { prior } = assertRollbackContract(contract, source.runtime, source.instance);\n if (!identity || identity.trim() !== identity || identity !== contract.identity) {\n throw new Error(\"--identity must exactly match the rollback source\");\n }\n return { source, contract, prior };\n}\n\nfunction assertRollbackOperationAuthority(\n manifest: ClientOperationManifest,\n sourceOperationId: string,\n identity: string,\n contract: ClientOperationRollbackContract,\n): void {\n if (manifest.version !== 4 || manifest.request?.kind !== \"rollback\"\n || manifest.request.sourceOperationId !== sourceOperationId\n || manifest.request.identity !== identity\n || canonical(manifest.request.rollback) !== canonical(contract)) {\n throw new Error(\"locked rollback operation no longer matches its committed update authority\");\n }\n}\n\nfunction rollbackPlanResult(\n applied: boolean,\n metadata: ManagedClientMetadata,\n steps: PlannedStep[],\n env: NodeJS.ProcessEnv,\n operationId?: string,\n): ClientMaintenancePlan {\n return planResult(\"rollback\", applied, metadata, steps, env, operationId);\n}\n\nfunction runManagedClientRollback(\n options: ClientRollbackOptions,\n resumeOperationId?: string,\n): ClientMaintenancePlan {\n const env = options.env ?? process.env;\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }));\n const reverse = resumeOperationId ? readClientOperation(resumeOperationId, env) : null;\n let sourceOperationId = options.sourceOperationId;\n let identity = options.identity;\n if (reverse) {\n if (reverse.version !== 4 || !reverse.request || reverse.request.kind !== \"rollback\") {\n throw new Error(\"operation is not a resumable rollback request\");\n }\n sourceOperationId = reverse.request.sourceOperationId;\n identity = reverse.request.identity;\n }\n const { source, contract, prior } = loadRollbackSource(sourceOperationId, identity, env);\n const reverseRequest = reverse?.request?.kind === \"rollback\" ? reverse.request : null;\n if (reverseRequest && canonical(reverseRequest.rollback) !== canonical(contract)) {\n throw new Error(\"rollback request no longer matches its committed source\");\n }\n const metadataStepApplied = rollbackMetadataReachedAfterState(reverse, prior, env);\n const forward = metadataStepApplied ? prior : loadManagedClientMetadata(source.runtime, source.instance, env);\n const registrationHasProgress = rollbackRegistrationHasProgress(reverse);\n if (!metadataStepApplied) {\n assertForwardRollbackMetadataState(forward, contract);\n if (!registrationHasProgress) assertForwardRollbackRegistrationState(forward, contract, execute, env);\n }\n const steps = reverse && reverse.state !== \"prepared\"\n ? rollbackExecutionStepsFromManifest(reverse, prior)\n : buildRollbackPlan(forward, prior);\n if (!options.apply) {\n if (options.recoverLock) throw new Error(\"--recover-lock requires --apply\");\n return rollbackPlanResult(false, forward, steps, env);\n }\n if (options.recoverLock) recoverClientOperationLock(source.runtime, source.instance, env);\n options.testHooks?.beforeOperationBegin?.();\n const begun = reverse\n ? resumeClientOperation(reverse.operationId, env)\n : beginClientOperation({\n version: 4,\n request: { kind: \"rollback\", identity, sourceOperationId: source.operationId, rollback: contract },\n runtime: source.runtime, instance: source.instance,\n steps: steps.map((step, index) => ({\n target: step.target, locator: step.locator,\n beforeArtifact: `step-${index}.before`, afterArtifact: `step-${index}.after`,\n expectedBeforeSha256: digest(step.before), expectedAfterSha256: digest(step.after),\n })),\n }, env);\n let current = begun.manifest;\n try {\n assertRollbackOperationAuthority(current, source.operationId, identity, contract);\n options.testHooks?.afterLock?.();\n assertCurrentOperationManifest(current, env);\n const refreshed = loadRollbackSource(source.operationId, identity, env);\n if (canonical(refreshed.contract) !== canonical(contract)) {\n throw new Error(\"rollback source changed while acquiring the client lock\");\n }\n const metadataApplied = rollbackMetadataReachedAfterState(current, prior, env);\n const currentForward = metadataApplied ? prior : loadManagedClientMetadata(source.runtime, source.instance, env);\n const currentRegistrationHasProgress = rollbackRegistrationHasProgress(current);\n if (!metadataApplied) {\n assertForwardRollbackMetadataState(currentForward, contract);\n if (!currentRegistrationHasProgress) assertForwardRollbackRegistrationState(currentForward, contract, execute, env);\n }\n const recordedSteps = current.state === \"prepared\"\n ? buildRollbackPlan(currentForward, prior)\n : rollbackExecutionStepsFromManifest(current, prior);\n if (recordedSteps.length !== current.steps.length) {\n throw new Error(\"rollback request no longer matches the recorded operation plan\");\n }\n if (current.state === \"prepared\") {\n if (recordedSteps.some((step, index) => digest(step.before) !== current.steps[index]?.expectedBeforeSha256\n || digest(step.after) !== current.steps[index]?.expectedAfterSha256)) {\n throw new Error(\"rollback request no longer matches the forward update state\");\n }\n for (let index = 0; index < recordedSteps.length; index += 1) {\n current = writeClientOperationSnapshot(\n current.operationId, current, `step-${index}.before`, recordedSteps[index]!.before, begun.lock, env,\n );\n }\n current = transitionClientOperation(current.operationId, current, \"snapshotted\", begun.lock, env);\n }\n const forwardMetadataAuthority = contract.forwardMetadataSha256;\n for (let index = 0; index < recordedSteps.length; index += 1) {\n const step = recordedSteps[index]!;\n const journalStep = current.steps[index]!;\n if (step.kind !== \"metadata\" && journalStep.state !== \"observed-applied\"\n && digest(metadataProof(loadManagedClientMetadata(source.runtime, source.instance, env))) !== forwardMetadataAuthority) {\n throw new Error(\"managed metadata changed before rollback mutated a client registration\");\n }\n let actual = observedProof(step, currentForward, prior, execute, env, \"before\");\n let intentAlreadyRecorded = false;\n if (journalStep.state === \"intent-recorded\") {\n let classification = classifyClientOperationRestart(current, digest(actual.proof));\n if (classification.disposition === \"blocked\" && step.afterRegistrationMetadata\n && step.afterRegistrationMetadata !== step.registrationMetadata) {\n const after = observedProof(step, currentForward, prior, execute, env, \"after\");\n const afterClassification = classifyClientOperationRestart(current, digest(after.proof));\n if (afterClassification.disposition === \"advance\") {\n actual = after;\n classification = afterClassification;\n }\n }\n if (classification.disposition === \"advance\") {\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n continue;\n }\n if (classification.disposition !== \"retryable\") throw new Error(classification.reason);\n intentAlreadyRecorded = true;\n } else if (journalStep.state === \"observed-applied\") {\n const supersededByLaterStep = current.steps.slice(index + 1)\n .some((later) => later.target === journalStep.target && later.state !== \"pending\");\n if (supersededByLaterStep) continue;\n actual = observedProof(step, currentForward, prior, execute, env, \"after\");\n if (digest(actual.proof) !== journalStep.expectedAfterSha256) {\n throw new Error(`completed rollback step ${index} no longer matches its after-state`);\n }\n continue;\n } else if (digest(actual.proof) !== journalStep.expectedBeforeSha256) {\n throw new Error(\"rollback step no longer matches its before-state\");\n }\n if (!intentAlreadyRecorded) {\n current = recordClientOperationStepIntent(current.operationId, current, index, begun.lock, env);\n }\n options.testHooks?.beforeApply?.({ target: step.target, action: step.kind });\n assertCurrentOperationManifest(current, env);\n applyStep(\n step, actual, currentForward, prior, execute, env, current.operationId, index,\n options.testHooks?.desktop, options.testHooks?.afterBackendPin,\n );\n options.testHooks?.afterApply?.({ target: step.target, action: step.kind });\n actual = observedProof(step, currentForward, prior, execute, env, \"after\");\n current = recordClientOperationStepApplied(current.operationId, current, index, actual.proof, begun.lock, env);\n }\n current = completeClientOperationCleanup(current.operationId, current, begun.lock, env);\n return rollbackPlanResult(true, prior, recordedSteps, env, current.operationId);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\n/** Plan or explicitly apply one update-only reverse journal. */\nexport function rollbackManagedClient(options: ClientRollbackOptions): ClientMaintenancePlan {\n return runManagedClientRollback(options);\n}\n\n/** Resume exactly one supported managed-client operation using recorded authority only. */\nexport function resumeManagedClientOperation(options: ClientMaintenanceResumeOptions): ClientMaintenancePlan {\n const env = options.env ?? process.env;\n const manifest = readClientOperation(options.operationId, env);\n if (manifest.version === 4 && manifest.request?.kind === \"rollback\") {\n return runManagedClientRollback({\n sourceOperationId: manifest.request.sourceOperationId, identity: manifest.request.identity,\n apply: true, recoverLock: options.recoverLock, env, execute: options.execute, testHooks: options.testHooks,\n }, manifest.operationId);\n }\n if (!manifest.request || ![\"repair\", \"update\", \"uninstall\"].includes(manifest.request.kind)\n || !(\"identity\" in manifest.request)\n || (manifest.version !== 3 && manifest.version !== 4)\n || (manifest.version === 4 && manifest.request.kind !== \"update\")) {\n throw new Error(\"operation is not a resumable identity-bound managed client request\");\n }\n const action = manifest.request.kind as \"repair\" | \"update\" | \"uninstall\";\n const identity = manifest.request.identity;\n const metadataPath = managedClientMetadataPath(manifest.runtime, manifest.instance, env);\n if (action === \"uninstall\" && pathEntryIsAbsent(metadataPath)) {\n return resumeUninstallAfterMetadataDeletion(manifest, identity, options);\n }\n return maintainManagedClient({\n action, runtime: manifest.runtime, instance: manifest.instance, identity,\n apply: true, resume: manifest.operationId, recoverLock: options.recoverLock,\n env, execute: options.execute, testHooks: options.testHooks,\n });\n}\n\nexport function repairManagedClient(options: Omit<ClientMaintenanceOptions, \"command\" | \"action\">): ClientMaintenancePlan {\n return maintainManagedClient({ ...options, action: \"repair\" });\n}\n\nexport function updateManagedClient(options: Omit<ClientMaintenanceOptions, \"action\">): ClientMaintenancePlan {\n return maintainManagedClient({ ...options, action: \"update\" });\n}\n\nexport function uninstallManagedClient(options: Omit<ClientMaintenanceOptions, \"command\" | \"action\">): ClientMaintenancePlan {\n return maintainManagedClient({ ...options, action: \"uninstall\" });\n}\n","import {\n closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync,\n linkSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir, hostname } from \"node:os\";\nimport { basename, dirname, isAbsolute, join, parse, relative, resolve, sep } from \"node:path\";\nimport {\n createPrivateDirectoryAccessCache, PrivatePathError, securePrivatePath, type PrivateDirectoryAccessCache,\n verifyPrivatePathAccess,\n} from \"./private-path.js\";\nimport type { InstallableRuntime } from \"./client-installer.js\";\n\nexport const CLIENT_OPERATION_SCHEMA = \"agent-bridge.client-operation\";\nexport const CLIENT_OPERATION_VERSION = 6;\nexport type ClientOperationVersion = 2 | 3 | 4 | 5 | typeof CLIENT_OPERATION_VERSION;\nexport type ClientOperationState =\n | \"prepared\" | \"snapshotted\" | \"in-progress\" | \"applied\" | \"cleaning\" | \"committed\";\nexport type ClientOperationKind = \"repair\" | \"update\" | \"uninstall\" | \"rollback\" | \"migrate\"\n | \"migrate-cutover\" | \"migrate-finalize\";\nexport interface ClientOperationLaunch {\n command: string;\n args: string[];\n scope: \"local\" | \"user\" | \"project\" | null;\n envKeys: [\"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\"];\n}\nexport interface ClientOperationManagedMetadata {\n schema: \"agent-bridge.client-management\";\n version: 1;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: { command: string; args: string[]; scope: \"local\" | \"user\" | \"project\" | null };\n locator:\n | { kind: \"codex-profile\"; configPath: string }\n | { kind: \"claude-code-scope\"; scope: \"local\" | \"user\" | \"project\"; contextPath: string | null }\n | { kind: \"claude-desktop-config\"; configPath: string };\n}\nexport interface ClientOperationRegistrationProof {\n state: \"exact\";\n target: {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: ClientOperationManagedMetadata[\"launch\"];\n locator: ClientOperationManagedMetadata[\"locator\"];\n };\n observed: {\n state: \"present\";\n command: string;\n args: string[];\n env: {\n AGENT_BRIDGE_AGENT: string;\n AGENT_BRIDGE_CONFIG: string;\n AGENT_BRIDGE_INSTANCE: string;\n };\n };\n}\nexport interface ClientOperationRollbackContract {\n schema: \"agent-bridge.client-update-rollback\";\n version: 1;\n identity: string;\n priorMetadata: ClientOperationManagedMetadata;\n priorRegistration: ClientOperationRegistrationProof;\n forwardMetadataSha256: string;\n forwardRegistrationSha256: string;\n}\n/** Credential-free request for a staged gateway target. It never authorizes a host switch. */\nexport interface ClientMigrationStageRequest {\n kind: \"migrate\";\n identity: string;\n enrollmentPath: string;\n enrollmentRequestId: string;\n sourceBackendPath: string;\n sourceEdgeDatabasePath: string;\n sourceScopeKey: string;\n targetBackendPath: string;\n stageRecordPath: string;\n predecessorGraceUntil: string;\n targetWorkspace: string;\n sourceEndpointSha256: string;\n targetEndpointSha256: string;\n predecessorCredentialId: string;\n successorCredentialId: string;\n}\n/** Credential-free authority for one v6 endpoint transition. */\nexport interface ClientMigrationCutoverRequest extends Omit<ClientMigrationStageRequest, \"kind\"> {\n kind: \"migrate-cutover\" | \"migrate-finalize\";\n /** The manifest ID selected before the request is journaled. */\n migrationOperationId: string;\n stageOperationId: string;\n /** The completed forward cutover that authorizes finalization. */\n sourceCutoverOperationId: string | null;\n /** Exact target edge selected from the staged private backend before journaling. */\n targetEdgeDatabasePath: string;\n /** Credential-free normalized source route retained for successor-only recovery. */\n sourceGatewayUrl: string;\n gatewayAuthorityId: string;\n /** Operator acknowledgement that unmanaged publishers cannot be enumerated. */\n exclusiveEdgeAssertion: true;\n /** The bounded v5 source of authority. It is retained through every v6 phase. */\n stageContract: ClientMigrationStageContract;\n /** Full credential-free source and target registration contracts. */\n sourceMetadata: ClientOperationManagedMetadata;\n targetMetadata: ClientOperationManagedMetadata;\n sourceRegistration: ClientOperationRegistrationProof;\n targetRegistration: ClientOperationRegistrationProof;\n sourceMetadataSha256: string;\n targetMetadataSha256: string;\n sourceRegistrationSha256: string;\n targetRegistrationSha256: string;\n}\n/** Immutable, credential-free bridge from an inert v5 stage into v6. */\nexport interface ClientMigrationStageContract {\n schema: \"agent-bridge.client-migration-stage-contract\";\n version: 1;\n stageOperationId: string;\n request: ClientMigrationStageRequest;\n stageRecordSha256: string;\n targetBackendProjectionSha256: string;\n}\nexport type ClientOperationRequest =\n | { kind: \"repair\"; identity: string }\n | { kind: \"update\"; identity: string; launch: ClientOperationLaunch; rollback?: ClientOperationRollbackContract }\n | { kind: \"uninstall\"; identity: string }\n | { kind: \"rollback\"; identity: string; sourceOperationId: string; rollback: ClientOperationRollbackContract }\n | ClientMigrationStageRequest\n | ClientMigrationCutoverRequest;\ntype LegacyClientOperationRequest =\n | { kind: \"repair\" }\n | { kind: \"update\"; release: string }\n | { kind: \"uninstall\" }\n | { kind: \"migrate\"; endpoint: string; workspace: string };\ntype RecordedClientOperationRequest = ClientOperationRequest | LegacyClientOperationRequest;\nexport interface ClientOperationCompletion {\n operation: ClientOperationKind;\n stepCount: number;\n completedAt: string;\n cleanupDirectoryDurability: \"durable\" | \"unavailable\";\n rollback?: ClientOperationRollbackContract | null;\n /** Retains only credential-free v5/v6 migration authority after cleanup. */\n migration?: ClientMigrationStageContract | ClientMigrationCutoverRequest | null;\n}\nexport type ClientOperationTargetKind = \"registration\" | \"backend\" | \"metadata\"\n | \"stage-backend\" | \"stage-record\" | \"enrollment\" | \"edge-gate\";\nexport type ClientOperationStepState = \"pending\" | \"intent-recorded\" | \"observed-applied\";\n\nexport interface ClientOperationStep {\n index: number;\n target: ClientOperationTargetKind;\n locator: string;\n beforeArtifact: string;\n afterArtifact: string;\n expectedBeforeSha256: string;\n expectedAfterSha256: string;\n state: ClientOperationStepState;\n intentRecordedAt: string | null;\n observedAppliedAt: string | null;\n}\n\nexport interface ClientOperationArtifact {\n name: string;\n stepIndex: number;\n phase: \"before\" | \"after\";\n bytes: number;\n sha256: string;\n cleanupIntentAt: string | null;\n removedAt: string | null;\n directoryDurability: \"durable\" | \"unavailable\" | null;\n}\n\nexport interface ClientOperationManifest {\n schema: typeof CLIENT_OPERATION_SCHEMA;\n version: ClientOperationVersion;\n operationId: string;\n request: RecordedClientOperationRequest | null;\n runtime: InstallableRuntime;\n instance: string;\n state: ClientOperationState;\n revision: number;\n host: string;\n createdAt: string;\n updatedAt: string;\n completion: ClientOperationCompletion | null;\n artifacts: ClientOperationArtifact[];\n steps: ClientOperationStep[];\n}\n\nexport interface ClientOperationSummary {\n /** Version of the inspected durable manifest, including retained v5 stages. */\n schemaVersion: ClientOperationVersion;\n operationId: string;\n operation: ClientOperationKind | null;\n runtime: InstallableRuntime | null;\n instance: string | null;\n state: ClientOperationState | \"corrupt\";\n inspectionState: \"resumable\" | \"classification-required\" | \"blocked\" | \"complete\";\n revision: number | null;\n createdAt: string | null;\n updatedAt: string | null;\n completedAt: string | null;\n cleanupDirectoryDurability: \"durable\" | \"unavailable\" | null;\n artifacts: ClientOperationArtifact[];\n pendingStep: number | null;\n recoverable: boolean;\n reason: string;\n}\n\nexport interface ClientOperationLock {\n readonly runtime: InstallableRuntime;\n readonly instance: string;\n readonly lockPath: string;\n readonly descriptor: number;\n readonly device: number;\n readonly inode: number;\n released: boolean;\n}\n\nexport class ClientOperationError extends Error {\n constructor(readonly code: string, message: string) { super(message); this.name = \"ClientOperationError\"; }\n}\n\nconst operationLockPrivatePathCaches = new WeakMap<ClientOperationLock, PrivateDirectoryAccessCache>();\n\nfunction privatePathCacheForLock(lock: ClientOperationLock): PrivateDirectoryAccessCache {\n const cache = operationLockPrivatePathCaches.get(lock);\n if (!cache) fail(\"LOCK_REPLACED\", \"client lock is no longer held\");\n return cache;\n}\n\nexport type ClientOperationFilesystemEvent =\n | \"before-publish-rename\" | \"after-publish-rename\" | \"before-publish-link\"\n | \"after-publish-link\" | \"before-directory-sync\"\n | \"before-cleanup\" | \"after-snapshot-directory-read\" | \"before-snapshot-file-open\"\n | \"after-snapshots-created\" | \"before-lock-remove\"\n | \"after-cleanup-intent\" | \"before-artifact-unlink\" | \"after-artifact-unlink\"\n | \"after-artifact-directory-sync\" | \"before-cleanup-commit\";\nexport interface ClientOperationFilesystem {\n hook(event: ClientOperationFilesystemEvent, path: string): void;\n link(source: string, target: string): void;\n rename(source: string, target: string): void;\n remove(path: string, options?: { force?: boolean; recursive?: boolean }): void;\n syncDirectory(path: string): void;\n}\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst MAX_MANIFEST_BYTES = 1024 * 1024;\nconst MAX_LOCK_BYTES = 16 * 1024;\nconst MAX_OPERATION_STEPS = 128;\nconst MAX_OPERATION_ARTIFACTS = MAX_OPERATION_STEPS * 2;\nconst MAX_LISTED_OPERATIONS = 1000;\nconst MAX_SNAPSHOT_BYTES = 16 * 1024 * 1024;\nconst MAX_TOTAL_SNAPSHOT_BYTES = 64 * 1024 * 1024;\nconst STATES: ClientOperationState[] = [\"prepared\", \"snapshotted\", \"in-progress\", \"applied\", \"cleaning\", \"committed\"];\nconst OPERATIONS: ClientOperationKind[] = [\n \"repair\", \"update\", \"uninstall\", \"rollback\", \"migrate\",\n \"migrate-cutover\", \"migrate-finalize\",\n];\nconst RUNTIMES: InstallableRuntime[] = [\"codex\", \"claude-code\", \"claude-desktop\"];\nconst RESUMABLE_OPERATION_KINDS: Readonly<Record<ClientOperationVersion, ReadonlySet<ClientOperationKind>>> = {\n 2: new Set(),\n 3: new Set([\"repair\", \"update\", \"uninstall\"]),\n 4: new Set([\"update\", \"rollback\"]),\n 5: new Set([\"migrate\"]),\n 6: new Set([\"migrate-cutover\", \"migrate-finalize\"]),\n};\n\nfunction fail(code: string, message: string): never { throw new ClientOperationError(code, message); }\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\nconst filesystemDefaults: ClientOperationFilesystem = {\n hook: () => {}, link: linkSync, rename: renameSync, remove: rmSync,\n syncDirectory,\n};\nfunction safeText(value: unknown, label: string, maximum = 128): string {\n if (typeof value !== \"string\" || !value || value !== value.trim()\n || value.length > maximum || /[\\u0000-\\u001f\\u007f]/.test(value)) fail(\"INVALID_MANIFEST\", `${label} is invalid`);\n return value;\n}\nfunction safeIdentity(value: unknown): string {\n return safeText(value, \"identity\", 128);\n}\nfunction safeNativeLaunchCommand(value: unknown): string {\n const command = safeText(value, \"launch command\", 1024);\n if (/[?=#]/.test(command) || /:\\/\\//.test(command)\n || (!isAbsolute(command) && /\\s/.test(command))) {\n fail(\"INVALID_MANIFEST\", \"launch command is invalid\");\n }\n return command;\n}\nfunction rejectLinks(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const part of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, part);\n try {\n if (lstatSync(current).isSymbolicLink()) fail(\"INSECURE_PATH\", \"operation paths cannot contain links\");\n } catch (error) {\n if (error instanceof ClientOperationError) throw error;\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") break;\n fail(\"INSECURE_PATH\", \"operation path ancestry is unavailable\");\n }\n }\n}\nfunction privateDirectory(path: string, cache?: PrivateDirectoryAccessCache): { device: number; inode: number } {\n rejectLinks(path);\n let details;\n try { details = lstatSync(path); } catch { fail(\"INSECURE_PATH\", \"operation directory is unavailable\"); }\n if (!details.isDirectory() || details.isSymbolicLink()) fail(\"INSECURE_PATH\", \"operation directory is invalid\");\n try {\n if (cache) cache.verify(path);\n else verifyPrivatePathAccess(path, \"directory\");\n } catch (error) {\n if (error instanceof PrivatePathError && error.code === \"PATH_REPLACED\") {\n fail(\"PATH_REPLACED\", \"operation directory changed during access\");\n }\n fail(\"INSECURE_PATH\", \"operation directory is not owner-private\");\n }\n return { device: details.dev, inode: details.ino };\n}\nfunction sameDirectory(path: string, identity: { device: number; inode: number }, cache?: PrivateDirectoryAccessCache): void {\n const current = privateDirectory(path, cache);\n if (current.device !== identity.device || current.inode !== identity.inode) {\n fail(\"PATH_REPLACED\", \"operation directory changed during access\");\n }\n}\nfunction prepareDirectory(path: string, cache?: PrivateDirectoryAccessCache): void {\n rejectLinks(path);\n mkdirSync(path, { recursive: true, mode: 0o700 });\n try {\n if (cache) cache.secure(path);\n else securePrivatePath(path, \"directory\");\n } catch { fail(\"INSECURE_PATH\", \"operation directory is not owner-private\"); }\n privateDirectory(path, cache);\n}\n\nexport function clientOperationRoot(env: NodeJS.ProcessEnv = process.env): string {\n if (env.AGENT_BRIDGE_OPERATION_DIR) return resolve(env.AGENT_BRIDGE_OPERATION_DIR);\n return join(realpathSync(env.HOME ?? homedir()), \".agent-bridge\", \"operations\");\n}\nfunction prepareRoot(env: NodeJS.ProcessEnv, cache?: PrivateDirectoryAccessCache): string {\n const root = clientOperationRoot(env);\n prepareDirectory(root, cache);\n prepareDirectory(join(root, \"locks\"), cache);\n return root;\n}\n\ninterface PinnedOperationRoot {\n root: string;\n rootIdentity: { device: number; inode: number };\n locks: string;\n locksIdentity: { device: number; inode: number };\n}\n\nfunction pinOperationRoot(env: NodeJS.ProcessEnv, create: boolean, cache?: PrivateDirectoryAccessCache): PinnedOperationRoot {\n const root = clientOperationRoot(env);\n if (create) prepareRoot(env, cache);\n const rootIdentity = privateDirectory(root, cache);\n const locks = join(root, \"locks\");\n const locksIdentity = privateDirectory(locks, cache);\n sameDirectory(root, rootIdentity, cache);\n return { root, rootIdentity, locks, locksIdentity };\n}\n\nfunction assertPinnedRoot(pinned: PinnedOperationRoot, cache?: PrivateDirectoryAccessCache): void {\n sameDirectory(pinned.root, pinned.rootIdentity, cache);\n sameDirectory(pinned.locks, pinned.locksIdentity, cache);\n}\nfunction operationDirectory(operationId: string, env: NodeJS.ProcessEnv): string {\n if (!UUID.test(operationId)) fail(\"INVALID_OPERATION_ID\", \"operation id is invalid\");\n return join(clientOperationRoot(env), operationId.toLowerCase());\n}\nfunction verifyInsideRoot(path: string, env: NodeJS.ProcessEnv, cache?: PrivateDirectoryAccessCache): void {\n const root = clientOperationRoot(env);\n const inside = relative(root, resolve(path));\n if (!inside || inside === \"..\" || inside.startsWith(`..${sep}`)) fail(\"INSECURE_PATH\", \"operation path is outside the operation root\");\n privateDirectory(root, cache);\n}\nfunction manifestPath(operationId: string, env: NodeJS.ProcessEnv): string {\n return join(operationDirectory(operationId, env), \"manifest.json\");\n}\nfunction validateArtifact(value: unknown): ClientOperationArtifact {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const artifact = value as Record<string, unknown>;\n const name = safeText(artifact.name, \"artifact name\", 80);\n const timestamp = (item: unknown): item is string | null => item === null\n || (typeof item === \"string\" && Number.isFinite(Date.parse(item)));\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name) || name.includes(\"..\")) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (!Number.isSafeInteger(artifact.stepIndex) || Number(artifact.stepIndex) < 0\n || ![\"before\", \"after\"].includes(String(artifact.phase))\n || !Number.isSafeInteger(artifact.bytes) || Number(artifact.bytes) < 0\n || Number(artifact.bytes) > MAX_SNAPSHOT_BYTES\n || typeof artifact.sha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(artifact.sha256)\n || !timestamp(artifact.cleanupIntentAt) || !timestamp(artifact.removedAt)\n || ![null, \"durable\", \"unavailable\"].includes(artifact.directoryDurability as null | string)\n || (artifact.removedAt !== null && artifact.cleanupIntentAt === null)\n || (artifact.removedAt !== null && artifact.directoryDurability === null)\n || (artifact.removedAt === null && artifact.directoryDurability !== null)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n name, stepIndex: Number(artifact.stepIndex), phase: artifact.phase as \"before\" | \"after\",\n bytes: Number(artifact.bytes), sha256: artifact.sha256,\n cleanupIntentAt: artifact.cleanupIntentAt as string | null,\n removedAt: artifact.removedAt as string | null,\n directoryDurability: artifact.directoryDurability as \"durable\" | \"unavailable\" | null,\n };\n}\nfunction validateStep(value: unknown, index: number, version: ClientOperationVersion): ClientOperationStep {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const step = value as Record<string, unknown>;\n const targets: ClientOperationTargetKind[] = version === 5\n ? [\"stage-backend\", \"stage-record\", \"enrollment\"]\n : version === 6\n ? [\"edge-gate\", \"registration\", \"metadata\"]\n : [\"registration\", \"backend\", \"metadata\"];\n const states: ClientOperationStepState[] = [\"pending\", \"intent-recorded\", \"observed-applied\"];\n const locator = safeText(step.locator, \"step locator\", 512);\n const beforeArtifact = safeText(step.beforeArtifact, \"before artifact\", 80);\n const afterArtifact = safeText(step.afterArtifact, \"after artifact\", 80);\n const digest = (item: unknown): item is string => typeof item === \"string\" && /^[0-9a-f]{64}$/.test(item);\n const timestamp = (item: unknown): item is string | null => item === null\n || (typeof item === \"string\" && Number.isFinite(Date.parse(item)));\n if (step.index !== index || !targets.includes(step.target as ClientOperationTargetKind)\n || !states.includes(step.state as ClientOperationStepState)\n || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(beforeArtifact) || beforeArtifact.includes(\"..\")\n || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(afterArtifact) || afterArtifact.includes(\"..\")\n || beforeArtifact === afterArtifact\n || !digest(step.expectedBeforeSha256) || !digest(step.expectedAfterSha256)\n || !timestamp(step.intentRecordedAt) || !timestamp(step.observedAppliedAt)\n || (step.state === \"pending\" && (step.intentRecordedAt !== null || step.observedAppliedAt !== null))\n || (step.state === \"intent-recorded\" && (step.intentRecordedAt === null || step.observedAppliedAt !== null))\n || (step.state === \"observed-applied\" && (step.intentRecordedAt === null || step.observedAppliedAt === null))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n index, target: step.target as ClientOperationTargetKind, locator, beforeArtifact, afterArtifact,\n expectedBeforeSha256: step.expectedBeforeSha256, expectedAfterSha256: step.expectedAfterSha256,\n state: step.state as ClientOperationStepState,\n intentRecordedAt: step.intentRecordedAt as string | null,\n observedAppliedAt: step.observedAppliedAt as string | null,\n };\n}\n\nfunction safeAbsolutePath(value: unknown, label: string): string {\n const path = safeText(value, label, 4096);\n if (!isAbsolute(path) || resolve(path) !== path) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return path;\n}\n\nfunction validateOperationLocator(\n runtime: InstallableRuntime,\n value: unknown,\n): ClientOperationManagedMetadata[\"locator\"] {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const locator = value as Record<string, unknown>;\n if (runtime === \"codex\") {\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\" || locator.kind !== \"codex-profile\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const configPath = safeAbsolutePath(locator.configPath, \"locator configPath\");\n if (!configPath.endsWith(\"/config.toml\") && !configPath.endsWith(\"\\\\config.toml\")) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { kind: \"codex-profile\", configPath };\n }\n if (runtime === \"claude-code\") {\n if (Object.keys(locator).sort().join(\",\") !== \"contextPath,kind,scope\"\n || locator.kind !== \"claude-code-scope\"\n || ![\"local\", \"user\", \"project\"].includes(String(locator.scope))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const scope = locator.scope as \"local\" | \"user\" | \"project\";\n if ((scope === \"user\" && locator.contextPath !== null)\n || (scope !== \"user\" && typeof locator.contextPath !== \"string\")) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n kind: \"claude-code-scope\", scope,\n contextPath: scope === \"user\" ? null : safeAbsolutePath(locator.contextPath, \"locator contextPath\"),\n };\n }\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\" || locator.kind !== \"claude-desktop-config\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { kind: \"claude-desktop-config\", configPath: safeAbsolutePath(locator.configPath, \"locator configPath\") };\n}\n\nfunction validateOperationMetadata(\n value: unknown,\n runtime?: InstallableRuntime,\n instance?: string,\n): ClientOperationManagedMetadata {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const metadata = value as Record<string, unknown>;\n if (Object.keys(metadata).sort().join(\",\")\n !== \"backendConfigPath,identity,instance,launch,locator,runtime,schema,version\"\n || metadata.schema !== \"agent-bridge.client-management\" || metadata.version !== 1\n || !RUNTIMES.includes(metadata.runtime as InstallableRuntime)\n || (runtime !== undefined && metadata.runtime !== runtime)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const recordedRuntime = metadata.runtime as InstallableRuntime;\n const identity = safeIdentity(metadata.identity);\n const recordedInstance = safeText(metadata.instance, \"instance\", 128);\n if (instance !== undefined && recordedInstance !== instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const backendConfigPath = safeAbsolutePath(metadata.backendConfigPath, \"backend config path\");\n if (!metadata.launch || typeof metadata.launch !== \"object\" || Array.isArray(metadata.launch)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const launch = metadata.launch as Record<string, unknown>;\n if (Object.keys(launch).sort().join(\",\") !== \"args,command,scope\"\n || !Array.isArray(launch.args) || launch.args.length > 16\n || launch.args.some((arg) => {\n try { safeText(arg, \"launch argument\", 1024); return false; } catch { return true; }\n })\n || ![null, \"local\", \"user\", \"project\"].includes(launch.scope as null | string)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const locator = validateOperationLocator(recordedRuntime, metadata.locator);\n const command = safeText(launch.command, \"launch command\", 4096);\n const scope = launch.scope as \"local\" | \"user\" | \"project\" | null;\n if ((recordedRuntime !== \"claude-code\" && scope !== null)\n || (recordedRuntime === \"claude-code\"\n && scope !== (locator as Extract<ClientOperationManagedMetadata[\"locator\"], { kind: \"claude-code-scope\" }>).scope)\n || ((recordedRuntime === \"codex\" || recordedRuntime === \"claude-code\") && launch.args.length !== 0)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (recordedRuntime === \"codex\" || recordedRuntime === \"claude-code\") safeNativeLaunchCommand(command);\n if (recordedRuntime === \"claude-desktop\" && !isAbsolute(command)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return {\n schema: \"agent-bridge.client-management\", version: 1, runtime: recordedRuntime, identity, instance: recordedInstance,\n backendConfigPath, launch: { command, args: [...launch.args] as string[], scope }, locator,\n };\n}\n\nfunction canonical(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n if (!value || typeof value !== \"object\") return JSON.stringify(value);\n return `{${Object.keys(value as Record<string, unknown>).sort()\n .map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\n\nfunction sameCanonicalValue(left: unknown, right: unknown): boolean {\n return canonical(left) === canonical(right);\n}\n\nfunction canonicalDigest(value: unknown): string {\n return createHash(\"sha256\").update(canonical(value)).digest(\"hex\");\n}\n\nfunction exactRegistrationProof(metadata: ClientOperationManagedMetadata): ClientOperationRegistrationProof {\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n },\n },\n };\n}\n\nfunction forwardMetadataFromUpdate(\n prior: ClientOperationManagedMetadata,\n launch: ClientOperationLaunch,\n): ClientOperationManagedMetadata {\n return {\n ...prior,\n launch: { command: launch.command, args: [...launch.args], scope: launch.scope },\n };\n}\n\nfunction validateRegistrationProof(\n value: unknown,\n metadata: ClientOperationManagedMetadata,\n): ClientOperationRegistrationProof {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const proof = value as Record<string, unknown>;\n if (Object.keys(proof).sort().join(\",\") !== \"observed,state,target\" || proof.state !== \"exact\"\n || !proof.target || typeof proof.target !== \"object\" || Array.isArray(proof.target)\n || !proof.observed || typeof proof.observed !== \"object\" || Array.isArray(proof.observed)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const target = proof.target as Record<string, unknown>;\n if (Object.keys(target).sort().join(\",\") !== \"backendConfigPath,identity,instance,launch,locator,runtime\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const targetMetadata = validateOperationMetadata({\n schema: \"agent-bridge.client-management\", version: 1,\n runtime: target.runtime, identity: target.identity, instance: target.instance,\n backendConfigPath: target.backendConfigPath, launch: target.launch, locator: target.locator,\n }, metadata.runtime, metadata.instance);\n if (!sameCanonicalValue(targetMetadata, metadata)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const observed = proof.observed as Record<string, unknown>;\n if (Object.keys(observed).sort().join(\",\") !== \"args,command,env,state\" || observed.state !== \"present\"\n || safeText(observed.command, \"registration command\", 4096) !== metadata.launch.command\n || !Array.isArray(observed.args) || !sameCanonicalValue(observed.args, metadata.launch.args)\n || !observed.env || typeof observed.env !== \"object\" || Array.isArray(observed.env)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const env = observed.env as Record<string, unknown>;\n if (Object.keys(env).sort().join(\",\") !== \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\"\n || env.AGENT_BRIDGE_AGENT !== metadata.identity\n || env.AGENT_BRIDGE_CONFIG !== metadata.backendConfigPath\n || env.AGENT_BRIDGE_INSTANCE !== metadata.instance) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n },\n },\n };\n}\n\nfunction validateRollbackContract(\n value: unknown,\n runtime: InstallableRuntime,\n instance: string,\n): ClientOperationRollbackContract {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const contract = value as Record<string, unknown>;\n if (Object.keys(contract).sort().join(\",\")\n !== \"forwardMetadataSha256,forwardRegistrationSha256,identity,priorMetadata,priorRegistration,schema,version\"\n || contract.schema !== \"agent-bridge.client-update-rollback\" || contract.version !== 1\n || typeof contract.forwardMetadataSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.forwardMetadataSha256)\n || typeof contract.forwardRegistrationSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.forwardRegistrationSha256)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const priorMetadata = validateOperationMetadata(contract.priorMetadata, runtime, instance);\n const identity = safeIdentity(contract.identity);\n if (identity !== priorMetadata.identity) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const priorRegistration = validateRegistrationProof(contract.priorRegistration, priorMetadata);\n return {\n schema: \"agent-bridge.client-update-rollback\", version: 1, identity,\n priorMetadata, priorRegistration,\n forwardMetadataSha256: contract.forwardMetadataSha256,\n forwardRegistrationSha256: contract.forwardRegistrationSha256,\n };\n}\n\nexport function clientOperationSupportsResume(version: ClientOperationVersion, kind: ClientOperationKind): boolean {\n return RESUMABLE_OPERATION_KINDS[version].has(kind);\n}\nfunction validateRequest(\n value: unknown, runtime?: InstallableRuntime, version: ClientOperationVersion = CLIENT_OPERATION_VERSION,\n instance?: string,\n): RecordedClientOperationRequest {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const request = value as Record<string, unknown>;\n if (!OPERATIONS.includes(request.kind as ClientOperationKind)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const keys = Object.keys(request).sort().join(\",\");\n if (version === 2) {\n if (request.kind === \"repair\") {\n if (keys !== \"kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"repair\" };\n }\n if (request.kind === \"update\") {\n if (keys !== \"kind,release\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const release = safeText(request.release, \"release\", 128);\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(release)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { kind: \"update\", release };\n }\n if (request.kind === \"uninstall\") {\n if (keys !== \"kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"uninstall\" };\n }\n if (keys !== \"endpoint,kind,workspace\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const endpoint = safeText(request.endpoint, \"endpoint\", 512);\n let parsed: URL;\n try { parsed = new URL(endpoint); } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password || parsed.search || parsed.hash) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const workspace = safeText(request.workspace, \"workspace\");\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(workspace)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"migrate\", endpoint: parsed.toString(), workspace };\n }\n if (request.kind === \"repair\") {\n if (version === 4 || version === 5 || version === 6) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (keys !== \"identity,kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"repair\", identity: safeIdentity(request.identity) };\n }\n if (request.kind === \"uninstall\") {\n if (version === 4 || version === 5 || version === 6) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (keys !== \"identity,kind\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"uninstall\", identity: safeIdentity(request.identity) };\n }\n if (request.kind === \"update\") {\n if (version === 5 || version === 6) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const expectedKeys = version === 4 ? \"identity,kind,launch,rollback\" : \"identity,kind,launch\";\n if (keys !== expectedKeys || !request.launch || typeof request.launch !== \"object\"\n || Array.isArray(request.launch)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const launch = request.launch as Record<string, unknown>;\n if (Object.keys(launch).sort().join(\",\") !== \"args,command,envKeys,scope\") {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const command = safeText(launch.command, \"launch command\", 1024);\n if (!Array.isArray(launch.args) || launch.args.length > 16\n || launch.args.some((arg) => {\n try { safeText(arg, \"launch argument\", 1024); return false; } catch { return true; }\n })\n || !Array.isArray(launch.envKeys)\n || launch.envKeys.join(\",\") !== \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\"\n || ![null, \"local\", \"user\", \"project\"].includes(launch.scope as null | string)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if ((runtime === \"codex\" || runtime === \"claude-code\")\n && ((launch.args as unknown[]).length !== 0\n || (runtime === \"claude-code\" ? ![\"local\", \"user\", \"project\"].includes(launch.scope as string)\n : launch.scope !== null))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (runtime === \"codex\" || runtime === \"claude-code\") safeNativeLaunchCommand(command);\n if (runtime === \"claude-desktop\" && (launch.scope !== null || !isAbsolute(command))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const base: { kind: \"update\"; identity: string; launch: ClientOperationLaunch } = {\n kind: \"update\",\n identity: safeIdentity(request.identity),\n launch: {\n command,\n args: [...launch.args] as string[],\n scope: launch.scope as \"local\" | \"user\" | \"project\" | null,\n envKeys: [\"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\"],\n },\n };\n if (version === 4) {\n if (!runtime) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (!instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const rollback = validateRollbackContract(request.rollback, runtime, instance);\n if (base.identity !== rollback.identity) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const forwardMetadata = forwardMetadataFromUpdate(rollback.priorMetadata, base.launch);\n const forwardRegistration = exactRegistrationProof(forwardMetadata);\n if (canonicalDigest({ role: \"metadata\", metadata: forwardMetadata }) !== rollback.forwardMetadataSha256\n || canonicalDigest({ role: \"registration\", observation: forwardRegistration })\n !== rollback.forwardRegistrationSha256) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return { ...base, rollback };\n }\n return base;\n }\n if (request.kind === \"rollback\") {\n if (version !== 4 || keys !== \"identity,kind,rollback,sourceOperationId\" || !runtime) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceOperationId = safeText(request.sourceOperationId, \"source operation id\", 36).toLowerCase();\n if (!UUID.test(sourceOperationId)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (!instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const rollback = validateRollbackContract(request.rollback, runtime, instance);\n if (rollback.identity !== safeIdentity(request.identity)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"rollback\", identity: rollback.identity, sourceOperationId, rollback };\n }\n if ([\"migrate\", \"migrate-cutover\", \"migrate-finalize\"].includes(String(request.kind))) {\n if (version === 5 || version === 6) {\n const v5Keys = \"enrollmentPath,enrollmentRequestId,identity,kind,predecessorCredentialId,predecessorGraceUntil,sourceBackendPath,sourceEdgeDatabasePath,sourceEndpointSha256,sourceScopeKey,stageRecordPath,successorCredentialId,targetBackendPath,targetEndpointSha256,targetWorkspace\";\n const v6Keys = \"enrollmentPath,enrollmentRequestId,exclusiveEdgeAssertion,gatewayAuthorityId,identity,kind,migrationOperationId,predecessorCredentialId,predecessorGraceUntil,sourceBackendPath,sourceCutoverOperationId,sourceEdgeDatabasePath,sourceEndpointSha256,sourceGatewayUrl,sourceMetadata,sourceMetadataSha256,sourceRegistration,sourceRegistrationSha256,sourceScopeKey,stageContract,stageOperationId,stageRecordPath,successorCredentialId,targetBackendPath,targetEdgeDatabasePath,targetEndpointSha256,targetMetadata,targetMetadataSha256,targetRegistration,targetRegistrationSha256,targetWorkspace\";\n if (keys !== (version === 5 ? v5Keys : v6Keys)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if ((version === 5 && request.kind !== \"migrate\")\n || (version === 6 && ![\"migrate-cutover\", \"migrate-finalize\"].includes(String(request.kind)))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const absolute = (item: unknown, label: string): string => safeAbsolutePath(item, label);\n const hash = (item: unknown): string => {\n const value = safeText(item, \"migration digest\", 64);\n if (!/^[0-9a-f]{64}$/.test(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return value;\n };\n const id = (item: unknown, label: string): string => {\n const value = safeText(item, label, 36).toLowerCase();\n if (!UUID.test(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return value;\n };\n const sourceEndpointSha256 = hash(request.sourceEndpointSha256);\n const targetEndpointSha256 = hash(request.targetEndpointSha256);\n const sourceScopeKey = hash(request.sourceScopeKey);\n if (sourceEndpointSha256 === targetEndpointSha256) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const stage: ClientMigrationStageRequest = {\n kind: \"migrate\",\n identity: safeIdentity(request.identity),\n enrollmentPath: absolute(request.enrollmentPath, \"enrollment path\"),\n enrollmentRequestId: id(request.enrollmentRequestId, \"enrollment request ID\"),\n sourceBackendPath: absolute(request.sourceBackendPath, \"source backend path\"),\n sourceEdgeDatabasePath: absolute(request.sourceEdgeDatabasePath, \"source edge database path\"),\n sourceScopeKey,\n targetBackendPath: absolute(request.targetBackendPath, \"target backend path\"),\n stageRecordPath: absolute(request.stageRecordPath, \"stage record path\"),\n predecessorGraceUntil: (() => {\n const value = safeText(request.predecessorGraceUntil, \"predecessor grace cutoff\", 64);\n if (new Date(value).toISOString() !== value) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return value;\n })(),\n targetWorkspace: safeText(request.targetWorkspace, \"target workspace\", 128),\n sourceEndpointSha256,\n targetEndpointSha256,\n predecessorCredentialId: id(request.predecessorCredentialId, \"predecessor credential ID\"),\n successorCredentialId: id(request.successorCredentialId, \"successor credential ID\"),\n };\n if (version === 5) return stage;\n if (!runtime || !instance) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const migrationOperationId = id(request.migrationOperationId, \"migration operation ID\");\n const stageOperationId = id(request.stageOperationId, \"stage operation ID\");\n const targetEdgeDatabasePath = absolute(request.targetEdgeDatabasePath, \"target edge database path\");\n if (targetEdgeDatabasePath === stage.sourceEdgeDatabasePath) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const sourceGatewayUrl = safeText(request.sourceGatewayUrl, \"source gateway URL\", 2048);\n let parsedSourceGatewayUrl: URL;\n try { parsedSourceGatewayUrl = new URL(sourceGatewayUrl); }\n catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n if (parsedSourceGatewayUrl.username || parsedSourceGatewayUrl.password || parsedSourceGatewayUrl.search\n || parsedSourceGatewayUrl.hash || sourceGatewayUrl !== parsedSourceGatewayUrl.toString().replace(/\\/$/, \"\")) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (createHash(\"sha256\").update(sourceGatewayUrl, \"utf8\").digest(\"hex\") !== sourceEndpointSha256) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceCutoverOperationId = request.sourceCutoverOperationId === null\n ? null\n : id(request.sourceCutoverOperationId, \"source cutover operation ID\");\n if ((request.kind === \"migrate-cutover\") !== (sourceCutoverOperationId === null)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (sourceCutoverOperationId === migrationOperationId) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const stageContract = validateStageContract(request.stageContract, runtime, instance);\n if (stageContract.stageOperationId !== stageOperationId\n || !sameCanonicalValue(stageContract.request, stage)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceMetadata = validateOperationMetadata(request.sourceMetadata, runtime, instance);\n const targetMetadata = validateOperationMetadata(request.targetMetadata, runtime, instance);\n if (sourceMetadata.identity !== stage.identity || targetMetadata.identity !== stage.identity\n || sourceMetadata.backendConfigPath !== stage.sourceBackendPath\n || targetMetadata.backendConfigPath !== stage.targetBackendPath\n || sameCanonicalValue(sourceMetadata, targetMetadata)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const sourceRegistration = validateRegistrationProof(request.sourceRegistration, sourceMetadata);\n const targetRegistration = validateRegistrationProof(request.targetRegistration, targetMetadata);\n const contractDigest = (value: unknown): string => {\n const recorded = hash(value);\n return recorded;\n };\n const sourceMetadataSha256 = contractDigest(request.sourceMetadataSha256);\n const targetMetadataSha256 = contractDigest(request.targetMetadataSha256);\n const sourceRegistrationSha256 = contractDigest(request.sourceRegistrationSha256);\n const targetRegistrationSha256 = contractDigest(request.targetRegistrationSha256);\n if (sourceMetadataSha256 !== canonicalDigest({ role: \"metadata\", metadata: sourceMetadata })\n || targetMetadataSha256 !== canonicalDigest({ role: \"metadata\", metadata: targetMetadata })\n || sourceRegistrationSha256 !== canonicalDigest({ role: \"registration\", observation: sourceRegistration })\n || targetRegistrationSha256 !== canonicalDigest({ role: \"registration\", observation: targetRegistration })) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n ...stage,\n kind: request.kind as ClientMigrationCutoverRequest[\"kind\"],\n migrationOperationId,\n stageOperationId,\n sourceCutoverOperationId,\n targetEdgeDatabasePath,\n sourceGatewayUrl,\n gatewayAuthorityId: id(request.gatewayAuthorityId, \"gateway authority ID\"),\n exclusiveEdgeAssertion: request.exclusiveEdgeAssertion === true\n ? true\n : fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"),\n stageContract,\n sourceMetadata,\n targetMetadata,\n sourceRegistration,\n targetRegistration,\n sourceMetadataSha256,\n targetMetadataSha256,\n sourceRegistrationSha256,\n targetRegistrationSha256,\n };\n }\n if (version === 4) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n if (keys !== \"endpoint,kind,workspace\") fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const endpoint = safeText(request.endpoint, \"endpoint\", 512);\n let parsed: URL;\n try { parsed = new URL(endpoint); } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password || parsed.search || parsed.hash) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const workspace = safeText(request.workspace, \"workspace\");\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(workspace)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { kind: \"migrate\", endpoint: parsed.toString(), workspace };\n }\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n}\nfunction validateStageContract(value: unknown, runtime: InstallableRuntime, instance: string): ClientMigrationStageContract {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const contract = value as Record<string, unknown>;\n if (Object.keys(contract).sort().join(\",\") !== \"request,schema,stageOperationId,stageRecordSha256,targetBackendProjectionSha256,version\"\n || contract.schema !== \"agent-bridge.client-migration-stage-contract\" || contract.version !== 1) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const stageOperationId = safeText(contract.stageOperationId, \"stage operation ID\", 36).toLowerCase();\n if (!UUID.test(stageOperationId)\n || typeof contract.stageRecordSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.stageRecordSha256)\n || typeof contract.targetBackendProjectionSha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(contract.targetBackendProjectionSha256)) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const request = validateRequest(contract.request, runtime, 5, instance) as ClientMigrationStageRequest;\n if (request.kind !== \"migrate\" || request.stageRecordPath !== resolve(request.stageRecordPath)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return { schema: \"agent-bridge.client-migration-stage-contract\", version: 1, stageOperationId, request,\n stageRecordSha256: contract.stageRecordSha256, targetBackendProjectionSha256: contract.targetBackendProjectionSha256 };\n}\nfunction validateCompletion(value: unknown, version: ClientOperationVersion, runtime: InstallableRuntime, instance: string): ClientOperationCompletion {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const completion = value as Record<string, unknown>;\n const completionKeys = Object.keys(completion).sort().join(\",\");\n const expectedKeys = version === 4\n ? \"cleanupDirectoryDurability,completedAt,operation,rollback,stepCount\"\n : version === 5 || version === 6\n ? \"cleanupDirectoryDurability,completedAt,migration,operation,stepCount\"\n : \"cleanupDirectoryDurability,completedAt,operation,stepCount\";\n if ((completionKeys !== expectedKeys\n && !(version === 5 && completionKeys === \"cleanupDirectoryDurability,completedAt,operation,stepCount\"))\n || !OPERATIONS.includes(completion.operation as ClientOperationKind)\n || !Number.isSafeInteger(completion.stepCount) || Number(completion.stepCount) < 1\n || Number(completion.stepCount) > MAX_OPERATION_STEPS\n || typeof completion.completedAt !== \"string\" || !Number.isFinite(Date.parse(completion.completedAt))\n || ![\"durable\", \"unavailable\"].includes(String(completion.cleanupDirectoryDurability))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n const rollback = version === 4\n ? completion.rollback === null ? null : validateRollbackContract(completion.rollback, runtime, instance)\n : undefined;\n const migration = version === 5 || version === 6\n ? completion.migration === null || completion.migration === undefined\n ? null\n : version === 5\n ? validateStageContract(completion.migration, runtime, instance)\n : validateRequest(completion.migration, runtime, version, instance) as ClientMigrationCutoverRequest\n : undefined;\n const allowedOperations = version === 4\n ? [\"update\", \"rollback\"]\n : version === 5\n ? [\"migrate\"]\n : version === 6\n ? [\"migrate-cutover\", \"migrate-finalize\"]\n : [\"repair\", \"update\", \"uninstall\", \"migrate\"];\n if (!allowedOperations.includes(String(completion.operation))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (version === 4 && completion.operation !== \"update\" && rollback !== null) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n operation: completion.operation as ClientOperationKind,\n stepCount: Number(completion.stepCount), completedAt: completion.completedAt,\n cleanupDirectoryDurability: completion.cleanupDirectoryDurability as \"durable\" | \"unavailable\",\n ...(version === 4 ? { rollback } : {}),\n ...(version === 5 || version === 6 ? { migration } : {}),\n };\n}\nexport function validateClientOperation(value: unknown): ClientOperationManifest {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const file = value as Record<string, unknown>;\n if (file.schema !== CLIENT_OPERATION_SCHEMA || ![2, 3, 4, 5, CLIENT_OPERATION_VERSION].includes(Number(file.version))\n || !UUID.test(String(file.operationId))\n || !RUNTIMES.includes(file.runtime as InstallableRuntime) || !STATES.includes(file.state as ClientOperationState)\n || !Number.isSafeInteger(file.revision) || Number(file.revision) < 0\n || !Array.isArray(file.artifacts) || file.artifacts.length > MAX_OPERATION_ARTIFACTS\n || !Array.isArray(file.steps)\n || file.steps.length > MAX_OPERATION_STEPS) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const createdAt = safeText(file.createdAt, \"createdAt\", 64);\n const updatedAt = safeText(file.updatedAt, \"updatedAt\", 64);\n if (!Number.isFinite(Date.parse(createdAt)) || !Number.isFinite(Date.parse(updatedAt))) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n const terminal = file.state === \"committed\";\n const version = file.version as ClientOperationVersion;\n const instance = safeText(file.instance, \"instance\");\n const request = terminal && file.request === null\n ? null\n : validateRequest(file.request, file.runtime as InstallableRuntime, version, instance);\n const completion = terminal ? validateCompletion(file.completion, version, file.runtime as InstallableRuntime, instance) : null;\n const artifacts = file.artifacts.map(validateArtifact);\n const steps = file.steps.map((step, index) => validateStep(step, index, version));\n if ((!terminal && (!request || file.completion !== null || steps.length === 0))\n || (terminal && (request !== null || steps.length !== 0 || artifacts.length !== 0))) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (terminal && version === 4 && completion?.operation === \"update\" && completion.rollback === null) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (terminal && version === 6 && completion?.migration === null) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n if (version === 6) {\n const migration = terminal\n ? completion?.migration as ClientMigrationCutoverRequest | null | undefined\n : request as ClientMigrationCutoverRequest;\n if (!migration || migration.migrationOperationId !== String(file.operationId).toLowerCase()) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n }\n if (!terminal && version === 5) {\n const migration = request as ClientMigrationStageRequest;\n const expected = [\n [\"stage-backend\", migration.targetBackendPath],\n [\"stage-record\", migration.stageRecordPath],\n [\"enrollment\", migration.enrollmentPath],\n ] as const;\n if (steps.length !== expected.length || steps.some((step, index) => step.target !== expected[index]![0]\n || step.locator !== expected[index]![1])) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n }\n if (!terminal && version === 6) {\n const migration = request as ClientMigrationCutoverRequest;\n const native = file.runtime !== \"claude-desktop\";\n const expected = migration.kind === \"migrate-cutover\"\n ? native ? [\"edge-gate\", \"registration\", \"registration\", \"metadata\"] : [\"edge-gate\", \"registration\", \"metadata\"]\n : [\"edge-gate\"];\n if (steps.length !== expected.length || steps.some((step, index) => step.target !== expected[index])) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n }\n const firstIncomplete = steps.findIndex((step) => step.state !== \"observed-applied\");\n const tail = firstIncomplete < 0 ? [] : steps.slice(firstIncomplete + 1);\n const artifactNames = artifacts.map((artifact) => artifact.name);\n const stepArtifacts = steps.flatMap((step) => [step.beforeArtifact, step.afterArtifact]);\n const artifactsValid = new Set(artifactNames).size === artifactNames.length\n && artifacts.every((artifact) => {\n const step = steps[artifact.stepIndex];\n return Boolean(step && (artifact.phase === \"before\"\n ? step.beforeArtifact === artifact.name && step.expectedBeforeSha256 === artifact.sha256\n : step.afterArtifact === artifact.name && step.expectedAfterSha256 === artifact.sha256));\n });\n const completeSnapshots = artifactsValid\n && steps.every((step) => artifacts.some((artifact) => artifact.name === step.beforeArtifact));\n const exactAfterArtifacts = steps.every((step) => {\n const count = artifacts.filter((artifact) => artifact.name === step.afterArtifact && artifact.phase === \"after\").length;\n return count === (step.state === \"observed-applied\" ? 1 : 0);\n });\n const allPending = steps.every((step) => step.state === \"pending\");\n const allApplied = steps.every((step) => step.state === \"observed-applied\");\n const hasProgress = steps.some((step) => step.state !== \"pending\");\n const allArtifacts = artifacts.length === stepArtifacts.length;\n const anyCleanup = artifacts.some((artifact) => artifact.cleanupIntentAt !== null);\n const stateConsistent = terminal ? true : file.state === \"prepared\"\n ? allPending && !anyCleanup\n : file.state === \"snapshotted\"\n ? allPending && completeSnapshots && !anyCleanup\n : file.state === \"in-progress\"\n ? hasProgress && !allApplied && completeSnapshots && !anyCleanup\n : file.state === \"applied\"\n ? allApplied && completeSnapshots && allArtifacts && !anyCleanup\n : allApplied && completeSnapshots && allArtifacts && anyCleanup;\n if (tail.some((step) => step.state !== \"pending\")\n || steps.filter((step) => step.state === \"intent-recorded\").length > 1\n || new Set(stepArtifacts).size !== stepArtifacts.length\n || !artifactsValid || !exactAfterArtifacts\n || artifacts.reduce((total, artifact) => total + artifact.bytes, 0) > MAX_TOTAL_SNAPSHOT_BYTES\n || !stateConsistent) {\n fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n }\n return {\n schema: CLIENT_OPERATION_SCHEMA, version,\n operationId: String(file.operationId).toLowerCase(), request,\n runtime: file.runtime as InstallableRuntime, instance,\n state: file.state as ClientOperationState, revision: Number(file.revision),\n host: safeText(file.host, \"host\", 255), createdAt, updatedAt, completion,\n artifacts, steps,\n };\n}\nfunction serialize(manifest: ClientOperationManifest): string { return `${JSON.stringify(validateClientOperation(manifest), null, 2)}\\n`; }\nfunction hasCompleteSnapshots(manifest: ClientOperationManifest): boolean {\n return manifest.steps.every((step) => manifest.artifacts.some((artifact) => artifact.name === step.beforeArtifact\n && artifact.phase === \"before\" && artifact.sha256 === step.expectedBeforeSha256));\n}\nfunction publish(\n path: string, content: string | Buffer, filesystem: ClientOperationFilesystem = filesystemDefaults,\n expectedDirectory?: { device: number; inode: number }, cache?: PrivateDirectoryAccessCache,\n): void {\n const directory = dirname(path);\n const identity = privateDirectory(directory, cache);\n if (expectedDirectory && (identity.device !== expectedDirectory.device || identity.inode !== expectedDirectory.inode)) {\n fail(\"PATH_REPLACED\", \"operation directory changed during publication\");\n }\n const temporary = join(directory, `.${basename(path)}.${process.pid}.${randomUUID()}.tmp`);\n let descriptor: number | undefined;\n try {\n descriptor = openSync(temporary, \"wx\", 0o600);\n writeFileSync(descriptor, content);\n fsyncSync(descriptor);\n closeSync(descriptor); descriptor = undefined;\n securePrivatePath(temporary, \"file\");\n filesystem.hook(\"before-publish-rename\", path);\n sameDirectory(directory, identity, cache);\n filesystem.rename(temporary, path);\n filesystem.hook(\"after-publish-rename\", path);\n verifyPrivatePathAccess(path, \"file\");\n sameDirectory(directory, identity, cache);\n filesystem.hook(\"before-directory-sync\", directory);\n filesystem.syncDirectory(directory);\n } catch (error) {\n if (descriptor !== undefined) try { closeSync(descriptor); } catch {}\n // Never follow a replaced directory while cleaning up. Residue inside the\n // original, now-unreachable directory is safer than deleting an external file.\n try {\n filesystem.hook(\"before-cleanup\", temporary);\n sameDirectory(directory, identity, cache);\n filesystem.remove(temporary, { force: true });\n } catch {}\n cache?.clear();\n if (error instanceof ClientOperationError) throw error;\n fail(\"DURABILITY_FAILED\", \"operation state could not be published durably\");\n }\n}\n\nfunction publishNoReplace(\n path: string, content: string | Buffer, filesystem: ClientOperationFilesystem,\n cache?: PrivateDirectoryAccessCache,\n): void {\n const directory = dirname(path);\n const identity = privateDirectory(directory, cache);\n const temporary = join(directory, `.${basename(path)}.${process.pid}.${randomUUID()}.tmp`);\n let descriptor: number | undefined;\n try {\n descriptor = openSync(temporary, \"wx\", 0o600);\n writeFileSync(descriptor, content);\n fsyncSync(descriptor);\n securePrivatePath(temporary, \"file\");\n const temporaryIdentity = fstatSync(descriptor);\n filesystem.hook(\"before-publish-link\", path);\n sameDirectory(directory, identity, cache);\n filesystem.link(temporary, path);\n filesystem.hook(\"after-publish-link\", path);\n const published = lstatSync(path);\n if (!published.isFile() || published.isSymbolicLink()\n || published.dev !== temporaryIdentity.dev || published.ino !== temporaryIdentity.ino) {\n fail(\"PATH_REPLACED\", \"snapshot path changed during publication\");\n }\n verifyPrivatePathAccess(path, \"file\");\n const verified = lstatSync(path);\n if (!verified.isFile() || verified.isSymbolicLink()\n || verified.dev !== temporaryIdentity.dev || verified.ino !== temporaryIdentity.ino) {\n fail(\"PATH_REPLACED\", \"snapshot path changed during publication\");\n }\n sameDirectory(directory, identity, cache);\n closeSync(descriptor); descriptor = undefined;\n filesystem.remove(temporary);\n filesystem.hook(\"before-directory-sync\", directory);\n filesystem.syncDirectory(directory);\n } catch (error) {\n if (descriptor !== undefined) try { closeSync(descriptor); } catch {}\n try {\n filesystem.hook(\"before-cleanup\", temporary);\n sameDirectory(directory, identity, cache);\n filesystem.remove(temporary, { force: true });\n } catch {}\n cache?.clear();\n if (error instanceof ClientOperationError) throw error;\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") {\n fail(\"AMBIGUOUS_OPERATION\", \"snapshot path already exists outside the durable manifest\");\n }\n fail(\"DURABILITY_FAILED\", \"operation state could not be published durably\");\n }\n}\n\nfunction publishAfterArtifact(\n path: string, content: Buffer, filesystem: ClientOperationFilesystem,\n cache?: PrivateDirectoryAccessCache,\n): void {\n try {\n if (!existsSync(path)) { publishNoReplace(path, content, filesystem, cache); return; }\n const directory = dirname(path); const identity = privateDirectory(directory, cache);\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size !== content.byteLength\n || createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") !== createHash(\"sha256\").update(content).digest(\"hex\")) {\n fail(\"AMBIGUOUS_OPERATION\", \"existing after artifact does not match the verified after-state\");\n }\n sameDirectory(directory, identity, cache);\n } finally { closeSync(descriptor); }\n filesystem.hook(\"before-directory-sync\", directory);\n sameDirectory(directory, identity, cache);\n filesystem.syncDirectory(directory);\n sameDirectory(directory, identity, cache);\n } catch (error) {\n cache?.clear();\n throw error;\n }\n}\n\nfunction createClientOperationWithCache(input: {\n operationId?: string; createdAt?: string; version?: 3 | 4 | 5 | typeof CLIENT_OPERATION_VERSION; request: ClientOperationRequest; runtime: InstallableRuntime; instance: string;\n steps: Array<Pick<ClientOperationStep, \"target\" | \"locator\" | \"beforeArtifact\" | \"afterArtifact\" | \"expectedBeforeSha256\" | \"expectedAfterSha256\">>;\n}, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\ncache?: PrivateDirectoryAccessCache): ClientOperationManifest {\n const operationId = (input.operationId ?? randomUUID()).toLowerCase();\n if (!UUID.test(operationId) || !RUNTIMES.includes(input.runtime)) {\n fail(\"INVALID_OPERATION\", \"operation request is invalid\");\n }\n const instance = safeText(input.instance.trim(), \"instance\");\n const version = input.version ?? 3;\n const request = validateRequest(input.request, input.runtime, version, instance) as ClientOperationRequest;\n const pinned = pinOperationRoot(env, true, cache);\n const directory = join(pinned.root, operationId);\n assertPinnedRoot(pinned, cache);\n try { mkdirSync(directory, { mode: 0o700 }); } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"EEXIST\") fail(\"OPERATION_EXISTS\", \"operation already exists\");\n fail(\"DURABILITY_FAILED\", \"operation could not be created\");\n }\n assertPinnedRoot(pinned, cache);\n if (cache) cache.secure(directory);\n else securePrivatePath(directory, \"directory\");\n assertPinnedRoot(pinned, cache);\n prepareDirectory(join(directory, \"snapshots\"), cache);\n assertPinnedRoot(pinned, cache);\n const now = input.createdAt === undefined ? new Date().toISOString() : safeText(input.createdAt, \"createdAt\", 64);\n if (!Number.isFinite(Date.parse(now))) fail(\"INVALID_OPERATION\", \"operation request is invalid\");\n const manifest: ClientOperationManifest = {\n schema: CLIENT_OPERATION_SCHEMA, version, operationId,\n request, runtime: input.runtime, instance, state: \"prepared\", revision: 0,\n host: hostname(), createdAt: now, updatedAt: now, completion: null, artifacts: [],\n steps: input.steps.map((step, index) => ({ ...step, index, state: \"pending\" as const, intentRecordedAt: null, observedAppliedAt: null })),\n };\n try {\n filesystem.hook(\"after-snapshots-created\", directory);\n assertPinnedRoot(pinned, cache);\n publish(join(directory, \"manifest.json\"), serialize(manifest), filesystem, undefined, cache);\n assertPinnedRoot(pinned, cache);\n filesystem.syncDirectory(pinned.root);\n assertPinnedRoot(pinned, cache);\n }\n catch (error) {\n try {\n assertPinnedRoot(pinned, cache);\n const publishedManifest = join(directory, \"manifest.json\");\n if (!existsSync(publishedManifest)) {\n filesystem.hook(\"before-cleanup\", directory);\n assertPinnedRoot(pinned, cache);\n filesystem.remove(directory, { recursive: true, force: true });\n assertPinnedRoot(pinned, cache);\n }\n } catch {}\n throw error;\n }\n return manifest;\n}\n\nexport function createClientOperation(input: {\n operationId?: string; createdAt?: string; version?: 3 | 4 | 5 | typeof CLIENT_OPERATION_VERSION; request: ClientOperationRequest; runtime: InstallableRuntime; instance: string;\n steps: Array<Pick<ClientOperationStep, \"target\" | \"locator\" | \"beforeArtifact\" | \"afterArtifact\" | \"expectedBeforeSha256\" | \"expectedAfterSha256\">>;\n}, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationManifest {\n return createClientOperationWithCache(input, env, filesystem);\n}\n\nexport interface BegunClientOperation { manifest: ClientOperationManifest; lock: ClientOperationLock }\n\n/** Acquire the client lock before checking or creating any operation state. */\nexport function beginClientOperation(input: Parameters<typeof createClientOperation>[0], env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): BegunClientOperation {\n const lock = acquireClientOperationLock(input.runtime, input.instance, env);\n try {\n const operations = listClientOperations(env, filesystem);\n if (operations.some((summary) => summary.inspectionState === \"blocked\")) {\n fail(\"BLOCKED_OPERATION\", \"a blocked operation must be resolved before another client mutation can begin\");\n }\n const unfinished = operations.find((summary) => summary.runtime === input.runtime\n && summary.instance === input.instance && summary.inspectionState !== \"complete\");\n if (unfinished) fail(\"UNFINISHED_OPERATION\", `unfinished operation ${unfinished.operationId} already owns this client`);\n return { manifest: createClientOperationWithCache(input, env, filesystem, privatePathCacheForLock(lock)), lock };\n } catch (error) {\n try { releaseClientOperationLock(lock); } catch {}\n throw error;\n }\n}\n\n/** Resume is same-host only and returns with the per-client lock held. */\nexport function resumeClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): BegunClientOperation {\n const manifest = readClientOperation(operationId, env);\n if (manifest.state === \"committed\") fail(\"OPERATION_COMPLETE\", \"committed operation cannot be resumed\");\n if (!manifest.request || !clientOperationSupportsResume(manifest.version, manifest.request.kind)) {\n fail(\"LEGACY_OPERATION\", \"legacy operation cannot resume without an identity-bound request\");\n }\n if (manifest.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only resume on its creating host\");\n const lock = acquireClientOperationLock(manifest.runtime, manifest.instance, env);\n try {\n const operations = listClientOperations(env, filesystem);\n if (operations.some((summary) => summary.inspectionState === \"blocked\")) {\n fail(\"BLOCKED_OPERATION\", \"a blocked operation must be resolved before another client mutation can resume\");\n }\n const summary = inspectClientOperation(operationId, env, filesystem);\n if (summary.inspectionState === \"blocked\") fail(\"OPERATION_BLOCKED\", summary.reason);\n const resumed = readClientOperation(operationId, env);\n if (resumed.runtime !== lock.runtime || resumed.instance !== lock.instance\n || resumed.operationId !== manifest.operationId || resumed.host !== hostname()) {\n fail(\"LOCK_MISMATCH\", \"client lock does not cover the resumed operation\");\n }\n return { manifest: resumed, lock };\n } catch (error) {\n try { releaseClientOperationLock(lock); } catch {}\n throw error;\n }\n}\n\nfunction readClientOperationWithCache(\n operationId: string,\n env: NodeJS.ProcessEnv,\n cache?: PrivateDirectoryAccessCache,\n): ClientOperationManifest {\n const path = manifestPath(operationId, env);\n verifyInsideRoot(path, env, cache);\n const directory = dirname(path);\n const identity = privateDirectory(directory, cache);\n try {\n verifyPrivatePathAccess(path, \"file\");\n } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is unavailable or insecure\"); }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size > MAX_MANIFEST_BYTES) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n let value: unknown;\n try { value = JSON.parse(readFileSync(descriptor, \"utf8\")); } catch { fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\"); }\n sameDirectory(directory, identity, cache);\n const manifest = validateClientOperation(value);\n if (manifest.operationId !== operationId.toLowerCase()) fail(\"CORRUPT_OPERATION\", \"operation manifest is corrupt\");\n return manifest;\n } finally { closeSync(descriptor); }\n}\nexport function readClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env): ClientOperationManifest {\n return readClientOperationWithCache(operationId, env);\n}\n\nfunction lockName(runtime: InstallableRuntime, instance: string): string {\n const digest = createHash(\"sha256\").update(`${runtime}\\0${instance}`).digest(\"hex\");\n return `${runtime}-${digest}.lock`;\n}\nexport function hasClientOperationLock(\n runtime: InstallableRuntime,\n instance: string,\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n return existsSync(join(clientOperationRoot(env), \"locks\", lockName(runtime, instance)));\n}\nexport function acquireClientOperationLock(runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env): ClientOperationLock {\n if (!RUNTIMES.includes(runtime)) fail(\"INVALID_OPERATION\", \"client runtime is invalid\");\n instance = safeText(instance.trim(), \"instance\");\n const cache = createPrivateDirectoryAccessCache();\n const root = prepareRoot(env, cache);\n const directory = join(root, \"locks\");\n const identity = privateDirectory(directory, cache);\n const lockPath = join(directory, lockName(runtime, instance));\n let descriptor: number;\n try { descriptor = openSync(lockPath, \"wx\", 0o600); }\n catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"EEXIST\") fail(\"CLIENT_LOCKED\", \"another operation holds the client lock\");\n fail(\"LOCK_FAILED\", \"client lock could not be acquired\");\n }\n try {\n writeFileSync(descriptor, `${JSON.stringify({ schema: \"agent-bridge.client-operation-lock\", version: 1, runtime, instance, pid: process.pid, host: hostname(), createdAt: new Date().toISOString(), nonce: randomUUID() })}\\n`);\n fsyncSync(descriptor);\n securePrivatePath(lockPath, \"file\");\n sameDirectory(directory, identity, cache); syncDirectory(directory);\n const details = fstatSync(descriptor);\n const lock = { runtime, instance, lockPath, descriptor, device: details.dev, inode: details.ino, released: false };\n operationLockPrivatePathCaches.set(lock, cache);\n return lock;\n } catch {\n cache.clear();\n try { closeSync(descriptor); } catch {} rmSync(lockPath, { force: true });\n fail(\"LOCK_FAILED\", \"client lock could not be acquired\");\n }\n}\nfunction assertLock(lock: ClientOperationLock): void {\n if (lock.released) fail(\"LOCK_REPLACED\", \"client lock is no longer held\");\n const opened = fstatSync(lock.descriptor);\n let current;\n try { current = lstatSync(lock.lockPath); } catch { fail(\"LOCK_REPLACED\", \"client lock changed while held\"); }\n if (current.isSymbolicLink() || current.dev !== lock.device || current.ino !== lock.inode\n || opened.dev !== lock.device || opened.ino !== lock.inode) fail(\"LOCK_REPLACED\", \"client lock changed while held\");\n}\nexport function releaseClientOperationLock(lock: ClientOperationLock): \"released\" | \"durability-unknown\" {\n const cache = privatePathCacheForLock(lock);\n try {\n assertLock(lock);\n const directory = dirname(lock.lockPath); const identity = privateDirectory(directory, cache);\n closeSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (current.dev !== lock.device || current.ino !== lock.inode) fail(\"LOCK_REPLACED\", \"client lock changed before release\");\n rmSync(lock.lockPath); lock.released = true;\n try { sameDirectory(directory, identity, cache); syncDirectory(directory); return \"released\"; } catch { return \"durability-unknown\"; }\n } finally {\n cache.clear();\n operationLockPrivatePathCaches.delete(lock);\n }\n}\nexport function recoverClientOperationLock(runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env, now = Date.now(), filesystem: ClientOperationFilesystem = filesystemDefaults): void {\n if (!RUNTIMES.includes(runtime)) fail(\"INVALID_OPERATION\", \"client runtime is invalid\");\n instance = safeText(instance.trim(), \"instance\");\n const pinned = pinOperationRoot(env, false);\n const path = join(pinned.locks, lockName(runtime, instance));\n try { verifyPrivatePathAccess(path, \"file\"); } catch { fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\"); }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n let details;\n try {\n details = fstatSync(descriptor);\n if (!details.isFile() || details.size > MAX_LOCK_BYTES) {\n fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\");\n }\n let metadata: Record<string, unknown>;\n try { metadata = JSON.parse(readFileSync(descriptor, \"utf8\")); } catch { fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\"); }\n if (metadata.schema !== \"agent-bridge.client-operation-lock\" || metadata.version !== 1\n || metadata.runtime !== runtime || metadata.instance !== instance || metadata.host !== hostname()\n || !Number.isSafeInteger(metadata.pid) || typeof metadata.createdAt !== \"string\"\n || !Number.isFinite(Date.parse(metadata.createdAt))) fail(\"LOCK_RECOVERY_REFUSED\", \"client lock cannot be safely recovered\");\n if (now - Date.parse(metadata.createdAt) < 60_000) fail(\"LOCK_RECOVERY_REFUSED\", \"client lock is too recent to recover\");\n try { process.kill(Number(metadata.pid), 0); fail(\"CLIENT_LOCKED\", \"client lock owner is still running\"); }\n catch (error) {\n if (error instanceof ClientOperationError) throw error;\n if (!error || typeof error !== \"object\" || !(\"code\" in error) || error.code !== \"ESRCH\") {\n fail(\"LOCK_RECOVERY_REFUSED\", \"cannot prove that the client lock owner stopped\");\n }\n }\n assertPinnedRoot(pinned);\n const current = lstatSync(path);\n if (current.dev !== details.dev || current.ino !== details.ino || current.isSymbolicLink()) fail(\"LOCK_REPLACED\", \"client lock changed during recovery\");\n } finally { closeSync(descriptor); }\n assertPinnedRoot(pinned);\n filesystem.hook(\"before-lock-remove\", path);\n assertPinnedRoot(pinned);\n filesystem.remove(path);\n assertPinnedRoot(pinned);\n filesystem.hook(\"before-directory-sync\", pinned.locks);\n filesystem.syncDirectory(pinned.locks);\n assertPinnedRoot(pinned);\n}\n\nconst TRANSITIONS = new Set([\"prepared->snapshotted\"]);\nexport function transitionClientOperation(operationId: string, current: ClientOperationManifest, state: ClientOperationState, lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env): ClientOperationManifest {\n assertLock(lock);\n const cache = privatePathCacheForLock(lock);\n const disk = readClientOperationWithCache(operationId, env, cache);\n if (disk.runtime !== lock.runtime || disk.instance !== lock.instance) fail(\"LOCK_MISMATCH\", \"client lock does not cover this operation\");\n if (disk.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only mutate on its creating host\");\n if (disk.revision !== current.revision || disk.state !== current.state || disk.operationId !== current.operationId) fail(\"STALE_OPERATION\", \"stale operation transition refused\");\n if (!TRANSITIONS.has(`${disk.state}->${state}`)) fail(\"ILLEGAL_TRANSITION\", \"operation state transition is not allowed\");\n if (state === \"snapshotted\" && !hasCompleteSnapshots(disk)) {\n fail(\"MISSING_SNAPSHOT\", \"operation requires a durable snapshot for every ordered step\");\n }\n const next = validateClientOperation({ ...disk, state, revision: disk.revision + 1, updatedAt: new Date().toISOString() });\n publish(manifestPath(operationId, env), serialize(next), filesystemDefaults, undefined, cache);\n return next;\n}\n\nfunction pendingStep(manifest: ClientOperationManifest): ClientOperationStep | undefined {\n return manifest.steps.find((step) => step.state !== \"observed-applied\");\n}\n\nfunction verifyOperationLock(operationId: string, current: ClientOperationManifest, lock: ClientOperationLock, env: NodeJS.ProcessEnv): ClientOperationManifest {\n assertLock(lock);\n const disk = readClientOperationWithCache(operationId, env, privatePathCacheForLock(lock));\n if (disk.runtime !== lock.runtime || disk.instance !== lock.instance) fail(\"LOCK_MISMATCH\", \"client lock does not cover this operation\");\n if (disk.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only mutate on its creating host\");\n if (disk.revision !== current.revision || disk.state !== current.state || disk.operationId !== current.operationId) {\n fail(\"STALE_OPERATION\", \"stale operation transition refused\");\n }\n return disk;\n}\n\n/** Persist this intent before the caller performs the corresponding external write. */\nexport function recordClientOperationStepIntent(\n operationId: string, current: ClientOperationManifest, stepIndex: number,\n lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env,\n): ClientOperationManifest {\n const disk = verifyOperationLock(operationId, current, lock, env);\n if (disk.state !== \"snapshotted\" && disk.state !== \"in-progress\") fail(\"ILLEGAL_TRANSITION\", \"operation is not ready to apply a step\");\n const step = pendingStep(disk);\n if (!step || step.index !== stepIndex || step.state !== \"pending\"\n || !disk.artifacts.some((artifact) => artifact.name === step.beforeArtifact && artifact.phase === \"before\")) {\n fail(\"ILLEGAL_TRANSITION\", \"operation step intent is out of order or lacks its snapshot\");\n }\n const now = new Date().toISOString();\n const steps = disk.steps.map((item) => item.index === stepIndex\n ? { ...item, state: \"intent-recorded\" as const, intentRecordedAt: now }\n : item);\n const next = validateClientOperation({ ...disk, state: \"in-progress\", revision: disk.revision + 1, updatedAt: now, steps });\n publish(manifestPath(operationId, env), serialize(next), filesystemDefaults, undefined, privatePathCacheForLock(lock));\n return next;\n}\n\n/** Persist observed-applied only after the caller has verified the external digest. */\nexport function recordClientOperationStepApplied(\n operationId: string, current: ClientOperationManifest, stepIndex: number, afterContents: string | Buffer,\n lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\n): ClientOperationManifest {\n const disk = verifyOperationLock(operationId, current, lock, env);\n const step = pendingStep(disk);\n const buffer = Buffer.isBuffer(afterContents) ? afterContents : Buffer.from(afterContents);\n const observedSha256 = createHash(\"sha256\").update(buffer).digest(\"hex\");\n if (disk.state !== \"in-progress\" || !step || step.index !== stepIndex || step.state !== \"intent-recorded\"\n || observedSha256 !== step.expectedAfterSha256) fail(\"AMBIGUOUS_OPERATION\", \"operation step after-state was not verified\");\n if (buffer.byteLength > MAX_SNAPSHOT_BYTES) fail(\"SNAPSHOT_TOO_LARGE\", \"artifact exceeds the operation size limit\");\n const artifactPath = join(operationDirectory(operationId, env), \"snapshots\", step.afterArtifact);\n const cache = privatePathCacheForLock(lock);\n publishAfterArtifact(artifactPath, buffer, filesystem, cache);\n const now = new Date().toISOString();\n const steps = disk.steps.map((item) => item.index === stepIndex\n ? { ...item, state: \"observed-applied\" as const, observedAppliedAt: now }\n : item);\n const artifact: ClientOperationArtifact = {\n name: step.afterArtifact, stepIndex, phase: \"after\", bytes: buffer.byteLength, sha256: observedSha256,\n cleanupIntentAt: null, removedAt: null, directoryDurability: null,\n };\n const state: ClientOperationState = steps.every((item) => item.state === \"observed-applied\") ? \"applied\" : \"in-progress\";\n const next = validateClientOperation({ ...disk, state, revision: disk.revision + 1, updatedAt: now, steps, artifacts: [...disk.artifacts, artifact] });\n try { publish(manifestPath(operationId, env), serialize(next), filesystem, undefined, cache); }\n catch { fail(\"AMBIGUOUS_OPERATION\", \"after artifact publication left ambiguous operation state\"); }\n return next;\n}\n\nexport interface ClientOperationRestartClassification {\n stepIndex: number | null;\n disposition: \"complete\" | \"retryable\" | \"advance\" | \"blocked\";\n reason: string;\n}\n\n/** Classify one externally observed digest without changing either operation or client state. */\nexport function classifyClientOperationRestart(\n manifest: ClientOperationManifest, observedSha256: string,\n): ClientOperationRestartClassification {\n const step = pendingStep(manifest);\n if (!step) return { stepIndex: null, disposition: \"complete\", reason: \"all ordered steps are durably observed applied\" };\n if (!/^[0-9a-f]{64}$/.test(observedSha256)) return { stepIndex: step.index, disposition: \"blocked\", reason: \"the pending step state is ambiguous\" };\n if (observedSha256 === step.expectedAfterSha256 && step.state === \"intent-recorded\") return { stepIndex: step.index, disposition: \"advance\", reason: \"the pending step matches its expected after-state\" };\n if (observedSha256 === step.expectedBeforeSha256) return { stepIndex: step.index, disposition: \"retryable\", reason: \"the pending step matches its expected before-state\" };\n return { stepIndex: step.index, disposition: \"blocked\", reason: \"the pending step state is ambiguous\" };\n}\nexport function writeClientOperationSnapshot(operationId: string, current: ClientOperationManifest, name: string, contents: string | Buffer, lock: ClientOperationLock, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationManifest {\n assertLock(lock);\n const cache = privatePathCacheForLock(lock);\n name = safeText(name, \"snapshot name\", 80);\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name) || name.includes(\"..\")) fail(\"INVALID_SNAPSHOT\", \"snapshot name is invalid\");\n const disk = readClientOperationWithCache(operationId, env, cache);\n if (disk.runtime !== lock.runtime || disk.instance !== lock.instance) fail(\"LOCK_MISMATCH\", \"client lock does not cover this operation\");\n if (disk.host !== hostname()) fail(\"CROSS_HOST_RESUME\", \"operation can only mutate on its creating host\");\n const step = disk.steps.find((item) => item.beforeArtifact === name);\n if (disk.revision !== current.revision || disk.state !== \"prepared\"\n || disk.artifacts.some((item) => item.name === name) || !step) {\n fail(\"STALE_OPERATION\", \"snapshot publication refused\");\n }\n const buffer = Buffer.isBuffer(contents) ? contents : Buffer.from(contents);\n if (buffer.byteLength > MAX_SNAPSHOT_BYTES\n || disk.artifacts.reduce((total, artifact) => total + artifact.bytes, 0) + buffer.byteLength > MAX_TOTAL_SNAPSHOT_BYTES) {\n fail(\"SNAPSHOT_TOO_LARGE\", \"snapshot exceeds the operation size limit\");\n }\n const sha256 = createHash(\"sha256\").update(buffer).digest(\"hex\");\n if (sha256 !== step.expectedBeforeSha256) fail(\"SNAPSHOT_MISMATCH\", \"snapshot does not match the expected before-state\");\n const snapshotDirectory = join(operationDirectory(operationId, env), \"snapshots\");\n privateDirectory(snapshotDirectory, cache);\n publishNoReplace(join(snapshotDirectory, name), buffer, filesystem, cache);\n const artifact: ClientOperationArtifact = {\n name, stepIndex: step.index, phase: \"before\", bytes: buffer.byteLength, sha256,\n cleanupIntentAt: null, removedAt: null, directoryDurability: null,\n };\n const next = validateClientOperation({ ...disk, revision: disk.revision + 1, updatedAt: new Date().toISOString(), artifacts: [...disk.artifacts, artifact] });\n try { publish(manifestPath(operationId, env), serialize(next), filesystem, undefined, cache); }\n catch (error) { fail(\"AMBIGUOUS_OPERATION\", \"snapshot publication left ambiguous operation state\"); }\n return next;\n}\n\n/** Remove one artifact with durable intent. Call repeatedly until committed. */\nexport function cleanupClientOperationArtifact(\n operationId: string, current: ClientOperationManifest, lock: ClientOperationLock,\n env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\n): ClientOperationManifest {\n if (!UUID.test(operationId)) fail(\"INVALID_OPERATION_ID\", \"operation id is invalid\");\n const cache = privatePathCacheForLock(lock);\n try {\n return cleanupClientOperationArtifactWithCache(operationId, current, lock, env, filesystem, cache);\n } catch (error) {\n cache.clear();\n throw error;\n }\n}\n\nfunction cleanupClientOperationArtifactWithCache(\n operationId: string, current: ClientOperationManifest, lock: ClientOperationLock,\n env: NodeJS.ProcessEnv, filesystem: ClientOperationFilesystem, cache: PrivateDirectoryAccessCache,\n): ClientOperationManifest {\n const pinned = pinOperationRoot(env, false, cache);\n const operationPath = join(pinned.root, operationId.toLowerCase());\n const operationIdentity = privateDirectory(operationPath, cache);\n const directory = join(operationPath, \"snapshots\");\n const identity = privateDirectory(directory, cache);\n const operationManifest = join(operationPath, \"manifest.json\");\n const assertCleanupPaths = () => {\n assertPinnedRoot(pinned, cache);\n sameDirectory(operationPath, operationIdentity, cache);\n sameDirectory(directory, identity, cache);\n };\n assertCleanupPaths();\n let disk = verifyOperationLock(operationId, current, lock, env);\n assertCleanupPaths();\n if (disk.state === \"committed\") return disk;\n if (disk.state !== \"applied\" && disk.state !== \"cleaning\") fail(\"ILLEGAL_TRANSITION\", \"operation writes are not fully applied\");\n let artifact = disk.artifacts.find((item) => item.removedAt === null);\n if (!artifact) {\n filesystem.hook(\"before-cleanup-commit\", operationManifest);\n assertCleanupPaths();\n const now = new Date().toISOString();\n const rollback = disk.version === 4 && disk.request?.kind === \"update\" && \"rollback\" in disk.request\n ? disk.request.rollback ?? null\n : null;\n const migration = disk.version === 5 && disk.request?.kind === \"migrate\"\n ? {\n schema: \"agent-bridge.client-migration-stage-contract\" as const,\n version: 1 as const,\n stageOperationId: disk.operationId,\n request: disk.request as ClientMigrationStageRequest,\n stageRecordSha256: disk.steps[1]!.expectedAfterSha256,\n targetBackendProjectionSha256: disk.steps[0]!.expectedAfterSha256,\n }\n : disk.version === 6 && [\"migrate-cutover\", \"migrate-finalize\"].includes(String(disk.request?.kind))\n ? disk.request as ClientMigrationCutoverRequest\n : null;\n const completion: ClientOperationCompletion = {\n operation: disk.request!.kind,\n stepCount: disk.steps.length,\n completedAt: now,\n cleanupDirectoryDurability: disk.artifacts.some((item) => item.directoryDurability === \"unavailable\")\n ? \"unavailable\" : \"durable\",\n ...(disk.version === 4 ? { rollback } : {}),\n ...(disk.version === 5 || disk.version === 6 ? { migration } : {}),\n };\n const terminal = validateClientOperation({\n ...disk, request: null, state: \"committed\", revision: disk.revision + 1,\n updatedAt: now, completion, artifacts: [], steps: [],\n });\n publish(operationManifest, serialize(terminal), filesystem, operationIdentity, cache);\n assertCleanupPaths();\n return terminal;\n }\n const intentPredatedInvocation = artifact.cleanupIntentAt !== null;\n const path = join(directory, artifact.name);\n if (!intentPredatedInvocation) {\n let preflight: number;\n try { preflight = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n fail(\"CLEANUP_BLOCKED\", \"artifact disappeared before cleanup intent could authorize recovery\");\n }\n fail(\"CLEANUP_BLOCKED\", \"artifact cannot be safely opened for cleanup\");\n }\n try {\n const details = fstatSync(preflight);\n if (!details.isFile() || details.size !== artifact.bytes\n || createHash(\"sha256\").update(readFileSync(preflight)).digest(\"hex\") !== artifact.sha256) {\n fail(\"CLEANUP_BLOCKED\", \"artifact no longer matches its durable record\");\n }\n sameDirectory(directory, identity, cache);\n const currentPath = lstatSync(path);\n if (currentPath.isSymbolicLink() || currentPath.dev !== details.dev || currentPath.ino !== details.ino) {\n fail(\"PATH_REPLACED\", \"artifact changed during cleanup\");\n }\n } finally { closeSync(preflight); }\n assertCleanupPaths();\n const now = new Date().toISOString();\n const artifacts = disk.artifacts.map((item) => item.name === artifact!.name ? { ...item, cleanupIntentAt: now } : item);\n disk = validateClientOperation({ ...disk, state: \"cleaning\", revision: disk.revision + 1, updatedAt: now, artifacts });\n publish(operationManifest, serialize(disk), filesystem, operationIdentity, cache);\n assertCleanupPaths();\n filesystem.hook(\"after-cleanup-intent\", artifact.name);\n assertCleanupPaths();\n artifact = disk.artifacts.find((item) => item.name === artifact!.name)!;\n }\n let absent = false;\n let descriptor: number | undefined;\n try { descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\" && intentPredatedInvocation) absent = true;\n else if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n fail(\"CLEANUP_BLOCKED\", \"artifact disappeared before cleanup intent could authorize recovery\");\n }\n else fail(\"CLEANUP_BLOCKED\", \"artifact cannot be safely opened for cleanup\");\n }\n if (descriptor !== undefined) {\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size !== artifact.bytes\n || createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") !== artifact.sha256) {\n fail(\"CLEANUP_BLOCKED\", \"artifact no longer matches its durable record\");\n }\n sameDirectory(directory, identity, cache);\n const currentPath = lstatSync(path);\n if (currentPath.isSymbolicLink() || currentPath.dev !== details.dev || currentPath.ino !== details.ino) {\n fail(\"PATH_REPLACED\", \"artifact changed during cleanup\");\n }\n } finally { closeSync(descriptor); }\n }\n if (!absent) {\n filesystem.hook(\"before-artifact-unlink\", path);\n assertCleanupPaths();\n filesystem.remove(path);\n filesystem.hook(\"after-artifact-unlink\", path);\n }\n assertCleanupPaths();\n let directoryDurability: \"durable\" | \"unavailable\";\n if (process.platform === \"win32\") directoryDurability = \"unavailable\";\n else {\n filesystem.hook(\"before-directory-sync\", directory);\n assertCleanupPaths();\n filesystem.syncDirectory(directory);\n assertCleanupPaths();\n directoryDurability = \"durable\";\n }\n filesystem.hook(\"after-artifact-directory-sync\", path);\n const now = new Date().toISOString();\n const artifacts = disk.artifacts.map((item) => item.name === artifact!.name\n ? { ...item, removedAt: now, directoryDurability } : item);\n const next = validateClientOperation({ ...disk, state: \"cleaning\", revision: disk.revision + 1, updatedAt: now, artifacts });\n assertCleanupPaths();\n publish(operationManifest, serialize(next), filesystem, operationIdentity, cache);\n assertCleanupPaths();\n return next;\n}\n\nexport function completeClientOperationCleanup(\n operationId: string, current: ClientOperationManifest, lock: ClientOperationLock,\n env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults,\n): ClientOperationManifest {\n let manifest = current;\n while (manifest.state !== \"committed\") manifest = cleanupClientOperationArtifact(operationId, manifest, lock, env, filesystem);\n return manifest;\n}\n\ninterface ClientOperationArtifactInspection { intact: boolean; resumableResidue: boolean }\nfunction inspectOperationArtifacts(manifest: ClientOperationManifest, env: NodeJS.ProcessEnv, filesystem: ClientOperationFilesystem): ClientOperationArtifactInspection {\n const directory = join(operationDirectory(manifest.operationId, env), \"snapshots\");\n try {\n const identity = privateDirectory(directory);\n const names = readdirSync(directory).sort();\n filesystem.hook(\"after-snapshot-directory-read\", directory);\n sameDirectory(directory, identity);\n const retained = manifest.artifacts.filter((item) => item.removedAt === null);\n const retainedNames = new Set(retained.map((item) => item.name));\n const pending = pendingStep(manifest);\n const orphanAfter = pending?.state === \"intent-recorded\"\n && !manifest.artifacts.some((item) => item.name === pending.afterArtifact)\n ? pending : null;\n let resumableResidue = false;\n for (const name of names) {\n if (retainedNames.has(name)) continue;\n if (!orphanAfter || name !== orphanAfter.afterArtifact) return { intact: false, resumableResidue: false };\n sameDirectory(directory, identity);\n const path = join(directory, name); verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size > MAX_SNAPSHOT_BYTES\n || createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") !== orphanAfter.expectedAfterSha256) {\n return { intact: false, resumableResidue: false };\n }\n sameDirectory(directory, identity);\n resumableResidue = true;\n } finally { closeSync(descriptor); }\n }\n for (const artifact of retained) {\n if (!names.includes(artifact.name)) {\n if (artifact.cleanupIntentAt !== null) { resumableResidue = true; continue; }\n return { intact: false, resumableResidue: false };\n }\n sameDirectory(directory, identity);\n const path = join(directory, artifact.name); verifyPrivatePathAccess(path, \"file\");\n filesystem.hook(\"before-snapshot-file-open\", path);\n sameDirectory(directory, identity);\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.size !== artifact.bytes || details.size > MAX_SNAPSHOT_BYTES) {\n return { intact: false, resumableResidue: false };\n }\n const matches = createHash(\"sha256\").update(readFileSync(descriptor)).digest(\"hex\") === artifact.sha256;\n sameDirectory(directory, identity);\n if (!matches) return { intact: false, resumableResidue: false };\n } finally { closeSync(descriptor); }\n }\n return { intact: true, resumableResidue };\n } catch { return { intact: false, resumableResidue: false }; }\n}\nexport function inspectClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationSummary {\n try {\n const manifest = readClientOperation(operationId, env);\n const artifactInspection = inspectOperationArtifacts(manifest, env, filesystem);\n const intact = artifactInspection.intact;\n const pending = pendingStep(manifest);\n const ambiguous = pending?.state === \"intent-recorded\";\n const sameHost = manifest.host === hostname();\n const unsupported = manifest.state !== \"committed\"\n && (!manifest.request || !clientOperationSupportsResume(manifest.version, manifest.request.kind));\n const inspectionState: ClientOperationSummary[\"inspectionState\"] = !intact\n ? \"blocked\" : manifest.state === \"committed\" ? \"complete\" : !sameHost\n ? \"blocked\" : unsupported ? \"blocked\" : ambiguous ? \"classification-required\" : \"resumable\";\n return {\n schemaVersion: manifest.version, operationId: manifest.operationId,\n operation: manifest.request?.kind ?? manifest.completion?.operation ?? null,\n runtime: manifest.runtime, instance: manifest.instance,\n state: intact ? manifest.state : \"corrupt\", inspectionState, revision: manifest.revision,\n createdAt: manifest.createdAt, updatedAt: manifest.updatedAt,\n completedAt: manifest.completion?.completedAt ?? null,\n cleanupDirectoryDurability: manifest.completion?.cleanupDirectoryDurability ?? null,\n artifacts: intact ? manifest.artifacts : [], pendingStep: intact ? (pending?.index ?? null) : null,\n recoverable: inspectionState === \"resumable\" || inspectionState === \"classification-required\",\n reason: !intact ? \"operation artifacts do not match the durable manifest\"\n : !sameHost ? \"operation can only resume on its creating host\"\n : unsupported ? manifest.version === 2\n ? \"legacy operation lacks an identity-bound request and cannot resume\"\n : \"operation format and kind do not support resume\"\n : ambiguous ? `operation stopped at ordered step ${pending.index} and requires external-state classification`\n : manifest.state === \"committed\" ? \"operation is complete and retains a credential-free audit record\"\n : artifactInspection.resumableResidue ? \"operation contains expected crash residue and can resume safely\"\n : \"operation state is internally consistent\",\n };\n } catch (error) {\n if (!(error instanceof ClientOperationError) || error.code === \"INVALID_OPERATION_ID\") throw error;\n return { schemaVersion: CLIENT_OPERATION_VERSION, operationId: operationId.toLowerCase(), operation: null, runtime: null, instance: null, state: \"corrupt\", inspectionState: \"blocked\", revision: null, createdAt: null, updatedAt: null, completedAt: null, cleanupDirectoryDurability: null, artifacts: [], pendingStep: null, recoverable: false, reason: \"operation state is corrupt or insecure\" };\n }\n}\nexport function reconcileClientOperation(operationId: string, env: NodeJS.ProcessEnv = process.env): ClientOperationSummary {\n const summary = inspectClientOperation(operationId, env);\n if (summary.inspectionState === \"blocked\") fail(\"CORRUPT_OPERATION\", \"operation state cannot be safely reconciled\");\n if (summary.inspectionState === \"classification-required\") fail(\"AMBIGUOUS_OPERATION\", \"operation requires external-state classification at its pending step\");\n return summary;\n}\nexport function listClientOperations(env: NodeJS.ProcessEnv = process.env, filesystem: ClientOperationFilesystem = filesystemDefaults): ClientOperationSummary[] {\n const root = clientOperationRoot(env);\n if (!existsSync(root)) return [];\n privateDirectory(root);\n const entries = readdirSync(root, { withFileTypes: true })\n .filter((entry) => UUID.test(entry.name));\n if (entries.length > MAX_LISTED_OPERATIONS) {\n fail(\"OPERATION_LIMIT\", \"operation directory exceeds the inspection limit\");\n }\n return entries\n .map((entry) => inspectClientOperation(entry.name, env, filesystem))\n .sort((a, b) => (b.updatedAt ?? \"\").localeCompare(a.updatedAt ?? \"\"));\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport {\n closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync,\n readFileSync, renameSync, rmSync, writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { HttpBridgeStore } from \"./http-bridge-store.js\";\nimport { edgeScopeKey, SQLiteEdgeStore } from \"./sqlite-edge-store.js\";\nimport {\n stagedGatewayBackendPaths,\n writeStagedGatewayBackendConfig,\n type InstallableRuntime,\n} from \"./client-installer.js\";\nimport {\n beginClientOperation,\n classifyClientOperationRestart,\n completeClientOperationCleanup,\n hasClientOperationLock,\n readClientOperation,\n recordClientOperationStepApplied,\n recordClientOperationStepIntent,\n recoverClientOperationLock,\n releaseClientOperationLock,\n resumeClientOperation,\n transitionClientOperation,\n writeClientOperationSnapshot,\n type ClientMigrationStageRequest,\n type ClientOperationLock,\n type ClientOperationManifest,\n} from \"./client-operation.js\";\nimport {\n loadManagedClientMetadata,\n observeManagedRegistration,\n type ClientLifecycleExecutor,\n type ManagedClientMetadata,\n} from \"./client-lifecycle.js\";\nimport {\n acquireEnrollmentLock,\n deleteEnrollmentFile,\n readEnrollment,\n recoverEnrollmentLock,\n releaseEnrollmentLock,\n transitionEnrollment,\n type EnrollmentFile,\n type EnrollmentLock,\n} from \"./enrollment-file.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst BACKEND_KEYS = [\n \"AGENT_BRIDGE_PROVIDER\",\n \"AGENT_BRIDGE_WORKSPACE\",\n \"AGENT_BRIDGE_URL\",\n \"AGENT_BRIDGE_TOKEN\",\n \"AGENT_BRIDGE_EDGE_DB\",\n \"AGENT_BRIDGE_CREDENTIAL_ID\",\n \"AGENT_BRIDGE_PRINCIPAL\",\n \"AGENT_BRIDGE_CLIENT_INSTANCE\",\n] as const;\nconst MIN_PREDECESSOR_GRACE_MS = 5 * 60_000;\n\ntype BackendKey = (typeof BACKEND_KEYS)[number];\ntype BackendValues = Record<BackendKey, string>;\n\ninterface BackendProjection {\n provider: \"gateway\";\n workspace: string;\n endpointSha256: string;\n edgeDatabasePath: string;\n credentialId: string;\n principal: string;\n instance: string;\n}\n\ninterface StageRecord {\n schema: \"agent-bridge.client-migration-stage\";\n version: 1;\n state: \"staged\";\n operationId: string;\n createdAt: string;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n enrollmentRequestId: string;\n source: {\n backendConfigPath: string;\n edgeDatabasePath: string;\n scopeKey: string;\n endpointSha256: string;\n credentialId: string;\n graceUntil: string;\n };\n target: {\n backendConfigPath: string;\n edgeDatabasePath: string;\n endpointSha256: string;\n credentialId: string;\n workspace: string;\n principal: string;\n };\n}\n\nexport interface ClientMigrationStagePlan {\n schemaVersion: 1;\n action: \"migrate-stage\";\n applied: boolean;\n operationId: string | null;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n enrollmentFile: string;\n sourceBackendPath: string;\n sourceEdgeDatabasePath: string;\n sourceScopeKey: string;\n targetBackendPath: string | null;\n stageRecordPath: string | null;\n sourceEndpointSha256: string;\n targetEndpointSha256: string;\n successorCredentialId: string;\n enrollmentStatus: \"ready\" | \"consumed-file-retained\" | \"consumed-file-missing\" | \"consumed-deletion-durability-unknown\";\n}\n\nexport interface ClientMigrationStageOptions {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n enrollmentFile: string;\n apply?: boolean;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n verifyTarget?: (input: {\n url: string;\n token: string;\n workspace: string;\n principal: string;\n instance: string;\n }) => Promise<void>;\n verifySource?: (input: {\n url: string;\n token: string;\n workspace: string;\n principal: string;\n instance: string;\n }) => Promise<void>;\n now?: () => Date;\n}\n\nexport interface ResumeClientMigrationStageOptions {\n operationId: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n verifyTarget?: ClientMigrationStageOptions[\"verifyTarget\"];\n verifySource?: ClientMigrationStageOptions[\"verifySource\"];\n now?: () => Date;\n}\n\nclass ClientMigrationStageError extends Error {\n constructor(readonly code: string, message: string) {\n super(message);\n this.name = \"ClientMigrationStageError\";\n }\n}\n\nfunction fail(code: string, message: string): never {\n throw new ClientMigrationStageError(code, message);\n}\n\nfunction text(value: unknown, label: string, maximum = 512): string {\n if (typeof value !== \"string\" || !value || value !== value.trim() || value.length > maximum\n || /[\\u0000-\\u001f\\u007f]/u.test(value)) {\n fail(\"INVALID_STAGE\", `${label} is invalid`);\n }\n return value;\n}\n\nfunction identity(value: unknown): string {\n const selected = text(value, \"identity\", 128);\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(selected)) fail(\"INVALID_STAGE\", \"identity is invalid\");\n return selected;\n}\n\nfunction uuid(value: unknown, label: string): string {\n const selected = text(value, label, 36).toLowerCase();\n if (!UUID.test(selected)) fail(\"INVALID_STAGE\", `${label} is invalid`);\n return selected;\n}\n\nfunction canonical(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n const object = value as Record<string, unknown>;\n return `{${Object.keys(object).sort().map((key) => `${JSON.stringify(key)}:${canonical(object[key])}`).join(\",\")}}`;\n}\n\nfunction digest(value: unknown): string {\n return createHash(\"sha256\").update(canonical(value), \"utf8\").digest(\"hex\");\n}\n\nfunction endpointSha256(value: string): string {\n let parsed: URL;\n try { parsed = new URL(value); } catch { fail(\"INVALID_STAGE\", \"gateway endpoint is invalid\"); }\n if (parsed.username || parsed.password || parsed.hash || parsed.search) {\n fail(\"INVALID_STAGE\", \"gateway endpoint is invalid\");\n }\n return createHash(\"sha256\").update(parsed.toString().replace(/\\/$/, \"\"), \"utf8\").digest(\"hex\");\n}\n\nfunction stageAbsentProof(): Record<string, boolean> { return { exists: false }; }\n\nfunction enrollmentProof(enrollment: EnrollmentFile): Record<string, unknown> {\n return {\n state: enrollment.state,\n operation: enrollment.operation,\n requestId: enrollment.requestId,\n credentialId: enrollment.result?.credentialId ?? null,\n inputCredentialId: enrollment.input.credentialId,\n workspaceId: enrollment.input.workspaceId,\n principal: enrollment.input.principal,\n runtime: enrollment.input.runtime,\n instance: enrollment.input.instance,\n };\n}\n\nfunction readPrivateText(path: string): string {\n verifyPrivatePathAccess(path, \"file\");\n const before = lstatSync(path);\n if (!before.isFile() || before.isSymbolicLink()) fail(\"UNSAFE_STAGE_PATH\", \"private stage file is not a regular file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile() || details.dev !== before.dev || details.ino !== before.ino) {\n fail(\"UNSAFE_STAGE_PATH\", \"private stage file changed while reading\");\n }\n return readFileSync(descriptor, \"utf8\");\n } finally {\n closeSync(descriptor);\n }\n}\n\nfunction parseBackendValues(path: string): BackendValues {\n const output: Partial<Record<BackendKey, string>> = {};\n for (const raw of readPrivateText(path).split(/\\r?\\n/u)) {\n if (!raw) continue;\n const separator = raw.indexOf(\"=\");\n if (separator <= 0) fail(\"INVALID_BACKEND\", \"client backend config is invalid\");\n const key = raw.slice(0, separator) as BackendKey;\n const value = raw.slice(separator + 1);\n if (!(BACKEND_KEYS as readonly string[]).includes(key) || key in output || !value || /[\\r\\n]/u.test(value)) {\n fail(\"INVALID_BACKEND\", \"client backend config is invalid\");\n }\n output[key] = value;\n }\n if (Object.keys(output).sort().join(\",\") !== [...BACKEND_KEYS].sort().join(\",\")) {\n fail(\"INVALID_BACKEND\", \"client backend config has an unexpected binding\");\n }\n return output as BackendValues;\n}\n\nfunction backendProjection(values: BackendValues): BackendProjection {\n if (values.AGENT_BRIDGE_PROVIDER !== \"gateway\") fail(\"INVALID_BACKEND\", \"client backend is not gateway-backed\");\n const workspace = text(values.AGENT_BRIDGE_WORKSPACE, \"workspace\", 128);\n const edgeDatabasePath = text(values.AGENT_BRIDGE_EDGE_DB, \"edge database path\", 4096);\n if (edgeDatabasePath === \":memory:\" || !isAbsolute(edgeDatabasePath) || resolve(edgeDatabasePath) !== edgeDatabasePath) {\n fail(\"INVALID_BACKEND\", \"gateway edge database path must be an absolute normalized file path\");\n }\n const credentialId = uuid(values.AGENT_BRIDGE_CREDENTIAL_ID, \"credential ID\");\n const principal = identity(values.AGENT_BRIDGE_PRINCIPAL);\n const instance = text(values.AGENT_BRIDGE_CLIENT_INSTANCE, \"instance\", 128);\n return {\n provider: \"gateway\",\n workspace,\n endpointSha256: endpointSha256(values.AGENT_BRIDGE_URL),\n edgeDatabasePath,\n credentialId,\n principal,\n instance,\n };\n}\n\nfunction backendProof(path: string, expected?: BackendProjection): Record<string, unknown> {\n if (!existsSync(path)) return stageAbsentProof();\n const actual = backendProjection(parseBackendValues(path));\n if (expected && canonical(actual) !== canonical(expected)) {\n fail(\"STAGED_BACKEND_DRIFT\", \"staged backend no longer matches its verified target\");\n }\n return { exists: true, backend: actual };\n}\n\nfunction stageRecordPaths(operationId: string, env: NodeJS.ProcessEnv): {\n backendConfigPath: string;\n edgeDatabasePath: string;\n stageRecordPath: string;\n} {\n const paths = stagedGatewayBackendPaths(operationId, env);\n return {\n backendConfigPath: paths.backendConfigPath,\n edgeDatabasePath: paths.edgeDatabasePath,\n stageRecordPath: join(paths.directory, \"stage.json\"),\n };\n}\n\nfunction assertStagePath(path: string, operationId: string, env: NodeJS.ProcessEnv): void {\n const paths = stageRecordPaths(operationId, env);\n if (![paths.backendConfigPath, paths.stageRecordPath].includes(resolve(path))) {\n fail(\"UNSAFE_STAGE_PATH\", \"stage path is outside its operation directory\");\n }\n const directory = dirname(paths.backendConfigPath);\n if (relative(directory, resolve(path)).startsWith(\"..\")) fail(\"UNSAFE_STAGE_PATH\", \"stage path is outside its operation directory\");\n}\n\nfunction assertStageTargetsAbsent(operationId: string, env: NodeJS.ProcessEnv): void {\n const paths = stageRecordPaths(operationId, env);\n for (const path of [paths.backendConfigPath, paths.stageRecordPath]) {\n if (!existsSync(path)) continue;\n assertStagePath(path, operationId, env);\n verifyPrivatePathAccess(path, \"file\");\n fail(\"AMBIGUOUS_OPERATION\", \"migration stage target already exists\");\n }\n}\n\nfunction writeStageRecord(path: string, record: StageRecord, operationId: string, env: NodeJS.ProcessEnv): string {\n assertStagePath(path, operationId, env);\n const content = `${canonical(record)}\\n`;\n const directory = dirname(path);\n const root = dirname(directory);\n mkdirSync(root, { recursive: true, mode: 0o700 });\n securePrivatePath(root, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n if (existsSync(path)) verifyPrivatePathAccess(path, \"file\");\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, content, \"utf8\");\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n securePrivatePath(temporary, \"file\");\n try {\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const directoryDescriptor = openSync(directory, \"r\");\n try { fsyncSync(directoryDescriptor); } finally { closeSync(directoryDescriptor); }\n }\n } catch (error) {\n try { rmSync(temporary, { force: true }); } catch {}\n throw error;\n }\n return content;\n}\n\nfunction readStageRecord(path: string, operationId: string, env: NodeJS.ProcessEnv): string | undefined {\n assertStagePath(path, operationId, env);\n return existsSync(path) ? readPrivateText(path) : undefined;\n}\n\nfunction expectedStageRecord(\n operationId: string,\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n request: ClientMigrationStageRequest,\n target: BackendProjection,\n createdAt: string,\n): StageRecord {\n return {\n schema: \"agent-bridge.client-migration-stage\",\n version: 1,\n state: \"staged\",\n operationId,\n createdAt,\n runtime,\n identity: identityValue,\n instance,\n enrollmentRequestId: request.enrollmentRequestId,\n source: {\n backendConfigPath: request.sourceBackendPath,\n edgeDatabasePath: request.sourceEdgeDatabasePath,\n scopeKey: request.sourceScopeKey,\n endpointSha256: request.sourceEndpointSha256,\n credentialId: request.predecessorCredentialId,\n graceUntil: request.predecessorGraceUntil,\n },\n target: {\n backendConfigPath: request.targetBackendPath,\n edgeDatabasePath: target.edgeDatabasePath,\n endpointSha256: request.targetEndpointSha256,\n credentialId: request.successorCredentialId,\n workspace: target.workspace,\n principal: target.principal,\n },\n };\n}\n\nfunction stageRecordContents(record: StageRecord): string {\n return `${canonical(record)}\\n`;\n}\n\nfunction stageRecordProof(contents: string): Record<string, unknown> {\n return { exists: true, sha256: digest(contents) };\n}\n\nfunction missingPath(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\");\n}\n\nfunction enrollmentLockPath(path: string): string {\n return `${resolve(path)}.lock`;\n}\n\n/** A surviving enrollment lock is evidence of an interrupted owner. Never bypass it. */\nfunction requireNoEnrollmentLock(path: string): void {\n const lockPath = enrollmentLockPath(path);\n if (!existsSync(lockPath)) return;\n verifyPrivatePathAccess(lockPath, \"file\");\n fail(\"ENROLLMENT_LOCKED\", \"rotation enrollment has an unfinished lock; use --recover-lock after proving it is stale\");\n}\n\nfunction recoverEnrollmentLockIfPresent(path: string, env: NodeJS.ProcessEnv): void {\n if (existsSync(enrollmentLockPath(path))) recoverEnrollmentLock(path, env);\n}\n\nfunction checkMetadata(\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n execute: ClientLifecycleExecutor | undefined,\n env: NodeJS.ProcessEnv,\n): ManagedClientMetadata {\n const metadata = loadManagedClientMetadata(runtime, instance, env);\n if (metadata.identity !== identityValue || metadata.instance !== instance || metadata.runtime !== runtime) {\n fail(\"MANAGED_CLIENT_DRIFT\", \"managed client identity does not match the requested migration\");\n }\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state !== \"exact\") fail(\"MANAGED_CLIENT_DRIFT\", \"managed client registration is not exact\");\n return metadata;\n}\n\nfunction checkEnrollment(\n enrollment: EnrollmentFile,\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n source: BackendProjection,\n minimumGraceMs = MIN_PREDECESSOR_GRACE_MS,\n now = new Date(),\n): void {\n const graceUntil = enrollment.input.graceUntil;\n if (enrollment.operation !== \"rotate\" || enrollment.input.runtime !== runtime\n || enrollment.input.principal !== identityValue || enrollment.input.instance !== instance\n || enrollment.input.credentialId !== source.credentialId || enrollment.input.workspaceId !== source.workspace\n || enrollment.result === null || enrollment.result.credentialId === source.credentialId\n || enrollment.result.principal !== identityValue || enrollment.result.workspaceId !== enrollment.input.workspaceId\n || enrollment.input.invalidateImmediately || graceUntil === null\n || new Date(graceUntil).getTime() - now.getTime() <= minimumGraceMs) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment does not match the managed client\");\n }\n}\n\nfunction makeRequest(\n operationId: string,\n metadata: ManagedClientMetadata,\n source: BackendProjection,\n enrollment: EnrollmentFile,\n enrollmentPath: string,\n env: NodeJS.ProcessEnv,\n): ClientMigrationStageRequest {\n const paths = stageRecordPaths(operationId, env);\n const successorCredentialId = enrollment.result?.credentialId;\n if (!successorCredentialId) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment has no successor credential\");\n const targetEndpointSha256 = endpointSha256(enrollment.input.gatewayUrl);\n if (source.endpointSha256 === targetEndpointSha256) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment must use a different gateway endpoint\");\n }\n return {\n kind: \"migrate\",\n identity: metadata.identity,\n enrollmentPath: resolve(enrollmentPath),\n enrollmentRequestId: enrollment.requestId,\n sourceBackendPath: metadata.backendConfigPath,\n sourceEdgeDatabasePath: source.edgeDatabasePath,\n sourceScopeKey: edgeScopeKey({\n endpoint: parseBackendValues(metadata.backendConfigPath).AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n }),\n targetBackendPath: paths.backendConfigPath,\n stageRecordPath: paths.stageRecordPath,\n predecessorGraceUntil: enrollment.input.graceUntil!,\n targetWorkspace: enrollment.input.workspaceId,\n sourceEndpointSha256: source.endpointSha256,\n targetEndpointSha256,\n predecessorCredentialId: source.credentialId,\n successorCredentialId,\n };\n}\n\nasync function verifyGatewayBackend(\n values: BackendValues,\n projection: BackendProjection,\n verifier: ClientMigrationStageOptions[\"verifyTarget\"] | ClientMigrationStageOptions[\"verifySource\"],\n): Promise<void> {\n if (verifier) {\n await verifier({\n url: values.AGENT_BRIDGE_URL,\n token: values.AGENT_BRIDGE_TOKEN,\n workspace: projection.workspace,\n principal: projection.principal,\n instance: projection.instance,\n });\n return;\n }\n const remote = new HttpBridgeStore({\n baseUrl: values.AGENT_BRIDGE_URL,\n token: values.AGENT_BRIDGE_TOKEN,\n principal: { workspace: projection.workspace, agent: projection.principal, instance: projection.instance },\n });\n try { await remote.initialize(); } finally { await remote.close?.(); }\n}\n\nasync function verifySourceStage(\n values: BackendValues,\n source: BackendProjection,\n sourceScopeKey: string,\n verifier: ClientMigrationStageOptions[\"verifySource\"],\n): Promise<void> {\n const derivedScopeKey = edgeScopeKey({\n endpoint: values.AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n });\n if (derivedScopeKey !== sourceScopeKey) fail(\"MANAGED_CLIENT_DRIFT\", \"managed source edge scope changed during migration staging\");\n await verifyGatewayBackend(values, source, verifier);\n const edge = new SQLiteEdgeStore(source.edgeDatabasePath, {\n endpoint: values.AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n });\n try {\n await edge.initialize();\n const gate = await edge.migrationGate();\n if (gate.state !== \"active\" || gate.scopeKey !== sourceScopeKey) {\n fail(\"SOURCE_EDGE_NOT_ACTIVE\", \"recorded source edge scope is not active for migration staging\");\n }\n } finally {\n await edge.close();\n }\n}\n\nfunction targetValuesFromEnrollment(enrollment: EnrollmentFile, target: BackendProjection): BackendValues {\n if (!enrollment.token) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment no longer contains a credential\");\n return {\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_WORKSPACE: target.workspace,\n AGENT_BRIDGE_URL: enrollment.input.gatewayUrl,\n AGENT_BRIDGE_TOKEN: enrollment.token,\n AGENT_BRIDGE_EDGE_DB: target.edgeDatabasePath,\n AGENT_BRIDGE_CREDENTIAL_ID: target.credentialId,\n AGENT_BRIDGE_PRINCIPAL: target.principal,\n AGENT_BRIDGE_CLIENT_INSTANCE: target.instance,\n };\n}\n\nasync function verifyStagedTargetBeforeConsumption(\n request: ClientMigrationStageRequest,\n target: BackendProjection,\n recordContents: string,\n enrollment: EnrollmentFile,\n verifier: ClientMigrationStageOptions[\"verifyTarget\"],\n operationId: string,\n env: NodeJS.ProcessEnv,\n): Promise<void> {\n const values = parseBackendValues(request.targetBackendPath);\n backendProof(request.targetBackendPath, target);\n if (!enrollment.token || values.AGENT_BRIDGE_TOKEN !== enrollment.token) {\n fail(\"STAGED_BACKEND_DRIFT\", \"staged backend credential no longer matches the rotation enrollment\");\n }\n await verifyGatewayBackend(values, target, verifier);\n if (readStageRecord(request.stageRecordPath, operationId, env) !== recordContents) {\n fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches the verified target\");\n }\n}\n\nfunction requireStageRequest(manifest: ClientOperationManifest): ClientMigrationStageRequest {\n if (manifest.version !== 5 || manifest.request?.kind !== \"migrate\"\n || !(\"identity\" in manifest.request)) {\n fail(\"CORRUPT_OPERATION\", \"operation is not a staged client migration\");\n }\n return manifest.request as ClientMigrationStageRequest;\n}\n\nfunction snapshotStageOperation(\n manifest: ClientOperationManifest,\n lock: ClientOperationLock,\n enrollment: EnrollmentFile,\n env: NodeJS.ProcessEnv,\n): ClientOperationManifest {\n let current = manifest;\n const request = requireStageRequest(current);\n const backendBefore = backendProof(request.targetBackendPath);\n const recordBefore = readStageRecord(request.stageRecordPath, current.operationId, env) === undefined\n ? stageAbsentProof()\n : { exists: true };\n if (canonical(backendBefore) !== canonical(stageAbsentProof())\n || canonical(recordBefore) !== canonical(stageAbsentProof())) {\n fail(\"AMBIGUOUS_OPERATION\", \"migration stage targets must be absent before snapshots are recorded\");\n }\n const before = [\n backendBefore,\n recordBefore,\n enrollmentProof(enrollment),\n ];\n for (const [index, proof] of before.entries()) {\n current = writeClientOperationSnapshot(current.operationId, current, current.steps[index]!.beforeArtifact,\n canonical(proof), lock, env);\n }\n return transitionClientOperation(current.operationId, current, \"snapshotted\", lock, env);\n}\n\nfunction assertPersistedManifest(current: ClientOperationManifest, env: NodeJS.ProcessEnv): void {\n if (canonical(readClientOperation(current.operationId, env)) !== canonical(current)) {\n fail(\"MANIFEST_DRIFT\", \"migration operation manifest changed before a staged write\");\n }\n}\n\nfunction checkRequestAgainstCurrent(\n manifest: ClientOperationManifest,\n execute: ClientLifecycleExecutor | undefined,\n env: NodeJS.ProcessEnv,\n now: Date,\n): { metadata: ManagedClientMetadata; source: BackendProjection; enrollment?: EnrollmentFile; target: BackendProjection } {\n const request = requireStageRequest(manifest);\n if (new Date(request.predecessorGraceUntil).getTime() <= now.getTime()) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment grace window has expired\");\n }\n const metadata = checkMetadata(manifest.runtime, request.identity, manifest.instance, execute, env);\n if (resolve(metadata.backendConfigPath) !== request.sourceBackendPath) {\n fail(\"MANAGED_CLIENT_DRIFT\", \"managed backend path changed during migration staging\");\n }\n const sourceValues = parseBackendValues(request.sourceBackendPath);\n const source = backendProjection(sourceValues);\n if (source.endpointSha256 !== request.sourceEndpointSha256 || source.credentialId !== request.predecessorCredentialId\n || source.edgeDatabasePath !== request.sourceEdgeDatabasePath\n || edgeScopeKey({ endpoint: sourceValues.AGENT_BRIDGE_URL, principal: { workspace: source.workspace, agent: source.principal } })\n !== request.sourceScopeKey\n || source.principal !== request.identity || source.instance !== manifest.instance) {\n fail(\"MANAGED_CLIENT_DRIFT\", \"managed backend binding changed during migration staging\");\n }\n let enrollment: EnrollmentFile | undefined;\n try { enrollment = readEnrollment(request.enrollmentPath, env); }\n catch (error) {\n const deletionMayBeInProgress = manifest.steps[0]?.state === \"observed-applied\"\n && manifest.steps[1]?.state === \"observed-applied\"\n && manifest.steps[2]?.state === \"intent-recorded\";\n if (!missingPath(error) || !deletionMayBeInProgress) throw error;\n }\n if (enrollment) {\n checkEnrollment(enrollment, manifest.runtime, request.identity, manifest.instance, source, 0, now);\n if (enrollment.requestId !== request.enrollmentRequestId || enrollment.result?.credentialId !== request.successorCredentialId\n || enrollment.input.graceUntil !== request.predecessorGraceUntil) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment changed during migration staging\");\n }\n }\n const target = {\n provider: \"gateway\" as const,\n workspace: request.targetWorkspace,\n endpointSha256: request.targetEndpointSha256,\n edgeDatabasePath: stageRecordPaths(manifest.operationId, env).edgeDatabasePath,\n credentialId: request.successorCredentialId,\n principal: request.identity,\n instance: manifest.instance,\n };\n if ((enrollment && (target.endpointSha256 !== endpointSha256(enrollment.input.gatewayUrl)\n || target.workspace !== enrollment.input.workspaceId))\n || target.endpointSha256 === request.sourceEndpointSha256\n || resolve(request.targetBackendPath) !== stageRecordPaths(manifest.operationId, env).backendConfigPath\n || resolve(request.stageRecordPath) !== stageRecordPaths(manifest.operationId, env).stageRecordPath) {\n fail(\"CORRUPT_OPERATION\", \"migration target paths or endpoint do not match the operation\");\n }\n return { metadata, source, enrollment, target };\n}\n\nasync function applyStageOperation(\n manifest: ClientOperationManifest,\n lock: ClientOperationLock,\n execute: ClientLifecycleExecutor | undefined,\n verifier: ClientMigrationStageOptions[\"verifyTarget\"],\n sourceVerifier: ClientMigrationStageOptions[\"verifySource\"],\n env: NodeJS.ProcessEnv,\n now: Date,\n): Promise<{ manifest: ClientOperationManifest; enrollmentStatus: ClientMigrationStagePlan[\"enrollmentStatus\"] }> {\n let current = manifest;\n const request = requireStageRequest(current);\n const checked = checkRequestAgainstCurrent(current, execute, env, now);\n let enrollment = checked.enrollment;\n if (!enrollment) requireNoEnrollmentLock(request.enrollmentPath);\n const enrollmentLock = enrollment ? acquireEnrollmentLock(request.enrollmentPath, env) : undefined;\n let enrollmentStatus: ClientMigrationStagePlan[\"enrollmentStatus\"] = \"ready\";\n try {\n if (enrollment && enrollmentLock) {\n enrollment = readEnrollment(request.enrollmentPath, env);\n checkEnrollment(enrollment, current.runtime, request.identity, current.instance, checked.source, 0, now);\n }\n if (current.state === \"prepared\") {\n if (!enrollment) fail(\"ENROLLMENT_MISMATCH\", \"missing enrollment cannot start migration staging\");\n current = snapshotStageOperation(current, lock, enrollment, env);\n }\n\n const record = expectedStageRecord(\n current.operationId, current.runtime, request.identity, current.instance, request, checked.target, current.createdAt,\n );\n const recordContents = stageRecordContents(record);\n\n const backendStep = current.steps[0]!;\n if (backendStep.state === \"observed-applied\"\n && digest(backendProof(request.targetBackendPath, checked.target)) !== backendStep.expectedAfterSha256) {\n fail(\"STAGED_BACKEND_DRIFT\", \"staged backend no longer matches its journal proof\");\n }\n if (backendStep.state !== \"observed-applied\") {\n const before = backendProof(request.targetBackendPath, checked.target);\n const classification = classifyClientOperationRestart(current, digest(before));\n if (classification.disposition === \"blocked\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n if (backendStep.state === \"pending\") {\n assertPersistedManifest(current, env);\n current = recordClientOperationStepIntent(current.operationId, current, 0, lock, env);\n assertPersistedManifest(current, env);\n }\n if (classification.disposition === \"retryable\") {\n const activeEnrollment = enrollment;\n if (!activeEnrollment || (activeEnrollment.state !== \"ready\" && activeEnrollment.state !== \"consuming\")) {\n fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment cannot create a staged backend\");\n }\n const token = activeEnrollment.token;\n if (!token) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment no longer contains a credential\");\n assertPersistedManifest(current, env);\n writeStagedGatewayBackendConfig(current.runtime, request.identity, current.instance, current.operationId, {\n token,\n gatewayUrl: activeEnrollment.input.gatewayUrl,\n workspace: activeEnrollment.input.workspaceId,\n credentialId: request.successorCredentialId,\n principal: request.identity,\n env,\n });\n }\n const after = backendProof(request.targetBackendPath, checked.target);\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 0, canonical(after), lock, env);\n }\n\n const recordStep = current.steps[1]!;\n if (recordStep.state === \"observed-applied\") {\n const contents = readStageRecord(request.stageRecordPath, current.operationId, env);\n if (contents !== recordContents || digest(stageRecordProof(contents)) !== recordStep.expectedAfterSha256) {\n fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches its journal proof\");\n }\n }\n if (recordStep.state !== \"observed-applied\") {\n const values = parseBackendValues(request.targetBackendPath);\n await verifyGatewayBackend(values, checked.target, verifier);\n const prior = readStageRecord(request.stageRecordPath, current.operationId, env);\n const proof = prior === undefined ? stageAbsentProof() : stageRecordProof(prior);\n const classification = classifyClientOperationRestart(current, digest(proof));\n if (classification.disposition === \"blocked\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n if (recordStep.state === \"pending\") {\n assertPersistedManifest(current, env);\n current = recordClientOperationStepIntent(current.operationId, current, 1, lock, env);\n assertPersistedManifest(current, env);\n }\n if (classification.disposition === \"retryable\") {\n assertPersistedManifest(current, env);\n writeStageRecord(request.stageRecordPath, record, current.operationId, env);\n }\n const afterRecord = readStageRecord(request.stageRecordPath, current.operationId, env);\n if (afterRecord !== recordContents) fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches the verified target\");\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 1,\n canonical(stageRecordProof(afterRecord)), lock, env);\n }\n\n const enrollmentStep = current.steps[2]!;\n if (enrollmentStep.state === \"observed-applied\") {\n if (existsSync(request.enrollmentPath)) {\n fail(\"ENROLLMENT_MISMATCH\", \"consumed enrollment remains after its deletion step\");\n }\n if (digest(stageAbsentProof()) !== enrollmentStep.expectedAfterSha256) {\n fail(\"CORRUPT_OPERATION\", \"enrollment deletion proof is invalid\");\n }\n }\n if (enrollmentStep.state !== \"observed-applied\") {\n if (!enrollment) {\n const fresh = checkRequestAgainstCurrent(current, execute, env, now);\n await verifySourceStage(\n parseBackendValues(request.sourceBackendPath), fresh.source, request.sourceScopeKey, sourceVerifier,\n );\n const values = parseBackendValues(request.targetBackendPath);\n backendProof(request.targetBackendPath, checked.target);\n await verifyGatewayBackend(values, checked.target, verifier);\n if (readStageRecord(request.stageRecordPath, current.operationId, env) !== recordContents) {\n fail(\"STAGE_RECORD_DRIFT\", \"stage record no longer matches the verified target\");\n }\n const classification = classifyClientOperationRestart(current, digest(stageAbsentProof()));\n if (classification.disposition !== \"advance\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 2,\n canonical(stageAbsentProof()), lock, env);\n enrollmentStatus = \"consumed-file-missing\";\n } else {\n const before = enrollmentProof(enrollment);\n const classification = classifyClientOperationRestart(current, digest(before));\n if (!enrollmentLock) fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment lock is unavailable\");\n if (enrollment.state === \"ready\" || enrollment.state === \"consuming\") {\n if (enrollmentStep.state === \"pending\" && classification.disposition !== \"retryable\") {\n fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n }\n // This must finish before durable intent says enrollment destruction can begin.\n const fresh = checkRequestAgainstCurrent(current, execute, env, now);\n await verifySourceStage(\n parseBackendValues(request.sourceBackendPath), fresh.source, request.sourceScopeKey, sourceVerifier,\n );\n await verifyStagedTargetBeforeConsumption(\n request,\n checked.target,\n recordContents,\n enrollment,\n verifier,\n current.operationId,\n env,\n );\n if (enrollmentStep.state === \"pending\") {\n assertPersistedManifest(current, env);\n current = recordClientOperationStepIntent(current.operationId, current, 2, lock, env);\n assertPersistedManifest(current, env);\n }\n } else if (enrollment.state !== \"consumed\" || enrollmentStep.state !== \"intent-recorded\") {\n fail(\"AMBIGUOUS_OPERATION\", \"enrollment state does not match the migration journal\");\n }\n if (enrollment.state === \"ready\") {\n assertPersistedManifest(current, env);\n enrollment = transitionEnrollment(request.enrollmentPath, enrollment, \"consuming\", {}, env, enrollmentLock);\n }\n if (enrollment.state === \"consuming\") {\n assertPersistedManifest(current, env);\n enrollment = transitionEnrollment(request.enrollmentPath, enrollment, \"consumed\", { token: null }, env, enrollmentLock);\n }\n if (enrollment.state !== \"consumed\") fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment did not reach consumed state\");\n assertPersistedManifest(current, env);\n const deletion = deleteEnrollmentFile(request.enrollmentPath, enrollmentLock, env);\n enrollmentStatus = deletion === \"deleted-and-durable\" || deletion === \"missing\" ? \"consumed-file-missing\"\n : \"consumed-deletion-durability-unknown\";\n assertPersistedManifest(current, env);\n current = recordClientOperationStepApplied(current.operationId, current, 2,\n canonical(stageAbsentProof()), lock, env);\n }\n }\n\n current = completeClientOperationCleanup(current.operationId, current, lock, env);\n return { manifest: current, enrollmentStatus };\n } finally {\n if (enrollmentLock) releaseEnrollmentLock(enrollmentLock);\n }\n}\n\nfunction planFrom(\n metadata: ManagedClientMetadata,\n source: BackendProjection,\n enrollment: EnrollmentFile | undefined,\n enrollmentFile: string,\n runtime: InstallableRuntime,\n identityValue: string,\n instance: string,\n applied: boolean,\n operationId: string | null,\n enrollmentStatus: ClientMigrationStagePlan[\"enrollmentStatus\"] = \"ready\",\n env: NodeJS.ProcessEnv,\n request?: ClientMigrationStageRequest,\n): ClientMigrationStagePlan {\n const paths = operationId ? stageRecordPaths(operationId, env) : null;\n return {\n schemaVersion: 1,\n action: \"migrate-stage\",\n applied,\n operationId,\n runtime,\n identity: identityValue,\n instance,\n enrollmentFile: resolve(enrollmentFile),\n sourceBackendPath: metadata.backendConfigPath,\n sourceEdgeDatabasePath: source.edgeDatabasePath,\n sourceScopeKey: edgeScopeKey({\n endpoint: parseBackendValues(metadata.backendConfigPath).AGENT_BRIDGE_URL,\n principal: { workspace: source.workspace, agent: source.principal },\n }),\n targetBackendPath: paths?.backendConfigPath ?? null,\n stageRecordPath: paths?.stageRecordPath ?? null,\n sourceEndpointSha256: source.endpointSha256,\n targetEndpointSha256: enrollment ? endpointSha256(enrollment.input.gatewayUrl) : request?.targetEndpointSha256 ?? \"\",\n successorCredentialId: enrollment?.result?.credentialId ?? request?.successorCredentialId ?? \"\",\n enrollmentStatus,\n };\n}\n\nfunction completedPlanFromRequest(\n manifest: ClientOperationManifest,\n request: ClientMigrationStageRequest,\n): ClientMigrationStagePlan {\n return {\n schemaVersion: 1,\n action: \"migrate-stage\",\n applied: true,\n operationId: manifest.operationId,\n runtime: manifest.runtime,\n identity: request.identity,\n instance: manifest.instance,\n enrollmentFile: request.enrollmentPath,\n sourceBackendPath: request.sourceBackendPath,\n sourceEdgeDatabasePath: request.sourceEdgeDatabasePath,\n sourceScopeKey: request.sourceScopeKey,\n targetBackendPath: request.targetBackendPath,\n stageRecordPath: request.stageRecordPath,\n sourceEndpointSha256: request.sourceEndpointSha256,\n targetEndpointSha256: request.targetEndpointSha256,\n successorCredentialId: request.successorCredentialId,\n enrollmentStatus: \"consumed-file-missing\",\n };\n}\n\nexport async function stageClientMigrationTarget(options: ClientMigrationStageOptions): Promise<ClientMigrationStagePlan> {\n const env = options.env ?? process.env;\n const runtime = options.runtime;\n const identityValue = identity(options.identity);\n const instance = text(options.instance, \"instance\", 128);\n const enrollmentFile = resolve(options.enrollmentFile);\n if (options.recoverLock && !options.apply) {\n fail(\"INVALID_STAGE\", \"--recover-lock requires --apply\");\n }\n if (options.recoverLock) {\n if (hasClientOperationLock(runtime, instance, env)) recoverClientOperationLock(runtime, instance, env);\n recoverEnrollmentLockIfPresent(enrollmentFile, env);\n }\n requireNoEnrollmentLock(enrollmentFile);\n const metadata = checkMetadata(runtime, identityValue, instance, options.execute, env);\n const source = backendProjection(parseBackendValues(metadata.backendConfigPath));\n const enrollment = readEnrollment(enrollmentFile, env);\n const now = options.now?.() ?? new Date();\n checkEnrollment(enrollment, runtime, identityValue, instance, source, MIN_PREDECESSOR_GRACE_MS, now);\n if (enrollment.state !== \"ready\") fail(\"ENROLLMENT_MISMATCH\", \"rotation enrollment is not ready for staging\");\n if (!options.apply) {\n return planFrom(metadata, source, enrollment, enrollmentFile, runtime, identityValue, instance, false, null, \"ready\", env);\n }\n const operationId = randomUUID();\n assertStageTargetsAbsent(operationId, env);\n const stageCreatedAt = new Date().toISOString();\n const request = makeRequest(\n operationId,\n metadata,\n source,\n enrollment,\n enrollmentFile,\n env,\n );\n const target = {\n provider: \"gateway\" as const,\n workspace: request.targetWorkspace,\n endpointSha256: request.targetEndpointSha256,\n edgeDatabasePath: stageRecordPaths(operationId, env).edgeDatabasePath,\n credentialId: request.successorCredentialId,\n principal: identityValue,\n instance,\n };\n await verifySourceStage(\n parseBackendValues(metadata.backendConfigPath), source, request.sourceScopeKey, options.verifySource,\n );\n await verifyGatewayBackend(targetValuesFromEnrollment(enrollment, target), target, options.verifyTarget);\n const record = expectedStageRecord(operationId, runtime, identityValue, instance, request, target, stageCreatedAt);\n const begun = beginClientOperation({\n operationId,\n createdAt: stageCreatedAt,\n version: 5,\n request,\n runtime,\n instance,\n steps: [\n { target: \"stage-backend\", locator: request.targetBackendPath, beforeArtifact: \"backend-before\", afterArtifact: \"backend-after\", expectedBeforeSha256: digest(stageAbsentProof()), expectedAfterSha256: digest({ exists: true, backend: target }) },\n { target: \"stage-record\", locator: request.stageRecordPath, beforeArtifact: \"record-before\", afterArtifact: \"record-after\", expectedBeforeSha256: digest(stageAbsentProof()), expectedAfterSha256: digest({ exists: true, sha256: digest(stageRecordContents(record)) }) },\n { target: \"enrollment\", locator: request.enrollmentPath, beforeArtifact: \"enrollment-before\", afterArtifact: \"enrollment-after\", expectedBeforeSha256: digest(enrollmentProof(enrollment)), expectedAfterSha256: digest(stageAbsentProof()) },\n ],\n }, env);\n if (begun.manifest.createdAt !== stageCreatedAt) {\n releaseClientOperationLock(begun.lock);\n fail(\"CORRUPT_OPERATION\", \"migration stage record timestamp does not match the operation journal\");\n }\n try {\n const result = await applyStageOperation(\n begun.manifest, begun.lock, options.execute, options.verifyTarget, options.verifySource, env, now,\n );\n return planFrom(metadata, source, enrollment, enrollmentFile, runtime, identityValue, instance, true,\n result.manifest.operationId, result.enrollmentStatus, env, request);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n\nexport async function resumeClientMigrationStage(\n options: ResumeClientMigrationStageOptions,\n): Promise<ClientMigrationStagePlan> {\n const env = options.env ?? process.env;\n const operation = readClientOperation(options.operationId, env);\n const request = requireStageRequest(operation);\n if (options.recoverLock) {\n if (hasClientOperationLock(operation.runtime, operation.instance, env)) {\n recoverClientOperationLock(operation.runtime, operation.instance, env);\n }\n recoverEnrollmentLockIfPresent(request.enrollmentPath, env);\n }\n requireNoEnrollmentLock(request.enrollmentPath);\n const begun = resumeClientOperation(options.operationId, env);\n try {\n if (begun.manifest.steps.every((step) => step.state === \"observed-applied\")) {\n const completed = completeClientOperationCleanup(\n begun.manifest.operationId, begun.manifest, begun.lock, env,\n );\n return completedPlanFromRequest(completed, request);\n }\n const now = options.now?.() ?? new Date();\n const checked = checkRequestAgainstCurrent(begun.manifest, options.execute, env, now);\n const result = await applyStageOperation(\n begun.manifest, begun.lock, options.execute, options.verifyTarget, options.verifySource, env, now,\n );\n return planFrom(checked.metadata, checked.source, checked.enrollment, request.enrollmentPath,\n begun.manifest.runtime, request.identity, begun.manifest.instance, true,\n result.manifest.operationId, result.enrollmentStatus, env, request);\n } finally {\n releaseClientOperationLock(begun.lock);\n }\n}\n","import { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport { closeSync, constants, existsSync, fstatSync, lstatSync, openSync, readFileSync, readdirSync } from \"node:fs\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport { verifyPrivatePathAccess } from \"./private-path.js\";\nimport { spawnSync } from \"node:child_process\";\nimport {\n beginClientOperation, classifyClientOperationRestart, completeClientOperationCleanup,\n hasClientOperationLock, readClientOperation, recordClientOperationStepApplied,\n recordClientOperationStepIntent, recoverClientOperationLock, releaseClientOperationLock,\n resumeClientOperation, transitionClientOperation, writeClientOperationSnapshot,\n type ClientMigrationCutoverRequest, type ClientMigrationStageContract, type ClientMigrationStageRequest,\n type ClientOperationLock, type ClientOperationManagedMetadata, type ClientOperationManifest,\n type ClientOperationRegistrationProof,\n} from \"./client-operation.js\";\nimport {\n addManagedClientRegistration, removeManagedClientRegistration, replaceManagedDesktopRegistration,\n switchManagedClientMetadata,\n} from \"./client-maintenance.js\";\nimport {\n loadManagedClientMetadata, managedClientMetadataPath, observeManagedRegistration,\n type ClientLifecycleExecutor, type ManagedClientMetadata, type ManagedRegistrationObservation,\n} from \"./client-lifecycle.js\";\nimport {\n edgeScopeKey, inspectEdgeScopeReadOnly, SQLiteEdgeStore,\n type EdgeDrainLease, type EdgeMigrationGate,\n} from \"./sqlite-edge-store.js\";\nimport { SyncingBridgeStore } from \"./syncing-bridge-store.js\";\nimport { HttpBridgeStore } from \"./http-bridge-store.js\";\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst BACKEND_KEYS = [\n \"AGENT_BRIDGE_PROVIDER\", \"AGENT_BRIDGE_WORKSPACE\", \"AGENT_BRIDGE_URL\", \"AGENT_BRIDGE_TOKEN\",\n \"AGENT_BRIDGE_EDGE_DB\", \"AGENT_BRIDGE_CREDENTIAL_ID\", \"AGENT_BRIDGE_PRINCIPAL\", \"AGENT_BRIDGE_CLIENT_INSTANCE\",\n] as const;\ntype BackendKey = (typeof BACKEND_KEYS)[number];\ntype Backend = Record<BackendKey, string>;\ntype Phase = \"migrate-cutover\" | \"migrate-finalize\";\n\nexport interface ClientMigrationCutoverPlan {\n schemaVersion: 1;\n action: \"migrate-cutover\" | \"migrate-finalize\";\n applied: boolean;\n operationId: string | null;\n stageOperationId: string;\n sourceCutoverOperationId: string | null;\n runtime: \"codex\" | \"claude-code\" | \"claude-desktop\";\n instance: string;\n sourceScopeKey: string;\n exclusiveEdgeRequired: true;\n}\n\nexport interface CutoverOptions {\n stageOperationId: string;\n apply?: boolean;\n exclusiveEdge?: boolean;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n fetch?: typeof fetch;\n now?: () => Date;\n}\nexport interface CutoverResumeOptions {\n operationId: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n execute?: ClientLifecycleExecutor;\n fetch?: typeof fetch;\n now?: () => Date;\n}\n\nclass CutoverError extends Error {\n constructor(readonly code: string, message: string) { super(message); this.name = \"CutoverError\"; }\n}\nfunction fail(code: string, message: string): never { throw new CutoverError(code, message); }\nfunction canonical(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n return `{${Object.keys(value as Record<string, unknown>).sort().map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\nfunction digest(value: unknown): string { return createHash(\"sha256\").update(canonical(value), \"utf8\").digest(\"hex\"); }\nfunction uuid(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !UUID.test(value)) fail(\"CORRUPT_OPERATION\", `${label} is invalid`);\n return value.toLowerCase();\n}\nfunction text(value: unknown, label: string, maximum = 4096): string {\n if (typeof value !== \"string\" || !value || value !== value.trim() || value.length > maximum || /[\\u0000-\\u001f\\u007f]/u.test(value)) {\n fail(\"CORRUPT_OPERATION\", `${label} is invalid`);\n }\n return value;\n}\nfunction readPrivateText(path: string): string {\n verifyPrivatePathAccess(path, \"file\");\n const before = lstatSync(path);\n if (!before.isFile() || before.isSymbolicLink()) fail(\"BACKEND_DRIFT\", \"managed backend is not a private regular file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.dev !== before.dev || opened.ino !== before.ino) {\n fail(\"BACKEND_DRIFT\", \"managed backend changed while it was opened\");\n }\n const contents = readFileSync(descriptor, \"utf8\");\n const after = lstatSync(path);\n if (!after.isFile() || after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n fail(\"BACKEND_DRIFT\", \"managed backend changed while it was read\");\n }\n return contents;\n } finally { closeSync(descriptor); }\n}\nfunction parseBackend(path: string): Backend {\n const source = readPrivateText(path);\n const values: Partial<Record<BackendKey, string>> = {};\n for (const line of source.split(/\\r?\\n/u)) {\n if (!line) continue;\n const at = line.indexOf(\"=\");\n if (at < 1) fail(\"BACKEND_DRIFT\", \"managed backend is invalid\");\n const key = line.slice(0, at) as BackendKey;\n const value = line.slice(at + 1);\n if (!(BACKEND_KEYS as readonly string[]).includes(key) || values[key] !== undefined || !value) {\n fail(\"BACKEND_DRIFT\", \"managed backend is invalid\");\n }\n values[key] = value;\n }\n if (Object.keys(values).length !== BACKEND_KEYS.length) fail(\"BACKEND_DRIFT\", \"managed backend is invalid\");\n return values as Backend;\n}\nfunction normalizedGatewayUrl(url: string): string {\n let parsed: URL;\n try { parsed = new URL(url); } catch { fail(\"BACKEND_DRIFT\", \"gateway URL is invalid\"); }\n if (parsed.username || parsed.password || parsed.search || parsed.hash) fail(\"BACKEND_DRIFT\", \"gateway URL is invalid\");\n return parsed.toString().replace(/\\/$/, \"\");\n}\nfunction endpointDigest(url: string): string {\n return createHash(\"sha256\").update(normalizedGatewayUrl(url), \"utf8\").digest(\"hex\");\n}\nfunction projection(values: Backend) {\n if (values.AGENT_BRIDGE_PROVIDER !== \"gateway\") {\n fail(\"BACKEND_DRIFT\", \"managed backend must use gateway provider\");\n }\n const edge = text(values.AGENT_BRIDGE_EDGE_DB, \"edge database path\");\n if (!isAbsolute(edge) || resolve(edge) !== edge || edge === \":memory:\") fail(\"BACKEND_DRIFT\", \"edge database path is invalid\");\n return {\n provider: \"gateway\",\n workspace: text(values.AGENT_BRIDGE_WORKSPACE, \"workspace\", 128),\n principal: text(values.AGENT_BRIDGE_PRINCIPAL, \"principal\", 128),\n instance: text(values.AGENT_BRIDGE_CLIENT_INSTANCE, \"instance\", 128),\n credentialId: uuid(values.AGENT_BRIDGE_CREDENTIAL_ID, \"credential ID\"),\n endpointSha256: endpointDigest(values.AGENT_BRIDGE_URL), edgeDatabasePath: edge,\n };\n}\nfunction gateProof(gate: EdgeMigrationGate): { state: string; operationId: string | null } {\n return { state: gate.state, operationId: gate.operationId ?? null };\n}\nfunction registrationContract(metadata: ManagedClientMetadata): ClientOperationRegistrationProof {\n return {\n state: \"exact\",\n target: {\n runtime: metadata.runtime, identity: metadata.identity, instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n },\n observed: {\n state: \"present\", command: metadata.launch.command, args: [...metadata.launch.args],\n env: {\n AGENT_BRIDGE_AGENT: metadata.identity,\n AGENT_BRIDGE_CONFIG: metadata.backendConfigPath,\n AGENT_BRIDGE_INSTANCE: metadata.instance,\n },\n },\n };\n}\nfunction observedExactRegistration(\n metadata: ManagedClientMetadata, execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv,\n): ClientOperationRegistrationProof {\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state !== \"exact\" || observed.observed.state !== \"present\") {\n fail(\"REGISTRATION_DRIFT\", \"managed registration is not exact\");\n }\n const expected = registrationContract(metadata);\n if (canonical(observed) !== canonical(expected)) fail(\"REGISTRATION_DRIFT\", \"managed registration proof drifted\");\n return expected;\n}\nfunction observedAbsentRegistration(\n metadata: ManagedClientMetadata, execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv,\n): ManagedRegistrationObservation {\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state !== \"absent\" || observed.observed.state !== \"absent\") {\n fail(\"REGISTRATION_DRIFT\", \"managed registration is not absent\");\n }\n return observed;\n}\n\nfunction stageContract(stageOperationId: string, env: NodeJS.ProcessEnv): ClientMigrationStageContract {\n const stage = readClientOperation(stageOperationId, env);\n if (stage.version !== 5 || stage.state !== \"committed\" || stage.completion?.operation !== \"migrate\") {\n fail(\"STAGE_UNAVAILABLE\", \"cutover requires a committed v5 migration stage\");\n }\n const contract = stage.completion.migration;\n if (!contract || !(\"request\" in contract) || contract.request.kind !== \"migrate\" || contract.stageOperationId !== stage.operationId) {\n fail(\"STAGE_UNAVAILABLE\", \"legacy v5 stages without a retained contract cannot authorize cutover\");\n }\n const request = contract.request;\n verifyPrivatePathAccess(request.stageRecordPath, \"file\");\n verifyPrivatePathAccess(request.targetBackendPath, \"file\");\n const recordBytes = readPrivateText(request.stageRecordPath);\n // v5 records the canonical string digest, rather than the raw-byte digest.\n // Preserve that framing here so a valid retained stage can be re-attested.\n const recordProof = digest({ exists: true, sha256: digest(recordBytes) });\n const targetProjection = projection(parseBackend(request.targetBackendPath));\n const targetProof = digest({ exists: true, backend: targetProjection });\n if (recordProof !== contract.stageRecordSha256 || targetProof !== contract.targetBackendProjectionSha256) {\n fail(\"STAGE_DRIFT\", \"retained stage contract no longer matches its private artifacts\");\n }\n return contract as ClientMigrationStageContract;\n}\nfunction stageCurrent(stageOperationId: string, env: NodeJS.ProcessEnv, execute: ClientLifecycleExecutor) {\n const contract = stageContract(stageOperationId, env);\n const request = contract.request;\n const operation = readClientOperation(stageOperationId, env);\n const metadata = loadManagedClientMetadata(operation.runtime, operation.instance, env);\n if (resolve(metadata.backendConfigPath) !== request.sourceBackendPath || metadata.identity !== request.identity) {\n fail(\"STAGE_DRIFT\", \"managed client no longer matches the staged source\");\n }\n const sourceRegistration = observedExactRegistration(metadata, execute, env);\n const sourceValues = parseBackend(request.sourceBackendPath);\n const targetValues = parseBackend(request.targetBackendPath);\n const source = projection(sourceValues); const target = projection(targetValues);\n if (source.endpointSha256 !== request.sourceEndpointSha256 || source.edgeDatabasePath !== request.sourceEdgeDatabasePath\n || source.credentialId !== request.predecessorCredentialId || source.principal !== request.identity\n || source.instance !== metadata.instance || target.endpointSha256 !== request.targetEndpointSha256\n || target.credentialId !== request.successorCredentialId || target.workspace !== request.targetWorkspace\n || target.principal !== request.identity || target.instance !== metadata.instance\n || request.sourceScopeKey !== edgeScopeKey({ endpoint: sourceValues.AGENT_BRIDGE_URL, principal: { workspace: source.workspace, agent: source.principal } })) {\n fail(\"STAGE_DRIFT\", \"stage backend bindings changed\");\n }\n const targetMetadata: ManagedClientMetadata = { ...metadata, backendConfigPath: request.targetBackendPath };\n const targetRegistration = registrationContract(targetMetadata);\n return { contract, request, metadata, targetMetadata, sourceRegistration, targetRegistration, sourceValues, targetValues, source, target };\n}\ntype StagedMigrationCurrent = ReturnType<typeof stageCurrent>;\n\nfunction retainedCurrent(\n request: ClientMigrationCutoverRequest,\n env: NodeJS.ProcessEnv,\n): StagedMigrationCurrent {\n const contract = stageContract(request.stageOperationId, env);\n if (canonical(contract) !== canonical(request.stageContract)) {\n fail(\"STAGE_DRIFT\", \"retained stage contract changed after cutover authorization\");\n }\n const targetValues = parseBackend(request.targetBackendPath);\n const sourceValues: Backend = {\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_WORKSPACE: targetValues.AGENT_BRIDGE_WORKSPACE,\n AGENT_BRIDGE_URL: request.sourceGatewayUrl,\n AGENT_BRIDGE_TOKEN: targetValues.AGENT_BRIDGE_TOKEN,\n AGENT_BRIDGE_EDGE_DB: request.sourceEdgeDatabasePath,\n AGENT_BRIDGE_CREDENTIAL_ID: targetValues.AGENT_BRIDGE_CREDENTIAL_ID,\n AGENT_BRIDGE_PRINCIPAL: request.identity,\n AGENT_BRIDGE_CLIENT_INSTANCE: request.sourceMetadata.instance,\n };\n const source = projection(sourceValues);\n const target = projection(targetValues);\n if (source.endpointSha256 !== request.sourceEndpointSha256\n || source.edgeDatabasePath !== request.sourceEdgeDatabasePath\n || source.credentialId !== request.successorCredentialId\n || source.workspace !== request.targetWorkspace\n || target.endpointSha256 !== request.targetEndpointSha256\n || target.credentialId !== request.successorCredentialId\n || target.workspace !== request.targetWorkspace\n || target.edgeDatabasePath !== request.targetEdgeDatabasePath\n || targetValues.AGENT_BRIDGE_PRINCIPAL !== request.identity\n || targetValues.AGENT_BRIDGE_CLIENT_INSTANCE !== request.targetMetadata.instance\n || edgeScopeKey({ endpoint: sourceValues.AGENT_BRIDGE_URL, principal: { workspace: source.workspace, agent: source.principal } }) !== request.sourceScopeKey\n || canonical(request.sourceMetadata) !== canonical({ ...request.sourceMetadata, backendConfigPath: request.sourceBackendPath })\n || canonical(request.targetMetadata) !== canonical({ ...request.targetMetadata, backendConfigPath: request.targetBackendPath })\n || digest(metadataProof(request.sourceMetadata)) !== request.sourceMetadataSha256\n || digest(metadataProof(request.targetMetadata)) !== request.targetMetadataSha256\n || digest(registrationProof(request.sourceRegistration)) !== request.sourceRegistrationSha256\n || digest(registrationProof(request.targetRegistration)) !== request.targetRegistrationSha256) {\n fail(\"STAGE_DRIFT\", \"retained endpoint contract no longer matches its backends\");\n }\n if (source.workspace !== sourceValues.AGENT_BRIDGE_WORKSPACE || source.principal !== request.identity\n || target.workspace !== targetValues.AGENT_BRIDGE_WORKSPACE || target.principal !== request.identity) {\n fail(\"STAGE_DRIFT\", \"retained endpoint principal bindings changed\");\n }\n assertDistinctEdges(request.sourceEdgeDatabasePath, request.targetEdgeDatabasePath);\n return {\n contract,\n request: contract.request,\n metadata: request.sourceMetadata,\n targetMetadata: request.targetMetadata,\n sourceRegistration: request.sourceRegistration,\n targetRegistration: request.targetRegistration,\n sourceValues,\n targetValues,\n source,\n target,\n };\n}\n\nfunction targetCurrent(\n request: ClientMigrationCutoverRequest,\n env: NodeJS.ProcessEnv,\n execute: ClientLifecycleExecutor,\n): StagedMigrationCurrent {\n const retained = retainedCurrent(request, env);\n const metadata = loadManagedClientMetadata(request.targetMetadata.runtime, request.targetMetadata.instance, env);\n if (canonical(metadata) !== canonical(request.targetMetadata)\n || canonical(observedExactRegistration(metadata, execute, env)) !== canonical(request.targetRegistration)) {\n fail(\"TARGET_DRIFT\", \"managed client no longer matches the retained target contract\");\n }\n return retained;\n}\n\ninterface EdgeIdentity { dev: number; ino: number; nlink: number }\n\nfunction edgeIdentity(path: string): EdgeIdentity | null {\n if (!existsSync(path)) return null;\n verifyPrivatePathAccess(path, \"file\");\n const details = lstatSync(path);\n if (!details.isFile() || details.isSymbolicLink()) fail(\"EDGE_ALIAS\", \"edge database is not a private regular file\");\n return { dev: details.dev, ino: details.ino, nlink: details.nlink };\n}\nexport function edgeIdentitiesAlias(left: EdgeIdentity, right: EdgeIdentity): boolean {\n const leftHasFileId = left.dev !== 0 || left.ino !== 0;\n const rightHasFileId = right.dev !== 0 || right.ino !== 0;\n if (leftHasFileId && rightHasFileId) return left.dev === right.dev && left.ino === right.ino;\n if (left.nlink > 1 && right.nlink > 1) {\n fail(\"EDGE_ALIAS\", \"edge file identity is ambiguous on this platform\");\n }\n return false;\n}\nfunction managedEdgeCohort(\n metadata: ManagedClientMetadata,\n edgePath: string,\n env: NodeJS.ProcessEnv,\n scopeKey?: string,\n): string[] {\n const directory = dirname(managedClientMetadataPath(metadata.runtime, metadata.instance, env));\n verifyPrivatePathAccess(directory, \"directory\");\n const matches: string[] = [];\n const edgePathIdentity = edgeIdentity(edgePath);\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (!entry.isFile() || !entry.name.endsWith(\".managed.json\")) continue;\n try {\n const raw = JSON.parse(readPrivateText(resolve(directory, entry.name))) as { runtime?: string; instance?: string };\n if (!raw.runtime || !raw.instance || ![\"codex\", \"claude-code\", \"claude-desktop\"].includes(raw.runtime)) continue;\n const candidate = loadManagedClientMetadata(raw.runtime as ManagedClientMetadata[\"runtime\"], raw.instance, env);\n if (!existsSync(candidate.backendConfigPath)) continue;\n const values = parseBackend(candidate.backendConfigPath);\n const candidateProjection = projection(values);\n const candidateScope = edgeScopeKey({ endpoint: values.AGENT_BRIDGE_URL, principal: { workspace: candidateProjection.workspace, agent: candidateProjection.principal } });\n if (scopeKey !== undefined && candidateScope !== scopeKey) continue;\n const candidateIdentity = edgeIdentity(candidateProjection.edgeDatabasePath);\n const samePath = resolve(candidateProjection.edgeDatabasePath) === resolve(edgePath);\n const sameFile = edgePathIdentity !== null && candidateIdentity !== null\n && edgeIdentitiesAlias(edgePathIdentity, candidateIdentity);\n if (samePath || sameFile) matches.push(candidate.backendConfigPath);\n } catch { fail(\"SHARED_EDGE_COHORT\", \"managed edge cohort could not be inspected\"); }\n }\n return matches;\n}\nfunction assertExclusiveEdge(metadata: ManagedClientMetadata, edgePath: string, scopeKey: string, env: NodeJS.ProcessEnv): void {\n const matches = managedEdgeCohort(metadata, edgePath, env, scopeKey);\n if (new Set(matches).size !== 1 || matches.length !== 1 || matches[0] !== metadata.backendConfigPath) {\n fail(\"SHARED_EDGE_COHORT\", \"shared_edge_cohort: another managed registration uses this edge scope\");\n }\n}\nfunction assertRetainedSourceEdgeExclusive(\n metadata: ManagedClientMetadata, edgePath: string, scopeKey: string, env: NodeJS.ProcessEnv,\n): void {\n const matches = managedEdgeCohort(metadata, edgePath, env, scopeKey);\n if (matches.some((path) => path !== metadata.backendConfigPath)) {\n fail(\"SHARED_EDGE_COHORT\", \"shared_edge_cohort: another managed registration uses this edge scope\");\n }\n}\nfunction assertSourceRetirementCohort(metadata: ManagedClientMetadata, sourceEdge: string, env: NodeJS.ProcessEnv): void {\n if (managedEdgeCohort(metadata, sourceEdge, env).length !== 0) {\n fail(\"SHARED_EDGE_COHORT\", \"source_edge_cohort: a managed registration still uses the source edge\");\n }\n}\n\ninterface GatewayBinding { authorityId: string; credentialId: string; }\nasync function gatewayStatus(values: Backend, expected: { workspace: string; principal: string; credentialId: string }, fetchImpl: typeof fetch): Promise<GatewayBinding> {\n const response = await fetchImpl(`${values.AGENT_BRIDGE_URL.replace(/\\/$/, \"\")}/v2/status`, {\n headers: {\n authorization: `Bearer ${values.AGENT_BRIDGE_TOKEN}`,\n \"x-agent-bridge-protocol-version\": \"2.1\",\n \"x-agent-bridge-instance\": values.AGENT_BRIDGE_CLIENT_INSTANCE,\n },\n });\n const selected = response.headers.get(\"x-agent-bridge-protocol-version\");\n const supported = response.headers.get(\"x-agent-bridge-supported-protocol-versions\")?.split(\",\").map((item) => item.trim()) ?? [];\n if (!response.ok || selected !== \"2.1\" || !supported.includes(\"2.1\")) fail(\"GATEWAY_ATTESTATION\", \"gateway does not negotiate HTTP 2.1\");\n const status = await response.json() as Record<string, unknown>;\n const principal = status.principal as Record<string, unknown> | undefined;\n if (!principal || principal.workspace !== expected.workspace || principal.agent !== expected.principal\n || status.credentialId !== expected.credentialId || typeof status.gatewayAuthorityId !== \"string\" || !UUID.test(status.gatewayAuthorityId)) {\n fail(\"GATEWAY_ATTESTATION\", \"gateway status binding does not match the staged credential\");\n }\n return { authorityId: status.gatewayAuthorityId.toLowerCase(), credentialId: expected.credentialId };\n}\nasync function gatewayCapabilities(values: Backend, fetchImpl: typeof fetch): Promise<readonly string[]> {\n const response = await fetchImpl(values.AGENT_BRIDGE_URL.replace(/\\/$/, \"\") + \"/v2/capabilities\", {\n headers: {\n authorization: \"Bearer \" + values.AGENT_BRIDGE_TOKEN,\n \"x-agent-bridge-protocol-version\": \"2.1\",\n \"x-agent-bridge-instance\": values.AGENT_BRIDGE_CLIENT_INSTANCE,\n },\n });\n const selected = response.headers.get(\"x-agent-bridge-protocol-version\");\n const supported = response.headers.get(\"x-agent-bridge-supported-protocol-versions\")?.split(\",\").map((item) => item.trim()) ?? [];\n if (!response.ok || selected !== \"2.1\" || !supported.includes(\"2.1\")) {\n fail(\"GATEWAY_CAPABILITIES\", \"gateway does not negotiate HTTP 2.1 capabilities\");\n }\n const document = await response.json() as Record<string, unknown>;\n const grantedScopes = document.grantedScopes;\n if (!Array.isArray(grantedScopes) || grantedScopes.some((scope) => typeof scope !== \"string\" || !scope)) {\n fail(\"GATEWAY_CAPABILITIES\", \"gateway capabilities response does not include valid granted scopes\");\n }\n return grantedScopes;\n}\nasync function requireSuccessorScopes(values: Backend, fetchImpl: typeof fetch): Promise<void> {\n const grantedScopes = await gatewayCapabilities(values, fetchImpl);\n for (const scope of [\"status:read\", \"messages:write\"]) {\n if (!grantedScopes.includes(scope)) {\n fail(\"SUCCESSOR_SCOPE_MISSING\", \"successor credential lacks \" + scope);\n }\n }\n}\nasync function postChallenge(values: Backend, path: string, body: Record<string, string>, fetchImpl: typeof fetch): Promise<Record<string, unknown>> {\n const response = await fetchImpl(`${values.AGENT_BRIDGE_URL.replace(/\\/$/, \"\")}${path}`, {\n method: \"POST\", headers: {\n authorization: `Bearer ${values.AGENT_BRIDGE_TOKEN}`, \"content-type\": \"application/json\",\n \"x-agent-bridge-protocol-version\": \"2.1\", \"x-agent-bridge-instance\": values.AGENT_BRIDGE_CLIENT_INSTANCE,\n }, body: JSON.stringify(body),\n });\n if (!response.ok || response.headers.get(\"x-agent-bridge-protocol-version\") !== \"2.1\") {\n fail(\"ROUTE_CHALLENGE\", \"gateway does not support endpoint migration route challenges\");\n }\n return response.json() as Promise<Record<string, unknown>>;\n}\nasync function proveRoutes(source: Backend, target: Backend, expectedAuthority: string, fetchImpl: typeof fetch): Promise<void> {\n const challenge = randomBytes(32).toString(\"hex\");\n const issuerCredentialId = projection(source).credentialId;\n const verifierCredentialId = projection(target).credentialId;\n const issued = await postChallenge(source, \"/v2/endpoint-migration-challenges\", {\n challenge, expectedGatewayAuthorityId: expectedAuthority, verifierCredentialId,\n }, fetchImpl);\n const issuedIssuerCredentialId = typeof issued.issuerCredentialId === \"string\"\n ? issued.issuerCredentialId : null;\n const issuedVerifierCredentialId = typeof issued.verifierCredentialId === \"string\"\n ? issued.verifierCredentialId : null;\n if (issued.gatewayAuthorityId !== expectedAuthority\n || !issuedIssuerCredentialId\n || issuedIssuerCredentialId !== issuerCredentialId\n || issuedVerifierCredentialId !== verifierCredentialId) {\n fail(\"ROUTE_CHALLENGE\", \"issuer gateway challenge does not match the staged route pair\");\n }\n const consumed = await postChallenge(target, \"/v2/endpoint-migration-challenges/consume\", {\n challenge, expectedGatewayAuthorityId: expectedAuthority, issuerCredentialId: issuedIssuerCredentialId,\n }, fetchImpl);\n if (consumed.gatewayAuthorityId !== expectedAuthority\n || consumed.issuerCredentialId !== issuerCredentialId\n || consumed.verifierCredentialId !== verifierCredentialId\n || consumed.consumed !== true) {\n fail(\"ROUTE_CHALLENGE\", \"gateway endpoints did not prove one shared live authority\");\n }\n}\nasync function attestRoutePair(\n issuer: Backend, issuerExpected: ReturnType<typeof projection>,\n consumer: Backend, consumerExpected: ReturnType<typeof projection>,\n authorityId: string, fetchImpl: typeof fetch,\n): Promise<void> {\n const [issuerStatus, consumerStatus] = await Promise.all([\n gatewayStatus(issuer, issuerExpected, fetchImpl), gatewayStatus(consumer, consumerExpected, fetchImpl),\n ]);\n if (issuerStatus.authorityId !== authorityId || consumerStatus.authorityId !== authorityId\n || issuerStatus.authorityId !== consumerStatus.authorityId) {\n fail(\"GATEWAY_AUTHORITY_MISMATCH\", \"live endpoint authority no longer matches the retained migration contract\");\n }\n await proveRoutes(issuer, consumer, authorityId, fetchImpl);\n}\nfunction sourceWithSuccessor(staged: StagedMigrationCurrent): Backend {\n return {\n ...staged.sourceValues,\n AGENT_BRIDGE_TOKEN: staged.targetValues.AGENT_BRIDGE_TOKEN,\n AGENT_BRIDGE_CREDENTIAL_ID: staged.targetValues.AGENT_BRIDGE_CREDENTIAL_ID,\n };\n}\nasync function attestPhaseAuthority(\n staged: StagedMigrationCurrent, request: ClientMigrationCutoverRequest, fetchImpl: typeof fetch,\n): Promise<void> {\n const target = await gatewayStatus(staged.targetValues, staged.target, fetchImpl);\n if (target.authorityId !== request.gatewayAuthorityId) {\n fail(\"GATEWAY_AUTHORITY_MISMATCH\", \"target gateway authority no longer matches the retained migration contract\");\n }\n await proveRoutes(sourceWithSuccessor(staged), staged.targetValues, target.authorityId, fetchImpl);\n}\nfunction assertPhaseManagedCohort(\n phase: Phase,\n staged: StagedMigrationCurrent,\n request: ClientMigrationCutoverRequest,\n env: NodeJS.ProcessEnv,\n): void {\n if (phase === \"migrate-cutover\") {\n assertRetainedSourceEdgeExclusive(staged.metadata, staged.source.edgeDatabasePath, request.sourceScopeKey, env);\n return;\n }\n assertSourceRetirementCohort(staged.targetMetadata, staged.source.edgeDatabasePath, env);\n}\n\nasync function openEdge(values: Backend): Promise<SQLiteEdgeStore> {\n const edge = new SQLiteEdgeStore(values.AGENT_BRIDGE_EDGE_DB, {\n endpoint: values.AGENT_BRIDGE_URL, principal: { workspace: values.AGENT_BRIDGE_WORKSPACE, agent: values.AGENT_BRIDGE_PRINCIPAL },\n });\n await edge.initialize(); return edge;\n}\nasync function requireUntouchedTarget(values: Backend): Promise<void> {\n const edge = await openEdge(values);\n try {\n const stats = await edge.stats();\n if (stats.migrationState !== \"active\" || stats.pending !== 0 || stats.due !== 0 || stats.scheduled !== 0\n || stats.leased !== 0 || stats.blocked !== 0 || stats.cached !== 0) {\n fail(\"TARGET_EDGE_NOT_EMPTY\", \"target edge must be active and exactly empty\");\n }\n } finally { await edge.close(); }\n}\nfunction inspectEdge(values: Backend, now: Date) {\n return inspectEdgeScopeReadOnly(values.AGENT_BRIDGE_EDGE_DB, {\n endpoint: values.AGENT_BRIDGE_URL,\n principal: { workspace: values.AGENT_BRIDGE_WORKSPACE, agent: values.AGENT_BRIDGE_PRINCIPAL },\n }, now);\n}\nfunction assertForwardLocalPreconditions(\n source: Backend, target: Backend, now: Date,\n): void {\n const sourceInspection = inspectEdge(source, now);\n const targetInspection = inspectEdge(target, now);\n if (sourceInspection.gate.state !== \"active\") fail(\"EDGE_GATE_DRIFT\", \"source edge must be active before cutover\");\n if (targetInspection.gate.state !== \"active\" || targetInspection.pending !== 0 || targetInspection.due !== 0\n || targetInspection.scheduled !== 0 || targetInspection.leased !== 0 || targetInspection.blocked !== 0\n || targetInspection.cached !== 0) {\n fail(\"TARGET_EDGE_NOT_EMPTY\", \"target edge must be active and exactly empty\");\n }\n}\nfunction assertDistinctEdges(sourcePath: string, targetPath: string, requirePresent = true): void {\n if (resolve(sourcePath) === resolve(targetPath)) {\n fail(\"EDGE_ALIAS\", \"source and target edge paths must differ\");\n }\n const source = edgeIdentity(sourcePath);\n const target = edgeIdentity(targetPath);\n if (requirePresent && (!source || !target)) fail(\"EDGE_ALIAS\", \"source and target edge paths must be initialized before mutation\");\n if (source && target && edgeIdentitiesAlias(source, target)) {\n fail(\"EDGE_ALIAS\", \"source and target edges must not alias the same file\");\n }\n}\nasync function assertFinalizeGatePreconditions(\n staged: StagedMigrationCurrent,\n sourceCutoverOperationId: string,\n now: Date,\n): Promise<void> {\n const source = inspectEdge(staged.sourceValues, now);\n if (source.gate.state !== \"draining\" || source.gate.operationId !== sourceCutoverOperationId) {\n fail(\"EDGE_GATE_DRIFT\", \"finalization requires the retained source drain\");\n }\n}\nasync function drain(\n edge: SQLiteEdgeStore,\n remoteValues: Backend,\n lease: EdgeDrainLease,\n fetchImpl: typeof fetch,\n now: () => Date,\n): Promise<EdgeDrainLease> {\n const gate = await edge.migrationGate();\n if (gate.state !== \"draining\" || gate.operationId !== lease.operationId) {\n fail(\"EDGE_GATE_DRIFT\", \"edge is not draining for the recorded migration operation\");\n }\n const remote = new HttpBridgeStore({ baseUrl: remoteValues.AGENT_BRIDGE_URL, token: remoteValues.AGENT_BRIDGE_TOKEN,\n principal: { workspace: remoteValues.AGENT_BRIDGE_WORKSPACE, agent: remoteValues.AGENT_BRIDGE_PRINCIPAL, instance: remoteValues.AGENT_BRIDGE_CLIENT_INSTANCE }, fetch: fetchImpl });\n const sync = new SyncingBridgeStore(edge, remote, {\n workspace: remoteValues.AGENT_BRIDGE_WORKSPACE,\n agent: remoteValues.AGENT_BRIDGE_PRINCIPAL,\n instance: remoteValues.AGENT_BRIDGE_CLIENT_INSTANCE,\n }, { autoSync: false, edgeDrainLease: lease, closeEdge: false, now });\n try {\n await sync.initialize();\n for (;;) {\n lease = await edge.renewDrainLease(lease, now());\n sync.setDrainLease(lease);\n const report = await sync.sync({ maxPush: 1, maxPages: 0 });\n lease = await edge.renewDrainLease(lease, now());\n sync.setDrainLease(lease);\n const stats = await edge.stats(now());\n if (stats.blocked > 0) fail(\"SOURCE_EDGE_BLOCKED\", \"edge drain refuses blocked outbox work\");\n if (stats.pending === 0 && stats.leased === 0 && stats.scheduled === 0 && stats.due === 0) {\n await edge.assertDrainComplete(lease, now());\n return lease;\n }\n if (report.lastError || stats.scheduled > 0 || stats.leased > 0) {\n fail(\"EDGE_NOT_DRAINED\", \"edge contains scheduled, leased, or retrying work\");\n }\n }\n } finally {\n await sync.close();\n }\n}\n\nfunction metadataProof(metadata: ClientOperationManagedMetadata): Record<string, unknown> {\n return { role: \"metadata\", metadata };\n}\nfunction registrationProof(registration: ClientOperationRegistrationProof): Record<string, unknown> {\n return { role: \"registration\", observation: registration };\n}\nfunction absentRegistrationProof(registration: ClientOperationRegistrationProof): Record<string, unknown> {\n return { state: \"absent\", target: registration.target, observed: { state: \"absent\" } };\n}\nfunction requestFor(\n phase: Phase,\n migrationOperationId: string,\n sourceCutoverOperationId: string | null,\n authorityId: string,\n current: StagedMigrationCurrent,\n): ClientMigrationCutoverRequest {\n const stage = current.request;\n return {\n ...stage,\n kind: phase,\n migrationOperationId: uuid(migrationOperationId, \"migration operation ID\"),\n stageOperationId: current.contract.stageOperationId,\n sourceCutoverOperationId,\n sourceGatewayUrl: normalizedGatewayUrl(current.sourceValues.AGENT_BRIDGE_URL),\n targetEdgeDatabasePath: current.target.edgeDatabasePath,\n gatewayAuthorityId: authorityId,\n exclusiveEdgeAssertion: true,\n stageContract: current.contract,\n sourceMetadata: current.metadata,\n targetMetadata: current.targetMetadata,\n sourceRegistration: current.sourceRegistration,\n targetRegistration: current.targetRegistration,\n sourceMetadataSha256: digest(metadataProof(current.metadata)),\n targetMetadataSha256: digest(metadataProof(current.targetMetadata)),\n sourceRegistrationSha256: digest(registrationProof(current.sourceRegistration)),\n targetRegistrationSha256: digest(registrationProof(current.targetRegistration)),\n };\n}\ninterface MigrationStepSpec {\n name: string;\n target: \"edge-gate\" | \"registration\" | \"metadata\";\n locator: string;\n before: unknown;\n after: unknown;\n}\nfunction phaseStepSpecs(phase: Phase, runtime: ManagedClientMetadata[\"runtime\"], request: ClientMigrationCutoverRequest): MigrationStepSpec[] {\n const native = runtime !== \"claude-desktop\";\n const sourceActive = { state: \"active\", operationId: null };\n const sourceDraining = { state: \"draining\", operationId: request.sourceCutoverOperationId };\n const sourceExact = registrationProof(request.sourceRegistration);\n const sourceAbsent = absentRegistrationProof(request.sourceRegistration);\n const targetExact = registrationProof(request.targetRegistration);\n const targetAbsent = absentRegistrationProof(request.targetRegistration);\n const sourceMetadata = metadataProof(request.sourceMetadata);\n const targetMetadata = metadataProof(request.targetMetadata);\n if (phase === \"migrate-cutover\") {\n const steps: MigrationStepSpec[] = [{ name: \"source-drain\", target: \"edge-gate\", locator: request.sourceEdgeDatabasePath, before: sourceActive, after: { state: \"draining\", operationId: request.migrationOperationId } }];\n if (native) steps.push(\n { name: \"native-remove-source\", target: \"registration\", locator: \"native-remove-source\", before: sourceExact, after: sourceAbsent },\n { name: \"native-add-target\", target: \"registration\", locator: \"native-add-target\", before: targetAbsent, after: targetExact },\n );\n else steps.push({ name: \"desktop-replace-target\", target: \"registration\", locator: \"desktop-replace-target\", before: sourceExact, after: targetExact });\n steps.push({ name: \"metadata-switch-target\", target: \"metadata\", locator: request.sourceBackendPath, before: sourceMetadata, after: targetMetadata });\n return steps;\n }\n return [{ name: \"source-retire\", target: \"edge-gate\", locator: request.sourceEdgeDatabasePath, before: sourceDraining, after: { state: \"retired\", operationId: request.sourceCutoverOperationId! } }];\n}\nfunction phaseSteps(phase: Phase, runtime: ManagedClientMetadata[\"runtime\"], request: ClientMigrationCutoverRequest) {\n return phaseStepSpecs(phase, runtime, request).map((step) => ({\n target: step.target,\n locator: step.locator,\n beforeArtifact: `${step.name}.before`,\n afterArtifact: `${step.name}.after`,\n expectedBeforeSha256: digest(step.before),\n expectedAfterSha256: digest(step.after),\n }));\n}\nfunction specForStep(\n request: ClientMigrationCutoverRequest, phase: Phase, runtime: ManagedClientMetadata[\"runtime\"],\n step: ClientOperationManifest[\"steps\"][number],\n): MigrationStepSpec {\n const match = phaseStepSpecs(phase, runtime, request).find((candidate) => candidate.target === step.target\n && candidate.locator === step.locator && `${candidate.name}.before` === step.beforeArtifact\n && `${candidate.name}.after` === step.afterArtifact && digest(candidate.before) === step.expectedBeforeSha256\n && digest(candidate.after) === step.expectedAfterSha256);\n if (!match) fail(\"CORRUPT_OPERATION\", \"migration journal step does not match its retained phase contract\");\n return match;\n}\n\nfunction plan(phase: Phase, applied: boolean, operationId: string | null, request: ClientMigrationCutoverRequest, runtime: ManagedClientMetadata[\"runtime\"], instance: string): ClientMigrationCutoverPlan {\n return { schemaVersion: 1, action: phase, applied, operationId, stageOperationId: request.stageOperationId,\n sourceCutoverOperationId: request.sourceCutoverOperationId, runtime, instance, sourceScopeKey: request.sourceScopeKey, exclusiveEdgeRequired: true };\n}\n\nexport async function cutoverClientMigration(options: CutoverOptions): Promise<ClientMigrationCutoverPlan> {\n const env = options.env ?? process.env; const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, { encoding: \"utf8\", cwd: context?.cwd, env: context?.env }));\n if (!options.exclusiveEdge) fail(\"EXCLUSIVE_EDGE_REQUIRED\", \"--exclusive-edge is required because unmanaged publishers cannot be enumerated\");\n const now = options.now ?? (() => new Date());\n const current = stageCurrent(options.stageOperationId, env, execute);\n assertExclusiveEdge(current.metadata, current.source.edgeDatabasePath, current.request.sourceScopeKey, env);\n assertDistinctEdges(current.source.edgeDatabasePath, current.target.edgeDatabasePath, false);\n assertForwardLocalPreconditions(current.sourceValues, current.targetValues, now());\n if (!options.apply) {\n return plan(\"migrate-cutover\", false, null, requestFor(\n \"migrate-cutover\", \"00000000-0000-7000-8000-000000000000\", null,\n \"00000000-0000-7000-8000-000000000000\", current,\n ), current.metadata.runtime, current.metadata.instance);\n }\n const initializedSource = await openEdge(current.sourceValues);\n await initializedSource.close();\n const fetchImpl = options.fetch ?? fetch;\n assertExclusiveEdge(current.metadata, current.source.edgeDatabasePath, current.request.sourceScopeKey, env);\n await requireUntouchedTarget(current.targetValues);\n assertDistinctEdges(current.source.edgeDatabasePath, current.target.edgeDatabasePath);\n assertForwardLocalPreconditions(current.sourceValues, current.targetValues, now());\n const sourceBinding = await gatewayStatus(current.sourceValues, current.source, fetchImpl);\n const targetBinding = await gatewayStatus(current.targetValues, current.target, fetchImpl);\n if (sourceBinding.authorityId !== targetBinding.authorityId) fail(\"GATEWAY_AUTHORITY_MISMATCH\", \"gateway authority IDs differ\");\n await requireSuccessorScopes(current.targetValues, fetchImpl);\n await proveRoutes(current.sourceValues, current.targetValues, sourceBinding.authorityId, fetchImpl);\n const request = requestFor(\"migrate-cutover\", randomUUID(), null, sourceBinding.authorityId, current);\n if (options.recoverLock && hasClientOperationLock(current.metadata.runtime, current.metadata.instance, env)) recoverClientOperationLock(current.metadata.runtime, current.metadata.instance, env);\n const begun = beginClientOperation({ operationId: request.migrationOperationId, version: 6, request, runtime: current.metadata.runtime, instance: current.metadata.instance, steps: phaseSteps(request.kind, current.metadata.runtime, request) }, env);\n try {\n // The predecessor credentials authorize only the pre-journal challenge.\n // Every journal mutation uses the retained successor route instead.\n return await applyOperation(begun.manifest, begun.lock, retainedCurrent(request, env), execute, fetchImpl, now, env);\n }\n finally { releaseClientOperationLock(begun.lock); }\n}\n\nfunction currentRegistrationProof(metadata: ManagedClientMetadata, contract: ClientOperationRegistrationProof,\n execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv): unknown {\n const observed = observeManagedRegistration(metadata, execute, env);\n if (observed.state === \"exact\" && observed.observed.state === \"present\") {\n if (canonical(observed) !== canonical(contract)) fail(\"REGISTRATION_DRIFT\", \"managed registration proof drifted\");\n return registrationProof(contract);\n }\n if (observed.state === \"absent\" && observed.observed.state === \"absent\") return absentRegistrationProof(contract);\n fail(\"REGISTRATION_DRIFT\", \"managed registration is neither the recorded before nor after state\");\n}\nfunction currentDesktopReplacementProof(\n beforeMetadata: ManagedClientMetadata, before: ClientOperationRegistrationProof,\n afterMetadata: ManagedClientMetadata, after: ClientOperationRegistrationProof,\n execute: ClientLifecycleExecutor, env: NodeJS.ProcessEnv,\n): unknown {\n const beforeObserved = observeManagedRegistration(beforeMetadata, execute, env);\n if (beforeObserved.state === \"exact\" && beforeObserved.observed.state === \"present\"\n && canonical(beforeObserved) === canonical(before)) return registrationProof(before);\n const afterObserved = observeManagedRegistration(afterMetadata, execute, env);\n if (afterObserved.state === \"exact\" && afterObserved.observed.state === \"present\"\n && canonical(afterObserved) === canonical(after)) return registrationProof(after);\n fail(\"REGISTRATION_DRIFT\", \"Desktop registration is neither recorded replacement state\");\n}\n\nasync function observedStepProof(\n request: ClientMigrationCutoverRequest,\n phase: Phase,\n step: ClientOperationManifest[\"steps\"][number],\n sourceGate: SQLiteEdgeStore,\n execute: ClientLifecycleExecutor,\n env: NodeJS.ProcessEnv,\n): Promise<unknown> {\n const spec = specForStep(request, phase, request.sourceMetadata.runtime, step);\n if (spec.target === \"edge-gate\") {\n return gateProof(await sourceGate.migrationGate());\n }\n if (spec.name === \"desktop-replace-target\") {\n return currentDesktopReplacementProof(request.sourceMetadata, request.sourceRegistration,\n request.targetMetadata, request.targetRegistration, execute, env);\n }\n if (spec.name === \"native-remove-source\") {\n return currentRegistrationProof(request.sourceMetadata, request.sourceRegistration, execute, env);\n }\n if (spec.name === \"native-add-target\") return currentRegistrationProof(request.targetMetadata, request.targetRegistration, execute, env);\n return metadataProof(loadManagedClientMetadata(request.sourceMetadata.runtime, request.sourceMetadata.instance, env));\n}\n\nasync function claimDrain(\n edge: SQLiteEdgeStore, operationId: string, now: Date,\n): Promise<EdgeDrainLease> {\n const gate = await edge.migrationGate();\n if (gate.state === \"active\") return edge.beginDrain(operationId, now);\n if (gate.state === \"draining\" && gate.operationId === operationId) return edge.resumeDrain(operationId, now);\n fail(\"EDGE_GATE_DRIFT\", \"edge gate cannot be claimed by this migration phase\");\n}\n\nasync function applyOperation(\n manifest: ClientOperationManifest,\n lock: ClientOperationLock,\n staged: StagedMigrationCurrent,\n execute: ClientLifecycleExecutor,\n fetchImpl: typeof fetch,\n now: () => Date,\n env: NodeJS.ProcessEnv,\n): Promise<ClientMigrationCutoverPlan> {\n const request = manifest.request as ClientMigrationCutoverRequest;\n let current = manifest;\n const phase = request.kind;\n if (current.state === \"prepared\") {\n for (const step of current.steps) {\n const spec = specForStep(request, phase, current.runtime, step);\n current = writeClientOperationSnapshot(current.operationId, current, step.beforeArtifact,\n canonical(spec.before), lock, env);\n }\n current = transitionClientOperation(current.operationId, current, \"snapshotted\", lock, env);\n }\n const sourceGate = await openEdge(staged.sourceValues);\n let sourceLease: EdgeDrainLease | undefined;\n let forwardDrained = false;\n try {\n for (let index = 0; index < current.steps.length; index += 1) {\n const step = current.steps[index]!;\n const spec = specForStep(request, phase, current.runtime, step);\n let observed = await observedStepProof(request, phase, step, sourceGate, execute, env);\n if (step.state === \"observed-applied\") {\n if (digest(observed) !== step.expectedAfterSha256) fail(\"AMBIGUOUS_OPERATION\", \"applied migration step no longer matches its durable after-state\");\n continue;\n }\n const classification = classifyClientOperationRestart(current, digest(observed));\n if (classification.disposition === \"blocked\") fail(\"AMBIGUOUS_OPERATION\", classification.reason);\n if (classification.disposition === \"advance\") {\n current = recordClientOperationStepApplied(current.operationId, current, index, canonical(observed), lock, env);\n continue;\n }\n // Every real edge or host mutation is preceded by a fresh, apply-only\n // authority check. Dry-run paths never enter this function.\n await attestPhaseAuthority(staged, request, fetchImpl);\n // A resumed journal can observe a changed managed cohort after its last\n // durable step. Check the phase-specific cohort immediately before each\n // new mutation, rather than trusting the original cutover assertion.\n assertPhaseManagedCohort(phase, staged, request, env);\n if (step.state === \"pending\") current = recordClientOperationStepIntent(current.operationId, current, index, lock, env);\n\n if (step.target === \"edge-gate\") {\n if (phase === \"migrate-cutover\") {\n sourceLease = await claimDrain(sourceGate, request.migrationOperationId, now());\n } else {\n if (new Date(request.predecessorGraceUntil).getTime() > now().getTime()) {\n fail(\"FINALIZE_REFUSED\", \"source edge is not eligible for finalization\");\n }\n sourceLease = await claimDrain(sourceGate, request.sourceCutoverOperationId!, now());\n await sourceGate.assertDrainComplete(sourceLease, now());\n await sourceGate.retireScope(sourceLease, now());\n }\n } else if (phase === \"migrate-cutover\") {\n if (!sourceLease) sourceLease = await claimDrain(sourceGate, request.migrationOperationId, now());\n if (!forwardDrained) {\n sourceLease = await drain(sourceGate, staged.targetValues, sourceLease, fetchImpl, now);\n forwardDrained = true;\n }\n // Drain work can take arbitrarily long. Re-attest the route before the\n // registration or metadata write that follows it.\n await attestPhaseAuthority(staged, request, fetchImpl);\n assertPhaseManagedCohort(phase, staged, request, env);\n await sourceGate.assertDrainComplete(sourceLease, now());\n sourceLease = await sourceGate.renewDrainLease(sourceLease, now());\n await sourceGate.assertDrainLease(sourceLease, now());\n if (spec.name === \"native-remove-source\") removeManagedClientRegistration(request.sourceMetadata, execute, env);\n else if (spec.name === \"native-add-target\") addManagedClientRegistration(request.targetMetadata, execute, env);\n else if (spec.name === \"desktop-replace-target\") {\n replaceManagedDesktopRegistration(request.sourceMetadata, request.targetMetadata, current.operationId, index, execute, env);\n } else if (spec.name === \"metadata-switch-target\") {\n switchManagedClientMetadata(request.sourceMetadata, request.targetMetadata, env);\n } else fail(\"CORRUPT_OPERATION\", \"unexpected forward migration step\");\n } else {\n fail(\"CORRUPT_OPERATION\", \"unexpected finalization step\");\n }\n observed = await observedStepProof(request, phase, step, sourceGate, execute, env);\n current = recordClientOperationStepApplied(current.operationId, current, index, canonical(observed), lock, env);\n }\n } finally {\n await sourceGate.close();\n }\n current = completeClientOperationCleanup(current.operationId, current, lock, env);\n return plan(phase, true, current.operationId, request, current.runtime, current.instance);\n}\n\nexport async function resumeClientMigrationCutover(options: CutoverResumeOptions): Promise<ClientMigrationCutoverPlan> {\n const env = options.env ?? process.env; const original = readClientOperation(options.operationId, env);\n if (original.version !== 6 || !original.request || ![\"migrate-cutover\", \"migrate-finalize\"].includes(original.request.kind)) fail(\"CORRUPT_OPERATION\", \"operation is not a v6 endpoint migration\");\n if (options.recoverLock && hasClientOperationLock(original.runtime, original.instance, env)) recoverClientOperationLock(original.runtime, original.instance, env);\n const begun = resumeClientOperation(options.operationId, env);\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, { encoding: \"utf8\", cwd: context?.cwd, env: context?.env }));\n try {\n const request = begun.manifest.request as ClientMigrationCutoverRequest;\n // A resumed journal is allowed to be between its recorded before and after\n // registration or metadata states. Per-step classification owns that proof.\n const staged = retainedCurrent(request, env);\n return await applyOperation(begun.manifest, begun.lock, staged, execute, options.fetch ?? fetch, options.now ?? (() => new Date()), env);\n } finally { releaseClientOperationLock(begun.lock); }\n}\n\nexport async function finalizeClientMigration(options: Omit<CutoverOptions, \"stageOperationId\"> & { cutoverOperationId: string }): Promise<ClientMigrationCutoverPlan> {\n const env = options.env ?? process.env; const source = readClientOperation(options.cutoverOperationId, env);\n const prior = source.completion?.migration;\n if (source.version !== 6 || source.completion?.operation !== \"migrate-cutover\" || !prior || !(\"kind\" in prior) || prior.kind !== \"migrate-cutover\") fail(\"FINALIZE_REFUSED\", \"finalize requires a committed forward cutover\");\n const execute = options.execute ?? ((command, args, context) => spawnSync(command, args, { encoding: \"utf8\", cwd: context?.cwd, env: context?.env }));\n const dryCurrent = targetCurrent(prior, env, execute);\n const now = options.now ?? (() => new Date());\n if (!options.exclusiveEdge) fail(\"EXCLUSIVE_EDGE_REQUIRED\", \"--exclusive-edge is required because finalization mutates the retained source cohort\");\n assertSourceRetirementCohort(dryCurrent.targetMetadata, dryCurrent.source.edgeDatabasePath, env);\n if (new Date(prior.predecessorGraceUntil).getTime() > now().getTime()) fail(\"FINALIZE_REFUSED\", \"source edge is not eligible for finalization\");\n await assertFinalizeGatePreconditions(dryCurrent, source.operationId, now());\n if (!options.apply) return plan(\"migrate-finalize\", false, null, requestFor(\n \"migrate-finalize\", \"00000000-0000-7000-8000-000000000000\", source.operationId,\n prior.gatewayAuthorityId, dryCurrent,\n ), source.runtime, source.instance);\n const staged = dryCurrent;\n const request = requestFor(\"migrate-finalize\", randomUUID(), source.operationId, prior.gatewayAuthorityId, staged);\n if (options.recoverLock && hasClientOperationLock(source.runtime, source.instance, env)) {\n recoverClientOperationLock(source.runtime, source.instance, env);\n }\n const begun = beginClientOperation({ operationId: request.migrationOperationId, version: 6, request, runtime: source.runtime, instance: source.instance, steps: phaseSteps(request.kind, source.runtime, request) }, env);\n try { return await applyOperation(begun.manifest, begun.lock, staged, execute, options.fetch ?? fetch, now, env); }\n finally { releaseClientOperationLock(begun.lock); }\n}\n","import { randomBytes, randomUUID } from \"node:crypto\";\nimport pg from \"pg\";\nimport {\n canonicalGatewayUrl,\n canonicalTimestamp,\n acquireEnrollmentLock,\n createPendingEnrollment,\n defaultEnrollmentPath,\n enrollmentTokenHash,\n readEnrollment,\n recoverEnrollmentLock,\n releaseEnrollmentLock,\n transitionEnrollment,\n type EnrollmentLock,\n type EnrollmentFile,\n type EnrollmentInput,\n type EnrollmentResult,\n} from \"./enrollment-file.js\";\n\nexport type OwnerOptionValue = string | boolean | undefined;\nexport type OwnerOptions = Record<string, OwnerOptionValue>;\ntype Queryable = Pick<pg.Pool, \"query\">;\n\nclass OwnerDatabaseFailure extends Error {\n constructor(readonly driverCode: string) {\n super(\"owner database operation failed\");\n }\n}\n\nasync function ownerQuery<T extends pg.QueryResultRow>(\n db: Queryable,\n sql: string,\n values: unknown[],\n): Promise<pg.QueryResult<T>> {\n try {\n return await db.query<T>(sql, values);\n } catch (error) {\n const code = error && typeof error === \"object\" && \"code\" in error\n ? String((error as { code?: unknown }).code ?? \"\")\n : \"\";\n throw new OwnerDatabaseFailure(code);\n }\n}\n\nexport interface OwnerDependencies {\n connect(databaseUrl: string): { db: Queryable; close(): Promise<void> };\n now(): Date;\n requestId(): string;\n token(): string;\n instance(runtime: EnrollmentInput[\"runtime\"]): string;\n}\n\nconst defaultDependencies: OwnerDependencies = {\n connect(databaseUrl) {\n const pool = new pg.Pool({\n connectionString: databaseUrl,\n max: 1,\n connectionTimeoutMillis: 10_000,\n query_timeout: 30_000,\n });\n return { db: pool, close: () => pool.end() };\n },\n now: () => new Date(),\n requestId: () => randomUUID(),\n token: () => randomBytes(32).toString(\"base64url\"),\n instance: (runtime) => runtime + \"-\" + randomUUID(),\n};\n\nfunction stringOption(options: OwnerOptions, name: string): string | undefined {\n const value = options[name];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction required(options: OwnerOptions, name: string): string {\n const value = stringOption(options, name);\n if (!value) throw new Error(\"--\" + name + \" is required\");\n return value;\n}\n\nfunction selectWithEnvironment(\n options: OwnerOptions,\n name: string,\n env: NodeJS.ProcessEnv,\n environmentName: string,\n requiredValue: boolean,\n): string | undefined {\n const explicit = stringOption(options, name);\n const environment = env[environmentName]?.trim() || undefined;\n if (explicit && environment && explicit !== environment) {\n throw new Error(\"--\" + name + \" conflicts with \" + environmentName);\n }\n const selected = explicit ?? environment;\n if (requiredValue && !selected) {\n throw new Error(\"--\" + name + \" or \" + environmentName + \" is required\");\n }\n return selected;\n}\n\nfunction timestamp(options: OwnerOptions, name: string): string | null {\n const value = stringOption(options, name) ?? null;\n return canonicalTimestamp(value, \"--\" + name);\n}\n\nfunction installRuntime(options: OwnerOptions): EnrollmentInput[\"runtime\"] {\n const value = required(options, \"runtime\");\n if (value !== \"codex\" && value !== \"claude-code\" && value !== \"claude-desktop\") {\n throw new Error(\"--runtime must be codex, claude-code, or claude-desktop\");\n }\n return value;\n}\n\nfunction scopeSet(options: OwnerOptions): string {\n const value = required(options, \"scope-set\");\n if (!/^[a-z][a-z0-9-]{0,63}$/.test(value)) throw new Error(\"--scope-set is invalid\");\n return value;\n}\n\nfunction uuidValue(value: string, label: string): string {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n throw new Error(label + \" must be a UUID\");\n }\n return value;\n}\n\nfunction uuidOption(options: OwnerOptions, name: string): string {\n return uuidValue(required(options, name), \"--\" + name);\n}\n\nconst OWNER_OPTIONS: Record<string, ReadonlySet<string>> = {\n provision: new Set([\n \"workspace\", \"workspace-name\", \"identity\", \"runtime\", \"instance\", \"gateway-url\",\n \"scope-set\", \"display-name\", \"runtime-type\", \"label\", \"expires-at\", \"request-id\",\n \"enrollment-file\", \"recover-lock\",\n ]),\n rotate: new Set([\n \"workspace\", \"identity\", \"runtime\", \"instance\", \"gateway-url\", \"scope-set\",\n \"runtime-type\", \"label\", \"expires-at\", \"grace-until\", \"invalidate-immediately\",\n \"credential-id\", \"request-id\", \"enrollment-file\", \"recover-lock\",\n ]),\n inventory: new Set([\"workspace\", \"cursor\", \"limit\"]),\n revoke: new Set([\"credential-id\", \"reason\", \"request-id\"]),\n};\n\nfunction validateOwnerOptions(subcommand: string, options: OwnerOptions): void {\n if (stringOption(options, \"resume\")) {\n const override = Object.keys(options).find((key) => key !== \"resume\" && key !== \"recover-lock\");\n if (override) throw new Error(\"--\" + override + \" cannot be used with --resume\");\n if (subcommand !== \"provision\" && subcommand !== \"rotate\") {\n throw new Error(\"--resume is valid only for provision or rotate\");\n }\n return;\n }\n const allowed = OWNER_OPTIONS[subcommand];\n const invalid = Object.keys(options).find((key) => !allowed?.has(key));\n if (invalid) throw new Error(\"--\" + invalid + \" is not valid for owner \" + subcommand);\n}\n\nfunction requestId(options: OwnerOptions, dependencies: OwnerDependencies): string {\n return stringOption(options, \"request-id\") ? uuidOption(options, \"request-id\") : dependencies.requestId();\n}\n\nfunction initialEnrollment(\n operation: \"provision\" | \"rotate\",\n options: OwnerOptions,\n env: NodeJS.ProcessEnv,\n dependencies: OwnerDependencies,\n): { path: string; enrollment: EnrollmentFile } {\n const request = requestId(options, dependencies);\n const runtime = installRuntime(options);\n const gatewayUrl = canonicalGatewayUrl(\n selectWithEnvironment(options, \"gateway-url\", env, \"AGENT_BRIDGE_URL\", true),\n \"--gateway-url\",\n );\n const workspaceId = required(options, \"workspace\");\n const principal = required(options, \"identity\");\n const explicitInstance = stringOption(options, \"instance\");\n const instance = operation === \"rotate\"\n ? explicitInstance ?? (() => { throw new Error(\"--instance is required for rotation\"); })()\n : explicitInstance ?? dependencies.instance(runtime);\n const graceUntil = timestamp(options, \"grace-until\");\n const invalidateImmediately = options[\"invalidate-immediately\"] === true\n || options[\"invalidate-immediately\"] === \"true\";\n if (operation === \"rotate\" && (graceUntil === null) === !invalidateImmediately) {\n throw new Error(\"rotation requires exactly one of --grace-until or --invalidate-immediately\");\n }\n if (operation === \"provision\" && (graceUntil !== null || invalidateImmediately)) {\n throw new Error(\"provision does not accept rotation invalidation options\");\n }\n const input: EnrollmentInput = {\n gatewayUrl,\n workspaceId,\n principal,\n runtime,\n instance,\n credentialId: operation === \"rotate\" ? uuidOption(options, \"credential-id\") : null,\n workspaceName: operation === \"provision\" ? required(options, \"workspace-name\") : null,\n displayName: stringOption(options, \"display-name\") ?? null,\n runtimeType: stringOption(options, \"runtime-type\") ?? runtime,\n label: stringOption(options, \"label\") ?? null,\n scopeSetName: scopeSet(options),\n expiresAt: timestamp(options, \"expires-at\"),\n graceUntil,\n invalidateImmediately,\n };\n if (operation === \"rotate\" && input.displayName !== null) {\n throw new Error(\"rotate does not accept --display-name\");\n }\n const enrollment: EnrollmentFile = {\n schema: \"agent-bridge.enrollment\",\n version: 1,\n provider: \"gateway\",\n revision: 0,\n state: \"pending\",\n operation,\n requestId: request,\n createdAt: dependencies.now().toISOString(),\n completedAt: null,\n input,\n token: dependencies.token(),\n result: null,\n };\n const path = stringOption(options, \"enrollment-file\") ?? defaultEnrollmentPath(request, env);\n createPendingEnrollment(path, enrollment, env);\n return { path, enrollment };\n}\n\nfunction enrollment(\n operation: \"provision\" | \"rotate\",\n options: OwnerOptions,\n env: NodeJS.ProcessEnv,\n dependencies: OwnerDependencies,\n): { path: string; enrollment: EnrollmentFile } {\n const resume = stringOption(options, \"resume\");\n if (!resume) return initialEnrollment(operation, options, env, dependencies);\n const loaded = readEnrollment(resume, env);\n if (loaded.operation !== operation) {\n throw new Error(\"enrollment operation is \" + loaded.operation + \", not \" + operation);\n }\n return { path: resume, enrollment: loaded };\n}\n\nfunction publicEnrollment(path: string, enrollment: EnrollmentFile): Record<string, unknown> {\n if (!enrollment.result) throw new Error(\"enrollment has no completed result\");\n return {\n schemaVersion: 1,\n status: \"ok\",\n operation: enrollment.operation,\n requestId: enrollment.requestId,\n enrollmentFile: path,\n enrollmentState: enrollment.state,\n ...enrollment.result,\n };\n}\n\nasync function runProvision(\n db: Queryable,\n path: string,\n enrollment: EnrollmentFile,\n completedAt: string,\n env: NodeJS.ProcessEnv,\n lock: EnrollmentLock,\n): Promise<Record<string, unknown>> {\n if (enrollment.state !== \"pending\") return publicEnrollment(path, enrollment);\n const input = enrollment.input;\n const response = await ownerQuery<{\n workspace_id: string; agent_id: string; credential_id: string; replayed: boolean;\n }>(\n db,\n \"SELECT * FROM agent_bridge.control_provision(\" +\n \"$1::uuid,$2::text,$3::text,$4::text,$5::text,$6::text,$7::char(64),\" +\n \"$8::text,$9::text,$10::timestamptz)\",\n [enrollment.requestId, input.workspaceId, input.workspaceName, input.principal,\n input.displayName, input.runtimeType, enrollmentTokenHash(enrollment),\n input.label, input.scopeSetName, input.expiresAt],\n );\n const row = response.rows[0];\n if (!row) throw new Error(\"owner provision returned no result\");\n const result: EnrollmentResult = {\n workspaceId: row.workspace_id,\n principal: input.principal,\n agentId: row.agent_id,\n credentialId: row.credential_id,\n replayed: row.replayed,\n };\n const ready = transitionEnrollment(path, enrollment, \"ready\", { completedAt, result }, env, lock);\n return publicEnrollment(path, ready);\n}\n\nasync function runRotate(\n db: Queryable,\n path: string,\n enrollment: EnrollmentFile,\n completedAt: string,\n env: NodeJS.ProcessEnv,\n lock: EnrollmentLock,\n): Promise<Record<string, unknown>> {\n if (enrollment.state !== \"pending\") return publicEnrollment(path, enrollment);\n const input = enrollment.input;\n const response = await ownerQuery<{\n credential_id: string; workspace_id: string; principal: string; replayed: boolean;\n }>(\n db,\n \"SELECT * FROM agent_bridge.control_rotate_credential(\" +\n \"$1::uuid,$2::uuid,$3::text,$4::text,$5::char(64),$6::text,$7::text,\" +\n \"$8::timestamptz,$9::timestamptz)\",\n [enrollment.requestId, input.credentialId, input.workspaceId, input.principal,\n enrollmentTokenHash(enrollment), input.label, input.scopeSetName,\n input.expiresAt, input.graceUntil],\n );\n const row = response.rows[0];\n if (!row) throw new Error(\"owner rotation returned no result\");\n const result: EnrollmentResult = {\n workspaceId: row.workspace_id,\n principal: row.principal,\n agentId: null,\n credentialId: row.credential_id,\n replayed: row.replayed,\n };\n const ready = transitionEnrollment(path, enrollment, \"ready\", { completedAt, result }, env, lock);\n return publicEnrollment(path, ready);\n}\n\ninterface InventoryCursor {\n v: 1;\n workspace: string | null;\n createdAt: string;\n credentialId: string;\n}\n\nfunction decodeCursor(raw: string | undefined, workspace: string | null): InventoryCursor | null {\n if (!raw) return null;\n let parsed: unknown;\n try { parsed = JSON.parse(Buffer.from(raw, \"base64url\").toString(\"utf8\")); }\n catch { throw new Error(\"--cursor is not a valid owner inventory cursor\"); }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"--cursor is not a valid owner inventory cursor\");\n }\n const cursor = parsed as Record<string, unknown>;\n if (cursor.v !== 1 || cursor.workspace !== workspace\n || typeof cursor.createdAt !== \"string\"\n || typeof cursor.credentialId !== \"string\") {\n throw new Error(\"--cursor does not match this inventory request\");\n }\n let createdAt: string | null;\n try { createdAt = canonicalTimestamp(cursor.createdAt, \"inventory cursor createdAt\"); }\n catch { throw new Error(\"--cursor is not a valid owner inventory cursor\"); }\n if (createdAt === null) throw new Error(\"--cursor is not a valid owner inventory cursor\");\n let credentialId: string;\n try { credentialId = uuidValue(cursor.credentialId, \"inventory cursor credentialId\"); }\n catch { throw new Error(\"--cursor is not a valid owner inventory cursor\"); }\n return { v: 1, workspace, createdAt, credentialId };\n}\n\nfunction encodeCursor(cursor: InventoryCursor): string {\n return Buffer.from(JSON.stringify(cursor), \"utf8\").toString(\"base64url\");\n}\n\nfunction instant(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n return value instanceof Date ? value.toISOString() : new Date(String(value)).toISOString();\n}\n\nasync function runInventory(db: Queryable, options: OwnerOptions): Promise<Record<string, unknown>> {\n const rawLimit = stringOption(options, \"limit\");\n const limit = rawLimit === undefined ? 100 : Number(rawLimit);\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 1000) {\n throw new Error(\"--limit must be an integer between 1 and 1000\");\n }\n const workspace = stringOption(options, \"workspace\") ?? null;\n const cursor = decodeCursor(stringOption(options, \"cursor\"), workspace);\n const response = await ownerQuery<Record<string, unknown>>(\n db,\n \"SELECT * FROM agent_bridge.control_credential_inventory(\" +\n \"$1::text,$2::timestamptz,$3::uuid,$4::integer)\",\n [workspace, cursor?.createdAt ?? null, cursor?.credentialId ?? null, limit],\n );\n const credentials = response.rows.map((row) => ({\n credentialId: row.credential_id,\n workspaceId: row.workspace_id,\n principal: row.principal,\n label: row.label,\n scopes: row.scopes,\n scopeSetName: row.scope_set_name,\n expiresAt: instant(row.expires_at),\n revokedAt: instant(row.revoked_at),\n revokedBy: row.revoked_by,\n revocationReason: row.revocation_reason,\n replacesCredentialId: row.replaces_credential_id,\n expiryGraceUntil: instant(row.expiry_grace_until),\n createdAt: instant(row.created_at),\n lastUsedAt: instant(row.last_used_at),\n agentDisabledAt: instant(row.agent_disabled_at),\n workspaceDisabledAt: instant(row.workspace_disabled_at),\n }));\n const last = credentials.length ? credentials[credentials.length - 1] : undefined;\n const nextCursor = credentials.length === limit && last?.createdAt\n ? encodeCursor({\n v: 1,\n workspace,\n createdAt: last.createdAt,\n credentialId: String(last.credentialId),\n })\n : null;\n return {\n schemaVersion: 1,\n status: \"ok\",\n operation: \"inventory\",\n items: credentials,\n page: { limit, nextCursor },\n };\n}\n\nasync function runRevoke(\n db: Queryable,\n options: OwnerOptions,\n dependencies: OwnerDependencies,\n): Promise<Record<string, unknown>> {\n const selectedRequestId = requestId(options, dependencies);\n const credentialId = uuidOption(options, \"credential-id\");\n const reason = stringOption(options, \"reason\") ?? \"operator_request\";\n if (![\"operator_request\", \"rotation\", \"compromise\", \"retired\"].includes(reason)) {\n throw new Error(\"--reason must be operator_request, rotation, compromise, or retired\");\n }\n const response = await ownerQuery<{ revoked: boolean; replayed: boolean }>(\n db,\n \"SELECT * FROM agent_bridge.control_revoke_credential($1::uuid,$2::uuid,$3::text)\",\n [selectedRequestId, credentialId, reason],\n );\n const row = response.rows[0];\n if (!row) throw new Error(\"owner revoke returned no result\");\n return {\n schemaVersion: 1,\n status: \"ok\",\n operation: \"revoke\",\n requestId: selectedRequestId,\n credentialId,\n revoked: row.revoked,\n replayed: row.replayed,\n };\n}\n\nexport async function runOwnerCommand(\n subcommand: string | undefined,\n options: OwnerOptions,\n env: NodeJS.ProcessEnv = process.env,\n dependencies: OwnerDependencies = defaultDependencies,\n): Promise<Record<string, unknown>> {\n if (!subcommand || subcommand === \"help\") {\n if (Object.keys(options).length) throw new Error(\"owner help does not accept options\");\n return {\n command: \"agent-bridge owner\",\n subcommands: [\"provision\", \"inventory\", \"rotate\", \"revoke\"],\n authority: \"AGENT_BRIDGE_OPERATOR_DATABASE_URL\",\n };\n }\n if (![\"provision\", \"inventory\", \"rotate\", \"revoke\"].includes(subcommand)) {\n throw new Error(\"unsupported owner command: \" + subcommand);\n }\n validateOwnerOptions(subcommand, options);\n if (options[\"recover-lock\"] === true && !stringOption(options, \"resume\")) {\n throw new Error(\"--recover-lock requires --resume\");\n }\n const databaseUrl = env.AGENT_BRIDGE_OPERATOR_DATABASE_URL?.trim();\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_OPERATOR_DATABASE_URL is required\");\n let connection: ReturnType<OwnerDependencies[\"connect\"]>;\n try {\n connection = dependencies.connect(databaseUrl);\n } catch {\n throw new Error(\"owner database connection failed\");\n }\n try {\n if (subcommand === \"inventory\") return await runInventory(connection.db, options);\n if (subcommand === \"revoke\") return await runRevoke(connection.db, options, dependencies);\n const mutation = subcommand as \"provision\" | \"rotate\";\n const selected = enrollment(mutation, options, env, dependencies);\n if (options[\"recover-lock\"] === true) recoverEnrollmentLock(selected.path, env);\n const lock = acquireEnrollmentLock(selected.path, env);\n try {\n const current = readEnrollment(selected.path, env);\n if (current.operation !== mutation) {\n throw new Error(\"enrollment operation is \" + current.operation + \", not \" + mutation);\n }\n if (subcommand === \"provision\") {\n return await runProvision(\n connection.db, selected.path, current, dependencies.now().toISOString(), env, lock,\n );\n }\n return await runRotate(\n connection.db, selected.path, current, dependencies.now().toISOString(), env, lock,\n );\n } finally {\n releaseEnrollmentLock(lock);\n }\n } catch (error) {\n if (!(error instanceof OwnerDatabaseFailure)) throw error;\n const code = error.driverCode;\n if (code === \"42501\") throw new Error(\"owner database authorization denied\");\n if (code === \"23505\") throw new Error(\"owner request conflicts with existing state\");\n if (code === \"22P02\" || code === \"22007\" || code === \"22023\") {\n throw new Error(\"owner database rejected invalid input\");\n }\n throw new Error(\"owner database operation failed\");\n } finally {\n try {\n await connection.close();\n } catch {\n throw new Error(\"owner database close failed\");\n }\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n closeSync, constants, existsSync, fstatSync, fsyncSync, linkSync, lstatSync,\n openSync, renameSync, unlinkSync, writeSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport pg from \"pg\";\nimport { readClientConfigFile } from \"./client-config.js\";\nimport { PortableArchiveFile } from \"./portable-archive-file.js\";\nimport { PortableArchiveError, validatePortableArchiveRequestId } from \"./portable-archive-format.js\";\nimport type { PortableArchiveExportSession, PortableArchiveMetadata, PortableArchiveStore } from \"./portable-archive-store.js\";\nimport { streamPortableArchive } from \"./portable-archive.js\";\nimport { PostgresPortableArchiveStore } from \"./postgres-portable-archive-store.js\";\nimport { PrivatePathError, securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\nimport { SQLitePortableArchiveStore } from \"./sqlite-portable-archive-store.js\";\n\ntype ArchiveProvider = \"local\" | \"postgres\";\ntype ArchiveOperation = \"export\" | \"verify\" | \"import\";\ntype ArchiveOptions = Record<string, string | true>;\nconst BOOLEAN_OPTIONS = new Set([\"apply\", \"dry-run\", \"force\"]);\nconst OPERATION_OPTIONS: Record<ArchiveOperation, ReadonlySet<string>> = {\n export: new Set([\"provider\", \"workspace\", \"output\", \"db\", \"config\", \"force\", \"request-id\"]),\n verify: new Set([\"file\"]),\n import: new Set([\"provider\", \"file\", \"db\", \"config\", \"workspace\", \"request-id\", \"apply\", \"dry-run\"]),\n};\n\nexport class ArchiveCommandError extends Error {\n constructor(readonly code: string, message: string, readonly details?: Record<string, unknown>) { super(message); }\n}\nfunction fail(code: string, message: string, details?: Record<string, unknown>): never { throw new ArchiveCommandError(code, message, details); }\n\nfunction parseArchiveArgs(argv: string[]): { operation: ArchiveOperation; options: ArchiveOptions } {\n const operation = argv[0];\n if (operation !== \"export\" && operation !== \"verify\" && operation !== \"import\") fail(\"INVALID_COMMAND\", \"usage: agent-bridge archive <export|verify|import>\");\n const options: ArchiveOptions = {};\n for (let index = 1; index < argv.length; index += 1) {\n const argument = argv[index]!;\n if (!argument.startsWith(\"--\") || argument === \"--\") fail(\"INVALID_ARGUMENT\", `unexpected positional argument: ${argument}`);\n const name = argument.slice(2);\n if (!name || name.includes(\"=\")) fail(\"INVALID_OPTION\", `invalid option: ${argument}`);\n if (!OPERATION_OPTIONS[operation].has(name)) fail(\"INVALID_OPTION\", `--${name} is not valid for archive ${operation}`);\n if (options[name] !== undefined) fail(\"DUPLICATE_OPTION\", `--${name} may only be provided once`);\n if (BOOLEAN_OPTIONS.has(name)) { options[name] = true; continue; }\n const selected = argv[index + 1];\n if (!selected || selected.startsWith(\"--\")) fail(\"MISSING_OPTION_VALUE\", `--${name} requires a value`);\n options[name] = selected; index += 1;\n }\n if (operation === \"import\" && options.apply === true && options[\"dry-run\"] === true) fail(\"INVALID_OPTION\", \"--apply and --dry-run are mutually exclusive\");\n return { operation, options };\n}\n\nconst stringOption = (options: ArchiveOptions, name: string): string | undefined => typeof options[name] === \"string\" ? options[name] as string : undefined;\nfunction archiveRequestId(options: ArchiveOptions): string {\n const value = stringOption(options, \"request-id\") ?? randomUUID();\n try { return validatePortableArchiveRequestId(value); }\n catch { return fail(\"INVALID_REQUEST_ID\", \"--request-id must be a UUID\"); }\n}\nfunction required(options: ArchiveOptions, name: string): string { const selected = stringOption(options, name)?.trim(); if (!selected) fail(\"MISSING_OPTION\", `--${name} is required`); return selected; }\nfunction provider(options: ArchiveOptions): ArchiveProvider {\n const selected = required(options, \"provider\");\n if (selected !== \"local\" && selected !== \"postgres\") fail(\"INVALID_PROVIDER\", \"--provider must be local or postgres\");\n if (selected === \"postgres\" && (options.db !== undefined || options.config !== undefined)) fail(\"INVALID_OPTION\", \"PostgreSQL archives accept authority only from AGENT_BRIDGE_ARCHIVE_DATABASE_URL\");\n return selected;\n}\nconst home = (env: NodeJS.ProcessEnv): string => env.HOME?.trim() || homedir();\nfunction localDatabase(options: ArchiveOptions, env: NodeJS.ProcessEnv): string {\n const configPath = stringOption(options, \"config\") ?? env.AGENT_BRIDGE_CONFIG?.trim() ?? join(home(env), \".agent-bridge\", \"config\");\n const config = readClientConfigFile(configPath);\n const selected = stringOption(options, \"db\") ?? env.AGENT_BRIDGE_DB?.trim() ?? config.AGENT_BRIDGE_DB?.trim() ?? join(home(env), \".agent-bridge\", \"bridge.sqlite3\");\n return isAbsolute(selected) ? selected : resolve(selected);\n}\nfunction createStore(selected: ArchiveProvider, options: ArchiveOptions, env: NodeJS.ProcessEnv): { store: PortableArchiveStore; close(): Promise<void> } {\n if (selected === \"local\") { const store = new SQLitePortableArchiveStore(localDatabase(options, env)); return { store, close: async () => { store.close(); } }; }\n const databaseUrl = env.AGENT_BRIDGE_ARCHIVE_DATABASE_URL?.trim();\n if (!databaseUrl) fail(\"MISSING_AUTHORITY\", \"AGENT_BRIDGE_ARCHIVE_DATABASE_URL is required\");\n const pool = new pg.Pool({ connectionString: databaseUrl, max: 1, connectionTimeoutMillis: 10_000, query_timeout: 30_000 });\n return { store: new PostgresPortableArchiveStore(pool), close: () => pool.end() };\n}\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\"); try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\ntype ArchiveStreamer = typeof streamPortableArchive;\nexport interface ArchivePublicationFileOperations {\n link(source: string, target: string): void;\n rename(source: string, target: string): void;\n unlink(path: string): void;\n syncDirectory(path: string): void;\n}\n\nexport async function publishArchive(\n path: string,\n force: boolean,\n session: PortableArchiveExportSession,\n workspace: string,\n options: { requestId: string; stream?: ArchiveStreamer; fileOperations?: Partial<ArchivePublicationFileOperations> },\n) {\n const exportRequestId = validatePortableArchiveRequestId(options.requestId);\n const target = resolve(path);\n const directory = dirname(target);\n const temporary = join(directory, `.${exportRequestId}.agent-bridge-archive.tmp`);\n const backup = join(directory, `.${exportRequestId}.agent-bridge-archive.backup`);\n const operations: ArchivePublicationFileOperations = {\n link: options.fileOperations?.link ?? linkSync,\n rename: options.fileOperations?.rename ?? renameSync,\n unlink: options.fileOperations?.unlink ?? unlinkSync,\n syncDirectory: options.fileOperations?.syncDirectory ?? syncDirectory,\n };\n let descriptor: number | undefined; let created = false; let linked = false;\n let replacementVisible = false; let durablyPublished = false; let backupCreated = false;\n let preserveBackup = false; let targetExisted = false;\n const ambiguous = (message: string) => new ArchiveCommandError(\n \"ARCHIVE_PUBLICATION_AMBIGUOUS\",\n message,\n {\n requestId: exportRequestId, file: target, published: \"unknown\", auditStatus: \"started\",\n ...(backupCreated ? { backupFile: backup } : {}),\n },\n );\n try {\n verifyPrivatePathAccess(directory, \"directory\");\n if (existsSync(target)) {\n const stat = lstatSync(target);\n if (stat.isSymbolicLink() || !stat.isFile()) fail(\"INVALID_OUTPUT\", \"archive output must be a regular file\");\n if (!force) fail(\"OUTPUT_EXISTS\", \"archive output already exists; pass --force to replace it\");\n targetExisted = true;\n }\n descriptor = openSync(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600); created = true;\n securePrivatePath(temporary, \"file\");\n const metadata = await (options.stream ?? streamPortableArchive)(session, workspace, exportRequestId, (bytes) => {\n let offset = 0; while (offset < bytes.length) offset += writeSync(descriptor!, bytes, offset, bytes.length - offset);\n });\n fsyncSync(descriptor);\n const opened = fstatSync(descriptor); const named = lstatSync(temporary);\n if (opened.dev !== named.dev || opened.ino !== named.ino || !named.isFile() || named.isSymbolicLink()) fail(\"INVALID_OUTPUT\", \"archive temporary path identity changed before publication\");\n if (force && targetExisted) {\n const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const targetDescriptor = openSync(target, constants.O_RDONLY | noFollow);\n try {\n const openedTarget = fstatSync(targetDescriptor); const namedTarget = lstatSync(target);\n if (!openedTarget.isFile() || namedTarget.isSymbolicLink()\n || openedTarget.dev !== namedTarget.dev || openedTarget.ino !== namedTarget.ino) {\n fail(\"INVALID_OUTPUT\", \"archive output identity changed before replacement\");\n }\n verifyPrivatePathAccess(target, \"file\");\n operations.link(target, backup); backupCreated = true;\n const backupStat = lstatSync(backup);\n if (!backupStat.isFile() || backupStat.isSymbolicLink()\n || openedTarget.dev !== backupStat.dev || openedTarget.ino !== backupStat.ino) {\n fail(\"INVALID_OUTPUT\", \"archive backup identity changed before replacement\");\n }\n verifyPrivatePathAccess(backup, \"file\"); operations.syncDirectory(directory);\n } finally { closeSync(targetDescriptor); }\n }\n if (force) { operations.rename(temporary, target); created = false; replacementVisible = true; }\n else {\n try { operations.link(temporary, target); }\n catch (error) { if ((error as NodeJS.ErrnoException).code === \"EEXIST\") fail(\"OUTPUT_EXISTS\", \"archive output already exists; pass --force to replace it\"); throw error; }\n linked = true; operations.unlink(temporary); created = false;\n }\n verifyPrivatePathAccess(target, \"file\"); operations.syncDirectory(directory); durablyPublished = true;\n if (backupCreated) {\n try {\n operations.unlink(backup);\n } catch {\n preserveBackup = true;\n fail(\"ARCHIVE_BACKUP_RETAINED\", \"archive was published but backup cleanup could not be proved; retry the same request ID\", {\n requestId: exportRequestId, file: target, backupFile: backup,\n backupState: \"retained\", published: true, auditStatus: \"started\",\n });\n }\n backupCreated = false;\n try { operations.syncDirectory(directory); }\n catch {\n fail(\"ARCHIVE_BACKUP_CLEANUP_AMBIGUOUS\", \"archive was published but backup deletion durability is unknown; retry the same request ID\", {\n requestId: exportRequestId, file: target, backupFile: backup,\n backupState: \"unknown\", published: true, auditStatus: \"started\",\n });\n }\n }\n try { await session.complete({ ...metadata, publishedAt: new Date().toISOString() }); }\n catch {\n let auditStatus: \"abandoned\" | \"unknown\" = \"unknown\";\n try { await session.abandon(\"audit_failed\"); auditStatus = \"abandoned\"; } catch {}\n const details = { requestId: exportRequestId, file: target, published: true, auditStatus };\n if (auditStatus === \"abandoned\") fail(\"ARCHIVE_AUDIT_ABANDONED\", \"archive was published but its completion audit was abandoned\", details);\n fail(\"ARCHIVE_AUDIT_AMBIGUOUS\", \"archive was published but its completion audit outcome is unknown\", details);\n }\n return metadata;\n } catch (error) {\n if (!durablyPublished) {\n if (force && replacementVisible) {\n if (backupCreated) {\n try {\n operations.rename(backup, target); backupCreated = false; replacementVisible = false;\n verifyPrivatePathAccess(target, \"file\"); operations.syncDirectory(directory);\n } catch { preserveBackup = true; throw ambiguous(\"archive replacement failed and restoration could not be proved; use owner reconciliation\"); }\n } else {\n try { operations.unlink(target); replacementVisible = false; operations.syncDirectory(directory); }\n catch { throw ambiguous(\"archive replacement failed and removal could not be proved; use owner reconciliation\"); }\n }\n } else if (backupCreated) {\n try { operations.unlink(backup); backupCreated = false; operations.syncDirectory(directory); }\n catch { preserveBackup = true; throw ambiguous(\"archive backup cleanup could not be proved; use owner reconciliation\"); }\n }\n if (linked && descriptor !== undefined) {\n try {\n const opened = fstatSync(descriptor); const named = lstatSync(target);\n if (opened.dev === named.dev && opened.ino === named.ino) {\n operations.unlink(target); linked = false; operations.syncDirectory(directory);\n }\n } catch { throw ambiguous(\"archive publication failed and output removal could not be proved; use owner reconciliation\"); }\n }\n try { await session.abandon(\"publication_failed\"); }\n catch {\n throw new ArchiveCommandError(\n \"ARCHIVE_AUDIT_AMBIGUOUS\",\n \"archive publication did not complete but its audit outcome is unknown\",\n { requestId: exportRequestId, file: target, published: false, auditStatus: \"unknown\" },\n );\n }\n }\n throw error;\n } finally {\n if (descriptor !== undefined) closeSync(descriptor);\n if (created) { try { operations.unlink(temporary); } catch {} }\n if (backupCreated && !preserveBackup && !replacementVisible) { try { operations.unlink(backup); operations.syncDirectory(directory); } catch {} }\n }\n}\n\nconst success = (operation: ArchiveOperation, value: Record<string, unknown>): Record<string, unknown> => ({ schemaVersion: 1, status: \"ok\", operation, ...value });\n\nfunction recoveryArtifactPaths(target: string, requestId: string): string[] {\n const directory = dirname(target);\n return [\n join(directory, `.${requestId}.agent-bridge-archive.tmp`),\n join(directory, `.${requestId}.agent-bridge-archive.backup`),\n ];\n}\n\nfunction existingRecoveryArtifacts(target: string, requestId: string): string[] {\n return recoveryArtifactPaths(target, requestId).filter((path) => existsSync(path));\n}\n\nfunction openVerifiedPrivateFile(path: string): number {\n verifyPrivatePathAccess(path, \"file\");\n const before = lstatSync(path);\n const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDONLY | noFollow);\n try {\n const opened = fstatSync(descriptor); const after = lstatSync(path);\n if (!opened.isFile() || before.isSymbolicLink() || after.isSymbolicLink()\n || opened.dev !== before.dev || opened.ino !== before.ino\n || opened.dev !== after.dev || opened.ino !== after.ino) {\n fail(\"INVALID_OUTPUT\", \"archive recovery path identity changed\");\n }\n return descriptor;\n } catch (error) { closeSync(descriptor); throw error; }\n}\n\nfunction removeRecoveryArtifacts(target: string, requestId: string): void {\n for (const path of existingRecoveryArtifacts(target, requestId)) {\n const descriptor = openVerifiedPrivateFile(path);\n try {\n const opened = fstatSync(descriptor); const named = lstatSync(path);\n if (opened.dev !== named.dev || opened.ino !== named.ino) fail(\"INVALID_OUTPUT\", \"archive recovery path identity changed\");\n unlinkSync(path);\n } finally { closeSync(descriptor); }\n syncDirectory(dirname(path));\n }\n}\n\nexport function verifyCompletedExport(\n path: string,\n requestId: string,\n expected: PortableArchiveMetadata & { publishedAt: string },\n): PortableArchiveMetadata {\n const target = resolve(path);\n const recoveryPaths = existingRecoveryArtifacts(target, requestId);\n if (!existsSync(target)) fail(\"ARCHIVE_REPLAY_FILE_MISSING\", \"completed export file is missing; use a new request ID\", { requestId, file: target, recoveryPaths });\n let archive: PortableArchiveFile | undefined;\n try {\n try { archive = new PortableArchiveFile(target); }\n catch { fail(\"ARCHIVE_REPLAY_FILE_MISMATCH\", \"completed export file is not a valid private archive\", { requestId, file: target, recoveryPaths }); }\n let actual: PortableArchiveMetadata;\n try { actual = archive.verify(); }\n catch { fail(\"ARCHIVE_REPLAY_FILE_MISMATCH\", \"completed export file is not a valid matching archive\", { requestId, file: target, recoveryPaths }); }\n if (actual.exportRequestId !== requestId || expected.exportRequestId !== requestId\n || actual.workspace !== expected.workspace || actual.digest !== expected.digest\n || actual.messageCount !== expected.messageCount || actual.receiptCount !== expected.receiptCount) {\n fail(\"ARCHIVE_REPLAY_FILE_MISMATCH\", \"completed export file does not match the recorded audit; use a new request ID\", { requestId, file: target, recoveryPaths });\n }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_REPLAY_DURABILITY_AMBIGUOUS\", \"completed export file durability could not be reproved\", { requestId, file: target, published: true, auditStatus: \"completed\", recoveryPaths }); }\n try { removeRecoveryArtifacts(target, requestId); }\n catch { fail(\"ARCHIVE_RECOVERY_ARTIFACT_RETAINED\", \"completed export recovery artifacts could not be removed\", { requestId, file: target, published: true, auditStatus: \"completed\", recoveryPaths: existingRecoveryArtifacts(target, requestId) }); }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_REPLAY_DURABILITY_AMBIGUOUS\", \"completed export file durability could not be reproved after cleanup\", { requestId, file: target, published: true, auditStatus: \"completed\", recoveryPaths: existingRecoveryArtifacts(target, requestId) }); }\n return actual;\n } finally { archive?.close(); }\n}\n\nexport async function reconcileActiveExport(\n path: string,\n requestId: string,\n workspace: string,\n session: PortableArchiveExportSession,\n): Promise<PortableArchiveMetadata & { publishedAt: string }> {\n const target = resolve(path);\n const details = { requestId, file: target, recoveryPaths: existingRecoveryArtifacts(target, requestId), published: \"unknown\", auditStatus: \"started\" };\n if (!existsSync(target)) fail(\"ARCHIVE_RECONCILIATION_FILE_MISSING\", \"active export file is missing; use a new request ID or owner reconciliation\", details);\n let archive: PortableArchiveFile | undefined;\n try {\n try { archive = new PortableArchiveFile(target); }\n catch { fail(\"ARCHIVE_RECONCILIATION_FILE_MISMATCH\", \"active export file is not a valid private archive\", details); }\n let metadata: PortableArchiveMetadata;\n try { metadata = archive.verify(); }\n catch { fail(\"ARCHIVE_RECONCILIATION_FILE_MISMATCH\", \"active export file is not a valid matching archive\", details); }\n if (metadata.exportRequestId !== requestId || metadata.workspace !== workspace) {\n fail(\"ARCHIVE_RECONCILIATION_FILE_MISMATCH\", \"active export file does not match the requested workspace; use a new request ID or owner reconciliation\", details);\n }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_RECONCILIATION_DURABILITY_AMBIGUOUS\", \"active export file durability could not be proved; retry the same request ID\", details); }\n try { removeRecoveryArtifacts(target, requestId); }\n catch {\n fail(\"ARCHIVE_RECOVERY_ARTIFACT_RETAINED\", \"active export recovery artifacts could not be removed; retry the same request ID\", {\n ...details, recoveryPaths: existingRecoveryArtifacts(target, requestId), published: true,\n });\n }\n try { archive.proveDurable(); }\n catch { fail(\"ARCHIVE_RECONCILIATION_DURABILITY_AMBIGUOUS\", \"active export durability after cleanup could not be proved; retry the same request ID\", { ...details, published: true }); }\n const publishedAt = new Date().toISOString();\n try { await session.reconcile({ ...metadata, publishedAt }); }\n catch {\n fail(\"ARCHIVE_RECONCILIATION_AMBIGUOUS\", \"active export reconciliation outcome is unknown; retry the same request ID\", { ...details, published: true, auditStatus: \"unknown\" });\n }\n return { ...metadata, publishedAt };\n } finally { archive?.close(); }\n}\n\nexport async function runArchiveCommand(argv: string[], env: NodeJS.ProcessEnv = process.env): Promise<Record<string, unknown>> {\n const { operation, options } = parseArchiveArgs(argv);\n try {\n if (operation === \"verify\") {\n const path = required(options, \"file\"); let archive: PortableArchiveFile | undefined;\n try { archive = new PortableArchiveFile(path); const metadata = archive.verify(); return success(operation, { file: resolve(path), exportRequestId: metadata.exportRequestId, workspace: metadata.workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount }); }\n finally { archive?.close(); }\n }\n const selected = provider(options);\n if (operation === \"export\") {\n const workspace = required(options, \"workspace\"); const path = required(options, \"output\");\n const requestId = archiveRequestId(options);\n const connection = createStore(selected, options, env); let session: PortableArchiveExportSession | undefined;\n try {\n const start = await connection.store.beginExport(requestId, workspace);\n if (start.status === \"completed\") {\n const metadata = verifyCompletedExport(path, requestId, start.metadata);\n return success(operation, { provider: selected, requestId, replayed: true, reconciled: false, file: resolve(path), workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount, publishedAt: start.metadata.publishedAt });\n }\n session = start.session;\n if (start.replayed) {\n const metadata = await reconcileActiveExport(path, requestId, workspace, session);\n return success(operation, { provider: selected, requestId, replayed: true, reconciled: true, file: resolve(path), workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount, publishedAt: metadata.publishedAt });\n }\n const metadata = await publishArchive(path, options.force === true, session, workspace, { requestId });\n return success(operation, { provider: selected, requestId, replayed: false, reconciled: false, file: resolve(path), workspace, digest: metadata.digest, messages: metadata.messageCount, receipts: metadata.receiptCount });\n } finally { await session?.close(); await connection.close(); }\n }\n const path = required(options, \"file\"); const archive = new PortableArchiveFile(path);\n try {\n const metadata = archive.verify(); const assertedWorkspace = stringOption(options, \"workspace\")?.trim();\n if (assertedWorkspace && assertedWorkspace !== metadata.workspace) fail(\"WORKSPACE_MISMATCH\", \"--workspace does not match the archive workspace\");\n const requestId = archiveRequestId(options);\n const connection = createStore(selected, options, env);\n try {\n const result = await connection.store.importWorkspace(requestId, metadata, archive, { apply: options.apply === true });\n return success(operation, { provider: selected, file: resolve(path), exportRequestId: metadata.exportRequestId, ...result });\n } finally { await connection.close(); }\n } finally { archive.close(); }\n } catch (error) {\n if (error instanceof ArchiveCommandError) throw error;\n if (error instanceof PrivatePathError) fail(\"INSECURE_PATH\", \"archive file or directory does not satisfy the private path policy\");\n if (error instanceof PortableArchiveError) fail(\"INVALID_ARCHIVE\", error.message);\n fail(\"ARCHIVE_OPERATION_FAILED\", \"archive operation failed\");\n }\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport {\n closeSync, constants, existsSync, fstatSync, fsyncSync, linkSync, lstatSync, mkdirSync, openSync, rmSync, unlinkSync,\n type Stats,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n NativeDrBundleError, NativeDrBundleReader, writeNativeDrBundle, type NativeDrBundleInput, type NativeDrBundleMetadata,\n} from \"./native-dr-bundle.js\";\nimport {\n backupPostgresNativeDr, PostgresNativeDrError, restorePostgresNativeDr, verifyPostgresNativeDrArtifacts,\n type PostgresNativeDrArtifactAnchor, type PostgresNativeDrArtifactAnchors,\n type PostgresNativeDrBundleInput, type PostgresNativeDrSchema, type RestorePostgresNativeDrResult,\n} from \"./postgres-native-dr.js\";\nimport {\n preparePrivateFileLocation, PrivatePathError, securePrivatePath, verifyPrivatePathAccess,\n} from \"./private-path.js\";\nimport {\n backupLocalSqlite, NativeDrCommandError, restoreLocalSqlite, validateNativeDrId, validateNativeDrTimeout,\n verifyNativeDrBundle,\n} from \"./sqlite-native-dr.js\";\n\ntype DrOperation = \"backup\" | \"verify\" | \"restore\";\ntype DrProvider = \"local\" | \"postgres\";\ntype DrOptions = Record<string, string | true>;\n\nconst POSTGRES_DUMP_ENTRY = \"postgres/database.dump\";\nconst POSTGRES_ROLES_ENTRY = \"postgres/roles.json\";\nconst OPTIONS: Record<DrOperation, ReadonlySet<string>> = {\n backup: new Set([\"provider\", \"source\", \"output\", \"backup-id\", \"timeout-ms\", \"tool-directory\"]),\n verify: new Set([\"provider\", \"bundle\", \"tool-directory\"]),\n restore: new Set([\"provider\", \"bundle\", \"target\", \"request-id\", \"timeout-ms\", \"tool-directory\", \"accept-source-sql-risk\"]),\n};\nconst FLAGS: Record<DrOperation, ReadonlySet<string>> = {\n backup: new Set(), verify: new Set(), restore: new Set([\"accept-source-sql-risk\"]),\n};\n\ninterface DrFileOperations {\n link(source: string, target: string): void;\n syncDirectory(path: string): boolean;\n syncFile(path: string): void;\n afterPublish?(target: string): void;\n}\n\nexport interface DrCommandDependencies {\n environment?: NodeJS.ProcessEnv;\n platform?: NodeJS.Platform;\n backupPostgres?: typeof backupPostgresNativeDr;\n verifyPostgres?: typeof verifyPostgresNativeDrArtifacts;\n restorePostgres?: typeof restorePostgresNativeDr;\n fileOperations?: Partial<DrFileOperations>;\n}\n\nconst fail = (code: string, message: string, details?: Record<string, unknown>): never => {\n throw new NativeDrCommandError(code, message, details);\n};\n\nfunction parse(argv: string[]): { operation: DrOperation; options: DrOptions } {\n const operation = argv[0];\n if (operation !== \"backup\" && operation !== \"verify\" && operation !== \"restore\") {\n fail(\"INVALID_COMMAND\", \"usage: agent-bridge dr <backup|verify|restore>\");\n }\n const selectedOperation = operation as DrOperation;\n const options: DrOptions = {};\n for (let index = 1; index < argv.length; index += 1) {\n const argument = argv[index]!;\n if (!argument.startsWith(\"--\") || argument === \"--\") {\n fail(\"INVALID_ARGUMENT\", \"DR commands do not accept positional arguments\");\n }\n const name = argument.slice(2);\n if (!name || name.includes(\"=\") || !OPTIONS[selectedOperation].has(name)) {\n fail(\"INVALID_OPTION\", `--${name} is not valid for dr ${selectedOperation}`);\n }\n if (options[name] !== undefined) fail(\"DUPLICATE_OPTION\", `--${name} may only be provided once`);\n if (FLAGS[selectedOperation].has(name)) { options[name] = true; continue; }\n const value = argv[index + 1];\n if (!value || value.startsWith(\"--\")) fail(\"MISSING_OPTION_VALUE\", `--${name} requires a value`);\n options[name] = value; index += 1;\n }\n return { operation: selectedOperation, options };\n}\n\nfunction optional(options: DrOptions, name: string): string | undefined {\n const value = options[name];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction required(options: DrOptions, name: string): string {\n const value = optional(options, name);\n if (!value) fail(\"MISSING_OPTION\", `--${name} is required`);\n return value!;\n}\n\nfunction timeout(options: DrOptions): number | undefined {\n const value = optional(options, \"timeout-ms\");\n return value === undefined ? undefined : validateNativeDrTimeout(Number(value));\n}\n\nfunction provider(options: DrOptions): DrProvider {\n const selected = required(options, \"provider\");\n if (selected !== \"local\" && selected !== \"postgres\") fail(\"INVALID_PROVIDER\", \"--provider must be local or postgres\");\n return selected as DrProvider;\n}\n\nfunction rejectProviderOption(options: DrOptions, name: string, selected: DrProvider, operation: DrOperation): void {\n if (options[name] !== undefined) fail(\"INVALID_OPTION\", `--${name} is not valid for ${selected} DR ${operation}`);\n}\n\nfunction syncFile(path: string): void {\n const before = lstatSync(path); const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDWR | noFollow);\n try {\n const opened = fstatSync(descriptor); const named = lstatSync(path);\n if (!opened.isFile() || before.isSymbolicLink() || named.isSymbolicLink()\n || !sameNode(before, opened) || !sameNode(opened, named)) {\n fail(\"INSECURE_PATH\", \"DR publication path identity changed before file synchronization\");\n }\n fsyncSync(descriptor);\n } finally { closeSync(descriptor); }\n}\n\nfunction syncDirectory(path: string, platform: NodeJS.Platform = process.platform): boolean {\n if (platform === \"win32\") return false;\n const descriptor = openSync(path, constants.O_RDONLY);\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n return true;\n}\n\nfunction fileOperations(dependencies: DrCommandDependencies): DrFileOperations {\n return {\n link: dependencies.fileOperations?.link ?? linkSync,\n syncDirectory: dependencies.fileOperations?.syncDirectory\n ?? ((path) => syncDirectory(path, dependencies.platform ?? process.platform)),\n syncFile: dependencies.fileOperations?.syncFile ?? syncFile,\n afterPublish: dependencies.fileOperations?.afterPublish,\n };\n}\n\nfunction sameNode(left: Stats, right: Stats): boolean { return left.dev === right.dev && left.ino === right.ino; }\n\nfunction createPrivateDirectory(path: string): Stats {\n mkdirSync(path, { mode: 0o700 });\n const before = lstatSync(path);\n securePrivatePath(path, \"directory\"); verifyPrivatePathAccess(path, \"directory\");\n const after = lstatSync(path);\n if (!before.isDirectory() || before.isSymbolicLink() || !sameNode(before, after)) {\n fail(\"INSECURE_PATH\", \"DR staging directory identity changed while securing it\");\n }\n return after;\n}\n\nfunction openPrivateFile(path: string): { descriptor: number; identity: Stats } {\n const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDWR | constants.O_CREAT | constants.O_EXCL | noFollow, 0o600);\n try {\n const before = fstatSync(descriptor);\n securePrivatePath(path, \"file\"); verifyPrivatePathAccess(path, \"file\");\n const after = lstatSync(path);\n if (!before.isFile() || after.isSymbolicLink() || !sameNode(before, after)) {\n fail(\"INSECURE_PATH\", \"DR staging file identity changed while securing it\");\n }\n return { descriptor, identity: after };\n } catch (error) { closeSync(descriptor); throw error; }\n}\n\nfunction artifactAnchor(descriptor: number, sha256: string): PostgresNativeDrArtifactAnchor {\n const stat = fstatSync(descriptor, { bigint: true });\n if (!stat.isFile()) fail(\"ARTIFACT_ANCHOR_INVALID\", \"PostgreSQL DR artifact anchor is not a regular file\");\n return {\n descriptor,\n device: stat.dev.toString(),\n inode: stat.ino.toString(),\n size: stat.size.toString(),\n ctimeNanoseconds: stat.ctimeNs.toString(),\n mtimeNanoseconds: stat.mtimeNs.toString(),\n sha256,\n };\n}\n\ninterface ExtractedPostgresBundle {\n metadata: NativeDrBundleMetadata;\n dumpPath: string;\n rolesPath: string;\n artifactAnchors: PostgresNativeDrArtifactAnchors;\n descriptors: Map<string, { descriptor: number; identity: Stats; path: string }>;\n}\n\nfunction extractPostgresBundle(bundle: string, stage: string): ExtractedPostgresBundle {\n const descriptors = new Map<string, { descriptor: number; identity: Stats; path: string }>();\n try {\n for (const [name, filename] of [\n [POSTGRES_DUMP_ENTRY, \"postgres-database.dump\"],\n [POSTGRES_ROLES_ENTRY, \"postgres-roles.json\"],\n ] as const) {\n const path = join(stage, filename);\n descriptors.set(name, { ...openPrivateFile(path), path });\n }\n const reader = new NativeDrBundleReader(bundle);\n let metadata: NativeDrBundleMetadata;\n try { metadata = reader.inspect((entry) => descriptors.get(entry.name)?.descriptor); }\n finally { reader.close(); }\n if (metadata.manifest.kind !== \"postgres\") {\n fail(\"PROVIDER_MISMATCH\", `DR bundle provider is ${metadata.manifest.kind}, not postgres`);\n }\n for (const value of descriptors.values()) {\n const opened = fstatSync(value.descriptor); const named = lstatSync(value.path);\n if (!opened.isFile() || named.isSymbolicLink() || !sameNode(opened, named)) {\n fail(\"INSECURE_PATH\", \"DR extraction path identity changed while reading the bundle\");\n }\n fsyncSync(value.descriptor);\n securePrivatePath(value.path, \"file\"); verifyPrivatePathAccess(value.path, \"file\");\n }\n const dump = descriptors.get(POSTGRES_DUMP_ENTRY)!;\n const roles = descriptors.get(POSTGRES_ROLES_ENTRY)!;\n const dumpEntry = metadata.manifest.entries.find((entry) => entry.name === POSTGRES_DUMP_ENTRY)!;\n const rolesEntry = metadata.manifest.entries.find((entry) => entry.name === POSTGRES_ROLES_ENTRY)!;\n return {\n metadata,\n dumpPath: dump.path,\n rolesPath: roles.path,\n artifactAnchors: {\n dump: artifactAnchor(dump.descriptor, dumpEntry.sha256),\n roles: artifactAnchor(roles.descriptor, rolesEntry.sha256),\n },\n descriptors,\n };\n } catch (error) {\n for (const value of descriptors.values()) {\n try { closeSync(value.descriptor); } catch { /* cleanup reports the primary failure */ }\n }\n throw error;\n }\n}\n\nfunction closeExtractedPostgresBundle(extracted: ExtractedPostgresBundle): void {\n for (const value of extracted.descriptors.values()) {\n try { closeSync(value.descriptor); } catch { /* cleanup handles any retained stage */ }\n }\n extracted.descriptors.clear();\n}\n\nfunction removeOwnedFile(path: string, identity: Stats | undefined): boolean {\n if (!existsSync(path)) return true;\n try {\n const current = lstatSync(path);\n if (!identity || !current.isFile() || current.isSymbolicLink() || !sameNode(current, identity)) return false;\n unlinkSync(path); return !existsSync(path);\n } catch { return false; }\n}\n\nfunction removeOwnedDirectory(path: string, identity: Stats | undefined): boolean {\n if (!existsSync(path)) return true;\n try {\n const current = lstatSync(path);\n if (!identity || !current.isDirectory() || current.isSymbolicLink() || !sameNode(current, identity)) return false;\n // Owner-private paths exclude other OS principals. Node has no portable\n // handle-relative recursive delete, so a hostile same-account process is\n // outside this cleanup-only race boundary. Execution inputs remain FD-bound.\n rmSync(path, { recursive: true }); return !existsSync(path);\n } catch { return false; }\n}\n\nfunction recoveryPaths(paths: readonly string[]): string[] { return paths.filter(existsSync); }\n\nfunction verifyProviderBundle(path: string, expected: DrProvider): NativeDrBundleMetadata {\n const expectedKind = expected === \"local\" ? \"sqlite\" : \"postgres\";\n const reader = new NativeDrBundleReader(path);\n try {\n const metadata = reader.inspect();\n if (metadata.manifest.kind !== expectedKind) {\n fail(\"PROVIDER_MISMATCH\", `DR bundle provider is ${metadata.manifest.kind}, not ${expected}`);\n }\n return expected === \"local\" ? verifyNativeDrBundle(path) : metadata;\n } finally { reader.close(); }\n}\n\nfunction commandErrorWithRecovery(\n error: unknown,\n identity: { backupId?: string; requestId?: string },\n paths: readonly string[],\n): NativeDrCommandError {\n const details = error instanceof NativeDrCommandError || error instanceof PostgresNativeDrError\n ? { ...error.details } as Record<string, unknown>\n : {};\n const nested = Array.isArray(details.recoveryPaths)\n ? details.recoveryPaths.filter((path): path is string => typeof path === \"string\")\n : [];\n delete details.recoveryPaths;\n const retained = recoveryPaths([...new Set([...nested, ...paths])]);\n if (error instanceof NativeDrCommandError) {\n return new NativeDrCommandError(error.code, error.message, {\n ...details, ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n if (error instanceof PostgresNativeDrError) {\n return new NativeDrCommandError(error.code, error.message, {\n ...details, ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n if (error instanceof PrivatePathError) {\n return new NativeDrCommandError(\"INSECURE_PATH\", \"DR path does not satisfy the private path policy\", {\n ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n if (error instanceof NativeDrBundleError) {\n return new NativeDrCommandError(\"INVALID_DR_BUNDLE\", \"DR bundle verification failed\", {\n ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n }\n return new NativeDrCommandError(\"DR_COMMAND_FAILED\", \"DR command failed\", {\n ...identity, ...(retained.length ? { recoveryPaths: retained } : {}),\n });\n}\n\nasync function backupPostgresBundle(\n outputPath: string,\n backupId: string,\n toolDirectory: string | undefined,\n dependencies: DrCommandDependencies,\n): Promise<{ metadata: NativeDrBundleMetadata; directoryDurability: \"confirmed\" | \"unavailable\" }> {\n const target = resolve(outputPath); preparePrivateFileLocation(target);\n const directory = dirname(target);\n const stage = join(directory, `.${backupId}.agent-bridge-dr.postgres.stage`);\n const bundleStage = join(directory, `.${backupId}.agent-bridge-dr.bundle.tmp`);\n const priorRecovery = recoveryPaths([bundleStage, stage]);\n if (priorRecovery.length) fail(\"DR_RECOVERY_REQUIRED\", \"a prior PostgreSQL DR backup with this ID requires recovery\", {\n backupId, output: target, outputExists: existsSync(target), published: existsSync(target) ? \"unknown\" : false,\n recoveryPaths: priorRecovery,\n });\n if (existsSync(target)) fail(\"OUTPUT_EXISTS\", \"DR output already exists\");\n let stageIdentity: Stats | undefined; let bundleIdentity: Stats | undefined; let descriptor: number | undefined;\n let published = false; let durable = false;\n let directoryDurability: \"confirmed\" | \"unavailable\" = \"confirmed\";\n const operations = fileOperations(dependencies);\n const platform = dependencies.platform ?? process.platform;\n try {\n stageIdentity = createPrivateDirectory(stage);\n operations.syncDirectory(directory);\n const input = await (dependencies.backupPostgres ?? backupPostgresNativeDr)({\n stagingDirectory: stage,\n backupId,\n environment: dependencies.environment ?? process.env,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n if (input.backupId !== backupId || input.kind !== \"postgres\" || input.entries.length !== 2\n || input.entries[0]?.name !== POSTGRES_DUMP_ENTRY || resolve(input.entries[0].path) !== join(stage, \"postgres-database.dump\")\n || input.entries[1]?.name !== POSTGRES_ROLES_ENTRY || resolve(input.entries[1].path) !== join(stage, \"postgres-roles.json\")) {\n fail(\"POSTGRES_STAGE_INVALID\", \"PostgreSQL DR adapter returned an unexpected staging contract\");\n }\n operations.syncDirectory(stage);\n const opened = openPrivateFile(bundleStage); descriptor = opened.descriptor; bundleIdentity = opened.identity;\n writeNativeDrBundle(descriptor, input as unknown as NativeDrBundleInput, bundleStage);\n closeSync(descriptor); descriptor = undefined;\n const verificationStage = join(stage, \"bundle-verification\");\n createPrivateDirectory(verificationStage);\n const extracted = extractPostgresBundle(bundleStage, verificationStage);\n try {\n await (dependencies.verifyPostgres ?? verifyPostgresNativeDrArtifacts)({\n dumpPath: extracted.dumpPath,\n rolesPath: extracted.rolesPath,\n schema: extracted.metadata.manifest.schema as unknown as PostgresNativeDrSchema,\n artifactAnchors: extracted.artifactAnchors,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n } finally { closeExtractedPostgresBundle(extracted); }\n const beforePublication = extracted.metadata;\n try { operations.link(bundleStage, target); published = true; }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") fail(\"OUTPUT_EXISTS\", \"DR output already exists\");\n throw error;\n }\n const publishedIdentity = lstatSync(target);\n if (!bundleIdentity || !publishedIdentity.isFile() || publishedIdentity.isSymbolicLink()\n || !sameNode(bundleIdentity, publishedIdentity)) {\n fail(\"DR_PUBLICATION_INVALID\", \"published DR output does not reference the verified staging file\", {\n backupId, output: target, published: true, durable: false, verified: false,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n try {\n operations.syncFile(target); operations.afterPublish?.(target);\n if (!operations.syncDirectory(directory)) {\n if (platform === \"win32\") directoryDurability = \"unavailable\";\n else {\n fail(\"DR_PUBLICATION_AMBIGUOUS\", \"DR output is visible but directory durability is unproved\", {\n backupId, output: target, published: true, durable: \"unknown\", platform,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n }\n durable = true;\n } catch {\n fail(\"DR_PUBLICATION_AMBIGUOUS\", \"DR output is visible but durability is unknown\", {\n backupId, output: target, published: true, durable: \"unknown\", recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n let publishedMetadata: NativeDrBundleMetadata | undefined;\n try { publishedMetadata = verifyProviderBundle(target, \"postgres\"); }\n catch {\n fail(\"DR_PUBLICATION_INVALID\", \"published DR output could not be verified\", {\n backupId, output: target, published: true, durable: true, verified: false,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n if (!publishedMetadata) throw new NativeDrCommandError(\"DR_PUBLICATION_INVALID\", \"published DR output could not be verified\");\n if (publishedMetadata.bundleSha256 !== beforePublication.bundleSha256) {\n fail(\"DR_PUBLICATION_INVALID\", \"published DR output does not match its verified staging bundle\", {\n backupId, output: target, published: true, durable: true, verified: false,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n const bundleRemoved = removeOwnedFile(bundleStage, bundleIdentity);\n const stageRemoved = removeOwnedDirectory(stage, stageIdentity);\n if (!bundleRemoved || !stageRemoved) {\n fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"DR output is valid but a recovery artifact remains\", {\n backupId, output: target, published: true, durable: true, verified: true,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n try {\n if (!operations.syncDirectory(directory) && platform !== \"win32\") {\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR output is valid but staging cleanup durability is unproved\", {\n backupId, output: target, published: true, durable: true, verified: true,\n cleanupDurability: \"unproved\", platform,\n });\n }\n }\n catch (error) {\n if (error instanceof NativeDrCommandError) throw error;\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR output is valid but staging cleanup durability is unknown\", {\n backupId, output: target, published: true, durable: true, verified: true,\n });\n }\n return { metadata: publishedMetadata, directoryDurability };\n } catch (error) {\n if (descriptor !== undefined) { closeSync(descriptor); descriptor = undefined; }\n if (!published) {\n removeOwnedFile(bundleStage, bundleIdentity); removeOwnedDirectory(stage, stageIdentity);\n try {\n if (!operations.syncDirectory(directory)) {\n if (platform === \"win32\") {\n const primary = commandErrorWithRecovery(error, { backupId }, [bundleStage, stage]);\n throw new NativeDrCommandError(primary.code, primary.message, {\n ...primary.details, cleanupDirectoryDurability: \"unavailable\", platform,\n });\n }\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR backup failure cleanup durability is unproved\", {\n backupId, cleanupDurability: \"unproved\", platform,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n } catch (cleanupError) {\n if (cleanupError instanceof NativeDrCommandError) throw cleanupError;\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"DR backup failure cleanup durability is unknown\", {\n backupId, cleanupDurability: \"unknown\", platform,\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n }\n throw commandErrorWithRecovery(error, { backupId }, [bundleStage, stage]);\n }\n if (error instanceof NativeDrCommandError) throw error;\n throw new NativeDrCommandError(\"DR_PUBLICATION_AMBIGUOUS\", \"DR publication outcome is incomplete\", {\n backupId, output: target, published: true, durable: durable || \"unknown\",\n recoveryPaths: recoveryPaths([bundleStage, stage]),\n });\n } finally { if (descriptor !== undefined) closeSync(descriptor); }\n}\n\nasync function restorePostgresBundle(\n bundlePath: string,\n requestId: string,\n toolDirectory: string | undefined,\n dependencies: DrCommandDependencies,\n): Promise<{\n metadata: NativeDrBundleMetadata;\n result: RestorePostgresNativeDrResult;\n cleanupDirectoryDurability: \"confirmed\" | \"unavailable\";\n}> {\n const bundle = resolve(bundlePath); const directory = dirname(bundle);\n const stage = join(directory, `.${requestId}.agent-bridge-dr.postgres-restore.stage`);\n if (existsSync(stage)) fail(\"DR_RECOVERY_REQUIRED\", \"a prior PostgreSQL DR restore with this ID requires recovery\", {\n requestId, bundle, recoveryPaths: [stage],\n });\n let stageIdentity: Stats | undefined;\n let targetRestored = false;\n const platform = dependencies.platform ?? process.platform;\n const operations = fileOperations(dependencies);\n let extracted: ExtractedPostgresBundle | undefined;\n try {\n stageIdentity = createPrivateDirectory(stage);\n operations.syncDirectory(directory);\n extracted = extractPostgresBundle(bundle, stage);\n operations.syncDirectory(stage);\n const result = await (dependencies.restorePostgres ?? restorePostgresNativeDr)({\n dumpPath: extracted.dumpPath,\n rolesPath: extracted.rolesPath,\n schema: extracted.metadata.manifest.schema as unknown as PostgresNativeDrSchema,\n artifactAnchors: extracted.artifactAnchors,\n acceptSourceSqlRisk: true,\n environment: dependencies.environment ?? process.env,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n targetRestored = true;\n const metadata = extracted.metadata;\n closeExtractedPostgresBundle(extracted); extracted = undefined;\n if (!removeOwnedDirectory(stage, stageIdentity)) {\n fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"PostgreSQL restore completed but a recovery artifact remains\", {\n requestId, recoveryPaths: recoveryPaths([stage]),\n });\n }\n try {\n if (!operations.syncDirectory(directory) && platform !== \"win32\") {\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore completed but cleanup durability is unproved\", {\n requestId, targetRestored: true, cleanupDurability: \"unproved\", platform,\n });\n }\n }\n catch (error) {\n if (error instanceof NativeDrCommandError) throw error;\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore completed but cleanup durability is unknown\", {\n requestId, targetRestored: true, cleanupDurability: \"unknown\", platform,\n });\n }\n return { metadata, result, cleanupDirectoryDurability: platform === \"win32\" ? \"unavailable\" : \"confirmed\" };\n } catch (error) {\n if (extracted) { closeExtractedPostgresBundle(extracted); extracted = undefined; }\n const targetMutated = error instanceof PostgresNativeDrError\n && (error.details.targetMutated === true || error.details.restoreCompleted === true);\n if (targetRestored || targetMutated) throw commandErrorWithRecovery(error, { requestId }, [stage]);\n removeOwnedDirectory(stage, stageIdentity);\n try {\n if (!operations.syncDirectory(directory)) {\n if (platform === \"win32\") {\n const primary = commandErrorWithRecovery(error, { requestId }, [stage]);\n throw new NativeDrCommandError(primary.code, primary.message, {\n ...primary.details, cleanupDirectoryDurability: \"unavailable\", platform,\n });\n }\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore failure cleanup durability is unproved\", {\n requestId, cleanupDurability: \"unproved\", platform,\n recoveryPaths: recoveryPaths([stage]),\n });\n }\n } catch (cleanupError) {\n if (cleanupError instanceof NativeDrCommandError) throw cleanupError;\n throw new NativeDrCommandError(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL restore failure cleanup durability is unknown\", {\n requestId, cleanupDurability: \"unknown\", platform,\n recoveryPaths: recoveryPaths([stage]),\n });\n }\n throw commandErrorWithRecovery(error, { requestId }, [stage]);\n }\n}\n\nasync function verifyPostgresBundle(\n bundlePath: string,\n toolDirectory: string | undefined,\n dependencies: DrCommandDependencies,\n): Promise<{ metadata: NativeDrBundleMetadata; cleanupDirectoryDurability: \"confirmed\" | \"unavailable\" }> {\n const bundle = resolve(bundlePath); const directory = dirname(bundle);\n const bundlePathId = createHash(\"sha256\").update(bundle).digest(\"hex\").slice(0, 32);\n const stage = join(directory, `.${bundlePathId}.agent-bridge-dr.postgres-verify.stage`);\n if (existsSync(stage)) fail(\"DR_RECOVERY_REQUIRED\", \"a prior PostgreSQL DR verification requires recovery\", {\n bundle, recoveryPaths: [stage],\n });\n const platform = dependencies.platform ?? process.platform;\n const operations = fileOperations(dependencies);\n let stageIdentity: Stats | undefined; let extracted: ExtractedPostgresBundle | undefined;\n let verificationCompleted = false;\n try {\n stageIdentity = createPrivateDirectory(stage);\n extracted = extractPostgresBundle(bundle, stage);\n await (dependencies.verifyPostgres ?? verifyPostgresNativeDrArtifacts)({\n dumpPath: extracted.dumpPath,\n rolesPath: extracted.rolesPath,\n schema: extracted.metadata.manifest.schema as unknown as PostgresNativeDrSchema,\n artifactAnchors: extracted.artifactAnchors,\n ...(toolDirectory ? { toolDirectory } : {}),\n });\n verificationCompleted = true;\n const metadata = extracted.metadata;\n closeExtractedPostgresBundle(extracted); extracted = undefined;\n if (!removeOwnedDirectory(stage, stageIdentity)) {\n fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"PostgreSQL verification completed but a recovery artifact remains\", {\n backupId: metadata.manifest.backupId, recoveryPaths: recoveryPaths([stage]),\n });\n }\n const durable = operations.syncDirectory(directory);\n if (!durable && platform !== \"win32\") {\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"PostgreSQL verification cleanup durability is unproved\", {\n backupId: metadata.manifest.backupId, cleanupDurability: \"unproved\", platform,\n });\n }\n return { metadata, cleanupDirectoryDurability: durable ? \"confirmed\" : \"unavailable\" };\n } catch (error) {\n if (extracted) closeExtractedPostgresBundle(extracted);\n if (verificationCompleted) throw commandErrorWithRecovery(error, {}, [stage]);\n removeOwnedDirectory(stage, stageIdentity);\n try { operations.syncDirectory(directory); } catch { /* primary error remains authoritative */ }\n throw commandErrorWithRecovery(error, {}, [stage]);\n }\n}\n\nconst success = (operation: DrOperation, fields: Record<string, unknown>): Record<string, unknown> => ({\n schemaVersion: 1, status: \"ok\", operation, ...fields,\n});\n\nexport async function runDrCommand(argv: string[], dependencies: DrCommandDependencies = {}): Promise<Record<string, unknown>> {\n const { operation, options } = parse(argv);\n try {\n const selected = provider(options);\n if (selected === \"local\") {\n rejectProviderOption(options, \"tool-directory\", selected, operation);\n rejectProviderOption(options, \"accept-source-sql-risk\", selected, operation);\n if (operation === \"backup\") {\n const source = required(options, \"source\"); const output = required(options, \"output\");\n const backupId = optional(options, \"backup-id\") ? validateNativeDrId(required(options, \"backup-id\")) : randomUUID();\n const metadata = await backupLocalSqlite(source, output, backupId, { timeoutMs: timeout(options) });\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n output: resolve(output), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n });\n }\n const bundle = required(options, \"bundle\");\n if (operation === \"verify\") {\n const metadata = verifyProviderBundle(bundle, selected);\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n bundle: resolve(bundle), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n });\n }\n const target = required(options, \"target\");\n const requestId = optional(options, \"request-id\") ? validateNativeDrId(required(options, \"request-id\")) : randomUUID();\n const metadata = await restoreLocalSqlite(bundle, target, requestId, { timeoutMs: timeout(options) });\n return success(operation, {\n provider: selected, requestId: metadata.requestId, backupId: metadata.manifest.backupId,\n target: resolve(target), bundleSha256: metadata.bundleSha256,\n });\n }\n\n rejectProviderOption(options, \"source\", selected, operation);\n rejectProviderOption(options, \"target\", selected, operation);\n rejectProviderOption(options, \"timeout-ms\", selected, operation);\n const toolDirectory = optional(options, \"tool-directory\");\n if (operation === \"backup\") {\n const output = required(options, \"output\");\n const backupId = validateNativeDrId(required(options, \"backup-id\"));\n const { metadata, directoryDurability } = await backupPostgresBundle(output, backupId, toolDirectory, dependencies);\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n output: resolve(output), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n directoryDurability, ...(directoryDurability === \"unavailable\" ? { platform: \"win32\" } : {}),\n });\n }\n const bundle = required(options, \"bundle\");\n if (operation === \"verify\") {\n const { metadata, cleanupDirectoryDurability } = await verifyPostgresBundle(bundle, toolDirectory, dependencies);\n return success(operation, {\n provider: selected, backupId: metadata.manifest.backupId, createdAt: metadata.manifest.createdAt,\n bundle: resolve(bundle), bundleBytes: metadata.bundleBytes, bundleSha256: metadata.bundleSha256,\n cleanupDirectoryDurability,\n ...(cleanupDirectoryDurability === \"unavailable\" ? { platform: \"win32\" } : {}),\n });\n }\n if (options[\"accept-source-sql-risk\"] !== true) {\n fail(\"SOURCE_SQL_RISK_NOT_ACCEPTED\", \"PostgreSQL native restore requires --accept-source-sql-risk\");\n }\n const requestId = validateNativeDrId(required(options, \"request-id\"));\n const { metadata, result, cleanupDirectoryDurability } = await restorePostgresBundle(bundle, requestId, toolDirectory, dependencies);\n return success(operation, {\n provider: selected, requestId, backupId: metadata.manifest.backupId, bundleSha256: metadata.bundleSha256,\n databaseName: result.databaseName, normalizedClaimedDeliveries: result.normalizedClaimedDeliveries,\n tableCounts: result.tableCounts, readiness: result.readiness, cleanupDirectoryDurability,\n ...(cleanupDirectoryDurability === \"unavailable\" ? { platform: \"win32\" } : {}),\n });\n } catch (error) {\n if (error instanceof NativeDrCommandError) throw error;\n if (error instanceof PostgresNativeDrError) throw new NativeDrCommandError(error.code, error.message, error.details);\n if (error instanceof PrivatePathError) fail(\"INSECURE_PATH\", \"DR path does not satisfy the private path policy\");\n if (error instanceof NativeDrBundleError) fail(\"INVALID_DR_BUNDLE\", \"DR bundle verification failed\");\n fail(\"DR_COMMAND_FAILED\", \"DR command failed\");\n }\n throw new NativeDrCommandError(\"DR_COMMAND_FAILED\", \"DR command failed\");\n}\n"],"mappings":"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","names":["existsSync","mkdirSync","readFileSync","renameSync","rmSync","writeFileSync","createHash","basename","dirname","join","homedir","fileURLToPath","pg","closeSync","constants","existsSync","fsyncSync","mkdirSync","openSync","readFileSync","renameSync","rmSync","writeFileSync","createHash","randomUUID","homedir","dirname","join","resolve","instant","enrollment","home","requestId","lock","existsSync","constants","resolve","join","dirname","home","homedir","createHash","runtime","mkdirSync","randomUUID","openSync","writeFileSync","fsyncSync","closeSync","renameSync","descriptor","identity","provider","readFileSync","enrollment","lock","output","rmSync","accessSync","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","renameSync","statSync","writeFileSync","createHash","randomUUID","homedir","dirname","isAbsolute","join","parse","resolve","sep","spawnSync","spawnSync","safeComponent","createHash","runtime","join","homedir","desktopConfigPath","home","resolve","identity","isAbsolute","existsSync","statSync","accessSync","constants","locator","dirname","output","parse","sep","lstatSync","openSync","fstatSync","readFileSync","closeSync","mkdirSync","randomUUID","writeFileSync","fsyncSync","renameSync","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","renameSync","rmSync","writeFileSync","createHash","hostname","dirname","join","resolve","spawnSync","isDeepStrictEqual","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","realpathSync","renameSync","rmSync","writeFileSync","createHash","randomUUID","homedir","hostname","dirname","isAbsolute","join","parse","relative","resolve","sep","lock","syncDirectory","openSync","fsyncSync","closeSync","renameSync","rmSync","isAbsolute","parse","sep","join","lstatSync","sameDirectory","identity","prepareDirectory","mkdirSync","resolve","realpathSync","homedir","relative","timestamp","digest","runtime","createHash","validateRequest","value","migrationOperationId","stageContract","dirname","randomUUID","writeFileSync","temporaryIdentity","fstatSync","existsSync","constants","readFileSync","hostname","lock","hostname","summary","dirname","identity","openSync","constants","fstatSync","readFileSync","sameDirectory","closeSync","runtime","digest","createHash","existsSync","join","writeFileSync","randomUUID","fsyncSync","syncDirectory","rmSync","lstatSync","artifact","now","preflight","artifacts","existsSync","createHash","canonical","isDeepStrictEqual","runtime","dirname","lstatSync","openSync","constants","fstatSync","fsyncSync","closeSync","locator","existsSync","readFileSync","identity","rmSync","mkdirSync","join","writeFileSync","renameSync","servers","exactRegistration","resolve","spawnSync","hostname","createHash","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","renameSync","rmSync","writeFileSync","dirname","isAbsolute","join","relative","resolve","UUID","fail","text","uuid","canonical","object","digest","createHash","enrollment","lstatSync","openSync","constants","fstatSync","readFileSync","closeSync","output","isAbsolute","resolve","existsSync","join","dirname","relative","mkdirSync","randomUUID","writeFileSync","fsyncSync","renameSync","rmSync","runtime","projection","lock","createHash","randomUUID","closeSync","constants","existsSync","fstatSync","lstatSync","openSync","readFileSync","readdirSync","dirname","isAbsolute","resolve","spawnSync","UUID","BACKEND_KEYS","fail","canonical","digest","createHash","uuid","text","readPrivateText","lstatSync","openSync","constants","fstatSync","readFileSync","closeSync","isAbsolute","resolve","fail","readPrivateText","digest","resolve","canonical","metadataProof","registrationProof","existsSync","lstatSync","dirname","readdirSync","UUID","fail","resolve","report","metadataProof","registrationProof","migrationOperationId","uuid","digest","runtime","spawnSync","randomUUID","canonical","lock","randomBytes","randomUUID","randomUUID","randomBytes","runtime","enrollment","lock","cursor","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","linkSync","lstatSync","openSync","renameSync","unlinkSync","homedir","dirname","isAbsolute","join","resolve","pg","fail","stringOption","randomUUID","required","homedir","join","isAbsolute","resolve","pg","syncDirectory","openSync","fsyncSync","closeSync","dirname","linkSync","renameSync","unlinkSync","existsSync","lstatSync","constants","fstatSync","requestId","recoveryPaths","path","archive","metadata","createHash","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","linkSync","lstatSync","mkdirSync","openSync","rmSync","unlinkSync","dirname","join","resolve","fail","parse","required","provider","lstatSync","constants","openSync","fstatSync","fsyncSync","closeSync","syncDirectory","linkSync","mkdirSync","join","identity","existsSync","unlinkSync","rmSync","resolve","dirname","requestId","createHash","success","output","randomUUID","metadata","bundle","cleanupDirectoryDurability","BOOLEAN_OPTIONS","parse","relative","readFileSync","dirname","existsSync","mkdirSync","basename","writeFileSync","renameSync","rmSync","createHash","fileURLToPath","home","homedir","join","provider","runtime","pg","remoteError","resolve"]}
|