@creatornader/agent-bridge 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE +216 -0
  3. package/README.md +338 -0
  4. package/SKILL.md +24 -0
  5. package/bin/CLAUDE.md +11 -0
  6. package/bin/agent-bridge +7 -0
  7. package/clients/claude-code.json +20 -0
  8. package/clients/claude-desktop.json +20 -0
  9. package/clients/codex.json +20 -0
  10. package/clients/generic-mcp.json +13 -0
  11. package/clients/openclaw.json +13 -0
  12. package/dist/bridge-domain-BcnBeHOn.d.ts +97 -0
  13. package/dist/bridge-service-CfqMcMAn.d.ts +28 -0
  14. package/dist/bridge-store-BuGjxTn4.d.ts +61 -0
  15. package/dist/bridge.d.ts +102 -0
  16. package/dist/bridge.js +83 -0
  17. package/dist/bridge.js.map +1 -0
  18. package/dist/chunk-4KAOBC5X.js +773 -0
  19. package/dist/chunk-4KAOBC5X.js.map +1 -0
  20. package/dist/chunk-6MAZ6YLZ.js +146 -0
  21. package/dist/chunk-6MAZ6YLZ.js.map +1 -0
  22. package/dist/chunk-AXL2I7FH.js +423 -0
  23. package/dist/chunk-AXL2I7FH.js.map +1 -0
  24. package/dist/chunk-BV6W4AJK.js +211 -0
  25. package/dist/chunk-BV6W4AJK.js.map +1 -0
  26. package/dist/chunk-CKSKUBDQ.js +153 -0
  27. package/dist/chunk-CKSKUBDQ.js.map +1 -0
  28. package/dist/chunk-JOUBDRYX.js +272 -0
  29. package/dist/chunk-JOUBDRYX.js.map +1 -0
  30. package/dist/chunk-JTC5YURG.js +49 -0
  31. package/dist/chunk-JTC5YURG.js.map +1 -0
  32. package/dist/chunk-KVR4JBRF.js +80 -0
  33. package/dist/chunk-KVR4JBRF.js.map +1 -0
  34. package/dist/chunk-O26W5QHS.js +409 -0
  35. package/dist/chunk-O26W5QHS.js.map +1 -0
  36. package/dist/chunk-WEULPMUY.js +988 -0
  37. package/dist/chunk-WEULPMUY.js.map +1 -0
  38. package/dist/chunk-YD6YJATN.js +48 -0
  39. package/dist/chunk-YD6YJATN.js.map +1 -0
  40. package/dist/cli.d.ts +3 -0
  41. package/dist/cli.js +670 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/client-config.d.ts +30 -0
  44. package/dist/client-config.js +10 -0
  45. package/dist/client-config.js.map +1 -0
  46. package/dist/client-runtime.d.ts +15 -0
  47. package/dist/client-runtime.js +15 -0
  48. package/dist/client-runtime.js.map +1 -0
  49. package/dist/gateway-BULozv3K.d.ts +54 -0
  50. package/dist/gateway-main.d.ts +2 -0
  51. package/dist/gateway-main.js +105 -0
  52. package/dist/gateway-main.js.map +1 -0
  53. package/dist/gateway.d.ts +4 -0
  54. package/dist/gateway.js +10 -0
  55. package/dist/gateway.js.map +1 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +18 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/server.d.ts +34 -0
  60. package/dist/server.js +19 -0
  61. package/dist/server.js.map +1 -0
  62. package/dist/sqlite.d.ts +156 -0
  63. package/dist/sqlite.js +24 -0
  64. package/dist/sqlite.js.map +1 -0
  65. package/llms.txt +39 -0
  66. package/package.json +104 -0
  67. package/sql/migrations/001_schema_state.sql +34 -0
  68. package/sql/migrations/002_workspaces_agents_credentials.sql +77 -0
  69. package/sql/migrations/003_messages_receipts_deliveries.sql +116 -0
  70. package/sql/migrations/004_message_query_indexes.sql +31 -0
  71. package/sql/migrations/005_delivery_events_presence.sql +79 -0
  72. package/sql/migrations/006_legacy_shared_context_import.sql +139 -0
  73. package/sql/migrations/007_runtime_role.sql +59 -0
  74. package/sql/setup.sql +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/client-installer.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { mkdtempSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport pg from \"pg\";\nimport type { MessageDraft } from \"./bridge-domain.js\";\nimport { resolveClientConfig, type ClientConfig } from \"./client-config.js\";\nimport { createClientRuntime } from \"./client-runtime.js\";\nimport { runMigrations } from \"./migrations.js\";\nimport { legacyContextMetadata, legacyNumericMessageId } from \"./legacy-compat.js\";\nimport { BridgeHttpError } from \"./http-bridge-store.js\";\nimport { LegacySupabaseError } from \"./legacy-supabase-store.js\";\nimport { installClient, type InstallableRuntime } from \"./client-installer.js\";\n\ntype Options = Record<string, string | boolean | string[]>;\nconst SUPPORTED_OPTIONS = new Set([\n \"agent\", \"as\", \"atrib-receipt-id\", \"category\", \"causation-id\", \"config\",\n \"content\", \"content-type\", \"correlation-id\", \"cursor\", \"data\", \"db\", \"dead\",\n \"delivery-id\", \"error\", \"expires-at\", \"force\", \"idempotency-key\", \"ids\",\n \"informed-by\", \"instance\", \"interval-ms\", \"json\", \"key\", \"kind\", \"lease-ms\",\n \"lease-token\", \"limit\", \"max-attempts\", \"max-interval-ms\", \"message-id\",\n \"metadata\", \"payload\", \"payload-ciphertext\", \"payload-mime\", \"payload-ref\",\n \"polls\", \"priority\", \"project\", \"provider\", \"reply-to-id\", \"since\", \"source\",\n \"target\", \"target-agent\", \"target-agents\", \"thread-id\", \"token\", \"type\",\n \"unacked-by\", \"url\", \"workspace\",\n \"identity\", \"command\", \"scope\",\n \"runtime\", \"capability\",\n \"max-pages\", \"max-push\",\n]);\nconst BOOLEAN_OPTIONS = new Set([\"dead\", \"force\", \"json\"]);\nfunction parse(argv: string[]): { command: string; options: Options; positionals: string[] } {\n const command = argv[0] ?? \"help\"; const options: Options = {}; const positionals: string[] = [];\n for (let i = 1; i < argv.length; i++) {\n const value = argv[i]!;\n if (!value.startsWith(\"--\")) { positionals.push(value); continue; }\n const key = value.slice(2); const next = argv[i + 1];\n if (!next || next.startsWith(\"--\")) {\n if (!BOOLEAN_OPTIONS.has(key)) throw new Error(`--${key} requires a value`);\n options[key] = true;\n }\n else { i++; const previous = options[key]; options[key] = previous === undefined ? next : Array.isArray(previous) ? [...previous, next] : [String(previous), next]; }\n }\n return { command, options, positionals };\n}\nfunction one(options: Options, key: string): string | undefined { const value = options[key]; return Array.isArray(value) ? value[value.length - 1] : typeof value === \"string\" ? value : undefined; }\nfunction list(options: Options, key: string): string[] { const value = options[key]; return (Array.isArray(value) ? value : value ? [String(value)] : []).flatMap((item) => item.split(\",\")).map((item) => item.trim()).filter(Boolean); }\nfunction boolean(options: Options, key: string): boolean {\n const value = options[key];\n const selected = Array.isArray(value) ? value[value.length - 1] : value;\n if (selected === undefined) return false;\n if (selected === true || selected === \"true\") return true;\n if (selected === false || selected === \"false\") return false;\n throw new Error(`--${key} must be true or false`);\n}\nfunction integer(options: Options, key: string, fallback: number): number { const raw = one(options, key); const result = raw === undefined ? fallback : Number(raw); if (!Number.isSafeInteger(result) || result < 0) throw new Error(`--${key} must be a non-negative integer`); return result; }\nfunction json(options: Options, key: string): unknown {\n const raw = one(options, key);\n if (raw === undefined) return undefined;\n try { return JSON.parse(raw); } catch { throw new Error(`--${key} must be valid JSON`); }\n}\nfunction since(options: Options): string | undefined {\n const raw = one(options, \"since\");\n if (!raw) return undefined;\n const relative = raw.match(/^(\\d+)(h|d)$/);\n if (!relative) return raw;\n const amount = Number(relative[1]);\n const milliseconds = amount * (relative[2] === \"h\" ? 3_600_000 : 86_400_000);\n return new Date(Date.now() - milliseconds).toISOString();\n}\nfunction output(value: unknown): void { process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`); }\nfunction cursor(path: string): string | undefined { try { return readFileSync(path, \"utf8\").trim() || undefined; } catch { return undefined; } }\nfunction saveCursor(path: string, value: string | undefined): void { if (!value) return; mkdirSync(dirname(path), { recursive: true }); const temporary = `${path}.${process.pid}.tmp`; writeFileSync(temporary, `${value}\\n`, { mode: 0o600 }); renameSync(temporary, path); }\nfunction help(): void { process.stdout.write(`agent-bridge: provider-neutral agent messaging\\n\\nCommands:\\n init, doctor, status, pending, migrate, sync, demo, join, presence\\n send (post), inbox (get), history, acknowledge, claim, extend, ack, nack, watch\\n clients install <codex|claude-code|claude-desktop> --identity <name>\\n`); }\nfunction rejectUnknownOptions(options: Options): void {\n const unknown = Object.keys(options).filter((key) => !SUPPORTED_OPTIONS.has(key));\n if (unknown.length) throw new Error(`unknown option: --${unknown[0]}`);\n}\n\nasync function initialize(options: Options): Promise<void> {\n const home = process.env.HOME ?? homedir();\n const configPath = one(options, \"config\") ?? process.env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\");\n if (existsSync(configPath) && !boolean(options, \"force\")) {\n throw new Error(`Config already exists at ${configPath}; pass --force to replace it`);\n }\n const provider = one(options, \"provider\") ?? process.env.AGENT_BRIDGE_PROVIDER ?? \"local\";\n if (one(options, \"instance\")) {\n throw new Error(\"--instance is client-scoped; set it in the active client process\");\n }\n const values: Record<string, string | undefined> = {\n AGENT_BRIDGE_PROVIDER: provider,\n AGENT_BRIDGE_WORKSPACE: one(options, \"workspace\") ?? process.env.AGENT_BRIDGE_WORKSPACE ?? (provider === \"legacy-supabase\" || provider === \"legacy\" || provider === \"supabase\" ? \"*\" : \"default\"),\n AGENT_BRIDGE_DB: one(options, \"db\") ?? process.env.AGENT_BRIDGE_DB,\n AGENT_BRIDGE_EDGE_DB: process.env.AGENT_BRIDGE_EDGE_DB,\n AGENT_BRIDGE_URL: one(options, \"url\") ?? process.env.AGENT_BRIDGE_URL,\n AGENT_BRIDGE_KEY: one(options, \"key\") ?? process.env.AGENT_BRIDGE_KEY,\n };\n const verificationToken = one(options, \"token\") ?? process.env.AGENT_BRIDGE_TOKEN;\n for (const value of Object.values(values)) {\n if (value?.includes(\"\\n\") || value?.includes(\"\\r\")) throw new Error(\"config values cannot contain newlines\");\n }\n mkdirSync(dirname(configPath), { recursive: true });\n const temporary = `${configPath}.${process.pid}.tmp`;\n writeFileSync(\n temporary,\n Object.entries(values).filter((entry): entry is [string, string] => Boolean(entry[1])).map(([key, value]) => `${key}=${value}`).join(\"\\n\") + \"\\n\",\n { mode: 0o600 },\n );\n let config: ClientConfig;\n try {\n config = resolveClientConfig(\n {\n HOME: home,\n AGENT_BRIDGE_CONFIG: temporary,\n AGENT_BRIDGE_TOKEN: verificationToken,\n },\n \"agent-bridge-init\",\n );\n const runtime = await createClientRuntime(config);\n try {\n if (config.provider === \"gateway\") await runtime.store.verifyRemote?.();\n } finally {\n await runtime.close();\n }\n renameSync(temporary, configPath);\n } catch (error) {\n rmSync(temporary, { force: true });\n throw error;\n }\n output({ status: \"ok\", config: configPath, provider: config.provider, workspace: config.principal.workspace, identity: \"process-scoped\", database: config.provider === \"local\" ? config.databasePath : null });\n}\n\nfunction configFor(options: Options, command: string): ClientConfig {\n const explicit = command === \"send\"\n ? one(options, \"source\") ?? one(options, \"agent\")\n : command === \"acknowledge\" || (command === \"ack\" && Boolean(one(options, \"ids\")))\n ? one(options, \"agent\")\n : one(options, \"as\");\n const project = one(options, \"project\");\n const environment = one(options, \"instance\")\n ? { ...process.env, AGENT_BRIDGE_INSTANCE: one(options, \"instance\") }\n : process.env;\n const config = resolveClientConfig(environment, explicit);\n if (!project || project === config.principal.workspace) return config;\n if (config.provider === \"gateway\") {\n throw new Error(\"--project cannot override the workspace bound to a gateway credential\");\n }\n return resolveClientConfig(\n { ...environment, AGENT_BRIDGE_WORKSPACE: project },\n explicit,\n );\n}\nfunction draft(options: Options, positionals: string[]): MessageDraft {\n const content = one(options, \"content\") ?? positionals.join(\" \");\n const metadataInput = json(options, \"metadata\");\n if (metadataInput !== undefined && (\n metadataInput === null || typeof metadataInput !== \"object\" || Array.isArray(metadataInput)\n )) throw new Error(\"--metadata must be a JSON object\");\n const metadata = (metadataInput ?? {}) as Record<string, unknown>;\n const envelope = typeof metadata.message_envelope === \"object\" && metadata.message_envelope\n ? { ...metadata.message_envelope as Record<string, unknown> }\n : {};\n if (one(options, \"payload-ref\")) envelope.payload_ref = one(options, \"payload-ref\");\n if (one(options, \"payload-ciphertext\")) envelope.payload_ciphertext = one(options, \"payload-ciphertext\");\n if (Object.keys(envelope).length) metadata.message_envelope = envelope;\n return {\n type: one(options, \"type\") ?? one(options, \"kind\") ?? one(options, \"category\") ?? \"operational\", content,\n targets: [...list(options, \"target\"), ...list(options, \"target-agent\"), ...list(options, \"target-agents\")],\n priority: one(options, \"priority\") as MessageDraft[\"priority\"], threadId: one(options, \"thread-id\"), replyToId: one(options, \"reply-to-id\"),\n correlationId: one(options, \"correlation-id\"), causationId: one(options, \"causation-id\"),\n id: one(options, \"message-id\"), idempotencyKey: one(options, \"idempotency-key\"), expiresAt: one(options, \"expires-at\"),\n contentType: one(options, \"content-type\") ?? one(options, \"payload-mime\"), atribReceiptId: one(options, \"atrib-receipt-id\"), informedBy: list(options, \"informed-by\"),\n data: (json(options, \"data\") ?? json(options, \"payload\")) as MessageDraft[\"data\"],\n metadata: metadata as MessageDraft[\"metadata\"],\n };\n}\n\nasync function localDemo(): Promise<void> {\n const directory = mkdtempSync(join(tmpdir(), \"agent-bridge-demo-\")); const databasePath = join(directory, \"demo.sqlite3\");\n const base = { provider: \"local\" as const, databasePath, edgeDatabasePath: join(directory, \"edge.sqlite3\"), cursorPath: join(directory, \"cursor\"), configPath: join(directory, \"config\"), credential: undefined, url: undefined };\n let sender: Awaited<ReturnType<typeof createClientRuntime>> | undefined;\n let worker: Awaited<ReturnType<typeof createClientRuntime>> | undefined;\n try {\n sender = await createClientRuntime({ ...base, principal: { workspace: \"demo\", agent: \"demo-sender\", instance: \"sender-1\" } });\n const sent = await sender.service.publish(sender.config.principal, { type: \"request\", content: \"deterministic local task\", targets: [\"demo-worker\"], idempotencyKey: \"demo-task-v1\" });\n await sender.close();\n sender = undefined;\n worker = await createClientRuntime({ ...base, principal: { workspace: \"demo\", agent: \"demo-worker\", instance: \"worker-1\" } });\n const history = await worker.service.history(worker.config.principal);\n const claim = await worker.service.claim(worker.config.principal, { leaseMs: 5_000 });\n if (!claim) throw new Error(\"demo claim failed\");\n const acked = await worker.service.ack(worker.config.principal, claim.delivery.id, claim.leaseToken);\n output({ status: \"ok\", principals: [\"demo-sender\", \"demo-worker\"], sent: sent.created, read: history.messages.length === 1, claimed: claim.delivery.state === \"claimed\", acknowledged: acked?.state === \"acked\" });\n } finally {\n await worker?.close();\n await sender?.close();\n rmSync(directory, { recursive: true, force: true });\n }\n}\n\nexport async function runCli(argv = process.argv.slice(2)): Promise<void> {\n const { command: raw, options, positionals } = parse(argv); const command = ({ post: \"send\", get: \"inbox\", receipt: \"acknowledge\" } as Record<string, string>)[raw] ?? raw;\n if ([\"help\", \"-h\", \"--help\"].includes(command)) { help(); return; }\n rejectUnknownOptions(options);\n if (command === \"clients\") {\n if (positionals[0] !== \"install\" || !positionals[1]) {\n throw new Error(\"usage: agent-bridge clients install <runtime> --identity <name>\");\n }\n const runtime = positionals[1] as InstallableRuntime;\n if (![\"codex\", \"claude-code\", \"claude-desktop\"].includes(runtime)) {\n throw new Error(`unsupported install runtime: ${runtime}`);\n }\n const scope = one(options, \"scope\");\n if (scope && ![\"local\", \"user\", \"project\"].includes(scope)) {\n throw new Error(\"--scope must be local, user, or project\");\n }\n output(installClient(runtime, one(options, \"identity\") ?? \"\", {\n command: one(options, \"command\"),\n scope: scope as \"local\" | \"user\" | \"project\" | undefined,\n instance: one(options, \"instance\"),\n token: one(options, \"token\"),\n env: process.env,\n }));\n return;\n }\n if (command === \"demo\") { await localDemo(); return; }\n if (command === \"init\") { await initialize(options); return; }\n if (command === \"migrate\") {\n const databaseUrl = process.env.AGENT_BRIDGE_DATABASE_URL;\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_DATABASE_URL is required\");\n const pool = new pg.Pool({ connectionString: databaseUrl, max: 1 });\n try {\n const applied = await runMigrations(\n pool,\n fileURLToPath(new URL(\"../sql/migrations\", import.meta.url)),\n );\n output({ status: \"ok\", applied });\n } finally { await pool.end(); }\n return;\n }\n const config = configFor(options, command); const runtime = await createClientRuntime(config);\n try {\n if (command === \"doctor\" || command === \"status\") { const diagnostics = await runtime.store.diagnostics?.(config.principal) ?? { schemaVersion: config.provider === \"legacy-supabase\" ? \"legacy-v1\" : \"local-v2\", deliverySupported: false, pending: null, claimed: null, retrying: null, dead: null }; output({ status: \"ok\", connected: true, provider: config.provider, workspace: config.principal.workspace, agent: config.principal.agent, instance: config.principal.instance ?? null, schemaVersion: diagnostics.schemaVersion, endpoint: config.url ?? null, database: config.provider === \"local\" ? config.databasePath : null, cursorPath: config.cursorPath, lastCursor: cursor(config.cursorPath) ?? null, queue: diagnostics }); return; }\n if (command === \"pending\") {\n const diagnostics = await runtime.store.diagnostics?.(config.principal);\n const page = await runtime.service.history(config.principal, {\n limit: 1,\n unacknowledgedBy: config.principal.agent,\n });\n const pendingDeliveries = diagnostics?.pending ?? 0;\n const retryingDeliveries = diagnostics?.retrying ?? 0;\n const oldest = diagnostics?.oldestAvailableAt\n ? Date.parse(diagnostics.oldestAvailableAt)\n : Number.POSITIVE_INFINITY;\n const deliveryAvailable = pendingDeliveries > 0 ||\n (retryingDeliveries > 0 && oldest <= Date.now());\n const unread = page.messages.length > 0;\n const available = deliveryAvailable || unread;\n output({\n available,\n unread,\n deliveryAvailable,\n pending: pendingDeliveries,\n retrying: retryingDeliveries,\n authoritative: !diagnostics || !(\"remoteReachable\" in diagnostics) ||\n diagnostics.remoteReachable !== false,\n });\n if (!available) process.exitCode = 1;\n return;\n }\n if (command === \"send\") { output(await runtime.service.publish(config.principal, draft(options, positionals))); return; }\n if (command === \"join\") { output(await runtime.service.heartbeat(config.principal, { leaseMs: integer(options, \"lease-ms\", 60_000), runtimeType: one(options, \"runtime\"), capabilities: list(options, \"capability\") })); return; }\n if (command === \"presence\") { output({ agents: await runtime.service.presence(config.principal) }); return; }\n if (command === \"sync\") {\n if (!runtime.store.sync) throw new Error(\"sync is available only with the gateway provider\");\n output(await runtime.store.sync({\n maxPush: integer(options, \"max-push\", integer(options, \"limit\", 100)),\n maxPages: integer(options, \"max-pages\", 20),\n }));\n return;\n }\n if (command === \"history\" || command === \"inbox\") { const page = await runtime.service.history(config.principal, { cursor: one(options, \"cursor\"), limit: integer(options, \"limit\", 20), types: list(options, \"type\").concat(list(options, \"category\")), source: one(options, \"source\"), since: since(options), unacknowledgedBy: one(options, \"unacked-by\"), threadId: one(options, \"thread-id\"), latest: raw === \"get\" }); if (raw === \"get\") { output(page.messages.map((message) => ({ id: config.provider === \"legacy-supabase\" ? Number(message.sequence) : message.id, source: message.source, category: message.type, content: message.content, priority: message.priority, project: message.workspace === \"*\" ? null : message.workspace, metadata: legacyContextMetadata(message), created_at: message.createdAt }))); } else output(page); return; }\n if (command === \"acknowledge\" || (command === \"ack\" && one(options, \"ids\"))) {\n const rawIds = list(options, \"ids\");\n const acknowledged = config.provider === \"legacy-supabase\" &&\n runtime.store.recordLegacyReceipt && rawIds.every((id) => /^\\d+$/.test(id))\n ? await runtime.store.recordLegacyReceipt(rawIds, config.principal.agent)\n : await runtime.service.acknowledge(\n config.principal,\n rawIds.map(legacyNumericMessageId),\n );\n output({ acknowledged, agent: config.principal.agent });\n return;\n }\n if (command === \"claim\") { output(await runtime.service.claim(config.principal, { leaseMs: integer(options, \"lease-ms\", 30_000), maxAttempts: integer(options, \"max-attempts\", 5) })); return; }\n const deliveryId = one(options, \"delivery-id\") ?? positionals[0]; const leaseToken = one(options, \"lease-token\") ?? positionals[1];\n if (!deliveryId || !leaseToken) { if ([\"extend\", \"ack\", \"nack\"].includes(command)) throw new Error(\"--delivery-id and --lease-token are required\"); }\n if (command === \"extend\") { output(await runtime.service.extend(config.principal, deliveryId!, leaseToken!, integer(options, \"lease-ms\", 30_000))); return; }\n if (command === \"ack\") { output(await runtime.service.ack(config.principal, deliveryId!, leaseToken!)); return; }\n if (command === \"nack\") { output(await runtime.service.nack(config.principal, deliveryId!, leaseToken!, one(options, \"error\") ?? \"negative acknowledgment\", boolean(options, \"dead\"))); return; }\n if (command === \"watch\") {\n const polls = one(options, \"polls\") === undefined ? Number.POSITIVE_INFINITY : integer(options, \"polls\", 0);\n const baseInterval = Math.min(integer(options, \"interval-ms\", 1_000), 60_000);\n const maxInterval = Math.max(baseInterval, Math.min(integer(options, \"max-interval-ms\", 30_000), 300_000));\n let interval = baseInterval;\n let current = cursor(config.cursorPath);\n let seen = 0;\n for (let i = 0; i < polls; i++) {\n try {\n const page = await runtime.service.history(config.principal, { cursor: current, limit: integer(options, \"limit\", 50) });\n for (const message of page.messages) output(message);\n seen += page.messages.length;\n current = page.cursor;\n saveCursor(config.cursorPath, current);\n interval = page.messages.length ? baseInterval : Math.min(maxInterval, Math.max(baseInterval, interval * 2));\n } catch (error) {\n const status = error instanceof BridgeHttpError || error instanceof LegacySupabaseError\n ? error.status\n : undefined;\n const retryable = status !== undefined &&\n (status === 0 || status === 408 || status === 425 || status === 429 || status >= 500);\n if (!retryable) throw error;\n interval = Math.min(maxInterval, Math.max(baseInterval, interval * 2));\n }\n if (i + 1 < polls) {\n const jittered = Math.round(interval * (0.9 + Math.random() * 0.2));\n await new Promise((resolve) => setTimeout(resolve, jittered));\n }\n }\n if (!seen && boolean(options, \"json\")) output({ status: \"ok\", messages: 0, cursor: current ?? null });\n return;\n }\n throw new Error(`Unknown command: ${raw}`);\n } finally { await runtime.close(); }\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) runCli().catch((error) => { process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\\n`); process.exitCode = 1; });\n","import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport { readClientConfigFile, resolveClientConfig } from \"./client-config.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}\n\ntype Executor = (\n command: string,\n args: string[],\n) => SpawnSyncReturns<string>;\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 mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n if (process.platform !== \"win32\") chmodSync(dirname(path), 0o700);\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n writeFileSync(temporary, content, { mode: 0o600 });\n renameSync(temporary, path);\n if (process.platform !== \"win32\") chmodSync(path, 0o600);\n}\n\nfunction writeBackendConfig(\n runtime: InstallableRuntime,\n identity: string,\n instance: string,\n options: { token?: string; env: NodeJS.ProcessEnv },\n): string {\n const env = options.env;\n const home = env.HOME ?? homedir();\n const sharedPath = env.AGENT_BRIDGE_CONFIG ?? join(home, \".agent-bridge\", \"config\");\n const shared = readClientConfigFile(sharedPath);\n const configuredProvider = env.AGENT_BRIDGE_PROVIDER?.trim() || shared.AGENT_BRIDGE_PROVIDER?.trim();\n const inferredGateway = !configuredProvider && Boolean(\n env.AGENT_BRIDGE_TOKEN?.trim() || shared.AGENT_BRIDGE_TOKEN?.trim(),\n );\n const provider = configuredProvider === \"legacy\" || configuredProvider === \"supabase\"\n ? \"legacy-supabase\"\n : configuredProvider ?? (inferredGateway ? \"gateway\" : undefined);\n const clientToken = options.token?.trim() || env.AGENT_BRIDGE_CLIENT_TOKEN?.trim();\n if (provider === \"gateway\" && !clientToken) {\n throw new Error(\n \"gateway client installation requires --token or AGENT_BRIDGE_CLIENT_TOKEN\",\n );\n }\n const resolved = resolveClientConfig({\n ...env,\n AGENT_BRIDGE_AGENT: undefined,\n AGENT_BRIDGE_INSTANCE: undefined,\n AGENT_BRIDGE_TOKEN: clientToken ?? env.AGENT_BRIDGE_TOKEN,\n }, identity);\n const values: Record<string, string | undefined> = {\n AGENT_BRIDGE_PROVIDER: resolved.provider,\n AGENT_BRIDGE_WORKSPACE: resolved.principal.workspace,\n AGENT_BRIDGE_URL: resolved.url,\n AGENT_BRIDGE_TOKEN: resolved.provider === \"gateway\" ? resolved.credential : undefined,\n AGENT_BRIDGE_KEY: resolved.provider === \"legacy-supabase\" ? resolved.credential : undefined,\n AGENT_BRIDGE_DB: resolved.provider === \"local\" ? resolved.databasePath : undefined,\n AGENT_BRIDGE_EDGE_DB: resolved.provider === \"gateway\" ? resolved.edgeDatabasePath : undefined,\n };\n for (const value of Object.values(values)) {\n if (value?.includes(\"\\n\") || value?.includes(\"\\r\")) {\n throw new Error(\"client backend config values cannot contain newlines\");\n }\n }\n const path = clientBackendConfigPath(runtime, instance, env);\n replacePrivateFile(\n path,\n `${Object.entries(values)\n .filter((entry): entry is [string, string] => Boolean(entry[1]))\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")}\\n`,\n );\n return path;\n}\n\nfunction writeJsonConfig(\n path: string,\n identity: string,\n instance: string,\n backendConfigPath: string,\n command: string,\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,\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\nexport function installClient(\n runtime: InstallableRuntime,\n identity: string,\n options: {\n command?: string;\n scope?: \"local\" | \"user\" | \"project\";\n instance?: string;\n token?: string;\n env?: NodeJS.ProcessEnv;\n } = {},\n execute: Executor = (command, args) => spawnSync(command, args, { encoding: \"utf8\" }),\n): ClientInstallResult {\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 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 });\n if (runtime === \"claude-desktop\") {\n const path = desktopConfigPath(env);\n writeJsonConfig(path, normalizedIdentity, instance, backendConfigPath, command);\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,cAAAA,aAAY,aAAAC,YAAW,gBAAAC,eAAc,cAAAC,aAAY,UAAAC,SAAQ,iBAAAC,sBAAqB;AACvF,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,WAAAC,UAAS,cAAc;AAChC,SAAS,mBAAmB;AAC5B,SAAS,eAAe,qBAAqB;AAC7C,OAAO,QAAQ;;;ACLf,SAAS,WAAW,YAAY,WAAW,cAAc,YAAY,QAAQ,qBAAqB;AAClG,SAAS,YAAY,kBAAkB;AACvC,SAAS,eAAe;AACxB,SAAS,SAAS,YAAY;AAC9B,SAAS,iBAAwC;AAoBjD,SAAS,kBAAkB,KAAgC;AACzD,MAAI,QAAQ,aAAa,SAAS;AAChC,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,qDAAqD;AACnF,WAAO,KAAK,SAAS,UAAU,4BAA4B;AAAA,EAC7D;AACA,QAAM,OAAO,IAAI,QAAQ,QAAQ;AACjC,SAAO,QAAQ,aAAa,WACxB,KAAK,MAAM,WAAW,uBAAuB,UAAU,4BAA4B,IACnF,KAAK,MAAM,WAAW,UAAU,4BAA4B;AAClE;AAEA,SAAS,cAAc,OAAuB;AAC5C,QAAM,WAAW,MAAM,QAAQ,qBAAqB,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK;AACzE,QAAM,SAAS,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AAC3E,SAAO,GAAG,QAAQ,IAAI,MAAM;AAC9B;AAEA,SAAS,wBACP,SACA,UACA,KACQ;AACR,QAAM,OAAO,IAAI,QAAQ,QAAQ;AACjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,OAAO,IAAI,cAAc,QAAQ,CAAC;AAAA,EACvC;AACF;AAEA,SAAS,mBAAmB,MAAc,SAAgC;AACxE,YAAU,QAAQ,IAAI,GAAG,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACzD,MAAI,QAAQ,aAAa,QAAS,WAAU,QAAQ,IAAI,GAAG,GAAK;AAChE,QAAM,YAAY,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,WAAW,CAAC;AACxD,gBAAc,WAAW,SAAS,EAAE,MAAM,IAAM,CAAC;AACjD,aAAW,WAAW,IAAI;AAC1B,MAAI,QAAQ,aAAa,QAAS,WAAU,MAAM,GAAK;AACzD;AAEA,SAAS,mBACP,SACA,UACA,UACA,SACQ;AACR,QAAM,MAAM,QAAQ;AACpB,QAAM,OAAO,IAAI,QAAQ,QAAQ;AACjC,QAAM,aAAa,IAAI,uBAAuB,KAAK,MAAM,iBAAiB,QAAQ;AAClF,QAAM,SAAS,qBAAqB,UAAU;AAC9C,QAAM,qBAAqB,IAAI,uBAAuB,KAAK,KAAK,OAAO,uBAAuB,KAAK;AACnG,QAAM,kBAAkB,CAAC,sBAAsB;AAAA,IAC7C,IAAI,oBAAoB,KAAK,KAAK,OAAO,oBAAoB,KAAK;AAAA,EACpE;AACA,QAAM,WAAW,uBAAuB,YAAY,uBAAuB,aACvE,oBACA,uBAAuB,kBAAkB,YAAY;AACzD,QAAM,cAAc,QAAQ,OAAO,KAAK,KAAK,IAAI,2BAA2B,KAAK;AACjF,MAAI,aAAa,aAAa,CAAC,aAAa;AAC1C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,oBAAoB;AAAA,IACnC,GAAG;AAAA,IACH,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,oBAAoB,eAAe,IAAI;AAAA,EACzC,GAAG,QAAQ;AACX,QAAM,SAA6C;AAAA,IACjD,uBAAuB,SAAS;AAAA,IAChC,wBAAwB,SAAS,UAAU;AAAA,IAC3C,kBAAkB,SAAS;AAAA,IAC3B,oBAAoB,SAAS,aAAa,YAAY,SAAS,aAAa;AAAA,IAC5E,kBAAkB,SAAS,aAAa,oBAAoB,SAAS,aAAa;AAAA,IAClF,iBAAiB,SAAS,aAAa,UAAU,SAAS,eAAe;AAAA,IACzE,sBAAsB,SAAS,aAAa,YAAY,SAAS,mBAAmB;AAAA,EACtF;AACA,aAAW,SAAS,OAAO,OAAO,MAAM,GAAG;AACzC,QAAI,OAAO,SAAS,IAAI,KAAK,OAAO,SAAS,IAAI,GAAG;AAClD,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAAA,EACF;AACA,QAAM,OAAO,wBAAwB,SAAS,UAAU,GAAG;AAC3D;AAAA,IACE;AAAA,IACA,GAAG,OAAO,QAAQ,MAAM,EACrB,OAAO,CAAC,UAAqC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,EACvC,KAAK,IAAI,CAAC;AAAA;AAAA,EACf;AACA,SAAO;AACT;AAEA,SAAS,gBACP,MACA,UACA,UACA,mBACA,SACM;AACN,MAAI,SAAkC,CAAC;AACvC,MAAI,WAAW,IAAI,GAAG;AACpB,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,aAAa,MAAM,MAAM,CAAC;AACpD,UAAI,CAAC,UAAU,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,SAAU,OAAM,IAAI,MAAM;AACpF,eAAS;AAAA,IACX,QAAQ;AACN,YAAM,IAAI,MAAM,4CAA4C,IAAI,EAAE;AAAA,IACpE;AAAA,EACF;AACA,QAAM,iBAAiB,OAAO;AAC9B,QAAM,aAAa,kBAAkB,CAAC,MAAM,QAAQ,cAAc,KAAK,OAAO,mBAAmB,WAC7F,iBACA,CAAC;AACL,QAAM,OAAO;AAAA,IACX,GAAG;AAAA,IACH,YAAY;AAAA,MACV,GAAG;AAAA,MACH,gBAAgB;AAAA,QACd;AAAA,QACA,KAAK;AAAA,UACH,oBAAoB;AAAA,UACpB,uBAAuB;AAAA,UACvB,qBAAqB;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,YAAU,QAAQ,IAAI,GAAG,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACzD,QAAM,YAAY,GAAG,IAAI,IAAI,QAAQ,GAAG;AACxC,gBAAc,WAAW,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,GAAM,EAAE,MAAM,IAAM,CAAC;AAC9E,aAAW,WAAW,IAAI;AAC5B;AAEO,SAAS,cACd,SACA,UACA,UAMI,CAAC,GACL,UAAoB,CAAC,SAAS,SAAS,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,CAAC,GAC/D;AACrB,QAAM,qBAAqB,SAAS,KAAK;AACzC,MAAI,CAAC,sBAAsB,mBAAmB,SAAS,IAAK,OAAM,IAAI,MAAM,wBAAwB;AACpG,QAAM,WAAW,QAAQ,UAAU,KAAK,KAAK,GAAG,OAAO,IAAI,WAAW,CAAC;AACvE,MAAI,SAAS,SAAS,IAAK,OAAM,IAAI,MAAM,mCAAmC;AAC9E,MAAI,QAAQ,SAAS,CAAC,CAAC,SAAS,QAAQ,SAAS,EAAE,SAAS,QAAQ,KAAK,GAAG;AAC1E,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,QAAM,UAAU,QAAQ,SAAS,KAAK,KAAK;AAC3C,QAAM,MAAM,QAAQ,OAAO,QAAQ;AACnC,QAAM,eAAe,wBAAwB,SAAS,UAAU,GAAG;AACnE,QAAM,WAAW,WAAW,YAAY,IAAI,aAAa,YAAY,IAAI;AACzE,MAAI;AACF,UAAM,oBAAoB,mBAAmB,SAAS,oBAAoB,UAAU;AAAA,MAClF,OAAO,QAAQ;AAAA,MACf;AAAA,IACF,CAAC;AACD,QAAI,YAAY,kBAAkB;AAChC,YAAM,OAAO,kBAAkB,GAAG;AAClC,sBAAgB,MAAM,oBAAoB,UAAU,mBAAmB,OAAO;AAC9E,aAAO,EAAE,SAAS,UAAU,oBAAoB,UAAU,QAAQ,eAAe,YAAY,MAAM,mBAAmB,iBAAiB,KAAK;AAAA,IAC9I;AACA,UAAM,aAAa,YAAY,UAAU,UAAU;AACnD,UAAM,OAAO,YAAY,UACrB;AAAA,MACE;AAAA,MAAO;AAAA,MAAO;AAAA,MACd;AAAA,MAAS,sBAAsB,kBAAkB;AAAA,MACjD;AAAA,MAAS,yBAAyB,QAAQ;AAAA,MAC1C;AAAA,MAAS,uBAAuB,iBAAiB;AAAA,MACjD;AAAA,MAAM;AAAA,IACR,IACA;AAAA,MACE;AAAA,MAAO;AAAA,MAAO;AAAA,MAAW,QAAQ,SAAS;AAAA,MAAQ;AAAA,MAClD;AAAA,MAAM,sBAAsB,kBAAkB;AAAA,MAC9C;AAAA,MAAM,yBAAyB,QAAQ;AAAA,MACvC;AAAA,MAAM,uBAAuB,iBAAiB;AAAA,MAC9C;AAAA,MAAM;AAAA,IACR;AACJ,UAAM,SAAS,QAAQ,YAAY,IAAI;AACvC,QAAI,OAAO,SAAS,OAAO,WAAW,GAAG;AACvC,YAAM,SAAS,OAAO,QAAQ,KAAK,KAAK,OAAO,OAAO,WAAW,QAAQ,OAAO,MAAM;AACtF,YAAM,IAAI,MAAM,GAAG,OAAO,6BAA6B,MAAM,EAAE;AAAA,IACjE;AACA,WAAO,EAAE,SAAS,UAAU,oBAAoB,UAAU,QAAQ,cAAc,mBAAmB,iBAAiB,KAAK;AAAA,EAC3H,SAAS,OAAO;AACd,QAAI;AACF,UAAI,SAAU,oBAAmB,cAAc,QAAQ;AAAA,UAClD,QAAO,cAAc,EAAE,OAAO,KAAK,CAAC;AAAA,IAC3C,SAAS,eAAe;AACtB,YAAM,SAAS,yBAAyB,QAAQ,cAAc,UAAU,OAAO,aAAa;AAC5F,YAAM,IAAI,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,oCAAoC,MAAM,EAAE;AAAA,IACvH;AACA,UAAM;AAAA,EACR;AACF;;;ADjNA,IAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EAAS;AAAA,EAAM;AAAA,EAAoB;AAAA,EAAY;AAAA,EAAgB;AAAA,EAC/D;AAAA,EAAW;AAAA,EAAgB;AAAA,EAAkB;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAM;AAAA,EACrE;AAAA,EAAe;AAAA,EAAS;AAAA,EAAc;AAAA,EAAS;AAAA,EAAmB;AAAA,EAClE;AAAA,EAAe;AAAA,EAAY;AAAA,EAAe;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EACjE;AAAA,EAAe;AAAA,EAAS;AAAA,EAAgB;AAAA,EAAmB;AAAA,EAC3D;AAAA,EAAY;AAAA,EAAW;AAAA,EAAsB;AAAA,EAAgB;AAAA,EAC7D;AAAA,EAAS;AAAA,EAAY;AAAA,EAAW;AAAA,EAAY;AAAA,EAAe;AAAA,EAAS;AAAA,EACpE;AAAA,EAAU;AAAA,EAAgB;AAAA,EAAiB;AAAA,EAAa;AAAA,EAAS;AAAA,EACjE;AAAA,EAAc;AAAA,EAAO;AAAA,EACrB;AAAA,EAAY;AAAA,EAAW;AAAA,EACvB;AAAA,EAAW;AAAA,EACX;AAAA,EAAa;AACf,CAAC;AACD,IAAM,kBAAkB,oBAAI,IAAI,CAAC,QAAQ,SAAS,MAAM,CAAC;AACzD,SAAS,MAAM,MAA8E;AAC3F,QAAM,UAAU,KAAK,CAAC,KAAK;AAAQ,QAAM,UAAmB,CAAC;AAAG,QAAM,cAAwB,CAAC;AAC/F,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,QAAQ,KAAK,CAAC;AACpB,QAAI,CAAC,MAAM,WAAW,IAAI,GAAG;AAAE,kBAAY,KAAK,KAAK;AAAG;AAAA,IAAU;AAClE,UAAM,MAAM,MAAM,MAAM,CAAC;AAAG,UAAM,OAAO,KAAK,IAAI,CAAC;AACnD,QAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG;AAClC,UAAI,CAAC,gBAAgB,IAAI,GAAG,EAAG,OAAM,IAAI,MAAM,KAAK,GAAG,mBAAmB;AAC1E,cAAQ,GAAG,IAAI;AAAA,IACjB,OACK;AAAE;AAAK,YAAM,WAAW,QAAQ,GAAG;AAAG,cAAQ,GAAG,IAAI,aAAa,SAAY,OAAO,MAAM,QAAQ,QAAQ,IAAI,CAAC,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,QAAQ,GAAG,IAAI;AAAA,IAAG;AAAA,EACtK;AACA,SAAO,EAAE,SAAS,SAAS,YAAY;AACzC;AACA,SAAS,IAAI,SAAkB,KAAiC;AAAE,QAAM,QAAQ,QAAQ,GAAG;AAAG,SAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI,OAAO,UAAU,WAAW,QAAQ;AAAW;AACrM,SAAS,KAAK,SAAkB,KAAuB;AAAE,QAAM,QAAQ,QAAQ,GAAG;AAAG,UAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,KAAK,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,OAAO,OAAO;AAAG;AACzO,SAAS,QAAQ,SAAkB,KAAsB;AACvD,QAAM,QAAQ,QAAQ,GAAG;AACzB,QAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI;AAClE,MAAI,aAAa,OAAW,QAAO;AACnC,MAAI,aAAa,QAAQ,aAAa,OAAQ,QAAO;AACrD,MAAI,aAAa,SAAS,aAAa,QAAS,QAAO;AACvD,QAAM,IAAI,MAAM,KAAK,GAAG,wBAAwB;AAClD;AACA,SAAS,QAAQ,SAAkB,KAAa,UAA0B;AAAE,QAAM,MAAM,IAAI,SAAS,GAAG;AAAG,QAAM,SAAS,QAAQ,SAAY,WAAW,OAAO,GAAG;AAAG,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,EAAG,OAAM,IAAI,MAAM,KAAK,GAAG,iCAAiC;AAAG,SAAO;AAAQ;AAClS,SAAS,KAAK,SAAkB,KAAsB;AACpD,QAAM,MAAM,IAAI,SAAS,GAAG;AAC5B,MAAI,QAAQ,OAAW,QAAO;AAC9B,MAAI;AAAE,WAAO,KAAK,MAAM,GAAG;AAAA,EAAG,QAAQ;AAAE,UAAM,IAAI,MAAM,KAAK,GAAG,qBAAqB;AAAA,EAAG;AAC1F;AACA,SAAS,MAAM,SAAsC;AACnD,QAAM,MAAM,IAAI,SAAS,OAAO;AAChC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,WAAW,IAAI,MAAM,cAAc;AACzC,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,SAAS,OAAO,SAAS,CAAC,CAAC;AACjC,QAAM,eAAe,UAAU,SAAS,CAAC,MAAM,MAAM,OAAY;AACjE,SAAO,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,EAAE,YAAY;AACzD;AACA,SAAS,OAAO,OAAsB;AAAE,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,CAAI;AAAG;AACrG,SAAS,OAAO,MAAkC;AAAE,MAAI;AAAE,WAAOC,cAAa,MAAM,MAAM,EAAE,KAAK,KAAK;AAAA,EAAW,QAAQ;AAAE,WAAO;AAAA,EAAW;AAAE;AAC/I,SAAS,WAAW,MAAc,OAAiC;AAAE,MAAI,CAAC,MAAO;AAAQ,EAAAC,WAAUC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAG,QAAM,YAAY,GAAG,IAAI,IAAI,QAAQ,GAAG;AAAQ,EAAAC,eAAc,WAAW,GAAG,KAAK;AAAA,GAAM,EAAE,MAAM,IAAM,CAAC;AAAG,EAAAC,YAAW,WAAW,IAAI;AAAG;AAC9Q,SAAS,OAAa;AAAE,UAAQ,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAgS;AAAG;AAChV,SAAS,qBAAqB,SAAwB;AACpD,QAAM,UAAU,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,IAAI,GAAG,CAAC;AAChF,MAAI,QAAQ,OAAQ,OAAM,IAAI,MAAM,qBAAqB,QAAQ,CAAC,CAAC,EAAE;AACvE;AAEA,eAAe,WAAW,SAAiC;AACzD,QAAM,OAAO,QAAQ,IAAI,QAAQC,SAAQ;AACzC,QAAM,aAAa,IAAI,SAAS,QAAQ,KAAK,QAAQ,IAAI,uBAAuBC,MAAK,MAAM,iBAAiB,QAAQ;AACpH,MAAIC,YAAW,UAAU,KAAK,CAAC,QAAQ,SAAS,OAAO,GAAG;AACxD,UAAM,IAAI,MAAM,4BAA4B,UAAU,8BAA8B;AAAA,EACtF;AACA,QAAM,WAAW,IAAI,SAAS,UAAU,KAAK,QAAQ,IAAI,yBAAyB;AAClF,MAAI,IAAI,SAAS,UAAU,GAAG;AAC5B,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,QAAM,SAA6C;AAAA,IACjD,uBAAuB;AAAA,IACvB,wBAAwB,IAAI,SAAS,WAAW,KAAK,QAAQ,IAAI,2BAA2B,aAAa,qBAAqB,aAAa,YAAY,aAAa,aAAa,MAAM;AAAA,IACvL,iBAAiB,IAAI,SAAS,IAAI,KAAK,QAAQ,IAAI;AAAA,IACnD,sBAAsB,QAAQ,IAAI;AAAA,IAClC,kBAAkB,IAAI,SAAS,KAAK,KAAK,QAAQ,IAAI;AAAA,IACrD,kBAAkB,IAAI,SAAS,KAAK,KAAK,QAAQ,IAAI;AAAA,EACvD;AACA,QAAM,oBAAoB,IAAI,SAAS,OAAO,KAAK,QAAQ,IAAI;AAC/D,aAAW,SAAS,OAAO,OAAO,MAAM,GAAG;AACzC,QAAI,OAAO,SAAS,IAAI,KAAK,OAAO,SAAS,IAAI,EAAG,OAAM,IAAI,MAAM,uCAAuC;AAAA,EAC7G;AACA,EAAAN,WAAUC,SAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAClD,QAAM,YAAY,GAAG,UAAU,IAAI,QAAQ,GAAG;AAC9C,EAAAC;AAAA,IACE;AAAA,IACA,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,UAAqC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,EAAE,KAAK,IAAI,IAAI;AAAA,IAC7I,EAAE,MAAM,IAAM;AAAA,EAChB;AACA,MAAI;AACJ,MAAI;AACF,aAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,qBAAqB;AAAA,QACrB,oBAAoB;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AACA,UAAM,UAAU,MAAM,oBAAoB,MAAM;AAChD,QAAI;AACF,UAAI,OAAO,aAAa,UAAW,OAAM,QAAQ,MAAM,eAAe;AAAA,IACxE,UAAE;AACA,YAAM,QAAQ,MAAM;AAAA,IACtB;AACA,IAAAC,YAAW,WAAW,UAAU;AAAA,EAClC,SAAS,OAAO;AACd,IAAAI,QAAO,WAAW,EAAE,OAAO,KAAK,CAAC;AACjC,UAAM;AAAA,EACR;AACA,SAAO,EAAE,QAAQ,MAAM,QAAQ,YAAY,UAAU,OAAO,UAAU,WAAW,OAAO,UAAU,WAAW,UAAU,kBAAkB,UAAU,OAAO,aAAa,UAAU,OAAO,eAAe,KAAK,CAAC;AAC/M;AAEA,SAAS,UAAU,SAAkB,SAA+B;AAClE,QAAM,WAAW,YAAY,SACzB,IAAI,SAAS,QAAQ,KAAK,IAAI,SAAS,OAAO,IAC9C,YAAY,iBAAkB,YAAY,SAAS,QAAQ,IAAI,SAAS,KAAK,CAAC,IAC5E,IAAI,SAAS,OAAO,IACpB,IAAI,SAAS,IAAI;AACvB,QAAM,UAAU,IAAI,SAAS,SAAS;AACtC,QAAM,cAAc,IAAI,SAAS,UAAU,IACvC,EAAE,GAAG,QAAQ,KAAK,uBAAuB,IAAI,SAAS,UAAU,EAAE,IAClE,QAAQ;AACZ,QAAM,SAAS,oBAAoB,aAAa,QAAQ;AACxD,MAAI,CAAC,WAAW,YAAY,OAAO,UAAU,UAAW,QAAO;AAC/D,MAAI,OAAO,aAAa,WAAW;AACjC,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO;AAAA,IACL,EAAE,GAAG,aAAa,wBAAwB,QAAQ;AAAA,IAClD;AAAA,EACF;AACF;AACA,SAAS,MAAM,SAAkB,aAAqC;AACpE,QAAM,UAAU,IAAI,SAAS,SAAS,KAAK,YAAY,KAAK,GAAG;AAC/D,QAAM,gBAAgB,KAAK,SAAS,UAAU;AAC9C,MAAI,kBAAkB,WACpB,kBAAkB,QAAQ,OAAO,kBAAkB,YAAY,MAAM,QAAQ,aAAa,GACzF,OAAM,IAAI,MAAM,kCAAkC;AACrD,QAAM,WAAY,iBAAiB,CAAC;AACpC,QAAM,WAAW,OAAO,SAAS,qBAAqB,YAAY,SAAS,mBACvE,EAAE,GAAG,SAAS,iBAA4C,IAC1D,CAAC;AACL,MAAI,IAAI,SAAS,aAAa,EAAG,UAAS,cAAc,IAAI,SAAS,aAAa;AAClF,MAAI,IAAI,SAAS,oBAAoB,EAAG,UAAS,qBAAqB,IAAI,SAAS,oBAAoB;AACvG,MAAI,OAAO,KAAK,QAAQ,EAAE,OAAQ,UAAS,mBAAmB;AAC9D,SAAO;AAAA,IACL,MAAM,IAAI,SAAS,MAAM,KAAK,IAAI,SAAS,MAAM,KAAK,IAAI,SAAS,UAAU,KAAK;AAAA,IAAe;AAAA,IACjG,SAAS,CAAC,GAAG,KAAK,SAAS,QAAQ,GAAG,GAAG,KAAK,SAAS,cAAc,GAAG,GAAG,KAAK,SAAS,eAAe,CAAC;AAAA,IACzG,UAAU,IAAI,SAAS,UAAU;AAAA,IAA+B,UAAU,IAAI,SAAS,WAAW;AAAA,IAAG,WAAW,IAAI,SAAS,aAAa;AAAA,IAC1I,eAAe,IAAI,SAAS,gBAAgB;AAAA,IAAG,aAAa,IAAI,SAAS,cAAc;AAAA,IACvF,IAAI,IAAI,SAAS,YAAY;AAAA,IAAG,gBAAgB,IAAI,SAAS,iBAAiB;AAAA,IAAG,WAAW,IAAI,SAAS,YAAY;AAAA,IACrH,aAAa,IAAI,SAAS,cAAc,KAAK,IAAI,SAAS,cAAc;AAAA,IAAG,gBAAgB,IAAI,SAAS,kBAAkB;AAAA,IAAG,YAAY,KAAK,SAAS,aAAa;AAAA,IACpK,MAAO,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,SAAS;AAAA,IACvD;AAAA,EACF;AACF;AAEA,eAAe,YAA2B;AACxC,QAAM,YAAY,YAAYF,MAAK,OAAO,GAAG,oBAAoB,CAAC;AAAG,QAAM,eAAeA,MAAK,WAAW,cAAc;AACxH,QAAM,OAAO,EAAE,UAAU,SAAkB,cAAc,kBAAkBA,MAAK,WAAW,cAAc,GAAG,YAAYA,MAAK,WAAW,QAAQ,GAAG,YAAYA,MAAK,WAAW,QAAQ,GAAG,YAAY,QAAW,KAAK,OAAU;AAChO,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,aAAS,MAAM,oBAAoB,EAAE,GAAG,MAAM,WAAW,EAAE,WAAW,QAAQ,OAAO,eAAe,UAAU,WAAW,EAAE,CAAC;AAC5H,UAAM,OAAO,MAAM,OAAO,QAAQ,QAAQ,OAAO,OAAO,WAAW,EAAE,MAAM,WAAW,SAAS,4BAA4B,SAAS,CAAC,aAAa,GAAG,gBAAgB,eAAe,CAAC;AACrL,UAAM,OAAO,MAAM;AACnB,aAAS;AACT,aAAS,MAAM,oBAAoB,EAAE,GAAG,MAAM,WAAW,EAAE,WAAW,QAAQ,OAAO,eAAe,UAAU,WAAW,EAAE,CAAC;AAC5H,UAAM,UAAU,MAAM,OAAO,QAAQ,QAAQ,OAAO,OAAO,SAAS;AACpE,UAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,OAAO,OAAO,WAAW,EAAE,SAAS,IAAM,CAAC;AACpF,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,mBAAmB;AAC/C,UAAM,QAAQ,MAAM,OAAO,QAAQ,IAAI,OAAO,OAAO,WAAW,MAAM,SAAS,IAAI,MAAM,UAAU;AACnG,WAAO,EAAE,QAAQ,MAAM,YAAY,CAAC,eAAe,aAAa,GAAG,MAAM,KAAK,SAAS,MAAM,QAAQ,SAAS,WAAW,GAAG,SAAS,MAAM,SAAS,UAAU,WAAW,cAAc,OAAO,UAAU,QAAQ,CAAC;AAAA,EACnN,UAAE;AACA,UAAM,QAAQ,MAAM;AACpB,UAAM,QAAQ,MAAM;AACpB,IAAAE,QAAO,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACpD;AACF;AAEA,eAAsB,OAAO,OAAO,QAAQ,KAAK,MAAM,CAAC,GAAkB;AACxE,QAAM,EAAE,SAAS,KAAK,SAAS,YAAY,IAAI,MAAM,IAAI;AAAG,QAAM,UAAW,EAAE,MAAM,QAAQ,KAAK,SAAS,SAAS,cAAc,EAA6B,GAAG,KAAK;AACvK,MAAI,CAAC,QAAQ,MAAM,QAAQ,EAAE,SAAS,OAAO,GAAG;AAAE,SAAK;AAAG;AAAA,EAAQ;AAClE,uBAAqB,OAAO;AAC5B,MAAI,YAAY,WAAW;AACzB,QAAI,YAAY,CAAC,MAAM,aAAa,CAAC,YAAY,CAAC,GAAG;AACnD,YAAM,IAAI,MAAM,iEAAiE;AAAA,IACnF;AACA,UAAMC,WAAU,YAAY,CAAC;AAC7B,QAAI,CAAC,CAAC,SAAS,eAAe,gBAAgB,EAAE,SAASA,QAAO,GAAG;AACjE,YAAM,IAAI,MAAM,gCAAgCA,QAAO,EAAE;AAAA,IAC3D;AACA,UAAM,QAAQ,IAAI,SAAS,OAAO;AAClC,QAAI,SAAS,CAAC,CAAC,SAAS,QAAQ,SAAS,EAAE,SAAS,KAAK,GAAG;AAC1D,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,WAAO,cAAcA,UAAS,IAAI,SAAS,UAAU,KAAK,IAAI;AAAA,MAC5D,SAAS,IAAI,SAAS,SAAS;AAAA,MAC/B;AAAA,MACA,UAAU,IAAI,SAAS,UAAU;AAAA,MACjC,OAAO,IAAI,SAAS,OAAO;AAAA,MAC3B,KAAK,QAAQ;AAAA,IACf,CAAC,CAAC;AACF;AAAA,EACF;AACA,MAAI,YAAY,QAAQ;AAAE,UAAM,UAAU;AAAG;AAAA,EAAQ;AACrD,MAAI,YAAY,QAAQ;AAAE,UAAM,WAAW,OAAO;AAAG;AAAA,EAAQ;AAC7D,MAAI,YAAY,WAAW;AACzB,UAAM,cAAc,QAAQ,IAAI;AAChC,QAAI,CAAC,YAAa,OAAM,IAAI,MAAM,uCAAuC;AACzE,UAAM,OAAO,IAAI,GAAG,KAAK,EAAE,kBAAkB,aAAa,KAAK,EAAE,CAAC;AAClE,QAAI;AACF,YAAM,UAAU,MAAM;AAAA,QACpB;AAAA,QACA,cAAc,IAAI,IAAI,qBAAqB,YAAY,GAAG,CAAC;AAAA,MAC7D;AACA,aAAO,EAAE,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAClC,UAAE;AAAU,YAAM,KAAK,IAAI;AAAA,IAAG;AAC9B;AAAA,EACF;AACA,QAAM,SAAS,UAAU,SAAS,OAAO;AAAG,QAAM,UAAU,MAAM,oBAAoB,MAAM;AAC5F,MAAI;AACF,QAAI,YAAY,YAAY,YAAY,UAAU;AAAE,YAAM,cAAc,MAAM,QAAQ,MAAM,cAAc,OAAO,SAAS,KAAK,EAAE,eAAe,OAAO,aAAa,oBAAoB,cAAc,YAAY,mBAAmB,OAAO,SAAS,MAAM,SAAS,MAAM,UAAU,MAAM,MAAM,KAAK;AAAG,aAAO,EAAE,QAAQ,MAAM,WAAW,MAAM,UAAU,OAAO,UAAU,WAAW,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,UAAU,OAAO,UAAU,YAAY,MAAM,eAAe,YAAY,eAAe,UAAU,OAAO,OAAO,MAAM,UAAU,OAAO,aAAa,UAAU,OAAO,eAAe,MAAM,YAAY,OAAO,YAAY,YAAY,OAAO,OAAO,UAAU,KAAK,MAAM,OAAO,YAAY,CAAC;AAAG;AAAA,IAAQ;AACvtB,QAAI,YAAY,WAAW;AACzB,YAAM,cAAc,MAAM,QAAQ,MAAM,cAAc,OAAO,SAAS;AACtE,YAAM,OAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,WAAW;AAAA,QAC3D,OAAO;AAAA,QACP,kBAAkB,OAAO,UAAU;AAAA,MACrC,CAAC;AACD,YAAM,oBAAoB,aAAa,WAAW;AAClD,YAAM,qBAAqB,aAAa,YAAY;AACpD,YAAM,SAAS,aAAa,oBACxB,KAAK,MAAM,YAAY,iBAAiB,IACxC,OAAO;AACX,YAAM,oBAAoB,oBAAoB,KAC3C,qBAAqB,KAAK,UAAU,KAAK,IAAI;AAChD,YAAM,SAAS,KAAK,SAAS,SAAS;AACtC,YAAM,YAAY,qBAAqB;AACvC,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,UAAU;AAAA,QACV,eAAe,CAAC,eAAe,EAAE,qBAAqB,gBACpD,YAAY,oBAAoB;AAAA,MACpC,CAAC;AACD,UAAI,CAAC,UAAW,SAAQ,WAAW;AACnC;AAAA,IACF;AACA,QAAI,YAAY,QAAQ;AAAE,aAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,WAAW,MAAM,SAAS,WAAW,CAAC,CAAC;AAAG;AAAA,IAAQ;AACxH,QAAI,YAAY,QAAQ;AAAE,aAAO,MAAM,QAAQ,QAAQ,UAAU,OAAO,WAAW,EAAE,SAAS,QAAQ,SAAS,YAAY,GAAM,GAAG,aAAa,IAAI,SAAS,SAAS,GAAG,cAAc,KAAK,SAAS,YAAY,EAAE,CAAC,CAAC;AAAG;AAAA,IAAQ;AACjO,QAAI,YAAY,YAAY;AAAE,aAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,SAAS,OAAO,SAAS,EAAE,CAAC;AAAG;AAAA,IAAQ;AAC5G,QAAI,YAAY,QAAQ;AACtB,UAAI,CAAC,QAAQ,MAAM,KAAM,OAAM,IAAI,MAAM,kDAAkD;AAC3F,aAAO,MAAM,QAAQ,MAAM,KAAK;AAAA,QAC9B,SAAS,QAAQ,SAAS,YAAY,QAAQ,SAAS,SAAS,GAAG,CAAC;AAAA,QACpE,UAAU,QAAQ,SAAS,aAAa,EAAE;AAAA,MAC5C,CAAC,CAAC;AACF;AAAA,IACF;AACA,QAAI,YAAY,aAAa,YAAY,SAAS;AAAE,YAAM,OAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,WAAW,EAAE,QAAQ,IAAI,SAAS,QAAQ,GAAG,OAAO,QAAQ,SAAS,SAAS,EAAE,GAAG,OAAO,KAAK,SAAS,MAAM,EAAE,OAAO,KAAK,SAAS,UAAU,CAAC,GAAG,QAAQ,IAAI,SAAS,QAAQ,GAAG,OAAO,MAAM,OAAO,GAAG,kBAAkB,IAAI,SAAS,YAAY,GAAG,UAAU,IAAI,SAAS,WAAW,GAAG,QAAQ,QAAQ,MAAM,CAAC;AAAG,UAAI,QAAQ,OAAO;AAAE,eAAO,KAAK,SAAS,IAAI,CAAC,aAAa,EAAE,IAAI,OAAO,aAAa,oBAAoB,OAAO,QAAQ,QAAQ,IAAI,QAAQ,IAAI,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,MAAM,SAAS,QAAQ,SAAS,UAAU,QAAQ,UAAU,SAAS,QAAQ,cAAc,MAAM,OAAO,QAAQ,WAAW,UAAU,sBAAsB,OAAO,GAAG,YAAY,QAAQ,UAAU,EAAE,CAAC;AAAA,MAAG,MAAO,QAAO,IAAI;AAAG;AAAA,IAAQ;AAC9zB,QAAI,YAAY,iBAAkB,YAAY,SAAS,IAAI,SAAS,KAAK,GAAI;AAC3E,YAAM,SAAS,KAAK,SAAS,KAAK;AAClC,YAAM,eAAe,OAAO,aAAa,qBACrC,QAAQ,MAAM,uBAAuB,OAAO,MAAM,CAAC,OAAO,QAAQ,KAAK,EAAE,CAAC,IAC1E,MAAM,QAAQ,MAAM,oBAAoB,QAAQ,OAAO,UAAU,KAAK,IACtE,MAAM,QAAQ,QAAQ;AAAA,QACpB,OAAO;AAAA,QACP,OAAO,IAAI,sBAAsB;AAAA,MACnC;AACJ,aAAO,EAAE,cAAc,OAAO,OAAO,UAAU,MAAM,CAAC;AACtD;AAAA,IACF;AACA,QAAI,YAAY,SAAS;AAAE,aAAO,MAAM,QAAQ,QAAQ,MAAM,OAAO,WAAW,EAAE,SAAS,QAAQ,SAAS,YAAY,GAAM,GAAG,aAAa,QAAQ,SAAS,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAAG;AAAA,IAAQ;AAC/L,UAAM,aAAa,IAAI,SAAS,aAAa,KAAK,YAAY,CAAC;AAAG,UAAM,aAAa,IAAI,SAAS,aAAa,KAAK,YAAY,CAAC;AACjI,QAAI,CAAC,cAAc,CAAC,YAAY;AAAE,UAAI,CAAC,UAAU,OAAO,MAAM,EAAE,SAAS,OAAO,EAAG,OAAM,IAAI,MAAM,8CAA8C;AAAA,IAAG;AACpJ,QAAI,YAAY,UAAU;AAAE,aAAO,MAAM,QAAQ,QAAQ,OAAO,OAAO,WAAW,YAAa,YAAa,QAAQ,SAAS,YAAY,GAAM,CAAC,CAAC;AAAG;AAAA,IAAQ;AAC5J,QAAI,YAAY,OAAO;AAAE,aAAO,MAAM,QAAQ,QAAQ,IAAI,OAAO,WAAW,YAAa,UAAW,CAAC;AAAG;AAAA,IAAQ;AAChH,QAAI,YAAY,QAAQ;AAAE,aAAO,MAAM,QAAQ,QAAQ,KAAK,OAAO,WAAW,YAAa,YAAa,IAAI,SAAS,OAAO,KAAK,2BAA2B,QAAQ,SAAS,MAAM,CAAC,CAAC;AAAG;AAAA,IAAQ;AAChM,QAAI,YAAY,SAAS;AACvB,YAAM,QAAQ,IAAI,SAAS,OAAO,MAAM,SAAY,OAAO,oBAAoB,QAAQ,SAAS,SAAS,CAAC;AAC1G,YAAM,eAAe,KAAK,IAAI,QAAQ,SAAS,eAAe,GAAK,GAAG,GAAM;AAC5E,YAAM,cAAc,KAAK,IAAI,cAAc,KAAK,IAAI,QAAQ,SAAS,mBAAmB,GAAM,GAAG,GAAO,CAAC;AACzG,UAAI,WAAW;AACf,UAAI,UAAU,OAAO,OAAO,UAAU;AACtC,UAAI,OAAO;AACX,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,YAAI;AACF,gBAAM,OAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,WAAW,EAAE,QAAQ,SAAS,OAAO,QAAQ,SAAS,SAAS,EAAE,EAAE,CAAC;AACtH,qBAAW,WAAW,KAAK,SAAU,QAAO,OAAO;AACnD,kBAAQ,KAAK,SAAS;AACtB,oBAAU,KAAK;AACf,qBAAW,OAAO,YAAY,OAAO;AACrC,qBAAW,KAAK,SAAS,SAAS,eAAe,KAAK,IAAI,aAAa,KAAK,IAAI,cAAc,WAAW,CAAC,CAAC;AAAA,QAC7G,SAAS,OAAO;AACd,gBAAM,SAAS,iBAAiB,mBAAmB,iBAAiB,sBAChE,MAAM,SACN;AACJ,gBAAM,YAAY,WAAW,WAC1B,WAAW,KAAK,WAAW,OAAO,WAAW,OAAO,WAAW,OAAO,UAAU;AACnF,cAAI,CAAC,UAAW,OAAM;AACtB,qBAAW,KAAK,IAAI,aAAa,KAAK,IAAI,cAAc,WAAW,CAAC,CAAC;AAAA,QACvE;AACA,YAAI,IAAI,IAAI,OAAO;AACjB,gBAAM,WAAW,KAAK,MAAM,YAAY,MAAM,KAAK,OAAO,IAAI,IAAI;AAClE,gBAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,QAAQ,CAAC;AAAA,QAC9D;AAAA,MACF;AACA,UAAI,CAAC,QAAQ,QAAQ,SAAS,MAAM,EAAG,QAAO,EAAE,QAAQ,MAAM,UAAU,GAAG,QAAQ,WAAW,KAAK,CAAC;AACpG;AAAA,IACF;AACA,UAAM,IAAI,MAAM,oBAAoB,GAAG,EAAE;AAAA,EAC3C,UAAE;AAAU,UAAM,QAAQ,MAAM;AAAA,EAAG;AACrC;AAEA,IAAI,QAAQ,KAAK,CAAC,KAAK,YAAY,QAAQ,cAAc,QAAQ,KAAK,CAAC,CAAC,EAAE,KAAM,QAAO,EAAE,MAAM,CAAC,UAAU;AAAE,UAAQ,OAAO,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,CAAI;AAAG,UAAQ,WAAW;AAAG,CAAC;","names":["existsSync","mkdirSync","readFileSync","renameSync","rmSync","writeFileSync","dirname","join","homedir","readFileSync","mkdirSync","dirname","writeFileSync","renameSync","homedir","join","existsSync","rmSync","runtime"]}
@@ -0,0 +1,30 @@
1
+ import { c as BridgePrincipal } from './bridge-domain-BcnBeHOn.js';
2
+
3
+ type ClientProvider = "local" | "gateway" | "legacy-supabase";
4
+ interface ClientEnvironment extends NodeJS.ProcessEnv {
5
+ AGENT_BRIDGE_PROVIDER?: string;
6
+ AGENT_BRIDGE_URL?: string;
7
+ AGENT_BRIDGE_KEY?: string;
8
+ AGENT_BRIDGE_TOKEN?: string;
9
+ AGENT_BRIDGE_AGENT?: string;
10
+ AGENT_BRIDGE_WORKSPACE?: string;
11
+ AGENT_BRIDGE_INSTANCE?: string;
12
+ AGENT_BRIDGE_DB?: string;
13
+ AGENT_BRIDGE_EDGE_DB?: string;
14
+ AGENT_BRIDGE_CONFIG?: string;
15
+ AGENT_BRIDGE_CURSOR?: string;
16
+ }
17
+ interface ClientConfig {
18
+ provider: ClientProvider;
19
+ principal: BridgePrincipal;
20
+ url?: string;
21
+ credential?: string;
22
+ databasePath: string;
23
+ edgeDatabasePath: string;
24
+ cursorPath: string;
25
+ configPath: string;
26
+ }
27
+ declare function readClientConfigFile(path: string): Record<string, string>;
28
+ declare function resolveClientConfig(env?: ClientEnvironment, explicitAgent?: string): ClientConfig;
29
+
30
+ export { type ClientConfig, type ClientEnvironment, type ClientProvider, readClientConfigFile, resolveClientConfig };
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ readClientConfigFile,
4
+ resolveClientConfig
5
+ } from "./chunk-KVR4JBRF.js";
6
+ export {
7
+ readClientConfigFile,
8
+ resolveClientConfig
9
+ };
10
+ //# sourceMappingURL=client-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,15 @@
1
+ import { B as BridgeService } from './bridge-service-CfqMcMAn.js';
2
+ import { a as BridgeStore } from './bridge-store-BuGjxTn4.js';
3
+ import { ClientConfig } from './client-config.js';
4
+ import './bridge-domain-BcnBeHOn.js';
5
+
6
+ interface ClientRuntime {
7
+ config: ClientConfig;
8
+ store: BridgeStore;
9
+ service: BridgeService;
10
+ close(): Promise<void>;
11
+ }
12
+ declare function createStore(config: ClientConfig): BridgeStore;
13
+ declare function createClientRuntime(config: ClientConfig): Promise<ClientRuntime>;
14
+
15
+ export { type ClientRuntime, createClientRuntime, createStore };
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ createClientRuntime,
4
+ createStore
5
+ } from "./chunk-JTC5YURG.js";
6
+ import "./chunk-AXL2I7FH.js";
7
+ import "./chunk-WEULPMUY.js";
8
+ import "./chunk-YD6YJATN.js";
9
+ import "./chunk-CKSKUBDQ.js";
10
+ import "./chunk-BV6W4AJK.js";
11
+ export {
12
+ createClientRuntime,
13
+ createStore
14
+ };
15
+ //# sourceMappingURL=client-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,54 @@
1
+ import * as node_http from 'node:http';
2
+ import { IncomingMessage, ServerResponse } from 'node:http';
3
+ import { a as BridgeStore, I as InsertMessageResult, b as MessageQuery, M as MessagePage, C as ClaimOptions, B as BridgeDiagnostics } from './bridge-store-BuGjxTn4.js';
4
+ import { b as BridgeMessage, c as BridgePrincipal, B as BridgeDelivery, R as RetryPolicy, A as AgentPresence, a as BridgeDeliveryEvent } from './bridge-domain-BcnBeHOn.js';
5
+
6
+ interface PgQueryable {
7
+ query<T extends Record<string, unknown> = Record<string, unknown>>(sql: string, values?: unknown[]): Promise<{
8
+ rows: T[];
9
+ rowCount: number | null;
10
+ }>;
11
+ }
12
+ declare class PostgresBridgeStore implements BridgeStore {
13
+ private readonly db;
14
+ constructor(db: PgQueryable);
15
+ initialize(): Promise<void>;
16
+ insertMessage(input: Omit<BridgeMessage, "sequence" | "createdAt">): Promise<InsertMessageResult>;
17
+ listMessages(principal: BridgePrincipal, query?: MessageQuery): Promise<MessagePage>;
18
+ recordReceipt(workspace: string, ids: string[], principal: string, readAt?: Date): Promise<number>;
19
+ claimDelivery(principal: BridgePrincipal, options: ClaimOptions): Promise<BridgeDelivery | null>;
20
+ renewDelivery(principal: BridgePrincipal, id: string, token: string, leaseMs: number): Promise<BridgeDelivery | null>;
21
+ settleDelivery(principal: BridgePrincipal, id: string, token: string, state: "acked" | "retrying" | "dead", error?: string, retryPolicy?: RetryPolicy): Promise<BridgeDelivery | null>;
22
+ diagnostics(principal: BridgePrincipal): Promise<BridgeDiagnostics>;
23
+ heartbeat(principal: BridgePrincipal, leaseMs: number, runtimeType?: string, capabilities?: string[]): Promise<AgentPresence>;
24
+ listPresence(principal: BridgePrincipal): Promise<AgentPresence[]>;
25
+ listDeliveryEvents(deliveryId: string): Promise<BridgeDeliveryEvent[]>;
26
+ }
27
+
28
+ interface AuthenticatedCredential {
29
+ id: string;
30
+ principal: BridgePrincipal;
31
+ }
32
+ interface CredentialResolver {
33
+ resolve(token: string, signal?: AbortSignal): Promise<AuthenticatedCredential | null>;
34
+ }
35
+ declare function hashCredential(token: string): string;
36
+ declare class PostgresCredentialResolver implements CredentialResolver {
37
+ private readonly db;
38
+ constructor(db: PgQueryable);
39
+ resolve(token: string, signal?: AbortSignal): Promise<AuthenticatedCredential | null>;
40
+ }
41
+ declare function bearerToken(value: string | undefined): string | null;
42
+ declare function safeTokenHashEqual(token: string, expectedHash: string): boolean;
43
+
44
+ interface GatewayOptions {
45
+ store: BridgeStore;
46
+ credentials: CredentialResolver;
47
+ allowedOrigins?: string[];
48
+ bodyLimitBytes?: number;
49
+ requestDeadlineMs?: number;
50
+ ready?: () => Promise<boolean>;
51
+ }
52
+ declare function createGateway(options: GatewayOptions): node_http.Server<typeof IncomingMessage, typeof ServerResponse>;
53
+
54
+ export { type AuthenticatedCredential as A, type CredentialResolver as C, type GatewayOptions as G, type PgQueryable as P, PostgresBridgeStore as a, PostgresCredentialResolver as b, bearerToken as c, createGateway as d, hashCredential as h, safeTokenHashEqual as s };
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ PostgresBridgeStore
4
+ } from "./chunk-O26W5QHS.js";
5
+ import {
6
+ loadMigrationPlan,
7
+ migrationsReady,
8
+ runMigrations,
9
+ runtimeSchemaReady
10
+ } from "./chunk-6MAZ6YLZ.js";
11
+ import {
12
+ PostgresCredentialResolver,
13
+ createGateway
14
+ } from "./chunk-JOUBDRYX.js";
15
+ import "./chunk-YD6YJATN.js";
16
+ import "./chunk-CKSKUBDQ.js";
17
+ import "./chunk-BV6W4AJK.js";
18
+
19
+ // src/gateway-main.ts
20
+ import { fileURLToPath } from "url";
21
+ import pg from "pg";
22
+ function integer(value, fallback, name) {
23
+ if (value === void 0) return fallback;
24
+ const parsed = Number(value);
25
+ if (!Number.isSafeInteger(parsed) || parsed < 1) throw new Error(`${name} must be a positive integer`);
26
+ return parsed;
27
+ }
28
+ async function main() {
29
+ const migrationsDirectory = fileURLToPath(new URL("../sql/migrations", import.meta.url));
30
+ if (process.argv.includes("--migrate-only")) {
31
+ const databaseUrl2 = process.env.AGENT_BRIDGE_DATABASE_URL;
32
+ if (!databaseUrl2) throw new Error("AGENT_BRIDGE_DATABASE_URL is required for migrations");
33
+ const migrationPool = new pg.Pool({
34
+ connectionString: databaseUrl2,
35
+ max: 1,
36
+ application_name: "agent-bridge-migrator"
37
+ });
38
+ try {
39
+ await runMigrations(migrationPool, migrationsDirectory);
40
+ } finally {
41
+ await migrationPool.end();
42
+ }
43
+ return;
44
+ }
45
+ if (process.env.AGENT_BRIDGE_MIGRATE === "1") {
46
+ throw new Error("AGENT_BRIDGE_MIGRATE is not supported; run agent-bridge migrate separately");
47
+ }
48
+ const databaseUrl = process.env.AGENT_BRIDGE_RUNTIME_DATABASE_URL;
49
+ if (!databaseUrl) {
50
+ throw new Error("AGENT_BRIDGE_RUNTIME_DATABASE_URL is required for the gateway");
51
+ }
52
+ const deadline = integer(process.env.AGENT_BRIDGE_REQUEST_DEADLINE_MS, 1e4, "request deadline");
53
+ const databaseTimeout = integer(
54
+ process.env.AGENT_BRIDGE_DATABASE_TIMEOUT_MS,
55
+ Math.max(1, Math.floor(deadline / 3)),
56
+ "database timeout"
57
+ );
58
+ const poolSize = integer(process.env.AGENT_BRIDGE_DATABASE_POOL_SIZE, 10, "database pool size");
59
+ const bodyLimitBytes = integer(
60
+ process.env.AGENT_BRIDGE_BODY_LIMIT_BYTES,
61
+ 128 * 1024,
62
+ "body limit"
63
+ );
64
+ const host = process.env.AGENT_BRIDGE_HOST ?? "127.0.0.1";
65
+ const port = integer(process.env.AGENT_BRIDGE_PORT, 8787, "gateway port");
66
+ const allowedOrigins = process.env.AGENT_BRIDGE_ALLOWED_ORIGINS?.split(",").map((origin) => origin.trim()).filter(Boolean);
67
+ const migrationPlan = await loadMigrationPlan(migrationsDirectory);
68
+ const pool = new pg.Pool({
69
+ connectionString: databaseUrl,
70
+ max: poolSize,
71
+ query_timeout: databaseTimeout,
72
+ statement_timeout: databaseTimeout,
73
+ application_name: "agent-bridge-gateway"
74
+ });
75
+ const store = new PostgresBridgeStore(pool);
76
+ const gateway = createGateway({
77
+ store,
78
+ credentials: new PostgresCredentialResolver(pool),
79
+ allowedOrigins,
80
+ bodyLimitBytes,
81
+ requestDeadlineMs: deadline,
82
+ ready: async () => await migrationsReady(pool, migrationPlan) && await runtimeSchemaReady(pool)
83
+ });
84
+ gateway.listen(port, host, () => {
85
+ process.stderr.write(`Agent Bridge gateway listening on ${host}:${port}
86
+ `);
87
+ });
88
+ let stopping = false;
89
+ async function shutdown() {
90
+ if (stopping) return;
91
+ stopping = true;
92
+ await new Promise((resolve, reject) => {
93
+ gateway.close((error) => error ? reject(error) : resolve());
94
+ });
95
+ await pool.end();
96
+ }
97
+ process.once("SIGINT", () => void shutdown());
98
+ process.once("SIGTERM", () => void shutdown());
99
+ }
100
+ void main().catch((error) => {
101
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}
102
+ `);
103
+ process.exitCode = 1;
104
+ });
105
+ //# sourceMappingURL=gateway-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gateway-main.ts"],"sourcesContent":["import { fileURLToPath } from \"node:url\";\nimport pg from \"pg\";\nimport { PostgresCredentialResolver } from \"./gateway-auth.js\";\nimport { createGateway } from \"./gateway.js\";\nimport {\n loadMigrationPlan,\n migrationsReady,\n runMigrations,\n runtimeSchemaReady,\n} from \"./migrations.js\";\nimport { PostgresBridgeStore } from \"./postgres-bridge-store.js\";\n\nfunction integer(value: string | undefined, fallback: number, name: string): number {\n if (value === undefined) return fallback;\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed) || parsed < 1) throw new Error(`${name} must be a positive integer`);\n return parsed;\n}\n\nasync function main(): Promise<void> {\n const migrationsDirectory = fileURLToPath(new URL(\"../sql/migrations\", import.meta.url));\n if (process.argv.includes(\"--migrate-only\")) {\n const databaseUrl = process.env.AGENT_BRIDGE_DATABASE_URL;\n if (!databaseUrl) throw new Error(\"AGENT_BRIDGE_DATABASE_URL is required for migrations\");\n const migrationPool = new pg.Pool({\n connectionString: databaseUrl,\n max: 1,\n application_name: \"agent-bridge-migrator\",\n });\n try {\n await runMigrations(migrationPool, migrationsDirectory);\n } finally {\n await migrationPool.end();\n }\n return;\n }\n if (process.env.AGENT_BRIDGE_MIGRATE === \"1\") {\n throw new Error(\"AGENT_BRIDGE_MIGRATE is not supported; run agent-bridge migrate separately\");\n }\n const databaseUrl = process.env.AGENT_BRIDGE_RUNTIME_DATABASE_URL;\n if (!databaseUrl) {\n throw new Error(\"AGENT_BRIDGE_RUNTIME_DATABASE_URL is required for the gateway\");\n }\n\n const deadline = integer(process.env.AGENT_BRIDGE_REQUEST_DEADLINE_MS, 10_000, \"request deadline\");\n const databaseTimeout = integer(\n process.env.AGENT_BRIDGE_DATABASE_TIMEOUT_MS,\n Math.max(1, Math.floor(deadline / 3)),\n \"database timeout\",\n );\n const poolSize = integer(process.env.AGENT_BRIDGE_DATABASE_POOL_SIZE, 10, \"database pool size\");\n const bodyLimitBytes = integer(\n process.env.AGENT_BRIDGE_BODY_LIMIT_BYTES,\n 128 * 1024,\n \"body limit\",\n );\n const host = process.env.AGENT_BRIDGE_HOST ?? \"127.0.0.1\";\n const port = integer(process.env.AGENT_BRIDGE_PORT, 8787, \"gateway port\");\n const allowedOrigins = process.env.AGENT_BRIDGE_ALLOWED_ORIGINS\n ?.split(\",\")\n .map((origin) => origin.trim())\n .filter(Boolean);\n const migrationPlan = await loadMigrationPlan(migrationsDirectory);\n const pool = new pg.Pool({\n connectionString: databaseUrl,\n max: poolSize,\n query_timeout: databaseTimeout,\n statement_timeout: databaseTimeout,\n application_name: \"agent-bridge-gateway\",\n });\n\n const store = new PostgresBridgeStore(pool);\n const gateway = createGateway({\n store,\n credentials: new PostgresCredentialResolver(pool),\n allowedOrigins,\n bodyLimitBytes,\n requestDeadlineMs: deadline,\n ready: async () =>\n await migrationsReady(pool, migrationPlan) && await runtimeSchemaReady(pool),\n });\n\n gateway.listen(port, host, () => {\n process.stderr.write(`Agent Bridge gateway listening on ${host}:${port}\\n`);\n });\n\n let stopping = false;\n async function shutdown(): Promise<void> {\n if (stopping) return;\n stopping = true;\n await new Promise<void>((resolve, reject) => {\n gateway.close((error) => error ? reject(error) : resolve());\n });\n await pool.end();\n }\n\n process.once(\"SIGINT\", () => void shutdown());\n process.once(\"SIGTERM\", () => void shutdown());\n}\n\nvoid main().catch((error) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":"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","names":["databaseUrl"]}
@@ -0,0 +1,4 @@
1
+ import 'node:http';
2
+ import './bridge-store-BuGjxTn4.js';
3
+ export { G as GatewayOptions, d as createGateway } from './gateway-BULozv3K.js';
4
+ import './bridge-domain-BcnBeHOn.js';
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ createGateway
4
+ } from "./chunk-JOUBDRYX.js";
5
+ import "./chunk-CKSKUBDQ.js";
6
+ import "./chunk-BV6W4AJK.js";
7
+ export {
8
+ createGateway
9
+ };
10
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+
2
+ export { }
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ startServer
4
+ } from "./chunk-4KAOBC5X.js";
5
+ import "./chunk-KVR4JBRF.js";
6
+ import "./chunk-JTC5YURG.js";
7
+ import "./chunk-AXL2I7FH.js";
8
+ import "./chunk-WEULPMUY.js";
9
+ import "./chunk-YD6YJATN.js";
10
+ import "./chunk-CKSKUBDQ.js";
11
+ import "./chunk-BV6W4AJK.js";
12
+
13
+ // src/index.ts
14
+ startServer().catch((err) => {
15
+ console.error("Failed to start agent-bridge MCP server:", err);
16
+ process.exit(1);
17
+ });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { startServer } from \"./server.js\";\n\nstartServer().catch((err) => {\n console.error(\"Failed to start agent-bridge MCP server:\", err);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;;;;;AAEA,YAAY,EAAE,MAAM,CAAC,QAAQ;AAC3B,UAAQ,MAAM,4CAA4C,GAAG;AAC7D,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
@@ -0,0 +1,34 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { ClientProvider } from './client-config.js';
3
+ import './bridge-domain-BcnBeHOn.js';
4
+
5
+ interface AgentBridgeServerConfig {
6
+ supabaseUrl?: string;
7
+ supabaseKey?: string;
8
+ agent?: string;
9
+ provider?: ClientProvider;
10
+ workspace?: string;
11
+ instance?: string;
12
+ databasePath?: string;
13
+ edgeDatabasePath?: string;
14
+ cursorPath?: string;
15
+ gatewayUrl?: string;
16
+ gatewayToken?: string;
17
+ }
18
+ interface AgentBridgeServerEnv {
19
+ AGENT_BRIDGE_URL?: string;
20
+ AGENT_BRIDGE_KEY?: string;
21
+ AGENT_BRIDGE_AGENT?: string;
22
+ AGENT_BRIDGE_CONFIG?: string;
23
+ HOME?: string;
24
+ AGENT_BRIDGE_PROVIDER?: string;
25
+ AGENT_BRIDGE_TOKEN?: string;
26
+ AGENT_BRIDGE_WORKSPACE?: string;
27
+ AGENT_BRIDGE_INSTANCE?: string;
28
+ AGENT_BRIDGE_DB?: string;
29
+ }
30
+ declare function configFromEnv(env?: AgentBridgeServerEnv): AgentBridgeServerConfig;
31
+ declare function createAgentBridgeServer(config: AgentBridgeServerConfig): Server;
32
+ declare function startServer(config?: AgentBridgeServerConfig): Promise<void>;
33
+
34
+ export { type AgentBridgeServerConfig, type AgentBridgeServerEnv, configFromEnv, createAgentBridgeServer, startServer };
package/dist/server.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ configFromEnv,
4
+ createAgentBridgeServer,
5
+ startServer
6
+ } from "./chunk-4KAOBC5X.js";
7
+ import "./chunk-KVR4JBRF.js";
8
+ import "./chunk-JTC5YURG.js";
9
+ import "./chunk-AXL2I7FH.js";
10
+ import "./chunk-WEULPMUY.js";
11
+ import "./chunk-YD6YJATN.js";
12
+ import "./chunk-CKSKUBDQ.js";
13
+ import "./chunk-BV6W4AJK.js";
14
+ export {
15
+ configFromEnv,
16
+ createAgentBridgeServer,
17
+ startServer
18
+ };
19
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}