@creatornader/agent-bridge 0.7.0 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +40 -6
- package/ROADMAP.md +3 -0
- package/SKILL.md +6 -0
- package/dist/bridge.js +1 -1
- package/dist/{chunk-J6GHXVHC.js → chunk-7EQXQVPD.js} +5 -7
- package/dist/{chunk-J6GHXVHC.js.map → chunk-7EQXQVPD.js.map} +1 -1
- package/dist/{chunk-FDDLNAOY.js → chunk-CQZHYEXW.js} +2 -2
- package/dist/chunk-JKKIGIO5.js +2044 -0
- package/dist/chunk-JKKIGIO5.js.map +1 -0
- package/dist/{chunk-SHJGICQ5.js → chunk-KT2NNGDR.js} +2 -2
- package/dist/{chunk-SHJGICQ5.js.map → chunk-KT2NNGDR.js.map} +1 -1
- package/dist/{chunk-JEOOF3E4.js → chunk-W2TBIICO.js} +2 -2
- package/dist/cli.js +749 -2728
- package/dist/cli.js.map +1 -1
- package/dist/client-runtime.js +2 -2
- package/dist/dr.js +1 -1
- package/dist/index.js +3 -3
- package/dist/loopback-host.d.ts +32 -0
- package/dist/loopback-host.js +413 -0
- package/dist/loopback-host.js.map +1 -0
- package/dist/server.js +3 -3
- package/dist/sqlite.js +1 -1
- package/dist/stdio-http-proxy.d.ts +10 -0
- package/dist/stdio-http-proxy.js +70 -0
- package/dist/stdio-http-proxy.js.map +1 -0
- package/docs/architecture-v2.md +11 -0
- package/docs/deployment.md +12 -4
- package/docs/troubleshooting.md +24 -2
- package/llms.txt +3 -0
- package/package.json +3 -1
- /package/dist/{chunk-FDDLNAOY.js.map → chunk-CQZHYEXW.js.map} +0 -0
- /package/dist/{chunk-JEOOF3E4.js.map → chunk-W2TBIICO.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client-installer.ts","../src/enrollment-file.ts","../src/client-lifecycle.ts"],"sourcesContent":["import {\n accessSync, closeSync, constants, existsSync, fsyncSync, mkdirSync, openSync, readFileSync,\n renameSync, rmSync, statSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { delimiter, dirname, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\nimport { readClientConfigFile, resolveClientConfig } from \"./client-config.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\nimport {\n acquireEnrollmentLock,\n deleteEnrollmentFile,\n readEnrollment,\n recoverEnrollmentLock,\n releaseEnrollmentLock,\n transitionEnrollment,\n type EnrollmentLock,\n type EnrollmentFile,\n} from \"./enrollment-file.js\";\n\nexport type InstallableRuntime = \"codex\" | \"claude-code\" | \"claude-desktop\";\n\nexport interface ClientInstallResult {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n method: \"native-cli\" | \"json-config\";\n configPath?: string;\n backendConfigPath: string;\n restartRequired: boolean;\n installed?: true;\n enrollmentDeleted?: boolean;\n enrollmentFile?: string;\n enrollmentStatus?: \"consumed\" | \"consumed-file-retained\" | \"consumed-file-missing\"\n | \"consumed-deletion-durability-unknown\";\n lockReleaseStatus?: \"released\" | \"retained\" | \"durability-unknown\";\n}\n\ntype Executor = (\n command: string,\n args: string[],\n) => SpawnSyncReturns<string>;\n\nexport interface ClientBackendBinding {\n credentialId: string;\n principal: string;\n instance: string;\n}\n\nexport interface DesktopLaunchContract {\n command: string;\n args: string[];\n}\n\nfunction assertExecutable(path: string): string {\n if (!existsSync(path)) {\n throw new Error(`Claude Desktop MCP executable does not exist: ${path}`);\n }\n if (!statSync(path).isFile()) {\n throw new Error(`Claude Desktop MCP executable is not a file: ${path}`);\n }\n try {\n accessSync(path, process.platform === \"win32\" ? constants.F_OK : constants.X_OK);\n } catch {\n throw new Error(`Claude Desktop MCP executable is not executable: ${path}`);\n }\n return path;\n}\n\nfunction resolveExecutable(command: string, env: NodeJS.ProcessEnv): string {\n if (isAbsolute(command) || command.includes(\"/\") || command.includes(\"\\\\\")) {\n return assertExecutable(resolve(command));\n }\n const searchPath = env.PATH ?? process.env.PATH ?? \"\";\n const extensions = process.platform === \"win32\" && !extname(command)\n ? (env.PATHEXT ?? process.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\")\n .split(\";\")\n .filter(Boolean)\n : [\"\"];\n for (const directory of searchPath.split(delimiter).filter(Boolean)) {\n for (const extension of extensions) {\n const candidate = join(directory, command + extension);\n if (!existsSync(candidate)) continue;\n return assertExecutable(resolve(candidate));\n }\n }\n throw new Error(`Claude Desktop MCP executable was not found on PATH: ${command}`);\n}\n\nfunction defaultServerEntry(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(moduleDirectory, \"index.js\"),\n join(moduleDirectory, \"..\", \"dist\", \"index.js\"),\n ];\n const entry = candidates.find((candidate) => existsSync(candidate) && statSync(candidate).isFile());\n if (!entry) {\n throw new Error(`Claude Desktop MCP server entry does not exist: ${candidates[0]}`);\n }\n return resolve(entry);\n}\n\nexport function resolveDesktopLaunchContract(\n requestedCommand: string | undefined,\n env: NodeJS.ProcessEnv,\n): DesktopLaunchContract {\n const command = requestedCommand?.trim();\n if (command) return { command: resolveExecutable(command, env), args: [] };\n return {\n command: assertExecutable(resolve(process.execPath)),\n args: [defaultServerEntry()],\n };\n}\n\nfunction desktopConfigPath(env: NodeJS.ProcessEnv): string {\n if (process.platform === \"win32\") {\n const appData = env.APPDATA;\n if (!appData) throw new Error(\"APPDATA is required for Claude Desktop installation\");\n return join(appData, \"Claude\", \"claude_desktop_config.json\");\n }\n const home = env.HOME ?? homedir();\n return process.platform === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")\n : join(home, \".config\", \"Claude\", \"claude_desktop_config.json\");\n}\n\nfunction safeComponent(value: string): string {\n const readable = value.replace(/[^A-Za-z0-9._-]+/g, \"_\").slice(0, 48) || \"client\";\n const suffix = createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n return `${readable}-${suffix}`;\n}\n\nfunction clientBackendConfigPath(\n runtime: InstallableRuntime,\n instance: string,\n env: NodeJS.ProcessEnv,\n): string {\n const home = env.HOME ?? homedir();\n return join(\n home,\n \".agent-bridge\",\n \"clients\",\n `${runtime}-${safeComponent(instance)}.config`,\n );\n}\n\nfunction replacePrivateFile(path: string, content: string | Buffer): void {\n const directory = dirname(path);\n const privateRoot = dirname(directory);\n mkdirSync(privateRoot, { recursive: true, mode: 0o700 });\n securePrivatePath(privateRoot, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n if (existsSync(path)) verifyPrivatePathAccess(path, \"file\");\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, content);\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n securePrivatePath(temporary, \"file\");\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const descriptor = openSync(directory, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n }\n}\n\nfunction writeClientBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: {\n token?: string;\n env: NodeJS.ProcessEnv;\n binding?: ClientBackendBinding;\n destinationPath?: string;\n gatewayUrl?: string;\n workspace?: string;\n edgeDatabasePath?: string;\n },\n): string {\n const env = options.env;\n const home = env.HOME ?? homedir();\n const sharedPath = env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\");\n const shared = readClientConfigFile(sharedPath);\n const stagedGateway = options.gatewayUrl !== undefined || options.workspace !== undefined\n || options.edgeDatabasePath !== undefined;\n if (stagedGateway && (!options.gatewayUrl || !options.workspace || !options.edgeDatabasePath)) {\n throw new Error(\"staged gateway backend requires URL, workspace, and edge database path\");\n }\n const configuredProvider = stagedGateway\n ? \"gateway\"\n : env.AGENT_BRIDGE_PROVIDER?.trim() || shared.AGENT_BRIDGE_PROVIDER?.trim();\n const inferredGateway = !configuredProvider && Boolean(\n env.AGENT_BRIDGE_TOKEN?.trim() || shared.AGENT_BRIDGE_TOKEN?.trim(),\n );\n const provider = configuredProvider ?? (inferredGateway ? \"gateway\" : undefined);\n const clientToken = options.token?.trim() || env.AGENT_BRIDGE_CLIENT_TOKEN?.trim();\n if (provider === \"gateway\" && !clientToken) {\n throw new Error(\n \"gateway client installation requires --token or AGENT_BRIDGE_CLIENT_TOKEN\",\n );\n }\n const resolved = resolveClientConfig(stagedGateway\n ? {\n ...env,\n AGENT_BRIDGE_CONFIG: undefined,\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_URL: options.gatewayUrl,\n AGENT_BRIDGE_WORKSPACE: options.workspace,\n AGENT_BRIDGE_EDGE_DB: options.edgeDatabasePath,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_TOKEN: clientToken,\n }\n : {\n ...env,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_TOKEN: clientToken ?? env.AGENT_BRIDGE_TOKEN,\n }, identity);\n const values: Record<string, string | undefined> = {\n AGENT_BRIDGE_PROVIDER: resolved.provider,\n AGENT_BRIDGE_WORKSPACE: resolved.principal.workspace,\n AGENT_BRIDGE_URL: resolved.url,\n AGENT_BRIDGE_TOKEN: resolved.provider === \"gateway\" ? resolved.credential : undefined,\n AGENT_BRIDGE_DB: resolved.provider === \"local\" ? resolved.databasePath : undefined,\n AGENT_BRIDGE_EDGE_DB: resolved.provider === \"gateway\" ? resolved.edgeDatabasePath : undefined,\n AGENT_BRIDGE_CREDENTIAL_ID: options.binding?.credentialId,\n AGENT_BRIDGE_PRINCIPAL: options.binding?.principal,\n AGENT_BRIDGE_CLIENT_INSTANCE: options.binding?.instance,\n };\n for (const value of Object.values(values)) {\n if (value?.includes(\"\\n\") || value?.includes(\"\\r\")) {\n throw new Error(\"client backend config values cannot contain newlines\");\n }\n }\n const path = options.destinationPath ?? clientBackendConfigPath(runtime, instance, env);\n replacePrivateFile(\n path,\n `${Object.entries(values)\n .filter((entry): entry is [string, string] => Boolean(entry[1]))\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")}\\n`,\n );\n return path;\n}\n\nexport interface StagedGatewayBackendPaths {\n directory: string;\n backendConfigPath: string;\n edgeDatabasePath: string;\n}\n\nfunction migrationOperationId(value: string): string {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n throw new Error(\"client migration operation ID is invalid\");\n }\n return value.toLowerCase();\n}\n\nexport function stagedGatewayBackendPaths(\n operationId: string,\n env: NodeJS.ProcessEnv = process.env,\n): StagedGatewayBackendPaths {\n const home = env.HOME ?? homedir();\n const directory = join(home, \".agent-bridge\", \"client-migrations\", migrationOperationId(operationId));\n return {\n directory,\n backendConfigPath: join(directory, \"target.config\"),\n edgeDatabasePath: join(directory, \"target.edge.sqlite3\"),\n };\n}\n\n/** Write only the fixed private target backend for a persisted migration operation. */\nexport function writeStagedGatewayBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n operationId: string,\n options: {\n token: string;\n gatewayUrl: string;\n workspace: string;\n credentialId: string;\n principal: string;\n env?: NodeJS.ProcessEnv;\n },\n): StagedGatewayBackendPaths {\n const env = options.env ?? process.env;\n const paths = stagedGatewayBackendPaths(operationId, env);\n writeClientBackendConfig(runtime, identity, instance, {\n token: options.token,\n env,\n binding: {\n credentialId: options.credentialId,\n principal: options.principal,\n instance,\n },\n destinationPath: paths.backendConfigPath,\n gatewayUrl: options.gatewayUrl,\n workspace: options.workspace,\n edgeDatabasePath: paths.edgeDatabasePath,\n });\n return paths;\n}\n\nfunction writeBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: { token?: string; env: NodeJS.ProcessEnv; binding?: ClientBackendBinding },\n): string {\n return writeClientBackendConfig(runtime, identity, instance, options);\n}\n\nfunction writeJsonConfig(\n path: string,\n identity: string,\n instance: string,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n): void {\n let config: Record<string, unknown> = {};\n if (existsSync(path)) {\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\"));\n if (!parsed || Array.isArray(parsed) || typeof parsed !== \"object\") throw new Error();\n config = parsed;\n } catch {\n throw new Error(`Claude Desktop config is not valid JSON: ${path}`);\n }\n }\n const currentServers = config.mcpServers;\n const mcpServers = currentServers && !Array.isArray(currentServers) && typeof currentServers === \"object\"\n ? currentServers as Record<string, unknown>\n : {};\n const next = {\n ...config,\n mcpServers: {\n ...mcpServers,\n \"agent-bridge\": {\n command: launch.command,\n args: launch.args,\n env: {\n AGENT_BRIDGE_AGENT: identity,\n AGENT_BRIDGE_INSTANCE: instance,\n AGENT_BRIDGE_CONFIG: backendConfigPath,\n },\n },\n },\n };\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n const temporary = `${path}.${process.pid}.tmp`;\n writeFileSync(temporary, `${JSON.stringify(next, null, 2)}\\n`, { mode: 0o600 });\n renameSync(temporary, path);\n}\n\nfunction assertEnrollmentConfiguration(\n enrollment: EnrollmentFile,\n assertions: {\n runtime?: InstallableRuntime;\n identity?: string;\n instance?: string;\n token?: string;\n env: NodeJS.ProcessEnv;\n },\n): void {\n const input = enrollment.input;\n const env = assertions.env;\n const home = env.HOME ?? homedir();\n const shared = readClientConfigFile(\n env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\"),\n );\n const conflicts: Array<[string, string | undefined, string]> = [\n [\"runtime\", assertions.runtime, input.runtime],\n [\"identity\", assertions.identity?.trim() || undefined, input.principal],\n [\"instance\", assertions.instance?.trim() || undefined, input.instance],\n [\"AGENT_BRIDGE_AGENT\", env.AGENT_BRIDGE_AGENT?.trim(), input.principal],\n [\"AGENT_BRIDGE_INSTANCE\", env.AGENT_BRIDGE_INSTANCE?.trim(), input.instance],\n [\"AGENT_BRIDGE_URL\", env.AGENT_BRIDGE_URL?.trim(), input.gatewayUrl],\n [\"AGENT_BRIDGE_WORKSPACE\", env.AGENT_BRIDGE_WORKSPACE?.trim(), input.workspaceId],\n [\"shared AGENT_BRIDGE_URL\", shared.AGENT_BRIDGE_URL?.trim(), input.gatewayUrl],\n [\"shared AGENT_BRIDGE_WORKSPACE\", shared.AGENT_BRIDGE_WORKSPACE?.trim(), input.workspaceId],\n ];\n for (const [name, actual, expected] of conflicts) {\n if (actual && actual !== expected) throw new Error(name + \" conflicts with the enrollment file\");\n }\n for (const [name, provider] of [\n [\"AGENT_BRIDGE_PROVIDER\", env.AGENT_BRIDGE_PROVIDER?.trim()],\n [\"shared AGENT_BRIDGE_PROVIDER\", shared.AGENT_BRIDGE_PROVIDER?.trim()],\n ] as const) {\n if (provider && provider !== \"gateway\") throw new Error(name + \" conflicts with the enrollment file\");\n }\n if (assertions.token) throw new Error(\"--token cannot be used with --enrollment-file\");\n if (env.AGENT_BRIDGE_CLIENT_TOKEN || env.AGENT_BRIDGE_TOKEN) {\n throw new Error(\"token environment variables cannot be used with --enrollment-file\");\n }\n}\n\nfunction removeConsumedEnrollment(\n path: string,\n result: ClientInstallResult,\n lock: EnrollmentLock,\n env: NodeJS.ProcessEnv,\n): ClientInstallResult {\n try {\n const deletion = deleteEnrollmentFile(path, lock, env);\n if (deletion === \"missing\") {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: false,\n enrollmentFile: path,\n enrollmentStatus: \"consumed-file-missing\",\n };\n }\n if (deletion === \"deleted-durability-unknown\") {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: true,\n enrollmentStatus: \"consumed-deletion-durability-unknown\",\n };\n }\n return {\n ...result,\n installed: true,\n enrollmentDeleted: true,\n enrollmentStatus: \"consumed\",\n };\n } catch {\n return {\n ...result,\n installed: true,\n enrollmentDeleted: false,\n enrollmentFile: path,\n enrollmentStatus: \"consumed-file-retained\",\n };\n }\n}\n\nfunction backendMatches(\n path: string,\n enrollment: EnrollmentFile,\n credentialId: string,\n requireToken: boolean,\n): boolean {\n if (!existsSync(path)) return false;\n const config = readClientConfigFile(path);\n return config.AGENT_BRIDGE_PROVIDER === \"gateway\"\n && config.AGENT_BRIDGE_URL === enrollment.input.gatewayUrl\n && config.AGENT_BRIDGE_WORKSPACE === enrollment.input.workspaceId\n && config.AGENT_BRIDGE_CREDENTIAL_ID === credentialId\n && config.AGENT_BRIDGE_PRINCIPAL === enrollment.input.principal\n && config.AGENT_BRIDGE_CLIENT_INSTANCE === enrollment.input.instance\n && (!requireToken || config.AGENT_BRIDGE_TOKEN === enrollment.token);\n}\n\nfunction desktopRegistrationState(\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n env: NodeJS.ProcessEnv,\n): \"absent\" | \"matching\" | \"legacy\" | \"conflict\" {\n const path = desktopConfigPath(env);\n if (!existsSync(path)) return \"absent\";\n try {\n const config = JSON.parse(readFileSync(path, \"utf8\"));\n const server = config?.mcpServers?.[\"agent-bridge\"];\n if (!server) return \"absent\";\n const environment = server?.env;\n const exactEnvironment = environment && typeof environment === \"object\"\n && !Array.isArray(environment)\n && Object.keys(environment).sort().join(\",\")\n === \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\"\n && environment.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && environment.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && environment.AGENT_BRIDGE_CONFIG === backendConfigPath;\n if (server?.command === \"agent-bridge-mcp\"\n && (server?.args === undefined || (Array.isArray(server.args) && server.args.length === 0))\n && exactEnvironment) return \"legacy\";\n return server?.command === launch.command\n && Array.isArray(server?.args)\n && server.args.length === launch.args.length\n && server.args.every((arg: unknown, index: number) => arg === launch.args[index])\n && exactEnvironment\n ? \"matching\"\n : \"conflict\";\n } catch {\n return \"conflict\";\n }\n}\n\nfunction repairLegacyDesktopRegistration(\n state: \"absent\" | \"matching\" | \"legacy\" | \"conflict\",\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n launch: DesktopLaunchContract,\n env: NodeJS.ProcessEnv,\n): \"absent\" | \"matching\" | \"conflict\" {\n if (state !== \"legacy\") return state;\n writeJsonConfig(\n desktopConfigPath(env),\n enrollment.input.principal,\n enrollment.input.instance,\n backendConfigPath,\n launch,\n );\n const repaired = desktopRegistrationState(enrollment, backendConfigPath, launch, env);\n return repaired === \"legacy\" ? \"conflict\" : repaired;\n}\n\nfunction nativeRegistrationState(\n enrollment: EnrollmentFile,\n backendConfigPath: string,\n command: string,\n scope: \"local\" | \"user\" | \"project\",\n execute: Executor,\n): \"absent\" | \"matching\" | \"conflict\" {\n const executable = enrollment.input.runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = enrollment.input.runtime === \"codex\"\n ? [\"mcp\", \"get\", \"agent-bridge\", \"--json\"]\n : [\"mcp\", \"get\", \"agent-bridge\"];\n const result = execute(executable, args);\n if (result.error) throw new Error(enrollment.input.runtime + \" MCP inspection failed\");\n if (result.status !== 0) {\n const output = (result.stdout + \"\\n\" + result.stderr).trim();\n const notFound = enrollment.input.runtime === \"codex\"\n ? output === \"Error: No MCP server named 'agent-bridge' found.\"\n : output === 'No MCP server named \"agent-bridge\".'\n || /^No MCP server named \"agent-bridge\"\\. Configured servers: [^\\r\\n]+$/.test(output);\n if (notFound) return \"absent\";\n throw new Error(enrollment.input.runtime + \" MCP inspection failed\");\n }\n if (enrollment.input.runtime === \"codex\") {\n try {\n const server = JSON.parse(result.stdout);\n const transport = server?.transport;\n const environment = transport?.env;\n const exactEnvironment = environment && typeof environment === \"object\"\n && !Array.isArray(environment)\n && Object.keys(environment).sort().join(\",\")\n === \"AGENT_BRIDGE_AGENT,AGENT_BRIDGE_CONFIG,AGENT_BRIDGE_INSTANCE\";\n return server?.name === \"agent-bridge\" && server?.enabled === true\n && transport?.type === \"stdio\" && transport?.command === command\n && Array.isArray(transport?.args) && transport.args.length === 0\n && exactEnvironment\n && transport?.env?.AGENT_BRIDGE_AGENT === enrollment.input.principal\n && transport?.env?.AGENT_BRIDGE_INSTANCE === enrollment.input.instance\n && transport?.env?.AGENT_BRIDGE_CONFIG === backendConfigPath\n ? \"matching\"\n : \"conflict\";\n } catch {\n return \"conflict\";\n }\n }\n const lines = result.stdout.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const scopeLine = {\n local: \" Scope: Local config (private to you in this project)\",\n user: \" Scope: User config (available in all your projects)\",\n project: \" Scope: Project config (shared via .mcp.json)\",\n }[scope];\n const expectedPrefix = [\n \"agent-bridge:\",\n scopeLine,\n ];\n if (lines[0] !== expectedPrefix[0] || lines[1] !== expectedPrefix[1]\n || lines[3] !== \" Type: stdio\" || lines[4] !== \" Command: \" + command\n || lines[5] !== \" Args:\" || lines[6] !== \" Environment:\") return \"conflict\";\n const environmentLines: string[] = [];\n let index = 7;\n while (index < lines.length && lines[index]?.startsWith(\" \")) {\n environmentLines.push(lines[index]!);\n index += 1;\n }\n const expectedEnvironment = [\n \" AGENT_BRIDGE_AGENT=\" + enrollment.input.principal,\n \" AGENT_BRIDGE_INSTANCE=\" + enrollment.input.instance,\n \" AGENT_BRIDGE_CONFIG=\" + backendConfigPath,\n ].sort();\n if (environmentLines.sort().join(\"\\n\") !== expectedEnvironment.join(\"\\n\")) return \"conflict\";\n while (lines[index] === \"\") index += 1;\n if (lines[index] !== \"To remove this server, run: claude mcp remove agent-bridge -s \" + scope) {\n return \"conflict\";\n }\n if (lines.slice(index + 1).some((line) => line !== \"\")) return \"conflict\";\n return \"matching\";\n}\n\nfunction enrolledInstallLocked(\n runtimeAssertion: InstallableRuntime | undefined,\n identityAssertion: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile: string;\n env?: NodeJS.ProcessEnv;\n },\n execute: Executor,\n lock: EnrollmentLock,\n): ClientInstallResult {\n const env = options.env ?? process.env;\n let enrollment = readEnrollment(options.enrollmentFile, env);\n assertEnrollmentConfiguration(enrollment, {\n runtime: runtimeAssertion,\n identity: identityAssertion,\n instance: options.instance,\n token: options.token,\n env,\n });\n const runtime = enrollment.input.runtime;\n const identity = enrollment.input.principal;\n const expectedPath = clientBackendConfigPath(runtime, enrollment.input.instance, env);\n const command = options.command?.trim() || \"agent-bridge-mcp\";\n const desktopLaunch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : undefined;\n const scope = options.scope ?? \"user\";\n const baseResult: ClientInstallResult = {\n runtime,\n identity,\n instance: enrollment.input.instance,\n method: runtime === \"claude-desktop\" ? \"json-config\" : \"native-cli\",\n configPath: runtime === \"claude-desktop\" ? desktopConfigPath(env) : undefined,\n backendConfigPath: expectedPath,\n restartRequired: true,\n };\n if (enrollment.state === \"consumed\") {\n if (!enrollment.result\n || !backendMatches(expectedPath, enrollment, enrollment.result.credentialId, false)) {\n throw new Error(\"consumed enrollment no longer matches its client backend\");\n }\n const inspected = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n const registration = runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (registration !== \"matching\") {\n throw new Error(\"consumed enrollment no longer matches its MCP registration\");\n }\n return removeConsumedEnrollment(options.enrollmentFile, baseResult, lock, env);\n }\n if (enrollment.state === \"pending\") {\n throw new Error(\"enrollment is pending; resume the owner command first\");\n }\n const recovering = enrollment.state === \"consuming\";\n if (!recovering && enrollment.operation === \"provision\" && existsSync(expectedPath)) {\n throw new Error(\"provision enrollment would replace an existing client backend file\");\n }\n if (!recovering && enrollment.operation === \"provision\") {\n const registration = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n if (registration !== \"absent\") {\n throw new Error(\"provision enrollment would replace an existing MCP registration\");\n }\n }\n if (enrollment.state === \"ready\") {\n enrollment = transitionEnrollment(options.enrollmentFile, enrollment, \"consuming\", {}, env, lock);\n }\n if (enrollment.state !== \"consuming\" || !enrollment.token) {\n throw new Error(\"enrollment is not ready for installation\");\n }\n const derivedEnv: NodeJS.ProcessEnv = {\n ...env,\n AGENT_BRIDGE_PROVIDER: \"gateway\",\n AGENT_BRIDGE_URL: enrollment.input.gatewayUrl,\n AGENT_BRIDGE_WORKSPACE: enrollment.input.workspaceId,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_CLIENT_TOKEN: undefined,\n };\n let result: ClientInstallResult;\n let sideEffectsCompleted = false;\n try {\n if (enrollment.operation === \"rotate\") {\n if (!enrollment.input.credentialId || !enrollment.result) {\n throw new Error(\"rotation enrollment lacks credential lineage\");\n }\n const predecessorMatches = backendMatches(\n expectedPath, enrollment, enrollment.input.credentialId, false,\n );\n const successorMatches = recovering && backendMatches(\n expectedPath, enrollment, enrollment.result.credentialId, true,\n );\n if (!predecessorMatches && !successorMatches) {\n throw new Error(\"rotation requires an exactly bound predecessor or successor backend\");\n }\n const inspected = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n const registration = runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (registration !== \"matching\") {\n throw new Error(\"rotation requires the exact existing MCP registration\");\n }\n if (predecessorMatches) {\n const previous = readFileSync(expectedPath);\n try {\n writeBackendConfig(runtime, identity, enrollment.input.instance, {\n token: enrollment.token,\n env: derivedEnv,\n binding: {\n credentialId: enrollment.result.credentialId,\n principal: identity,\n instance: enrollment.input.instance,\n },\n });\n } catch (error) {\n replacePrivateFile(expectedPath, previous);\n throw error;\n }\n }\n result = baseResult;\n sideEffectsCompleted = true;\n } else {\n if (recovering && existsSync(expectedPath) && !backendMatches(\n expectedPath, enrollment, enrollment.result!.credentialId, true,\n )) {\n throw new Error(\"consuming enrollment conflicts with its client backend file\");\n }\n const inspected = recovering\n ? runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute)\n : \"absent\";\n const registration = recovering && runtime === \"claude-desktop\"\n ? repairLegacyDesktopRegistration(\n inspected, enrollment, expectedPath, desktopLaunch!, env,\n )\n : inspected;\n if (recovering && registration === \"conflict\") {\n throw new Error(\"consuming enrollment conflicts with the registered MCP server\");\n }\n if (recovering && backendMatches(\n expectedPath, enrollment, enrollment.result!.credentialId, true,\n ) && registration === \"matching\") {\n result = baseResult;\n } else {\n result = installClient(runtime, identity, {\n command: runtime === \"claude-desktop\" ? options.command : command,\n scope: options.scope,\n instance: enrollment.input.instance,\n token: enrollment.token,\n backendBinding: {\n credentialId: enrollment.result!.credentialId,\n principal: identity,\n instance: enrollment.input.instance,\n },\n env: derivedEnv,\n }, execute);\n sideEffectsCompleted = true;\n const verified = runtime === \"claude-desktop\"\n ? desktopRegistrationState(enrollment, expectedPath, desktopLaunch!, env)\n : nativeRegistrationState(enrollment, expectedPath, command, scope, execute);\n if (verified !== \"matching\") throw new Error(\"MCP registration verification failed\");\n }\n }\n } catch (error) {\n if (!recovering && !sideEffectsCompleted) {\n transitionEnrollment(options.enrollmentFile, enrollment, \"ready\", {}, env, lock);\n }\n throw error;\n }\n enrollment = transitionEnrollment(\n options.enrollmentFile,\n enrollment,\n \"consumed\",\n { token: null },\n env,\n lock,\n );\n return removeConsumedEnrollment(options.enrollmentFile, result, lock, env);\n}\n\nfunction enrolledInstall(\n runtime: InstallableRuntime | undefined,\n identity: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile: string;\n recoverLock?: boolean;\n env?: NodeJS.ProcessEnv;\n },\n execute: Executor,\n): ClientInstallResult {\n const env = options.env ?? process.env;\n if (options.recoverLock) recoverEnrollmentLock(options.enrollmentFile, env);\n const lock = acquireEnrollmentLock(options.enrollmentFile, env);\n let result: ClientInstallResult;\n try {\n result = enrolledInstallLocked(runtime, identity, options, execute, lock);\n } catch (error) {\n if (!lock.released) {\n try { releaseEnrollmentLock(lock); } catch {}\n }\n throw error;\n }\n let lockReleaseStatus: NonNullable<ClientInstallResult[\"lockReleaseStatus\"]>;\n try {\n const release = releaseEnrollmentLock(lock);\n lockReleaseStatus = release === \"released\" ? \"released\" : \"durability-unknown\";\n } catch {\n lockReleaseStatus = existsSync(lock.lockPath) ? \"retained\" : \"durability-unknown\";\n }\n return { ...result, lockReleaseStatus };\n}\n\nexport function installClient(\n runtime: InstallableRuntime | undefined,\n identity: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n enrollmentFile?: string;\n recoverLock?: boolean;\n backendBinding?: ClientBackendBinding;\n env?: NodeJS.ProcessEnv;\n } = {},\n execute: Executor = (command, args) => spawnSync(command, args, { encoding: \"utf8\" }),\n): ClientInstallResult {\n if (options.enrollmentFile) {\n return enrolledInstall(runtime, identity, {\n ...options,\n enrollmentFile: options.enrollmentFile,\n }, execute);\n }\n if (!runtime) throw new Error(\"install runtime is required\");\n const normalizedIdentity = identity.trim();\n if (!normalizedIdentity || normalizedIdentity.length > 128) throw new Error(\"--identity is required\");\n const instance = options.instance?.trim() || `${runtime}-${randomUUID()}`;\n if (instance.length > 128) throw new Error(\"--instance exceeds 128 characters\");\n if (options.scope && ![\"local\", \"user\", \"project\"].includes(options.scope)) {\n throw new Error(\"scope must be local, user, or project\");\n }\n const command = options.command?.trim() || \"agent-bridge-mcp\";\n const env = options.env ?? process.env;\n const desktopLaunch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : undefined;\n const expectedPath = clientBackendConfigPath(runtime, instance, env);\n const previous = existsSync(expectedPath) ? readFileSync(expectedPath) : undefined;\n try {\n const backendConfigPath = writeBackendConfig(runtime, normalizedIdentity, instance, {\n token: options.token,\n env,\n binding: options.backendBinding,\n });\n if (runtime === \"claude-desktop\") {\n const path = desktopConfigPath(env);\n writeJsonConfig(path, normalizedIdentity, instance, backendConfigPath, desktopLaunch!);\n return { runtime, identity: normalizedIdentity, instance, method: \"json-config\", configPath: path, backendConfigPath, restartRequired: true };\n }\n const executable = runtime === \"codex\" ? \"codex\" : \"claude\";\n const args = runtime === \"codex\"\n ? [\n \"mcp\", \"add\", \"agent-bridge\",\n \"--env\", `AGENT_BRIDGE_AGENT=${normalizedIdentity}`,\n \"--env\", `AGENT_BRIDGE_INSTANCE=${instance}`,\n \"--env\", `AGENT_BRIDGE_CONFIG=${backendConfigPath}`,\n \"--\", command,\n ]\n : [\n \"mcp\", \"add\", \"--scope\", options.scope ?? \"user\", \"agent-bridge\",\n \"-e\", `AGENT_BRIDGE_AGENT=${normalizedIdentity}`,\n \"-e\", `AGENT_BRIDGE_INSTANCE=${instance}`,\n \"-e\", `AGENT_BRIDGE_CONFIG=${backendConfigPath}`,\n \"--\", command,\n ];\n const result = execute(executable, args);\n if (result.error || result.status !== 0) {\n const detail = result.stderr?.trim() || result.error?.message || `exit ${result.status}`;\n throw new Error(`${runtime} MCP installation failed: ${detail}`);\n }\n return { runtime, identity: normalizedIdentity, instance, method: \"native-cli\", backendConfigPath, restartRequired: true };\n } catch (error) {\n try {\n if (previous) replacePrivateFile(expectedPath, previous);\n else rmSync(expectedPath, { force: true });\n } catch (rollbackError) {\n const detail = rollbackError instanceof Error ? rollbackError.message : String(rollbackError);\n throw new Error(`${error instanceof Error ? error.message : String(error)}; client config rollback failed: ${detail}`);\n }\n throw error;\n }\n}\n","import {\n closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync,\n mkdirSync, openSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir, hostname } from \"node:os\";\nimport { dirname, join, parse, relative, resolve, sep } from \"node:path\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nexport const ENROLLMENT_SCHEMA = \"agent-bridge.enrollment\";\nexport const ENROLLMENT_VERSION = 1;\nexport type EnrollmentState = \"pending\" | \"ready\" | \"consuming\" | \"consumed\";\nexport type EnrollmentOperation = \"provision\" | \"rotate\";\n\nexport interface EnrollmentInput {\n gatewayUrl: string;\n workspaceId: string;\n principal: string;\n runtime: \"codex\" | \"claude-code\" | \"claude-desktop\";\n instance: string;\n credentialId: string | null;\n workspaceName: string | null;\n displayName: string | null;\n runtimeType: string;\n label: string | null;\n scopeSetName: string;\n expiresAt: string | null;\n graceUntil: string | null;\n invalidateImmediately: boolean;\n}\n\nexport interface EnrollmentResult {\n workspaceId: string;\n principal: string;\n agentId: string | null;\n credentialId: string;\n replayed: boolean;\n}\n\nexport interface EnrollmentFile {\n schema: typeof ENROLLMENT_SCHEMA;\n version: typeof ENROLLMENT_VERSION;\n provider: \"gateway\";\n revision: number;\n state: EnrollmentState;\n operation: EnrollmentOperation;\n requestId: string;\n createdAt: string;\n completedAt: string | null;\n input: EnrollmentInput;\n token: string | null;\n result: EnrollmentResult | null;\n}\n\nexport interface EnrollmentLock {\n readonly enrollmentPath: string;\n readonly lockPath: string;\n readonly descriptor: number;\n readonly device: number;\n readonly inode: number;\n readonly nonce: string;\n released: boolean;\n}\n\nexport interface EnrollmentDurabilityDependencies {\n syncDirectory(path: string): void;\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(label + \" must be an object\");\n }\n return value as Record<string, unknown>;\n}\n\nfunction text(value: unknown, label: string, maximum = 128): string {\n if (typeof value !== \"string\" || !value || value !== value.trim()\n || value.length > maximum || /[\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(label + \" is invalid\");\n }\n return value;\n}\n\nfunction nullableText(value: unknown, label: string): string | null {\n return value === null ? null : text(value, label);\n}\n\nconst RFC3339 = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?(Z|([+-])(\\d{2}):(\\d{2}))$/;\n\nexport function canonicalTimestamp(value: unknown, label: string): string | null {\n if (value === null) return null;\n const selected = text(value, label, 64);\n const match = RFC3339.exec(selected);\n if (!match) throw new Error(label + \" must be RFC3339 with a timezone\");\n const [, yearText, monthText, dayText, hourText, minuteText, secondText,\n fraction = \"\", zone, sign, offsetHourText = \"0\", offsetMinuteText = \"0\"] = match;\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const hour = Number(hourText);\n const minute = Number(minuteText);\n const second = Number(secondText);\n const millisecond = Number(fraction.padEnd(3, \"0\"));\n const offsetHour = Number(offsetHourText);\n const offsetMinute = Number(offsetMinuteText);\n if (hour > 23 || minute > 59 || second > 59 || offsetHour > 23 || offsetMinute > 59) {\n throw new Error(label + \" is invalid\");\n }\n const wall = new Date(0);\n wall.setUTCFullYear(year, month - 1, day);\n wall.setUTCHours(hour, minute, second, millisecond);\n if (wall.getUTCFullYear() !== year || wall.getUTCMonth() !== month - 1\n || wall.getUTCDate() !== day || wall.getUTCHours() !== hour\n || wall.getUTCMinutes() !== minute || wall.getUTCSeconds() !== second\n || wall.getUTCMilliseconds() !== millisecond) {\n throw new Error(label + \" is invalid\");\n }\n const direction = zone === \"Z\" ? 0 : sign === \"+\" ? 1 : -1;\n const instant = new Date(wall.getTime() - direction * (offsetHour * 60 + offsetMinute) * 60_000);\n if (!Number.isFinite(instant.getTime())) throw new Error(label + \" is invalid\");\n return instant.toISOString();\n}\n\nexport function canonicalGatewayUrl(value: unknown, label: string): string {\n const selected = text(value, label, 2048);\n let parsed: URL;\n try { parsed = new URL(selected); } catch { throw new Error(label + \" is invalid\"); }\n if (parsed.username || parsed.password) throw new Error(label + \" cannot contain credentials\");\n if (parsed.hash) throw new Error(label + \" cannot contain a fragment\");\n const loopback = parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\"\n || parsed.hostname === \"[::1]\";\n if (parsed.protocol !== \"https:\" && !(parsed.protocol === \"http:\" && loopback)) {\n throw new Error(label + \" must use HTTPS, or HTTP on an explicit loopback host\");\n }\n return parsed.toString();\n}\n\nfunction uuid(value: unknown, label: string): string {\n const selected = text(value, label, 36);\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(selected)) {\n throw new Error(label + \" is invalid\");\n }\n return selected;\n}\n\nfunction runtime(value: unknown): EnrollmentInput[\"runtime\"] {\n if (value !== \"codex\" && value !== \"claude-code\" && value !== \"claude-desktop\") {\n throw new Error(\"enrollment runtime is invalid\");\n }\n return value;\n}\n\nfunction validateInput(value: unknown, operation: EnrollmentOperation): EnrollmentInput {\n const input = object(value, \"enrollment input\");\n const gatewayUrl = canonicalGatewayUrl(input.gatewayUrl, \"enrollment gatewayUrl\");\n const credentialId = input.credentialId === null ? null : uuid(input.credentialId, \"enrollment credentialId\");\n const workspaceName = nullableText(input.workspaceName, \"enrollment workspaceName\");\n const graceUntil = canonicalTimestamp(input.graceUntil, \"enrollment graceUntil\");\n const invalidateImmediately = input.invalidateImmediately;\n if (typeof invalidateImmediately !== \"boolean\") throw new Error(\"enrollment invalidateImmediately is invalid\");\n if (operation === \"provision\" && (credentialId !== null || workspaceName === null || graceUntil !== null || invalidateImmediately)) {\n throw new Error(\"provision enrollment input is invalid\");\n }\n if (operation === \"rotate\" && (credentialId === null || workspaceName !== null\n || (graceUntil === null) === !invalidateImmediately)) {\n throw new Error(\"rotation must choose graceUntil or invalidateImmediately\");\n }\n return {\n gatewayUrl,\n workspaceId: text(input.workspaceId, \"enrollment workspaceId\"),\n principal: text(input.principal, \"enrollment principal\"),\n runtime: runtime(input.runtime),\n instance: text(input.instance, \"enrollment instance\"),\n credentialId,\n workspaceName,\n displayName: nullableText(input.displayName, \"enrollment displayName\"),\n runtimeType: text(input.runtimeType, \"enrollment runtimeType\"),\n label: nullableText(input.label, \"enrollment label\"),\n scopeSetName: text(input.scopeSetName, \"enrollment scopeSetName\"),\n expiresAt: canonicalTimestamp(input.expiresAt, \"enrollment expiresAt\"),\n graceUntil,\n invalidateImmediately,\n };\n}\n\nfunction validateResult(value: unknown, input: EnrollmentInput): EnrollmentResult | null {\n if (value === null) return null;\n const result = object(value, \"enrollment result\");\n if (typeof result.replayed !== \"boolean\") throw new Error(\"enrollment result replayed is invalid\");\n const validated = {\n workspaceId: text(result.workspaceId, \"enrollment result workspaceId\"),\n principal: text(result.principal, \"enrollment result principal\"),\n agentId: result.agentId === null ? null : uuid(result.agentId, \"enrollment result agentId\"),\n credentialId: uuid(result.credentialId, \"enrollment result credentialId\"),\n replayed: result.replayed,\n };\n if (validated.workspaceId !== input.workspaceId || validated.principal !== input.principal) {\n throw new Error(\"enrollment result does not match its workspace and principal\");\n }\n return validated;\n}\n\nexport function enrollmentTokenHash(enrollment: Pick<EnrollmentFile, \"token\">): string {\n if (!enrollment.token) throw new Error(\"enrollment no longer contains a credential\");\n return createHash(\"sha256\").update(enrollment.token, \"utf8\").digest(\"hex\");\n}\n\nexport function validateEnrollmentFile(value: unknown): EnrollmentFile {\n const file = object(value, \"enrollment file\");\n if (file.schema !== ENROLLMENT_SCHEMA || file.version !== ENROLLMENT_VERSION) {\n throw new Error(\"unsupported enrollment schema or version\");\n }\n if (file.provider !== \"gateway\") throw new Error(\"enrollment provider must be gateway\");\n if (![\"pending\", \"ready\", \"consuming\", \"consumed\"].includes(String(file.state))) {\n throw new Error(\"enrollment state is invalid\");\n }\n if (file.operation !== \"provision\" && file.operation !== \"rotate\") {\n throw new Error(\"enrollment operation is invalid\");\n }\n const state = file.state as EnrollmentState;\n if (!Number.isSafeInteger(file.revision) || Number(file.revision) < 0) {\n throw new Error(\"enrollment revision is invalid\");\n }\n const input = validateInput(file.input, file.operation);\n const token = file.token === null ? null : text(file.token, \"enrollment token\", 4096);\n const result = validateResult(file.result, input);\n const completedAt = canonicalTimestamp(file.completedAt, \"enrollment completedAt\");\n if (state === \"pending\" && (result !== null || completedAt !== null || token === null)) {\n throw new Error(\"pending enrollment state is invalid\");\n }\n if ((state === \"ready\" || state === \"consuming\") && (result === null || completedAt === null || token === null)) {\n throw new Error(state + \" enrollment state is invalid\");\n }\n if (state === \"consumed\" && (result === null || completedAt === null || token !== null)) {\n throw new Error(\"consumed enrollment state is invalid\");\n }\n return {\n schema: ENROLLMENT_SCHEMA,\n version: ENROLLMENT_VERSION,\n provider: \"gateway\",\n revision: Number(file.revision),\n state,\n operation: file.operation,\n requestId: uuid(file.requestId, \"enrollment requestId\"),\n createdAt: (() => {\n const createdAt = canonicalTimestamp(file.createdAt, \"enrollment createdAt\");\n if (createdAt === null) throw new Error(\"enrollment createdAt is invalid\");\n return createdAt;\n })(),\n completedAt,\n input,\n token,\n result,\n };\n}\n\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\");\n try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\nconst durabilityDefaults: EnrollmentDurabilityDependencies = { syncDirectory };\n\nfunction prepareDirectory(path: string): void {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n securePrivatePath(path, \"directory\");\n}\n\nexport function enrollmentRoot(env: NodeJS.ProcessEnv = process.env): string {\n if (env.AGENT_BRIDGE_ENROLLMENT_DIR) return resolve(env.AGENT_BRIDGE_ENROLLMENT_DIR);\n const home = realpathSync(env.HOME ?? homedir());\n return join(home, \".agent-bridge\", \"enrollments\");\n}\n\nfunction rejectSymlinkComponents(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const component of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, component);\n if (!existsSync(current)) break;\n if (lstatSync(current).isSymbolicLink()) {\n throw new Error(\"enrollment paths cannot contain symbolic links\");\n }\n }\n}\n\ninterface DirectoryIdentity { device: number; inode: number }\n\nfunction verifyPrivateDirectory(path: string): DirectoryIdentity {\n rejectSymlinkComponents(path);\n const details = lstatSync(path);\n if (!details.isDirectory() || details.isSymbolicLink()) {\n throw new Error(\"enrollment directory must be a real directory\");\n }\n verifyPrivatePathAccess(path, \"directory\");\n return { device: details.dev, inode: details.ino };\n}\n\nfunction sameDirectory(path: string, expected: DirectoryIdentity): void {\n const actual = verifyPrivateDirectory(path);\n if (actual.device !== expected.device || actual.inode !== expected.inode) {\n throw new Error(\"enrollment directory changed during the operation\");\n }\n}\n\nfunction verifyPrivatePath(root: string, directory: string): void {\n verifyPrivateDirectory(root);\n const inside = relative(root, directory);\n if (!inside) return;\n let current = root;\n for (const component of inside.split(sep).filter(Boolean)) {\n current = join(current, component);\n verifyPrivateDirectory(current);\n }\n}\n\nfunction prepareEnrollmentRoot(env: NodeJS.ProcessEnv): string {\n const root = enrollmentRoot(env);\n rejectSymlinkComponents(dirname(root));\n prepareDirectory(root);\n verifyPrivateDirectory(root);\n return root;\n}\n\nexport function assertEnrollmentPath(path: string, env: NodeJS.ProcessEnv = process.env): string {\n const root = enrollmentRoot(env);\n const selected = resolve(path);\n const inside = relative(root, selected);\n if (!inside || inside.startsWith(\"..\" + sep) || inside === \"..\" || inside.includes(sep + \"..\" + sep)) {\n throw new Error(\"enrollment file must be inside the configured enrollment directory\");\n }\n rejectSymlinkComponents(root);\n rejectSymlinkComponents(dirname(selected));\n if (existsSync(root) && existsSync(dirname(selected))) {\n verifyPrivatePath(root, dirname(selected));\n }\n return selected;\n}\n\nfunction serialized(value: EnrollmentFile): string {\n return JSON.stringify(validateEnrollmentFile(value), null, 2) + \"\\n\";\n}\n\nexport function defaultEnrollmentPath(requestId: string, env: NodeJS.ProcessEnv = process.env): string {\n return join(enrollmentRoot(env), requestId + \".json\");\n}\n\nexport function createPendingEnrollment(\n path: string,\n enrollment: EnrollmentFile,\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (enrollment.state !== \"pending\") throw new Error(\"new enrollment must be pending\");\n if (enrollment.revision !== 0) throw new Error(\"new enrollment revision must be zero\");\n path = assertEnrollmentPath(path, env);\n prepareEnrollmentRoot(env);\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n prepareDirectory(directory);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const descriptor = openSync(path, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, serialized(enrollment), \"utf8\");\n fsyncSync(descriptor);\n closeSync(descriptor);\n securePrivatePath(path, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(path, { force: true });\n throw error;\n }\n}\n\nfunction readEnrollmentUnlocked(path: string, env: NodeJS.ProcessEnv): EnrollmentFile {\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile()) throw new Error(\"enrollment path must be a regular file, not a symbolic link\");\n if (process.platform !== \"win32\") {\n if ((details.mode & 0o077) !== 0) throw new Error(\"enrollment file permissions must be 0600\");\n if (typeof process.getuid === \"function\" && details.uid !== process.getuid()) {\n throw new Error(\"enrollment file must be owned by the current user\");\n }\n }\n let parsed: unknown;\n try { parsed = JSON.parse(readFileSync(descriptor, \"utf8\")); }\n catch { throw new Error(\"enrollment file is not valid JSON\"); }\n sameDirectory(directory, directoryIdentity);\n return validateEnrollmentFile(parsed);\n } finally {\n closeSync(descriptor);\n }\n}\n\nexport function readEnrollment(path: string, env: NodeJS.ProcessEnv = process.env): EnrollmentFile {\n return readEnrollmentUnlocked(path, env);\n}\n\nfunction assertActiveLock(lock: EnrollmentLock, enrollmentPath: string): void {\n if (lock.released || lock.enrollmentPath !== enrollmentPath) {\n throw new Error(\"enrollment lock does not cover this file\");\n }\n const open = fstatSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (open.dev !== lock.device || open.ino !== lock.inode\n || current.dev !== lock.device || current.ino !== lock.inode || current.isSymbolicLink()) {\n throw new Error(\"enrollment lock changed during the operation\");\n }\n}\n\nexport function acquireEnrollmentLock(\n path: string,\n env: NodeJS.ProcessEnv = process.env,\n): EnrollmentLock {\n prepareEnrollmentRoot(env);\n path = assertEnrollmentPath(path, env);\n const directory = dirname(path);\n prepareDirectory(directory);\n verifyPrivatePath(enrollmentRoot(env), directory);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const lockPath = path + \".lock\";\n const descriptor = openSync(lockPath, \"wx\", 0o600);\n const nonce = randomUUID();\n try {\n writeFileSync(descriptor, JSON.stringify({\n schema: \"agent-bridge.enrollment-lock\",\n version: 1,\n enrollmentPath: path,\n pid: process.pid,\n host: hostname(),\n createdAt: new Date().toISOString(),\n nonce,\n }) + \"\\n\", \"utf8\");\n fsyncSync(descriptor);\n securePrivatePath(lockPath, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n const details = fstatSync(descriptor);\n return {\n enrollmentPath: path,\n lockPath,\n descriptor,\n device: details.dev,\n inode: details.ino,\n nonce,\n released: false,\n };\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(lockPath, { force: true });\n throw error;\n }\n}\n\nexport function releaseEnrollmentLock(\n lock: EnrollmentLock,\n dependencies: EnrollmentDurabilityDependencies = durabilityDefaults,\n): \"released\" | \"durability-unknown\" {\n assertActiveLock(lock, lock.enrollmentPath);\n const directory = dirname(lock.lockPath);\n const directoryIdentity = verifyPrivateDirectory(directory);\n closeSync(lock.descriptor);\n const current = lstatSync(lock.lockPath);\n if (current.dev !== lock.device || current.ino !== lock.inode) {\n throw new Error(\"enrollment lock changed before release\");\n }\n rmSync(lock.lockPath);\n lock.released = true;\n try {\n sameDirectory(directory, directoryIdentity);\n dependencies.syncDirectory(directory);\n } catch {\n return \"durability-unknown\";\n }\n return \"released\";\n}\n\nexport function recoverEnrollmentLock(\n path: string,\n env: NodeJS.ProcessEnv = process.env,\n now = Date.now(),\n): void {\n path = assertEnrollmentPath(path, env);\n const lockPath = path + \".lock\";\n verifyPrivatePathAccess(lockPath, \"file\");\n const descriptor = openSync(lockPath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const details = fstatSync(descriptor);\n if (!details.isFile()) throw new Error(\"enrollment lock is not a regular file\");\n if (process.platform !== \"win32\") {\n if ((details.mode & 0o077) !== 0) throw new Error(\"enrollment lock permissions must be 0600\");\n if (typeof process.getuid === \"function\" && details.uid !== process.getuid()) {\n throw new Error(\"enrollment lock must be owned by the current user\");\n }\n }\n let metadata: Record<string, unknown>;\n try { metadata = object(JSON.parse(readFileSync(descriptor, \"utf8\")), \"enrollment lock\"); }\n catch { throw new Error(\"enrollment lock metadata is invalid\"); }\n if (metadata.schema !== \"agent-bridge.enrollment-lock\" || metadata.version !== 1\n || metadata.enrollmentPath !== path || metadata.host !== hostname()\n || typeof metadata.pid !== \"number\" || !Number.isSafeInteger(metadata.pid)\n || typeof metadata.createdAt !== \"string\" || !RFC3339.test(metadata.createdAt)) {\n throw new Error(\"enrollment lock metadata is invalid\");\n }\n const age = now - new Date(metadata.createdAt).getTime();\n if (age < 60_000) throw new Error(\"enrollment lock is too recent to recover\");\n try {\n process.kill(metadata.pid, 0);\n throw new Error(\"enrollment lock owner is still running\");\n } catch (error) {\n if (error instanceof Error && error.message === \"enrollment lock owner is still running\") throw error;\n if (!error || typeof error !== \"object\" || !(\"code\" in error) || error.code !== \"ESRCH\") {\n throw new Error(\"cannot prove that the enrollment lock owner has stopped\");\n }\n }\n const current = lstatSync(lockPath);\n if (current.dev !== details.dev || current.ino !== details.ino) {\n throw new Error(\"enrollment lock changed during recovery\");\n }\n } finally {\n closeSync(descriptor);\n }\n rmSync(lockPath);\n syncDirectory(dirname(lockPath));\n}\n\nexport function deleteEnrollmentFile(\n path: string,\n lock: EnrollmentLock,\n env: NodeJS.ProcessEnv = process.env,\n dependencies: EnrollmentDurabilityDependencies = durabilityDefaults,\n): \"deleted-and-durable\" | \"deleted-durability-unknown\" | \"missing\" {\n path = assertEnrollmentPath(path, env);\n assertActiveLock(lock, path);\n let current: EnrollmentFile;\n try {\n current = readEnrollmentUnlocked(path, env);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return \"missing\";\n }\n throw error;\n }\n if (current.state !== \"consumed\" || current.token !== null) {\n throw new Error(\"only a consumed enrollment can be deleted\");\n }\n const directory = dirname(path);\n const directoryIdentity = verifyPrivateDirectory(directory);\n try {\n rmSync(path);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return \"missing\";\n }\n throw error;\n }\n try {\n sameDirectory(directory, directoryIdentity);\n dependencies.syncDirectory(directory);\n } catch {\n return \"deleted-durability-unknown\";\n }\n return \"deleted-and-durable\";\n}\n\nexport function transitionEnrollment(\n path: string,\n current: EnrollmentFile,\n state: EnrollmentState,\n changes: Partial<Pick<EnrollmentFile, \"completedAt\" | \"result\" | \"token\">> = {},\n env: NodeJS.ProcessEnv = process.env,\n heldLock?: EnrollmentLock,\n): EnrollmentFile {\n path = assertEnrollmentPath(path, env);\n const lock = heldLock ?? acquireEnrollmentLock(path, env);\n try {\n assertActiveLock(lock, path);\n const onDisk = readEnrollmentUnlocked(path, env);\n if (onDisk.revision !== current.revision || onDisk.state !== current.state\n || onDisk.requestId !== current.requestId || onDisk.operation !== current.operation\n || onDisk.token !== current.token) {\n throw new Error(\"stale enrollment transition refused\");\n }\n const transition = current.state + \"->\" + state;\n if (!new Set([\n \"pending->ready\",\n \"ready->consuming\",\n \"consuming->ready\",\n \"consuming->consumed\",\n ]).has(transition)) {\n throw new Error(\"illegal enrollment state transition: \" + transition);\n }\n const next = validateEnrollmentFile({\n ...onDisk,\n ...changes,\n state,\n revision: onDisk.revision + 1,\n });\n const directory = dirname(path);\n const directoryIdentity = verifyPrivateDirectory(directory);\n const temporary = path + \".\" + process.pid + \".\" + randomUUID() + \".tmp\";\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n writeFileSync(descriptor, serialized(next), \"utf8\");\n fsyncSync(descriptor);\n closeSync(descriptor);\n securePrivatePath(temporary, \"file\");\n sameDirectory(directory, directoryIdentity);\n renameSync(temporary, path);\n verifyPrivatePathAccess(path, \"file\");\n sameDirectory(directory, directoryIdentity);\n syncDirectory(directory);\n return next;\n } catch (error) {\n try { closeSync(descriptor); } catch {}\n rmSync(temporary, { force: true });\n throw error;\n }\n } finally {\n if (!heldLock) releaseEnrollmentLock(lock);\n }\n}\n","import {\n accessSync, closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync,\n readFileSync, renameSync, statSync, writeFileSync,\n} from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, parse, resolve, sep } from \"node:path\";\nimport { spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { verifyPrivatePathAccess, securePrivatePath } from \"./private-path.js\";\nimport {\n resolveDesktopLaunchContract,\n type InstallableRuntime,\n} from \"./client-installer.js\";\n\nexport type ClientLifecycleState = \"absent\" | \"unmanaged\" | \"managed\" | \"drifted\";\n\nexport interface ClientCommandContext { cwd?: string; env?: NodeJS.ProcessEnv }\nexport type ClientLifecycleExecutor = (\n command: string, args: string[], context?: ClientCommandContext,\n) => SpawnSyncReturns<string>;\ntype Executor = ClientLifecycleExecutor;\n\nconst defaultExecutor: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n});\n\nexport interface ClientLifecycleOptions {\n instance: string;\n backendConfigPath: string;\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n configPath?: string;\n apply?: boolean;\n env?: NodeJS.ProcessEnv;\n}\n\nexport type ManagedClientTarget =\n | {\n version: 1;\n transport: \"stdio\";\n command: string;\n args: string[];\n scope: \"local\" | \"user\" | \"project\" | null;\n }\n | {\n version: 1;\n transport: \"streamable-http\";\n url: string;\n scope: \"local\" | \"user\" | \"project\" | null;\n };\n\ntype ManagedClientLaunch = {\n command: string;\n args: string[];\n scope: \"local\" | \"user\" | \"project\" | null;\n};\n\nexport interface ClientInspection {\n schemaVersion: 1;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n registrationLocator: ClientRegistrationLocator;\n metadataPath: string;\n state: ClientLifecycleState;\n managed: boolean;\n exact: boolean;\n reason: string;\n}\n\nexport interface ClientAdoptionPlan {\n schemaVersion: 1;\n action: \"adopt\" | \"none\";\n applied: boolean;\n before: ClientLifecycleState;\n after: ClientLifecycleState;\n metadataPath: string;\n inspection: ClientInspection;\n}\n\nexport interface ManagedClientMetadata {\n schema: \"agent-bridge.client-management\";\n version: 1 | 2;\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: ManagedClientLaunch;\n target?: ManagedClientTarget;\n locator: ClientRegistrationLocator;\n}\n\nexport type ClientRegistrationLocator =\n | { kind: \"codex-profile\"; configPath: string }\n | { kind: \"claude-code-scope\"; scope: \"local\" | \"user\" | \"project\"; contextPath: string | null }\n | { kind: \"claude-desktop-config\"; configPath: string };\n\nexport function validateLoopbackMcpUrl(value: unknown, field = \"--mcp-url\"): string {\n const text = strictText(value, field, 2048);\n let parsed: URL;\n try { parsed = new URL(text); } catch { throw new Error(`${field} must be a loopback HTTP MCP URL`); }\n if (parsed.protocol !== \"http:\" || parsed.username || parsed.password || parsed.search || parsed.hash\n || ![\"127.0.0.1\", \"localhost\", \"[::1]\"].includes(parsed.hostname)\n || !parsed.port\n || parsed.pathname !== \"/mcp\") {\n throw new Error(`${field} must be a loopback HTTP MCP URL ending in /mcp`);\n }\n return parsed.toString();\n}\n\nexport function managedClientTarget(metadata: ManagedClientMetadata): ManagedClientTarget {\n return metadata.version === 2\n ? metadata.target!\n : {\n version: 1,\n transport: \"stdio\",\n command: metadata.launch.command,\n args: [...metadata.launch.args],\n scope: metadata.launch.scope,\n };\n}\n\nfunction targetLaunchProjection(target: ManagedClientTarget): ManagedClientLaunch {\n return target.transport === \"stdio\"\n ? { command: target.command, args: [...target.args], scope: target.scope }\n : { command: target.url, args: [], scope: target.scope };\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\nexport function managedClientMetadataPath(\n runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env,\n): string {\n return join(env.HOME ?? homedir(), \".agent-bridge\", \"clients\", `${runtime}-${safeComponent(instance)}.managed.json`);\n}\n\nfunction desktopConfigPath(env: NodeJS.ProcessEnv): string {\n if (process.platform === \"win32\") {\n if (!env.APPDATA) throw new Error(\"APPDATA is required for Claude Desktop inspection\");\n return join(env.APPDATA, \"Claude\", \"claude_desktop_config.json\");\n }\n const home = env.HOME ?? homedir();\n return process.platform === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\")\n : join(home, \".config\", \"Claude\", \"claude_desktop_config.json\");\n}\n\nfunction inspectedDesktopConfigPath(options: ClientLifecycleOptions, env: NodeJS.ProcessEnv): string {\n return resolve(options.configPath?.trim() || desktopConfigPath(env));\n}\n\nfunction clientRegistrationLocator(\n runtime: InstallableRuntime,\n scope: \"local\" | \"user\" | \"project\" | null,\n options: ClientLifecycleOptions,\n env: NodeJS.ProcessEnv,\n): ClientRegistrationLocator {\n if (runtime === \"claude-desktop\") {\n return { kind: \"claude-desktop-config\", configPath: inspectedDesktopConfigPath(options, env) };\n }\n if (runtime === \"claude-code\") {\n const claudeScope = scope!;\n return {\n kind: \"claude-code-scope\",\n scope: claudeScope,\n contextPath: claudeScope === \"user\" ? null : resolve(process.cwd()),\n };\n }\n const codexHome = env.CODEX_HOME?.trim() || join(env.HOME ?? homedir(), \".codex\");\n return { kind: \"codex-profile\", configPath: resolve(codexHome, \"config.toml\") };\n}\n\nexport function expectedManagedClientMetadata(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n env: NodeJS.ProcessEnv,\n): ManagedClientMetadata {\n const scope = runtime === \"claude-code\" ? options.scope ?? \"user\" : null;\n const launch = runtime === \"claude-desktop\"\n ? resolveDesktopLaunchContract(options.command, env)\n : { command: safeNativeExecutableContract(options.command === undefined ? \"agent-bridge-mcp\" : options.command, \"--command\"), args: [] };\n return {\n schema: \"agent-bridge.client-management\",\n version: 1,\n runtime,\n identity,\n instance: options.instance.trim(),\n backendConfigPath: resolve(options.backendConfigPath.trim()),\n launch: { ...launch, scope },\n locator: clientRegistrationLocator(runtime, scope, options, env),\n };\n}\n\nfunction exactManagedTarget(actual: ManagedClientMetadata | null | undefined, expected: ManagedClientMetadata): boolean {\n return actual != null\n && actual.schema === expected.schema\n && actual.runtime === expected.runtime\n && actual.identity === expected.identity\n && actual.instance === expected.instance\n && actual.backendConfigPath === expected.backendConfigPath\n && isDeepStrictEqual(actual.locator, expected.locator);\n}\n\nconst REGISTRATION_ENV_KEYS = [\n \"AGENT_BRIDGE_AGENT\", \"AGENT_BRIDGE_CONFIG\", \"AGENT_BRIDGE_INSTANCE\",\n] as const;\n\ntype RegistrationState = \"absent\" | \"exact\" | \"inexact\";\ntype RegistrationEnvironment = Partial<Record<(typeof REGISTRATION_ENV_KEYS)[number], string>>;\n\nexport interface ManagedRegistrationObservation {\n state: RegistrationState;\n target: {\n runtime: InstallableRuntime;\n identity: string;\n instance: string;\n backendConfigPath: string;\n launch: ManagedClientMetadata[\"launch\"];\n locator: ClientRegistrationLocator;\n };\n observed: { state: \"absent\" } | {\n state: \"present\";\n command: string;\n args: string[];\n env: RegistrationEnvironment;\n extraSha256?: string;\n };\n}\n\nfunction registrationTarget(metadata: ManagedClientMetadata): ManagedRegistrationObservation[\"target\"] {\n return {\n runtime: metadata.runtime,\n identity: metadata.identity,\n instance: metadata.instance,\n backendConfigPath: metadata.backendConfigPath,\n launch: { command: metadata.launch.command, args: [...metadata.launch.args], scope: metadata.launch.scope },\n locator: metadata.locator,\n };\n}\n\nexport function safeNativeExecutableContract(value: unknown, field: string): string {\n const command = strictText(value, field, 4096);\n if (/[?=#]/.test(command) || /:\\/\\//.test(command)\n || (!isAbsolute(command) && /\\s/.test(command))) {\n throw new Error(`${field} is invalid`);\n }\n return command;\n}\n\nexport function newNativeExecutableContract(value: unknown, field: string): string {\n const command = safeNativeExecutableContract(value, field);\n if (!isAbsolute(command)) return command;\n if (resolve(command) !== command || !existsSync(command) || !statSync(command).isFile()) {\n throw new Error(`${field} is not an existing executable`);\n }\n try { accessSync(command, process.platform === \"win32\" ? constants.F_OK : constants.X_OK); }\n catch { throw new Error(`${field} is not an existing executable`); }\n return command;\n}\n\nfunction safeEnvironment(value: unknown): RegistrationEnvironment {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"managed registration environment is invalid\");\n }\n const environment: RegistrationEnvironment = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n if (!REGISTRATION_ENV_KEYS.includes(key as (typeof REGISTRATION_ENV_KEYS)[number])) {\n throw new Error(\"managed registration contains an unsupported environment key\");\n }\n if (key === \"AGENT_BRIDGE_CONFIG\") environment.AGENT_BRIDGE_CONFIG = strictAbsolutePath(item, \"registration config\");\n else environment[key as \"AGENT_BRIDGE_AGENT\" | \"AGENT_BRIDGE_INSTANCE\"] = strictText(item, `registration ${key}`, 128);\n }\n return environment;\n}\n\nfunction exactRegistration(\n expected: ManagedClientMetadata,\n command: string,\n args: string[],\n environment: RegistrationEnvironment,\n): boolean {\n const target = managedClientTarget(expected);\n if (target.transport === \"streamable-http\") {\n return command === target.url\n && args.length === 0\n && Object.keys(environment).length === 0;\n }\n return command === expected.launch.command\n && isDeepStrictEqual(args, expected.launch.args)\n && isDeepStrictEqual(environment, {\n AGENT_BRIDGE_AGENT: expected.identity,\n AGENT_BRIDGE_INSTANCE: expected.instance,\n AGENT_BRIDGE_CONFIG: expected.backendConfigPath,\n });\n}\n\nfunction safeArgs(value: unknown, expected: string[], alternate: string[] = []): string[] {\n if (!Array.isArray(value) || value.length > 16) throw new Error(\"managed registration arguments are invalid\");\n const args = value.map((item) => strictText(item, \"registration argument\", 1024));\n if (!isDeepStrictEqual(args, expected) && !isDeepStrictEqual(args, alternate)) {\n throw new Error(\"managed registration arguments cannot be represented safely\");\n }\n return args;\n}\n\nfunction sensitiveArgument(args: string[], index: number): boolean {\n const arg = args[index]!;\n const previous = index > 0 ? args[index - 1]! : \"\";\n const sensitiveFlag = /^--?(?:token|key|secret|password|authorization|credential)(?:=.*)?$/i;\n return sensitiveFlag.test(arg)\n || sensitiveFlag.test(previous)\n || /\\bBearer\\s+\\S+/i.test(arg)\n || /^https?:\\/\\/\\S*[?#]\\S+/i.test(arg);\n}\n\nfunction safeDesktopArgs(value: unknown, expected: string[], alternate: string[] = []): string[] {\n if (!Array.isArray(value) || value.length > 16) throw new Error(\"managed registration arguments are invalid\");\n const args = value.map((item) => strictText(item, \"registration argument\", 1024));\n if (isDeepStrictEqual(args, expected) || isDeepStrictEqual(args, alternate)) return args;\n if (args.some((_, index) => sensitiveArgument(args, index))) {\n throw new Error(\"managed registration arguments cannot be represented safely\");\n }\n return args;\n}\n\nfunction sensitiveEnvironmentEntry(key: string, value: string): boolean {\n return /(?:TOKEN|KEY|SECRET|PASSWORD|AUTHORIZATION|CREDENTIAL)/i.test(key)\n || /\\bBearer\\s+\\S+/i.test(value)\n || /^https?:\\/\\/\\S*[?#]\\S+/i.test(value);\n}\n\nfunction safeDesktopEnvironment(value: unknown): {\n environment: RegistrationEnvironment;\n extra: boolean;\n extraSha256?: string;\n} {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"managed registration environment is invalid\");\n }\n const environment: RegistrationEnvironment = {};\n const extraEntries: string[] = [];\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n const text = strictText(item, `registration ${key}`, 4096);\n if (!REGISTRATION_ENV_KEYS.includes(key as (typeof REGISTRATION_ENV_KEYS)[number])) {\n if (sensitiveEnvironmentEntry(key, text)) {\n throw new Error(\"managed registration contains an unsupported environment key\");\n }\n extraEntries.push(`${JSON.stringify(key)}=${JSON.stringify(text)}`);\n continue;\n }\n if (key === \"AGENT_BRIDGE_CONFIG\") environment.AGENT_BRIDGE_CONFIG = strictAbsolutePath(text, \"registration config\");\n else environment[key as \"AGENT_BRIDGE_AGENT\" | \"AGENT_BRIDGE_INSTANCE\"] = strictText(text, `registration ${key}`, 128);\n }\n return {\n environment,\n extra: extraEntries.length > 0,\n extraSha256: extraEntries.length\n ? createHash(\"sha256\").update(extraEntries.sort().join(\"\\n\")).digest(\"hex\")\n : undefined,\n };\n}\n\nfunction commandContext(\n metadata: ManagedClientMetadata,\n env: NodeJS.ProcessEnv,\n): ClientCommandContext {\n if (metadata.runtime === \"codex\") {\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"codex-profile\" }>;\n return { env: { ...env, CODEX_HOME: dirname(locator.configPath) } };\n }\n const locator = metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n return { cwd: locator.contextPath ?? undefined, env: { ...env } };\n}\n\nfunction observeCodex(\n expected: ManagedClientMetadata,\n execute: Executor,\n env: NodeJS.ProcessEnv,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n const result = execute(\"codex\", [\"mcp\", \"get\", \"agent-bridge\", \"--json\"], {\n ...commandContext(expected, env),\n });\n if (result.error) throw new Error(\"codex MCP inspection failed\");\n if (result.status !== 0) {\n const output = `${result.stdout}\\n${result.stderr}`.trim();\n if (output === \"Error: No MCP server named 'agent-bridge' found.\") {\n return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n }\n throw new Error(\"codex MCP inspection failed\");\n }\n try {\n const server = JSON.parse(result.stdout) as Record<string, unknown>;\n const transport = server?.transport as Record<string, unknown> | undefined;\n const serverFields = new Set([\n \"name\", \"enabled\", \"disabled_reason\", \"transport\", \"enabled_tools\", \"disabled_tools\",\n \"startup_timeout_sec\", \"tool_timeout_sec\", \"status\",\n ]);\n const target = managedClientTarget(expected);\n const transportFields = transport?.type === \"streamable_http\"\n ? new Set([\"type\", \"url\", \"bearer_token_env_var\", \"http_headers\", \"env_http_headers\"])\n : new Set([\"type\", \"command\", \"args\", \"env\", \"env_vars\", \"cwd\"]);\n const hasNonNullSetting = (field: string): boolean => field in server && server[field] !== null;\n if (!server || typeof server !== \"object\" || Array.isArray(server)\n || server.name !== \"agent-bridge\" || server.enabled !== true\n || !transport || typeof transport !== \"object\" || Array.isArray(transport)) {\n throw new Error(\"Codex MCP registration is not a supported contract\");\n }\n if (Object.keys(server).some((field) => !serverFields.has(field))\n || Object.keys(transport).some((field) => !transportFields.has(field))\n || hasNonNullSetting(\"enabled_tools\") || hasNonNullSetting(\"disabled_tools\")) {\n throw new Error(\"Codex MCP registration contains an unsupported execution setting\");\n }\n if (transport.type === \"streamable_http\") {\n if (transport.type !== \"streamable_http\"\n || transport.bearer_token_env_var !== null\n || transport.http_headers !== null\n || transport.env_http_headers !== null) {\n throw new Error(\"Codex MCP registration contains an unsupported HTTP setting\");\n }\n const url = validateLoopbackMcpUrl(transport.url, \"Codex MCP URL\");\n return {\n state: exactRegistration(expected, url, [], {}) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected),\n observed: { state: \"present\", command: url, args: [], env: {} },\n };\n }\n if (transport.type !== \"stdio\") {\n throw new Error(\"Codex MCP registration is not a supported stdio contract\");\n }\n if ((\"cwd\" in transport && transport.cwd !== null)\n || (\"env_vars\" in transport && (!Array.isArray(transport.env_vars) || transport.env_vars.length !== 0))) {\n throw new Error(\"Codex MCP registration contains an unsupported execution setting\");\n }\n const command = safeNativeExecutableContract(transport.command, \"Codex MCP command\");\n const args = safeArgs(transport.args, expected.launch.args, alternateArgs);\n const environment = safeEnvironment(transport.env);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n } catch {\n throw new Error(\"Codex MCP registration cannot be represented safely\");\n }\n}\n\nfunction observeClaudeCode(\n expected: ManagedClientMetadata,\n execute: Executor,\n env: NodeJS.ProcessEnv,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n const locator = expected.locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>;\n const result = execute(\"claude\", [\"mcp\", \"get\", \"agent-bridge\"], {\n ...commandContext(expected, env),\n });\n if (result.error) throw new Error(\"claude-code MCP inspection failed\");\n if (result.status !== 0) {\n const output = `${result.stdout}\\n${result.stderr}`.trim();\n if (output === 'No MCP server named \"agent-bridge\".'\n || /^No MCP server named \"agent-bridge\"\\. Configured servers: [^\\r\\n]+$/.test(output)) {\n return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n }\n throw new Error(\"claude-code MCP inspection failed\");\n }\n const scope = {\n local: \" Scope: Local config (private to you in this project)\",\n user: \" Scope: User config (available in all your projects)\",\n project: \" Scope: Project config (shared via .mcp.json)\",\n }[expected.launch.scope!];\n const lines = result.stdout.replace(/\\r\\n/g, \"\\n\").trimEnd().split(\"\\n\");\n if (lines[0] !== \"agent-bridge:\" || lines[1] !== scope) {\n throw new Error(\"Claude Code MCP registration scope is not the recorded scope\");\n }\n const target = managedClientTarget(expected);\n const httpTypeIndex = lines.indexOf(\" Type: http\", 2);\n if (httpTypeIndex >= 0) {\n const urlLine = lines[httpTypeIndex + 1];\n if (!urlLine?.startsWith(\" URL: \")) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n const url = validateLoopbackMcpUrl(urlLine.slice(\" URL: \".length), \"Claude Code MCP URL\");\n let index = httpTypeIndex + 2;\n while (lines[index] === \"\") index += 1;\n if (lines[index] !== `To remove this server, run: claude mcp remove agent-bridge -s ${expected.launch.scope}`) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n if (lines.slice(index + 1).some((line) => line !== \"\")) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n return {\n state: target.transport === \"streamable-http\" && target.url === url ? \"exact\" : \"inexact\",\n target: registrationTarget(expected),\n observed: { state: \"present\", command: url, args: [], env: {} },\n };\n }\n const typeIndex = lines.indexOf(\" Type: stdio\", 2);\n if (typeIndex < 0 || lines[typeIndex + 1] !== ` Command: ${expected.launch.command}`\n || lines[typeIndex + 2] !== \" Args:\" || lines[typeIndex + 3] !== \" Environment:\") {\n if (typeIndex < 0 || lines[typeIndex + 2] !== \" Args:\" || lines[typeIndex + 3] !== \" Environment:\") {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n }\n const commandLine = lines[typeIndex + 1];\n if (!commandLine?.startsWith(\" Command: \")) throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n const command = safeNativeExecutableContract(commandLine.slice(\" Command: \".length), \"Claude Code MCP command\");\n const environmentLines: string[] = [];\n let index = typeIndex + 4;\n while (index < lines.length && lines[index]?.startsWith(\" \")) {\n environmentLines.push(lines[index]!);\n index += 1;\n }\n const values: Record<string, string> = {};\n for (const line of environmentLines) {\n const match = /^ ([A-Z0-9_]+)=(.*)$/.exec(line);\n if (!match || Object.prototype.hasOwnProperty.call(values, match[1]!)) {\n throw new Error(\"Claude Code MCP environment is invalid\");\n }\n values[match[1]!] = match[2]!;\n }\n const environment = safeEnvironment(values);\n while (lines[index] === \"\") index += 1;\n if (lines[index] !== `To remove this server, run: claude mcp remove agent-bridge -s ${expected.launch.scope}`) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n if (lines.slice(index + 1).some((line) => line !== \"\")) {\n throw new Error(\"Claude Code MCP registration cannot be represented safely\");\n }\n const args = safeArgs([], expected.launch.args, alternateArgs);\n return {\n state: exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment },\n };\n}\n\nexport function assertNoLinkedPathAncestors(path: string): void {\n const root = parse(path).root;\n let current = root;\n for (const part of path.slice(root.length).split(sep).filter(Boolean)) {\n current = join(current, part);\n try {\n if (lstatSync(current).isSymbolicLink()) throw new Error(\"Claude Desktop config path contains a link\");\n } catch (error) {\n if (error instanceof Error && error.message === \"Claude Desktop config path contains a link\") throw error;\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") break;\n throw new Error(\"Claude Desktop config path is unavailable\");\n }\n }\n}\n\nfunction observeDesktop(\n expected: ManagedClientMetadata,\n path: string,\n alternateArgs: string[],\n): ManagedRegistrationObservation {\n assertNoLinkedPathAncestors(path);\n if (!existsSync(path)) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n try {\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > 4 * 1024 * 1024) {\n throw new Error(\"Claude Desktop config is not a safe regular JSON file\");\n }\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n let parsed: unknown;\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > 4 * 1024 * 1024\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"Claude Desktop config changed during access\");\n }\n } finally { closeSync(descriptor); }\n const servers = (parsed as { mcpServers?: unknown })?.mcpServers;\n if (servers === undefined) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n throw new Error(\"Claude Desktop mcpServers is invalid\");\n }\n const server = (servers as Record<string, unknown>)[\"agent-bridge\"];\n if (server === undefined) return { state: \"absent\", target: registrationTarget(expected), observed: { state: \"absent\" } };\n if (!server || typeof server !== \"object\" || Array.isArray(server)\n || Object.keys(server as Record<string, unknown>).sort().join(\",\") !== \"args,command,env\") {\n throw new Error(\"Claude Desktop MCP registration cannot be represented safely\");\n }\n const entry = server as Record<string, unknown>;\n const command = safeNativeExecutableContract(entry.command, \"Claude Desktop MCP command\");\n const args = safeDesktopArgs(entry.args, expected.launch.args, alternateArgs);\n const { environment, extra, extraSha256 } = safeDesktopEnvironment(entry.env);\n return {\n state: !extra && exactRegistration(expected, command, args, environment) ? \"exact\" : \"inexact\",\n target: registrationTarget(expected), observed: { state: \"present\", command, args, env: environment, ...(extraSha256 ? { extraSha256 } : {}) },\n };\n } catch {\n throw new Error(\"Claude Desktop MCP registration cannot be represented safely\");\n }\n}\n\n/** Observe only the bounded, credential-free portion of a metadata-owned registration. */\nexport function observeManagedRegistration(\n metadata: ManagedClientMetadata,\n execute: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n alternateArgs: string[] = [],\n): ManagedRegistrationObservation {\n return metadata.runtime === \"codex\"\n ? observeCodex(metadata, execute, env, alternateArgs)\n : metadata.runtime === \"claude-code\"\n ? observeClaudeCode(metadata, execute, env, alternateArgs)\n : observeDesktop(\n metadata,\n (metadata.locator as Extract<ClientRegistrationLocator, { kind: \"claude-desktop-config\" }>).configPath,\n alternateArgs,\n );\n}\n\n/** Inspect the registration using only the locator and launch contract stored in managed metadata. */\nexport function inspectManagedRegistration(\n metadata: ManagedClientMetadata,\n execute: Executor = (command, args, context) => spawnSync(command, args, {\n encoding: \"utf8\", cwd: context?.cwd, env: context?.env,\n }),\n env: NodeJS.ProcessEnv = process.env,\n): RegistrationState {\n try { return observeManagedRegistration(metadata, execute, env).state; }\n catch { return \"inexact\"; }\n}\n\nconst MAX_MANAGED_METADATA_BYTES = 64 * 1024;\n\nfunction strictText(value: unknown, field: string, maximum = 1024): string {\n if (typeof value !== \"string\" || !value || value.length > maximum || value.trim() !== value\n || /[\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(`managed metadata ${field} is invalid`);\n }\n return value;\n}\n\nfunction strictAbsolutePath(value: unknown, field: string): string {\n const path = strictText(value, field, 4096);\n if (!isAbsolute(path) || resolve(path) !== path) throw new Error(`managed metadata ${field} is invalid`);\n return path;\n}\n\nfunction strictLocator(\n runtime: InstallableRuntime,\n value: unknown,\n): ClientRegistrationLocator {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n const locator = value as Record<string, unknown>;\n if (runtime === \"codex\") {\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\"\n || locator.kind !== \"codex-profile\") throw new Error(\"managed metadata locator is invalid\");\n const configPath = strictAbsolutePath(locator.configPath, \"locator configPath\");\n if (!configPath.endsWith(\"/config.toml\") && !configPath.endsWith(\"\\\\config.toml\")) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n return { kind: \"codex-profile\", configPath };\n }\n if (runtime === \"claude-code\") {\n if (Object.keys(locator).sort().join(\",\") !== \"contextPath,kind,scope\"\n || locator.kind !== \"claude-code-scope\"\n || ![\"local\", \"user\", \"project\"].includes(locator.scope as string)) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n const scope = locator.scope as \"local\" | \"user\" | \"project\";\n if ((scope === \"user\" && locator.contextPath !== null)\n || (scope !== \"user\" && typeof locator.contextPath !== \"string\")) {\n throw new Error(\"managed metadata locator is invalid\");\n }\n return {\n kind: \"claude-code-scope\", scope,\n contextPath: scope === \"user\" ? null : strictAbsolutePath(locator.contextPath, \"locator contextPath\"),\n };\n }\n if (Object.keys(locator).sort().join(\",\") !== \"configPath,kind\"\n || locator.kind !== \"claude-desktop-config\") throw new Error(\"managed metadata locator is invalid\");\n return { kind: \"claude-desktop-config\", configPath: strictAbsolutePath(locator.configPath, \"locator configPath\") };\n}\n\nfunction strictManagedMetadata(\n value: unknown, runtime: InstallableRuntime, instance: string,\n): ManagedClientMetadata {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"managed metadata is invalid\");\n const metadata = value as Record<string, unknown>;\n const version = metadata.version;\n const expectedKeys = version === 2\n ? \"backendConfigPath,identity,instance,launch,locator,runtime,schema,target,version\"\n : \"backendConfigPath,identity,instance,launch,locator,runtime,schema,version\";\n if (Object.keys(metadata).sort().join(\",\") !== expectedKeys\n || metadata.schema !== \"agent-bridge.client-management\" || (version !== 1 && version !== 2)\n || metadata.runtime !== runtime) throw new Error(\"managed metadata is invalid\");\n const identity = strictText(metadata.identity, \"identity\", 128);\n const recordedInstance = strictText(metadata.instance, \"instance\", 128);\n if (recordedInstance !== instance) throw new Error(\"managed metadata instance does not match its locator\");\n const backendConfigPath = strictAbsolutePath(metadata.backendConfigPath, \"backendConfigPath\");\n if (!metadata.launch || typeof metadata.launch !== \"object\" || Array.isArray(metadata.launch)) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n const launch = metadata.launch as Record<string, unknown>;\n if (Object.keys(launch).sort().join(\",\") !== \"args,command,scope\"\n || !Array.isArray(launch.args) || launch.args.length > 16\n || launch.args.some((arg) => {\n try { strictText(arg, \"launch argument\", 1024); return false; } catch { return true; }\n })\n || ![null, \"local\", \"user\", \"project\"].includes(launch.scope as string | null)) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n const locator = strictLocator(runtime, metadata.locator);\n const scope = launch.scope as \"local\" | \"user\" | \"project\" | null;\n if ((runtime !== \"claude-code\" && scope !== null)\n || (runtime === \"claude-code\" && scope !== (locator as Extract<ClientRegistrationLocator, { kind: \"claude-code-scope\" }>).scope)\n || ((runtime === \"codex\" || runtime === \"claude-code\") && launch.args.length !== 0)\n || (runtime === \"claude-desktop\" && !isAbsolute(strictText(launch.command, \"launch command\", 4096)))\n || ((runtime === \"codex\" || runtime === \"claude-code\")\n && !(version === 2 && (metadata.target as Record<string, unknown> | undefined)?.transport === \"streamable-http\")\n && (() => { try { safeNativeExecutableContract(launch.command, \"launch command\"); return false; } catch { return true; } })())) {\n throw new Error(\"managed metadata launch is invalid\");\n }\n let target: ManagedClientTarget | undefined;\n if (version === 2) {\n if (!metadata.target || typeof metadata.target !== \"object\" || Array.isArray(metadata.target)) {\n throw new Error(\"managed metadata target is invalid\");\n }\n const candidate = metadata.target as Record<string, unknown>;\n const targetScope = candidate.scope as \"local\" | \"user\" | \"project\" | null;\n if (candidate.version !== 1 || ![null, \"local\", \"user\", \"project\"].includes(targetScope)) {\n throw new Error(\"managed metadata target is invalid\");\n }\n if (candidate.transport === \"streamable-http\") {\n if (Object.keys(candidate).sort().join(\",\") !== \"scope,transport,url,version\"\n || runtime === \"claude-desktop\"\n || targetScope !== scope) {\n throw new Error(\"managed metadata target is invalid\");\n }\n target = {\n version: 1, transport: \"streamable-http\",\n url: validateLoopbackMcpUrl(candidate.url, \"managed metadata target URL\"),\n scope: targetScope,\n };\n } else if (candidate.transport === \"stdio\") {\n if (Object.keys(candidate).sort().join(\",\") !== \"args,command,scope,transport,version\"\n || !Array.isArray(candidate.args) || candidate.args.length > 16\n || candidate.args.some((arg) => {\n try { strictText(arg, \"target argument\", 1024); return false; } catch { return true; }\n })) {\n throw new Error(\"managed metadata target is invalid\");\n }\n target = {\n version: 1, transport: \"stdio\",\n command: strictText(candidate.command, \"target command\", 4096),\n args: [...candidate.args] as string[],\n scope: targetScope,\n };\n if (runtime === \"claude-desktop\") {\n if (!isAbsolute(target.command)) throw new Error(\"managed metadata target is invalid\");\n } else {\n safeNativeExecutableContract(target.command, \"managed metadata target command\");\n }\n } else {\n throw new Error(\"managed metadata target is invalid\");\n }\n if (!isDeepStrictEqual(targetLaunchProjection(target), {\n command: strictText(launch.command, \"launch command\", 4096),\n args: [...launch.args] as string[],\n scope,\n })) {\n throw new Error(\"managed metadata target does not match its launch projection\");\n }\n }\n return {\n schema: \"agent-bridge.client-management\", version, runtime, identity, instance: recordedInstance,\n backendConfigPath,\n launch: { command: strictText(launch.command, \"launch command\", 4096), args: [...launch.args] as string[], scope },\n ...(target ? { target } : {}),\n locator,\n };\n}\n\n/** Load the owner-private record that is the only mutation authority for a managed client. */\nexport function loadManagedClientMetadata(\n runtime: InstallableRuntime, instance: string, env: NodeJS.ProcessEnv = process.env,\n): ManagedClientMetadata {\n const normalizedInstance = strictText(instance, \"instance\", 128);\n const path = managedClientMetadataPath(runtime, normalizedInstance, env);\n verifyPrivatePathAccess(dirname(dirname(path)), \"directory\");\n verifyPrivatePathAccess(dirname(path), \"directory\");\n const before = lstatSync(path);\n if (before.isSymbolicLink() || !before.isFile() || before.size > MAX_MANAGED_METADATA_BYTES) {\n throw new Error(\"managed metadata is invalid\");\n }\n verifyPrivatePathAccess(path, \"file\");\n const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));\n try {\n const opened = fstatSync(descriptor);\n if (!opened.isFile() || opened.size > MAX_MANAGED_METADATA_BYTES\n || opened.dev !== before.dev || opened.ino !== before.ino) {\n throw new Error(\"managed metadata changed during access\");\n }\n const parsed = JSON.parse(readFileSync(descriptor, \"utf8\"));\n const after = lstatSync(path);\n if (after.isSymbolicLink() || after.dev !== opened.dev || after.ino !== opened.ino) {\n throw new Error(\"managed metadata changed during access\");\n }\n return strictManagedMetadata(parsed, runtime, normalizedInstance);\n } finally { closeSync(descriptor); }\n}\n\nfunction readMetadata(\n path: string,\n runtime: InstallableRuntime,\n instance: string,\n): ManagedClientMetadata | null | undefined {\n if (!existsSync(path)) return undefined;\n try { return loadManagedClientMetadata(runtime, instance, { HOME: dirname(dirname(dirname(path))) }); }\n catch { return null; }\n}\n\nexport function writeManagedClientMetadata(path: string, metadata: ManagedClientMetadata): void {\n const directory = dirname(path);\n const privateRoot = dirname(directory);\n mkdirSync(privateRoot, { recursive: true, mode: 0o700 });\n securePrivatePath(privateRoot, \"directory\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n securePrivatePath(directory, \"directory\");\n const directoryBefore = lstatSync(directory);\n if (directoryBefore.isSymbolicLink() || !directoryBefore.isDirectory()) {\n throw new Error(\"managed metadata directory is invalid\");\n }\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const descriptor = openSync(temporary, \"wx\", 0o600);\n try {\n const opened = fstatSync(descriptor);\n securePrivatePath(temporary, \"file\");\n const secured = lstatSync(temporary);\n if (!opened.isFile() || secured.isSymbolicLink() || !secured.isFile()\n || secured.dev !== opened.dev || secured.ino !== opened.ino) {\n throw new Error(\"managed metadata temporary file changed during access\");\n }\n writeFileSync(descriptor, `${JSON.stringify(metadata, null, 2)}\\n`);\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n const beforeRename = lstatSync(directory);\n const temporaryBeforeRename = lstatSync(temporary);\n if (beforeRename.isSymbolicLink() || beforeRename.dev !== directoryBefore.dev\n || beforeRename.ino !== directoryBefore.ino || temporaryBeforeRename.isSymbolicLink()\n || !temporaryBeforeRename.isFile()) {\n throw new Error(\"managed metadata directory changed before publication\");\n }\n verifyPrivatePathAccess(temporary, \"file\");\n renameSync(temporary, path);\n const afterRename = lstatSync(directory);\n if (afterRename.isSymbolicLink() || afterRename.dev !== directoryBefore.dev\n || afterRename.ino !== directoryBefore.ino) {\n throw new Error(\"managed metadata directory changed during publication\");\n }\n verifyPrivatePathAccess(path, \"file\");\n if (process.platform !== \"win32\") {\n const directoryDescriptor = openSync(directory, \"r\");\n try { fsyncSync(directoryDescriptor); } finally { closeSync(directoryDescriptor); }\n }\n}\n\nfunction validate(runtime: InstallableRuntime, identity: string, options: ClientLifecycleOptions): void {\n if (!identity.trim() || identity.trim().length > 128) throw new Error(\"--identity is required\");\n if (!options.instance.trim() || options.instance.trim().length > 128) throw new Error(\"--instance is required\");\n if (!options.backendConfigPath.trim()) throw new Error(\"--backend-config is required\");\n if (runtime === \"claude-code\" && options.scope && ![\"local\", \"user\", \"project\"].includes(options.scope)) {\n throw new Error(\"scope must be local, user, or project\");\n }\n}\n\nfunction backendState(path: string): \"absent\" | \"private-file\" | \"invalid\" {\n if (!existsSync(path)) return \"absent\";\n try {\n verifyPrivatePathAccess(dirname(path), \"directory\");\n verifyPrivatePathAccess(path, \"file\");\n return statSync(path).isFile() ? \"private-file\" : \"invalid\";\n } catch {\n return \"invalid\";\n }\n}\n\nexport function inspectClient(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n execute: Executor = defaultExecutor,\n): ClientInspection {\n validate(runtime, identity, options);\n const env = options.env ?? process.env;\n const normalizedIdentity = identity.trim();\n const expected = expectedManagedClientMetadata(runtime, normalizedIdentity, options, env);\n const path = managedClientMetadataPath(runtime, expected.instance, env);\n const metadata = readMetadata(path, runtime, expected.instance);\n // The managed record owns the launch contract after adoption or update. `inspect`\n // has no launcher flag, so rebuilding the default here would misclassify a valid\n // custom launcher as drifted.\n const registration = inspectManagedRegistration(metadata ?? expected, execute, env);\n const backend = backendState(expected.backendConfigPath);\n let state: ClientLifecycleState;\n let reason: string;\n if (registration === \"absent\" && metadata === undefined && backend === \"absent\") {\n state = \"absent\"; reason = \"registration is absent\";\n } else if (registration === \"exact\" && backend === \"private-file\" && metadata === undefined) {\n state = \"unmanaged\"; reason = \"exact registration has no managed metadata\";\n } else if (registration === \"exact\" && backend === \"private-file\" && exactManagedTarget(metadata, expected)) {\n state = \"managed\"; reason = \"registration and managed metadata are exact\";\n } else {\n state = \"drifted\"; reason = backend !== \"private-file\"\n ? \"backend path or its immediate parent is absent or not owner-private\"\n : \"registration or managed metadata differs from the requested contract\";\n }\n return {\n schemaVersion: 1,\n runtime,\n identity: normalizedIdentity,\n instance: expected.instance,\n backendConfigPath: expected.backendConfigPath,\n registrationLocator: expected.locator,\n metadataPath: path,\n state,\n managed: state === \"managed\",\n exact: registration === \"exact\" && backend === \"private-file\",\n reason,\n };\n}\n\nexport function adoptClient(\n runtime: InstallableRuntime,\n identity: string,\n options: ClientLifecycleOptions,\n execute: Executor = defaultExecutor,\n): ClientAdoptionPlan {\n const inspection = inspectClient(runtime, identity, options, execute);\n if (inspection.state === \"managed\") {\n return { schemaVersion: 1, action: \"none\", applied: false, before: \"managed\", after: \"managed\", metadataPath: inspection.metadataPath, inspection };\n }\n if (inspection.state !== \"unmanaged\") {\n throw new Error(\"only an exact unmanaged registration can be adopted\");\n }\n if (options.apply) {\n writeManagedClientMetadata(\n inspection.metadataPath,\n expectedManagedClientMetadata(runtime, inspection.identity, options, options.env ?? process.env),\n );\n const postcondition = inspectClient(runtime, identity, options, execute);\n if (postcondition.state !== \"managed\") {\n throw new Error(\"client registration changed while adoption was applied\");\n }\n return {\n schemaVersion: 1, action: \"adopt\", applied: true, before: \"unmanaged\",\n after: \"managed\", metadataPath: inspection.metadataPath, inspection: postcondition,\n };\n }\n return {\n schemaVersion: 1,\n action: \"adopt\",\n applied: false,\n before: \"unmanaged\",\n after: \"managed\",\n metadataPath: inspection.metadataPath,\n inspection,\n };\n}\n"],"mappings":"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","names":["closeSync","constants","existsSync","fsyncSync","mkdirSync","openSync","readFileSync","renameSync","rmSync","writeFileSync","createHash","randomUUID","homedir","dirname","join","resolve","existsSync","constants","resolve","join","dirname","homedir","createHash","runtime","mkdirSync","randomUUID","openSync","writeFileSync","fsyncSync","closeSync","renameSync","descriptor","readFileSync","rmSync","accessSync","closeSync","constants","existsSync","fstatSync","fsyncSync","lstatSync","mkdirSync","openSync","readFileSync","renameSync","statSync","writeFileSync","createHash","randomUUID","homedir","dirname","isAbsolute","join","parse","resolve","sep","spawnSync","spawnSync","text","safeComponent","createHash","runtime","join","homedir","desktopConfigPath","resolve","isAbsolute","existsSync","statSync","accessSync","constants","locator","dirname","index","parse","sep","lstatSync","openSync","fstatSync","readFileSync","closeSync","mkdirSync","randomUUID","writeFileSync","fsyncSync","renameSync"]}
|
|
@@ -2249,7 +2249,7 @@ var require2 = createRequire(import.meta.url);
|
|
|
2249
2249
|
var SQLITE_ENTRY = "sqlite/database.sqlite3";
|
|
2250
2250
|
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
2251
2251
|
var MAX_TIMEOUT_MS = 24 * 60 * 60 * 1e3;
|
|
2252
|
-
var WORKER_TERMINATION_TIMEOUT_MS =
|
|
2252
|
+
var WORKER_TERMINATION_TIMEOUT_MS = 3e4;
|
|
2253
2253
|
var NativeDrCommandError = class extends Error {
|
|
2254
2254
|
constructor(code, message, details) {
|
|
2255
2255
|
super(message);
|
|
@@ -2686,4 +2686,4 @@ export {
|
|
|
2686
2686
|
restoreLocalSqlite,
|
|
2687
2687
|
SQLITE_EDGE_APPLICATION_ID
|
|
2688
2688
|
};
|
|
2689
|
-
//# sourceMappingURL=chunk-
|
|
2689
|
+
//# sourceMappingURL=chunk-KT2NNGDR.js.map
|