@creatornader/agent-bridge 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +222 -1
- package/README.md +312 -12
- package/ROADMAP.md +88 -7
- package/SECURITY.md +78 -5
- package/SKILL.md +108 -1
- package/dist/archive.d.ts +2 -2
- package/dist/archive.js +2 -2
- package/dist/{bridge-service-hX1ZQp4W.d.ts → bridge-service-CNBKdYXh.d.ts} +2 -1
- package/dist/{bridge-store-DPVSCwfs.d.ts → bridge-store-ByJ6CaJk.d.ts} +3 -0
- package/dist/bridge.d.ts +25 -8
- package/dist/bridge.js +19 -9
- package/dist/{chunk-MBPZXTJA.js → chunk-7VJI2MXI.js} +285 -42
- package/dist/chunk-7VJI2MXI.js.map +1 -0
- package/dist/{chunk-4VB44KJU.js → chunk-AWE3DFZV.js} +3 -2
- package/dist/chunk-AWE3DFZV.js.map +1 -0
- package/dist/{chunk-GADH244D.js → chunk-E4OWHGUE.js} +16 -5
- package/dist/chunk-E4OWHGUE.js.map +1 -0
- package/dist/{chunk-NCO7RLBM.js → chunk-GTK4KOED.js} +108 -8
- package/dist/chunk-GTK4KOED.js.map +1 -0
- package/dist/{chunk-SPSMZOCJ.js → chunk-HUHG7XTB.js} +6 -5
- package/dist/chunk-HUHG7XTB.js.map +1 -0
- package/dist/{chunk-5GMB3A77.js → chunk-IVG4XWWS.js} +26 -14
- package/dist/chunk-IVG4XWWS.js.map +1 -0
- package/dist/{chunk-WAI2IYIQ.js → chunk-P635FAN4.js} +50 -7
- package/dist/chunk-P635FAN4.js.map +1 -0
- package/dist/{chunk-45BZGB77.js → chunk-QNXHDOJ5.js} +218 -24
- package/dist/chunk-QNXHDOJ5.js.map +1 -0
- package/dist/{chunk-UAHMP6GC.js → chunk-QPC6JHA3.js} +10 -7
- package/dist/chunk-QPC6JHA3.js.map +1 -0
- package/dist/{chunk-Q6PPMXJC.js → chunk-SN7PIVDF.js} +377 -21
- package/dist/chunk-SN7PIVDF.js.map +1 -0
- package/dist/{chunk-A6W4QALF.js → chunk-TC6A7GMF.js} +2 -2
- package/dist/{chunk-2DFNOLMO.js → chunk-XDNT6ZNZ.js} +9 -6
- package/dist/chunk-XDNT6ZNZ.js.map +1 -0
- package/dist/{chunk-CEXBMOI5.js → chunk-Z6JP6MYD.js} +2 -2
- package/dist/cli.js +5867 -438
- package/dist/cli.js.map +1 -1
- package/dist/client-runtime.d.ts +4 -2
- package/dist/client-runtime.js +7 -7
- package/dist/contracts/generate.js +1 -1
- package/dist/dr.d.ts +9 -2
- package/dist/dr.js +6 -4
- package/dist/{gateway-CggQ8vTC.d.ts → gateway-CW-61lvs.d.ts} +27 -3
- package/dist/gateway-main.js +71 -7
- package/dist/gateway-main.js.map +1 -1
- package/dist/gateway.d.ts +3 -3
- package/dist/gateway.js +3 -3
- package/dist/index.js +8 -8
- package/dist/{postgres-bridge-store-Bfd3hRId.d.ts → postgres-bridge-store-C9KG9Z69.d.ts} +1 -1
- package/dist/postgres-production-preflight.d.ts +32 -0
- package/dist/postgres-production-preflight.js +249 -0
- package/dist/postgres-production-preflight.js.map +1 -0
- package/dist/server.js +8 -8
- package/dist/sqlite-edge-store-CdMIOrho.d.ts +148 -0
- package/dist/sqlite.d.ts +19 -80
- package/dist/sqlite.js +11 -3
- package/docs/architecture-v2.md +292 -15
- package/docs/decisions/0004-client-lifecycle-and-endpoint-migration.md +204 -0
- package/docs/deployment.md +349 -0
- package/docs/troubleshooting.md +23 -0
- package/llms.txt +69 -1
- package/openapi/agent-bridge-v2.openapi.json +1151 -124
- package/package.json +10 -2
- package/schemas/agent-bridge-v2.capabilities.json +26 -1
- package/schemas/agent-bridge-v2.mcp.json +11 -1
- package/schemas/agent-bridge-v2.schema.json +167 -0
- package/sql/migrations/007_runtime_role.sql +8 -4
- package/sql/migrations/013_row_isolation.sql +71 -8
- package/sql/migrations/014_owner_control_plane.sql +124 -31
- package/sql/migrations/015_portable_archives.sql +143 -41
- package/sql/migrations/016_native_dr_fence.sql +102 -35
- package/sql/migrations/017_gateway_authority_binding.sql +99 -0
- package/sql/migrations/018_endpoint_migration_challenges.sql +1054 -0
- package/sql/migrations/019_endpoint_migration_same_successor.sql +348 -0
- package/sql/migrations/020_managed_authority_compat.sql +698 -0
- package/sql/migrations/021_native_backup_reader.sql +421 -0
- package/sql/setup.sql +1 -3
- package/dist/chunk-2DFNOLMO.js.map +0 -1
- package/dist/chunk-45BZGB77.js.map +0 -1
- package/dist/chunk-4VB44KJU.js.map +0 -1
- package/dist/chunk-5GMB3A77.js.map +0 -1
- package/dist/chunk-GADH244D.js.map +0 -1
- package/dist/chunk-MBPZXTJA.js.map +0 -1
- package/dist/chunk-NCO7RLBM.js.map +0 -1
- package/dist/chunk-Q6PPMXJC.js.map +0 -1
- package/dist/chunk-SPSMZOCJ.js.map +0 -1
- package/dist/chunk-UAHMP6GC.js.map +0 -1
- package/dist/chunk-WAI2IYIQ.js.map +0 -1
- /package/dist/{chunk-A6W4QALF.js.map → chunk-TC6A7GMF.js.map} +0 -0
- /package/dist/{chunk-CEXBMOI5.js.map → chunk-Z6JP6MYD.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
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$/;\n// Native DR holds this database-local key with pg_advisory_lock. Migration and\n// Agent Bridge membership mutations take the shared transaction form.\nexport const NATIVE_DR_ADVISORY_LOCK_KEY = 1646705664;\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 [\"credentials.scopes\", \"_text\"],\n [\"credentials.scope_set_name\", \"text\"],\n [\"credentials.replaces_credential_id\", \"uuid\"],\n [\"credentials.revoked_by\", \"text\"],\n [\"credentials.revocation_reason\", \"text\"],\n [\"credentials.expiry_grace_until\", \"timestamptz\"],\n [\"credential_scope_sets.name\", \"text\"],\n [\"credential_scope_sets.scopes\", \"_text\"],\n [\"credential_scope_sets.created_at\", \"timestamptz\"],\n [\"security_events.sequence\", \"int8\"],\n [\"security_events.event_id\", \"uuid\"],\n [\"security_events.event_type\", \"text\"],\n [\"security_events.outcome\", \"text\"],\n [\"security_events.reason_code\", \"text\"],\n [\"security_events.workspace_id\", \"text\"],\n [\"security_events.principal\", \"text\"],\n [\"security_events.actor_principal\", \"text\"],\n [\"security_events.credential_id\", \"uuid\"],\n [\"security_events.related_credential_id\", \"uuid\"],\n [\"security_events.operation_id\", \"text\"],\n [\"security_events.request_id\", \"uuid\"],\n [\"security_events.policy_id\", \"text\"],\n [\"security_events.retry_after_seconds\", \"int4\"],\n [\"security_events.created_at\", \"timestamptz\"],\n [\"rate_limit_policies.policy_id\", \"text\"],\n [\"rate_limit_policies.operation_id\", \"text\"],\n [\"rate_limit_policies.capacity\", \"int4\"],\n [\"rate_limit_policies.refill_per_second\", \"numeric\"],\n [\"rate_limit_policies.enabled\", \"bool\"],\n [\"rate_limit_buckets.credential_id\", \"uuid\"],\n [\"rate_limit_buckets.policy_id\", \"text\"],\n [\"rate_limit_buckets.tokens\", \"numeric\"],\n [\"rate_limit_buckets.updated_at\", \"timestamptz\"],\n [\"request_authorities.backend_pid\", \"int4\"],\n [\"request_authorities.transaction_id\", \"xid8\"],\n [\"request_authorities.request_id\", \"uuid\"],\n [\"request_authorities.credential_id\", \"uuid\"],\n [\"request_authorities.workspace_id\", \"text\"],\n [\"request_authorities.principal\", \"text\"],\n [\"request_authorities.scopes\", \"_text\"],\n [\"request_authorities.opened_session_user\", \"name\"],\n [\"row_isolation_attestations.name\", \"text\"],\n [\"row_isolation_attestations.catalog_definition\", \"text\"],\n [\"row_isolation_attestations.attested_at\", \"timestamptz\"],\n [\"control_requests.request_id\", \"uuid\"],\n [\"control_requests.operation\", \"text\"],\n [\"control_requests.fingerprint\", \"bpchar\"],\n [\"control_requests.actor\", \"name\"],\n [\"control_requests.result\", \"jsonb\"],\n [\"control_requests.created_at\", \"timestamptz\"],\n [\"control_events.sequence\", \"int8\"],\n [\"control_events.event_id\", \"uuid\"],\n [\"control_events.request_id\", \"uuid\"],\n [\"control_events.operation\", \"text\"],\n [\"control_events.outcome\", \"text\"],\n [\"control_events.actor\", \"name\"],\n [\"control_events.workspace_id\", \"text\"],\n [\"control_events.principal\", \"text\"],\n [\"control_events.credential_id\", \"uuid\"],\n [\"control_events.related_credential_id\", \"uuid\"],\n [\"control_events.reason_code\", \"text\"],\n [\"control_events.created_at\", \"timestamptz\"],\n [\"owner_control_attestations.name\", \"text\"],\n [\"owner_control_attestations.catalog_definition\", \"text\"],\n [\"owner_control_attestations.attested_at\", \"timestamptz\"],\n [\"control_membership_events.sequence\", \"int8\"],\n [\"control_membership_events.request_id\", \"uuid\"],\n [\"control_membership_events.action\", \"text\"],\n [\"control_membership_events.member_role\", \"name\"],\n [\"control_membership_events.control_role\", \"text\"],\n [\"control_membership_events.actor\", \"name\"],\n [\"control_membership_events.created_at\", \"timestamptz\"],\n [\"archive_membership_events.sequence\", \"int8\"],\n [\"archive_membership_events.request_id\", \"uuid\"],\n [\"archive_membership_events.action\", \"text\"],\n [\"archive_membership_events.member_role\", \"name\"],\n [\"archive_membership_events.actor\", \"name\"],\n [\"archive_membership_events.created_at\", \"timestamptz\"],\n [\"archive_operations.sequence\", \"int8\"],\n [\"archive_operations.request_id\", \"uuid\"],\n [\"archive_operations.phase\", \"text\"],\n [\"archive_operations.operation\", \"text\"],\n [\"archive_operations.workspace\", \"text\"],\n [\"archive_operations.client_verified_digest\", \"bpchar\"],\n [\"archive_operations.message_count\", \"int8\"],\n [\"archive_operations.receipt_count\", \"int8\"],\n [\"archive_operations.message_inserted_count\", \"int8\"],\n [\"archive_operations.receipt_inserted_count\", \"int8\"],\n [\"archive_operations.server_content_binding\", \"bpchar\"],\n [\"archive_operations.outcome\", \"text\"],\n [\"archive_operations.failure_code\", \"text\"],\n [\"archive_operations.published_at\", \"timestamptz\"],\n [\"archive_operations.apply\", \"bool\"],\n [\"archive_operations.actor\", \"name\"],\n [\"archive_operations.created_at\", \"timestamptz\"],\n [\"archive_operation_batches.sequence\", \"int8\"],\n [\"archive_operation_batches.request_id\", \"uuid\"],\n [\"archive_operation_batches.record_kind\", \"text\"],\n [\"archive_operation_batches.batch_ordinal\", \"int8\"],\n [\"archive_operation_batches.record_count\", \"int8\"],\n [\"archive_operation_batches.batch_fingerprint\", \"bpchar\"],\n [\"archive_operation_batches.chain_binding\", \"bpchar\"],\n [\"archive_operation_batches.actor\", \"name\"],\n [\"archive_operation_batches.created_at\", \"timestamptz\"],\n [\"archive_import_records.sequence\", \"int8\"],\n [\"archive_import_records.request_id\", \"uuid\"],\n [\"archive_import_records.record_kind\", \"text\"],\n [\"archive_import_records.record_key\", \"text\"],\n [\"archive_import_records.batch_ordinal\", \"int8\"],\n [\"archive_import_records.semantic_fingerprint\", \"bpchar\"],\n [\"archive_import_records.inserted\", \"bool\"],\n [\"archive_import_records.actor\", \"name\"],\n [\"archive_import_records.created_at\", \"timestamptz\"],\n [\"archive_transaction_authorizations.backend_pid\", \"int4\"],\n [\"archive_transaction_authorizations.transaction_id\", \"text\"],\n [\"archive_transaction_authorizations.request_id\", \"uuid\"],\n [\"archive_transaction_authorizations.operation\", \"text\"],\n [\"archive_transaction_authorizations.workspace\", \"text\"],\n [\"archive_transaction_authorizations.client_verified_digest\", \"bpchar\"],\n [\"archive_transaction_authorizations.actor\", \"name\"],\n [\"archive_transaction_authorizations.messages_consumed\", \"bool\"],\n [\"archive_transaction_authorizations.receipts_consumed\", \"bool\"],\n [\"archive_transaction_authorizations.created_at\", \"timestamptz\"],\n [\"portable_archive_attestations.name\", \"text\"],\n [\"portable_archive_attestations.catalog_definition\", \"text\"],\n [\"portable_archive_attestations.attested_at\", \"timestamptz\"],\n [\"messages.sequence\", \"int8\"],\n [\"messages.id\", \"uuid\"],\n [\"messages.workspace\", \"text\"],\n [\"messages.project\", \"text\"],\n [\"messages.source\", \"text\"],\n [\"messages.targets\", \"jsonb\"],\n [\"messages.delivery_mode\", \"text\"],\n [\"messages.delivery_max_attempts\", \"int4\"],\n [\"messages.delivery_retry_base_delay_ms\", \"int4\"],\n [\"messages.delivery_retry_max_delay_ms\", \"int4\"],\n [\"messages.delivery_retry_jitter_ratio\", \"float8\"],\n [\"messages.delivery_not_before\", \"timestamptz\"],\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.publisher\", \"text\"],\n [\"deliveries.recipient\", \"text\"],\n [\"deliveries.state\", \"text\"],\n [\"deliveries.lease_token\", \"uuid\"],\n [\"deliveries.created_at\", \"timestamptz\"],\n [\"deliveries.priority_rank\", \"int2\"],\n [\"deliveries.cycle_attempt\", \"int4\"],\n [\"deliveries.requeue_count\", \"int4\"],\n [\"deliveries.last_actor\", \"text\"],\n [\"deliveries.last_action\", \"text\"],\n [\"delivery_events.delivery_id\", \"uuid\"],\n [\"delivery_events.publisher\", \"text\"],\n [\"delivery_events.to_state\", \"text\"],\n [\"delivery_events.cycle_attempt\", \"int4\"],\n [\"delivery_events.requeue_count\", \"int4\"],\n [\"delivery_events.actor\", \"text\"],\n [\"delivery_events.action\", \"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 { version: 8, name: \"message_projects\" },\n { version: 9, name: \"mailbox_query_indexes\" },\n { version: 10, name: \"publisher_delivery_policy\" },\n { version: 11, name: \"credential_security\" },\n { version: 12, name: \"request_authority\" },\n { version: 13, name: \"row_isolation\" },\n { version: 14, name: \"owner_control_plane\" },\n { version: 15, name: \"portable_archives\" },\n { version: 16, name: \"native_dr_fence\" },\n] as const;\n\nfunction withNativeDrSharedLock(source: string): string {\n if (!/^begin;\\s/i.test(source)) {\n throw new Error(\"migration must begin with an explicit transaction\");\n }\n return source.replace(\n /^begin;\\s/i,\n `begin;\\n\\nselect pg_advisory_xact_lock_shared(${NATIVE_DR_ADVISORY_LOCK_KEY});\\n\\n`,\n );\n}\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 rowIsolationReady(db: PgQueryable, allowPrivilegedCaller: boolean): Promise<boolean> {\n const result = await db.query<{\n rolesReady: boolean;\n callerReady: boolean;\n callerBypasses: boolean;\n ownershipReady: boolean;\n policiesReady: boolean;\n functionsReady: boolean;\n constraintsReady: boolean;\n triggersReady: boolean;\n grantsReady: boolean;\n catalogReady: boolean;\n }>(`WITH names AS (\n SELECT\n ('agent_bridge_runtime_' || substr(md5(current_database()),1,16))::name AS runtime_role,\n ('agent_bridge_data_owner_' || substr(md5(current_database()),1,16))::name AS data_owner,\n ('agent_bridge_context_reader_' || substr(md5(current_database()),1,16))::name AS context_reader,\n ('agent_bridge_event_writer_' || substr(md5(current_database()),1,16))::name AS event_writer\n ), required_roles(role_name) AS (\n SELECT runtime_role FROM names UNION ALL SELECT data_owner FROM names\n UNION ALL SELECT context_reader FROM names UNION ALL SELECT event_writer FROM names\n ), domain_tables(table_name) AS (\n VALUES ('messages'),('receipts'),('deliveries'),('delivery_events'),('agent_instances')\n ), caller_role AS (\n SELECT * FROM pg_roles WHERE rolname=current_user\n ), expected_policies(table_name,policy_name,command_name,role_name,needs_workspace,needs_principal) AS (\n SELECT 'messages','messages_owner_all','*',data_owner::text,false,false FROM names UNION ALL\n SELECT 'messages','messages_runtime_select','r',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'messages','messages_runtime_insert','a',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'receipts','receipts_owner_all','*',data_owner::text,false,false FROM names UNION ALL\n SELECT 'receipts','receipts_runtime_select','r',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'receipts','receipts_runtime_insert','a',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'deliveries','deliveries_owner_all','*',data_owner::text,false,false FROM names UNION ALL\n SELECT 'deliveries','deliveries_runtime_select','r',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'deliveries','deliveries_runtime_insert','a',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'deliveries','deliveries_runtime_update','w',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'delivery_events','delivery_events_owner_all','*',data_owner::text,false,false FROM names UNION ALL\n SELECT 'delivery_events','delivery_events_runtime_select','r',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'delivery_events','delivery_events_writer_insert','a',event_writer::text,false,false FROM names UNION ALL\n SELECT 'agent_instances','agent_instances_owner_all','*',data_owner::text,false,false FROM names UNION ALL\n SELECT 'agent_instances','agent_instances_runtime_select','r',runtime_role::text,true,false FROM names UNION ALL\n SELECT 'agent_instances','agent_instances_runtime_insert','a',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'agent_instances','agent_instances_runtime_update','w',runtime_role::text,true,true FROM names UNION ALL\n SELECT 'agent_instances','agent_instances_runtime_delete','d',runtime_role::text,true,true FROM names\n ), actual_policies AS (\n SELECT relation.relname AS table_name,policy.polname AS policy_name,\n policy.polcmd AS command_name,policy.polpermissive,\n ARRAY(SELECT role.rolname::text FROM unnest(policy.polroles) member(oid)\n JOIN pg_roles role ON role.oid=member.oid ORDER BY role.rolname) AS role_names,\n coalesce(pg_get_expr(policy.polqual,policy.polrelid),'') || ' ' ||\n coalesce(pg_get_expr(policy.polwithcheck,policy.polrelid),'') AS expressions\n FROM pg_policy policy\n JOIN pg_class relation ON relation.oid=policy.polrelid\n JOIN pg_namespace namespace ON namespace.oid=relation.relnamespace\n WHERE namespace.nspname='agent_bridge'\n AND relation.relname IN (SELECT table_name FROM domain_tables)\n )\n SELECT\n (SELECT count(*)=4 AND bool_and(\n role.rolname=(required.role_name::text)\n AND NOT role.rolcanlogin AND NOT role.rolsuper AND NOT role.rolcreatedb\n AND NOT role.rolcreaterole AND NOT role.rolreplication AND NOT role.rolbypassrls\n )\n FROM required_roles required JOIN pg_roles role ON role.rolname=required.role_name::text) AS \"rolesReady\",\n ((SELECT rolsuper OR rolbypassrls FROM caller_role) OR (\n (SELECT rolcanlogin AND rolinherit AND NOT rolsuper AND NOT rolcreatedb\n AND NOT rolcreaterole AND NOT rolreplication AND NOT rolbypassrls\n FROM caller_role)\n AND pg_has_role(current_user,(SELECT runtime_role FROM names),'MEMBER')\n AND NOT EXISTS (\n SELECT 1 FROM pg_roles unexpected\n WHERE unexpected.oid<>(SELECT oid FROM caller_role)\n AND unexpected.rolname<>(SELECT runtime_role::text FROM names)\n AND pg_has_role(current_user,unexpected.oid,'MEMBER')\n )\n )) AS \"callerReady\",\n EXISTS (\n SELECT 1 FROM pg_roles elevated\n WHERE (elevated.rolsuper OR elevated.rolbypassrls)\n AND pg_has_role(current_user,elevated.oid,'MEMBER')\n ) AS \"callerBypasses\",\n (SELECT count(*)=5 AND bool_and(\n relation.relrowsecurity AND relation.relforcerowsecurity\n AND owner.rolname=(SELECT data_owner::text FROM names)\n )\n FROM domain_tables required\n JOIN pg_namespace namespace ON namespace.nspname='agent_bridge'\n JOIN pg_class relation ON relation.relnamespace=namespace.oid AND relation.relname=required.table_name\n JOIN pg_roles owner ON owner.oid=relation.relowner)\n AND EXISTS (\n SELECT 1 FROM pg_class attestation\n JOIN pg_namespace namespace ON namespace.oid=attestation.relnamespace\n WHERE namespace.nspname='agent_bridge'\n AND attestation.relname='row_isolation_attestations'\n AND attestation.relowner=namespace.nspowner\n ) AS \"ownershipReady\",\n ((SELECT count(*) FROM actual_policies)=18 AND NOT EXISTS (\n SELECT 1 FROM expected_policies expected\n LEFT JOIN actual_policies actual\n ON actual.table_name=expected.table_name AND actual.policy_name=expected.policy_name\n WHERE actual.policy_name IS NULL OR actual.command_name<>expected.command_name\n OR NOT actual.polpermissive OR actual.role_names<>ARRAY[expected.role_name]\n OR (expected.needs_workspace AND position('current_request_workspace' in actual.expressions)=0)\n OR (expected.needs_principal AND position('current_request_principal' in actual.expressions)=0)\n OR (NOT expected.needs_workspace AND NOT expected.needs_principal\n AND position('true' in actual.expressions)=0)\n )) AS \"policiesReady\",\n (SELECT count(*)=4 AND bool_and(\n procedure.proconfig @> ARRAY['search_path=\"\"']::text[]\n AND CASE procedure.proname\n WHEN 'record_delivery_event' THEN owner.rolname=(SELECT event_writer::text FROM names)\n AND procedure.prosecdef AND procedure.provolatile='v'\n WHEN 'row_isolation_catalog_definition' THEN\n owner.oid=(SELECT relation.relowner FROM pg_class relation\n JOIN pg_namespace namespace ON namespace.oid=relation.relnamespace\n WHERE namespace.nspname='agent_bridge'\n AND relation.relname='row_isolation_attestations')\n AND NOT procedure.prosecdef AND procedure.provolatile='s'\n ELSE owner.rolname=(SELECT context_reader::text FROM names)\n AND procedure.prosecdef AND procedure.provolatile='s'\n END\n )\n FROM pg_proc procedure\n JOIN pg_namespace namespace ON namespace.oid=procedure.pronamespace\n JOIN pg_roles owner ON owner.oid=procedure.proowner\n WHERE namespace.nspname='agent_bridge'\n AND procedure.proname IN (\n 'current_request_workspace','current_request_principal',\n 'record_delivery_event','row_isolation_catalog_definition'\n ))\n AND NOT EXISTS (\n SELECT 1 FROM pg_proc private_function\n JOIN pg_namespace private_namespace ON private_namespace.oid=private_function.pronamespace\n WHERE private_namespace.nspname='agent_bridge'\n AND has_function_privilege('public',private_function.oid,'EXECUTE')\n )\n AND has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.current_request_workspace()','EXECUTE')\n AND has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.current_request_principal()','EXECUTE')\n AND has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.row_isolation_catalog_definition()','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.record_delivery_event()','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.reject_delivery_identity_mutation()','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.enforce_delivery_actor_role()','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.reject_delivery_event_mutation()','EXECUTE')\n AS \"functionsReady\",\n ((SELECT count(*)=5 AND bool_and(constraint_record.convalidated)\n FROM (VALUES\n ('agent_bridge.messages'::regclass,'messages_workspace_id_source_unique'),\n ('agent_bridge.deliveries'::regclass,'deliveries_publisher_message_fk'),\n ('agent_bridge.deliveries'::regclass,'deliveries_event_identity_unique'),\n ('agent_bridge.delivery_events'::regclass,'delivery_events_delivery_publisher_fk'),\n ('agent_bridge.row_isolation_attestations'::regclass,'row_isolation_attestation_name')\n ) required(relation_id,constraint_name)\n JOIN pg_constraint constraint_record\n ON constraint_record.conrelid=required.relation_id\n AND constraint_record.conname=required.constraint_name)\n AND (SELECT count(*)=2 AND bool_and(attribute.attnotnull)\n FROM pg_attribute attribute\n WHERE (attribute.attrelid,attribute.attname) IN (\n ('agent_bridge.deliveries'::regclass,'publisher'),\n ('agent_bridge.delivery_events'::regclass,'publisher')\n ) AND attribute.attnum>0 AND NOT attribute.attisdropped)\n ) AS \"constraintsReady\",\n (SELECT count(*)=4 AND bool_and(trigger.tgenabled='O')\n FROM (VALUES\n ('agent_bridge.deliveries'::regclass,'deliveries_record_event'),\n ('agent_bridge.deliveries'::regclass,'deliveries_identity_immutable'),\n ('agent_bridge.deliveries'::regclass,'deliveries_actor_role'),\n ('agent_bridge.delivery_events'::regclass,'delivery_events_append_only')\n ) required(relation_id,trigger_name)\n JOIN pg_trigger trigger ON trigger.tgrelid=required.relation_id\n AND trigger.tgname=required.trigger_name AND NOT trigger.tgisinternal) AS \"triggersReady\",\n (has_schema_privilege((SELECT runtime_role FROM names),'agent_bridge','USAGE')\n AND NOT has_schema_privilege((SELECT runtime_role FROM names),'agent_bridge','CREATE')\n AND has_schema_privilege((SELECT data_owner FROM names),'agent_bridge','USAGE')\n AND NOT has_schema_privilege((SELECT data_owner FROM names),'agent_bridge','CREATE')\n AND has_schema_privilege((SELECT context_reader FROM names),'agent_bridge','USAGE')\n AND NOT has_schema_privilege((SELECT context_reader FROM names),'agent_bridge','CREATE')\n AND has_schema_privilege((SELECT event_writer FROM names),'agent_bridge','USAGE')\n AND NOT has_schema_privilege((SELECT event_writer FROM names),'agent_bridge','CREATE')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.messages','SELECT')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.messages','INSERT')\n AND NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.messages','UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.receipts','SELECT')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.receipts','INSERT')\n AND NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.receipts','UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.deliveries','SELECT')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.deliveries','INSERT')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.deliveries','UPDATE')\n AND NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.deliveries','DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.delivery_events','SELECT')\n AND NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.delivery_events','INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.agent_instances','SELECT')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.agent_instances','INSERT')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.agent_instances','UPDATE')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.agent_instances','DELETE')\n AND NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.agent_instances','TRUNCATE,REFERENCES,TRIGGER')\n AND has_sequence_privilege((SELECT runtime_role FROM names),'agent_bridge.messages_sequence_seq','USAGE')\n AND NOT has_sequence_privilege((SELECT runtime_role FROM names),'agent_bridge.messages_sequence_seq','SELECT,UPDATE')\n AND NOT has_sequence_privilege((SELECT runtime_role FROM names),'agent_bridge.delivery_events_sequence_seq','USAGE,SELECT,UPDATE')\n AND has_table_privilege((SELECT context_reader FROM names),'agent_bridge.request_authorities','SELECT')\n AND NOT has_table_privilege((SELECT context_reader FROM names),'agent_bridge.request_authorities','INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND has_table_privilege((SELECT event_writer FROM names),'agent_bridge.delivery_events','INSERT')\n AND NOT has_table_privilege((SELECT event_writer FROM names),'agent_bridge.delivery_events','SELECT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND NOT EXISTS (\n SELECT 1 FROM pg_class relation\n JOIN pg_namespace namespace ON namespace.oid=relation.relnamespace\n WHERE namespace.nspname='agent_bridge' AND relation.relkind IN ('r','p','v','m','f')\n AND (\n (relation.relname<>'request_authorities' AND has_table_privilege(\n (SELECT context_reader FROM names),relation.oid,\n 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER'\n ))\n OR (relation.relname<>'delivery_events' AND has_table_privilege(\n (SELECT event_writer FROM names),relation.oid,\n 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER'\n ))\n )\n )\n AND has_sequence_privilege((SELECT event_writer FROM names),'agent_bridge.delivery_events_sequence_seq','USAGE')\n AND NOT has_sequence_privilege((SELECT event_writer FROM names),'agent_bridge.delivery_events_sequence_seq','SELECT,UPDATE')\n AND NOT EXISTS (\n SELECT 1 FROM pg_class sequence\n JOIN pg_namespace namespace ON namespace.oid=sequence.relnamespace\n WHERE namespace.nspname='agent_bridge' AND sequence.relkind='S'\n AND (\n has_sequence_privilege((SELECT context_reader FROM names),sequence.oid,'USAGE,SELECT,UPDATE')\n OR (sequence.relname<>'delivery_events_sequence_seq' AND has_sequence_privilege(\n (SELECT event_writer FROM names),sequence.oid,'USAGE,SELECT,UPDATE'\n ))\n )\n )\n AND NOT has_sequence_privilege('public','agent_bridge.messages_sequence_seq','USAGE,SELECT,UPDATE')\n AND NOT has_sequence_privilege('public','agent_bridge.delivery_events_sequence_seq','USAGE,SELECT,UPDATE')\n AND has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.row_isolation_attestations','SELECT')\n AND NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.row_isolation_attestations','INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND NOT EXISTS (\n SELECT 1\n FROM unnest(ARRAY[\n 'agent_bridge.credentials','agent_bridge.agents',\n 'agent_bridge.workspaces','agent_bridge.request_authorities'\n ]) protected_table(value)\n CROSS JOIN unnest(ARRAY[\n 'SELECT','INSERT','UPDATE','DELETE','TRUNCATE','REFERENCES','TRIGGER'\n ]) requested_privilege(value)\n WHERE has_table_privilege(\n (SELECT runtime_role FROM names),protected_table.value,requested_privilege.value\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM unnest(ARRAY[\n 'agent_bridge.credentials','agent_bridge.agents',\n 'agent_bridge.workspaces','agent_bridge.request_authorities'\n ]) protected_table(value)\n CROSS JOIN unnest(ARRAY['SELECT','INSERT','UPDATE','REFERENCES']) requested_privilege(value)\n WHERE has_any_column_privilege(\n (SELECT runtime_role FROM names),protected_table.value,requested_privilege.value\n )\n )\n AND NOT has_table_privilege('public','agent_bridge.row_isolation_attestations','SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER')\n AND NOT pg_has_role((SELECT runtime_role FROM names),(SELECT data_owner FROM names),'MEMBER')\n AND NOT pg_has_role((SELECT runtime_role FROM names),(SELECT context_reader FROM names),'MEMBER')\n AND NOT pg_has_role((SELECT runtime_role FROM names),(SELECT event_writer FROM names),'MEMBER')\n AND NOT EXISTS (\n SELECT 1 FROM pg_proc private_function\n JOIN pg_namespace namespace ON namespace.oid=private_function.pronamespace\n WHERE namespace.nspname='agent_bridge'\n AND (\n (NOT (private_function.proname IN ('current_request_workspace','current_request_principal')\n AND private_function.pronargs=0)\n AND has_function_privilege((SELECT context_reader FROM names),private_function.oid,'EXECUTE'))\n OR (NOT (private_function.proname='record_delivery_event' AND private_function.pronargs=0)\n AND has_function_privilege((SELECT event_writer FROM names),private_function.oid,'EXECUTE'))\n )\n )\n ) AS \"grantsReady\",\n (SELECT count(*)=1 AND bool_and(\n attestation.catalog_definition=agent_bridge.row_isolation_catalog_definition()\n )\n FROM agent_bridge.row_isolation_attestations attestation\n WHERE attestation.name='domain-v1') AS \"catalogReady\"\n `);\n const row = result.rows[0];\n const callerReady = row?.callerReady && (allowPrivilegedCaller || !row.callerBypasses);\n return Boolean(\n row?.rolesReady && callerReady && row.ownershipReady && row.policiesReady &&\n row.functionsReady && row.constraintsReady && row.triggersReady && row.grantsReady && row.catalogReady\n );\n}\n\nexport async function runtimeSchemaReady(\n db: PgQueryable,\n options: { allowPrivilegedCaller?: boolean } = {},\n): Promise<boolean> {\n const columns = await db.query<{ table_name: string; column_name: string; udt_name: string }>(\n `SELECT relation.relname AS table_name, attribute.attname AS column_name,\n type.typname AS udt_name\n FROM pg_catalog.pg_attribute attribute\n JOIN pg_catalog.pg_class relation ON relation.oid=attribute.attrelid\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=relation.relnamespace\n JOIN pg_catalog.pg_type type ON type.oid=attribute.atttypid\n WHERE namespace.nspname='agent_bridge'\n AND attribute.attnum>0 AND NOT attribute.attisdropped`,\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; publisher: boolean; terminal: boolean; source: boolean; thread: boolean; created: boolean; presence: boolean; project: boolean; targets: boolean; scopeSets: boolean; securityEvents: boolean; ratePolicies: boolean; rateBuckets: boolean; replacement: boolean; rateCleanup: boolean; credentialSecurity: boolean; eventAppendOnly: boolean; scopeAudit: boolean; rateConsume: boolean; securityReady: boolean; requestAuthorities: boolean; authorityOpen: boolean; authorityClose: boolean; credentialDigestHidden: boolean; authorityRowsHidden: boolean; principalTablesHidden: boolean; authorityTablesLocked: boolean; authorityCatalog: boolean }>(\n `WITH names AS (\n SELECT ('agent_bridge_runtime_' || substr(md5(current_database()),1,16))::name AS runtime_role\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.deliveries_publisher_lookup') IS NOT NULL AS publisher,\n to_regclass('agent_bridge.deliveries_terminal_lookup') IS NOT NULL AS terminal,\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.messages_project') IS NOT NULL AS project,\n to_regclass('agent_bridge.messages_targets_gin') IS NOT NULL AS targets,\n to_regclass('agent_bridge.agent_instances_active') IS NOT NULL AS presence,\n to_regclass('agent_bridge.credential_scope_sets') IS NOT NULL AS \"scopeSets\",\n to_regclass('agent_bridge.security_events') IS NOT NULL AS \"securityEvents\",\n to_regclass('agent_bridge.rate_limit_policies') IS NOT NULL AS \"ratePolicies\",\n to_regclass('agent_bridge.rate_limit_buckets') IS NOT NULL AS \"rateBuckets\",\n to_regclass('agent_bridge.credentials_replacement_lineage') IS NOT NULL AS replacement,\n to_regclass('agent_bridge.rate_limit_buckets_cleanup') IS NOT NULL AS \"rateCleanup\",\n EXISTS (\n SELECT 1 FROM pg_trigger\n WHERE tgrelid=to_regclass('agent_bridge.credentials')\n AND tgname='credentials_validate_security' AND NOT tgisinternal\n ) AS \"credentialSecurity\",\n EXISTS (\n SELECT 1 FROM pg_trigger\n WHERE tgrelid=to_regclass('agent_bridge.security_events')\n AND tgname='security_events_append_only' AND NOT tgisinternal\n ) AS \"eventAppendOnly\",\n to_regprocedure('agent_bridge.record_scope_denial(uuid,text,uuid)') IS NOT NULL AS \"scopeAudit\",\n to_regprocedure('agent_bridge.consume_rate_limit(uuid,text,uuid)') IS NOT NULL AS \"rateConsume\",\n to_regprocedure('agent_bridge.security_schema_ready()') IS NOT NULL AS \"securityReady\",\n to_regclass('agent_bridge.request_authorities') IS NOT NULL AS \"requestAuthorities\",\n to_regprocedure('agent_bridge.open_request_authority(uuid,text,uuid)') IS NOT NULL\n AND to_regprocedure('agent_bridge.resolve_credential_hash(text)') IS NOT NULL AS \"authorityOpen\",\n to_regprocedure('agent_bridge.close_request_authority()') IS NOT NULL AS \"authorityClose\",\n NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.credentials','SELECT') AS \"credentialDigestHidden\",\n NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.request_authorities','SELECT') AS \"authorityRowsHidden\",\n (NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.agents','SELECT')\n AND NOT has_table_privilege((SELECT runtime_role FROM names),'agent_bridge.workspaces','SELECT')) AS \"principalTablesHidden\",\n (\n NOT EXISTS (\n SELECT 1\n FROM unnest(ARRAY[\n 'agent_bridge.credentials','agent_bridge.agents',\n 'agent_bridge.workspaces','agent_bridge.request_authorities'\n ]) protected_table(value)\n CROSS JOIN unnest(ARRAY[\n 'SELECT','INSERT','UPDATE','DELETE','TRUNCATE','REFERENCES','TRIGGER'\n ]) requested_privilege(value)\n WHERE has_table_privilege(\n (SELECT runtime_role FROM names),protected_table.value,requested_privilege.value\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM unnest(ARRAY[\n 'agent_bridge.credentials','agent_bridge.agents',\n 'agent_bridge.workspaces','agent_bridge.request_authorities'\n ]) protected_table(value)\n CROSS JOIN unnest(ARRAY['SELECT','INSERT','UPDATE','REFERENCES']) requested_privilege(value)\n WHERE has_any_column_privilege(\n (SELECT runtime_role FROM names),protected_table.value,requested_privilege.value\n )\n )\n ) AS \"authorityTablesLocked\",\n (\n has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.resolve_credential_hash(text)','EXECUTE')\n AND has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.open_request_authority(uuid,text,uuid)','EXECUTE')\n AND has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.close_request_authority()','EXECUTE')\n AND has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.record_scope_denial(uuid,text,uuid)','EXECUTE')\n AND has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.consume_rate_limit(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.active_request_authority()','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.assert_active_request_credential(uuid)','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.record_scope_denial_unbound_011(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege((SELECT runtime_role FROM names),'agent_bridge.consume_rate_limit_unbound_011(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.resolve_credential_hash(text)','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.open_request_authority(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.close_request_authority()','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.record_scope_denial(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.consume_rate_limit(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.record_scope_denial_unbound_011(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.consume_rate_limit_unbound_011(uuid,text,uuid)','EXECUTE')\n AND NOT EXISTS (\n SELECT 1 FROM pg_proc procedure\n JOIN pg_namespace namespace ON namespace.oid=procedure.pronamespace\n WHERE namespace.nspname='agent_bridge'\n AND procedure.proname IN (\n 'resolve_credential_hash','open_request_authority','active_request_authority',\n 'assert_active_request_credential','close_request_authority','record_scope_denial',\n 'consume_rate_limit','record_scope_denial_unbound_011','consume_rate_limit_unbound_011'\n )\n AND (\n NOT procedure.prosecdef\n OR procedure.proowner <> (SELECT nspowner FROM pg_namespace WHERE nspname='agent_bridge')\n OR NOT coalesce(procedure.proconfig @> ARRAY['search_path=\"\"'],false)\n )\n )\n ) AS \"authorityCatalog\"`,\n );\n const row = objects.rows[0];\n if (!Boolean(\n row?.immutable && row.deliveryAudit && row.idempotency && row.claim && row.publisher &&\n row.terminal && row.source && row.thread && row.created && row.presence && row.project &&\n row.targets && row.scopeSets && row.securityEvents && row.ratePolicies && row.rateBuckets &&\n row.replacement && row.rateCleanup && row.credentialSecurity && row.eventAppendOnly &&\n row.scopeAudit && row.rateConsume && row.securityReady && row.requestAuthorities &&\n row.authorityOpen && row.authorityClose && row.credentialDigestHidden && row.authorityRowsHidden &&\n row.principalTablesHidden && row.authorityTablesLocked && row.authorityCatalog\n )) return false;\n try {\n const security = await db.query<{ ready: boolean }>(\n \"SELECT agent_bridge.security_schema_ready() AS ready\",\n );\n const ownerControl = await db.query<{ ready: boolean }>(\n \"SELECT agent_bridge.owner_control_plane_ready() AS ready\",\n );\n const portableArchive = await db.query<{ ready: boolean }>(\n \"SELECT agent_bridge.portable_archive_ready() AS ready\",\n );\n return security.rows[0]?.ready === true && ownerControl.rows[0]?.ready === true &&\n portableArchive.rows[0]?.ready === true && await rowIsolationReady(\n db,\n options.allowPrivilegedCaller === true,\n );\n } catch {\n return false;\n }\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(withNativeDrSharedLock(\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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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6QF;AACD,QAAM,MAAM,OAAO,KAAK,CAAC;AACzB,QAAM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","names":["row"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bridge-service.ts"],"sourcesContent":["import {\n BridgePrincipalMismatchError,\n BridgeValidationError,\n encodeCursor,\n validateMessageDraft,\n validatePrincipal,\n validateProject,\n validateUuid,\n type BridgeDelivery,\n type BridgeMessage,\n type BridgePrincipal,\n type MessageDraft,\n type AgentPresence,\n type DeliveryState,\n} from \"./bridge-domain.js\";\nimport type {\n BridgeStore,\n DeliveryQuery,\n InsertMessageResult,\n MessagePage,\n MessageQuery,\n} from \"./bridge-store.js\";\n\nfunction validateDeprecatedMaxAttempts(value: unknown): void {\n if (value === undefined) return;\n if (!Number.isSafeInteger(value) || Number(value) < 1 || Number(value) > 100) {\n throw new BridgeValidationError(\"maxAttempts must be between 1 and 100\");\n }\n}\n\nfunction validateDeprecatedRetryPolicy(value: unknown): void {\n if (value === undefined) return;\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new BridgeValidationError(\"retryPolicy must be an object\");\n }\n const allowed = new Set([\"maxAttempts\", \"baseDelayMs\", \"maxDelayMs\", \"jitterRatio\"]);\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) throw new BridgeValidationError(`retryPolicy.${key} is not supported`);\n }\n const policy = value as Record<string, unknown>;\n validateDeprecatedMaxAttempts(policy.maxAttempts);\n for (const [key, maximum] of [[\"baseDelayMs\", 3_600_000], [\"maxDelayMs\", 86_400_000]] as const) {\n if (policy[key] !== undefined && (!Number.isSafeInteger(policy[key]) || Number(policy[key]) < 1 || Number(policy[key]) > maximum)) {\n throw new BridgeValidationError(`${key} is invalid`);\n }\n }\n if (policy.jitterRatio !== undefined && (!Number.isFinite(policy.jitterRatio) || Number(policy.jitterRatio) < 0 || Number(policy.jitterRatio) > 1)) {\n throw new BridgeValidationError(\"jitterRatio must be between 0 and 1\");\n }\n}\n\nfunction validateLeaseMs(value = 30_000): number {\n if (!Number.isSafeInteger(value) || value < 1_000 || value > 15 * 60_000) {\n throw new BridgeValidationError(\"leaseMs must be between 1000 and 900000\");\n }\n return value;\n}\n\nexport type PublicMessageQuery = MessageQuery & { unacknowledgedBy?: string };\n\nfunction validateQuery(query: PublicMessageQuery, principal: BridgePrincipal): MessageQuery {\n const limit = query.limit ?? 50;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 200) {\n throw new BridgeValidationError(\"limit must be between 1 and 200\");\n }\n if (query.types !== undefined) {\n if (!Array.isArray(query.types) || query.types.length > 64) {\n throw new BridgeValidationError(\"types must contain at most 64 entries\");\n }\n for (const type of query.types) {\n if (typeof type !== \"string\" || !type.trim() || type.length > 128) {\n throw new BridgeValidationError(\"type filter is invalid\");\n }\n }\n }\n const source = query.source?.trim();\n if (source !== undefined && (!source || source.length > 128)) {\n throw new BridgeValidationError(\"source filter is invalid\");\n }\n const unacknowledgedBy = query.unacknowledgedBy?.trim();\n if (\n unacknowledgedBy !== undefined &&\n (!unacknowledgedBy || unacknowledgedBy.length > 128)\n ) {\n throw new BridgeValidationError(\"unacknowledgedBy filter is invalid\");\n }\n if (unacknowledgedBy !== undefined && unacknowledgedBy !== principal.agent) {\n throw new BridgePrincipalMismatchError(\"unacknowledgedBy must equal the configured principal\");\n }\n const mailbox = query.mailbox ?? \"inbox\";\n if (![\"inbox\", \"sent\", \"all\"].includes(mailbox)) throw new BridgeValidationError(\"mailbox is invalid\");\n const receiptState = query.receiptState ?? (unacknowledgedBy ? \"unread\" : \"any\");\n if (![\"any\", \"unread\", \"read\"].includes(receiptState)) throw new BridgeValidationError(\"receiptState is invalid\");\n if (mailbox !== \"inbox\" && receiptState !== \"any\") {\n throw new BridgeValidationError(\"receiptState is valid only for inbox\");\n }\n let since: string | undefined;\n if (query.since !== undefined) {\n const date = new Date(query.since);\n if (Number.isNaN(date.getTime())) throw new BridgeValidationError(\"since must be an ISO timestamp\");\n since = date.toISOString();\n }\n const threadId = query.threadId?.trim();\n if (threadId !== undefined && (!threadId || threadId.length > 128)) {\n throw new BridgeValidationError(\"threadId filter is invalid\");\n }\n if (query.latest && query.cursor) {\n throw new BridgeValidationError(\"latest cannot be combined with cursor\");\n }\n const { unacknowledgedBy: _compat, ...storeQuery } = query;\n return { ...storeQuery, mailbox, receiptState, project: validateProject(query.project), limit, source, since, threadId, latest: query.latest === true };\n}\n\nexport class BridgeService {\n constructor(private readonly store: BridgeStore) {}\n\n async publish(\n principalInput: BridgePrincipal,\n draftInput: MessageDraft,\n ): Promise<InsertMessageResult> {\n const principal = validatePrincipal(principalInput);\n const draft = validateMessageDraft(draftInput);\n return this.store.insertMessage({\n ...draft,\n workspace: principal.workspace,\n source: principal.agent,\n });\n }\n\n async history(\n principalInput: BridgePrincipal,\n query: PublicMessageQuery = {},\n ): Promise<MessagePage> {\n const principal = validatePrincipal(principalInput);\n return this.store.listMessages(principal, validateQuery(query, principal));\n }\n\n async acknowledge(principalInput: BridgePrincipal, messageIds: string[]): Promise<number> {\n const principal = validatePrincipal(principalInput);\n if (!Array.isArray(messageIds) || !messageIds.length || messageIds.length > 200) {\n throw new BridgeValidationError(\"messageIds must contain between 1 and 200 entries\");\n }\n const ids = messageIds.map((id) => validateUuid(id, \"messageId\"));\n return this.store.recordReceipt(principal, ids);\n }\n\n async claim(\n principalInput: BridgePrincipal,\n options: { leaseMs?: number; maxAttempts?: number } = {},\n ): Promise<{ delivery: BridgeDelivery; leaseToken: string } | null> {\n const principal = validatePrincipal(principalInput);\n validateDeprecatedMaxAttempts(options.maxAttempts);\n const delivery = await this.store.claimDelivery(principal, {\n leaseMs: validateLeaseMs(options.leaseMs),\n });\n return delivery?.leaseToken ? { delivery, leaseToken: delivery.leaseToken } : null;\n }\n\n async extend(\n principalInput: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n leaseMs = 30_000,\n ): Promise<BridgeDelivery | null> {\n const principal = validatePrincipal(principalInput);\n return this.store.renewDelivery(\n principal,\n validateUuid(deliveryId, \"deliveryId\"),\n validateUuid(leaseToken, \"leaseToken\"),\n validateLeaseMs(leaseMs),\n );\n }\n\n async ack(\n principalInput: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n ): Promise<BridgeDelivery | null> {\n const principal = validatePrincipal(principalInput);\n return this.store.settleDelivery(\n principal,\n validateUuid(deliveryId, \"deliveryId\"),\n validateUuid(leaseToken, \"leaseToken\"),\n \"acked\",\n undefined,\n );\n }\n\n async nack(\n principalInput: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n error: string,\n disposition: \"retry\" | \"dead\" | boolean = \"retry\",\n deprecatedRetryPolicy?: unknown,\n ): Promise<BridgeDelivery | null> {\n const principal = validatePrincipal(principalInput);\n if (![\"retry\", \"dead\", true, false].includes(disposition as never)) {\n throw new BridgeValidationError(\"disposition must be retry or dead\");\n }\n if (typeof error !== \"string\" || !error.trim()) {\n throw new BridgeValidationError(\"error is required\");\n }\n validateDeprecatedRetryPolicy(deprecatedRetryPolicy);\n return this.store.settleDelivery(\n principal,\n validateUuid(deliveryId, \"deliveryId\"),\n validateUuid(leaseToken, \"leaseToken\"),\n disposition === \"dead\" || disposition === true ? \"dead\" : \"retrying\",\n error.slice(0, 1_024),\n );\n }\n\n async deliveries(principalInput: BridgePrincipal, query: DeliveryQuery = {}) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.listDeliveries) throw new BridgeValidationError(\"delivery listing is not supported by this provider\");\n const limit = query.limit ?? 50;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 200) throw new BridgeValidationError(\"limit must be between 1 and 200\");\n const role = query.role ?? \"all\";\n if (![\"recipient\", \"publisher\", \"all\"].includes(role)) throw new BridgeValidationError(\"role is invalid\");\n const validStates: DeliveryState[] = [\"pending\", \"claimed\", \"acked\", \"retrying\", \"dead\", \"cancelled\"];\n if (query.states !== undefined && (!Array.isArray(query.states) || query.states.some((state) => !validStates.includes(state)))) {\n throw new BridgeValidationError(\"states contains an invalid delivery state\");\n }\n const recipient = query.recipient?.trim();\n if (recipient !== undefined && (!recipient || recipient.length > 128)) throw new BridgeValidationError(\"recipient is invalid\");\n return this.store.listDeliveries(principal, {\n ...query,\n role,\n limit,\n messageId: query.messageId ? validateUuid(query.messageId, \"messageId\") : undefined,\n recipient,\n states: query.states ? [...new Set(query.states)].sort() : undefined,\n });\n }\n\n async deliveryEvents(principalInput: BridgePrincipal, deliveryId: string, query: { cursor?: string; limit?: number } = {}) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.listDeliveryEvents) throw new BridgeValidationError(\"delivery event listing is not supported by this provider\");\n const limit = query.limit ?? 50;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 200) throw new BridgeValidationError(\"limit must be between 1 and 200\");\n return this.store.listDeliveryEvents(principal, validateUuid(deliveryId, \"deliveryId\"), { ...query, limit });\n }\n\n async cancel(principalInput: BridgePrincipal, deliveryId: string) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.cancelDelivery) throw new BridgeValidationError(\"delivery cancellation is not supported by this provider\");\n return this.store.cancelDelivery(principal, validateUuid(deliveryId, \"deliveryId\"));\n }\n\n async requeue(principalInput: BridgePrincipal, deliveryId: string) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.requeueDelivery) throw new BridgeValidationError(\"delivery requeue is not supported by this provider\");\n return this.store.requeueDelivery(principal, validateUuid(deliveryId, \"deliveryId\"));\n }\n\n async heartbeat(\n principalInput: BridgePrincipal,\n options: { leaseMs?: number; runtimeType?: string; capabilities?: string[] } = {},\n ): Promise<AgentPresence> {\n const principal = validatePrincipal(principalInput);\n if (!principal.instance) throw new BridgeValidationError(\"instance is required for presence\");\n if (!this.store.heartbeat) throw new BridgeValidationError(\"presence is not supported by this provider\");\n if (\n options.runtimeType !== undefined &&\n typeof options.runtimeType !== \"string\"\n ) {\n throw new BridgeValidationError(\"runtimeType must be a string\");\n }\n const runtimeType = options.runtimeType?.trim();\n if (runtimeType && runtimeType.length > 128) throw new BridgeValidationError(\"runtimeType exceeds 128 characters\");\n if (options.capabilities !== undefined && !Array.isArray(options.capabilities)) {\n throw new BridgeValidationError(\"capabilities must be an array\");\n }\n const capabilities = [...new Set(options.capabilities ?? [])].map((value) => {\n if (typeof value !== \"string\" || !value.trim() || value.length > 128) throw new BridgeValidationError(\"capability is invalid\");\n return value.trim();\n });\n if (capabilities.length > 64) throw new BridgeValidationError(\"capabilities exceeds 64 entries\");\n return this.store.heartbeat(principal, validateLeaseMs(options.leaseMs), runtimeType, capabilities);\n }\n\n async presence(principalInput: BridgePrincipal): Promise<AgentPresence[]> {\n const principal = validatePrincipal(principalInput);\n if (!this.store.listPresence) throw new BridgeValidationError(\"presence is not supported by this provider\");\n return this.store.listPresence(principal);\n }\n}\n\nexport { encodeCursor, type BridgeMessage };\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sqlite-database-contract.ts","../src/sqlite-bridge-store.ts","../src/sqlite-retry.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { DatabaseSync as Database } from \"node:sqlite\";\n\ntype Row = Record<string, unknown>;\n\nexport const LOCAL_SQLITE_APPLICATION_ID = 0x41424732;\nexport const EDGE_SQLITE_APPLICATION_ID = 0x41424745;\nexport const SQLITE_DATABASE_SCHEMA_VERSION = 1;\nexport const SQLITE_METADATA_TABLE = \"agent_bridge_metadata\";\nexport const LOCAL_SQLITE_SCHEMA_CONTRACTS = Object.freeze([\n Object.freeze({ id: \"current-created-schema\", sha256: \"e2f978c27ea5d151a4b4b3ec349166833441e42401fedfe60dc3ba20f3d713aa\" }),\n Object.freeze({ id: \"current-upgraded-project-column\", sha256: \"cb0975bbc1ccc7a2a66d8f4d76df619804449cf81119972337afad6cdab64451\" }),\n Object.freeze({ id: \"current-upgraded-delivery-policy\", sha256: \"d4fd8905ea73057b27662454c16c038834f5a1bf017db9cfc041792104aa2e6d\" }),\n Object.freeze({ id: \"current-upgraded-delivery-events\", sha256: \"35bdab0cbdf4ce619ba1c7d36032379ae4d9692bd7509e49bb90b409bbbcf632\" }),\n] as const);\nexport const EDGE_SQLITE_SCHEMA_CONTRACTS = Object.freeze([\n Object.freeze({ id: \"current-created-schema\", sha256: \"27f22b2f4024585c87e8d6f76f8999a8df92bb1f585d46594a7a1e852fd53c4c\" }),\n Object.freeze({ id: \"current-upgraded-project-column\", sha256: \"171ae11f520b4963f517d3102de64cb8a5f45c080078ff02e20aeb17891b585c\" }),\n] as const);\nconst localContractHashes = new Set<string>(LOCAL_SQLITE_SCHEMA_CONTRACTS.map((contract) => contract.sha256));\nconst edgeContractHashes = new Set<string>(EDGE_SQLITE_SCHEMA_CONTRACTS.map((contract) => contract.sha256));\nexport const isSupportedLocalSqliteSchemaContract = (hash: string): boolean => localContractHashes.has(hash);\nexport const isSupportedEdgeSqliteSchemaContract = (hash: string): boolean => edgeContractHashes.has(hash);\n\nconst localMetadata = {\n database_kind: \"local-authority\",\n schema_name: \"agent-bridge-local-v2\",\n schema_version: SQLITE_DATABASE_SCHEMA_VERSION,\n} as const;\n\nconst edgeMetadata = {\n database_kind: \"edge-cache\",\n schema_name: \"agent-bridge-edge-v1\",\n schema_version: SQLITE_DATABASE_SCHEMA_VERSION,\n} as const;\n\nconst localColumns: Record<string, readonly string[]> = {\n agent_bridge_metadata: [\"singleton\", \"database_kind\", \"schema_name\", \"schema_version\"],\n bridge_messages: [\n \"sequence\", \"id\", \"workspace\", \"project\", \"source\", \"type\", \"content\", \"content_type\", \"data\", \"targets\",\n \"thread_id\", \"reply_to_id\", \"correlation_id\", \"causation_id\", \"priority\", \"expires_at\", \"idempotency_key\",\n \"atrib_receipt_id\", \"informed_by\", \"metadata\", \"delivery_policy\", \"created_at\",\n ],\n bridge_receipts: [\"workspace\", \"message_id\", \"principal\", \"read_at\"],\n bridge_deliveries: [\n \"id\", \"message_id\", \"workspace\", \"recipient\", \"state\", \"attempt\", \"cycle_attempt\", \"requeue_count\", \"created_at\",\n \"priority_rank\", \"available_at\", \"lease_token\", \"lease_owner\", \"lease_expires_at\", \"last_error\", \"last_actor\", \"last_action\",\n ],\n bridge_delivery_events: [\n \"sequence\", \"delivery_id\", \"message_id\", \"workspace\", \"recipient\", \"from_state\", \"to_state\", \"attempt\", \"cycle_attempt\",\n \"requeue_count\", \"lease_owner\", \"error\", \"actor\", \"action\", \"created_at\",\n ],\n bridge_presence: [\"workspace\", \"agent\", \"instance\", \"runtime_type\", \"capabilities\", \"lease_expires_at\", \"last_seen_at\"],\n};\n\nconst localObjects = new Map<string, [string, string]>([\n [\"agent_bridge_metadata\", [\"table\", \"agent_bridge_metadata\"]],\n [\"bridge_deliveries\", [\"table\", \"bridge_deliveries\"]],\n [\"bridge_delivery_events\", [\"table\", \"bridge_delivery_events\"]],\n [\"bridge_messages\", [\"table\", \"bridge_messages\"]],\n [\"bridge_presence\", [\"table\", \"bridge_presence\"]],\n [\"bridge_receipts\", [\"table\", \"bridge_receipts\"]],\n [\"bridge_deliveries_claim\", [\"index\", \"bridge_deliveries\"]],\n [\"bridge_deliveries_publisher\", [\"index\", \"bridge_deliveries\"]],\n [\"bridge_deliveries_terminal\", [\"index\", \"bridge_deliveries\"]],\n [\"bridge_delivery_events_lookup\", [\"index\", \"bridge_delivery_events\"]],\n [\"bridge_messages_created\", [\"index\", \"bridge_messages\"]],\n [\"bridge_messages_cursor\", [\"index\", \"bridge_messages\"]],\n [\"bridge_messages_idempotency\", [\"index\", \"bridge_messages\"]],\n [\"bridge_messages_project\", [\"index\", \"bridge_messages\"]],\n [\"bridge_messages_source\", [\"index\", \"bridge_messages\"]],\n [\"bridge_messages_thread\", [\"index\", \"bridge_messages\"]],\n [\"bridge_presence_active\", [\"index\", \"bridge_presence\"]],\n [\"bridge_delivery_events_insert\", [\"trigger\", \"bridge_deliveries\"]],\n [\"bridge_delivery_events_update\", [\"trigger\", \"bridge_deliveries\"]],\n [\"bridge_messages_no_delete\", [\"trigger\", \"bridge_messages\"]],\n [\"bridge_messages_no_update\", [\"trigger\", \"bridge_messages\"]],\n [\"bridge_messages_policy_insert\", [\"trigger\", \"bridge_messages\"]],\n [\"bridge_messages_domain_insert\", [\"trigger\", \"bridge_messages\"]],\n [\"agent_bridge_metadata_no_delete\", [\"trigger\", \"agent_bridge_metadata\"]],\n [\"agent_bridge_metadata_no_update\", [\"trigger\", \"agent_bridge_metadata\"]],\n]);\n\nconst edgeColumns: Record<string, readonly string[]> = {\n agent_bridge_metadata: [\"singleton\", \"database_kind\", \"schema_name\", \"schema_version\"],\n edge_scopes: [\"scope_key\", \"endpoint_hash\", \"workspace\", \"agent\", \"pull_cursor\", \"last_sync_at\", \"last_error\", \"last_outbound_sync_at\", \"last_inbound_sync_at\", \"last_attempt_at\", \"cache_contract\"],\n edge_outbox: [\"position\", \"scope_key\", \"message_id\", \"idempotency_key\", \"payload_hash\", \"draft_json\", \"state\", \"attempts\", \"available_at\", \"lease_token\", \"lease_expires_at\", \"last_error\", \"blocked_at\", \"created_at\"],\n edge_inbox: [\"scope_key\", \"message_id\", \"remote_sequence\", \"sequence_key\", \"workspace\", \"project\", \"source\", \"type\", \"thread_id\", \"created_at\", \"expires_at\", \"message_json\"],\n};\n\nconst edgeObjects = new Map<string, [string, string]>([\n [\"agent_bridge_metadata\", [\"table\", \"agent_bridge_metadata\"]],\n [\"edge_scopes\", [\"table\", \"edge_scopes\"]],\n [\"edge_outbox\", [\"table\", \"edge_outbox\"]],\n [\"edge_inbox\", [\"table\", \"edge_inbox\"]],\n [\"edge_inbox_created\", [\"index\", \"edge_inbox\"]],\n [\"edge_inbox_cursor\", [\"index\", \"edge_inbox\"]],\n [\"edge_inbox_project\", [\"index\", \"edge_inbox\"]],\n [\"edge_inbox_source\", [\"index\", \"edge_inbox\"]],\n [\"edge_inbox_thread\", [\"index\", \"edge_inbox\"]],\n [\"edge_outbox_due\", [\"index\", \"edge_outbox\"]],\n [\"agent_bridge_metadata_no_delete\", [\"trigger\", \"agent_bridge_metadata\"]],\n [\"agent_bridge_metadata_no_update\", [\"trigger\", \"agent_bridge_metadata\"]],\n]);\n\nexport class SQLiteDatabaseContractError extends Error {}\n\nfunction normalizeSql(sql: string): string {\n let output = \"\"; let quote = \"\"; let pendingSpace = false;\n for (let index = 0; index < sql.length; index += 1) {\n const character = sql[index]!;\n if (quote) {\n output += character;\n if ((quote === \"]\" && character === \"]\") || (quote !== \"]\" && character === quote)) {\n if (sql[index + 1] === character && quote !== \"]\") { output += sql[++index]!; }\n else quote = \"\";\n }\n continue;\n }\n if (/\\s/u.test(character)) { pendingSpace = output.length > 0; continue; }\n if (pendingSpace && !/[(),;]/u.test(character) && !/[(),;]/u.test(output[output.length - 1] ?? \"\")) output += \" \";\n pendingSpace = false;\n if (character === \"'\" || character === '\"' || character === \"`\") quote = character;\n else if (character === \"[\") quote = \"]\";\n output += quote ? character : character.toLowerCase();\n }\n return output.trim();\n}\n\nfunction stableRows(rows: Row[]): Array<Record<string, string | number | null>> {\n return rows.map((row) => Object.fromEntries(Object.keys(row).sort().map((key) => {\n const value = row[key]; return [key, value === null ? null : typeof value === \"number\" ? value : String(value)];\n })));\n}\n\nfunction quoteIdentifier(value: string): string { return `\"${value.split('\"').join('\"\"')}\"`; }\n\nexport function sqliteSchemaContractHash(db: Database): string {\n const objects = (db.prepare(\"SELECT type,name,tbl_name,sql FROM sqlite_master WHERE name NOT LIKE 'sqlite_%' ORDER BY type,name\").all() as Row[])\n .map((row) => ({ type: String(row.type), name: String(row.name), table: String(row.tbl_name), sql: normalizeSql(String(row.sql)) }));\n const tables = objects.filter((object) => object.type === \"table\").map((object) => ({\n name: object.name,\n columns: stableRows(db.prepare(`PRAGMA table_info(${quoteIdentifier(object.name)})`).all() as Row[]),\n foreignKeys: stableRows(db.prepare(`PRAGMA foreign_key_list(${quoteIdentifier(object.name)})`).all() as Row[]),\n indexes: (db.prepare(`PRAGMA index_list(${quoteIdentifier(object.name)})`).all() as Row[])\n .sort((left, right) => String(left.name).localeCompare(String(right.name))).map((row) => ({\n ...Object.fromEntries(Object.keys(row).filter((key) => key !== \"seq\").sort().map((key) => [key, row[key] === null ? null : typeof row[key] === \"number\" ? row[key] : String(row[key])])),\n columns: stableRows(db.prepare(`PRAGMA index_xinfo(${quoteIdentifier(String(row.name))})`).all() as Row[]),\n })),\n }));\n return createHash(\"sha256\").update(JSON.stringify({ objects, tables })).digest(\"hex\");\n}\n\nfunction assertUpgradeCandidate(db: Database, allowed: ReadonlyMap<string, [string, string]>, oppositePrefix: string, label: string): void {\n if (objectNames(db, oppositePrefix).length) throw new SQLiteDatabaseContractError(`${label} database kind is invalid`);\n const rows = db.prepare(\"SELECT type,name,tbl_name FROM sqlite_master WHERE name NOT LIKE 'sqlite_%' ORDER BY name\").all() as Row[];\n for (const row of rows) {\n const expected = allowed.get(String(row.name));\n if (!expected || expected[0] !== String(row.type) || expected[1] !== String(row.tbl_name)) {\n throw new SQLiteDatabaseContractError(`${label} database has an unexpected pre-migration schema object`);\n }\n }\n}\n\nexport function assertLocalUpgradeCandidate(db: Database): void { assertUpgradeCandidate(db, localObjects, \"edge_\", \"local authority\"); }\nexport function assertEdgeUpgradeCandidate(db: Database): void { assertUpgradeCandidate(db, edgeObjects, \"bridge_\", \"edge\"); }\n\nfunction scalar(db: Database, pragma: string): number {\n const row = db.prepare(pragma).get() as Row;\n return Number(Object.values(row)[0]);\n}\n\nfunction objectNames(db: Database, prefix: string): string[] {\n return (db.prepare(\"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE ? ORDER BY name\").all(`${prefix}%`) as Row[])\n .map((row) => String(row.name));\n}\n\nfunction metadata(db: Database): Record<string, string | number> {\n const exists = db.prepare(\"SELECT 1 FROM sqlite_master WHERE type='table' AND name=?\").get(SQLITE_METADATA_TABLE);\n if (!exists) return {};\n const row = db.prepare(`SELECT singleton,database_kind,schema_name,schema_version FROM ${SQLITE_METADATA_TABLE}`).get() as Row | undefined;\n if (!row || Number(row.singleton) !== 1) return {};\n return { database_kind: String(row.database_kind), schema_name: String(row.schema_name), schema_version: Number(row.schema_version) };\n}\n\nfunction installMarkers(db: Database, applicationId: number, expected: { database_kind: string; schema_name: string; schema_version: number }): void {\n const currentApplicationId = scalar(db, \"PRAGMA application_id\");\n if (currentApplicationId !== 0 && currentApplicationId !== applicationId) {\n throw new SQLiteDatabaseContractError(\"SQLite database kind marker does not match the selected store\");\n }\n const currentVersion = scalar(db, \"PRAGMA user_version\");\n if (currentVersion !== 0 && currentVersion !== SQLITE_DATABASE_SCHEMA_VERSION) {\n throw new SQLiteDatabaseContractError(\"SQLite database schema version is unsupported\");\n }\n db.exec(`CREATE TABLE IF NOT EXISTS ${SQLITE_METADATA_TABLE} (\n singleton INTEGER PRIMARY KEY CHECK(singleton=1), database_kind TEXT NOT NULL,\n schema_name TEXT NOT NULL, schema_version INTEGER NOT NULL CHECK(schema_version>=1)\n ) WITHOUT ROWID`);\n const existing = metadata(db);\n if (Object.keys(existing).length && Object.entries(expected).some(([key, value]) => existing[key] !== value)) {\n throw new SQLiteDatabaseContractError(\"SQLite database metadata does not match the selected store\");\n }\n db.prepare(`INSERT OR IGNORE INTO ${SQLITE_METADATA_TABLE}(singleton,database_kind,schema_name,schema_version) VALUES (1,?,?,?)`)\n .run(expected.database_kind, expected.schema_name, expected.schema_version);\n db.exec(`CREATE TRIGGER IF NOT EXISTS agent_bridge_metadata_no_update BEFORE UPDATE ON ${SQLITE_METADATA_TABLE}\n BEGIN SELECT RAISE(ABORT,'database metadata is immutable'); END;\n CREATE TRIGGER IF NOT EXISTS agent_bridge_metadata_no_delete BEFORE DELETE ON ${SQLITE_METADATA_TABLE}\n BEGIN SELECT RAISE(ABORT,'database metadata is immutable'); END`);\n db.exec(`PRAGMA application_id = ${applicationId}; PRAGMA user_version = ${SQLITE_DATABASE_SCHEMA_VERSION}`);\n}\n\nexport function installLocalAuthorityMarkers(db: Database): void {\n if (objectNames(db, \"edge_\").length) throw new SQLiteDatabaseContractError(\"edge databases cannot be opened as local authority stores\");\n installMarkers(db, LOCAL_SQLITE_APPLICATION_ID, localMetadata);\n assertLocalAuthorityDatabase(db);\n}\n\nexport function installEdgeMarkers(db: Database): void {\n if (objectNames(db, \"bridge_\").length) throw new SQLiteDatabaseContractError(\"local authority databases cannot be opened as edge stores\");\n installMarkers(db, EDGE_SQLITE_APPLICATION_ID, edgeMetadata);\n assertEdgeDatabase(db);\n}\n\nexport function identifySqliteDatabase(db: Database): \"local-authority\" | \"edge-cache\" | \"legacy-local\" | \"legacy-edge\" | \"unknown\" {\n const applicationId = scalar(db, \"PRAGMA application_id\");\n const declared = metadata(db).database_kind;\n if ((applicationId === LOCAL_SQLITE_APPLICATION_ID && declared === \"edge-cache\")\n || (applicationId === EDGE_SQLITE_APPLICATION_ID && declared === \"local-authority\")) {\n throw new SQLiteDatabaseContractError(\"SQLite application and metadata kind markers conflict\");\n }\n if (applicationId === LOCAL_SQLITE_APPLICATION_ID || declared === \"local-authority\") return \"local-authority\";\n if (applicationId === EDGE_SQLITE_APPLICATION_ID || declared === \"edge-cache\") return \"edge-cache\";\n if (objectNames(db, \"edge_\").length) return \"legacy-edge\";\n if (objectNames(db, \"bridge_\").length) return \"legacy-local\";\n return \"unknown\";\n}\n\nexport function assertEdgeDatabase(db: Database): void {\n if (identifySqliteDatabase(db) !== \"edge-cache\") throw new SQLiteDatabaseContractError(\"database is not a marked edge store\");\n if (scalar(db, \"PRAGMA application_id\") !== EDGE_SQLITE_APPLICATION_ID\n || scalar(db, \"PRAGMA user_version\") !== SQLITE_DATABASE_SCHEMA_VERSION) throw new SQLiteDatabaseContractError(\"edge database markers are invalid\");\n const actualMetadata = metadata(db);\n if (Object.keys(actualMetadata).length !== Object.keys(edgeMetadata).length\n || Object.entries(edgeMetadata).some(([key, value]) => actualMetadata[key] !== value)) throw new SQLiteDatabaseContractError(\"edge database metadata is invalid\");\n const rows = db.prepare(\"SELECT type,name,tbl_name FROM sqlite_master WHERE name NOT LIKE 'sqlite_%' ORDER BY name\").all() as Row[];\n if (rows.length !== edgeObjects.size) throw new SQLiteDatabaseContractError(\"edge database has an unexpected schema object set\");\n for (const row of rows) {\n const expected = edgeObjects.get(String(row.name));\n if (!expected || expected[0] !== String(row.type) || expected[1] !== String(row.tbl_name)) throw new SQLiteDatabaseContractError(\"edge database has an unexpected schema object\");\n }\n for (const [table, expected] of Object.entries(edgeColumns)) {\n const columns = (db.prepare(`PRAGMA table_info(${table})`).all() as Row[]).map((row) => String(row.name));\n const ordered = [...columns].sort(); const expectedOrdered = [...expected].sort();\n if (ordered.length !== expectedOrdered.length || ordered.some((column, index) => column !== expectedOrdered[index])) throw new SQLiteDatabaseContractError(\"edge database column contract is invalid\");\n }\n const contract = sqliteSchemaContractHash(db);\n if (!isSupportedEdgeSqliteSchemaContract(contract)) throw new SQLiteDatabaseContractError(\"edge database schema contract hash is invalid\");\n}\n\nexport function assertLocalAuthorityDatabase(db: Database): void {\n if (identifySqliteDatabase(db) !== \"local-authority\") throw new SQLiteDatabaseContractError(\"database is not a marked local authority store\");\n if (scalar(db, \"PRAGMA application_id\") !== LOCAL_SQLITE_APPLICATION_ID\n || scalar(db, \"PRAGMA user_version\") !== SQLITE_DATABASE_SCHEMA_VERSION) {\n throw new SQLiteDatabaseContractError(\"local authority database markers are invalid\");\n }\n const actualMetadata = metadata(db);\n if (Object.keys(actualMetadata).length !== Object.keys(localMetadata).length\n || Object.entries(localMetadata).some(([key, value]) => actualMetadata[key] !== value)) {\n throw new SQLiteDatabaseContractError(\"local authority database metadata is invalid\");\n }\n const rows = db.prepare(\"SELECT type,name,tbl_name FROM sqlite_master WHERE name NOT LIKE 'sqlite_%' ORDER BY name\").all() as Row[];\n if (rows.length !== localObjects.size) throw new SQLiteDatabaseContractError(\"local authority database has an unexpected schema object set\");\n for (const row of rows) {\n const expected = localObjects.get(String(row.name));\n if (!expected || expected[0] !== String(row.type) || expected[1] !== String(row.tbl_name)) {\n throw new SQLiteDatabaseContractError(\"local authority database has an unexpected schema object\");\n }\n }\n for (const [table, expected] of Object.entries(localColumns)) {\n const columns = (db.prepare(`PRAGMA table_info(${table})`).all() as Row[]).map((row) => String(row.name));\n const ordered = [...columns].sort(); const expectedOrdered = [...expected].sort();\n if (ordered.length !== expectedOrdered.length || ordered.some((column, index) => column !== expectedOrdered[index])) {\n throw new SQLiteDatabaseContractError(\"local authority database column contract is invalid\");\n }\n }\n const contract = sqliteSchemaContractHash(db);\n if (!isSupportedLocalSqliteSchemaContract(contract)) throw new SQLiteDatabaseContractError(\"local authority database schema contract hash is invalid\");\n}\n\nexport function verifySqliteHealth(db: Database): void {\n const integrity = db.prepare(\"PRAGMA integrity_check\").all() as Row[];\n if (integrity.length !== 1 || String(Object.values(integrity[0]!)[0]) !== \"ok\") {\n throw new SQLiteDatabaseContractError(\"SQLite integrity check failed\");\n }\n const foreignKeys = db.prepare(\"PRAGMA foreign_key_check\").all() as Row[];\n if (foreignKeys.length) throw new SQLiteDatabaseContractError(\"SQLite foreign key check failed\");\n}\n","import { randomUUID } from \"node:crypto\";\nimport { existsSync, lstatSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport type { DatabaseSync as Database, SQLInputValue } from \"node:sqlite\";\nimport { DeliveryStateConflictError, cursorScope, decodeCursor, decodeScopedCursor, encodeCursor, encodeScopedCursor, scopedCursorScope, validateDeliveryCursorPosition, validateEventCursorPosition, type AgentPresence, type BridgeDelivery, type BridgeDeliveryEvent, type BridgeMessage, type BridgePrincipal } from \"./bridge-domain.js\";\nimport type { BridgeDiagnostics, BridgeStore, ClaimOptions, DeliveryQuery, InsertMessageResult, MessagePage, MessageQuery } from \"./bridge-store.js\";\nimport { assertIdempotentReplay } from \"./idempotency.js\";\nimport { retrySqliteBusy } from \"./sqlite-retry.js\";\nimport { preparePrivateSqliteLocation, securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\nimport { assertLocalUpgradeCandidate, installLocalAuthorityMarkers } from \"./sqlite-database-contract.js\";\n\ntype Row = Record<string, unknown>;\nconst require = createRequire(import.meta.url);\nfunction openDatabase(path: string): Database {\n const { DatabaseSync } = require(\"node:sqlite\") as typeof import(\"node:sqlite\");\n return new DatabaseSync(path);\n}\nconst schema = `\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = FULL;\nPRAGMA foreign_keys = ON;\nCREATE TABLE IF NOT EXISTS bridge_messages (\n sequence INTEGER PRIMARY KEY AUTOINCREMENT, id TEXT NOT NULL UNIQUE, workspace TEXT NOT NULL, project TEXT, source TEXT NOT NULL,\n type TEXT NOT NULL, content TEXT NOT NULL, content_type TEXT NOT NULL, data TEXT, targets TEXT NOT NULL DEFAULT '[]',\n thread_id TEXT, reply_to_id TEXT, correlation_id TEXT, causation_id TEXT, priority TEXT NOT NULL, expires_at TEXT,\n idempotency_key TEXT, atrib_receipt_id TEXT, informed_by TEXT, metadata TEXT, delivery_policy TEXT NOT NULL, created_at TEXT NOT NULL,\n UNIQUE(workspace, id), CHECK(json_valid(targets) AND json_type(targets) = 'array'),\n CHECK(priority IN ('info', 'high', 'urgent')),\n CHECK(json_valid(delivery_policy) AND json_type(delivery_policy)='object'),\n CHECK(\n (json_extract(delivery_policy,'$.mode')='mailbox'\n AND json_type(delivery_policy,'$.maxAttempts') IS NULL\n AND json_type(delivery_policy,'$.retryBaseDelayMs') IS NULL\n AND json_type(delivery_policy,'$.retryMaxDelayMs') IS NULL\n AND json_type(delivery_policy,'$.retryJitterRatio') IS NULL\n AND json_type(delivery_policy,'$.notBefore') IS NULL)\n OR\n (json_extract(delivery_policy,'$.mode')='leased'\n AND json_array_length(targets)>0\n AND json_type(delivery_policy,'$.maxAttempts')='integer'\n AND json_extract(delivery_policy,'$.maxAttempts') BETWEEN 1 AND 100\n AND json_type(delivery_policy,'$.retryBaseDelayMs')='integer'\n AND json_extract(delivery_policy,'$.retryBaseDelayMs') BETWEEN 1 AND 3600000\n AND json_type(delivery_policy,'$.retryMaxDelayMs')='integer'\n AND json_extract(delivery_policy,'$.retryMaxDelayMs') BETWEEN json_extract(delivery_policy,'$.retryBaseDelayMs') AND 86400000\n AND json_type(delivery_policy,'$.retryJitterRatio') IN ('integer','real')\n AND json_extract(delivery_policy,'$.retryJitterRatio') BETWEEN 0 AND 1\n AND (json_type(delivery_policy,'$.notBefore') IS NULL OR (\n json_type(delivery_policy,'$.notBefore')='text'\n AND julianday(json_extract(delivery_policy,'$.notBefore')) IS NOT NULL\n AND (expires_at IS NULL OR julianday(json_extract(delivery_policy,'$.notBefore'))<julianday(expires_at))\n )))\n )\n);\nCREATE UNIQUE INDEX IF NOT EXISTS bridge_messages_idempotency ON bridge_messages(workspace, source, idempotency_key) WHERE idempotency_key IS NOT NULL;\nCREATE INDEX IF NOT EXISTS bridge_messages_cursor ON bridge_messages(workspace, sequence);\nCREATE INDEX IF NOT EXISTS bridge_messages_source ON bridge_messages(workspace, source, sequence);\nCREATE INDEX IF NOT EXISTS bridge_messages_thread ON bridge_messages(workspace, thread_id, sequence) WHERE thread_id IS NOT NULL;\nCREATE INDEX IF NOT EXISTS bridge_messages_created ON bridge_messages(workspace, created_at, sequence);\nCREATE TABLE IF NOT EXISTS bridge_receipts (workspace TEXT NOT NULL, message_id TEXT NOT NULL, principal TEXT NOT NULL, read_at TEXT NOT NULL, PRIMARY KEY(workspace, message_id, principal), FOREIGN KEY(workspace, message_id) REFERENCES bridge_messages(workspace, id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS bridge_deliveries (\n id TEXT PRIMARY KEY, message_id TEXT NOT NULL, workspace TEXT NOT NULL, recipient TEXT NOT NULL,\n state TEXT NOT NULL, attempt INTEGER NOT NULL DEFAULT 0, cycle_attempt INTEGER NOT NULL DEFAULT 0, requeue_count INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL, priority_rank INTEGER NOT NULL, available_at TEXT NOT NULL,\n lease_token TEXT, lease_owner TEXT, lease_expires_at TEXT, last_error TEXT, last_actor TEXT, last_action TEXT NOT NULL,\n UNIQUE(message_id, recipient), FOREIGN KEY(workspace, message_id) REFERENCES bridge_messages(workspace, id) ON DELETE CASCADE,\n CHECK(state IN ('pending', 'claimed', 'acked', 'retrying', 'dead', 'cancelled')), CHECK(attempt >= 0 AND cycle_attempt >= 0 AND cycle_attempt <= attempt AND requeue_count >= 0),\n CHECK(priority_rank BETWEEN 0 AND 2),\n CHECK((state = 'claimed' AND lease_token IS NOT NULL AND lease_expires_at IS NOT NULL) OR (state <> 'claimed' AND lease_token IS NULL AND lease_owner IS NULL AND lease_expires_at IS NULL))\n);\nCREATE TABLE IF NOT EXISTS bridge_delivery_events (\n sequence INTEGER PRIMARY KEY AUTOINCREMENT, delivery_id TEXT NOT NULL,\n message_id TEXT NOT NULL, workspace TEXT NOT NULL, recipient TEXT NOT NULL,\n from_state TEXT, to_state TEXT NOT NULL, attempt INTEGER NOT NULL, cycle_attempt INTEGER NOT NULL,\n requeue_count INTEGER NOT NULL, lease_owner TEXT, error TEXT, actor TEXT NOT NULL, action TEXT NOT NULL, created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS bridge_presence (\n workspace TEXT NOT NULL, agent TEXT NOT NULL, instance TEXT NOT NULL, runtime_type TEXT,\n capabilities TEXT NOT NULL DEFAULT '[]', lease_expires_at TEXT NOT NULL, last_seen_at TEXT NOT NULL,\n PRIMARY KEY(workspace, agent, instance), CHECK(json_valid(capabilities) AND json_type(capabilities)='array')\n);\nCREATE INDEX IF NOT EXISTS bridge_presence_active ON bridge_presence(workspace, lease_expires_at);\nCREATE TRIGGER IF NOT EXISTS bridge_messages_no_update BEFORE UPDATE ON bridge_messages BEGIN SELECT RAISE(ABORT, 'bridge messages are immutable'); END;\nCREATE TRIGGER IF NOT EXISTS bridge_messages_no_delete BEFORE DELETE ON bridge_messages BEGIN SELECT RAISE(ABORT, 'bridge messages are immutable'); END;\n`;\n\nfunction stringify(value: unknown): string | null { return value === undefined ? null : JSON.stringify(value); }\nfunction parse(value: unknown): any { return typeof value === \"string\" ? JSON.parse(value) : undefined; }\nfunction optionalString(value: unknown): string | undefined { return value == null ? undefined : String(value); }\nfunction message(row: Row): BridgeMessage { const policy=parse(row.delivery_policy);if(policy?.notBefore==null)delete policy?.notBefore;return { id: String(row.id), workspace: String(row.workspace), project: optionalString(row.project), source: String(row.source), sequence: String(row.sequence), type: String(row.type), content: String(row.content), contentType: String(row.content_type), data: parse(row.data), targets: parse(row.targets) ?? [], threadId: optionalString(row.thread_id), replyToId: optionalString(row.reply_to_id), correlationId: optionalString(row.correlation_id), causationId: optionalString(row.causation_id), priority: row.priority as BridgeMessage[\"priority\"], expiresAt: optionalString(row.expires_at), idempotencyKey: optionalString(row.idempotency_key), atribReceiptId: optionalString(row.atrib_receipt_id), informedBy: parse(row.informed_by), metadata: parse(row.metadata), deliveryPolicy: policy, createdAt: String(row.created_at) }; }\nfunction delivery(row: Row): BridgeDelivery { return { id: String(row.id), messageId: String(row.message_id), workspace: String(row.workspace), recipient: String(row.recipient), state: row.state as BridgeDelivery[\"state\"], attempt: Number(row.attempt), cycleAttempt: Number(row.cycle_attempt), requeueCount: Number(row.requeue_count), createdAt: String(row.created_at), priorityRank: Number(row.priority_rank), availableAt: String(row.available_at), leaseToken: optionalString(row.lease_token), leaseOwner: optionalString(row.lease_owner), leaseExpiresAt: optionalString(row.lease_expires_at), lastError: optionalString(row.last_error), lastActor: optionalString(row.last_actor), lastAction: row.last_action as BridgeDelivery[\"lastAction\"] }; }\nfunction presence(row: Row): AgentPresence { return { workspace: String(row.workspace), agent: String(row.agent), instance: String(row.instance), runtimeType: optionalString(row.runtime_type), capabilities: parse(row.capabilities) ?? [], leaseExpiresAt: String(row.lease_expires_at), lastSeenAt: String(row.last_seen_at) }; }\nfunction deliveryEvent(row: Row): BridgeDeliveryEvent { return { sequence: String(row.sequence), deliveryId: String(row.delivery_id), messageId: String(row.message_id), workspace: String(row.workspace), recipient: String(row.recipient), fromState: row.from_state == null ? undefined : row.from_state as BridgeDeliveryEvent[\"fromState\"], toState: row.to_state as BridgeDeliveryEvent[\"toState\"], attempt: Number(row.attempt), cycleAttempt: Number(row.cycle_attempt), requeueCount: Number(row.requeue_count), leaseOwner: optionalString(row.lease_owner), error: optionalString(row.error), actor: String(row.actor), action: row.action as BridgeDeliveryEvent[\"action\"], createdAt: String(row.created_at) }; }\n\nexport class SQLiteBridgeStore implements BridgeStore {\n private readonly db: Database;\n private readonly databasePath: string;\n private readonly preexistingFiles: ReadonlySet<string>;\n private initialized = false;\n private initialization?: Promise<void>;\n constructor(private readonly path = \":memory:\", private readonly busyTimeoutMs = 2_000) {\n const selected = preparePrivateSqliteLocation(path);\n this.databasePath = selected;\n this.preexistingFiles = new Set(selected === \":memory:\" ? [] : [selected, `${selected}-wal`, `${selected}-shm`].filter(existsSync));\n const before = selected === \":memory:\" || !existsSync(selected) ? undefined : lstatSync(selected);\n this.db = openDatabase(selected);\n try {\n this.db.exec(`PRAGMA busy_timeout = ${Math.max(1, Math.trunc(this.busyTimeoutMs))}`);\n this.restrictFiles();\n if (before) {\n const after = lstatSync(selected);\n if (after.dev !== before.dev || after.ino !== before.ino) throw new Error(\"SQLite database path identity changed while opening\");\n }\n } catch (error) { this.db.close(); throw error; }\n }\n private restrictFiles(): void {\n if (this.databasePath === \":memory:\") return;\n for (const path of [this.databasePath, `${this.databasePath}-wal`, `${this.databasePath}-shm`]) {\n if (!existsSync(path)) continue;\n if (path === this.databasePath && this.preexistingFiles.has(path)) verifyPrivatePathAccess(path, \"file\");\n else securePrivatePath(path, \"file\");\n }\n }\n async initialize(): Promise<void> {\n if (this.initialized) return;\n if (!this.initialization) {\n this.initialization = this.initializeOnce().then(() => {\n this.initialized = true;\n }).catch((error) => {\n this.initialization = undefined;\n throw error;\n });\n }\n return this.initialization;\n }\n\n private async initializeOnce(): Promise<void> {\n const versionRow = this.db.prepare(\"SELECT sqlite_version() AS version\").get() as Row;\n const parts = String(versionRow.version).split(\".\").map(Number);\n const encoded = (parts[0] ?? 0) * 1_000_000 + (parts[1] ?? 0) * 1_000 + (parts[2] ?? 0);\n if (encoded < 3_051_003) throw new Error(\"SQLite 3.51.3 or newer is required\");\n assertLocalUpgradeCandidate(this.db);\n await retrySqliteBusy(() => this.db.exec(schema), this.busyTimeoutMs);\n await retrySqliteBusy(() => this.db.exec(\"BEGIN IMMEDIATE\"), this.busyTimeoutMs);\n try {\n const columns = this.db.prepare(\"PRAGMA table_info(bridge_messages)\").all() as Row[];\n if (!columns.some((column) => column.name === \"project\")) {\n this.db.exec(\"ALTER TABLE bridge_messages ADD COLUMN project TEXT\");\n }\n const addedDeliveryPolicy = !columns.some((column) => column.name === \"delivery_policy\");\n if (addedDeliveryPolicy) {\n this.db.exec(\"DROP TRIGGER IF EXISTS bridge_messages_no_update\");\n this.db.exec(`ALTER TABLE bridge_messages ADD COLUMN delivery_policy TEXT NOT NULL DEFAULT '{\"mode\":\"leased\",\"maxAttempts\":5,\"retryBaseDelayMs\":1000,\"retryMaxDelayMs\":60000,\"retryJitterRatio\":0.2}'`);\n this.db.exec(\"CREATE TRIGGER bridge_messages_no_update BEFORE UPDATE ON bridge_messages BEGIN SELECT RAISE(ABORT, 'bridge messages are immutable'); END\");\n }\n const legacyPolicy = addedDeliveryPolicy || Boolean((this.db.prepare(`SELECT 1 FROM bridge_messages\n WHERE json_type(delivery_policy,'$.publisherOwned') IS NOT NULL\n OR json_type(delivery_policy,'$.baseDelayMs') IS NOT NULL\n OR json_type(delivery_policy,'$.maxDelayMs') IS NOT NULL\n OR json_type(delivery_policy,'$.jitterRatio') IS NOT NULL\n LIMIT 1`).get() as Row | undefined));\n if (legacyPolicy) {\n this.db.exec(\"DROP TRIGGER IF EXISTS bridge_messages_no_update\");\n if (addedDeliveryPolicy) {\n this.db.exec(`UPDATE bridge_messages SET delivery_policy=CASE\n WHEN json_array_length(targets)=0 THEN '{\"mode\":\"mailbox\"}'\n ELSE '{\"mode\":\"leased\",\"maxAttempts\":5,\"retryBaseDelayMs\":1000,\"retryMaxDelayMs\":60000,\"retryJitterRatio\":0.2}' END`);\n } else {\n this.db.exec(`UPDATE bridge_messages SET delivery_policy=CASE\n WHEN json_extract(delivery_policy,'$.mode')='mailbox' THEN\n json_remove(delivery_policy,'$.publisherOwned','$.maxAttempts','$.baseDelayMs','$.maxDelayMs','$.jitterRatio','$.retryBaseDelayMs','$.retryMaxDelayMs','$.retryJitterRatio','$.notBefore')\n ELSE json_set(\n json_remove(delivery_policy,'$.publisherOwned','$.baseDelayMs','$.maxDelayMs','$.jitterRatio'),\n '$.mode','leased',\n '$.maxAttempts',coalesce(json_extract(delivery_policy,'$.maxAttempts'),5),\n '$.retryBaseDelayMs',coalesce(json_extract(delivery_policy,'$.retryBaseDelayMs'),json_extract(delivery_policy,'$.baseDelayMs'),1000),\n '$.retryMaxDelayMs',coalesce(json_extract(delivery_policy,'$.retryMaxDelayMs'),json_extract(delivery_policy,'$.maxDelayMs'),60000),\n '$.retryJitterRatio',coalesce(json_extract(delivery_policy,'$.retryJitterRatio'),json_extract(delivery_policy,'$.jitterRatio'),0.2)\n ) END\n WHERE json_type(delivery_policy,'$.publisherOwned') IS NOT NULL\n OR json_type(delivery_policy,'$.baseDelayMs') IS NOT NULL\n OR json_type(delivery_policy,'$.maxDelayMs') IS NOT NULL\n OR json_type(delivery_policy,'$.jitterRatio') IS NOT NULL`);\n }\n this.db.exec(\"CREATE TRIGGER bridge_messages_no_update BEFORE UPDATE ON bridge_messages BEGIN SELECT RAISE(ABORT, 'bridge messages are immutable'); END\");\n }\n const deliveryColumns = this.db.prepare(\"PRAGMA table_info(bridge_deliveries)\").all() as Row[];\n if (!deliveryColumns.some((column) => column.name === \"last_action\")) {\n this.db.exec(\"DROP TRIGGER IF EXISTS bridge_delivery_events_insert; DROP TRIGGER IF EXISTS bridge_delivery_events_update; DROP INDEX IF EXISTS bridge_deliveries_claim\");\n const eventColumns = this.db.prepare(\"PRAGMA table_info(bridge_delivery_events)\").all() as Row[];\n this.db.exec(`CREATE TABLE bridge_delivery_events_v10 (\n sequence INTEGER PRIMARY KEY AUTOINCREMENT, delivery_id TEXT NOT NULL,\n message_id TEXT NOT NULL, workspace TEXT NOT NULL, recipient TEXT NOT NULL,\n from_state TEXT, to_state TEXT NOT NULL, attempt INTEGER NOT NULL,\n cycle_attempt INTEGER NOT NULL, requeue_count INTEGER NOT NULL,\n lease_owner TEXT, error TEXT, actor TEXT NOT NULL, action TEXT NOT NULL, created_at TEXT NOT NULL)`);\n if (eventColumns.length) {\n this.db.exec(`INSERT INTO bridge_delivery_events_v10\n (sequence,delivery_id,message_id,workspace,recipient,from_state,to_state,attempt,cycle_attempt,requeue_count,lease_owner,error,actor,action,created_at)\n SELECT event.sequence,event.delivery_id,event.message_id,event.workspace,event.recipient,\n event.from_state,event.to_state,event.attempt,event.attempt,0,event.lease_owner,event.error,\n CASE\n WHEN event.from_state IS NULL THEN message.source\n WHEN event.to_state='dead' AND event.error IN ('message expired','maximum attempts reached') THEN 'agent-bridge'\n WHEN event.to_state IN ('acked','retrying','dead') THEN coalesce(\n event.lease_owner,\n (SELECT claim.lease_owner FROM bridge_delivery_events claim\n WHERE claim.delivery_id=event.delivery_id AND claim.to_state='claimed'\n AND claim.attempt=event.attempt AND claim.sequence<event.sequence\n AND claim.lease_owner IS NOT NULL\n ORDER BY claim.sequence DESC LIMIT 1),\n event.recipient)\n ELSE coalesce(event.lease_owner,event.recipient)\n END,CASE\n WHEN event.from_state IS NULL THEN 'created'\n WHEN event.to_state='claimed' THEN 'claim'\n WHEN event.to_state='acked' THEN 'ack'\n WHEN event.to_state='retrying' THEN 'nack_retry'\n WHEN event.to_state='dead' AND event.error='message expired' THEN 'message_expired'\n WHEN event.to_state='dead' AND event.error='maximum attempts reached' THEN 'attempts_exhausted'\n WHEN event.to_state='dead' THEN 'nack_dead'\n WHEN event.to_state='cancelled' THEN 'cancel'\n ELSE 'created' END,event.created_at\n FROM bridge_delivery_events event JOIN bridge_messages message\n ON message.workspace=event.workspace AND message.id=event.message_id`);\n this.db.exec(\"DROP TABLE bridge_delivery_events\");\n }\n this.db.exec(`CREATE TABLE bridge_deliveries_v10 (\n id TEXT PRIMARY KEY, message_id TEXT NOT NULL, workspace TEXT NOT NULL, recipient TEXT NOT NULL,\n state TEXT NOT NULL, attempt INTEGER NOT NULL DEFAULT 0, cycle_attempt INTEGER NOT NULL DEFAULT 0,\n requeue_count INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL, priority_rank INTEGER NOT NULL,\n available_at TEXT NOT NULL, lease_token TEXT, lease_owner TEXT,\n lease_expires_at TEXT, last_error TEXT, last_actor TEXT, last_action TEXT NOT NULL, UNIQUE(message_id, recipient),\n FOREIGN KEY(workspace,message_id) REFERENCES bridge_messages(workspace,id) ON DELETE CASCADE,\n CHECK(state IN ('pending','claimed','acked','retrying','dead','cancelled')),\n CHECK(attempt>=0 AND cycle_attempt>=0 AND cycle_attempt<=attempt AND requeue_count>=0),\n CHECK(priority_rank BETWEEN 0 AND 2),\n CHECK((state='claimed' AND lease_token IS NOT NULL AND lease_expires_at IS NOT NULL) OR (state<>'claimed' AND lease_token IS NULL AND lease_owner IS NULL AND lease_expires_at IS NULL)))`);\n this.db.exec(`INSERT INTO bridge_deliveries_v10\n (id,message_id,workspace,recipient,state,attempt,cycle_attempt,requeue_count,created_at,priority_rank,available_at,lease_token,lease_owner,lease_expires_at,last_error,last_actor,last_action)\n SELECT delivery.id,delivery.message_id,delivery.workspace,delivery.recipient,delivery.state,delivery.attempt,delivery.attempt,0,\n message.created_at,CASE message.priority WHEN 'urgent' THEN 0 WHEN 'high' THEN 1 ELSE 2 END,\n delivery.available_at,delivery.lease_token,delivery.lease_owner,delivery.lease_expires_at,delivery.last_error,\n CASE\n WHEN delivery.state='pending' AND delivery.attempt=0 THEN message.source\n WHEN delivery.state='dead' AND delivery.last_error IN ('message expired','maximum attempts reached') THEN 'agent-bridge'\n ELSE coalesce(\n delivery.lease_owner,\n (SELECT event.lease_owner FROM bridge_delivery_events_v10 event\n WHERE event.delivery_id=delivery.id AND event.to_state='claimed'\n AND event.attempt=delivery.attempt AND event.lease_owner IS NOT NULL\n ORDER BY event.sequence DESC LIMIT 1),\n delivery.recipient)\n END,CASE\n WHEN delivery.state='pending' AND delivery.attempt=0 THEN 'created'\n WHEN delivery.state='claimed' THEN 'claim'\n WHEN delivery.state='acked' THEN 'ack'\n WHEN delivery.state='retrying' THEN 'nack_retry'\n WHEN delivery.state='dead' AND delivery.last_error='message expired' THEN 'message_expired'\n WHEN delivery.state='dead' AND delivery.last_error='maximum attempts reached' THEN 'attempts_exhausted'\n WHEN delivery.state='dead' THEN 'nack_dead'\n WHEN delivery.state='cancelled' THEN 'cancel'\n ELSE 'created' END\n FROM bridge_deliveries delivery JOIN bridge_messages message\n ON message.workspace=delivery.workspace AND message.id=delivery.message_id`);\n this.db.exec(\"DROP TABLE bridge_deliveries; ALTER TABLE bridge_deliveries_v10 RENAME TO bridge_deliveries\");\n this.db.exec(\"ALTER TABLE bridge_delivery_events_v10 RENAME TO bridge_delivery_events\");\n }\n this.db.exec(\"CREATE INDEX IF NOT EXISTS bridge_deliveries_claim ON bridge_deliveries(workspace,recipient,priority_rank,available_at,created_at,id) WHERE state IN ('pending','retrying','claimed'); CREATE INDEX IF NOT EXISTS bridge_deliveries_publisher ON bridge_deliveries(workspace,message_id,created_at,id); CREATE INDEX IF NOT EXISTS bridge_deliveries_terminal ON bridge_deliveries(workspace,recipient,state,created_at,id) WHERE state IN ('dead','cancelled'); CREATE INDEX IF NOT EXISTS bridge_delivery_events_lookup ON bridge_delivery_events(workspace,delivery_id,sequence)\");\n this.db.exec(`CREATE TRIGGER IF NOT EXISTS bridge_delivery_events_insert AFTER INSERT ON bridge_deliveries BEGIN INSERT INTO bridge_delivery_events (delivery_id,message_id,workspace,recipient,from_state,to_state,attempt,cycle_attempt,requeue_count,lease_owner,error,actor,action,created_at) VALUES (NEW.id,NEW.message_id,NEW.workspace,NEW.recipient,NULL,NEW.state,NEW.attempt,NEW.cycle_attempt,NEW.requeue_count,NEW.lease_owner,NEW.last_error,coalesce(NEW.last_actor,NEW.recipient),NEW.last_action,strftime('%Y-%m-%dT%H:%M:%fZ','now')); END;\n CREATE TRIGGER IF NOT EXISTS bridge_delivery_events_update AFTER UPDATE ON bridge_deliveries WHEN OLD.state IS NOT NEW.state OR OLD.attempt IS NOT NEW.attempt OR OLD.requeue_count IS NOT NEW.requeue_count OR OLD.last_action IS NOT NEW.last_action BEGIN INSERT INTO bridge_delivery_events (delivery_id,message_id,workspace,recipient,from_state,to_state,attempt,cycle_attempt,requeue_count,lease_owner,error,actor,action,created_at) VALUES (NEW.id,NEW.message_id,NEW.workspace,NEW.recipient,OLD.state,NEW.state,NEW.attempt,NEW.cycle_attempt,NEW.requeue_count,NEW.lease_owner,NEW.last_error,coalesce(NEW.last_actor,NEW.recipient),NEW.last_action,strftime('%Y-%m-%dT%H:%M:%fZ','now')); END`);\n this.db.exec(`CREATE TRIGGER IF NOT EXISTS bridge_messages_policy_insert BEFORE INSERT ON bridge_messages\n WHEN NOT (\n json_valid(NEW.delivery_policy) AND json_type(NEW.delivery_policy)='object'\n AND NOT EXISTS (SELECT 1 FROM json_each(NEW.delivery_policy) WHERE key NOT IN ('mode','maxAttempts','retryBaseDelayMs','retryMaxDelayMs','retryJitterRatio','notBefore'))\n AND (\n (json_extract(NEW.delivery_policy,'$.mode')='mailbox' AND json_array_length(NEW.targets)>=0\n AND (SELECT count(*) FROM json_each(NEW.delivery_policy))=1)\n OR\n (json_extract(NEW.delivery_policy,'$.mode')='leased' AND json_array_length(NEW.targets)>0\n AND json_type(NEW.delivery_policy,'$.maxAttempts')='integer' AND json_extract(NEW.delivery_policy,'$.maxAttempts') BETWEEN 1 AND 100\n AND json_type(NEW.delivery_policy,'$.retryBaseDelayMs')='integer' AND json_extract(NEW.delivery_policy,'$.retryBaseDelayMs') BETWEEN 1 AND 3600000\n AND json_type(NEW.delivery_policy,'$.retryMaxDelayMs')='integer' AND json_extract(NEW.delivery_policy,'$.retryMaxDelayMs') BETWEEN json_extract(NEW.delivery_policy,'$.retryBaseDelayMs') AND 86400000\n AND json_type(NEW.delivery_policy,'$.retryJitterRatio') IN ('integer','real') AND json_extract(NEW.delivery_policy,'$.retryJitterRatio') BETWEEN 0 AND 1\n AND (json_type(NEW.delivery_policy,'$.notBefore') IS NULL OR (\n json_type(NEW.delivery_policy,'$.notBefore')='text'\n AND julianday(json_extract(NEW.delivery_policy,'$.notBefore')) IS NOT NULL\n AND (NEW.expires_at IS NULL OR julianday(json_extract(NEW.delivery_policy,'$.notBefore'))<julianday(NEW.expires_at))\n ))\n )\n )\n ) BEGIN SELECT RAISE(ABORT,'invalid delivery policy'); END`);\n this.db.exec(`CREATE TRIGGER IF NOT EXISTS bridge_messages_domain_insert BEFORE INSERT ON bridge_messages\n WHEN NOT (json_valid(NEW.targets) AND json_type(NEW.targets)='array' AND NEW.priority IN ('info','high','urgent'))\n BEGIN SELECT RAISE(ABORT,'invalid message domain'); END`);\n this.db.exec(\"CREATE INDEX IF NOT EXISTS bridge_messages_project ON bridge_messages(workspace, project, sequence)\");\n installLocalAuthorityMarkers(this.db);\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n this.restrictFiles();\n }\n private async ready() { await this.initialize(); }\n async insertMessage(input: Omit<BridgeMessage, \"sequence\" | \"createdAt\">): Promise<InsertMessageResult> {\n await this.ready(); const createdAt = new Date().toISOString(); const storedPolicy = input.deliveryPolicy ?? (input.targets.length ? { mode: \"leased\" as const, maxAttempts: 5, retryBaseDelayMs: 1_000, retryMaxDelayMs: 60_000, retryJitterRatio: 0.2 } : { mode: \"mailbox\" as const });\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n if (input.idempotencyKey) { const existing = this.db.prepare(\"SELECT * FROM bridge_messages WHERE workspace = ? AND source = ? AND idempotency_key = ?\").get(input.workspace, input.source, input.idempotencyKey) as Row | undefined; if (existing) { const replay = message(existing); assertIdempotentReplay(replay, input); this.db.exec(\"COMMIT\"); return { message: replay, created: false }; } }\n this.db.prepare(`INSERT INTO bridge_messages (id,workspace,project,source,type,content,content_type,data,targets,thread_id,reply_to_id,correlation_id,causation_id,priority,expires_at,idempotency_key,atrib_receipt_id,informed_by,metadata,delivery_policy,created_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(input.id,input.workspace,input.project ?? null,input.source,input.type,input.content,input.contentType,stringify(input.data),JSON.stringify(input.targets),input.threadId ?? null,input.replyToId ?? null,input.correlationId ?? null,input.causationId ?? null,input.priority,input.expiresAt ?? null,input.idempotencyKey ?? null,input.atribReceiptId ?? null,stringify(input.informedBy),stringify(input.metadata),JSON.stringify(storedPolicy),createdAt);\n if (storedPolicy.mode === \"leased\") {\n const availableAt = storedPolicy.notBefore && storedPolicy.notBefore > createdAt ? storedPolicy.notBefore : createdAt;\n const priorityRank = input.priority === \"urgent\" ? 0 : input.priority === \"high\" ? 1 : 2;\n for (const recipient of input.targets) {\n this.db.prepare(\"INSERT INTO bridge_deliveries (id,message_id,workspace,recipient,state,created_at,priority_rank,available_at,last_actor,last_action) VALUES (?,?,?,?,?,?,?,?,?,?)\")\n .run(randomUUID(), input.id, input.workspace, recipient, \"pending\", createdAt, priorityRank, availableAt, input.source, \"created\");\n }\n }\n const row = this.db.prepare(\"SELECT * FROM bridge_messages WHERE id = ?\").get(input.id) as Row; this.db.exec(\"COMMIT\"); return { message: message(row), created: true };\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }\n async listMessages(principal: BridgePrincipal, query: MessageQuery = {}): Promise<MessagePage> {\n await this.ready(); const scope = cursorScope(principal, query); const cursor = decodeCursor(query.cursor, scope); const limit = Math.min(Math.max(Math.trunc(query.limit ?? 50), 1), 200); const now = new Date().toISOString();\n const highWaterRow = query.latest ? undefined : this.db.prepare(\"SELECT max(sequence) AS sequence FROM bridge_messages WHERE workspace=?\").get(principal.workspace) as Row;\n const highWater = highWaterRow?.sequence === null || highWaterRow?.sequence === undefined\n ? undefined\n : String(highWaterRow.sequence);\n const mailbox = query.mailbox ?? \"inbox\"; const visibility = mailbox === \"sent\" ? \"source = ?\" : mailbox === \"all\" ? \"(source = ? OR targets = '[]' OR EXISTS (SELECT 1 FROM json_each(targets) WHERE value = ?))\" : \"(targets = '[]' OR EXISTS (SELECT 1 FROM json_each(targets) WHERE value = ?))\"; const clauses = [\"workspace = ?\", query.latest ? \"1=1\" : \"sequence > ?\", visibility]; const args: SQLInputValue[] = query.latest ? [principal.workspace] : [principal.workspace, cursor ?? \"0\"]; if (mailbox === \"all\") args.push(principal.agent, principal.agent); else args.push(principal.agent);\n if (highWater) { clauses.push(\"sequence <= ?\"); args.push(highWater); }\n if (!query.includeExpired) { clauses.push(\"(expires_at IS NULL OR expires_at > ?)\"); args.push(now); }\n if (query.types?.length) { clauses.push(`type IN (${query.types.map(() => \"?\").join(\",\")})`); args.push(...query.types); }\n if (query.source) { clauses.push(\"source = ?\"); args.push(query.source); }\n if (query.project) { clauses.push(\"project = ?\"); args.push(query.project); }\n if (query.since) { clauses.push(\"created_at >= ?\"); args.push(query.since); }\n if (query.receiptState && query.receiptState !== \"any\") {\n clauses.push(`${query.receiptState === \"unread\" ? \"NOT \" : \"\"}EXISTS (SELECT 1 FROM bridge_receipts receipt WHERE receipt.workspace=bridge_messages.workspace AND receipt.message_id=bridge_messages.id AND receipt.principal=?)`);\n args.push(principal.agent);\n }\n if (query.threadId) { clauses.push(\"thread_id = ?\"); args.push(query.threadId); }\n const rows = this.db.prepare(`SELECT * FROM bridge_messages WHERE ${clauses.join(\" AND \")} ORDER BY sequence ${query.latest ? \"DESC\" : \"ASC\"} LIMIT ?`).all(...args, limit) as Row[];\n const messages = rows.map(message);\n const last = messages[messages.length - 1];\n if (query.latest) return { messages, cursor: messages[0] ? encodeCursor(messages[0].sequence, scope) : query.cursor };\n if (messages.length === limit) return { messages, cursor: encodeCursor(last!.sequence, scope) };\n return { messages, cursor: highWater ? encodeCursor(highWater, scope) : query.cursor };\n }\n async recordReceipt(principal: BridgePrincipal, messageIds: string[], readAt = new Date()): Promise<number> { await this.ready(); const stmt = this.db.prepare(\"INSERT OR IGNORE INTO bridge_receipts (workspace,message_id,principal,read_at) SELECT workspace,id,?,? FROM bridge_messages WHERE workspace=? AND id=? AND (targets='[]' OR EXISTS (SELECT 1 FROM json_each(targets) WHERE value=?))\"); let changed = 0; this.db.exec(\"BEGIN IMMEDIATE\"); try { for (const id of messageIds) changed += Number(stmt.run(principal.agent,readAt.toISOString(),principal.workspace,id,principal.agent).changes); this.db.exec(\"COMMIT\"); return changed; } catch (e) { this.db.exec(\"ROLLBACK\"); throw e; } }\n async claimDelivery(principal: BridgePrincipal, options: ClaimOptions): Promise<BridgeDelivery | null> {\n await this.ready(); const now = options.now ?? new Date(); const nowText = now.toISOString(); const expires = new Date(now.getTime() + options.leaseMs).toISOString(); const owner = principal.instance ?? principal.agent;\n this.db.exec(\"BEGIN IMMEDIATE\"); try {\n this.db.prepare(\"UPDATE bridge_deliveries SET state='dead',last_error='message expired',lease_token=NULL,lease_owner=NULL,lease_expires_at=NULL,last_actor='agent-bridge',last_action='message_expired' WHERE workspace=? AND recipient=? AND state IN ('pending','retrying','claimed') AND EXISTS (SELECT 1 FROM bridge_messages message WHERE message.workspace=bridge_deliveries.workspace AND message.id=bridge_deliveries.message_id AND message.expires_at IS NOT NULL AND message.expires_at<=?)\").run(principal.workspace,principal.agent,nowText);\n this.db.prepare(\"UPDATE bridge_deliveries SET state='dead',last_error='maximum attempts reached',lease_token=NULL,lease_owner=NULL,lease_expires_at=NULL,last_actor='agent-bridge',last_action='attempts_exhausted' WHERE workspace=? AND recipient=? AND cycle_attempt>=(SELECT json_extract(delivery_policy,'$.maxAttempts') FROM bridge_messages WHERE workspace=bridge_deliveries.workspace AND id=bridge_deliveries.message_id) AND (state IN ('pending','retrying') OR (state='claimed' AND lease_expires_at<=?))\").run(principal.workspace,principal.agent,nowText);\n this.db.prepare(\"UPDATE bridge_deliveries SET state='retrying',available_at=?,last_error='lease expired',lease_token=NULL,lease_owner=NULL,lease_expires_at=NULL,last_actor='agent-bridge',last_action='lease_expired' WHERE workspace=? AND recipient=? AND state='claimed' AND lease_expires_at<=? AND cycle_attempt<(SELECT json_extract(delivery_policy,'$.maxAttempts') FROM bridge_messages WHERE workspace=bridge_deliveries.workspace AND id=bridge_deliveries.message_id)\").run(nowText,principal.workspace,principal.agent,nowText);\n const candidate = this.db.prepare(\"SELECT delivery.id FROM bridge_deliveries delivery JOIN bridge_messages message ON message.workspace=delivery.workspace AND message.id=delivery.message_id WHERE delivery.workspace=? AND delivery.recipient=? AND delivery.state IN ('pending','retrying') AND delivery.available_at<=? AND delivery.cycle_attempt<json_extract(message.delivery_policy,'$.maxAttempts') AND (message.expires_at IS NULL OR message.expires_at>?) ORDER BY delivery.priority_rank,delivery.available_at,delivery.created_at,delivery.id LIMIT 1\").get(principal.workspace,principal.agent,nowText,nowText) as Row | undefined;\n if (!candidate) { this.db.exec(\"COMMIT\"); return null; }\n const candidateId = String(candidate.id);\n const token = randomUUID(); this.db.prepare(\"UPDATE bridge_deliveries SET state='claimed',attempt=attempt+1,cycle_attempt=cycle_attempt+1,lease_token=?,lease_owner=?,lease_expires_at=?,last_error=NULL,last_actor=?,last_action='claim' WHERE id=?\").run(token,owner,expires,principal.agent,candidateId);\n const claimed = this.db.prepare(\"SELECT * FROM bridge_deliveries WHERE id=?\").get(candidateId) as Row; this.db.exec(\"COMMIT\"); return delivery(claimed);\n } catch (e) { this.db.exec(\"ROLLBACK\"); throw e; }\n }\n async renewDelivery(principal: BridgePrincipal, id: string, token: string, leaseMs: number): Promise<BridgeDelivery | null> { await this.ready(); const now = new Date(); const expires = new Date(now.getTime() + leaseMs).toISOString(); const owner = principal.instance ?? principal.agent; const result = this.db.prepare(\"UPDATE bridge_deliveries SET lease_expires_at=? WHERE workspace=? AND recipient=? AND lease_owner=? AND id=? AND lease_token=? AND state='claimed' AND lease_expires_at > ?\").run(expires,principal.workspace,principal.agent,owner,id,token,now.toISOString()); if (!result.changes) return null; return delivery(this.db.prepare(\"SELECT * FROM bridge_deliveries WHERE id=?\").get(id) as Row); }\n async settleDelivery(principal: BridgePrincipal, id: string, token: string, state: \"acked\" | \"retrying\" | \"dead\", error?: string, _retryPolicy?: import(\"./bridge-domain.js\").RetryPolicy): Promise<BridgeDelivery | null> {\n await this.ready(); const now = new Date(); const owner = principal.instance ?? principal.agent;\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n const current = this.db.prepare(\"SELECT delivery.*,message.delivery_policy FROM bridge_deliveries delivery JOIN bridge_messages message ON message.workspace=delivery.workspace AND message.id=delivery.message_id WHERE delivery.workspace=? AND delivery.recipient=? AND delivery.lease_owner=? AND delivery.id=? AND delivery.lease_token=? AND delivery.state='claimed' AND delivery.lease_expires_at>?\").get(principal.workspace,principal.agent,owner,id,token,now.toISOString()) as Row | undefined;\n if (!current) { this.db.exec(\"COMMIT\"); return null; }\n const policy = parse(current.delivery_policy);\n const exhausted = state === \"retrying\" && Number(current.cycle_attempt) >= Number(policy.maxAttempts);\n const nextState = exhausted ? \"dead\" : state;\n const exponential = Math.min(policy.retryMaxDelayMs, policy.retryBaseDelayMs * 2 ** Math.max(0, Number(current.cycle_attempt) - 1));\n const jitter = 1 + (Math.random() * 2 - 1) * policy.retryJitterRatio;\n const delay = nextState === \"retrying\" ? Math.max(1, Math.round(exponential * jitter)) : 0;\n const available = nextState === \"retrying\" ? new Date(now.getTime() + delay).toISOString() : String(current.available_at);\n const action = state === \"acked\" ? \"ack\" : state === \"dead\" ? \"nack_dead\" : exhausted ? \"attempts_exhausted\" : \"nack_retry\";\n this.db.prepare(\"UPDATE bridge_deliveries SET state=?,available_at=?,last_error=?,lease_token=NULL,lease_owner=NULL,lease_expires_at=NULL,last_actor=?,last_action=? WHERE id=?\").run(nextState,available,error?.slice(0,1024) ?? null,principal.agent,action,id);\n const result = delivery(this.db.prepare(\"SELECT * FROM bridge_deliveries WHERE id=?\").get(id) as Row); this.db.exec(\"COMMIT\"); return result;\n } catch (caught) { this.db.exec(\"ROLLBACK\"); throw caught; }\n }\n async diagnostics(principal: BridgePrincipal): Promise<BridgeDiagnostics> {\n await this.ready();\n const now = new Date();\n const nowText = now.toISOString();\n const queue = this.db.prepare(`SELECT\n sum(CASE WHEN state='pending' THEN 1 ELSE 0 END) AS pending,\n sum(CASE WHEN state='claimed' THEN 1 ELSE 0 END) AS claimed,\n sum(CASE WHEN state='retrying' THEN 1 ELSE 0 END) AS retrying,\n sum(CASE WHEN state='dead' THEN 1 ELSE 0 END) AS dead,\n sum(CASE WHEN state='cancelled' THEN 1 ELSE 0 END) AS cancelled,\n min(CASE WHEN state IN ('pending','retrying') THEN available_at END) AS oldest_available,\n sum(CASE WHEN state IN ('pending','retrying') AND available_at<=? THEN 1 ELSE 0 END) AS due,\n sum(CASE WHEN state IN ('pending','retrying') AND available_at>? THEN 1 ELSE 0 END) AS scheduled,\n sum(CASE WHEN state='claimed' AND lease_expires_at<=? THEN 1 ELSE 0 END) AS expired_leases,\n min(CASE WHEN state IN ('pending','retrying') AND available_at<=? THEN available_at END) AS oldest_due\n FROM bridge_deliveries WHERE workspace=? AND recipient=?`).get(nowText, nowText, nowText, nowText, principal.workspace, principal.agent) as Row;\n const oldestDueAt = queue.oldest_due ? String(queue.oldest_due) : undefined;\n return { schemaVersion: \"local-v2\", deliverySupported: true, pending: Number(queue.pending ?? 0), claimed: Number(queue.claimed ?? 0), retrying: Number(queue.retrying ?? 0), dead: Number(queue.dead ?? 0), cancelled: Number(queue.cancelled ?? 0), oldestAvailableAt: queue.oldest_available ? String(queue.oldest_available) : undefined, due: Number(queue.due ?? 0), scheduled: Number(queue.scheduled ?? 0), expiredLeases: Number(queue.expired_leases ?? 0), oldestDueAt, queueLagMs: oldestDueAt ? Math.max(0, now.getTime() - Date.parse(oldestDueAt)) : 0 };\n }\n async heartbeat(principal: BridgePrincipal, leaseMs: number, runtimeType?: string, capabilities: string[] = []): Promise<AgentPresence> {\n await this.ready();\n const now = new Date();\n const nowText = now.toISOString();\n const expires = new Date(now.getTime() + leaseMs).toISOString();\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.db.prepare(\"DELETE FROM bridge_presence WHERE workspace=? AND lease_expires_at<=?\")\n .run(principal.workspace, nowText);\n const current = this.db.prepare(\"SELECT 1 FROM bridge_presence WHERE workspace=? AND agent=? AND instance=?\")\n .get(principal.workspace, principal.agent, principal.instance!) as Row | undefined;\n const agentCount = this.db.prepare(\"SELECT count(*) AS count FROM bridge_presence WHERE workspace=? AND agent=?\")\n .get(principal.workspace, principal.agent) as Row;\n const workspaceCount = this.db.prepare(\"SELECT count(*) AS count FROM bridge_presence WHERE workspace=?\")\n .get(principal.workspace) as Row;\n if (!current && (Number(agentCount.count) >= 128 || Number(workspaceCount.count) >= 4096)) {\n throw Object.assign(new Error(\"active instance limit reached\"), {\n status: 429,\n code: \"presence_limit\",\n });\n }\n this.db.prepare(\"INSERT INTO bridge_presence (workspace,agent,instance,runtime_type,capabilities,lease_expires_at,last_seen_at) VALUES (?,?,?,?,?,?,?) ON CONFLICT(workspace,agent,instance) DO UPDATE SET runtime_type=excluded.runtime_type, capabilities=excluded.capabilities, lease_expires_at=excluded.lease_expires_at, last_seen_at=excluded.last_seen_at\")\n .run(principal.workspace,principal.agent,principal.instance!,runtimeType ?? null,JSON.stringify(capabilities),expires,nowText);\n const result = presence(this.db.prepare(\"SELECT * FROM bridge_presence WHERE workspace=? AND agent=? AND instance=?\")\n .get(principal.workspace,principal.agent,principal.instance!) as Row);\n this.db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n }\n async listPresence(principal: BridgePrincipal): Promise<AgentPresence[]> {\n await this.ready();\n const now = new Date().toISOString();\n this.db.prepare(\"DELETE FROM bridge_presence WHERE workspace=? AND lease_expires_at<=?\")\n .run(principal.workspace, now);\n const rows = this.db.prepare(\"SELECT * FROM bridge_presence WHERE workspace=? ORDER BY agent,instance\")\n .all(principal.workspace) as Row[];\n return rows.map(presence);\n }\n async listDeliveries(principal: BridgePrincipal, query: DeliveryQuery = {}) {\n await this.ready();\n const filters = { role: query.role ?? \"all\", states: [...(query.states ?? [])].sort(), messageId: query.messageId ?? null, recipient: query.recipient ?? null };\n const scope = scopedCursorScope(\"deliveries\", principal, filters);\n const position = validateDeliveryCursorPosition(decodeScopedCursor(query.cursor, scope));\n const limit = query.limit ?? 50;\n const clauses = [\"delivery.workspace=?\"];\n const args: SQLInputValue[] = [principal.workspace];\n const role = query.role ?? \"all\";\n clauses.push(role === \"recipient\" ? \"delivery.recipient=?\" : role === \"publisher\" ? \"message.source=?\" : \"(delivery.recipient=? OR message.source=?)\");\n args.push(principal.agent); if (role === \"all\") args.push(principal.agent);\n if (position) { clauses.push(\"(delivery.created_at>? OR (delivery.created_at=? AND delivery.id>?))\"); args.push(position.createdAt as string, position.createdAt as string, position.id as string); }\n if (query.messageId) { clauses.push(\"delivery.message_id=?\"); args.push(query.messageId); }\n if (query.recipient) { clauses.push(\"delivery.recipient=?\"); args.push(query.recipient); }\n if (query.states?.length) { clauses.push(`delivery.state IN (${query.states.map(() => \"?\").join(\",\")})`); args.push(...query.states); }\n const rows = this.db.prepare(`SELECT delivery.* FROM bridge_deliveries delivery JOIN bridge_messages message ON message.workspace=delivery.workspace AND message.id=delivery.message_id WHERE ${clauses.join(\" AND \")} ORDER BY delivery.created_at,delivery.id LIMIT ?`).all(...args, limit) as Row[];\n const deliveries = rows.map(delivery); const last = deliveries[deliveries.length - 1];\n return { deliveries, cursor: deliveries.length === limit && last ? encodeScopedCursor(scope, { createdAt: last.createdAt, id: last.id }) : undefined };\n }\n async listDeliveryEvents(principal: BridgePrincipal, deliveryId: string, query: {cursor?:string;limit?:number} = {}) {\n await this.ready(); const limit = query.limit ?? 50;\n const scope = scopedCursorScope(\"delivery-events\", principal, { deliveryId });\n const position = validateEventCursorPosition(decodeScopedCursor(query.cursor, scope));\n const rows = this.db.prepare(\"SELECT event.* FROM bridge_delivery_events event JOIN bridge_messages message ON message.workspace=event.workspace AND message.id=event.message_id WHERE event.workspace=? AND event.delivery_id=? AND event.sequence>? AND (event.recipient=? OR message.source=?) ORDER BY event.sequence LIMIT ?\").all(principal.workspace,deliveryId,position ?? \"0\",principal.agent,principal.agent,limit) as Row[];\n const events = rows.map(deliveryEvent); const last = events[events.length - 1];\n return { events, cursor: events.length === limit && last ? encodeScopedCursor(scope, last.sequence) : undefined };\n }\n async cancelDelivery(principal: BridgePrincipal,id:string) {\n await this.ready(); this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n const current = this.db.prepare(\"SELECT delivery.* FROM bridge_deliveries delivery JOIN bridge_messages message ON message.workspace=delivery.workspace AND message.id=delivery.message_id WHERE delivery.id=? AND delivery.workspace=? AND message.source=?\").get(id,principal.workspace,principal.agent) as Row | undefined;\n if (!current) { this.db.exec(\"COMMIT\"); return null; }\n if (current.state === \"cancelled\") { this.db.exec(\"COMMIT\"); return delivery(current); }\n if (![\"pending\",\"retrying\",\"claimed\"].includes(String(current.state))) throw new DeliveryStateConflictError(`cannot cancel a ${current.state} delivery`);\n this.db.prepare(\"UPDATE bridge_deliveries SET state='cancelled',lease_token=NULL,lease_owner=NULL,lease_expires_at=NULL,last_error=NULL,last_actor=?,last_action='cancel' WHERE id=?\").run(principal.agent,id);\n const result = delivery(this.db.prepare(\"SELECT * FROM bridge_deliveries WHERE id=?\").get(id) as Row); this.db.exec(\"COMMIT\"); return result;\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }\n async requeueDelivery(principal: BridgePrincipal,id:string) {\n await this.ready(); this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n const current = this.db.prepare(\"SELECT delivery.*,message.expires_at,message.delivery_policy FROM bridge_deliveries delivery JOIN bridge_messages message ON message.workspace=delivery.workspace AND message.id=delivery.message_id WHERE delivery.id=? AND delivery.workspace=? AND message.source=?\").get(id,principal.workspace,principal.agent) as Row | undefined;\n if (!current) { this.db.exec(\"COMMIT\"); return null; }\n if (![\"dead\",\"cancelled\"].includes(String(current.state))) throw new DeliveryStateConflictError(`cannot requeue a ${current.state} delivery`);\n const now = new Date().toISOString(); if (current.expires_at && String(current.expires_at) <= now) throw new DeliveryStateConflictError(\"cannot requeue an expired message\");\n const policy = parse(current.delivery_policy); const availableAt = policy.notBefore && policy.notBefore > now ? policy.notBefore : now;\n this.db.prepare(\"UPDATE bridge_deliveries SET state='pending',available_at=?,cycle_attempt=0,requeue_count=requeue_count+1,lease_token=NULL,lease_owner=NULL,lease_expires_at=NULL,last_error=NULL,last_actor=?,last_action='requeue' WHERE id=?\").run(availableAt,principal.agent,id);\n const result = delivery(this.db.prepare(\"SELECT * FROM bridge_deliveries WHERE id=?\").get(id) as Row); this.db.exec(\"COMMIT\"); return result;\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }\n async close(): Promise<void> { this.db.close(); }\n}\n","function isBusy(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n const sqlite = error as Error & { errcode?: number };\n return sqlite.errcode === 5 || /database is (?:locked|busy)/i.test(error.message);\n}\n\nexport async function retrySqliteBusy<T>(\n operation: () => T,\n timeoutMs: number,\n): Promise<T> {\n const deadline = Date.now() + Math.max(1, Math.trunc(timeoutMs));\n let delayMs = 5;\n while (true) {\n try {\n return operation();\n } catch (error) {\n if (!isBusy(error) || Date.now() >= deadline) throw error;\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n delayMs = Math.min(delayMs * 2, 50);\n }\n }\n}\n"],"mappings":"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","names":["require"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contracts/registry.ts"],"sourcesContent":["import Type, { type TSchema } from \"@sinclair/typebox\";\nimport { Check, Errors } from \"@sinclair/typebox/value\";\n\nexport const PROTOCOL_VERSION = \"2.1\";\nexport const LEGACY_PROTOCOL_VERSION = \"2.0\";\nexport const SUPPORTED_PROTOCOL_VERSIONS = [LEGACY_PROTOCOL_VERSION, PROTOCOL_VERSION] as const;\nexport const SUPPORTED_PROTOCOL_RANGE = SUPPORTED_PROTOCOL_VERSIONS.join(\",\");\nexport const PROTOCOL_HEADER = \"x-agent-bridge-protocol-version\";\nexport const SUPPORTED_PROTOCOL_HEADER = \"x-agent-bridge-supported-protocol-versions\";\nexport const SCOPE_ENFORCEMENT = true;\n\nconst StringArray = Type.Array(Type.String());\nconst Empty = Type.Object({}, { additionalProperties: false });\nconst OptionalString = () => Type.Optional(Type.String());\nconst OptionalNumber = (options: Record<string, unknown> = {}) => Type.Optional(Type.Number(options));\nconst OptionalBoolean = () => Type.Optional(Type.Boolean());\nconst NullableString = () => Type.Union([Type.String(), Type.Null()]);\nconst NullableNumber = () => Type.Union([Type.Number(), Type.Null()]);\nconst UUID_V7_PATTERN = \"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$\";\n\nexport const ErrorIssueSchema = Type.Object({\n path: Type.String(),\n message: Type.String(),\n}, { additionalProperties: true });\n\nexport const ErrorEnvelopeSchema = Type.Object({\n error: Type.Object({\n code: Type.String(),\n requestId: Type.String(),\n message: OptionalString(),\n operation: OptionalString(),\n issues: Type.Optional(Type.Array(ErrorIssueSchema)),\n details: Type.Optional(Type.Any()),\n supportedProtocolVersions: Type.Optional(StringArray),\n }, { additionalProperties: true }),\n}, { additionalProperties: true });\n\nconst DeliveryPolicySchema = Type.Union([\n Type.Object({ mode: Type.Literal(\"mailbox\") }, { additionalProperties: false }),\n Type.Object({\n mode: Type.Literal(\"leased\"),\n maxAttempts: Type.Number(),\n retryBaseDelayMs: Type.Number(),\n retryMaxDelayMs: Type.Number(),\n retryJitterRatio: Type.Number(),\n notBefore: OptionalString(),\n }, { additionalProperties: false }),\n]);\n\nconst DeliveryPolicyInputSchema = Type.Object({\n mode: Type.Optional(Type.Enum([\"mailbox\", \"leased\"])),\n maxAttempts: OptionalNumber(),\n retryBaseDelayMs: OptionalNumber(),\n retryMaxDelayMs: OptionalNumber(),\n retryJitterRatio: OptionalNumber(),\n notBefore: OptionalString(),\n}, { additionalProperties: false });\n\nconst MessageDraftSchema = Type.Object({\n id: Type.Optional(Type.String({ pattern: UUID_V7_PATTERN })),\n source: OptionalString(),\n project: OptionalString(),\n type: Type.String(),\n content: Type.String(),\n contentType: OptionalString(),\n data: Type.Optional(Type.Any()),\n targets: Type.Optional(StringArray),\n threadId: OptionalString(),\n replyToId: OptionalString(),\n correlationId: OptionalString(),\n causationId: OptionalString(),\n priority: Type.Optional(Type.Enum([\"info\", \"high\", \"urgent\"])),\n expiresAt: OptionalString(),\n idempotencyKey: OptionalString(),\n atribReceiptId: OptionalString(),\n informedBy: Type.Optional(StringArray),\n metadata: Type.Optional(Type.Any()),\n deliveryPolicy: Type.Optional(DeliveryPolicyInputSchema),\n}, { additionalProperties: false });\n\n// Exact field set released by package 0.2.0 at d8184fe. A headerless\n// gateway response selects this wire contract, not the current one.\nexport const LegacyMessageDraftSchema = Type.Object({\n id: OptionalString(), source: OptionalString(), type: Type.String(), content: Type.String(),\n contentType: OptionalString(), data: Type.Optional(Type.Any()), targets: Type.Optional(StringArray),\n threadId: OptionalString(), replyToId: OptionalString(), correlationId: OptionalString(),\n causationId: OptionalString(), priority: Type.Optional(Type.Enum([\"info\", \"high\", \"urgent\"])),\n expiresAt: OptionalString(), idempotencyKey: OptionalString(), atribReceiptId: OptionalString(),\n informedBy: Type.Optional(StringArray), metadata: Type.Optional(Type.Any()),\n}, { additionalProperties: false });\n\nconst MessageSchema = Type.Object({\n id: Type.String(),\n workspace: Type.String(),\n project: OptionalString(),\n source: Type.String(),\n type: Type.String(),\n content: Type.String(),\n contentType: Type.String(),\n sequence: Type.String(),\n createdAt: Type.String(),\n data: Type.Optional(Type.Any()),\n targets: StringArray,\n threadId: OptionalString(),\n replyToId: OptionalString(),\n correlationId: OptionalString(),\n causationId: OptionalString(),\n priority: Type.Enum([\"info\", \"high\", \"urgent\"]),\n expiresAt: OptionalString(),\n idempotencyKey: OptionalString(),\n atribReceiptId: OptionalString(),\n informedBy: Type.Optional(StringArray),\n metadata: Type.Optional(Type.Any()),\n deliveryPolicy: DeliveryPolicySchema,\n}, { additionalProperties: true });\n\nexport const LegacyMessageSchema = Type.Object({\n id: Type.String(), workspace: Type.String(), source: Type.String(), type: Type.String(),\n content: Type.String(), contentType: Type.String(), sequence: Type.String(), createdAt: Type.String(),\n data: Type.Optional(Type.Any()), targets: StringArray, threadId: OptionalString(), replyToId: OptionalString(),\n correlationId: OptionalString(), causationId: OptionalString(), priority: Type.Enum([\"info\", \"high\", \"urgent\"]),\n expiresAt: OptionalString(), idempotencyKey: OptionalString(), atribReceiptId: OptionalString(),\n informedBy: Type.Optional(StringArray), metadata: Type.Optional(Type.Any()),\n}, { additionalProperties: true });\n\nconst DeliveryStateSchema = Type.Enum([\"pending\", \"claimed\", \"acked\", \"retrying\", \"dead\", \"cancelled\"]);\nconst DeliveryActionSchema = Type.Enum([\"created\", \"claim\", \"ack\", \"nack_retry\", \"nack_dead\", \"lease_expired\", \"attempts_exhausted\", \"message_expired\", \"cancel\", \"requeue\"]);\nconst DeliverySchema = Type.Object({\n id: Type.String(),\n messageId: Type.String(),\n workspace: Type.String(),\n recipient: Type.String(),\n state: DeliveryStateSchema,\n attempt: Type.Number(),\n cycleAttempt: Type.Number(),\n requeueCount: Type.Number(),\n createdAt: Type.String(),\n priorityRank: Type.Number(),\n availableAt: Type.String(),\n leaseToken: OptionalString(),\n leaseOwner: OptionalString(),\n leaseExpiresAt: OptionalString(),\n lastError: OptionalString(),\n lastActor: OptionalString(),\n lastAction: DeliveryActionSchema,\n}, { additionalProperties: true });\n\nexport const LegacyDeliverySchema = Type.Object({\n id: Type.String(), messageId: Type.String(), workspace: Type.String(), recipient: Type.String(),\n state: Type.Enum([\"pending\", \"claimed\", \"acked\", \"retrying\", \"dead\"]), attempt: Type.Number(),\n availableAt: Type.String(), leaseToken: OptionalString(), leaseOwner: OptionalString(),\n leaseExpiresAt: OptionalString(), lastError: OptionalString(),\n}, { additionalProperties: true });\n\nconst DeliveryEventSchema = Type.Object({\n sequence: Type.String(),\n deliveryId: Type.String(),\n messageId: Type.String(),\n workspace: Type.String(),\n recipient: Type.String(),\n fromState: Type.Optional(DeliveryStateSchema),\n toState: DeliveryStateSchema,\n attempt: Type.Number(),\n cycleAttempt: Type.Number(),\n requeueCount: Type.Number(),\n leaseOwner: OptionalString(),\n error: OptionalString(),\n actor: Type.String(),\n action: DeliveryActionSchema,\n createdAt: Type.String(),\n}, { additionalProperties: true });\n\nconst PresenceSchema = Type.Object({\n workspace: Type.String(),\n agent: Type.String(),\n instance: Type.String(),\n runtimeType: OptionalString(),\n capabilities: StringArray,\n leaseExpiresAt: Type.String(),\n lastSeenAt: Type.String(),\n}, { additionalProperties: true });\n\nconst DeliveryDiagnosticsProperties = {\n schemaVersion: Type.Enum([\"local-v2\", \"postgres-v2\", \"legacy-v1\"]),\n deliverySupported: Type.Boolean(),\n pending: NullableNumber(),\n claimed: NullableNumber(),\n retrying: NullableNumber(),\n dead: NullableNumber(),\n cancelled: Type.Optional(NullableNumber()),\n oldestAvailableAt: OptionalString(),\n due: Type.Optional(NullableNumber()),\n scheduled: Type.Optional(NullableNumber()),\n expiredLeases: Type.Optional(NullableNumber()),\n oldestDueAt: OptionalString(),\n queueLagMs: Type.Optional(NullableNumber()),\n principal: Type.Optional(Type.Object({ workspace: Type.String(), agent: Type.String() }, { additionalProperties: true })),\n} as const;\n\nconst DiagnosticsSchema = Type.Object(DeliveryDiagnosticsProperties, { additionalProperties: true });\n\nconst ClientDiagnosticsSchema = Type.Object({\n ...DeliveryDiagnosticsProperties,\n remoteReachable: Type.Optional(Type.Union([Type.Boolean(), Type.Null()])),\n outboxPending: OptionalNumber(),\n outboxBlocked: OptionalNumber(),\n cachedMessages: OptionalNumber(),\n lastSyncAt: OptionalString(),\n lastSyncError: OptionalString(),\n outboxDue: OptionalNumber(),\n outboxScheduled: OptionalNumber(),\n outboxLeased: OptionalNumber(),\n outboxOldestDueAt: OptionalString(),\n outboxQueueLagMs: OptionalNumber(),\n outboxOldestBlockedAt: OptionalString(),\n outboxBlockedAgeMs: Type.Optional(NullableNumber()),\n outboxBlockedMaxAttempts: OptionalNumber(),\n outboxBlockedLastError: OptionalString(),\n outboxNextRetryAt: OptionalString(),\n lastOutboundSyncAt: OptionalString(),\n lastInboundSyncAt: OptionalString(),\n lastSyncAttemptAt: OptionalString(),\n syncLoopState: Type.Optional(Type.Enum([\"disabled\", \"idle\", \"running\", \"backoff\", \"stopped\", \"failed\"])),\n syncLoopError: OptionalString(),\n remoteError: OptionalString(),\n}, { additionalProperties: true });\n\nconst ClientStatusSchema = Type.Object({\n status: Type.Enum([\"ok\", \"unknown\", \"degraded\", \"failed\"]),\n localHealthy: Type.Boolean(),\n connected: Type.Boolean(),\n remoteReachable: Type.Union([Type.Boolean(), Type.Null()]),\n provider: Type.Enum([\"local\", \"gateway\", \"legacy-supabase\"]),\n workspace: Type.String(),\n agent: Type.String(),\n instance: Type.Union([Type.String(), Type.Null()]),\n schemaVersion: Type.Enum([\"local-v2\", \"postgres-v2\", \"legacy-v1\"]),\n endpoint: Type.Union([Type.String(), Type.Null()]),\n database: Type.Union([Type.String(), Type.Null()]),\n cursorPath: Type.String(),\n lastCursor: Type.Union([Type.String(), Type.Null()]),\n queue: ClientDiagnosticsSchema,\n checks: Type.Array(Type.Object({\n name: Type.String(),\n status: Type.Enum([\"ok\", \"unknown\", \"degraded\", \"failed\"]),\n message: Type.String(),\n }, { additionalProperties: false })),\n}, { additionalProperties: true });\n\nconst HistoryRequestSchema = Type.Object({\n cursor: OptionalString(),\n limit: OptionalNumber({ minimum: 1, maximum: 200 }),\n types: Type.Optional(StringArray),\n mailbox: Type.Optional(Type.Enum([\"inbox\", \"sent\", \"all\"])),\n receiptState: Type.Optional(Type.Enum([\"any\", \"unread\", \"read\"])),\n includeExpired: OptionalBoolean(),\n source: OptionalString(),\n project: OptionalString(),\n since: OptionalString(),\n unacknowledgedBy: OptionalString(),\n threadId: OptionalString(),\n latest: OptionalBoolean(),\n}, { additionalProperties: false });\n\nconst MessagePageSchema = Type.Object({\n messages: Type.Array(MessageSchema),\n cursor: OptionalString(),\n source: Type.Optional(Type.Enum([\"remote\", \"cache\"])),\n stale: OptionalBoolean(),\n degraded: OptionalBoolean(),\n acknowledgements: Type.Optional(Type.Enum([\"authoritative\", \"unknown\"])),\n lastSyncedAt: OptionalString(),\n}, { additionalProperties: true });\n\nconst DeliveryPageSchema = Type.Object({ deliveries: Type.Array(DeliverySchema), cursor: OptionalString() }, { additionalProperties: true });\nconst DeliveryEventPageSchema = Type.Object({ events: Type.Array(DeliveryEventSchema), cursor: OptionalString() }, { additionalProperties: true });\nconst DeliveryIdSchema = Type.Object({ deliveryId: Type.String() }, { additionalProperties: false });\nconst LeaseSchema = Type.Object({ deliveryId: Type.String(), leaseToken: Type.String() }, { additionalProperties: false });\nconst RetryPolicySchema = Type.Object({\n maxAttempts: OptionalNumber(),\n baseDelayMs: OptionalNumber(),\n maxDelayMs: OptionalNumber(),\n jitterRatio: OptionalNumber(),\n}, { additionalProperties: false });\n\nconst NegativeAcknowledgeRequestSchema = Type.Object({\n deliveryId: Type.String(),\n leaseToken: Type.String(),\n error: Type.String(),\n disposition: Type.Optional(Type.Enum([\"retry\", \"dead\"])),\n dead: OptionalBoolean(),\n retryPolicy: Type.Optional(RetryPolicySchema),\n}, { additionalProperties: false });\n\nconst LegacyNegativeAcknowledgeRequestSchema = Type.Object({\n deliveryId: Type.String(),\n leaseToken: Type.String(),\n error: OptionalString(),\n disposition: Type.Optional(Type.Enum([\"retry\", \"dead\"])),\n dead: OptionalBoolean(),\n retryPolicy: Type.Optional(RetryPolicySchema),\n}, { additionalProperties: false });\n\nconst SyncResponseSchema = Type.Object({\n online: Type.Boolean(),\n pushed: Type.Number(),\n deduplicated: Type.Number(),\n pulled: Type.Number(),\n pending: Type.Number(),\n blocked: Type.Number(),\n cached: Type.Number(),\n cursor: Type.Optional(NullableString()),\n lastSyncedAt: Type.Optional(NullableString()),\n lastError: Type.Optional(NullableString()),\n failureRetryable: OptionalBoolean(),\n}, { additionalProperties: true });\n\nconst ClaimResponseSchema = Type.Object({\n delivery: Type.Union([DeliverySchema, Type.Null()]),\n leaseToken: OptionalString(),\n}, {\n additionalProperties: true,\n oneOf: [\n { properties: { delivery: { type: \"null\" }, leaseToken: false }, required: [\"delivery\"] },\n { properties: { delivery: DeliverySchema, leaseToken: { type: \"string\" } }, required: [\"delivery\", \"leaseToken\"] },\n ],\n});\n\nexport const AUTHORIZATION_SCOPES = [\n \"deliveries:claim\",\n \"deliveries:manage\",\n \"deliveries:read\",\n \"deliveries:settle\",\n \"gateway:metrics\",\n \"messages:read\",\n \"messages:write\",\n \"presence:read\",\n \"presence:write\",\n \"receipts:write\",\n \"status:read\",\n] as const;\n\nexport type AuthorizationScope = typeof AUTHORIZATION_SCOPES[number];\n\nexport type ContractProvider = \"local\" | \"gateway\" | \"legacy-supabase\";\nexport type ContractSurface = \"mcp\" | \"http\" | \"cli\";\nexport type OperationId =\n | \"capabilities\" | \"status\" | \"client_status\" | \"gateway_metrics\" | \"publish_message\" | \"history\"\n | \"record_receipt\" | \"claim_delivery\" | \"list_deliveries\" | \"list_delivery_events\"\n | \"cancel_delivery\" | \"requeue_delivery\" | \"extend_delivery\" | \"acknowledge_delivery\"\n | \"negative_acknowledge_delivery\" | \"heartbeat\" | \"presence\" | \"sync\";\n\nexport interface HttpContract {\n method: \"GET\" | \"POST\";\n path: string;\n successStatus?: 200 | 201;\n responseContentType?: \"application/json\" | \"text/plain\";\n queryAliases?: Readonly<Record<string, readonly string[]>>;\n}\n\nexport interface CliContract {\n command: string;\n aliases?: readonly string[];\n options: readonly string[];\n response?: TSchema;\n variants?: readonly CliCompatibilityVariant[];\n}\n\nexport interface CliCompatibilityVariant {\n command: string;\n condition: { kind: \"always\" } | { kind: \"option-present\"; option: string };\n routesTo: OperationId;\n options: readonly string[];\n response: TSchema;\n}\n\nexport interface OperationContract {\n id: OperationId;\n summary: string;\n request: TSchema;\n response: TSchema;\n scopes: readonly AuthorizationScope[];\n providers: readonly ContractProvider[];\n mcp?: { name: string };\n http?: HttpContract;\n cli?: CliContract;\n}\n\nconst ALL_PROVIDERS = [\"local\", \"gateway\", \"legacy-supabase\"] as const;\nconst DELIVERY_PROVIDERS = [\"local\", \"gateway\"] as const;\nconst GATEWAY_PROVIDER = [\"gateway\"] as const;\nconst operation = (entry: OperationContract): OperationContract => entry;\nconst HistoryCliOptions = [\"cursor\", \"limit\", \"type\", \"category\", \"mailbox\", \"receipt-state\", \"source\", \"project\", \"since\", \"unacked-by\", \"thread-id\", \"latest\"] as const;\nconst LegacyGetRowSchema = Type.Object({\n id: Type.Union([Type.String(), Type.Number()]),\n source: Type.String(),\n category: Type.String(),\n content: Type.String(),\n priority: Type.Enum([\"info\", \"high\", \"urgent\"]),\n project: NullableString(),\n metadata: Type.Any(),\n created_at: Type.String(),\n}, { additionalProperties: false });\nconst ReceiptCliResponseSchema = Type.Object({\n acknowledged: Type.Number(),\n agent: Type.String(),\n}, { additionalProperties: true });\n\nexport const operations: readonly OperationContract[] = [\n operation({ id: \"capabilities\", summary: \"Discover operations available on the current surface.\", request: Empty, response: Type.Object({ protocolVersion: Type.String(), currentProtocolVersion: Type.String(), selectedProtocolVersion: Type.String(), supportedProtocolVersions: StringArray, scopeEnforcement: Type.Boolean(), requestAuthority: Type.Boolean(), rowIsolation: Type.Boolean(), authorizationModel: Type.Enum([\"scoped-credential\", \"credential-wide\", \"process-identity\", \"legacy-key\"]), surface: Type.Enum([\"mcp\", \"http\", \"cli\"]), provider: Type.Enum([\"local\", \"gateway\", \"legacy-supabase\"]), operations: Type.Array(Type.Object({ id: Type.String(), summary: Type.String(), requiredScopes: StringArray, mcp: Type.Optional(Type.Any()), http: Type.Optional(Type.Any()), cli: Type.Optional(Type.Any()) }, { additionalProperties: true })) }, { additionalProperties: true }), scopes: [], providers: ALL_PROVIDERS, mcp: { name: \"capabilities\" }, http: { method: \"GET\", path: \"/v2/capabilities\" }, cli: { command: \"capabilities\", options: [] } }),\n operation({ id: \"status\", summary: \"Read gateway delivery diagnostics.\", request: Empty, response: DiagnosticsSchema, scopes: [\"status:read\"], providers: ALL_PROVIDERS, http: { method: \"GET\", path: \"/v2/status\" } }),\n operation({ id: \"client_status\", summary: \"Read client connectivity and provider diagnostics.\", request: Empty, response: ClientStatusSchema, scopes: [\"status:read\"], providers: ALL_PROVIDERS, cli: { command: \"status\", aliases: [\"doctor\"], options: [] } }),\n operation({ id: \"gateway_metrics\", summary: \"Read Prometheus gateway counters.\", request: Empty, response: Type.String(), scopes: [\"gateway:metrics\"], providers: GATEWAY_PROVIDER, http: { method: \"GET\", path: \"/metrics\", responseContentType: \"text/plain\" } }),\n operation({ id: \"publish_message\", summary: \"Create an immutable Agent Bridge v2 message.\", request: MessageDraftSchema, response: Type.Object({ created: Type.Boolean(), message: MessageSchema, disposition: Type.Optional(Type.Enum([\"committed\", \"queued\"])), authoritative: OptionalBoolean() }, { additionalProperties: true }), scopes: [\"messages:write\"], providers: ALL_PROVIDERS, mcp: { name: \"send\" }, http: { method: \"POST\", path: \"/v2/messages\", successStatus: 201 }, cli: { command: \"send\", aliases: [\"post\"], options: [\"source\", \"project\", \"type\", \"kind\", \"category\", \"content\", \"content-type\", \"data\", \"payload\", \"payload-mime\", \"payload-ref\", \"payload-ciphertext\", \"target\", \"target-agent\", \"target-agents\", \"thread-id\", \"reply-to-id\", \"correlation-id\", \"causation-id\", \"priority\", \"expires-at\", \"idempotency-key\", \"atrib-receipt-id\", \"informed-by\", \"metadata\", \"delivery-mode\", \"delivery-policy\", \"delivery-max-attempts\", \"retry-base-ms\", \"retry-max-ms\", \"retry-jitter\", \"not-before\", \"message-id\"] } }),\n operation({ id: \"history\", summary: \"Read visible messages after an opaque cursor.\", request: HistoryRequestSchema, response: MessagePageSchema, scopes: [\"messages:read\"], providers: ALL_PROVIDERS, mcp: { name: \"history\" }, http: { method: \"GET\", path: \"/v2/history\", queryAliases: { unacknowledgedBy: [\"unacked_by\"] } }, cli: { command: \"history\", aliases: [\"inbox\", \"sent\"], options: HistoryCliOptions, variants: [{ command: \"get\", condition: { kind: \"always\" }, routesTo: \"history\", options: HistoryCliOptions, response: Type.Array(LegacyGetRowSchema) }] } }),\n operation({ id: \"record_receipt\", summary: \"Record caller-bound inbox read receipts.\", request: Type.Object({ messageIds: Type.Array(Type.String(), { minItems: 1, maxItems: 200 }) }, { additionalProperties: false }), response: Type.Object({ recorded: Type.Number() }, { additionalProperties: true }), scopes: [\"receipts:write\"], providers: ALL_PROVIDERS, http: { method: \"POST\", path: \"/v2/receipts\" }, cli: { command: \"acknowledge\", aliases: [\"receipt\"], options: [\"ids\"], response: ReceiptCliResponseSchema, variants: [{ command: \"ack\", condition: { kind: \"option-present\", option: \"ids\" }, routesTo: \"record_receipt\", options: [\"ids\"], response: ReceiptCliResponseSchema }] } }),\n operation({ id: \"claim_delivery\", summary: \"Atomically claim the next targeted delivery.\", request: Type.Object({ leaseMs: OptionalNumber(), maxAttempts: OptionalNumber() }, { additionalProperties: false }), response: ClaimResponseSchema, scopes: [\"deliveries:claim\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"claim\" }, http: { method: \"POST\", path: \"/v2/deliveries/claim\" }, cli: { command: \"claim\", options: [\"lease-ms\", \"max-attempts\"], response: Type.Union([Type.Object({ delivery: DeliverySchema, leaseToken: Type.String() }, { additionalProperties: true }), Type.Null()]) } }),\n operation({ id: \"list_deliveries\", summary: \"List caller-visible deliveries.\", request: Type.Object({ cursor: OptionalString(), limit: OptionalNumber(), role: Type.Optional(Type.Enum([\"recipient\", \"publisher\", \"all\"])), messageId: OptionalString(), recipient: OptionalString(), states: Type.Optional(Type.Array(DeliveryStateSchema)) }, { additionalProperties: false }), response: DeliveryPageSchema, scopes: [\"deliveries:read\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"list_deliveries\" }, http: { method: \"GET\", path: \"/v2/deliveries\" }, cli: { command: \"deliveries\", aliases: [\"dead-letters\"], options: [\"cursor\", \"limit\", \"role\", \"message-id\", \"recipient\", \"state\"] } }),\n operation({ id: \"list_delivery_events\", summary: \"List the append-only event history for a delivery.\", request: Type.Object({ deliveryId: Type.String(), cursor: OptionalString(), limit: OptionalNumber() }, { additionalProperties: false }), response: DeliveryEventPageSchema, scopes: [\"deliveries:read\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"list_delivery_events\" }, http: { method: \"GET\", path: \"/v2/deliveries/{deliveryId}/events\" }, cli: { command: \"delivery-events\", options: [\"delivery-id\", \"cursor\", \"limit\"] } }),\n operation({ id: \"cancel_delivery\", summary: \"Cancel a delivery as its publisher.\", request: DeliveryIdSchema, response: Type.Object({ delivery: Type.Union([DeliverySchema, Type.Null()]) }, { additionalProperties: true }), scopes: [\"deliveries:manage\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"cancel_delivery\" }, http: { method: \"POST\", path: \"/v2/deliveries/{deliveryId}/cancel\" }, cli: { command: \"cancel\", options: [\"delivery-id\"], response: Type.Union([DeliverySchema, Type.Null()]) } }),\n operation({ id: \"requeue_delivery\", summary: \"Requeue a delivery as its publisher.\", request: DeliveryIdSchema, response: Type.Object({ delivery: Type.Union([DeliverySchema, Type.Null()]) }, { additionalProperties: true }), scopes: [\"deliveries:manage\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"requeue_delivery\" }, http: { method: \"POST\", path: \"/v2/deliveries/{deliveryId}/requeue\" }, cli: { command: \"requeue\", options: [\"delivery-id\"], response: Type.Union([DeliverySchema, Type.Null()]) } }),\n operation({ id: \"extend_delivery\", summary: \"Extend a claimed delivery lease.\", request: Type.Object({ deliveryId: Type.String(), leaseToken: Type.String(), leaseMs: Type.Number() }, { additionalProperties: false }), response: Type.Object({ delivery: Type.Union([DeliverySchema, Type.Null()]) }, { additionalProperties: true }), scopes: [\"deliveries:settle\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"extend\" }, http: { method: \"POST\", path: \"/v2/deliveries/{deliveryId}/extend\" }, cli: { command: \"extend\", options: [\"delivery-id\", \"lease-token\", \"lease-ms\"], response: Type.Union([DeliverySchema, Type.Null()]) } }),\n operation({ id: \"acknowledge_delivery\", summary: \"Settle a claimed delivery successfully.\", request: LeaseSchema, response: Type.Object({ delivery: Type.Union([DeliverySchema, Type.Null()]) }, { additionalProperties: true }), scopes: [\"deliveries:settle\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"acknowledge\" }, http: { method: \"POST\", path: \"/v2/deliveries/{deliveryId}/ack\" }, cli: { command: \"ack\", options: [\"delivery-id\", \"lease-token\"], response: Type.Union([DeliverySchema, Type.Null()]) } }),\n operation({ id: \"negative_acknowledge_delivery\", summary: \"Settle a claimed delivery for retry or dead letter.\", request: NegativeAcknowledgeRequestSchema, response: Type.Object({ delivery: Type.Union([DeliverySchema, Type.Null()]) }, { additionalProperties: true }), scopes: [\"deliveries:settle\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"negative_acknowledge\" }, http: { method: \"POST\", path: \"/v2/deliveries/{deliveryId}/nack\" }, cli: { command: \"nack\", options: [\"delivery-id\", \"lease-token\", \"error\", \"disposition\", \"dead\"], response: Type.Union([DeliverySchema, Type.Null()]) } }),\n operation({ id: \"heartbeat\", summary: \"Publish a leased runtime presence record.\", request: Type.Object({ leaseMs: OptionalNumber({ minimum: 1000, maximum: 900000 }), runtimeType: OptionalString(), capabilities: Type.Optional(StringArray) }, { additionalProperties: false }), response: PresenceSchema, scopes: [\"presence:write\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"heartbeat\" }, http: { method: \"POST\", path: \"/v2/presence/heartbeat\" }, cli: { command: \"join\", options: [\"lease-ms\", \"runtime\", \"capability\"] } }),\n operation({ id: \"presence\", summary: \"List active agent runtime instances.\", request: Empty, response: Type.Object({ agents: Type.Array(PresenceSchema) }, { additionalProperties: true }), scopes: [\"presence:read\"], providers: DELIVERY_PROVIDERS, mcp: { name: \"presence\" }, http: { method: \"GET\", path: \"/v2/presence\" }, cli: { command: \"presence\", options: [] } }),\n operation({ id: \"sync\", summary: \"Replay a gateway outbox and refresh its inbox cache.\", request: Type.Object({ maxPush: OptionalNumber(), maxPages: OptionalNumber() }, { additionalProperties: false }), response: SyncResponseSchema, scopes: [\"messages:write\", \"messages:read\"], providers: GATEWAY_PROVIDER, mcp: { name: \"sync\" }, cli: { command: \"sync\", options: [\"max-push\", \"max-pages\", \"limit\"] } }),\n];\n\nconst byId = new Map(operations.map((entry) => [entry.id, entry]));\n\nexport class ContractValidationError extends Error {\n readonly code = \"invalid_input\";\n readonly status = 400;\n constructor(readonly operation: string, readonly issues: readonly { path: string; message: string }[]) {\n super(`Request does not match the ${operation} schema`);\n }\n}\n\nexport class ContractResponseError extends Error {\n readonly code = \"protocol_mismatch\";\n readonly status = 502;\n constructor(readonly operation: string, readonly issues: readonly { path: string; message: string }[]) {\n super(`Response does not match the ${operation} schema`);\n }\n}\n\nfunction issues(schema: TSchema, value: unknown): readonly { path: string; message: string }[] {\n return [...Errors(schema, value)].map((entry) => ({ path: entry.instancePath || \"/\", message: entry.message }));\n}\n\nexport function operationContract(operationId: string): OperationContract {\n const contract = byId.get(operationId as OperationId);\n if (!contract) throw new Error(`Unknown operation contract: ${operationId}`);\n return contract;\n}\n\nexport function validateRequest(operationId: string, value: unknown): Record<string, unknown> {\n const contract = operationContract(operationId);\n if (!Check(contract.request, value)) throw new ContractValidationError(operationId, issues(contract.request, value));\n return value as Record<string, unknown>;\n}\n\nexport function validateRequestForProtocol(operationId: string, value: unknown, protocolVersion: string): Record<string, unknown> {\n if (protocolVersion === LEGACY_PROTOCOL_VERSION) {\n if (operationId === \"publish_message\") {\n if (!Check(LegacyMessageDraftSchema, value)) throw new ContractValidationError(operationId, issues(LegacyMessageDraftSchema, value));\n return value as Record<string, unknown>;\n }\n if ([\"list_deliveries\", \"list_delivery_events\", \"cancel_delivery\", \"requeue_delivery\", \"capabilities\"].includes(operationId)) {\n throw new ContractValidationError(operationId, [{ path: \"/\", message: `Operation is not supported by protocol ${LEGACY_PROTOCOL_VERSION}` }]);\n }\n if (operationId === \"history\" && value && typeof value === \"object\") {\n const unsupported = [\"mailbox\", \"receiptState\", \"project\"].find((field) => (value as Record<string, unknown>)[field] !== undefined);\n if (unsupported) throw new ContractValidationError(operationId, [{ path: `/${unsupported}`, message: `Field is not supported by protocol ${LEGACY_PROTOCOL_VERSION}` }]);\n }\n }\n if (operationId !== \"negative_acknowledge_delivery\" || protocolVersion !== LEGACY_PROTOCOL_VERSION) {\n return validateRequest(operationId, value);\n }\n if (!Check(LegacyNegativeAcknowledgeRequestSchema, value)) {\n throw new ContractValidationError(operationId, issues(LegacyNegativeAcknowledgeRequestSchema, value));\n }\n return value as Record<string, unknown>;\n}\n\nexport function parseResponse(operationId: string, value: unknown): unknown {\n const contract = operationContract(operationId);\n const serialized = JSON.stringify(value);\n const wireValue = serialized === undefined ? value : JSON.parse(serialized);\n if (!Check(contract.response, wireValue)) throw new ContractResponseError(operationId, issues(contract.response, wireValue));\n return wireValue;\n}\n\nexport function parseResponseForProtocol(operationId: string, value: unknown, protocolVersion: string): unknown {\n if (protocolVersion !== LEGACY_PROTOCOL_VERSION) return parseResponse(operationId, value);\n let schema: TSchema | undefined;\n let normalized = value;\n if (operationId === \"publish_message\") schema = Type.Object({ created: Type.Boolean(), message: LegacyMessageSchema }, { additionalProperties: true });\n else if (operationId === \"history\") schema = Type.Object({ messages: Type.Array(LegacyMessageSchema), cursor: OptionalString() }, { additionalProperties: true });\n else if (operationId === \"claim_delivery\") {\n schema = Type.Union([Type.Object({ delivery: LegacyDeliverySchema, leaseToken: Type.String() }, { additionalProperties: true }), Type.Null()]);\n normalized = value === null ? { delivery: null } : value;\n } else if ([\"extend_delivery\", \"acknowledge_delivery\", \"negative_acknowledge_delivery\"].includes(operationId)) {\n schema = LegacyDeliverySchema;\n normalized = { delivery: value };\n }\n if (!schema) return parseResponse(operationId, value);\n if (!Check(schema, value)) throw new ContractResponseError(operationId, issues(schema, value));\n return normalized;\n}\n\nexport function parseCliResponse(\n operationId: string,\n value: unknown,\n invocation?: { command: string; optionNames?: readonly string[] },\n): unknown {\n const contract = operationContract(operationId);\n const optionNames = new Set(invocation?.optionNames ?? []);\n const variant = contract.cli?.variants?.find((entry) =>\n entry.command === invocation?.command && cliVariantMatches(entry, optionNames));\n const schema = variant?.response ?? contract.cli?.response ?? contract.response;\n const serialized = JSON.stringify(value);\n const wireValue = serialized === undefined ? value : JSON.parse(serialized);\n if (!Check(schema, wireValue)) throw new ContractResponseError(operationId, issues(schema, wireValue));\n return wireValue;\n}\n\nexport function availableOperations(context: { surface: ContractSurface; provider: ContractProvider }): readonly OperationContract[] {\n return operations.filter((entry) => entry.providers.includes(context.provider) && Boolean(entry[context.surface]));\n}\n\nexport function operationForMcp(name: string, provider: ContractProvider): OperationContract | undefined {\n return availableOperations({ surface: \"mcp\", provider }).find((entry) => entry.mcp?.name === name);\n}\n\nexport function operationForHttp(method: string, path: string): OperationContract | undefined {\n return availableOperations({ surface: \"http\", provider: \"gateway\" }).find((entry) => entry.http?.method === method && entry.http.path === path);\n}\n\nfunction cliVariantMatches(\n variant: CliCompatibilityVariant,\n optionNames: ReadonlySet<string>,\n): boolean {\n return variant.condition.kind === \"always\" || optionNames.has(variant.condition.option);\n}\n\nexport function operationForCli(\n command: string,\n provider: ContractProvider,\n optionNames: readonly string[] = [],\n): OperationContract | undefined {\n const selectedOptions = new Set(optionNames);\n return availableOperations({ surface: \"cli\", provider }).find((entry) =>\n entry.cli?.command === command ||\n entry.cli?.aliases?.includes(command) ||\n entry.cli?.variants?.some((variant) =>\n variant.command === command && cliVariantMatches(variant, selectedOptions)));\n}\n\nexport function capabilityDocument(context: { surface: ContractSurface; provider: ContractProvider; selectedProtocolVersion?: string; requestAuthority?: boolean; rowIsolation?: boolean } = { surface: \"http\", provider: \"gateway\" }) {\n const selectedProtocolVersion = context.selectedProtocolVersion ?? PROTOCOL_VERSION;\n return {\n protocolVersion: selectedProtocolVersion,\n currentProtocolVersion: PROTOCOL_VERSION,\n selectedProtocolVersion,\n supportedProtocolVersions: [...SUPPORTED_PROTOCOL_VERSIONS],\n scopeEnforcement: context.provider === \"gateway\" ? SCOPE_ENFORCEMENT : false,\n requestAuthority: context.provider === \"gateway\" && context.requestAuthority === true,\n rowIsolation: context.provider === \"gateway\" && context.requestAuthority === true && context.rowIsolation === true,\n authorizationModel: context.provider === \"gateway\"\n ? \"scoped-credential\"\n : context.provider === \"local\"\n ? \"process-identity\"\n : \"legacy-key\",\n surface: context.surface,\n provider: context.provider,\n operations: availableOperations(context).map(({ request: _request, response, providers: _providers, scopes, cli, ...entry }) => ({\n ...entry,\n ...(cli ? {\n cli: {\n command: cli.command,\n ...(cli.aliases ? { aliases: cli.aliases } : {}),\n options: cli.options,\n outputSchema: cli.response ?? response,\n ...(cli.variants ? {\n variants: cli.variants.map((variant) => ({\n command: variant.command,\n condition: variant.condition,\n routesTo: variant.routesTo,\n options: variant.options,\n outputSchema: variant.response,\n })),\n } : {}),\n },\n } : {}),\n requiredScopes: [...scopes],\n })),\n };\n}\n\nexport function negotiateProtocolVersion(value: string | string[] | undefined): string {\n const requested = Array.isArray(value) ? value[0] : value;\n if (requested === undefined || requested.trim() === \"\") return LEGACY_PROTOCOL_VERSION;\n if ((SUPPORTED_PROTOCOL_VERSIONS as readonly string[]).includes(requested.trim())) return requested.trim();\n const error = new Error(\"Unsupported Agent Bridge protocol version\") as Error & { status: number; code: string; supported: string };\n error.status = 426;\n error.code = \"unsupported_protocol_version\";\n error.supported = SUPPORTED_PROTOCOL_RANGE;\n throw error;\n}\n"],"mappings":"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","names":["operation","issues"]}
|