@creatornader/agent-bridge 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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/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 { 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\",\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\",\n]);\nconst BOOLEAN_OPTIONS = new Set([\"apply\", \"dead\", \"force\", \"invalidate-immediately\", \"json\", \"latest\", \"recover-lock\"]);\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 help(): void { 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`); }\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[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 ([\"help\", \"-h\", \"--help\"].includes(command)) { 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 if (positionals.length !== 2 || positionals[0] !== \"install\" || !positionals[1]) {\n throw new Error(\"usage: agent-bridge clients install <runtime> --identity <name>\");\n }\n rejectOptionsOutside(options, new Set([\n \"identity\", \"command\", \"scope\", \"instance\", \"token\", \"enrollment-file\", \"recover-lock\",\n ]), \"clients install\");\n const runtime = positionals[1] as InstallableRuntime | undefined;\n if (runtime && ![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) {\n throw new Error(`unsupported install 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 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 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), 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\ninterface BackendBinding {\n credentialId: string;\n principal: string;\n instance: string;\n}\n\ninterface 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\nfunction desktopLaunchContract(\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 writeBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: { token?: string; env: NodeJS.ProcessEnv; binding?: BackendBinding },\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 configuredProvider = 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({\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 = 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\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 exactEnvironment = server?.env?.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && server?.env?.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && server?.env?.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 ? desktopLaunchContract(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?: BackendBinding;\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 ? desktopLaunchContract(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 { 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","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","provider","readFileSync","enrollment","lock","output","rmSync","randomUUID","randomUUID","runtime","enrollment","lock","cursor","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","openSync","renameSync","homedir","dirname","isAbsolute","join","resolve","pg","stringOption","randomUUID","required","homedir","join","isAbsolute","resolve","pg","syncDirectory","openSync","fsyncSync","closeSync","dirname","renameSync","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","existsSync","unlinkSync","rmSync","resolve","dirname","requestId","createHash","success","output","randomUUID","metadata","bundle","cleanupDirectoryDurability","BOOLEAN_OPTIONS","parse","relative","readFileSync","dirname","existsSync","mkdirSync","writeFileSync","renameSync","rmSync","createHash","home","homedir","join","provider","runtime","pg","fileURLToPath","remoteError","resolve"]}
1
+ {"version":3,"sources":["../src/cli.ts","../src/legacy-project-reconciliation.ts","../src/client-installer.ts","../src/enrollment-file.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 { 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\",\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\",\n]);\nconst BOOLEAN_OPTIONS = new Set([\"apply\", \"dead\", \"force\", \"invalidate-immediately\", \"json\", \"latest\", \"recover-lock\"]);\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 { 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\\nOptions:\\n -V, --version Print the installed package version\\n -h, --help Show this help\\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[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 ([\"help\", \"-h\", \"--help\"].includes(command)) { 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 if (positionals.length !== 2 || positionals[0] !== \"install\" || !positionals[1]) {\n throw new Error(\"usage: agent-bridge clients install <runtime> --identity <name>\");\n }\n rejectOptionsOutside(options, new Set([\n \"identity\", \"command\", \"scope\", \"instance\", \"token\", \"enrollment-file\", \"recover-lock\",\n ]), \"clients install\");\n const runtime = positionals[1] as InstallableRuntime | undefined;\n if (runtime && ![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) {\n throw new Error(`unsupported install 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 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 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), 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\ninterface BackendBinding {\n credentialId: string;\n principal: string;\n instance: string;\n}\n\ninterface 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\nfunction desktopLaunchContract(\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 writeBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: { token?: string; env: NodeJS.ProcessEnv; binding?: BackendBinding },\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 configuredProvider = 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({\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 = 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\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 exactEnvironment = server?.env?.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && server?.env?.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && server?.env?.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 ? desktopLaunchContract(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?: BackendBinding;\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 ? desktopLaunchContract(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 { 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","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","provider","readFileSync","enrollment","lock","output","rmSync","randomUUID","randomUUID","runtime","enrollment","lock","cursor","randomUUID","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","openSync","renameSync","homedir","dirname","isAbsolute","join","resolve","pg","stringOption","randomUUID","required","homedir","join","isAbsolute","resolve","pg","syncDirectory","openSync","fsyncSync","closeSync","dirname","renameSync","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","existsSync","unlinkSync","rmSync","resolve","dirname","requestId","createHash","success","output","randomUUID","metadata","bundle","cleanupDirectoryDurability","BOOLEAN_OPTIONS","parse","relative","readFileSync","dirname","existsSync","mkdirSync","writeFileSync","renameSync","rmSync","createHash","fileURLToPath","home","homedir","join","provider","runtime","pg","remoteError","resolve"]}