@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/server.ts","../src/message-envelope.ts","../src/source-identity.ts"],"sourcesContent":["import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ErrorCode,\n ListToolsRequestSchema,\n McpError,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { homedir } from \"node:os\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\n\nimport { normalizeReceiptId } from \"./atrib-receipt.js\";\nimport {\n buildMessageEnvelope,\n filterContextRows,\n mergeEnvelopeMetadata,\n} from \"./message-envelope.js\";\nimport { resolveAgentIdentity, resolvePostSource } from \"./source-identity.js\";\nimport { BridgeService } from \"./bridge-service.js\";\nimport {\n BridgeValidationError,\n type BridgePrincipal,\n type MessageDraft,\n type RetryPolicy,\n} from \"./bridge-domain.js\";\nimport { createStore } from \"./client-runtime.js\";\nimport { legacyContextMetadata, legacyNumericMessageId } from \"./legacy-compat.js\";\nimport {\n readClientConfigFile,\n resolveClientConfig,\n type ClientConfig,\n type ClientEnvironment,\n type ClientProvider,\n} from \"./client-config.js\";\n\nexport interface AgentBridgeServerConfig {\n supabaseUrl?: string;\n supabaseKey?: string;\n agent?: string;\n provider?: ClientProvider;\n workspace?: string;\n instance?: string;\n databasePath?: string;\n edgeDatabasePath?: string;\n cursorPath?: string;\n gatewayUrl?: string;\n gatewayToken?: string;\n}\n\nconst packageVersion = (createRequire(import.meta.url)(\"../package.json\") as { version: string }).version;\n\nexport interface AgentBridgeServerEnv {\n AGENT_BRIDGE_URL?: string;\n AGENT_BRIDGE_KEY?: string;\n AGENT_BRIDGE_AGENT?: string;\n AGENT_BRIDGE_CONFIG?: string;\n HOME?: string;\n AGENT_BRIDGE_PROVIDER?: string;\n AGENT_BRIDGE_TOKEN?: string;\n AGENT_BRIDGE_WORKSPACE?: string;\n AGENT_BRIDGE_INSTANCE?: string;\n AGENT_BRIDGE_DB?: string;\n}\n\nfunction normalizedConfigValue(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed || undefined;\n}\n\nfunction defaultConfigPath(env: AgentBridgeServerEnv): string {\n return (\n normalizedConfigValue(env.AGENT_BRIDGE_CONFIG) ??\n join(normalizedConfigValue(env.HOME) ?? homedir(), \".agent-bridge\", \"config\")\n );\n}\n\nexport function configFromEnv(\n env: AgentBridgeServerEnv = process.env,\n): AgentBridgeServerConfig {\n const sharedFile = readClientConfigFile(defaultConfigPath(env));\n const value = (key: keyof AgentBridgeServerEnv) =>\n normalizedConfigValue(env[key]) ?? normalizedConfigValue(sharedFile[key]);\n const runtimeAgent = normalizedConfigValue(env.AGENT_BRIDGE_AGENT);\n const rawProvider = normalizedConfigValue(env.AGENT_BRIDGE_PROVIDER) ??\n normalizedConfigValue(sharedFile.AGENT_BRIDGE_PROVIDER);\n const provider = rawProvider === \"legacy\" || rawProvider === \"supabase\"\n ? \"legacy-supabase\"\n : rawProvider ?? (value(\"AGENT_BRIDGE_TOKEN\") ? \"gateway\" : \"legacy-supabase\");\n if (!([\"local\", \"gateway\", \"legacy-supabase\"] as string[]).includes(provider)) {\n throw new Error(`Unsupported AGENT_BRIDGE_PROVIDER: ${rawProvider}`);\n }\n if (provider === \"local\" || provider === \"gateway\") {\n const client = resolveClientConfig(env as ClientEnvironment);\n return {\n provider: client.provider,\n agent: client.principal.agent,\n workspace: client.principal.workspace,\n instance: client.principal.instance,\n databasePath: client.databasePath,\n edgeDatabasePath: client.edgeDatabasePath,\n cursorPath: client.cursorPath,\n gatewayUrl: client.provider === \"gateway\" ? client.url : undefined,\n gatewayToken: client.provider === \"gateway\" ? client.credential : undefined,\n };\n }\n const supabaseUrl =\n value(\"AGENT_BRIDGE_URL\");\n const supabaseKey =\n value(\"AGENT_BRIDGE_KEY\");\n if (!supabaseUrl || !supabaseKey) {\n throw new Error(\n \"Missing AGENT_BRIDGE_URL or AGENT_BRIDGE_KEY environment variables or ~/.agent-bridge/config\",\n );\n }\n return {\n supabaseUrl,\n supabaseKey,\n agent: runtimeAgent,\n provider: provider as ClientProvider,\n workspace: value(\"AGENT_BRIDGE_WORKSPACE\") ?? \"*\",\n instance: normalizedConfigValue(env.AGENT_BRIDGE_INSTANCE),\n };\n}\n\nfunction buildSupabaseRequest(config: AgentBridgeServerConfig & { supabaseUrl: string; supabaseKey: string }) {\n const parsed = new URL(config.supabaseUrl);\n const loopback = parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\" || parsed.hostname === \"[::1]\";\n if (parsed.protocol !== \"https:\" && !(parsed.protocol === \"http:\" && loopback)) {\n throw new Error(\"Agent Bridge requires HTTPS for non-loopback legacy providers\");\n }\n const restUrl = `${config.supabaseUrl.replace(/\\/$/, \"\")}/rest/v1`;\n const headers = {\n apikey: config.supabaseKey,\n Authorization: `Bearer ${config.supabaseKey}`,\n \"Content-Type\": \"application/json\",\n Prefer: \"return=representation\",\n };\n\n return async function supabaseRequest(\n path: string,\n options: RequestInit = {},\n ): Promise<unknown> {\n const url = `${restUrl}${path}`;\n const res = await fetch(url, {\n ...options,\n signal: options.signal ?? AbortSignal.timeout(10_000),\n headers: { ...headers, ...(options.headers as Record<string, string>) },\n });\n if (!res.ok) {\n throw new Error(`Supabase request failed (${res.status})`);\n }\n const text = await res.text();\n return text ? JSON.parse(text) : null;\n };\n}\n\nexport function createAgentBridgeServer(\n config: AgentBridgeServerConfig,\n): Server {\n const supabaseRequest = config.supabaseUrl && config.supabaseKey ? buildSupabaseRequest(config as AgentBridgeServerConfig & { supabaseUrl: string; supabaseKey: string }) : undefined;\n const principal: BridgePrincipal | undefined = config.agent ? { workspace: config.workspace ?? \"default\", agent: config.agent, instance: config.instance } : undefined;\n const clientConfig: ClientConfig | undefined = principal ? {\n provider: config.provider ?? (config.gatewayToken ? \"gateway\" : config.supabaseUrl ? \"legacy-supabase\" : \"local\"), principal,\n url: config.gatewayUrl ?? config.supabaseUrl, credential: config.gatewayToken ?? config.supabaseKey,\n databasePath: config.databasePath ?? \":memory:\", edgeDatabasePath: config.edgeDatabasePath ?? config.databasePath ?? \":memory:\", cursorPath: config.cursorPath ?? \"\", configPath: \"\",\n } : undefined;\n const store = clientConfig ? createStore(clientConfig) : undefined;\n const service = store ? new BridgeService(store) : undefined;\n const deliveryToolsAvailable = Boolean(\n service && clientConfig?.provider !== \"legacy-supabase\",\n );\n const server = new Server(\n { name: \"agent-bridge\", version: packageVersion },\n { capabilities: { tools: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [\n {\n name: \"post_context\",\n description:\n \"Post a shared context entry visible to all agents. Categories: operational, config-change, goal-update, flag, bridge-meta (for suggesting improvements to the Agent Bridge itself).\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n source: {\n type: \"string\",\n description:\n \"Optional posting agent. Defaults to AGENT_BRIDGE_AGENT when configured; an explicit value must match it.\",\n },\n category: {\n type: \"string\",\n description:\n \"Entry type: operational | config-change | goal-update | flag | bridge-meta\",\n },\n content: {\n type: \"string\",\n description: \"The context message\",\n },\n priority: {\n type: \"string\",\n description: \"info (default) | high | urgent\",\n },\n project: {\n type: \"string\",\n description:\n \"Scope to a project (e.g. project-a, project-b). Omit for cross-project.\",\n },\n metadata: {\n type: \"object\",\n description: \"Arbitrary structured data\",\n },\n message_id: {\n type: \"string\",\n description:\n \"Stable message id. Generated by the bridge when omitted.\",\n },\n target_agents: {\n type: \"array\",\n items: { type: \"string\" },\n description:\n \"Optional target agent names. Empty or omitted means broadcast.\",\n },\n thread_id: {\n type: \"string\",\n description: \"Optional conversation/thread id.\",\n },\n reply_to_id: {\n type: \"string\",\n description: \"Optional parent message id for reply threading.\",\n },\n kind: {\n type: \"string\",\n description:\n \"Message kind: operational | config-change | goal-update | flag | bridge-meta | handoff | request | result\",\n },\n payload_mime: {\n type: \"string\",\n description:\n \"Payload MIME type. Defaults to text/plain for the content column.\",\n },\n payload: {\n anyOf: [\n { type: \"object\" },\n { type: \"array\" },\n { type: \"string\" },\n { type: \"number\" },\n { type: \"boolean\" },\n { type: \"null\" },\n ],\n description:\n \"Optional structured payload stored in metadata.message_envelope.\",\n },\n payload_ref: {\n type: \"string\",\n description: \"Optional external blob pointer for large payloads.\",\n },\n payload_ciphertext: {\n type: \"string\",\n description:\n \"Optional inline encrypted payload for small encrypted messages.\",\n },\n informed_by: {\n type: \"array\",\n items: { type: \"string\" },\n description:\n \"Optional atrib record hashes (sha256:<64-hex>) this message depends on.\",\n },\n expires_at: {\n type: \"string\",\n description: \"Optional ISO timestamp retention boundary.\",\n },\n atrib_receipt_id: {\n type: \"string\",\n description:\n \"Optional. Signed atrib record receipt_id for the wrapper that signed this post_context call. Set automatically by an atrib-signing wrapper; consumers reading the row use this as the informed_by anchor for cross-process causal edges.\",\n },\n },\n required: [\"category\", \"content\"],\n },\n },\n {\n name: \"get_context\",\n description:\n \"Read shared context entries, newest first. Filter by source, category, project, or unacknowledged entries.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n since: {\n type: \"string\",\n description: \"ISO timestamp. Only entries after this time\",\n },\n source: {\n type: \"string\",\n description: \"Filter by posting agent\",\n },\n category: {\n type: \"string\",\n description: \"Filter by category\",\n },\n project: {\n type: \"string\",\n description: \"Filter by project scope\",\n },\n unacked_by: {\n type: \"string\",\n description:\n \"Only entries NOT yet acknowledged by this agent name. Defaults to AGENT_BRIDGE_AGENT when configured.\",\n },\n limit: {\n type: \"number\",\n description: \"Max entries to return (default 20)\",\n minimum: 1,\n maximum: 200,\n },\n target_agent: {\n type: \"string\",\n description:\n \"Return broadcast entries plus entries targeted to this agent.\",\n },\n thread_id: {\n type: \"string\",\n description: \"Filter by metadata.message_envelope.thread_id.\",\n },\n kind: {\n type: \"string\",\n description: \"Filter by metadata.message_envelope.kind.\",\n },\n },\n },\n },\n {\n name: \"ack_context\",\n description:\n \"Acknowledge context entries so they won't appear in unacked queries for this agent.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n ids: {\n type: \"array\",\n items: { anyOf: [{ type: \"number\" }, { type: \"string\" }] },\n description: \"Legacy numeric entry IDs or v2 UUID message IDs to acknowledge\",\n },\n agent: {\n type: \"string\",\n description:\n \"Optional acknowledging agent. Defaults to AGENT_BRIDGE_AGENT when configured; an explicit value must match it.\",\n },\n },\n required: [\"ids\"],\n },\n },\n ...(service ? [{\n name: \"send\",\n description: \"Create an immutable Agent Bridge v2 message.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n source: { type: \"string\", description: \"Optional identity assertion; must match AGENT_BRIDGE_AGENT.\" },\n type: { type: \"string\" }, content: { type: \"string\" }, contentType: { type: \"string\" },\n data: {}, targets: { type: \"array\", items: { type: \"string\" } },\n threadId: { type: \"string\" }, replyToId: { type: \"string\" }, correlationId: { type: \"string\" }, causationId: { type: \"string\" },\n priority: { type: \"string\", enum: [\"info\", \"high\", \"urgent\"] }, expiresAt: { type: \"string\" },\n idempotencyKey: { type: \"string\" }, atribReceiptId: { type: \"string\" },\n informedBy: { type: \"array\", items: { type: \"string\" } }, metadata: {},\n },\n required: [\"type\", \"content\"],\n additionalProperties: false,\n },\n outputSchema: { type: \"object\" as const, properties: { created: { type: \"boolean\" }, message: { type: \"object\", additionalProperties: true } }, required: [\"created\", \"message\"] },\n },\n {\n name: \"history\",\n description: \"Read visible Agent Bridge v2 messages after an opaque cursor.\",\n inputSchema: { type: \"object\" as const, properties: {\n cursor: { type: \"string\" }, limit: { type: \"number\", minimum: 1, maximum: 200 }, types: { type: \"array\", items: { type: \"string\" } },\n includeExpired: { type: \"boolean\" }, source: { type: \"string\" }, since: { type: \"string\" }, unacknowledgedBy: { type: \"string\" },\n threadId: { type: \"string\" }, latest: { type: \"boolean\" },\n }, additionalProperties: false },\n outputSchema: { type: \"object\" as const, properties: { messages: { type: \"array\", items: { type: \"object\", additionalProperties: true } }, cursor: { type: \"string\" } }, required: [\"messages\"] },\n }] : []),\n ...(deliveryToolsAvailable ? [{\n name: \"claim\",\n description: \"Atomically claim the next targeted delivery.\",\n inputSchema: { type: \"object\" as const, properties: { leaseMs: { type: \"number\" }, maxAttempts: { type: \"number\" } }, additionalProperties: false },\n outputSchema: { type: \"object\" as const, additionalProperties: true },\n },\n ...[\"extend\", \"acknowledge\", \"negative_acknowledge\"].map((name) => ({\n name,\n description: `Agent Bridge v2 ${name.replace(/_/g, \" \")} delivery operation.`,\n inputSchema: {\n type: \"object\" as const,\n properties: {\n deliveryId: { type: \"string\" }, leaseToken: { type: \"string\" },\n ...(name === \"extend\" ? { leaseMs: { type: \"number\" } } : {}),\n ...(name === \"negative_acknowledge\" ? { error: { type: \"string\" }, dead: { type: \"boolean\" }, retryPolicy: { type: \"object\", additionalProperties: true } } : {}),\n },\n required: [\"deliveryId\", \"leaseToken\"],\n additionalProperties: false,\n },\n outputSchema: { type: \"object\" as const, additionalProperties: true },\n })),\n {\n name: \"heartbeat\",\n description: \"Publish a leased runtime presence record and capabilities.\",\n inputSchema: { type: \"object\" as const, properties: {\n leaseMs: { type: \"number\", minimum: 1000, maximum: 900000 }, runtimeType: { type: \"string\" },\n capabilities: { type: \"array\", items: { type: \"string\" } },\n }, additionalProperties: false },\n outputSchema: { type: \"object\" as const, additionalProperties: true },\n },\n {\n name: \"presence\",\n description: \"List active agent runtime instances in this workspace.\",\n inputSchema: { type: \"object\" as const, properties: {}, additionalProperties: false },\n outputSchema: { type: \"object\" as const, properties: { agents: { type: \"array\", items: { type: \"object\", additionalProperties: true } } }, required: [\"agents\"] },\n }] : []),\n ],\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n try {\n switch (name) {\n case \"post_context\": {\n let source: string | undefined;\n try {\n source = resolvePostSource(args?.source, config.agent);\n if (!source) {\n throw new Error(\n \"source is required when AGENT_BRIDGE_AGENT is not configured\",\n );\n }\n } catch (e) {\n throw new McpError(\n ErrorCode.InvalidParams,\n e instanceof Error ? e.message : \"source identity mismatch\",\n );\n }\n const postArgs = { ...(args ?? {}), source };\n const receiptId = normalizeReceiptId(args?.atrib_receipt_id);\n const envelope = buildMessageEnvelope(postArgs, receiptId);\n const body: Record<string, unknown> = {\n source,\n category: args?.category,\n content: args?.content,\n priority: args?.priority || \"info\",\n project: args?.project || null,\n metadata: mergeEnvelopeMetadata(args?.metadata, envelope),\n };\n // Optional cross-tool causal anchor; written when an atrib-signing\n // wrapper signs this call before forwarding. Format-validated so\n // unexpected producers cannot pollute the column with garbage.\n if (receiptId) {\n body.atrib_receipt_id = receiptId;\n }\n if (!supabaseRequest) {\n if (!service || !principal) throw new McpError(ErrorCode.InternalError, \"bridge provider is not configured\");\n if (args?.project && String(args.project) !== principal.workspace) {\n throw new McpError(ErrorCode.InvalidParams, \"project must match AGENT_BRIDGE_WORKSPACE\");\n }\n const result = await service.publish(principal, {\n id: String(envelope.message_id),\n type: String(args?.kind ?? args?.category),\n content: String(args?.content ?? \"\"),\n contentType: String(args?.payload_mime ?? \"text/plain\"),\n data: args?.payload as MessageDraft[\"data\"],\n targets: Array.isArray(args?.target_agents) ? args.target_agents.map(String) : [],\n threadId: args?.thread_id as string | undefined,\n replyToId: args?.reply_to_id as string | undefined,\n priority: (args?.priority ?? \"info\") as MessageDraft[\"priority\"],\n expiresAt: args?.expires_at as string | undefined,\n atribReceiptId: receiptId,\n informedBy: Array.isArray(args?.informed_by) ? args.informed_by.map(String) : [],\n metadata: body.metadata as MessageDraft[\"metadata\"],\n });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }], structuredContent: result as unknown as Record<string, unknown> };\n }\n if (!supabaseRequest) throw new McpError(ErrorCode.InternalError, \"bridge provider is not configured\");\n const data = await supabaseRequest(\"/shared_context\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n }\n\n case \"get_context\": {\n const rawLimit = args?.limit;\n if (\n rawLimit !== undefined &&\n (typeof rawLimit !== \"number\" || !Number.isSafeInteger(rawLimit) || rawLimit < 1 || rawLimit > 200)\n ) {\n throw new McpError(ErrorCode.InvalidParams, \"limit must be between 1 and 200\");\n }\n const requestedLimit = rawLimit ?? 20;\n if (service && principal) {\n if (!service || !principal) throw new McpError(ErrorCode.InternalError, \"bridge provider is not configured\");\n if (args?.project && String(args.project) !== principal.workspace) {\n return { content: [{ type: \"text\", text: \"[]\" }], structuredContent: { entries: [] } };\n }\n if (args?.target_agent && String(args.target_agent) !== principal.agent) {\n return { content: [{ type: \"text\", text: \"[]\" }], structuredContent: { entries: [] } };\n }\n const result = await service.history(principal, {\n limit: requestedLimit,\n types: args?.kind ? [String(args.kind)] : args?.category ? [String(args.category)] : undefined,\n source: args?.source ? String(args.source) : undefined,\n since: args?.since ? String(args.since) : undefined,\n unacknowledgedBy: args?.unacked_by ? String(args.unacked_by) : config.agent,\n threadId: args?.thread_id ? String(args.thread_id) : undefined,\n latest: true,\n });\n const entries = result.messages\n .slice(0, requestedLimit)\n .map((message) => ({\n id: clientConfig?.provider === \"legacy-supabase\" && /^\\d+$/.test(message.sequence)\n ? Number.isSafeInteger(Number(message.sequence)) ? Number(message.sequence) : message.sequence\n : message.id,\n source: message.source,\n category: message.type,\n content: message.content,\n priority: message.priority,\n project: message.workspace,\n metadata: legacyContextMetadata(message),\n atrib_receipt_id: message.atribReceiptId ?? null,\n created_at: message.createdAt,\n }));\n const cachedResult = result as typeof result & {\n source?: \"remote\" | \"cache\";\n stale?: boolean;\n lastSyncedAt?: string;\n };\n const cacheMetadata = cachedResult.source\n ? {\n source: cachedResult.source,\n stale: Boolean(cachedResult.stale),\n lastSyncedAt: cachedResult.lastSyncedAt ?? null,\n }\n : {};\n return {\n content: [{ type: \"text\", text: JSON.stringify(entries, null, 2) }],\n structuredContent: { entries, ...cacheMetadata },\n };\n }\n const hasEnvelopeFilter = Boolean(\n args?.target_agent || args?.thread_id || args?.kind,\n );\n const fetchLimit = hasEnvelopeFilter\n ? Math.min(Math.max(requestedLimit * 5, 50), 200)\n : requestedLimit;\n const params: string[] = [\n \"order=created_at.desc\",\n `limit=${fetchLimit}`,\n ];\n if (args?.since)\n params.push(\n `created_at=gte.${encodeURIComponent(String(args.since))}`,\n );\n if (args?.source)\n params.push(`source=eq.${encodeURIComponent(String(args.source))}`);\n if (args?.category)\n params.push(\n `category=eq.${encodeURIComponent(String(args.category))}`,\n );\n if (args?.project)\n params.push(`project=eq.${encodeURIComponent(String(args.project))}`);\n const unackedBy = args?.unacked_by ?? config.agent;\n if (unackedBy)\n params.push(\n `acked_by=not.cs.%7B${encodeURIComponent(String(unackedBy))}%7D`,\n );\n\n if (!supabaseRequest) throw new McpError(ErrorCode.InternalError, \"bridge provider is not configured\");\n const data = await supabaseRequest(\n `/shared_context?${params.join(\"&\")}`,\n );\n const filtered = filterContextRows(data, args, requestedLimit);\n return {\n content: [{ type: \"text\", text: JSON.stringify(filtered, null, 2) }],\n };\n }\n\n case \"ack_context\": {\n const ids = args?.ids as unknown[];\n let agent: string | undefined;\n try {\n agent = resolveAgentIdentity(args?.agent, config.agent);\n } catch (e) {\n throw new McpError(\n ErrorCode.InvalidParams,\n e instanceof Error ? e.message : \"agent identity mismatch\",\n );\n }\n if (!ids?.length || !agent) {\n throw new McpError(\n ErrorCode.InvalidParams,\n \"ids are required; agent is required when AGENT_BRIDGE_AGENT is not configured\",\n );\n }\n if (service && principal) {\n if (!service || !principal) throw new McpError(ErrorCode.InternalError, \"bridge provider is not configured\");\n const rawIds = ids.map(String);\n const acknowledged = clientConfig?.provider === \"legacy-supabase\" &&\n store?.recordLegacyReceipt && rawIds.every((id) => /^\\d+$/.test(id))\n ? await store.recordLegacyReceipt(rawIds, principal.agent)\n : await service.acknowledge(\n principal,\n ids.map((id) => legacyNumericMessageId(id as string | number)),\n );\n return { content: [{ type: \"text\", text: JSON.stringify({ acknowledged, agent }) }], structuredContent: { acknowledged, agent } };\n }\n if (!supabaseRequest) throw new McpError(ErrorCode.InternalError, \"bridge provider is not configured\");\n const data = await supabaseRequest(\"/rpc/ack_context\", {\n method: \"POST\",\n body: JSON.stringify({ entry_ids: ids.map(String), agent_name: agent }),\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ acknowledged: data, agent }),\n },\n ],\n };\n }\n\n case \"send\": {\n if (!service || !principal) throw new McpError(ErrorCode.InvalidParams, \"AGENT_BRIDGE_AGENT is required\");\n try { resolvePostSource(args?.source, principal.agent); } catch (error) { throw new McpError(ErrorCode.InvalidParams, error instanceof Error ? error.message : \"source identity mismatch\"); }\n const result = await service.publish(principal, args as unknown as MessageDraft);\n return { content: [{ type: \"text\", text: JSON.stringify(result) }], structuredContent: result as unknown as Record<string, unknown> };\n }\n case \"history\": {\n if (!service || !principal) throw new McpError(ErrorCode.InvalidParams, \"AGENT_BRIDGE_AGENT is required\");\n const result = await service.history(principal, args ?? {});\n return { content: [{ type: \"text\", text: JSON.stringify(result) }], structuredContent: result as unknown as Record<string, unknown> };\n }\n case \"claim\": {\n if (!service || !principal) throw new McpError(ErrorCode.InvalidParams, \"AGENT_BRIDGE_AGENT is required\");\n const result = await service.claim(principal, { leaseMs: args?.leaseMs as number | undefined, maxAttempts: args?.maxAttempts as number | undefined });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }], structuredContent: (result ?? { delivery: null }) as unknown as Record<string, unknown> };\n }\n case \"extend\": case \"acknowledge\": case \"negative_acknowledge\": {\n if (!service || !principal) throw new McpError(ErrorCode.InvalidParams, \"AGENT_BRIDGE_AGENT is required\");\n const id = String(args?.deliveryId ?? \"\"), token = String(args?.leaseToken ?? \"\");\n const result = name === \"extend\" ? await service.extend(principal, id, token, args?.leaseMs as number | undefined)\n : name === \"acknowledge\" ? await service.ack(principal, id, token)\n : await service.nack(\n principal,\n id,\n token,\n (args?.error ?? \"negative acknowledgment\") as string,\n (args?.dead ?? false) as boolean,\n args?.retryPolicy as Partial<RetryPolicy> | undefined,\n );\n return { content: [{ type: \"text\", text: JSON.stringify(result) }], structuredContent: (result ?? { delivery: null }) as unknown as Record<string, unknown> };\n }\n case \"heartbeat\": {\n if (!service || !principal) throw new McpError(ErrorCode.InvalidParams, \"AGENT_BRIDGE_AGENT is required\");\n const result = await service.heartbeat(principal, {\n leaseMs: args?.leaseMs as number | undefined,\n runtimeType: args?.runtimeType as string | undefined,\n capabilities: args?.capabilities as string[] | undefined,\n });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }], structuredContent: result as unknown as Record<string, unknown> };\n }\n case \"presence\": {\n if (!service || !principal) throw new McpError(ErrorCode.InvalidParams, \"AGENT_BRIDGE_AGENT is required\");\n const result = { agents: await service.presence(principal) };\n return { content: [{ type: \"text\", text: JSON.stringify(result) }], structuredContent: result };\n }\n\n default:\n throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);\n }\n } catch (error) {\n if (error instanceof McpError) throw error;\n if (error instanceof BridgeValidationError) {\n throw new McpError(ErrorCode.InvalidParams, error.message);\n }\n throw error;\n }\n });\n\n server.onclose = () => {\n void store?.close?.();\n };\n\n return server;\n}\n\nexport async function startServer(\n config: AgentBridgeServerConfig = configFromEnv(),\n) {\n const server = createAgentBridgeServer(config);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n","import { randomUUID } from \"node:crypto\";\n\nexport const MESSAGE_ENVELOPE_SCHEMA = \"agent-bridge.message-envelope.v1\";\n\nconst RECORD_HASH_RE = /^sha256:[a-f0-9]{64}$/i;\n\ntype JsonRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction normalizeStringList(value: unknown): string[] | undefined {\n const raw = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(\",\")\n : [];\n const seen = new Set<string>();\n for (const item of raw) {\n const normalized = normalizeString(item);\n if (normalized) seen.add(normalized);\n }\n return seen.size ? [...seen] : undefined;\n}\n\nfunction normalizeRecordHashes(value: unknown): string[] | undefined {\n const raw = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(\",\")\n : [];\n const seen = new Set<string>();\n for (const item of raw) {\n const normalized = normalizeString(item);\n if (normalized && RECORD_HASH_RE.test(normalized)) {\n seen.add(normalized.toLowerCase());\n }\n }\n return seen.size ? [...seen] : undefined;\n}\n\nfunction normalizeIsoTimestamp(value: unknown): string | undefined {\n const text = normalizeString(value);\n if (!text) return undefined;\n const parsed = Date.parse(text);\n if (Number.isNaN(parsed)) return undefined;\n return new Date(parsed).toISOString();\n}\n\nexport function normalizeMetadata(value: unknown): JsonRecord {\n return isRecord(value) ? { ...value } : {};\n}\n\nexport function buildMessageEnvelope(\n args: JsonRecord | undefined,\n receiptId?: string\n): JsonRecord {\n const source = normalizeString(args?.source) ?? \"unknown\";\n const category = normalizeString(args?.category);\n const kind = normalizeString(args?.kind) ?? category ?? \"operational\";\n const messageId = normalizeString(args?.message_id) ?? randomUUID();\n\n const envelope: JsonRecord = {\n schema: MESSAGE_ENVELOPE_SCHEMA,\n message_id: messageId,\n source_agent: source,\n kind,\n priority: normalizeString(args?.priority) ?? \"info\",\n payload_mime: normalizeString(args?.payload_mime) ?? \"text/plain\",\n };\n\n const targetAgents = normalizeStringList(args?.target_agents);\n if (targetAgents) envelope.target_agents = targetAgents;\n\n const project = normalizeString(args?.project);\n if (project) envelope.project = project;\n\n const threadId = normalizeString(args?.thread_id);\n if (threadId) envelope.thread_id = threadId;\n\n const replyToId = normalizeString(args?.reply_to_id);\n if (replyToId) envelope.reply_to_id = replyToId;\n\n if (Object.prototype.hasOwnProperty.call(args ?? {}, \"payload\")) {\n envelope.payload = args?.payload;\n }\n\n const payloadRef = normalizeString(args?.payload_ref);\n if (payloadRef) envelope.payload_ref = payloadRef;\n\n const payloadCiphertext = normalizeString(args?.payload_ciphertext);\n if (payloadCiphertext) envelope.payload_ciphertext = payloadCiphertext;\n\n if (receiptId) envelope.atrib_receipt_id = receiptId;\n\n const informedBy = normalizeRecordHashes(args?.informed_by);\n if (informedBy) envelope.informed_by = informedBy;\n\n const expiresAt = normalizeIsoTimestamp(args?.expires_at);\n if (expiresAt) envelope.expires_at = expiresAt;\n\n return envelope;\n}\n\nexport function mergeEnvelopeMetadata(\n metadataInput: unknown,\n envelope: JsonRecord\n): JsonRecord {\n return {\n ...normalizeMetadata(metadataInput),\n message_envelope: envelope,\n };\n}\n\nfunction getEnvelope(row: unknown): JsonRecord | undefined {\n if (!isRecord(row)) return undefined;\n const metadata = row.metadata;\n if (!isRecord(metadata)) return undefined;\n const envelope = metadata.message_envelope;\n return isRecord(envelope) ? envelope : undefined;\n}\n\nexport function rowMatchesMessageFilters(\n row: unknown,\n filters: JsonRecord | undefined\n): boolean {\n const targetAgent = normalizeString(filters?.target_agent);\n const threadId = normalizeString(filters?.thread_id);\n const kind = normalizeString(filters?.kind);\n\n if (!targetAgent && !threadId && !kind) return true;\n\n const envelope = getEnvelope(row);\n if (!envelope) {\n return !threadId && !kind;\n }\n\n if (targetAgent) {\n const targets = normalizeStringList(envelope.target_agents);\n if (targets && !targets.includes(targetAgent)) return false;\n }\n\n if (threadId && normalizeString(envelope.thread_id) !== threadId) {\n return false;\n }\n\n if (kind && normalizeString(envelope.kind) !== kind) {\n return false;\n }\n\n return true;\n}\n\nexport function filterContextRows(\n rows: unknown,\n filters: JsonRecord | undefined,\n limit: number\n): unknown {\n if (!Array.isArray(rows)) return rows;\n return rows.filter((row) => rowMatchesMessageFilters(row, filters)).slice(0, limit);\n}\n","function normalizeSource(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nexport function resolveAgentIdentity(\n requestedAgent: unknown,\n configuredAgent: unknown,\n field = \"agent\",\n): string | undefined {\n const requested = normalizeSource(requestedAgent);\n const configured = normalizeSource(configuredAgent);\n\n if (requested && configured && requested !== configured) {\n throw new Error(\n `${field} must match AGENT_BRIDGE_AGENT (${configured}); got ${requested}`,\n );\n }\n\n return requested ?? configured;\n}\n\nexport function resolvePostSource(\n requestedSource: unknown,\n configuredAgent: unknown,\n): string | undefined {\n return resolveAgentIdentity(requestedSource, configuredAgent, \"source\");\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/migrations.ts
4
+ import { createHash } from "crypto";
5
+ import { readdir, readFile } from "fs/promises";
6
+ import { join } from "path";
7
+ var MIGRATION_NAME = /^(\d+)_([a-z0-9_]+)\.sql$/;
8
+ var REQUIRED_COLUMNS = /* @__PURE__ */ new Map([
9
+ ["workspaces.id", "text"],
10
+ ["agents.id", "uuid"],
11
+ ["agents.workspace_id", "text"],
12
+ ["agents.principal", "text"],
13
+ ["credentials.id", "uuid"],
14
+ ["credentials.workspace_id", "text"],
15
+ ["credentials.agent_id", "uuid"],
16
+ ["credentials.token_hash", "bpchar"],
17
+ ["messages.sequence", "int8"],
18
+ ["messages.id", "uuid"],
19
+ ["messages.workspace", "text"],
20
+ ["messages.source", "text"],
21
+ ["messages.targets", "jsonb"],
22
+ ["receipts.workspace", "text"],
23
+ ["receipts.message_id", "uuid"],
24
+ ["receipts.principal", "text"],
25
+ ["deliveries.id", "uuid"],
26
+ ["deliveries.message_id", "uuid"],
27
+ ["deliveries.workspace", "text"],
28
+ ["deliveries.recipient", "text"],
29
+ ["deliveries.state", "text"],
30
+ ["deliveries.lease_token", "uuid"],
31
+ ["delivery_events.delivery_id", "uuid"],
32
+ ["delivery_events.to_state", "text"],
33
+ ["agent_instances.workspace", "text"],
34
+ ["agent_instances.instance", "text"],
35
+ ["agent_instances.capabilities", "jsonb"]
36
+ ]);
37
+ var REQUIRED_MIGRATIONS = [
38
+ { version: 1, name: "schema_state" },
39
+ { version: 2, name: "workspaces_agents_credentials" },
40
+ { version: 3, name: "messages_receipts_deliveries" },
41
+ { version: 4, name: "message_query_indexes" },
42
+ { version: 5, name: "delivery_events_presence" },
43
+ { version: 6, name: "legacy_shared_context_import" },
44
+ { version: 7, name: "runtime_role" }
45
+ ];
46
+ function checksum(source) {
47
+ return createHash("sha256").update(source, "utf8").digest("hex");
48
+ }
49
+ async function recordedMigrations(db) {
50
+ const exists = await db.query(
51
+ "SELECT to_regclass('agent_bridge.schema_migrations')::text AS table_name"
52
+ );
53
+ if (!exists.rows[0]?.table_name) return [];
54
+ const result = await db.query(
55
+ "SELECT version, name, checksum FROM agent_bridge.schema_migrations ORDER BY version"
56
+ );
57
+ return result.rows.map((row) => ({
58
+ version: Number(row.version),
59
+ name: row.name,
60
+ checksum: row.checksum
61
+ }));
62
+ }
63
+ async function loadMigrationPlan(directory) {
64
+ const files = (await readdir(directory)).filter((file) => MIGRATION_NAME.test(file)).sort((left, right) => left.localeCompare(right));
65
+ const expected = await Promise.all(files.map(async (file) => {
66
+ const match = file.match(MIGRATION_NAME);
67
+ const source = await readFile(join(directory, file), "utf8");
68
+ return { version: Number(match[1]), name: match[2], source, checksum: checksum(source) };
69
+ }));
70
+ if (expected.length !== REQUIRED_MIGRATIONS.length || !expected.every(
71
+ (migration, index) => migration.version === REQUIRED_MIGRATIONS[index]?.version && migration.name === REQUIRED_MIGRATIONS[index]?.name
72
+ )) {
73
+ throw new Error("migration directory does not match the required migration sequence");
74
+ }
75
+ return expected;
76
+ }
77
+ async function migrationsReady(db, expected) {
78
+ const applied = await recordedMigrations(db);
79
+ return expected.every(
80
+ (required, index) => applied[index]?.version === required.version && applied[index]?.name === required.name && applied[index]?.checksum === required.checksum
81
+ ) && applied.length === expected.length;
82
+ }
83
+ async function runtimeSchemaReady(db) {
84
+ const columns = await db.query(
85
+ `SELECT table_name, column_name, udt_name
86
+ FROM information_schema.columns
87
+ WHERE table_schema='agent_bridge'`
88
+ );
89
+ const actual = new Map(
90
+ columns.rows.map((row2) => [`${row2.table_name}.${row2.column_name}`, row2.udt_name])
91
+ );
92
+ if ([...REQUIRED_COLUMNS].some(([name, type]) => actual.get(name) !== type)) return false;
93
+ const objects = await db.query(
94
+ `SELECT
95
+ EXISTS (
96
+ SELECT 1 FROM pg_trigger
97
+ WHERE tgrelid='agent_bridge.messages'::regclass
98
+ AND tgname='messages_immutable' AND NOT tgisinternal
99
+ ) AS immutable,
100
+ EXISTS (
101
+ SELECT 1 FROM pg_trigger
102
+ WHERE tgrelid='agent_bridge.deliveries'::regclass
103
+ AND tgname='deliveries_record_event' AND NOT tgisinternal
104
+ ) AS "deliveryAudit",
105
+ to_regclass('agent_bridge.messages_idempotency') IS NOT NULL AS idempotency,
106
+ to_regclass('agent_bridge.deliveries_claim') IS NOT NULL AS claim,
107
+ to_regclass('agent_bridge.messages_source') IS NOT NULL AS source,
108
+ to_regclass('agent_bridge.messages_thread') IS NOT NULL AS thread,
109
+ to_regclass('agent_bridge.messages_created') IS NOT NULL AS created,
110
+ to_regclass('agent_bridge.agent_instances_active') IS NOT NULL AS presence`
111
+ );
112
+ const row = objects.rows[0];
113
+ return Boolean(row?.immutable && row.deliveryAudit && row.idempotency && row.claim && row.source && row.thread && row.created && row.presence);
114
+ }
115
+ async function runMigrations(db, directory) {
116
+ const expected = await loadMigrationPlan(directory);
117
+ for (const migration of expected) {
118
+ const applied = await recordedMigrations(db);
119
+ const recorded = applied.find((entry) => entry.version === migration.version);
120
+ if (recorded) {
121
+ if (recorded.name !== migration.name || recorded.checksum !== migration.checksum) {
122
+ throw new Error(`migration ${migration.version}_${migration.name} conflicts with schema state`);
123
+ }
124
+ continue;
125
+ }
126
+ await db.query(
127
+ migration.source.split("__AGENT_BRIDGE_MIGRATION_CHECKSUM__").join(migration.checksum)
128
+ );
129
+ const verified = (await recordedMigrations(db)).find(
130
+ (entry) => entry.version === migration.version
131
+ );
132
+ if (verified?.name !== migration.name || verified.checksum !== migration.checksum) {
133
+ throw new Error(`migration ${migration.version}_${migration.name} was not recorded correctly`);
134
+ }
135
+ }
136
+ return recordedMigrations(db);
137
+ }
138
+
139
+ export {
140
+ REQUIRED_MIGRATIONS,
141
+ loadMigrationPlan,
142
+ migrationsReady,
143
+ runtimeSchemaReady,
144
+ runMigrations
145
+ };
146
+ //# sourceMappingURL=chunk-6MAZ6YLZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/migrations.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { PgQueryable } from \"./postgres-bridge-store.js\";\n\nconst MIGRATION_NAME = /^(\\d+)_([a-z0-9_]+)\\.sql$/;\nconst REQUIRED_COLUMNS = new Map([\n [\"workspaces.id\", \"text\"],\n [\"agents.id\", \"uuid\"],\n [\"agents.workspace_id\", \"text\"],\n [\"agents.principal\", \"text\"],\n [\"credentials.id\", \"uuid\"],\n [\"credentials.workspace_id\", \"text\"],\n [\"credentials.agent_id\", \"uuid\"],\n [\"credentials.token_hash\", \"bpchar\"],\n [\"messages.sequence\", \"int8\"],\n [\"messages.id\", \"uuid\"],\n [\"messages.workspace\", \"text\"],\n [\"messages.source\", \"text\"],\n [\"messages.targets\", \"jsonb\"],\n [\"receipts.workspace\", \"text\"],\n [\"receipts.message_id\", \"uuid\"],\n [\"receipts.principal\", \"text\"],\n [\"deliveries.id\", \"uuid\"],\n [\"deliveries.message_id\", \"uuid\"],\n [\"deliveries.workspace\", \"text\"],\n [\"deliveries.recipient\", \"text\"],\n [\"deliveries.state\", \"text\"],\n [\"deliveries.lease_token\", \"uuid\"],\n [\"delivery_events.delivery_id\", \"uuid\"],\n [\"delivery_events.to_state\", \"text\"],\n [\"agent_instances.workspace\", \"text\"],\n [\"agent_instances.instance\", \"text\"],\n [\"agent_instances.capabilities\", \"jsonb\"],\n]);\n\nexport interface AppliedMigration {\n version: number;\n name: string;\n checksum: string;\n}\n\nexport interface MigrationPlanEntry extends AppliedMigration {\n source: string;\n}\n\nexport const REQUIRED_MIGRATIONS = [\n { version: 1, name: \"schema_state\" },\n { version: 2, name: \"workspaces_agents_credentials\" },\n { version: 3, name: \"messages_receipts_deliveries\" },\n { version: 4, name: \"message_query_indexes\" },\n { version: 5, name: \"delivery_events_presence\" },\n { version: 6, name: \"legacy_shared_context_import\" },\n { version: 7, name: \"runtime_role\" },\n] as const;\n\nfunction checksum(source: string): string {\n return createHash(\"sha256\").update(source, \"utf8\").digest(\"hex\");\n}\n\nasync function recordedMigrations(db: PgQueryable): Promise<AppliedMigration[]> {\n const exists = await db.query<{ table_name: string | null }>(\n \"SELECT to_regclass('agent_bridge.schema_migrations')::text AS table_name\",\n );\n if (!exists.rows[0]?.table_name) return [];\n const result = await db.query<{ version: number; name: string; checksum: string }>(\n \"SELECT version, name, checksum FROM agent_bridge.schema_migrations ORDER BY version\",\n );\n return result.rows.map((row) => ({\n version: Number(row.version),\n name: row.name,\n checksum: row.checksum,\n }));\n}\n\nexport async function loadMigrationPlan(directory: string): Promise<MigrationPlanEntry[]> {\n const files = (await readdir(directory))\n .filter((file) => MIGRATION_NAME.test(file))\n .sort((left, right) => left.localeCompare(right));\n const expected = await Promise.all(files.map(async (file) => {\n const match = file.match(MIGRATION_NAME)!;\n const source = await readFile(join(directory, file), \"utf8\");\n return { version: Number(match[1]), name: match[2], source, checksum: checksum(source) };\n }));\n\n if (\n expected.length !== REQUIRED_MIGRATIONS.length ||\n !expected.every(\n (migration, index) =>\n migration.version === REQUIRED_MIGRATIONS[index]?.version &&\n migration.name === REQUIRED_MIGRATIONS[index]?.name,\n )\n ) {\n throw new Error(\"migration directory does not match the required migration sequence\");\n }\n return expected;\n}\n\nexport async function migrationsReady(\n db: PgQueryable,\n expected: ReadonlyArray<Pick<MigrationPlanEntry, \"version\" | \"name\" | \"checksum\">>,\n): Promise<boolean> {\n const applied = await recordedMigrations(db);\n return expected.every(\n (required, index) =>\n applied[index]?.version === required.version &&\n applied[index]?.name === required.name &&\n applied[index]?.checksum === required.checksum,\n ) && applied.length === expected.length;\n}\n\nexport async function runtimeSchemaReady(db: PgQueryable): Promise<boolean> {\n const columns = await db.query<{ table_name: string; column_name: string; udt_name: string }>(\n `SELECT table_name, column_name, udt_name\n FROM information_schema.columns\n WHERE table_schema='agent_bridge'`,\n );\n const actual = new Map(\n columns.rows.map((row) => [`${row.table_name}.${row.column_name}`, row.udt_name]),\n );\n if ([...REQUIRED_COLUMNS].some(([name, type]) => actual.get(name) !== type)) return false;\n\n const objects = await db.query<{ immutable: boolean; deliveryAudit: boolean; idempotency: boolean; claim: boolean; source: boolean; thread: boolean; created: boolean; presence: boolean }>(\n `SELECT\n EXISTS (\n SELECT 1 FROM pg_trigger\n WHERE tgrelid='agent_bridge.messages'::regclass\n AND tgname='messages_immutable' AND NOT tgisinternal\n ) AS immutable,\n EXISTS (\n SELECT 1 FROM pg_trigger\n WHERE tgrelid='agent_bridge.deliveries'::regclass\n AND tgname='deliveries_record_event' AND NOT tgisinternal\n ) AS \"deliveryAudit\",\n to_regclass('agent_bridge.messages_idempotency') IS NOT NULL AS idempotency,\n to_regclass('agent_bridge.deliveries_claim') IS NOT NULL AS claim,\n to_regclass('agent_bridge.messages_source') IS NOT NULL AS source,\n to_regclass('agent_bridge.messages_thread') IS NOT NULL AS thread,\n to_regclass('agent_bridge.messages_created') IS NOT NULL AS created,\n to_regclass('agent_bridge.agent_instances_active') IS NOT NULL AS presence`,\n );\n const row = objects.rows[0];\n return Boolean(row?.immutable && row.deliveryAudit && row.idempotency && row.claim && row.source && row.thread && row.created && row.presence);\n}\n\nexport async function runMigrations(\n db: PgQueryable,\n directory: string,\n): Promise<AppliedMigration[]> {\n const expected = await loadMigrationPlan(directory);\n\n for (const migration of expected) {\n const applied = await recordedMigrations(db);\n const recorded = applied.find((entry) => entry.version === migration.version);\n if (recorded) {\n if (recorded.name !== migration.name || recorded.checksum !== migration.checksum) {\n throw new Error(`migration ${migration.version}_${migration.name} conflicts with schema state`);\n }\n continue;\n }\n await db.query(\n migration.source.split(\"__AGENT_BRIDGE_MIGRATION_CHECKSUM__\").join(migration.checksum),\n );\n const verified = (await recordedMigrations(db)).find(\n (entry) => entry.version === migration.version,\n );\n if (verified?.name !== migration.name || verified.checksum !== migration.checksum) {\n throw new Error(`migration ${migration.version}_${migration.name} was not recorded correctly`);\n }\n }\n\n return recordedMigrations(db);\n}\n"],"mappings":"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","names":["row"]}