@creatornader/agent-bridge 0.6.3 → 0.6.4
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 +10 -1
- package/ROADMAP.md +5 -0
- package/dist/bridge.js +2 -2
- package/dist/{chunk-DHGJN6NA.js → chunk-2UBJ6DHC.js} +2 -2
- package/dist/{chunk-TZHXTMPJ.js → chunk-DBQ5PNQW.js} +3 -3
- package/dist/{chunk-7Q5THTJH.js → chunk-H2UAY6AV.js} +2 -2
- package/dist/{chunk-U4M67GFU.js → chunk-HIYXPNBE.js} +20 -19
- package/dist/chunk-HIYXPNBE.js.map +1 -0
- package/dist/{chunk-7PYY3S27.js → chunk-NSQE6YRP.js} +16 -12
- package/dist/chunk-NSQE6YRP.js.map +1 -0
- package/dist/cli.js +4 -4
- package/dist/client-runtime.js +3 -3
- package/dist/dr.js +2 -2
- package/dist/index.js +4 -4
- package/dist/server.js +4 -4
- package/dist/sqlite.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-7PYY3S27.js.map +0 -1
- package/dist/chunk-U4M67GFU.js.map +0 -1
- /package/dist/{chunk-DHGJN6NA.js.map → chunk-2UBJ6DHC.js.map} +0 -0
- /package/dist/{chunk-TZHXTMPJ.js.map → chunk-DBQ5PNQW.js.map} +0 -0
- /package/dist/{chunk-7Q5THTJH.js.map → chunk-H2UAY6AV.js.map} +0 -0
|
@@ -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-upgraded-write-coordinator\", sha256: \"d8504fc1092045ac5dc50aa64b0291a68ccb57af1cfebe5d1997b79f433b2eab\" }),\n Object.freeze({ id: \"current-upgraded-project-column-write-coordinator\", sha256: \"37845f7e49b4c56dffe40295ffb31320d4b33c2acc2873e48514a1b8e36a490b\" }),\n Object.freeze({ id: \"current-upgraded-delivery-policy-write-coordinator\", sha256: \"a0079dfe925a529b613425f779b5d978464a4c6b23e6cb7439fbf74f70da89bb\" }),\n Object.freeze({ id: \"current-upgraded-delivery-events-write-coordinator\", sha256: \"a7de84c001b5f467a10c3aefdb6a92c86c7ce621cb5889cde90bc3c9f0b2f2ab\" }),\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-upgraded-write-coordinator\", sha256: \"973d010ff81a726d6520dc482a4450697ef2295f58f42a45dee30b6174b7b9f9\" }),\n Object.freeze({ id: \"current-upgraded-project-column-migration-gate-write-coordinator\", sha256: \"06c159fe10fade817b211197dea14f178e75f54c2f55b69d63f8fafb629e731c\" }),\n Object.freeze({ id: \"current-created-schema\", sha256: \"27f22b2f4024585c87e8d6f76f8999a8df92bb1f585d46594a7a1e852fd53c4c\" }),\n Object.freeze({ id: \"current-upgraded-project-column\", sha256: \"171ae11f520b4963f517d3102de64cb8a5f45c080078ff02e20aeb17891b585c\" }),\n Object.freeze({ id: \"current-upgraded-project-column-migration-gate\", sha256: \"790b4bfed373ff776ba6700065154f7a3cbbecd94f37ea09a654768ac2a8455c\" }),\n Object.freeze({ id: \"current-upgraded-migration-gate\", sha256: \"64634eae28f344f02324e6c002e4cc35ea9a99fe878de843df018482bdde38ef\" }),\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 bridge_write_gates: [\"gate_key\", \"lease_token\", \"lease_expires_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_write_gates\", [\"table\", \"bridge_write_gates\"]],\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_migration_gates: [\"scope_key\", \"state\", \"operation_id\", \"lease_token\", \"lease_expires_at\", \"updated_at\"],\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 edge_write_gates: [\"gate_key\", \"lease_token\", \"lease_expires_at\"],\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_migration_gates\", [\"table\", \"edge_migration_gates\"]],\n [\"edge_outbox\", [\"table\", \"edge_outbox\"]],\n [\"edge_inbox\", [\"table\", \"edge_inbox\"]],\n [\"edge_write_gates\", [\"table\", \"edge_write_gates\"]],\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 [\"edge_migration_gates_state\", [\"index\", \"edge_migration_gates\"]],\n [\"edge_outbox_migration_gate_insert\", [\"trigger\", \"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, SQLITE_INITIALIZATION_BUSY_TIMEOUT_MS } from \"./sqlite-retry.js\";\nimport { preparePrivateSqliteLocation, securePrivatePath, securePrivateSqliteSidecar, 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 = `\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`;\nconst writeGateSchema = \"CREATE TABLE IF NOT EXISTS bridge_write_gates (gate_key TEXT PRIMARY KEY, lease_token TEXT, lease_expires_at TEXT)\";\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, false, \"defer\");\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(false);\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 async write<T>(work: () => T | Promise<T>): Promise<T> {\n if (this.databasePath === \":memory:\") return work();\n const token = randomUUID();\n const waitMs = process.platform === \"win32\" ? 60_000 : SQLITE_INITIALIZATION_BUSY_TIMEOUT_MS;\n const deadline = Date.now() + waitMs;\n let pause = 2;\n while (true) {\n const now = new Date();\n const claimed = await retrySqliteBusy(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.db.prepare(\"INSERT INTO bridge_write_gates (gate_key,lease_token,lease_expires_at) VALUES ('local',NULL,NULL) ON CONFLICT(gate_key) DO NOTHING\").run();\n const result = this.db.prepare(\"UPDATE bridge_write_gates SET lease_token=?,lease_expires_at=? WHERE gate_key='local' AND (lease_token IS NULL OR lease_expires_at<=?)\")\n .run(token, new Date(now.getTime() + 30_000).toISOString(), now.toISOString());\n this.db.exec(\"COMMIT\");\n return result.changes === 1;\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }, Math.max(1, deadline - Date.now()));\n if (claimed) break;\n if (Date.now() >= deadline) throw new Error(\"local write coordinator remained busy\");\n await new Promise((resolve) => setTimeout(resolve, pause));\n pause = Math.min(Math.ceil(pause * 1.7), 25);\n }\n let completed = false;\n let result: T;\n try {\n result = await work();\n completed = true;\n }\n finally {\n try {\n await retrySqliteBusy(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.db.prepare(\"UPDATE bridge_write_gates SET lease_token=NULL,lease_expires_at=NULL WHERE gate_key='local' AND lease_token=?\").run(token);\n this.db.exec(\"COMMIT\");\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }, waitMs);\n } catch (error) {\n if (!completed) throw error;\n }\n }\n return result!;\n }\n\n private async bootstrapWriteGate(timeoutMs: number): Promise<void> {\n await retrySqliteBusy(() => this.db.exec(\"PRAGMA journal_mode = WAL\"), timeoutMs);\n const exists = () => Boolean(this.db.prepare(\"SELECT 1 FROM sqlite_master WHERE type='table' AND name='bridge_write_gates'\").get());\n if (exists()) return;\n await retrySqliteBusy(() => {\n if (exists()) return;\n this.db.exec(\"BEGIN IMMEDIATE\");\n try { if (!exists()) this.db.exec(writeGateSchema); this.db.exec(\"COMMIT\"); }\n catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }, timeoutMs);\n }\n private restrictFiles(includeSidecars = true): void {\n if (this.databasePath === \":memory:\") return;\n const paths = includeSidecars\n ? [this.databasePath, `${this.databasePath}-wal`, `${this.databasePath}-shm`]\n : [this.databasePath];\n for (const path of paths) {\n if (!existsSync(path)) continue;\n if (path === this.databasePath && this.preexistingFiles.has(path)) verifyPrivatePathAccess(path, \"file\");\n else if (path === this.databasePath) securePrivatePath(path, \"file\");\n else securePrivateSqliteSidecar(path);\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 const initializationTimeoutMs = Math.max(this.busyTimeoutMs, SQLITE_INITIALIZATION_BUSY_TIMEOUT_MS);\n await this.bootstrapWriteGate(initializationTimeoutMs);\n this.db.exec(\"PRAGMA synchronous = FULL; PRAGMA foreign_keys = ON\");\n await this.write(async () => {\n await retrySqliteBusy(() => this.db.exec(\"BEGIN IMMEDIATE\"), initializationTimeoutMs);\n try {\n this.db.exec(schema);\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 }\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 return this.write(() => { 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(); return this.write(() => { 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 return this.write(() => { 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 (? IS NULL OR message_id=?) 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,options.messageId ?? null,options.messageId ?? null,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 (? IS NULL OR message_id=?) 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,options.messageId ?? null,options.messageId ?? null,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 (? IS NULL OR message_id=?) 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,options.messageId ?? null,options.messageId ?? null,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 (? IS NULL OR delivery.message_id=?) 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,options.messageId ?? null,options.messageId ?? null,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(); return this.write(() => { 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 return this.write(() => { 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 return this.write(() => { 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 await this.write(() => 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(); return this.write(() => { 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(); return this.write(() => { 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 const SQLITE_INITIALIZATION_BUSY_TIMEOUT_MS = 15_000;\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","result"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sqlite-edge-store.ts","../src/syncing-bridge-store.ts"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { existsSync, lstatSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport type { DatabaseSync as Database, SQLInputValue } from \"node:sqlite\";\nimport {\n cursorScope,\n decodeCursor,\n encodeCursor,\n type BridgeMessage,\n type BridgePrincipal,\n type JsonValue,\n} from \"./bridge-domain.js\";\nimport type { MessagePage, MessageQuery } from \"./bridge-store.js\";\nimport { retrySqliteBusy, SQLITE_INITIALIZATION_BUSY_TIMEOUT_MS } from \"./sqlite-retry.js\";\nimport { preparePrivateSqliteLocation, securePrivatePath, securePrivateSqliteSidecar, verifyPrivatePathAccess } from \"./private-path.js\";\nimport { assertEdgeUpgradeCandidate, installEdgeMarkers } from \"./sqlite-database-contract.js\";\n\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}\nfunction openReadOnlyDatabase(path: string): Database {\n const { DatabaseSync } = require(\"node:sqlite\") as typeof import(\"node:sqlite\");\n // immutable=1 prevents SQLite from creating a WAL shared-memory sidecar while\n // evaluating a dry-run. A present WAL is rejected below because immutable reads\n // cannot safely incorporate its uncheckpointed state.\n return new DatabaseSync(`${pathToFileURL(path).toString()}?immutable=1`, { readOnly: true });\n}\nconst MAX_SEQUENCE = 9_223_372_036_854_775_807n;\n\nconst schema = `\nCREATE TABLE IF NOT EXISTS edge_scopes (\n scope_key TEXT PRIMARY KEY,\n endpoint_hash TEXT NOT NULL,\n workspace TEXT NOT NULL,\n agent TEXT NOT NULL,\n pull_cursor TEXT,\n last_sync_at TEXT,\n last_error TEXT,\n last_outbound_sync_at TEXT,\n last_inbound_sync_at TEXT,\n last_attempt_at TEXT,\n cache_contract INTEGER NOT NULL DEFAULT 1\n);\nCREATE TABLE IF NOT EXISTS edge_migration_gates (\n scope_key TEXT PRIMARY KEY REFERENCES edge_scopes(scope_key),\n state TEXT NOT NULL CHECK(state IN ('active', 'draining', 'retired')),\n operation_id TEXT,\n lease_token TEXT,\n lease_expires_at TEXT,\n updated_at TEXT NOT NULL,\n CHECK(\n (state='active' AND operation_id IS NULL AND lease_token IS NULL AND lease_expires_at IS NULL)\n OR (state='draining' AND operation_id IS NOT NULL AND lease_token IS NOT NULL AND lease_expires_at IS NOT NULL)\n OR (state='retired' AND operation_id IS NOT NULL AND lease_token IS NULL AND lease_expires_at IS NULL)\n )\n);\nCREATE INDEX IF NOT EXISTS edge_migration_gates_state\n ON edge_migration_gates(state, lease_expires_at);\nCREATE TABLE IF NOT EXISTS edge_outbox (\n position INTEGER PRIMARY KEY AUTOINCREMENT,\n scope_key TEXT NOT NULL REFERENCES edge_scopes(scope_key),\n message_id TEXT NOT NULL,\n idempotency_key TEXT NOT NULL,\n payload_hash TEXT NOT NULL,\n draft_json TEXT NOT NULL,\n state TEXT NOT NULL CHECK(state IN ('pending', 'blocked')),\n attempts INTEGER NOT NULL DEFAULT 0,\n available_at TEXT NOT NULL,\n lease_token TEXT,\n lease_expires_at TEXT,\n last_error TEXT,\n blocked_at TEXT,\n created_at TEXT NOT NULL,\n UNIQUE(scope_key, message_id),\n UNIQUE(scope_key, idempotency_key)\n);\nCREATE INDEX IF NOT EXISTS edge_outbox_due\n ON edge_outbox(scope_key, state, available_at, position);\nCREATE TRIGGER IF NOT EXISTS edge_outbox_migration_gate_insert\nBEFORE INSERT ON edge_outbox\nWHEN NOT EXISTS (\n SELECT 1 FROM edge_migration_gates\n WHERE scope_key=NEW.scope_key AND state='active'\n)\nBEGIN\n SELECT RAISE(ABORT, 'edge migration gate rejects outbox publication');\nEND;\nCREATE TABLE IF NOT EXISTS edge_inbox (\n scope_key TEXT NOT NULL REFERENCES edge_scopes(scope_key),\n message_id TEXT NOT NULL,\n remote_sequence TEXT NOT NULL,\n sequence_key TEXT NOT NULL,\n workspace TEXT NOT NULL,\n project TEXT,\n source TEXT NOT NULL,\n type TEXT NOT NULL,\n thread_id TEXT,\n created_at TEXT NOT NULL,\n expires_at TEXT,\n message_json TEXT NOT NULL,\n PRIMARY KEY(scope_key, message_id),\n UNIQUE(scope_key, sequence_key)\n);\nCREATE INDEX IF NOT EXISTS edge_inbox_cursor\n ON edge_inbox(scope_key, sequence_key);\nCREATE INDEX IF NOT EXISTS edge_inbox_source\n ON edge_inbox(scope_key, source, sequence_key);\nCREATE INDEX IF NOT EXISTS edge_inbox_thread\n ON edge_inbox(scope_key, thread_id, sequence_key);\nCREATE INDEX IF NOT EXISTS edge_inbox_created\n ON edge_inbox(scope_key, created_at, sequence_key);\n`;\nconst writeGateSchema = \"CREATE TABLE IF NOT EXISTS edge_write_gates (gate_key TEXT PRIMARY KEY, lease_token TEXT, lease_expires_at TEXT)\";\n\ntype Row = Record<string, unknown>;\nexport type PendingMessage = Omit<BridgeMessage, \"sequence\" | \"createdAt\">;\n\nexport interface EdgeScope {\n endpoint: string;\n principal: BridgePrincipal;\n}\n\n/** A side-effect-free inspection used by migration dry-runs and preflight gates. */\nexport interface EdgeReadOnlyInspection {\n exists: boolean;\n gate: EdgeMigrationGate;\n pending: number;\n due: number;\n scheduled: number;\n leased: number;\n blocked: number;\n cached: number;\n}\n\n/**\n * Inspect an edge without creating a database, a schema object, or a WAL sidecar.\n * An absent path has the same empty active state that initialization would create.\n */\nexport function inspectEdgeScopeReadOnly(path: string, scope: EdgeScope, now = new Date()): EdgeReadOnlyInspection {\n if (!existsSync(path)) {\n return { exists: false, gate: { scopeKey: edgeScopeKey(scope), state: \"active\", operationId: undefined, leaseExpiresAt: undefined, updatedAt: new Date(0).toISOString() }, pending: 0, due: 0, scheduled: 0, leased: 0, blocked: 0, cached: 0 };\n }\n verifyPrivatePathAccess(path, \"file\");\n const details = lstatSync(path);\n if (!details.isFile() || details.isSymbolicLink()) throw new EdgeConflictError(\"edge database is not a private regular file\");\n if (existsSync(`${path}-wal`) || existsSync(`${path}-shm`)) {\n throw new EdgeConflictError(\"read-only migration inspection refuses an edge with live WAL state\");\n }\n const db = openReadOnlyDatabase(path);\n try {\n const tables = db.prepare(\"SELECT name FROM sqlite_master WHERE type='table' AND name IN ('edge_scopes','edge_migration_gates','edge_outbox','edge_inbox','edge_write_gates') ORDER BY name\")\n .all() as Row[];\n if (tables.length === 0) {\n const userTables = db.prepare(\"SELECT count(*) AS count FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'\").get() as Row;\n if (Number(userTables.count) !== 0) throw new EdgeConflictError(\"edge database is not an Agent Bridge edge store\");\n return { exists: true, gate: { scopeKey: edgeScopeKey(scope), state: \"active\", operationId: undefined, leaseExpiresAt: undefined, updatedAt: new Date(0).toISOString() }, pending: 0, due: 0, scheduled: 0, leased: 0, blocked: 0, cached: 0 };\n }\n const names = new Set(tables.map((table) => String(table.name)));\n for (const name of [\"edge_scopes\", \"edge_migration_gates\", \"edge_outbox\", \"edge_inbox\"]) {\n if (!names.has(name)) throw new EdgeConflictError(\"edge database schema is incomplete\");\n }\n const key = edgeScopeKey(scope);\n const scopeRow = db.prepare(\"SELECT 1 AS present FROM edge_scopes WHERE scope_key=?\").get(key) as Row | undefined;\n if (!scopeRow) {\n return { exists: true, gate: { scopeKey: key, state: \"active\", operationId: undefined, leaseExpiresAt: undefined, updatedAt: new Date(0).toISOString() }, pending: 0, due: 0, scheduled: 0, leased: 0, blocked: 0, cached: 0 };\n }\n const gateRow = db.prepare(\"SELECT state,operation_id,lease_expires_at,updated_at FROM edge_migration_gates WHERE scope_key=?\").get(key) as Row | undefined;\n if (!gateRow || ![\"active\", \"draining\", \"retired\"].includes(String(gateRow.state))) throw new EdgeConflictError(\"edge migration gate is missing or invalid\");\n const nowText = now.toISOString();\n const counts = db.prepare(`SELECT\n sum(CASE WHEN state='pending' THEN 1 ELSE 0 END) AS pending,\n sum(CASE WHEN state='pending' AND available_at<=? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN 1 ELSE 0 END) AS due,\n sum(CASE WHEN state='pending' AND available_at>? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN 1 ELSE 0 END) AS scheduled,\n sum(CASE WHEN state='pending' AND lease_expires_at>? THEN 1 ELSE 0 END) AS leased,\n sum(CASE WHEN state='blocked' THEN 1 ELSE 0 END) AS blocked\n FROM edge_outbox WHERE scope_key=?`).get(nowText, nowText, nowText, nowText, nowText, key) as Row;\n const cached = db.prepare(\"SELECT count(*) AS count FROM edge_inbox WHERE scope_key=?\").get(key) as Row;\n return {\n exists: true,\n gate: { scopeKey: key, state: gateRow.state as EdgeMigrationGateState, operationId: gateRow.operation_id ? String(gateRow.operation_id) : undefined, leaseExpiresAt: gateRow.lease_expires_at ? String(gateRow.lease_expires_at) : undefined, updatedAt: gateRow.updated_at ? String(gateRow.updated_at) : new Date(0).toISOString() },\n pending: Number(counts.pending ?? 0), due: Number(counts.due ?? 0), scheduled: Number(counts.scheduled ?? 0), leased: Number(counts.leased ?? 0), blocked: Number(counts.blocked ?? 0), cached: Number(cached.count ?? 0),\n };\n } finally { db.close(); }\n}\n\nexport interface EdgeOutboxRecord {\n position: number;\n draft: PendingMessage;\n payloadHash: string;\n attempts: number;\n leaseToken: string;\n createdAt: string;\n}\n\nexport interface EdgeEnqueueResult {\n draft: PendingMessage;\n created: boolean;\n}\n\nexport interface EdgeStats {\n pending: number;\n due: number;\n scheduled: number;\n leased: number;\n blocked: number;\n cached: number;\n pullCursor?: string;\n lastSyncAt?: string;\n lastError?: string;\n oldestDueAt?: string;\n queueLagMs: number;\n oldestBlockedAt?: string;\n blockedAgeMs: number | null;\n blockedMaxAttempts: number;\n blockedLastError?: string;\n nextRetryAt?: string;\n lastOutboundSyncAt?: string;\n lastInboundSyncAt?: string;\n lastAttemptAt?: string;\n migrationState: EdgeMigrationGateState;\n migrationOperationId?: string;\n migrationLeaseExpiresAt?: string;\n}\n\nexport type EdgeMigrationGateState = \"active\" | \"draining\" | \"retired\";\n\nexport interface EdgeMigrationGate {\n scopeKey: string;\n state: EdgeMigrationGateState;\n operationId?: string;\n leaseExpiresAt?: string;\n updatedAt: string;\n}\n\nexport interface EdgeDrainLease {\n scopeKey: string;\n operationId: string;\n leaseToken: string;\n leaseExpiresAt: string;\n}\n\nexport class EdgeConflictError extends Error {\n readonly code = \"edge_idempotency_conflict\";\n}\n\nexport class EdgeMigrationDrainingError extends Error {\n readonly code = \"client_migration_draining\";\n constructor(readonly gate: EdgeMigrationGate) {\n super(\"edge scope is draining for a client migration\");\n }\n}\n\nexport class EdgeMigrationRetiredError extends Error {\n readonly code = \"client_migration_retired\";\n constructor(readonly gate: EdgeMigrationGate) {\n super(\"edge scope was retired by a client migration\");\n }\n}\n\nexport class EdgeMigrationLeaseError extends Error {\n readonly code = \"client_migration_lease_lost\";\n constructor() {\n super(\"client migration worker no longer holds the edge drain lease\");\n }\n}\n\nfunction canonical(value: JsonValue | undefined): string {\n if (value === undefined) return \"null\";\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n return `{${Object.keys(value).filter((key) => value[key] !== undefined).sort()\n .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`).join(\",\")}}`;\n}\n\nfunction intent(message: PendingMessage | BridgeMessage): JsonValue {\n const deliveryPolicy = message.deliveryPolicy ?? (message.targets.length\n ? { mode: \"leased\", maxAttempts: 5, retryBaseDelayMs: 1_000, retryMaxDelayMs: 60_000, retryJitterRatio: 0.2 }\n : { mode: \"mailbox\" });\n return {\n workspace: message.workspace,\n project: message.project ?? null,\n source: message.source,\n type: message.type,\n content: message.content,\n contentType: message.contentType,\n data: message.data ?? null,\n targets: [...message.targets].sort(),\n threadId: message.threadId ?? null,\n replyToId: message.replyToId ?? null,\n correlationId: message.correlationId ?? null,\n causationId: message.causationId ?? null,\n priority: message.priority,\n expiresAt: message.expiresAt ?? null,\n atribReceiptId: message.atribReceiptId ?? null,\n informedBy: [...(message.informedBy ?? [])].sort(),\n metadata: message.metadata ?? null,\n deliveryPolicy: deliveryPolicy as unknown as JsonValue,\n };\n}\n\nexport function edgeMessageFingerprint(message: PendingMessage | BridgeMessage): string {\n return createHash(\"sha256\").update(canonical(intent(message))).digest(\"hex\");\n}\n\nexport function stableIdempotency(message: PendingMessage): PendingMessage {\n return message.idempotencyKey\n ? message\n : { ...message, idempotencyKey: `agent-bridge:id:${message.id}` };\n}\n\nexport function edgeScopeKey(scope: EdgeScope): string {\n return createHash(\"sha256\")\n .update(`${scope.endpoint.replace(/\\/$/, \"\")}\\0${scope.principal.workspace}\\0${scope.principal.agent}`)\n .digest(\"hex\");\n}\n\nfunction sequenceKey(sequence: string): string {\n if (!/^(0|[1-9][0-9]*)$/.test(sequence) || BigInt(sequence) > MAX_SEQUENCE) {\n throw new EdgeConflictError(\"remote sequence is invalid\");\n }\n return sequence.padStart(19, \"0\");\n}\n\nfunction parseDraft(value: unknown): PendingMessage {\n return JSON.parse(String(value)) as PendingMessage;\n}\n\nfunction parseMessage(value: unknown): BridgeMessage {\n return JSON.parse(String(value)) as BridgeMessage;\n}\n\nfunction safeOperationId(value: string): string {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n throw new Error(\"client migration operation ID is invalid\");\n }\n return value.toLowerCase();\n}\n\nexport class SQLiteEdgeStore {\n private readonly db: Database;\n private readonly databasePath: string;\n private readonly preexistingFiles: ReadonlySet<string>;\n private readonly key: string;\n private initialized = false;\n private initialization?: Promise<void>;\n\n constructor(\n private readonly path: string,\n private readonly scope: EdgeScope,\n private readonly busyTimeoutMs = 2_000,\n private readonly writeGateLeaseMs = 30_000,\n // Windows first-open ACL work is materially slower with many concurrent clients.\n private readonly writeGateWaitMs = process.platform === \"win32\" ? 60_000 : SQLITE_INITIALIZATION_BUSY_TIMEOUT_MS,\n ) {\n const selected = preparePrivateSqliteLocation(path, true, \"defer\");\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(false);\n if (before) {\n const after = lstatSync(selected);\n if (after.dev !== before.dev || after.ino !== before.ino) throw new Error(\"SQLite edge database path identity changed while opening\");\n }\n } catch (error) { this.db.close(); throw error; }\n this.key = edgeScopeKey(scope);\n }\n\n private async write<T>(work: () => T | Promise<T>): Promise<T> {\n if (this.databasePath === \":memory:\") return work();\n const token = randomUUID();\n const deadline = Date.now() + Math.max(1, Math.trunc(this.writeGateWaitMs));\n let pause = 2;\n while (true) {\n const now = new Date();\n const claimed = await retrySqliteBusy(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.db.prepare(\"INSERT INTO edge_write_gates (gate_key,lease_token,lease_expires_at) VALUES ('edge',NULL,NULL) ON CONFLICT(gate_key) DO NOTHING\").run();\n const update = this.db.prepare(`UPDATE edge_write_gates SET lease_token=?,lease_expires_at=?\n WHERE gate_key='edge' AND (lease_token IS NULL OR lease_expires_at<=?)`).run(\n token, new Date(now.getTime() + Math.max(1, Math.trunc(this.writeGateLeaseMs))).toISOString(), now.toISOString(),\n );\n this.db.exec(\"COMMIT\");\n return update.changes === 1;\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }, Math.max(1, deadline - Date.now()));\n if (claimed) break;\n if (Date.now() >= deadline) throw new EdgeConflictError(\"edge write coordinator remained busy\");\n await new Promise((resolve) => setTimeout(resolve, pause));\n pause = Math.min(Math.ceil(pause * 1.7), 25);\n }\n let completed = false;\n let result: T;\n try {\n result = await work();\n completed = true;\n }\n finally {\n try {\n await retrySqliteBusy(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.db.prepare(\"UPDATE edge_write_gates SET lease_token=NULL,lease_expires_at=NULL WHERE gate_key='edge' AND lease_token=?\").run(token);\n this.db.exec(\"COMMIT\");\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }, Math.max(1, Math.trunc(this.writeGateWaitMs)));\n } catch (error) {\n if (!completed) throw error;\n }\n }\n return result!;\n }\n\n private async bootstrapWriteGate(timeoutMs: number): Promise<void> {\n await retrySqliteBusy(() => this.db.exec(\"PRAGMA journal_mode = WAL\"), timeoutMs);\n const exists = () => Boolean(this.db.prepare(\"SELECT 1 FROM sqlite_master WHERE type='table' AND name='edge_write_gates'\").get());\n if (exists()) return;\n await retrySqliteBusy(() => {\n if (exists()) return;\n this.db.exec(\"BEGIN IMMEDIATE\");\n try { if (!exists()) this.db.exec(writeGateSchema); this.db.exec(\"COMMIT\"); }\n catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }, timeoutMs);\n }\n\n private restrictFiles(includeSidecars = true): void {\n if (this.databasePath === \":memory:\") return;\n const paths = includeSidecars\n ? [this.databasePath, `${this.databasePath}-wal`, `${this.databasePath}-shm`]\n : [this.databasePath];\n for (const path of paths) {\n if (!existsSync(path)) continue;\n if (path === this.databasePath && this.preexistingFiles.has(path)) verifyPrivatePathAccess(path, \"file\");\n else if (path === this.databasePath) securePrivatePath(path, \"file\");\n else securePrivateSqliteSidecar(path);\n }\n }\n\n get scopeKey(): string {\n return this.key;\n }\n\n private gateFromRow(row: Row): EdgeMigrationGate {\n const state = String(row.state);\n if (state !== \"active\" && state !== \"draining\" && state !== \"retired\") {\n throw new EdgeConflictError(\"edge migration gate state is invalid\");\n }\n const operationId = row.operation_id === null || row.operation_id === undefined\n ? undefined\n : safeOperationId(String(row.operation_id));\n const leaseExpiresAt = row.lease_expires_at === null || row.lease_expires_at === undefined\n ? undefined\n : String(row.lease_expires_at);\n const updatedAt = String(row.updated_at ?? \"\");\n if (!updatedAt || !Number.isFinite(Date.parse(updatedAt))) {\n throw new EdgeConflictError(\"edge migration gate timestamp is invalid\");\n }\n const leaseToken = row.lease_token === null || row.lease_token === undefined\n ? undefined\n : String(row.lease_token);\n if ((state === \"active\" && (operationId || leaseExpiresAt || leaseToken))\n || (state === \"draining\" && (!operationId || !leaseExpiresAt || !leaseToken))\n || (state === \"retired\" && (!operationId || leaseExpiresAt || leaseToken))) {\n throw new EdgeConflictError(\"edge migration gate state is invalid\");\n }\n return { scopeKey: this.key, state, operationId, leaseExpiresAt, updatedAt };\n }\n\n private gateInTransaction(): EdgeMigrationGate {\n const row = this.db.prepare(`SELECT state,operation_id,lease_token,lease_expires_at,updated_at\n FROM edge_migration_gates WHERE scope_key=?`).get(this.key) as Row | undefined;\n if (!row) throw new EdgeConflictError(\"edge migration gate is missing\");\n return this.gateFromRow(row);\n }\n\n private assertScopeActiveInTransaction(): void {\n const gate = this.gateInTransaction();\n if (gate.state === \"draining\") throw new EdgeMigrationDrainingError(gate);\n if (gate.state === \"retired\") throw new EdgeMigrationRetiredError(gate);\n }\n\n private assertDrainLeaseInTransaction(lease: EdgeDrainLease, now: Date): void {\n const gate = this.gateInTransaction();\n if (gate.state !== \"draining\" || gate.operationId !== lease.operationId\n || gate.leaseExpiresAt !== lease.leaseExpiresAt || Date.parse(gate.leaseExpiresAt) <= now.getTime()) {\n throw new EdgeMigrationLeaseError();\n }\n const row = this.db.prepare(\"SELECT lease_token FROM edge_migration_gates WHERE scope_key=?\")\n .get(this.key) as Row;\n if (row.lease_token !== lease.leaseToken) throw new EdgeMigrationLeaseError();\n }\n\n private assertClaimAuthorityInTransaction(now: Date, lease?: EdgeDrainLease): void {\n if (lease) this.assertDrainLeaseInTransaction(lease, now);\n else this.assertScopeActiveInTransaction();\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 assertEdgeUpgradeCandidate(this.db);\n const initializationTimeoutMs = Math.max(this.busyTimeoutMs, SQLITE_INITIALIZATION_BUSY_TIMEOUT_MS);\n await this.bootstrapWriteGate(initializationTimeoutMs);\n this.db.exec(\"PRAGMA synchronous = FULL; PRAGMA foreign_keys = ON\");\n await this.write(async () => {\n await retrySqliteBusy(() => this.db.exec(\"BEGIN IMMEDIATE\"), initializationTimeoutMs);\n try {\n this.db.exec(schema);\n const scopeColumns = this.db.prepare(\"PRAGMA table_info(edge_scopes)\").all() as Row[];\n if (!scopeColumns.some((column) => column.name === \"cache_contract\")) {\n this.db.exec(\"ALTER TABLE edge_scopes ADD COLUMN cache_contract INTEGER NOT NULL DEFAULT 0\");\n }\n for (const name of [\"last_outbound_sync_at\", \"last_inbound_sync_at\", \"last_attempt_at\"]) {\n if (!scopeColumns.some((column) => column.name === name)) {\n this.db.exec(`ALTER TABLE edge_scopes ADD COLUMN ${name} TEXT`);\n }\n }\n const columns = this.db.prepare(\"PRAGMA table_info(edge_inbox)\").all() as Row[];\n if (!columns.some((column) => column.name === \"project\")) {\n this.db.exec(\"ALTER TABLE edge_inbox ADD COLUMN project TEXT\");\n }\n this.db.exec(\"CREATE INDEX IF NOT EXISTS edge_inbox_project ON edge_inbox(scope_key, project, sequence_key)\");\n const outboxColumns = this.db.prepare(\"PRAGMA table_info(edge_outbox)\").all() as Row[];\n if (!outboxColumns.some((column) => column.name === \"blocked_at\")) {\n this.db.exec(\"ALTER TABLE edge_outbox ADD COLUMN blocked_at TEXT\");\n }\n installEdgeMarkers(this.db);\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n this.restrictFiles();\n const endpointHash = createHash(\"sha256\").update(this.scope.endpoint.replace(/\\/$/, \"\")).digest(\"hex\");\n this.db.prepare(`INSERT INTO edge_scopes (scope_key, endpoint_hash, workspace, agent)\n VALUES (?, ?, ?, ?) ON CONFLICT(scope_key) DO NOTHING`)\n .run(this.key, endpointHash, this.scope.principal.workspace, this.scope.principal.agent);\n this.db.prepare(`INSERT INTO edge_migration_gates\n (scope_key,state,operation_id,lease_token,lease_expires_at,updated_at)\n SELECT scope_key,'active',NULL,NULL,NULL,? FROM edge_scopes\n WHERE scope_key=? ON CONFLICT(scope_key) DO NOTHING`)\n .run(new Date().toISOString(), this.key);\n const contract = this.db.prepare(\"SELECT cache_contract FROM edge_scopes WHERE scope_key=?\").get(this.key) as Row;\n if (Number(contract.cache_contract) < 1) {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.db.prepare(\"UPDATE edge_scopes SET pull_cursor=NULL, cache_contract=1 WHERE scope_key=?\").run(this.key);\n this.db.exec(\"COMMIT\");\n } catch (error) { this.db.exec(\"ROLLBACK\"); throw error; }\n }\n });\n }\n\n private async ready(): Promise<void> {\n await this.initialize();\n }\n\n async migrationGate(): Promise<EdgeMigrationGate> {\n await this.ready();\n return this.gateInTransaction();\n }\n\n /** Refuse new normal-client writes before any remote attempt begins. */\n async assertScopeActive(): Promise<void> {\n await this.ready();\n await this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.assertScopeActiveInTransaction();\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n /** Refuse remote publication unless this worker still owns the durable drain lease. */\n async assertDrainLease(lease: EdgeDrainLease, now = new Date()): Promise<void> {\n await this.ready();\n if (lease.scopeKey !== this.key) throw new EdgeMigrationLeaseError();\n await this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.assertDrainLeaseInTransaction(lease, now);\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n private async claimDrainLease(\n operationId: string, now: Date, leaseMs: number, mode: \"begin\" | \"resume\",\n ): Promise<EdgeDrainLease> {\n await this.ready();\n const normalizedOperationId = safeOperationId(operationId);\n const duration = Math.max(1, Math.trunc(leaseMs));\n return this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n const gate = this.gateInTransaction();\n if (gate.state === \"retired\") throw new EdgeMigrationRetiredError(gate);\n if (mode === \"begin\" && gate.state !== \"active\") throw new EdgeMigrationDrainingError(gate);\n if (mode === \"resume\") {\n if (gate.state !== \"draining\" || gate.operationId !== normalizedOperationId\n || !gate.leaseExpiresAt || Date.parse(gate.leaseExpiresAt) > now.getTime()) {\n throw new EdgeMigrationDrainingError(gate);\n }\n }\n const leaseToken = randomUUID();\n const leaseExpiresAt = new Date(now.getTime() + duration).toISOString();\n const updated = this.db.prepare(`UPDATE edge_migration_gates\n SET state='draining',operation_id=?,lease_token=?,lease_expires_at=?,updated_at=?\n WHERE scope_key=?`).run(\n normalizedOperationId, leaseToken, leaseExpiresAt, now.toISOString(), this.key,\n );\n if (updated.changes !== 1) throw new EdgeConflictError(\"edge migration gate could not be acquired\");\n this.db.exec(\"COMMIT\");\n return { scopeKey: this.key, operationId: normalizedOperationId, leaseToken, leaseExpiresAt };\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n /** Start a new durable drain only from an active edge scope. */\n async beginDrain(operationId: string, now = new Date(), leaseMs = 30_000): Promise<EdgeDrainLease> {\n return this.claimDrainLease(operationId, now, leaseMs, \"begin\");\n }\n\n /** Resume the same persisted drain only after the prior worker lease expires. */\n async resumeDrain(operationId: string, now = new Date(), leaseMs = 30_000): Promise<EdgeDrainLease> {\n return this.claimDrainLease(operationId, now, leaseMs, \"resume\");\n }\n\n /** Backward-compatible dispatcher for callers that have already inspected the gate. */\n async acquireDrainLease(operationId: string, now = new Date(), leaseMs = 30_000): Promise<EdgeDrainLease> {\n const gate = await this.migrationGate();\n if (gate.state === \"active\") return this.beginDrain(operationId, now, leaseMs);\n return this.resumeDrain(operationId, now, leaseMs);\n }\n\n /** Verify the held lease and require an exact zero-work outbox before a cutover continues. */\n async assertDrainComplete(lease: EdgeDrainLease, now = new Date()): Promise<void> {\n await this.ready();\n if (lease.scopeKey !== this.key) throw new EdgeMigrationLeaseError();\n await this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.assertDrainLeaseInTransaction(lease, now);\n const counts = this.db.prepare(`SELECT\n sum(CASE WHEN state='pending' THEN 1 ELSE 0 END) AS pending,\n sum(CASE WHEN state='pending' AND available_at<=? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN 1 ELSE 0 END) AS due,\n sum(CASE WHEN state='pending' AND available_at>? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN 1 ELSE 0 END) AS scheduled,\n sum(CASE WHEN state='pending' AND lease_expires_at>? THEN 1 ELSE 0 END) AS leased,\n sum(CASE WHEN state='blocked' THEN 1 ELSE 0 END) AS blocked\n FROM edge_outbox WHERE scope_key=?`).get(\n now.toISOString(), now.toISOString(), now.toISOString(), now.toISOString(), now.toISOString(), this.key,\n ) as Row;\n if (Number(counts.pending ?? 0) !== 0 || Number(counts.due ?? 0) !== 0\n || Number(counts.scheduled ?? 0) !== 0 || Number(counts.leased ?? 0) !== 0\n || Number(counts.blocked ?? 0) !== 0) {\n throw new EdgeConflictError(\"edge scope cannot complete a drain with retained outbox work\");\n }\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n async renewDrainLease(lease: EdgeDrainLease, now = new Date(), leaseMs = 30_000): Promise<EdgeDrainLease> {\n await this.ready();\n if (lease.scopeKey !== this.key) throw new EdgeMigrationLeaseError();\n const duration = Math.max(1, Math.trunc(leaseMs));\n return this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.assertDrainLeaseInTransaction(lease, now);\n const leaseExpiresAt = new Date(now.getTime() + duration).toISOString();\n const updated = this.db.prepare(`UPDATE edge_migration_gates\n SET lease_expires_at=?,updated_at=? WHERE scope_key=? AND state='draining'\n AND operation_id=? AND lease_token=? AND lease_expires_at=?`).run(\n leaseExpiresAt, now.toISOString(), this.key, lease.operationId, lease.leaseToken, lease.leaseExpiresAt,\n );\n if (updated.changes !== 1) throw new EdgeMigrationLeaseError();\n this.db.exec(\"COMMIT\");\n return { ...lease, leaseExpiresAt };\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n async retireScope(lease: EdgeDrainLease, now = new Date()): Promise<void> {\n await this.ready();\n if (lease.scopeKey !== this.key) throw new EdgeMigrationLeaseError();\n await this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.assertDrainLeaseInTransaction(lease, now);\n const stats = this.db.prepare(`SELECT count(*) AS count FROM edge_outbox\n WHERE scope_key=?`).get(this.key) as Row;\n if (Number(stats.count) !== 0) throw new EdgeConflictError(\"edge scope cannot retire with retained outbox work\");\n const updated = this.db.prepare(`UPDATE edge_migration_gates\n SET state='retired',lease_token=NULL,lease_expires_at=NULL,updated_at=?\n WHERE scope_key=? AND state='draining' AND operation_id=? AND lease_token=?`).run(\n now.toISOString(), this.key, lease.operationId, lease.leaseToken,\n );\n if (updated.changes !== 1) throw new EdgeMigrationLeaseError();\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n async enqueue(input: PendingMessage, now = new Date()): Promise<EdgeEnqueueResult> {\n await this.ready();\n const draft = stableIdempotency(input);\n const payloadHash = edgeMessageFingerprint(draft);\n const serialized = canonical(draft as unknown as JsonValue);\n const nowText = now.toISOString();\n return this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.assertScopeActiveInTransaction();\n const existing = this.db.prepare(`SELECT * FROM edge_outbox\n WHERE scope_key=? AND (message_id=? OR idempotency_key=?) ORDER BY position LIMIT 1`)\n .get(this.key, draft.id, draft.idempotencyKey!) as Row | undefined;\n if (existing) {\n if (String(existing.payload_hash) !== payloadHash) {\n throw new EdgeConflictError(\"message ID or idempotency key is already bound to different content\");\n }\n this.db.exec(\"COMMIT\");\n return { draft: parseDraft(existing.draft_json), created: false };\n }\n this.db.prepare(`INSERT INTO edge_outbox\n (scope_key, message_id, idempotency_key, payload_hash, draft_json, state, available_at, created_at)\n VALUES (?, ?, ?, ?, ?, 'pending', ?, ?)`)\n .run(this.key, draft.id, draft.idempotencyKey!, payloadHash, serialized, nowText, nowText);\n this.db.exec(\"COMMIT\");\n return { draft, created: true };\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n async claimNext(now = new Date(), leaseMs = 30_000, migrationLease?: EdgeDrainLease): Promise<EdgeOutboxRecord | undefined> {\n await this.ready();\n const nowText = now.toISOString();\n return this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.assertClaimAuthorityInTransaction(now, migrationLease);\n const head = this.db.prepare(`SELECT * FROM edge_outbox\n WHERE scope_key=? AND state='pending' AND available_at<=?\n AND (lease_expires_at IS NULL OR lease_expires_at<=?)\n ORDER BY position LIMIT 1`).get(this.key, nowText, nowText) as Row | undefined;\n if (!head) {\n this.db.exec(\"COMMIT\");\n return undefined;\n }\n const leaseToken = randomUUID();\n const leaseExpiresAt = new Date(now.getTime() + leaseMs).toISOString();\n const updated = this.db.prepare(`UPDATE edge_outbox\n SET lease_token=?, lease_expires_at=? WHERE scope_key=? AND position=?\n AND (lease_expires_at IS NULL OR lease_expires_at<=?)`)\n .run(leaseToken, leaseExpiresAt, this.key, Number(head.position), nowText);\n if (!updated.changes) {\n this.db.exec(\"COMMIT\");\n return undefined;\n }\n this.db.exec(\"COMMIT\");\n return {\n position: Number(head.position),\n draft: parseDraft(head.draft_json),\n payloadHash: String(head.payload_hash),\n attempts: Number(head.attempts),\n leaseToken,\n createdAt: String(head.created_at),\n };\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n async retry(record: EdgeOutboxRecord, error: string, availableAt: Date): Promise<void> {\n await this.ready();\n await this.write(() => this.db.prepare(`UPDATE edge_outbox SET attempts=attempts+1, available_at=?,\n lease_token=NULL, lease_expires_at=NULL, last_error=?\n WHERE scope_key=? AND position=? AND lease_token=?`)\n .run(availableAt.toISOString(), error.slice(0, 256), this.key, record.position, record.leaseToken));\n await this.noteError(error);\n }\n\n async block(record: EdgeOutboxRecord, error: string, now = new Date()): Promise<void> {\n await this.ready();\n await this.write(() => this.db.prepare(`UPDATE edge_outbox SET state='blocked', attempts=attempts+1,\n lease_token=NULL, lease_expires_at=NULL, last_error=?, blocked_at=?\n WHERE scope_key=? AND position=? AND lease_token=?`)\n .run(error.slice(0, 256), now.toISOString(), this.key, record.position, record.leaseToken));\n await this.noteError(error);\n }\n\n async commit(\n record: EdgeOutboxRecord,\n message: BridgeMessage,\n now = new Date(),\n ): Promise<void> {\n await this.ready();\n await this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n this.cacheOne(message);\n const deleted = this.db.prepare(`DELETE FROM edge_outbox\n WHERE scope_key=? AND position=? AND lease_token=?`)\n .run(this.key, record.position, record.leaseToken);\n if (deleted.changes !== 1) throw new EdgeConflictError(\"outbox lease was lost before commit\");\n this.db.prepare(`UPDATE edge_scopes SET last_sync_at=?, last_error=NULL WHERE scope_key=?`)\n .run(now.toISOString(), this.key);\n this.db.prepare(\"UPDATE edge_scopes SET last_outbound_sync_at=? WHERE scope_key=?\")\n .run(now.toISOString(), this.key);\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n private cacheOne(message: BridgeMessage): void {\n const serialized = canonical(message as unknown as JsonValue);\n const key = sequenceKey(message.sequence);\n const byId = this.db.prepare(`SELECT remote_sequence, message_json FROM edge_inbox\n WHERE scope_key=? AND message_id=?`).get(this.key, message.id) as Row | undefined;\n const bySequence = this.db.prepare(`SELECT message_id, message_json FROM edge_inbox\n WHERE scope_key=? AND sequence_key=?`).get(this.key, key) as Row | undefined;\n if (byId || bySequence) {\n if (\n !byId ||\n String(byId.remote_sequence) !== message.sequence ||\n String(byId.message_json) !== serialized ||\n (bySequence && String(bySequence.message_id) !== message.id)\n ) {\n throw new EdgeConflictError(\"cached message conflicts with immutable remote history\");\n }\n return;\n }\n this.db.prepare(`INSERT INTO edge_inbox\n (scope_key, message_id, remote_sequence, sequence_key, workspace, project, source, type,\n thread_id, created_at, expires_at, message_json)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)\n .run(this.key, message.id, message.sequence, key, message.workspace, message.project ?? null, message.source,\n message.type, message.threadId ?? null, message.createdAt, message.expiresAt ?? null, serialized);\n }\n\n async cachePage(messages: BridgeMessage[], cursor: string | undefined, now = new Date()): Promise<void> {\n await this.ready();\n const scope = cursorScope(this.scope.principal, { mailbox: \"all\", includeExpired: true });\n await this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n for (const message of messages) this.cacheOne(message);\n const current = this.db.prepare(\"SELECT pull_cursor FROM edge_scopes WHERE scope_key=?\")\n .get(this.key) as Row;\n const currentCursor = current.pull_cursor ? String(current.pull_cursor) : undefined;\n const nextCursor = !cursor\n ? currentCursor\n : !currentCursor || sequenceKey(decodeCursor(cursor, scope)!) >= sequenceKey(decodeCursor(currentCursor, scope)!)\n ? cursor\n : currentCursor;\n this.db.prepare(`UPDATE edge_scopes SET pull_cursor=?, last_sync_at=?, last_error=NULL\n WHERE scope_key=?`).run(nextCursor ?? null, now.toISOString(), this.key);\n this.db.prepare(\"UPDATE edge_scopes SET last_inbound_sync_at=? WHERE scope_key=?\")\n .run(now.toISOString(), this.key);\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n async cacheLatest(messages: BridgeMessage[], now = new Date()): Promise<void> {\n await this.ready();\n await this.write(() => {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n for (const message of messages) this.cacheOne(message);\n this.db.prepare(`UPDATE edge_scopes SET last_sync_at=?, last_error=NULL WHERE scope_key=?`)\n .run(now.toISOString(), this.key);\n this.db.prepare(\"UPDATE edge_scopes SET last_inbound_sync_at=? WHERE scope_key=?\")\n .run(now.toISOString(), this.key);\n this.db.exec(\"COMMIT\");\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n });\n }\n\n async list(query: MessageQuery = {}): Promise<MessagePage> {\n await this.ready();\n const scope = cursorScope(this.scope.principal, query);\n const inputSequence = query.latest ? undefined : decodeCursor(query.cursor, scope) ?? \"0\";\n const cachedHighWater = query.latest ? undefined : this.db.prepare(`SELECT remote_sequence\n FROM edge_inbox WHERE scope_key=? ORDER BY sequence_key DESC LIMIT 1`)\n .get(this.key) as Row | undefined;\n const syncState = query.latest ? undefined : this.db.prepare(\n \"SELECT pull_cursor FROM edge_scopes WHERE scope_key=?\",\n ).get(this.key) as Row | undefined;\n const syncScope = cursorScope(this.scope.principal, {\n mailbox: \"all\",\n includeExpired: true,\n });\n const syncSequence = syncState?.pull_cursor\n ? decodeCursor(String(syncState.pull_cursor), syncScope) ?? \"0\"\n : \"0\";\n const highWaterSequence = query.latest ? undefined : [\n inputSequence ?? \"0\",\n syncSequence,\n cachedHighWater?.remote_sequence ? String(cachedHighWater.remote_sequence) : \"0\",\n ].reduce((highest, candidate) => (\n sequenceKey(candidate) > sequenceKey(highest) ? candidate : highest\n ), \"0\");\n // Receipts are remote authority and are deliberately not mirrored. During\n // an outage callers may still inspect the cached candidate set, but the\n // wrapping store must label acknowledgement state as unknown.\n const clauses = [\"scope_key=?\"];\n const args: SQLInputValue[] = [this.key];\n if (!query.latest) {\n clauses.push(\"sequence_key>?\");\n args.push(sequenceKey(inputSequence ?? \"0\"));\n }\n if (!query.includeExpired) {\n clauses.push(\"(expires_at IS NULL OR expires_at>?)\");\n args.push(new Date().toISOString());\n }\n if (query.types?.length) {\n clauses.push(`type IN (${query.types.map(() => \"?\").join(\",\")})`);\n args.push(...query.types);\n }\n if (query.source) {\n clauses.push(\"source=?\");\n args.push(query.source);\n }\n const mailbox = query.mailbox ?? \"inbox\";\n if (mailbox === \"sent\") { clauses.push(\"source=?\"); args.push(this.scope.principal.agent); }\n else if (mailbox !== \"all\") {\n clauses.push(\"(json_array_length(json_extract(message_json, '$.targets'))=0 OR EXISTS (SELECT 1 FROM json_each(json_extract(message_json, '$.targets')) WHERE value=?))\");\n args.push(this.scope.principal.agent);\n } else {\n clauses.push(\"(source=? OR json_array_length(json_extract(message_json, '$.targets'))=0 OR EXISTS (SELECT 1 FROM json_each(json_extract(message_json, '$.targets')) WHERE value=?))\");\n args.push(this.scope.principal.agent, this.scope.principal.agent);\n }\n if (query.project) {\n clauses.push(\"project=?\");\n args.push(query.project);\n }\n if (query.since) {\n clauses.push(\"created_at>=?\");\n args.push(query.since);\n }\n if (query.threadId) {\n clauses.push(\"thread_id=?\");\n args.push(query.threadId);\n }\n const limit = Math.min(Math.max(Math.trunc(query.limit ?? 50), 1), 200);\n const rows = this.db.prepare(`SELECT message_json FROM edge_inbox\n WHERE ${clauses.join(\" AND \")} ORDER BY sequence_key ${query.latest ? \"DESC\" : \"ASC\"} LIMIT ?`)\n .all(...args, limit) as Row[];\n const messages = rows.map((row) => parseMessage(row.message_json));\n const cursorMessage = query.latest ? messages[0] : messages[messages.length - 1];\n if (query.latest || messages.length === limit) {\n return { messages, cursor: cursorMessage ? encodeCursor(cursorMessage.sequence, scope) : query.cursor };\n }\n return {\n messages,\n cursor: highWaterSequence && highWaterSequence !== \"0\"\n ? encodeCursor(highWaterSequence, scope)\n : query.cursor,\n };\n }\n\n async pullCursor(): Promise<string | undefined> {\n await this.ready();\n const row = this.db.prepare(\"SELECT pull_cursor FROM edge_scopes WHERE scope_key=?\")\n .get(this.key) as Row;\n return row.pull_cursor ? String(row.pull_cursor) : undefined;\n }\n\n async noteError(error: string): Promise<void> {\n await this.ready();\n await this.write(() => this.db.prepare(\"UPDATE edge_scopes SET last_error=? WHERE scope_key=?\")\n .run(error.slice(0, 256), this.key));\n }\n\n async noteAttempt(now = new Date()): Promise<void> {\n await this.ready();\n await this.write(() => this.db.prepare(\"UPDATE edge_scopes SET last_attempt_at=? WHERE scope_key=?\")\n .run(now.toISOString(), this.key));\n }\n\n async stats(now = new Date()): Promise<EdgeStats> {\n await this.ready();\n const nowText = now.toISOString();\n const counts = this.db.prepare(`SELECT\n sum(CASE WHEN state='pending' THEN 1 ELSE 0 END) AS pending,\n sum(CASE WHEN state='pending' AND available_at<=? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN 1 ELSE 0 END) AS due,\n sum(CASE WHEN state='pending' AND available_at>? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN 1 ELSE 0 END) AS scheduled,\n sum(CASE WHEN state='pending' AND lease_expires_at>? THEN 1 ELSE 0 END) AS leased,\n sum(CASE WHEN state='blocked' THEN 1 ELSE 0 END) AS blocked,\n min(CASE WHEN state='pending' AND available_at<=? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN available_at END) AS oldest_due,\n min(CASE WHEN state='pending' AND available_at>? AND (lease_expires_at IS NULL OR lease_expires_at<=?) THEN available_at END) AS next_retry,\n min(CASE WHEN state='blocked' THEN blocked_at END) AS oldest_blocked,\n sum(CASE WHEN state='blocked' AND blocked_at IS NULL THEN 1 ELSE 0 END) AS blocked_age_unknown,\n max(CASE WHEN state='blocked' THEN attempts ELSE 0 END) AS blocked_max_attempts\n FROM edge_outbox WHERE scope_key=?`).get(nowText, nowText, nowText, nowText, nowText, nowText, nowText, nowText, nowText, this.key) as Row;\n const blocked = this.db.prepare(\"SELECT last_error FROM edge_outbox WHERE scope_key=? AND state='blocked' ORDER BY coalesce(blocked_at,created_at) LIMIT 1\").get(this.key) as Row | undefined;\n const cache = this.db.prepare(\"SELECT count(*) AS count FROM edge_inbox WHERE scope_key=?\")\n .get(this.key) as Row;\n const state = this.db.prepare(`SELECT pull_cursor, last_sync_at, last_error,\n last_outbound_sync_at,last_inbound_sync_at,last_attempt_at\n FROM edge_scopes WHERE scope_key=?`).get(this.key) as Row;\n const migrationGate = this.gateInTransaction();\n const oldestDueAt = counts.oldest_due ? String(counts.oldest_due) : undefined;\n const oldestBlockedAt = Number(counts.blocked_age_unknown ?? 0) > 0\n ? undefined\n : counts.oldest_blocked ? String(counts.oldest_blocked) : undefined;\n return {\n pending: Number(counts.pending ?? 0),\n due: Number(counts.due ?? 0),\n scheduled: Number(counts.scheduled ?? 0),\n leased: Number(counts.leased ?? 0),\n blocked: Number(counts.blocked ?? 0),\n cached: Number(cache.count ?? 0),\n pullCursor: state.pull_cursor ? String(state.pull_cursor) : undefined,\n lastSyncAt: state.last_sync_at ? String(state.last_sync_at) : undefined,\n lastError: state.last_error ? String(state.last_error) : undefined,\n oldestDueAt,\n queueLagMs: oldestDueAt ? Math.max(0, now.getTime() - Date.parse(oldestDueAt)) : 0,\n oldestBlockedAt,\n blockedAgeMs: oldestBlockedAt ? Math.max(0, now.getTime() - Date.parse(oldestBlockedAt)) : null,\n blockedMaxAttempts: Number(counts.blocked_max_attempts ?? 0),\n blockedLastError: blocked?.last_error ? String(blocked.last_error) : undefined,\n nextRetryAt: counts.next_retry ? String(counts.next_retry) : undefined,\n lastOutboundSyncAt: state.last_outbound_sync_at ? String(state.last_outbound_sync_at) : undefined,\n lastInboundSyncAt: state.last_inbound_sync_at ? String(state.last_inbound_sync_at) : undefined,\n lastAttemptAt: state.last_attempt_at ? String(state.last_attempt_at) : undefined,\n migrationState: migrationGate.state,\n migrationOperationId: migrationGate.operationId,\n migrationLeaseExpiresAt: migrationGate.leaseExpiresAt,\n };\n }\n\n async close(): Promise<void> {\n this.db.close();\n }\n}\n","import type {\n BridgeDelivery,\n BridgeMessage,\n BridgePrincipal,\n DeliveryState,\n} from \"./bridge-domain.js\";\nimport type {\n BridgeDiagnostics,\n BridgeStore,\n ClaimOptions,\n InsertMessageResult,\n MessagePage,\n MessageQuery,\n} from \"./bridge-store.js\";\nimport {\n EdgeMigrationDrainingError,\n EdgeMigrationLeaseError,\n EdgeMigrationRetiredError,\n edgeMessageFingerprint,\n type EdgeDrainLease,\n type EdgeMigrationGateState,\n type PendingMessage,\n SQLiteEdgeStore,\n} from \"./sqlite-edge-store.js\";\n\nexport interface SyncInsertResult extends InsertMessageResult {\n disposition: \"committed\" | \"queued\";\n authoritative: boolean;\n}\n\nexport interface CachedMessagePage extends MessagePage {\n source: \"remote\" | \"cache\";\n stale: boolean;\n degraded: boolean;\n acknowledgements: \"authoritative\" | \"unknown\";\n lastSyncedAt?: string;\n}\n\nexport interface SyncReport {\n online: boolean;\n pushed: number;\n deduplicated: number;\n pulled: number;\n pending: number;\n blocked: number;\n cached: number;\n cursor?: string;\n lastSyncedAt?: string;\n lastError?: string;\n failureRetryable?: boolean;\n migrationState?: EdgeMigrationGateState;\n migrationOperationId?: string;\n migrationLeaseExpiresAt?: string;\n}\n\nexport interface SyncDiagnostics extends BridgeDiagnostics {\n remoteReachable: boolean | null;\n outboxPending: number;\n outboxBlocked: number;\n cachedMessages: number;\n lastSyncAt?: string;\n lastSyncError?: string;\n outboxDue: number;\n outboxScheduled: number;\n outboxLeased: number;\n outboxOldestDueAt?: string;\n outboxQueueLagMs: number;\n outboxOldestBlockedAt?: string;\n outboxBlockedAgeMs: number | null;\n outboxBlockedMaxAttempts: number;\n outboxBlockedLastError?: string;\n outboxNextRetryAt?: string;\n lastOutboundSyncAt?: string;\n lastInboundSyncAt?: string;\n lastSyncAttemptAt?: string;\n syncLoopState: \"disabled\" | \"idle\" | \"running\" | \"backoff\" | \"paused\" | \"stopped\" | \"failed\";\n syncLoopError?: string;\n remoteError?: string;\n migrationState: EdgeMigrationGateState;\n migrationOperationId?: string;\n migrationLeaseExpiresAt?: string;\n}\n\nexport interface SyncingBridgeStoreOptions {\n now?: () => Date;\n random?: () => number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n leaseMs?: number;\n autoSync?: boolean;\n idleDelayMs?: number;\n edgeDrainLease?: EdgeDrainLease;\n /** A maintenance caller may retain the edge while closing the sync wrapper. */\n closeEdge?: boolean;\n}\n\ntype FlushResult =\n | { state: \"empty\" }\n | { state: \"committed\"; result: InsertMessageResult; messageId: string }\n | { state: \"retry\"; error: Error; retryable: boolean }\n | { state: \"blocked\"; error: Error; messageId: string }\n | { state: \"paused\"; error: EdgeMigrationDrainingError | EdgeMigrationRetiredError | EdgeMigrationLeaseError }\n | { state: \"fatal\"; error: Error };\n\nfunction statusOf(error: unknown): number | undefined {\n if (!error || typeof error !== \"object\" || !(\"status\" in error)) return undefined;\n const status = Number((error as { status?: unknown }).status);\n return Number.isFinite(status) ? status : undefined;\n}\n\nfunction codeOf(error: unknown): string {\n if (error && typeof error === \"object\" && \"code\" in error) {\n const code = (error as { code?: unknown }).code;\n if (typeof code === \"string\" && code) return code.slice(0, 128);\n }\n return error instanceof Error ? error.name.slice(0, 128) : \"sync_error\";\n}\n\nexport function isRetryableSyncError(error: unknown): boolean {\n const status = statusOf(error);\n const code = codeOf(error);\n if ([\"network_error\", \"request_timeout\"].includes(code)) return true;\n if ([\"invalid_input\", \"idempotency_conflict\", \"edge_idempotency_conflict\", \"principal_mismatch\", \"protocol_mismatch\", \"store_closed\", \"client_migration_draining\", \"client_migration_retired\", \"client_migration_lease_lost\"].includes(code)) return false;\n return status === 0 || status === 408 || status === 425 ||\n status === 429 || (status !== undefined && status >= 500);\n}\n\nfunction provisional(draft: PendingMessage, createdAt: string): BridgeMessage {\n return { ...draft, sequence: \"0\", createdAt };\n}\n\nexport class SyncingBridgeStore implements BridgeStore {\n private readonly now: () => Date;\n private readonly random: () => number;\n private readonly baseDelayMs: number;\n private readonly maxDelayMs: number;\n private readonly leaseMs: number;\n private readonly autoSync: boolean;\n private readonly idleDelayMs: number;\n private edgeDrainLease?: EdgeDrainLease;\n private readonly closeEdge: boolean;\n private remoteReady: Promise<void> | undefined;\n private stopped = false;\n private wakeTimer: ReturnType<typeof setTimeout> | undefined;\n private wake: (() => void) | undefined;\n private background: Promise<void> | undefined;\n private readonly closeController = new AbortController();\n private backgroundError: unknown;\n private wakeRequested = false;\n private remoteReachable: boolean | null = null;\n private loopState: SyncDiagnostics[\"syncLoopState\"];\n\n constructor(\n private readonly edge: SQLiteEdgeStore,\n private readonly remote: BridgeStore,\n private readonly principal: BridgePrincipal,\n options: SyncingBridgeStoreOptions = {},\n ) {\n this.now = options.now ?? (() => new Date());\n this.random = options.random ?? Math.random;\n this.baseDelayMs = options.baseDelayMs ?? 1_000;\n this.maxDelayMs = options.maxDelayMs ?? 5 * 60_000;\n this.leaseMs = options.leaseMs ?? 30_000;\n this.autoSync = options.autoSync ?? true;\n this.idleDelayMs = Math.max(this.baseDelayMs + 1, options.idleDelayMs ?? 30_000);\n this.edgeDrainLease = options.edgeDrainLease;\n this.closeEdge = options.closeEdge ?? true;\n this.loopState = this.autoSync ? \"idle\" : \"disabled\";\n }\n\n async initialize(): Promise<void> {\n // Remote readiness is intentionally deferred so clients can start offline.\n await this.edge.initialize();\n if (this.autoSync) this.startTransportLoop();\n }\n\n /** Replace a renewed maintenance lease without creating another edge wrapper. */\n setDrainLease(lease: EdgeDrainLease | undefined): void {\n this.edgeDrainLease = lease;\n }\n\n private startTransportLoop(): void {\n if (this.background) return;\n this.background = this.transportLoop().catch((error) => {\n this.backgroundError = error;\n this.loopState = \"failed\";\n });\n }\n\n private async wait(delayMs: number): Promise<void> {\n if (this.stopped) return;\n if (this.wakeRequested) {\n this.wakeRequested = false;\n return;\n }\n await new Promise<void>((resolve) => {\n this.wake = resolve;\n this.wakeTimer = setTimeout(resolve, delayMs);\n this.wakeTimer.unref?.();\n });\n this.wake = undefined;\n this.wakeTimer = undefined;\n }\n\n private wakeTransport(): void {\n if (this.wake) {\n if (this.wakeTimer) clearTimeout(this.wakeTimer);\n this.wake();\n }\n else this.wakeRequested = true;\n }\n\n private fatal(error: unknown): Error {\n if (this.backgroundError instanceof Error) return this.backgroundError;\n const cause = error instanceof Error ? error : new Error(String(error));\n const fatal = Object.assign(new Error(`fatal local edge failure: ${cause.message}`), {\n code: \"local_edge_commit_failed\",\n cause,\n });\n this.backgroundError = fatal;\n return fatal;\n }\n\n private assertHealthy(): void {\n if (this.backgroundError) throw this.backgroundError;\n }\n\n private async transportLoop(): Promise<void> {\n let failures = 0;\n await this.wait(this.delay(0));\n while (!this.stopped) {\n this.loopState = \"running\";\n const report = await this.sync({ maxPush: 100, maxPages: 1, signal: this.closeController.signal });\n if (this.stopped) break;\n if (report.migrationState !== \"active\" && !this.edgeDrainLease) {\n this.loopState = \"paused\";\n await this.wait(this.idleDelayMs);\n continue;\n }\n if (report.failureRetryable === false) {\n this.backgroundError = Object.assign(\n new Error(`gateway synchronization failed permanently: ${report.lastError ?? \"sync_error\"}`),\n { code: report.lastError ?? \"sync_error\" },\n );\n this.loopState = \"failed\";\n return;\n }\n failures = report.online ? 0 : Math.min(failures + 1, 20);\n this.loopState = report.online ? \"idle\" : \"backoff\";\n await this.wait(report.pending > 0 ? this.delay(Math.max(0, failures - 1)) : this.idleDelayMs);\n }\n }\n\n async verifyRemote(): Promise<void> {\n await this.ensureRemote();\n }\n\n private async ensureRemote(signal?: AbortSignal): Promise<void> {\n if (!this.remoteReady) {\n this.remoteReady = this.remote.initialize({ signal }).catch((error) => {\n this.remoteReady = undefined;\n throw error;\n });\n }\n try {\n await this.remoteReady;\n this.remoteReachable = true;\n } catch (error) {\n this.remoteReachable = false;\n throw error;\n }\n }\n\n private assertPrincipal(principal: BridgePrincipal, includeInstance = true): void {\n if (\n principal.workspace !== this.principal.workspace ||\n principal.agent !== this.principal.agent ||\n (includeInstance && principal.instance !== this.principal.instance)\n ) {\n const error = new Error(\"principal does not match the synchronized edge scope\");\n Object.assign(error, { status: 403, code: \"principal_mismatch\" });\n throw error;\n }\n }\n\n private delay(attempts: number): number {\n const exponential = Math.min(this.maxDelayMs, this.baseDelayMs * 2 ** Math.min(attempts, 20));\n const jitter = 0.8 + this.random() * 0.4;\n return Math.max(1, Math.round(exponential * jitter));\n }\n\n private cancelled(signal?: AbortSignal): boolean {\n return this.stopped || Boolean(signal?.aborted);\n }\n\n private async flushOne(signal?: AbortSignal): Promise<FlushResult> {\n await this.edge.noteAttempt(this.now());\n try {\n if (this.edgeDrainLease) await this.edge.assertDrainLease(this.edgeDrainLease, this.now());\n else await this.edge.assertScopeActive();\n } catch (error) {\n if (error instanceof EdgeMigrationDrainingError\n || error instanceof EdgeMigrationRetiredError\n || error instanceof EdgeMigrationLeaseError) return { state: \"paused\", error };\n throw error;\n }\n try {\n await this.ensureRemote(signal);\n } catch (error) {\n await this.edge.noteError(codeOf(error));\n return {\n state: \"retry\",\n error: error instanceof Error ? error : new Error(String(error)),\n retryable: isRetryableSyncError(error),\n };\n }\n let record;\n try {\n record = await this.edge.claimNext(this.now(), this.leaseMs, this.edgeDrainLease);\n } catch (error) {\n if (error instanceof EdgeMigrationDrainingError\n || error instanceof EdgeMigrationRetiredError\n || error instanceof EdgeMigrationLeaseError) return { state: \"paused\", error };\n throw error;\n }\n if (!record) return { state: \"empty\" };\n try {\n const result = await this.remote.insertMessage(record.draft, { signal });\n this.remoteReachable = true;\n if (result.message.id !== record.draft.id) {\n const error = new Error(\"idempotency key resolved to a different message ID\");\n Object.assign(error, { status: 409, code: \"idempotency_conflict\" });\n await this.edge.block(record, codeOf(error), this.now());\n return { state: \"blocked\", error, messageId: record.draft.id };\n }\n if (edgeMessageFingerprint(result.message) !== record.payloadHash) {\n const error = new Error(\"idempotency key resolved to different message content\");\n Object.assign(error, { status: 409, code: \"idempotency_conflict\" });\n await this.edge.block(record, codeOf(error), this.now());\n return { state: \"blocked\", error, messageId: record.draft.id };\n }\n try {\n await this.edge.commit(record, result.message, this.now());\n } catch (error) {\n return { state: \"fatal\", error: this.fatal(error) };\n }\n return { state: \"committed\", result, messageId: record.draft.id };\n } catch (error) {\n const caught = error instanceof Error ? error : new Error(String(error));\n this.remoteReachable = isRetryableSyncError(error) ? false : true;\n if (this.cancelled(signal)) {\n await this.edge.retry(record, \"request_cancelled\", this.now());\n return { state: \"retry\", error: caught, retryable: true };\n }\n if (isRetryableSyncError(error)) {\n await this.edge.retry(\n record,\n codeOf(error),\n new Date(this.now().getTime() + this.delay(record.attempts)),\n );\n return { state: \"retry\", error: caught, retryable: true };\n }\n await this.edge.block(record, codeOf(error), this.now());\n return { state: \"blocked\", error: caught, messageId: record.draft.id };\n }\n }\n\n async insertMessage(message: PendingMessage): Promise<SyncInsertResult> {\n this.assertHealthy();\n this.assertPrincipal({ workspace: message.workspace, agent: message.source }, false);\n // A drain lease authorizes only claimNext for work that existed before the\n // gate closed. It never authorizes new publication or an early remote call.\n await this.edge.assertScopeActive();\n let remoteError: unknown;\n try {\n await this.ensureRemote();\n } catch (error) {\n if (!isRetryableSyncError(error)) throw error;\n remoteError = error;\n }\n const queued = await this.edge.enqueue(message, this.now());\n const draft = queued.draft;\n if (remoteError) {\n await this.edge.noteError(codeOf(remoteError));\n this.wakeTransport();\n return {\n message: provisional(draft, this.now().toISOString()),\n created: queued.created,\n disposition: \"queued\",\n authoritative: false,\n };\n }\n const flushed = await this.flushOne();\n if (flushed.state === \"fatal\") throw flushed.error;\n if (flushed.state === \"blocked\" && flushed.messageId === draft.id) throw flushed.error;\n if (flushed.state === \"retry\" && !flushed.retryable) throw flushed.error;\n if (flushed.state === \"committed\" && flushed.messageId === draft.id) {\n return { ...flushed.result, disposition: \"committed\", authoritative: true };\n }\n this.wakeTransport();\n return {\n message: provisional(draft, this.now().toISOString()),\n created: queued.created,\n disposition: \"queued\",\n authoritative: false,\n };\n }\n\n async enqueueMessage(message: PendingMessage): Promise<SyncInsertResult & { disposition: \"queued\"; authoritative: false }> {\n this.assertHealthy();\n this.assertPrincipal({ workspace: message.workspace, agent: message.source }, false);\n await this.edge.assertScopeActive();\n const queued = await this.edge.enqueue(message, this.now());\n return {\n message: provisional(queued.draft, this.now().toISOString()),\n created: queued.created,\n disposition: \"queued\",\n authoritative: false,\n };\n }\n\n private async pull(maxPages: number, signal?: AbortSignal): Promise<{\n online: boolean;\n pulled: number;\n error?: Error;\n retryable?: boolean;\n }> {\n let pulled = 0;\n for (let pageNumber = 0; pageNumber < maxPages; pageNumber += 1) {\n if (this.cancelled(signal)) break;\n const before = await this.edge.pullCursor();\n let page: MessagePage;\n try {\n await this.ensureRemote(signal);\n page = await this.remote.listMessages(this.principal, {\n cursor: before,\n limit: 200,\n includeExpired: true,\n mailbox: \"all\",\n }, { signal });\n this.remoteReachable = true;\n } catch (error) {\n this.remoteReachable = isRetryableSyncError(error) ? false : true;\n await this.edge.noteError(codeOf(error));\n return {\n online: false,\n pulled,\n error: error instanceof Error ? error : new Error(String(error)),\n retryable: isRetryableSyncError(error),\n };\n }\n try {\n await this.edge.cachePage(page.messages, page.cursor, this.now());\n } catch (error) {\n throw this.fatal(error);\n }\n pulled += page.messages.length;\n if (page.messages.length < 200 || !page.cursor || page.cursor === before) break;\n }\n return { online: true, pulled };\n }\n\n async sync(options: { maxPush?: number; maxPages?: number; signal?: AbortSignal } = {}): Promise<SyncReport> {\n this.assertHealthy();\n await this.edge.initialize();\n await this.edge.noteAttempt(this.now());\n const maxPush = Math.min(Math.max(Math.trunc(options.maxPush ?? 100), 0), 1_000);\n const maxPages = Math.min(Math.max(Math.trunc(options.maxPages ?? 20), 0), 100);\n let pushed = 0;\n let deduplicated = 0;\n let online = true;\n let lastError: string | undefined;\n let failureRetryable: boolean | undefined;\n\n if (options.signal?.aborted) {\n const stats = await this.edge.stats(this.now());\n return {\n online: false, pushed: 0, deduplicated: 0, pulled: 0,\n pending: stats.pending, blocked: stats.blocked, cached: stats.cached,\n cursor: stats.pullCursor, lastSyncedAt: stats.lastSyncAt,\n lastError: \"request_cancelled\", failureRetryable: true,\n };\n }\n\n for (let index = 0; index < maxPush; index += 1) {\n if (this.cancelled(options.signal)) break;\n const result = await this.flushOne(options.signal);\n if (result.state === \"empty\") break;\n if (result.state === \"committed\") {\n pushed += 1;\n if (!result.result.created) deduplicated += 1;\n continue;\n }\n if (result.state === \"fatal\") throw result.error;\n if (result.state === \"paused\") {\n lastError = codeOf(result.error);\n break;\n }\n lastError = codeOf(result.error);\n failureRetryable = result.state === \"retry\" ? result.retryable : undefined;\n if (result.state === \"retry\") online = false;\n if (result.state === \"retry\") break;\n }\n\n let pulled = 0;\n if (maxPages > 0 && !this.cancelled(options.signal) && !lastError?.startsWith(\"client_migration_\")) {\n const pull = await this.pull(maxPages, options.signal);\n online = online && pull.online;\n pulled = pull.pulled;\n if (pull.error) {\n lastError = codeOf(pull.error);\n failureRetryable = pull.retryable;\n }\n }\n\n const stats = await this.edge.stats(this.now());\n return {\n online,\n pushed,\n deduplicated,\n pulled,\n pending: stats.pending,\n blocked: stats.blocked,\n cached: stats.cached,\n cursor: stats.pullCursor,\n lastSyncedAt: stats.lastSyncAt,\n lastError: lastError ?? stats.lastError,\n failureRetryable,\n migrationState: stats.migrationState,\n migrationOperationId: stats.migrationOperationId,\n migrationLeaseExpiresAt: stats.migrationLeaseExpiresAt,\n };\n }\n\n async listMessages(principal: BridgePrincipal, query: MessageQuery = {}): Promise<CachedMessagePage> {\n this.assertHealthy();\n this.assertPrincipal(principal);\n await this.sync({ maxPush: 20, maxPages: 0 });\n let remotePage: MessagePage;\n try {\n await this.ensureRemote();\n remotePage = await this.remote.listMessages(principal, query);\n } catch (error) {\n const retryable = isRetryableSyncError(error);\n this.remoteReachable = retryable ? false : true;\n if (!retryable) throw error;\n await this.edge.noteError(codeOf(error));\n let cached: MessagePage;\n let stats: Awaited<ReturnType<SQLiteEdgeStore[\"stats\"]>>;\n try {\n cached = await this.edge.list(query);\n stats = await this.edge.stats(this.now());\n } catch (cacheError) {\n throw this.fatal(cacheError);\n }\n return { ...cached, source: \"cache\", stale: true, degraded: true,\n acknowledgements: (query.receiptState && query.receiptState !== \"any\") || \"unacknowledgedBy\" in query ? \"unknown\" : \"authoritative\",\n lastSyncedAt: stats.lastSyncAt };\n }\n try {\n this.remoteReachable = true;\n await this.edge.cacheLatest(remotePage.messages, this.now());\n const stats = await this.edge.stats(this.now());\n return { ...remotePage, source: \"remote\", stale: false, degraded: false,\n acknowledgements: \"authoritative\", lastSyncedAt: stats.lastSyncAt };\n } catch (error) {\n throw this.fatal(error);\n }\n }\n\n async recordReceipt(\n principal: BridgePrincipal,\n messageIds: string[],\n readAt?: Date,\n ): Promise<number> {\n this.assertPrincipal(principal, false);\n await this.ensureRemote();\n return this.remote.recordReceipt(principal, messageIds, readAt);\n }\n\n async claimDelivery(principal: BridgePrincipal, options: ClaimOptions): Promise<BridgeDelivery | null> {\n this.assertPrincipal(principal);\n await this.ensureRemote();\n return this.remote.claimDelivery(principal, options);\n }\n\n async renewDelivery(\n principal: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n leaseMs: number,\n ): Promise<BridgeDelivery | null> {\n this.assertPrincipal(principal);\n await this.ensureRemote();\n return this.remote.renewDelivery(principal, deliveryId, leaseToken, leaseMs);\n }\n\n async settleDelivery(\n principal: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n state: Extract<DeliveryState, \"acked\" | \"retrying\" | \"dead\">,\n error?: string,\n _retryPolicy?: import(\"./bridge-domain.js\").RetryPolicy,\n ): Promise<BridgeDelivery | null> {\n this.assertPrincipal(principal);\n await this.ensureRemote();\n return this.remote.settleDelivery(principal, deliveryId, leaseToken, state, error);\n }\n\n async listDeliveries(principal: BridgePrincipal, query: import(\"./bridge-store.js\").DeliveryQuery = {}) { this.assertPrincipal(principal); await this.ensureRemote(); if(!this.remote.listDeliveries) throw new Error(\"delivery listing is not supported\"); return this.remote.listDeliveries(principal,query); }\n async listDeliveryEvents(principal: BridgePrincipal,id:string,query:{cursor?:string;limit?:number}={}) { this.assertPrincipal(principal);await this.ensureRemote();if(!this.remote.listDeliveryEvents)throw new Error(\"delivery event listing is not supported\");return this.remote.listDeliveryEvents(principal,id,query); }\n async cancelDelivery(principal:BridgePrincipal,id:string){this.assertPrincipal(principal);await this.ensureRemote();if(!this.remote.cancelDelivery)throw new Error(\"delivery cancellation is not supported\");return this.remote.cancelDelivery(principal,id);}\n async requeueDelivery(principal:BridgePrincipal,id:string){this.assertPrincipal(principal);await this.ensureRemote();if(!this.remote.requeueDelivery)throw new Error(\"delivery requeue is not supported\");return this.remote.requeueDelivery(principal,id);}\n\n async diagnostics(principal: BridgePrincipal, options: { mode?: \"snapshot\" | \"probe\" } = {}): Promise<SyncDiagnostics> {\n this.assertPrincipal(principal);\n const edge = await this.edge.stats(this.now());\n let remote: BridgeDiagnostics | undefined;\n let remoteError: string | undefined;\n if (options.mode === \"probe\") {\n try {\n if (this.remote.diagnostics) remote = await this.remote.diagnostics(principal);\n else await this.ensureRemote();\n this.remoteReachable = true;\n } catch (error) {\n const retryable = isRetryableSyncError(error);\n this.remoteReachable = retryable ? false : true;\n remoteError = codeOf(error);\n }\n }\n return {\n schemaVersion: remote?.schemaVersion ?? \"postgres-v2\",\n deliverySupported: remote?.deliverySupported ?? true,\n pending: remote?.pending ?? null,\n claimed: remote?.claimed ?? null,\n retrying: remote?.retrying ?? null,\n dead: remote?.dead ?? null,\n cancelled: remote?.cancelled ?? null,\n oldestAvailableAt: remote?.oldestAvailableAt,\n due: remote?.due ?? null,\n scheduled: remote?.scheduled ?? null,\n expiredLeases: remote?.expiredLeases ?? null,\n oldestDueAt: remote?.oldestDueAt,\n queueLagMs: remote?.queueLagMs ?? null,\n principal: { workspace: principal.workspace, agent: principal.agent },\n remoteReachable: options.mode === \"probe\" ? this.remoteReachable : null,\n outboxPending: edge.pending,\n outboxBlocked: edge.blocked,\n cachedMessages: edge.cached,\n lastSyncAt: edge.lastSyncAt,\n lastSyncError: edge.lastError,\n outboxDue: edge.due,\n outboxScheduled: edge.scheduled,\n outboxLeased: edge.leased,\n outboxOldestDueAt: edge.oldestDueAt,\n outboxQueueLagMs: edge.queueLagMs,\n outboxOldestBlockedAt: edge.oldestBlockedAt,\n outboxBlockedAgeMs: edge.blockedAgeMs,\n outboxBlockedMaxAttempts: edge.blockedMaxAttempts,\n outboxBlockedLastError: edge.blockedLastError,\n outboxNextRetryAt: edge.nextRetryAt,\n lastOutboundSyncAt: edge.lastOutboundSyncAt,\n lastInboundSyncAt: edge.lastInboundSyncAt,\n lastSyncAttemptAt: edge.lastAttemptAt,\n syncLoopState: this.backgroundError ? \"failed\" : this.loopState,\n syncLoopError: this.backgroundError ? codeOf(this.backgroundError) : undefined,\n remoteError,\n migrationState: edge.migrationState,\n migrationOperationId: edge.migrationOperationId,\n migrationLeaseExpiresAt: edge.migrationLeaseExpiresAt,\n };\n }\n\n async heartbeat(principal: BridgePrincipal, leaseMs: number, runtimeType?: string, capabilities: string[] = []) {\n this.assertPrincipal(principal);\n await this.ensureRemote();\n if (!this.remote.heartbeat) throw new Error(\"presence is not supported by the remote provider\");\n return this.remote.heartbeat(principal, leaseMs, runtimeType, capabilities);\n }\n\n async listPresence(principal: BridgePrincipal) {\n this.assertPrincipal(principal);\n await this.ensureRemote();\n if (!this.remote.listPresence) throw new Error(\"presence is not supported by the remote provider\");\n return this.remote.listPresence(principal);\n }\n\n async close(): Promise<void> {\n this.stopped = true;\n this.loopState = \"stopped\";\n this.closeController.abort(new Error(\"synchronization stopped\"));\n if (this.wakeTimer) clearTimeout(this.wakeTimer);\n this.wake?.();\n const results = await Promise.allSettled([\n this.remote.close?.() ?? Promise.resolve(),\n this.background ?? Promise.resolve(),\n ]);\n const failures = results\n .filter((result): result is PromiseRejectedResult => result.status === \"rejected\")\n .map((result) => result.reason);\n if (this.backgroundError) failures.push(this.backgroundError);\n if (this.closeEdge) {\n try { await this.edge.close(); } catch (error) { failures.push(error); }\n }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw Object.assign(new Error(\"failed to close synchronized bridge store\"), { errors: failures });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY,kBAAkB;AACvC,SAAS,YAAY,iBAAiB;AACtC,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAe9B,IAAMA,WAAU,cAAc,YAAY,GAAG;AAC7C,SAAS,aAAa,MAAwB;AAC5C,QAAM,EAAE,aAAa,IAAIA,SAAQ,aAAa;AAC9C,SAAO,IAAI,aAAa,IAAI;AAC9B;AACA,SAAS,qBAAqB,MAAwB;AACpD,QAAM,EAAE,aAAa,IAAIA,SAAQ,aAAa;AAI9C,SAAO,IAAI,aAAa,GAAG,cAAc,IAAI,EAAE,SAAS,CAAC,gBAAgB,EAAE,UAAU,KAAK,CAAC;AAC7F;AACA,IAAM,eAAe;AAErB,IAAM,SAAS;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;AAmFf,IAAM,kBAAkB;AA0BjB,SAAS,yBAAyB,MAAc,OAAkB,MAAM,oBAAI,KAAK,GAA2B;AACjH,MAAI,CAAC,WAAW,IAAI,GAAG;AACrB,WAAO,EAAE,QAAQ,OAAO,MAAM,EAAE,UAAU,aAAa,KAAK,GAAG,OAAO,UAAU,aAAa,QAAW,gBAAgB,QAAW,YAAW,oBAAI,KAAK,CAAC,GAAE,YAAY,EAAE,GAAG,SAAS,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,EAAE;AAAA,EAChP;AACA,0BAAwB,MAAM,MAAM;AACpC,QAAM,UAAU,UAAU,IAAI;AAC9B,MAAI,CAAC,QAAQ,OAAO,KAAK,QAAQ,eAAe,EAAG,OAAM,IAAI,kBAAkB,6CAA6C;AAC5H,MAAI,WAAW,GAAG,IAAI,MAAM,KAAK,WAAW,GAAG,IAAI,MAAM,GAAG;AAC1D,UAAM,IAAI,kBAAkB,oEAAoE;AAAA,EAClG;AACA,QAAM,KAAK,qBAAqB,IAAI;AACpC,MAAI;AACF,UAAM,SAAS,GAAG,QAAQ,kKAAkK,EACzL,IAAI;AACP,QAAI,OAAO,WAAW,GAAG;AACvB,YAAM,aAAa,GAAG,QAAQ,6FAA6F,EAAE,IAAI;AACjI,UAAI,OAAO,WAAW,KAAK,MAAM,EAAG,OAAM,IAAI,kBAAkB,iDAAiD;AACjH,aAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,UAAU,aAAa,KAAK,GAAG,OAAO,UAAU,aAAa,QAAW,gBAAgB,QAAW,YAAW,oBAAI,KAAK,CAAC,GAAE,YAAY,EAAE,GAAG,SAAS,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,EAAE;AAAA,IAC/O;AACA,UAAM,QAAQ,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,OAAO,MAAM,IAAI,CAAC,CAAC;AAC/D,eAAW,QAAQ,CAAC,eAAe,wBAAwB,eAAe,YAAY,GAAG;AACvF,UAAI,CAAC,MAAM,IAAI,IAAI,EAAG,OAAM,IAAI,kBAAkB,oCAAoC;AAAA,IACxF;AACA,UAAM,MAAM,aAAa,KAAK;AAC9B,UAAM,WAAW,GAAG,QAAQ,wDAAwD,EAAE,IAAI,GAAG;AAC7F,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,UAAU,KAAK,OAAO,UAAU,aAAa,QAAW,gBAAgB,QAAW,YAAW,oBAAI,KAAK,CAAC,GAAE,YAAY,EAAE,GAAG,SAAS,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,EAAE;AAAA,IAC/N;AACA,UAAM,UAAU,GAAG,QAAQ,mGAAmG,EAAE,IAAI,GAAG;AACvI,QAAI,CAAC,WAAW,CAAC,CAAC,UAAU,YAAY,SAAS,EAAE,SAAS,OAAO,QAAQ,KAAK,CAAC,EAAG,OAAM,IAAI,kBAAkB,2CAA2C;AAC3J,UAAM,UAAU,IAAI,YAAY;AAChC,UAAM,SAAS,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAMW,EAAE,IAAI,SAAS,SAAS,SAAS,SAAS,SAAS,GAAG;AAC3F,UAAM,SAAS,GAAG,QAAQ,4DAA4D,EAAE,IAAI,GAAG;AAC/F,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,EAAE,UAAU,KAAK,OAAO,QAAQ,OAAiC,aAAa,QAAQ,eAAe,OAAO,QAAQ,YAAY,IAAI,QAAW,gBAAgB,QAAQ,mBAAmB,OAAO,QAAQ,gBAAgB,IAAI,QAAW,WAAW,QAAQ,aAAa,OAAO,QAAQ,UAAU,KAAI,oBAAI,KAAK,CAAC,GAAE,YAAY,EAAE;AAAA,MACrU,SAAS,OAAO,OAAO,WAAW,CAAC;AAAA,MAAG,KAAK,OAAO,OAAO,OAAO,CAAC;AAAA,MAAG,WAAW,OAAO,OAAO,aAAa,CAAC;AAAA,MAAG,QAAQ,OAAO,OAAO,UAAU,CAAC;AAAA,MAAG,SAAS,OAAO,OAAO,WAAW,CAAC;AAAA,MAAG,QAAQ,OAAO,OAAO,SAAS,CAAC;AAAA,IAC1N;AAAA,EACF,UAAE;AAAU,OAAG,MAAM;AAAA,EAAG;AAC1B;AA0DO,IAAM,oBAAN,cAAgC,MAAM;AAAA,EAAtC;AAAA;AACL,SAAS,OAAO;AAAA;AAClB;AAEO,IAAM,6BAAN,cAAyC,MAAM;AAAA,EAEpD,YAAqB,MAAyB;AAC5C,UAAM,+CAA+C;AADlC;AADrB,SAAS,OAAO;AAAA,EAGhB;AACF;AAEO,IAAM,4BAAN,cAAwC,MAAM;AAAA,EAEnD,YAAqB,MAAyB;AAC5C,UAAM,8CAA8C;AADjC;AADrB,SAAS,OAAO;AAAA,EAGhB;AACF;AAEO,IAAM,0BAAN,cAAsC,MAAM;AAAA,EAEjD,cAAc;AACZ,UAAM,8DAA8D;AAFtE,SAAS,OAAO;AAAA,EAGhB;AACF;AAEA,SAAS,UAAU,OAAsC;AACvD,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,KAAK;AAC5E,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,IAAI,MAAM,IAAI,SAAS,EAAE,KAAK,GAAG,CAAC;AACnE,SAAO,IAAI,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,MAAM,GAAG,MAAM,MAAS,EAAE,KAAK,EAC1E,IAAI,CAAC,QAAQ,GAAG,KAAK,UAAU,GAAG,CAAC,IAAI,UAAU,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC;AAC9E;AAEA,SAAS,OAAO,SAAoD;AAClE,QAAM,iBAAiB,QAAQ,mBAAmB,QAAQ,QAAQ,SAC9D,EAAE,MAAM,UAAU,aAAa,GAAG,kBAAkB,KAAO,iBAAiB,KAAQ,kBAAkB,IAAI,IAC1G,EAAE,MAAM,UAAU;AACtB,SAAO;AAAA,IACL,WAAW,QAAQ;AAAA,IACnB,SAAS,QAAQ,WAAW;AAAA,IAC5B,QAAQ,QAAQ;AAAA,IAChB,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,aAAa,QAAQ;AAAA,IACrB,MAAM,QAAQ,QAAQ;AAAA,IACtB,SAAS,CAAC,GAAG,QAAQ,OAAO,EAAE,KAAK;AAAA,IACnC,UAAU,QAAQ,YAAY;AAAA,IAC9B,WAAW,QAAQ,aAAa;AAAA,IAChC,eAAe,QAAQ,iBAAiB;AAAA,IACxC,aAAa,QAAQ,eAAe;AAAA,IACpC,UAAU,QAAQ;AAAA,IAClB,WAAW,QAAQ,aAAa;AAAA,IAChC,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,YAAY,CAAC,GAAI,QAAQ,cAAc,CAAC,CAAE,EAAE,KAAK;AAAA,IACjD,UAAU,QAAQ,YAAY;AAAA,IAC9B;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB,SAAiD;AACtF,SAAO,WAAW,QAAQ,EAAE,OAAO,UAAU,OAAO,OAAO,CAAC,CAAC,EAAE,OAAO,KAAK;AAC7E;AAEO,SAAS,kBAAkB,SAAyC;AACzE,SAAO,QAAQ,iBACX,UACA,EAAE,GAAG,SAAS,gBAAgB,mBAAmB,QAAQ,EAAE,GAAG;AACpE;AAEO,SAAS,aAAa,OAA0B;AACrD,SAAO,WAAW,QAAQ,EACvB,OAAO,GAAG,MAAM,SAAS,QAAQ,OAAO,EAAE,CAAC,KAAK,MAAM,UAAU,SAAS,KAAK,MAAM,UAAU,KAAK,EAAE,EACrG,OAAO,KAAK;AACjB;AAEA,SAAS,YAAY,UAA0B;AAC7C,MAAI,CAAC,oBAAoB,KAAK,QAAQ,KAAK,OAAO,QAAQ,IAAI,cAAc;AAC1E,UAAM,IAAI,kBAAkB,4BAA4B;AAAA,EAC1D;AACA,SAAO,SAAS,SAAS,IAAI,GAAG;AAClC;AAEA,SAAS,WAAW,OAAgC;AAClD,SAAO,KAAK,MAAM,OAAO,KAAK,CAAC;AACjC;AAEA,SAAS,aAAa,OAA+B;AACnD,SAAO,KAAK,MAAM,OAAO,KAAK,CAAC;AACjC;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,MAAI,CAAC,6EAA6E,KAAK,KAAK,GAAG;AAC7F,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,SAAO,MAAM,YAAY;AAC3B;AAEO,IAAM,kBAAN,MAAsB;AAAA,EAQ3B,YACmB,MACA,OACA,gBAAgB,KAChB,mBAAmB,KAEnB,kBAAkB,QAAQ,aAAa,UAAU,MAAS,uCAC3E;AANiB;AACA;AACA;AACA;AAEA;AATnB,SAAQ,cAAc;AAWpB,UAAM,WAAW,6BAA6B,MAAM,MAAM,OAAO;AACjE,SAAK,eAAe;AACpB,SAAK,mBAAmB,IAAI,IAAI,aAAa,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,QAAQ,GAAG,QAAQ,MAAM,EAAE,OAAO,UAAU,CAAC;AAClI,UAAM,SAAS,aAAa,cAAc,CAAC,WAAW,QAAQ,IAAI,SAAY,UAAU,QAAQ;AAChG,SAAK,KAAK,aAAa,QAAQ;AAC/B,QAAI;AACF,WAAK,GAAG,KAAK,yBAAyB,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,aAAa,CAAC,CAAC,EAAE;AACnF,WAAK,cAAc,KAAK;AACxB,UAAI,QAAQ;AACV,cAAM,QAAQ,UAAU,QAAQ;AAChC,YAAI,MAAM,QAAQ,OAAO,OAAO,MAAM,QAAQ,OAAO,IAAK,OAAM,IAAI,MAAM,0DAA0D;AAAA,MACtI;AAAA,IACF,SAAS,OAAO;AAAE,WAAK,GAAG,MAAM;AAAG,YAAM;AAAA,IAAO;AAChD,SAAK,MAAM,aAAa,KAAK;AAAA,EAC/B;AAAA,EAEA,MAAc,MAAS,MAAwC;AAC7D,QAAI,KAAK,iBAAiB,WAAY,QAAO,KAAK;AAClD,UAAM,QAAQ,WAAW;AACzB,UAAM,WAAW,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,eAAe,CAAC;AAC1E,QAAI,QAAQ;AACZ,WAAO,MAAM;AACX,YAAM,MAAM,oBAAI,KAAK;AACrB,YAAM,UAAU,MAAM,gBAAgB,MAAM;AAC1C,aAAK,GAAG,KAAK,iBAAiB;AAC9B,YAAI;AACF,eAAK,GAAG,QAAQ,iIAAiI,EAAE,IAAI;AACvJ,gBAAM,SAAS,KAAK,GAAG,QAAQ;AAAA,mFAC0C,EAAE;AAAA,YACzE;AAAA,YAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,gBAAgB,CAAC,CAAC,EAAE,YAAY;AAAA,YAAG,IAAI,YAAY;AAAA,UACjH;AACA,eAAK,GAAG,KAAK,QAAQ;AACrB,iBAAO,OAAO,YAAY;AAAA,QAC5B,SAAS,OAAO;AAAE,eAAK,GAAG,KAAK,UAAU;AAAG,gBAAM;AAAA,QAAO;AAAA,MAC3D,GAAG,KAAK,IAAI,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC;AACrC,UAAI,QAAS;AACb,UAAI,KAAK,IAAI,KAAK,SAAU,OAAM,IAAI,kBAAkB,sCAAsC;AAC9F,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AACzD,cAAQ,KAAK,IAAI,KAAK,KAAK,QAAQ,GAAG,GAAG,EAAE;AAAA,IAC7C;AACA,QAAI,YAAY;AAChB,QAAI;AACJ,QAAI;AACF,eAAS,MAAM,KAAK;AACpB,kBAAY;AAAA,IACd,UACA;AACE,UAAI;AACF,cAAM,gBAAgB,MAAM;AAC1B,eAAK,GAAG,KAAK,iBAAiB;AAC9B,cAAI;AACF,iBAAK,GAAG,QAAQ,4GAA4G,EAAE,IAAI,KAAK;AACvI,iBAAK,GAAG,KAAK,QAAQ;AAAA,UACvB,SAAS,OAAO;AAAE,iBAAK,GAAG,KAAK,UAAU;AAAG,kBAAM;AAAA,UAAO;AAAA,QAC3D,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,eAAe,CAAC,CAAC;AAAA,MAClD,SAAS,OAAO;AACd,YAAI,CAAC,UAAW,OAAM;AAAA,MACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,mBAAmB,WAAkC;AACjE,UAAM,gBAAgB,MAAM,KAAK,GAAG,KAAK,2BAA2B,GAAG,SAAS;AAChF,UAAM,SAAS,MAAM,QAAQ,KAAK,GAAG,QAAQ,4EAA4E,EAAE,IAAI,CAAC;AAChI,QAAI,OAAO,EAAG;AACd,UAAM,gBAAgB,MAAM;AAC1B,UAAI,OAAO,EAAG;AACd,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AAAE,YAAI,CAAC,OAAO,EAAG,MAAK,GAAG,KAAK,eAAe;AAAG,aAAK,GAAG,KAAK,QAAQ;AAAA,MAAG,SACrE,OAAO;AAAE,aAAK,GAAG,KAAK,UAAU;AAAG,cAAM;AAAA,MAAO;AAAA,IACzD,GAAG,SAAS;AAAA,EACd;AAAA,EAEQ,cAAc,kBAAkB,MAAY;AAClD,QAAI,KAAK,iBAAiB,WAAY;AACtC,UAAM,QAAQ,kBACV,CAAC,KAAK,cAAc,GAAG,KAAK,YAAY,QAAQ,GAAG,KAAK,YAAY,MAAM,IAC1E,CAAC,KAAK,YAAY;AACtB,eAAW,QAAQ,OAAO;AACxB,UAAI,CAAC,WAAW,IAAI,EAAG;AACvB,UAAI,SAAS,KAAK,gBAAgB,KAAK,iBAAiB,IAAI,IAAI,EAAG,yBAAwB,MAAM,MAAM;AAAA,eAC9F,SAAS,KAAK,aAAc,mBAAkB,MAAM,MAAM;AAAA,UAC9D,4BAA2B,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,YAAY,KAA6B;AAC/C,UAAM,QAAQ,OAAO,IAAI,KAAK;AAC9B,QAAI,UAAU,YAAY,UAAU,cAAc,UAAU,WAAW;AACrE,YAAM,IAAI,kBAAkB,sCAAsC;AAAA,IACpE;AACA,UAAM,cAAc,IAAI,iBAAiB,QAAQ,IAAI,iBAAiB,SAClE,SACA,gBAAgB,OAAO,IAAI,YAAY,CAAC;AAC5C,UAAM,iBAAiB,IAAI,qBAAqB,QAAQ,IAAI,qBAAqB,SAC7E,SACA,OAAO,IAAI,gBAAgB;AAC/B,UAAM,YAAY,OAAO,IAAI,cAAc,EAAE;AAC7C,QAAI,CAAC,aAAa,CAAC,OAAO,SAAS,KAAK,MAAM,SAAS,CAAC,GAAG;AACzD,YAAM,IAAI,kBAAkB,0CAA0C;AAAA,IACxE;AACA,UAAM,aAAa,IAAI,gBAAgB,QAAQ,IAAI,gBAAgB,SAC/D,SACA,OAAO,IAAI,WAAW;AAC1B,QAAK,UAAU,aAAa,eAAe,kBAAkB,eACvD,UAAU,eAAe,CAAC,eAAe,CAAC,kBAAkB,CAAC,eAC7D,UAAU,cAAc,CAAC,eAAe,kBAAkB,aAAc;AAC5E,YAAM,IAAI,kBAAkB,sCAAsC;AAAA,IACpE;AACA,WAAO,EAAE,UAAU,KAAK,KAAK,OAAO,aAAa,gBAAgB,UAAU;AAAA,EAC7E;AAAA,EAEQ,oBAAuC;AAC7C,UAAM,MAAM,KAAK,GAAG,QAAQ;AAAA,kDACkB,EAAE,IAAI,KAAK,GAAG;AAC5D,QAAI,CAAC,IAAK,OAAM,IAAI,kBAAkB,gCAAgC;AACtE,WAAO,KAAK,YAAY,GAAG;AAAA,EAC7B;AAAA,EAEQ,iCAAuC;AAC7C,UAAM,OAAO,KAAK,kBAAkB;AACpC,QAAI,KAAK,UAAU,WAAY,OAAM,IAAI,2BAA2B,IAAI;AACxE,QAAI,KAAK,UAAU,UAAW,OAAM,IAAI,0BAA0B,IAAI;AAAA,EACxE;AAAA,EAEQ,8BAA8B,OAAuB,KAAiB;AAC5E,UAAM,OAAO,KAAK,kBAAkB;AACpC,QAAI,KAAK,UAAU,cAAc,KAAK,gBAAgB,MAAM,eACvD,KAAK,mBAAmB,MAAM,kBAAkB,KAAK,MAAM,KAAK,cAAc,KAAK,IAAI,QAAQ,GAAG;AACrG,YAAM,IAAI,wBAAwB;AAAA,IACpC;AACA,UAAM,MAAM,KAAK,GAAG,QAAQ,gEAAgE,EACzF,IAAI,KAAK,GAAG;AACf,QAAI,IAAI,gBAAgB,MAAM,WAAY,OAAM,IAAI,wBAAwB;AAAA,EAC9E;AAAA,EAEQ,kCAAkC,KAAW,OAA8B;AACjF,QAAI,MAAO,MAAK,8BAA8B,OAAO,GAAG;AAAA,QACnD,MAAK,+BAA+B;AAAA,EAC3C;AAAA,EAEA,MAAM,aAA4B;AAChC,QAAI,KAAK,YAAa;AACtB,QAAI,CAAC,KAAK,gBAAgB;AACxB,WAAK,iBAAiB,KAAK,eAAe,EAAE,KAAK,MAAM;AACrD,aAAK,cAAc;AAAA,MACrB,CAAC,EAAE,MAAM,CAAC,UAAU;AAClB,aAAK,iBAAiB;AACtB,cAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,iBAAgC;AAC5C,+BAA2B,KAAK,EAAE;AAClC,UAAM,0BAA0B,KAAK,IAAI,KAAK,eAAe,qCAAqC;AAClG,UAAM,KAAK,mBAAmB,uBAAuB;AACrD,SAAK,GAAG,KAAK,qDAAqD;AAClE,UAAM,KAAK,MAAM,YAAY;AAC3B,YAAM,gBAAgB,MAAM,KAAK,GAAG,KAAK,iBAAiB,GAAG,uBAAuB;AACpF,UAAI;AACJ,aAAK,GAAG,KAAK,MAAM;AACnB,cAAM,eAAe,KAAK,GAAG,QAAQ,gCAAgC,EAAE,IAAI;AAC3E,YAAI,CAAC,aAAa,KAAK,CAAC,WAAW,OAAO,SAAS,gBAAgB,GAAG;AACpE,eAAK,GAAG,KAAK,8EAA8E;AAAA,QAC7F;AACA,mBAAW,QAAQ,CAAC,yBAAyB,wBAAwB,iBAAiB,GAAG;AACvF,cAAI,CAAC,aAAa,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI,GAAG;AACxD,iBAAK,GAAG,KAAK,sCAAsC,IAAI,OAAO;AAAA,UAChE;AAAA,QACF;AACA,cAAM,UAAU,KAAK,GAAG,QAAQ,+BAA+B,EAAE,IAAI;AACrE,YAAI,CAAC,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,SAAS,GAAG;AACxD,eAAK,GAAG,KAAK,gDAAgD;AAAA,QAC/D;AACA,aAAK,GAAG,KAAK,+FAA+F;AAC5G,cAAM,gBAAgB,KAAK,GAAG,QAAQ,gCAAgC,EAAE,IAAI;AAC5E,YAAI,CAAC,cAAc,KAAK,CAAC,WAAW,OAAO,SAAS,YAAY,GAAG;AACjE,eAAK,GAAG,KAAK,oDAAoD;AAAA,QACnE;AACA,2BAAmB,KAAK,EAAE;AACxB,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AACA,WAAK,cAAc;AACnB,YAAM,eAAe,WAAW,QAAQ,EAAE,OAAO,KAAK,MAAM,SAAS,QAAQ,OAAO,EAAE,CAAC,EAAE,OAAO,KAAK;AACrG,WAAK,GAAG,QAAQ;AAAA,4DACsC,EACnD,IAAI,KAAK,KAAK,cAAc,KAAK,MAAM,UAAU,WAAW,KAAK,MAAM,UAAU,KAAK;AACzF,WAAK,GAAG,QAAQ;AAAA;AAAA;AAAA,0DAGoC,EACjD,KAAI,oBAAI,KAAK,GAAE,YAAY,GAAG,KAAK,GAAG;AACzC,YAAM,WAAW,KAAK,GAAG,QAAQ,0DAA0D,EAAE,IAAI,KAAK,GAAG;AACzG,UAAI,OAAO,SAAS,cAAc,IAAI,GAAG;AACvC,aAAK,GAAG,KAAK,iBAAiB;AAC9B,YAAI;AACF,eAAK,GAAG,QAAQ,6EAA6E,EAAE,IAAI,KAAK,GAAG;AAC3G,eAAK,GAAG,KAAK,QAAQ;AAAA,QACvB,SAAS,OAAO;AAAE,eAAK,GAAG,KAAK,UAAU;AAAG,gBAAM;AAAA,QAAO;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,QAAuB;AACnC,UAAM,KAAK,WAAW;AAAA,EACxB;AAAA,EAEA,MAAM,gBAA4C;AAChD,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA;AAAA,EAGA,MAAM,oBAAmC;AACvC,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM,MAAM;AACvB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,+BAA+B;AACpC,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAiB,OAAuB,MAAM,oBAAI,KAAK,GAAkB;AAC7E,UAAM,KAAK,MAAM;AACjB,QAAI,MAAM,aAAa,KAAK,IAAK,OAAM,IAAI,wBAAwB;AACnE,UAAM,KAAK,MAAM,MAAM;AACvB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,8BAA8B,OAAO,GAAG;AAC7C,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,gBACZ,aAAqB,KAAW,SAAiB,MACxB;AACzB,UAAM,KAAK,MAAM;AACjB,UAAM,wBAAwB,gBAAgB,WAAW;AACzD,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC;AAChD,WAAO,KAAK,MAAM,MAAM;AACxB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,cAAM,OAAO,KAAK,kBAAkB;AACpC,YAAI,KAAK,UAAU,UAAW,OAAM,IAAI,0BAA0B,IAAI;AACtE,YAAI,SAAS,WAAW,KAAK,UAAU,SAAU,OAAM,IAAI,2BAA2B,IAAI;AAC1F,YAAI,SAAS,UAAU;AACrB,cAAI,KAAK,UAAU,cAAc,KAAK,gBAAgB,yBACjD,CAAC,KAAK,kBAAkB,KAAK,MAAM,KAAK,cAAc,IAAI,IAAI,QAAQ,GAAG;AAC5E,kBAAM,IAAI,2BAA2B,IAAI;AAAA,UAC3C;AAAA,QACF;AACA,cAAM,aAAa,WAAW;AAC9B,cAAM,iBAAiB,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,EAAE,YAAY;AACtE,cAAM,UAAU,KAAK,GAAG,QAAQ;AAAA;AAAA,0BAEZ,EAAE;AAAA,UACpB;AAAA,UAAuB;AAAA,UAAY;AAAA,UAAgB,IAAI,YAAY;AAAA,UAAG,KAAK;AAAA,QAC7E;AACA,YAAI,QAAQ,YAAY,EAAG,OAAM,IAAI,kBAAkB,2CAA2C;AAClG,aAAK,GAAG,KAAK,QAAQ;AACrB,eAAO,EAAE,UAAU,KAAK,KAAK,aAAa,uBAAuB,YAAY,eAAe;AAAA,MAC9F,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAW,aAAqB,MAAM,oBAAI,KAAK,GAAG,UAAU,KAAiC;AACjG,WAAO,KAAK,gBAAgB,aAAa,KAAK,SAAS,OAAO;AAAA,EAChE;AAAA;AAAA,EAGA,MAAM,YAAY,aAAqB,MAAM,oBAAI,KAAK,GAAG,UAAU,KAAiC;AAClG,WAAO,KAAK,gBAAgB,aAAa,KAAK,SAAS,QAAQ;AAAA,EACjE;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAqB,MAAM,oBAAI,KAAK,GAAG,UAAU,KAAiC;AACxG,UAAM,OAAO,MAAM,KAAK,cAAc;AACtC,QAAI,KAAK,UAAU,SAAU,QAAO,KAAK,WAAW,aAAa,KAAK,OAAO;AAC7E,WAAO,KAAK,YAAY,aAAa,KAAK,OAAO;AAAA,EACnD;AAAA;AAAA,EAGA,MAAM,oBAAoB,OAAuB,MAAM,oBAAI,KAAK,GAAkB;AAChF,UAAM,KAAK,MAAM;AACjB,QAAI,MAAM,aAAa,KAAK,IAAK,OAAM,IAAI,wBAAwB;AACnE,UAAM,KAAK,MAAM,MAAM;AACvB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,8BAA8B,OAAO,GAAG;AAC7C,cAAM,SAAS,KAAK,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAMM,EAAE;AAAA,UACrC,IAAI,YAAY;AAAA,UAAG,IAAI,YAAY;AAAA,UAAG,IAAI,YAAY;AAAA,UAAG,IAAI,YAAY;AAAA,UAAG,IAAI,YAAY;AAAA,UAAG,KAAK;AAAA,QACtG;AACA,YAAI,OAAO,OAAO,WAAW,CAAC,MAAM,KAAK,OAAO,OAAO,OAAO,CAAC,MAAM,KAChE,OAAO,OAAO,aAAa,CAAC,MAAM,KAAK,OAAO,OAAO,UAAU,CAAC,MAAM,KACtE,OAAO,OAAO,WAAW,CAAC,MAAM,GAAG;AACtC,gBAAM,IAAI,kBAAkB,8DAA8D;AAAA,QAC5F;AACA,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,OAAuB,MAAM,oBAAI,KAAK,GAAG,UAAU,KAAiC;AACxG,UAAM,KAAK,MAAM;AACjB,QAAI,MAAM,aAAa,KAAK,IAAK,OAAM,IAAI,wBAAwB;AACnE,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC;AAChD,WAAO,KAAK,MAAM,MAAM;AACxB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,8BAA8B,OAAO,GAAG;AAC7C,cAAM,iBAAiB,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,EAAE,YAAY;AACtE,cAAM,UAAU,KAAK,GAAG,QAAQ;AAAA;AAAA,sEAEgC,EAAE;AAAA,UAChE;AAAA,UAAgB,IAAI,YAAY;AAAA,UAAG,KAAK;AAAA,UAAK,MAAM;AAAA,UAAa,MAAM;AAAA,UAAY,MAAM;AAAA,QAC1F;AACA,YAAI,QAAQ,YAAY,EAAG,OAAM,IAAI,wBAAwB;AAC7D,aAAK,GAAG,KAAK,QAAQ;AACrB,eAAO,EAAE,GAAG,OAAO,eAAe;AAAA,MACpC,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,OAAuB,MAAM,oBAAI,KAAK,GAAkB;AACxE,UAAM,KAAK,MAAM;AACjB,QAAI,MAAM,aAAa,KAAK,IAAK,OAAM,IAAI,wBAAwB;AACnE,UAAM,KAAK,MAAM,MAAM;AACvB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,8BAA8B,OAAO,GAAG;AAC7C,cAAM,QAAQ,KAAK,GAAG,QAAQ;AAAA,0BACV,EAAE,IAAI,KAAK,GAAG;AAClC,YAAI,OAAO,MAAM,KAAK,MAAM,EAAG,OAAM,IAAI,kBAAkB,oDAAoD;AAC/G,cAAM,UAAU,KAAK,GAAG,QAAQ;AAAA;AAAA,oFAE8C,EAAE;AAAA,UAC9E,IAAI,YAAY;AAAA,UAAG,KAAK;AAAA,UAAK,MAAM;AAAA,UAAa,MAAM;AAAA,QACxD;AACA,YAAI,QAAQ,YAAY,EAAG,OAAM,IAAI,wBAAwB;AAC7D,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,OAAuB,MAAM,oBAAI,KAAK,GAA+B;AACjF,UAAM,KAAK,MAAM;AACjB,UAAM,QAAQ,kBAAkB,KAAK;AACrC,UAAM,cAAc,uBAAuB,KAAK;AAChD,UAAM,aAAa,UAAU,KAA6B;AAC1D,UAAM,UAAU,IAAI,YAAY;AAChC,WAAO,KAAK,MAAM,MAAM;AACxB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,+BAA+B;AACpC,cAAM,WAAW,KAAK,GAAG,QAAQ;AAAA,4FACqD,EACnF,IAAI,KAAK,KAAK,MAAM,IAAI,MAAM,cAAe;AAChD,YAAI,UAAU;AACZ,cAAI,OAAO,SAAS,YAAY,MAAM,aAAa;AACjD,kBAAM,IAAI,kBAAkB,qEAAqE;AAAA,UACnG;AACA,eAAK,GAAG,KAAK,QAAQ;AACrB,iBAAO,EAAE,OAAO,WAAW,SAAS,UAAU,GAAG,SAAS,MAAM;AAAA,QAClE;AACA,aAAK,GAAG,QAAQ;AAAA;AAAA,gDAE0B,EACvC,IAAI,KAAK,KAAK,MAAM,IAAI,MAAM,gBAAiB,aAAa,YAAY,SAAS,OAAO;AAC3F,aAAK,GAAG,KAAK,QAAQ;AACrB,eAAO,EAAE,OAAO,SAAS,KAAK;AAAA,MAChC,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,MAAM,oBAAI,KAAK,GAAG,UAAU,KAAQ,gBAAwE;AAC1H,UAAM,KAAK,MAAM;AACjB,UAAM,UAAU,IAAI,YAAY;AAChC,WAAO,KAAK,MAAM,MAAM;AACxB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,kCAAkC,KAAK,cAAc;AAC1D,cAAM,OAAO,KAAK,GAAG,QAAQ;AAAA;AAAA;AAAA,kCAGD,EAAE,IAAI,KAAK,KAAK,SAAS,OAAO;AAC5D,YAAI,CAAC,MAAM;AACT,eAAK,GAAG,KAAK,QAAQ;AACrB,iBAAO;AAAA,QACT;AACA,cAAM,aAAa,WAAW;AAC9B,cAAM,iBAAiB,IAAI,KAAK,IAAI,QAAQ,IAAI,OAAO,EAAE,YAAY;AACrE,cAAM,UAAU,KAAK,GAAG,QAAQ;AAAA;AAAA,gEAE0B,EACvD,IAAI,YAAY,gBAAgB,KAAK,KAAK,OAAO,KAAK,QAAQ,GAAG,OAAO;AAC3E,YAAI,CAAC,QAAQ,SAAS;AACpB,eAAK,GAAG,KAAK,QAAQ;AACrB,iBAAO;AAAA,QACT;AACA,aAAK,GAAG,KAAK,QAAQ;AACrB,eAAO;AAAA,UACL,UAAU,OAAO,KAAK,QAAQ;AAAA,UAC9B,OAAO,WAAW,KAAK,UAAU;AAAA,UACjC,aAAa,OAAO,KAAK,YAAY;AAAA,UACrC,UAAU,OAAO,KAAK,QAAQ;AAAA,UAC9B;AAAA,UACA,WAAW,OAAO,KAAK,UAAU;AAAA,QACnC;AAAA,MACF,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAA0B,OAAe,aAAkC;AACrF,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM,MAAM,KAAK,GAAG,QAAQ;AAAA;AAAA,yDAEc,EAClD,IAAI,YAAY,YAAY,GAAG,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,KAAK,OAAO,UAAU,OAAO,UAAU,CAAC;AACpG,UAAM,KAAK,UAAU,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,MAAM,QAA0B,OAAe,MAAM,oBAAI,KAAK,GAAkB;AACpF,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM,MAAM,KAAK,GAAG,QAAQ;AAAA;AAAA,yDAEc,EAClD,IAAI,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,YAAY,GAAG,KAAK,KAAK,OAAO,UAAU,OAAO,UAAU,CAAC;AAC5F,UAAM,KAAK,UAAU,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,OACJ,QACA,SACA,MAAM,oBAAI,KAAK,GACA;AACf,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM,MAAM;AACvB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,aAAK,SAAS,OAAO;AACrB,cAAM,UAAU,KAAK,GAAG,QAAQ;AAAA,2DACqB,EAClD,IAAI,KAAK,KAAK,OAAO,UAAU,OAAO,UAAU;AACnD,YAAI,QAAQ,YAAY,EAAG,OAAM,IAAI,kBAAkB,qCAAqC;AAC5F,aAAK,GAAG,QAAQ,0EAA0E,EACvF,IAAI,IAAI,YAAY,GAAG,KAAK,GAAG;AAClC,aAAK,GAAG,QAAQ,kEAAkE,EAC/E,IAAI,IAAI,YAAY,GAAG,KAAK,GAAG;AAClC,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEQ,SAAS,SAA8B;AAC7C,UAAM,aAAa,UAAU,OAA+B;AAC5D,UAAM,MAAM,YAAY,QAAQ,QAAQ;AACxC,UAAM,OAAO,KAAK,GAAG,QAAQ;AAAA,yCACQ,EAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC/D,UAAM,aAAa,KAAK,GAAG,QAAQ;AAAA,2CACI,EAAE,IAAI,KAAK,KAAK,GAAG;AAC1D,QAAI,QAAQ,YAAY;AACtB,UACE,CAAC,QACD,OAAO,KAAK,eAAe,MAAM,QAAQ,YACzC,OAAO,KAAK,YAAY,MAAM,cAC7B,cAAc,OAAO,WAAW,UAAU,MAAM,QAAQ,IACzD;AACA,cAAM,IAAI,kBAAkB,wDAAwD;AAAA,MACtF;AACA;AAAA,IACF;AACA,SAAK,GAAG,QAAQ;AAAA;AAAA;AAAA,kDAG8B,EAC3C;AAAA,MAAI,KAAK;AAAA,MAAK,QAAQ;AAAA,MAAI,QAAQ;AAAA,MAAU;AAAA,MAAK,QAAQ;AAAA,MAAW,QAAQ,WAAW;AAAA,MAAM,QAAQ;AAAA,MACpG,QAAQ;AAAA,MAAM,QAAQ,YAAY;AAAA,MAAM,QAAQ;AAAA,MAAW,QAAQ,aAAa;AAAA,MAAM;AAAA,IAAU;AAAA,EACtG;AAAA,EAEA,MAAM,UAAU,UAA2B,QAA4B,MAAM,oBAAI,KAAK,GAAkB;AACtG,UAAM,KAAK,MAAM;AACjB,UAAM,QAAQ,YAAY,KAAK,MAAM,WAAW,EAAE,SAAS,OAAO,gBAAgB,KAAK,CAAC;AACxF,UAAM,KAAK,MAAM,MAAM;AACvB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,mBAAW,WAAW,SAAU,MAAK,SAAS,OAAO;AACrD,cAAM,UAAU,KAAK,GAAG,QAAQ,uDAAuD,EACpF,IAAI,KAAK,GAAG;AACf,cAAM,gBAAgB,QAAQ,cAAc,OAAO,QAAQ,WAAW,IAAI;AAC1E,cAAM,aAAa,CAAC,SAChB,gBACA,CAAC,iBAAiB,YAAY,aAAa,QAAQ,KAAK,CAAE,KAAK,YAAY,aAAa,eAAe,KAAK,CAAE,IAC5G,SACA;AACN,aAAK,GAAG,QAAQ;AAAA,0BACI,EAAE,IAAI,cAAc,MAAM,IAAI,YAAY,GAAG,KAAK,GAAG;AACzE,aAAK,GAAG,QAAQ,iEAAiE,EAC9E,IAAI,IAAI,YAAY,GAAG,KAAK,GAAG;AAClC,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,UAA2B,MAAM,oBAAI,KAAK,GAAkB;AAC5E,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM,MAAM;AACvB,WAAK,GAAG,KAAK,iBAAiB;AAC9B,UAAI;AACF,mBAAW,WAAW,SAAU,MAAK,SAAS,OAAO;AACrD,aAAK,GAAG,QAAQ,0EAA0E,EACvF,IAAI,IAAI,YAAY,GAAG,KAAK,GAAG;AAClC,aAAK,GAAG,QAAQ,iEAAiE,EAC9E,IAAI,IAAI,YAAY,GAAG,KAAK,GAAG;AAClC,aAAK,GAAG,KAAK,QAAQ;AAAA,MACvB,SAAS,OAAO;AACd,aAAK,GAAG,KAAK,UAAU;AACvB,cAAM;AAAA,MACR;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAAsB,CAAC,GAAyB;AACzD,UAAM,KAAK,MAAM;AACjB,UAAM,QAAQ,YAAY,KAAK,MAAM,WAAW,KAAK;AACrD,UAAM,gBAAgB,MAAM,SAAS,SAAY,aAAa,MAAM,QAAQ,KAAK,KAAK;AACtF,UAAM,kBAAkB,MAAM,SAAS,SAAY,KAAK,GAAG,QAAQ;AAAA,2EACI,EACpE,IAAI,KAAK,GAAG;AACf,UAAM,YAAY,MAAM,SAAS,SAAY,KAAK,GAAG;AAAA,MACnD;AAAA,IACF,EAAE,IAAI,KAAK,GAAG;AACd,UAAM,YAAY,YAAY,KAAK,MAAM,WAAW;AAAA,MAClD,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB,CAAC;AACD,UAAM,eAAe,WAAW,cAC5B,aAAa,OAAO,UAAU,WAAW,GAAG,SAAS,KAAK,MAC1D;AACJ,UAAM,oBAAoB,MAAM,SAAS,SAAY;AAAA,MACnD,iBAAiB;AAAA,MACjB;AAAA,MACA,iBAAiB,kBAAkB,OAAO,gBAAgB,eAAe,IAAI;AAAA,IAC/E,EAAE,OAAO,CAAC,SAAS,cACjB,YAAY,SAAS,IAAI,YAAY,OAAO,IAAI,YAAY,SAC3D,GAAG;AAIN,UAAM,UAAU,CAAC,aAAa;AAC9B,UAAM,OAAwB,CAAC,KAAK,GAAG;AACvC,QAAI,CAAC,MAAM,QAAQ;AACjB,cAAQ,KAAK,gBAAgB;AAC7B,WAAK,KAAK,YAAY,iBAAiB,GAAG,CAAC;AAAA,IAC7C;AACA,QAAI,CAAC,MAAM,gBAAgB;AACzB,cAAQ,KAAK,sCAAsC;AACnD,WAAK,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,IACpC;AACA,QAAI,MAAM,OAAO,QAAQ;AACvB,cAAQ,KAAK,YAAY,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG;AAChE,WAAK,KAAK,GAAG,MAAM,KAAK;AAAA,IAC1B;AACA,QAAI,MAAM,QAAQ;AAChB,cAAQ,KAAK,UAAU;AACvB,WAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AACA,UAAM,UAAU,MAAM,WAAW;AACjC,QAAI,YAAY,QAAQ;AAAE,cAAQ,KAAK,UAAU;AAAG,WAAK,KAAK,KAAK,MAAM,UAAU,KAAK;AAAA,IAAG,WAClF,YAAY,OAAO;AAC1B,cAAQ,KAAK,2JAA2J;AACxK,WAAK,KAAK,KAAK,MAAM,UAAU,KAAK;AAAA,IACtC,OAAO;AACL,cAAQ,KAAK,uKAAuK;AACpL,WAAK,KAAK,KAAK,MAAM,UAAU,OAAO,KAAK,MAAM,UAAU,KAAK;AAAA,IAClE;AACA,QAAI,MAAM,SAAS;AACjB,cAAQ,KAAK,WAAW;AACxB,WAAK,KAAK,MAAM,OAAO;AAAA,IACzB;AACA,QAAI,MAAM,OAAO;AACf,cAAQ,KAAK,eAAe;AAC5B,WAAK,KAAK,MAAM,KAAK;AAAA,IACvB;AACA,QAAI,MAAM,UAAU;AAClB,cAAQ,KAAK,aAAa;AAC1B,WAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AACA,UAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,MAAM,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG;AACtE,UAAM,OAAO,KAAK,GAAG,QAAQ;AAAA,cACnB,QAAQ,KAAK,OAAO,CAAC,0BAA0B,MAAM,SAAS,SAAS,KAAK,UAAU,EAC7F,IAAI,GAAG,MAAM,KAAK;AACrB,UAAM,WAAW,KAAK,IAAI,CAAC,QAAQ,aAAa,IAAI,YAAY,CAAC;AACjE,UAAM,gBAAgB,MAAM,SAAS,SAAS,CAAC,IAAI,SAAS,SAAS,SAAS,CAAC;AAC/E,QAAI,MAAM,UAAU,SAAS,WAAW,OAAO;AAC7C,aAAO,EAAE,UAAU,QAAQ,gBAAgB,aAAa,cAAc,UAAU,KAAK,IAAI,MAAM,OAAO;AAAA,IACxG;AACA,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,qBAAqB,sBAAsB,MAC/C,aAAa,mBAAmB,KAAK,IACrC,MAAM;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,MAAM,aAA0C;AAC9C,UAAM,KAAK,MAAM;AACjB,UAAM,MAAM,KAAK,GAAG,QAAQ,uDAAuD,EAChF,IAAI,KAAK,GAAG;AACf,WAAO,IAAI,cAAc,OAAO,IAAI,WAAW,IAAI;AAAA,EACrD;AAAA,EAEA,MAAM,UAAU,OAA8B;AAC5C,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM,MAAM,KAAK,GAAG,QAAQ,uDAAuD,EAC3F,IAAI,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC;AAAA,EACvC;AAAA,EAEA,MAAM,YAAY,MAAM,oBAAI,KAAK,GAAkB;AACjD,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM,MAAM,KAAK,GAAG,QAAQ,4DAA4D,EAChG,IAAI,IAAI,YAAY,GAAG,KAAK,GAAG,CAAC;AAAA,EACrC;AAAA,EAEA,MAAM,MAAM,MAAM,oBAAI,KAAK,GAAuB;AAChD,UAAM,KAAK,MAAM;AACjB,UAAM,UAAU,IAAI,YAAY;AAChC,UAAM,SAAS,KAAK,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAWM,EAAE,IAAI,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,KAAK,GAAG;AACpI,UAAM,UAAU,KAAK,GAAG,QAAQ,2HAA2H,EAAE,IAAI,KAAK,GAAG;AACzK,UAAM,QAAQ,KAAK,GAAG,QAAQ,4DAA4D,EACvF,IAAI,KAAK,GAAG;AACf,UAAM,QAAQ,KAAK,GAAG,QAAQ;AAAA;AAAA,yCAEO,EAAE,IAAI,KAAK,GAAG;AACnD,UAAM,gBAAgB,KAAK,kBAAkB;AAC7C,UAAM,cAAc,OAAO,aAAa,OAAO,OAAO,UAAU,IAAI;AACpE,UAAM,kBAAkB,OAAO,OAAO,uBAAuB,CAAC,IAAI,IAC9D,SACA,OAAO,iBAAiB,OAAO,OAAO,cAAc,IAAI;AAC5D,WAAO;AAAA,MACL,SAAS,OAAO,OAAO,WAAW,CAAC;AAAA,MACnC,KAAK,OAAO,OAAO,OAAO,CAAC;AAAA,MAC3B,WAAW,OAAO,OAAO,aAAa,CAAC;AAAA,MACvC,QAAQ,OAAO,OAAO,UAAU,CAAC;AAAA,MACjC,SAAS,OAAO,OAAO,WAAW,CAAC;AAAA,MACnC,QAAQ,OAAO,MAAM,SAAS,CAAC;AAAA,MAC/B,YAAY,MAAM,cAAc,OAAO,MAAM,WAAW,IAAI;AAAA,MAC5D,YAAY,MAAM,eAAe,OAAO,MAAM,YAAY,IAAI;AAAA,MAC9D,WAAW,MAAM,aAAa,OAAO,MAAM,UAAU,IAAI;AAAA,MACzD;AAAA,MACA,YAAY,cAAc,KAAK,IAAI,GAAG,IAAI,QAAQ,IAAI,KAAK,MAAM,WAAW,CAAC,IAAI;AAAA,MACjF;AAAA,MACA,cAAc,kBAAkB,KAAK,IAAI,GAAG,IAAI,QAAQ,IAAI,KAAK,MAAM,eAAe,CAAC,IAAI;AAAA,MAC3F,oBAAoB,OAAO,OAAO,wBAAwB,CAAC;AAAA,MAC3D,kBAAkB,SAAS,aAAa,OAAO,QAAQ,UAAU,IAAI;AAAA,MACrE,aAAa,OAAO,aAAa,OAAO,OAAO,UAAU,IAAI;AAAA,MAC7D,oBAAoB,MAAM,wBAAwB,OAAO,MAAM,qBAAqB,IAAI;AAAA,MACxF,mBAAmB,MAAM,uBAAuB,OAAO,MAAM,oBAAoB,IAAI;AAAA,MACrF,eAAe,MAAM,kBAAkB,OAAO,MAAM,eAAe,IAAI;AAAA,MACvE,gBAAgB,cAAc;AAAA,MAC9B,sBAAsB,cAAc;AAAA,MACpC,yBAAyB,cAAc;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,QAAuB;AAC3B,SAAK,GAAG,MAAM;AAAA,EAChB;AACF;;;ACt9BA,SAAS,SAAS,OAAoC;AACpD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,YAAY,OAAQ,QAAO;AACxE,QAAM,SAAS,OAAQ,MAA+B,MAAM;AAC5D,SAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAC5C;AAEA,SAAS,OAAO,OAAwB;AACtC,MAAI,SAAS,OAAO,UAAU,YAAY,UAAU,OAAO;AACzD,UAAM,OAAQ,MAA6B;AAC3C,QAAI,OAAO,SAAS,YAAY,KAAM,QAAO,KAAK,MAAM,GAAG,GAAG;AAAA,EAChE;AACA,SAAO,iBAAiB,QAAQ,MAAM,KAAK,MAAM,GAAG,GAAG,IAAI;AAC7D;AAEO,SAAS,qBAAqB,OAAyB;AAC5D,QAAM,SAAS,SAAS,KAAK;AAC7B,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,CAAC,iBAAiB,iBAAiB,EAAE,SAAS,IAAI,EAAG,QAAO;AAChE,MAAI,CAAC,iBAAiB,wBAAwB,6BAA6B,sBAAsB,qBAAqB,gBAAgB,6BAA6B,4BAA4B,6BAA6B,EAAE,SAAS,IAAI,EAAG,QAAO;AACrP,SAAO,WAAW,KAAK,WAAW,OAAO,WAAW,OAClD,WAAW,OAAQ,WAAW,UAAa,UAAU;AACzD;AAEA,SAAS,YAAY,OAAuB,WAAkC;AAC5E,SAAO,EAAE,GAAG,OAAO,UAAU,KAAK,UAAU;AAC9C;AAEO,IAAM,qBAAN,MAAgD;AAAA,EAqBrD,YACmB,MACA,QACA,WACjB,UAAqC,CAAC,GACtC;AAJiB;AACA;AACA;AAbnB,SAAQ,UAAU;AAIlB,SAAiB,kBAAkB,IAAI,gBAAgB;AAEvD,SAAQ,gBAAgB;AACxB,SAAQ,kBAAkC;AASxC,SAAK,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC1C,SAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,SAAK,cAAc,QAAQ,eAAe;AAC1C,SAAK,aAAa,QAAQ,cAAc,IAAI;AAC5C,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,cAAc,KAAK,IAAI,KAAK,cAAc,GAAG,QAAQ,eAAe,GAAM;AAC/E,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,YAAY,QAAQ,aAAa;AACtC,SAAK,YAAY,KAAK,WAAW,SAAS;AAAA,EAC5C;AAAA,EAEA,MAAM,aAA4B;AAEhC,UAAM,KAAK,KAAK,WAAW;AAC3B,QAAI,KAAK,SAAU,MAAK,mBAAmB;AAAA,EAC7C;AAAA;AAAA,EAGA,cAAc,OAAyC;AACrD,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEQ,qBAA2B;AACjC,QAAI,KAAK,WAAY;AACrB,SAAK,aAAa,KAAK,cAAc,EAAE,MAAM,CAAC,UAAU;AACtD,WAAK,kBAAkB;AACvB,WAAK,YAAY;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,KAAK,SAAgC;AACjD,QAAI,KAAK,QAAS;AAClB,QAAI,KAAK,eAAe;AACtB,WAAK,gBAAgB;AACrB;AAAA,IACF;AACA,UAAM,IAAI,QAAc,CAAC,YAAY;AACnC,WAAK,OAAO;AACZ,WAAK,YAAY,WAAW,SAAS,OAAO;AAC5C,WAAK,UAAU,QAAQ;AAAA,IACzB,CAAC;AACD,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACnB;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,KAAK,MAAM;AACb,UAAI,KAAK,UAAW,cAAa,KAAK,SAAS;AAC/C,WAAK,KAAK;AAAA,IACZ,MACK,MAAK,gBAAgB;AAAA,EAC5B;AAAA,EAEQ,MAAM,OAAuB;AACnC,QAAI,KAAK,2BAA2B,MAAO,QAAO,KAAK;AACvD,UAAM,QAAQ,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACtE,UAAM,QAAQ,OAAO,OAAO,IAAI,MAAM,6BAA6B,MAAM,OAAO,EAAE,GAAG;AAAA,MACnF,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AACD,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,KAAK,gBAAiB,OAAM,KAAK;AAAA,EACvC;AAAA,EAEA,MAAc,gBAA+B;AAC3C,QAAI,WAAW;AACf,UAAM,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC;AAC7B,WAAO,CAAC,KAAK,SAAS;AACpB,WAAK,YAAY;AACjB,YAAM,SAAS,MAAM,KAAK,KAAK,EAAE,SAAS,KAAK,UAAU,GAAG,QAAQ,KAAK,gBAAgB,OAAO,CAAC;AACjG,UAAI,KAAK,QAAS;AAClB,UAAI,OAAO,mBAAmB,YAAY,CAAC,KAAK,gBAAgB;AAC9D,aAAK,YAAY;AACjB,cAAM,KAAK,KAAK,KAAK,WAAW;AAChC;AAAA,MACF;AACA,UAAI,OAAO,qBAAqB,OAAO;AACrC,aAAK,kBAAkB,OAAO;AAAA,UAC5B,IAAI,MAAM,+CAA+C,OAAO,aAAa,YAAY,EAAE;AAAA,UAC3F,EAAE,MAAM,OAAO,aAAa,aAAa;AAAA,QAC3C;AACA,aAAK,YAAY;AACjB;AAAA,MACF;AACA,iBAAW,OAAO,SAAS,IAAI,KAAK,IAAI,WAAW,GAAG,EAAE;AACxD,WAAK,YAAY,OAAO,SAAS,SAAS;AAC1C,YAAM,KAAK,KAAK,OAAO,UAAU,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG,WAAW,CAAC,CAAC,IAAI,KAAK,WAAW;AAAA,IAC/F;AAAA,EACF;AAAA,EAEA,MAAM,eAA8B;AAClC,UAAM,KAAK,aAAa;AAAA,EAC1B;AAAA,EAEA,MAAc,aAAa,QAAqC;AAC9D,QAAI,CAAC,KAAK,aAAa;AACrB,WAAK,cAAc,KAAK,OAAO,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU;AACrE,aAAK,cAAc;AACnB,cAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,QAAI;AACF,YAAM,KAAK;AACX,WAAK,kBAAkB;AAAA,IACzB,SAAS,OAAO;AACd,WAAK,kBAAkB;AACvB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,gBAAgB,WAA4B,kBAAkB,MAAY;AAChF,QACE,UAAU,cAAc,KAAK,UAAU,aACvC,UAAU,UAAU,KAAK,UAAU,SAClC,mBAAmB,UAAU,aAAa,KAAK,UAAU,UAC1D;AACA,YAAM,QAAQ,IAAI,MAAM,sDAAsD;AAC9E,aAAO,OAAO,OAAO,EAAE,QAAQ,KAAK,MAAM,qBAAqB,CAAC;AAChE,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,MAAM,UAA0B;AACtC,UAAM,cAAc,KAAK,IAAI,KAAK,YAAY,KAAK,cAAc,KAAK,KAAK,IAAI,UAAU,EAAE,CAAC;AAC5F,UAAM,SAAS,MAAM,KAAK,OAAO,IAAI;AACrC,WAAO,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,MAAM,CAAC;AAAA,EACrD;AAAA,EAEQ,UAAU,QAA+B;AAC/C,WAAO,KAAK,WAAW,QAAQ,QAAQ,OAAO;AAAA,EAChD;AAAA,EAEA,MAAc,SAAS,QAA4C;AACjE,UAAM,KAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AACtC,QAAI;AACF,UAAI,KAAK,eAAgB,OAAM,KAAK,KAAK,iBAAiB,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAAA,UACpF,OAAM,KAAK,KAAK,kBAAkB;AAAA,IACzC,SAAS,OAAO;AACd,UAAI,iBAAiB,8BAChB,iBAAiB,6BACjB,iBAAiB,wBAAyB,QAAO,EAAE,OAAO,UAAU,MAAM;AAC/E,YAAM;AAAA,IACR;AACA,QAAI;AACF,YAAM,KAAK,aAAa,MAAM;AAAA,IAChC,SAAS,OAAO;AACd,YAAM,KAAK,KAAK,UAAU,OAAO,KAAK,CAAC;AACvC,aAAO;AAAA,QACL,OAAO;AAAA,QACP,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QAC/D,WAAW,qBAAqB,KAAK;AAAA,MACvC;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,eAAS,MAAM,KAAK,KAAK,UAAU,KAAK,IAAI,GAAG,KAAK,SAAS,KAAK,cAAc;AAAA,IAClF,SAAS,OAAO;AACd,UAAI,iBAAiB,8BAChB,iBAAiB,6BACjB,iBAAiB,wBAAyB,QAAO,EAAE,OAAO,UAAU,MAAM;AAC/E,YAAM;AAAA,IACR;AACA,QAAI,CAAC,OAAQ,QAAO,EAAE,OAAO,QAAQ;AACrC,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,OAAO,cAAc,OAAO,OAAO,EAAE,OAAO,CAAC;AACvE,WAAK,kBAAkB;AACvB,UAAI,OAAO,QAAQ,OAAO,OAAO,MAAM,IAAI;AACzC,cAAM,QAAQ,IAAI,MAAM,oDAAoD;AAC5E,eAAO,OAAO,OAAO,EAAE,QAAQ,KAAK,MAAM,uBAAuB,CAAC;AAClE,cAAM,KAAK,KAAK,MAAM,QAAQ,OAAO,KAAK,GAAG,KAAK,IAAI,CAAC;AACvD,eAAO,EAAE,OAAO,WAAW,OAAO,WAAW,OAAO,MAAM,GAAG;AAAA,MAC/D;AACA,UAAI,uBAAuB,OAAO,OAAO,MAAM,OAAO,aAAa;AACjE,cAAM,QAAQ,IAAI,MAAM,uDAAuD;AAC/E,eAAO,OAAO,OAAO,EAAE,QAAQ,KAAK,MAAM,uBAAuB,CAAC;AAClE,cAAM,KAAK,KAAK,MAAM,QAAQ,OAAO,KAAK,GAAG,KAAK,IAAI,CAAC;AACvD,eAAO,EAAE,OAAO,WAAW,OAAO,WAAW,OAAO,MAAM,GAAG;AAAA,MAC/D;AACA,UAAI;AACF,cAAM,KAAK,KAAK,OAAO,QAAQ,OAAO,SAAS,KAAK,IAAI,CAAC;AAAA,MAC3D,SAAS,OAAO;AACd,eAAO,EAAE,OAAO,SAAS,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpD;AACA,aAAO,EAAE,OAAO,aAAa,QAAQ,WAAW,OAAO,MAAM,GAAG;AAAA,IAClE,SAAS,OAAO;AACd,YAAM,SAAS,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACvE,WAAK,kBAAkB,qBAAqB,KAAK,IAAI,QAAQ;AAC7D,UAAI,KAAK,UAAU,MAAM,GAAG;AAC1B,cAAM,KAAK,KAAK,MAAM,QAAQ,qBAAqB,KAAK,IAAI,CAAC;AAC7D,eAAO,EAAE,OAAO,SAAS,OAAO,QAAQ,WAAW,KAAK;AAAA,MAC1D;AACA,UAAI,qBAAqB,KAAK,GAAG;AAC/B,cAAM,KAAK,KAAK;AAAA,UACd;AAAA,UACA,OAAO,KAAK;AAAA,UACZ,IAAI,KAAK,KAAK,IAAI,EAAE,QAAQ,IAAI,KAAK,MAAM,OAAO,QAAQ,CAAC;AAAA,QAC7D;AACA,eAAO,EAAE,OAAO,SAAS,OAAO,QAAQ,WAAW,KAAK;AAAA,MAC1D;AACA,YAAM,KAAK,KAAK,MAAM,QAAQ,OAAO,KAAK,GAAG,KAAK,IAAI,CAAC;AACvD,aAAO,EAAE,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,MAAM,GAAG;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,SAAoD;AACtE,SAAK,cAAc;AACnB,SAAK,gBAAgB,EAAE,WAAW,QAAQ,WAAW,OAAO,QAAQ,OAAO,GAAG,KAAK;AAGnF,UAAM,KAAK,KAAK,kBAAkB;AAClC,QAAI;AACJ,QAAI;AACF,YAAM,KAAK,aAAa;AAAA,IAC1B,SAAS,OAAO;AACd,UAAI,CAAC,qBAAqB,KAAK,EAAG,OAAM;AACxC,oBAAc;AAAA,IAChB;AACA,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,SAAS,KAAK,IAAI,CAAC;AAC1D,UAAM,QAAQ,OAAO;AACrB,QAAI,aAAa;AACf,YAAM,KAAK,KAAK,UAAU,OAAO,WAAW,CAAC;AAC7C,WAAK,cAAc;AACnB,aAAO;AAAA,QACL,SAAS,YAAY,OAAO,KAAK,IAAI,EAAE,YAAY,CAAC;AAAA,QACpD,SAAS,OAAO;AAAA,QAChB,aAAa;AAAA,QACb,eAAe;AAAA,MACjB;AAAA,IACF;AACA,UAAM,UAAU,MAAM,KAAK,SAAS;AACpC,QAAI,QAAQ,UAAU,QAAS,OAAM,QAAQ;AAC7C,QAAI,QAAQ,UAAU,aAAa,QAAQ,cAAc,MAAM,GAAI,OAAM,QAAQ;AACjF,QAAI,QAAQ,UAAU,WAAW,CAAC,QAAQ,UAAW,OAAM,QAAQ;AACnE,QAAI,QAAQ,UAAU,eAAe,QAAQ,cAAc,MAAM,IAAI;AACnE,aAAO,EAAE,GAAG,QAAQ,QAAQ,aAAa,aAAa,eAAe,KAAK;AAAA,IAC5E;AACA,SAAK,cAAc;AACnB,WAAO;AAAA,MACL,SAAS,YAAY,OAAO,KAAK,IAAI,EAAE,YAAY,CAAC;AAAA,MACpD,SAAS,OAAO;AAAA,MAChB,aAAa;AAAA,MACb,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,SAAsG;AACzH,SAAK,cAAc;AACnB,SAAK,gBAAgB,EAAE,WAAW,QAAQ,WAAW,OAAO,QAAQ,OAAO,GAAG,KAAK;AACnF,UAAM,KAAK,KAAK,kBAAkB;AAClC,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,SAAS,KAAK,IAAI,CAAC;AAC1D,WAAO;AAAA,MACL,SAAS,YAAY,OAAO,OAAO,KAAK,IAAI,EAAE,YAAY,CAAC;AAAA,MAC3D,SAAS,OAAO;AAAA,MAChB,aAAa;AAAA,MACb,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAc,KAAK,UAAkB,QAKlC;AACD,QAAI,SAAS;AACb,aAAS,aAAa,GAAG,aAAa,UAAU,cAAc,GAAG;AAC/D,UAAI,KAAK,UAAU,MAAM,EAAG;AAC5B,YAAM,SAAS,MAAM,KAAK,KAAK,WAAW;AAC1C,UAAI;AACJ,UAAI;AACF,cAAM,KAAK,aAAa,MAAM;AAC9B,eAAO,MAAM,KAAK,OAAO,aAAa,KAAK,WAAW;AAAA,UACpD,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,gBAAgB;AAAA,UAChB,SAAS;AAAA,QACX,GAAG,EAAE,OAAO,CAAC;AACb,aAAK,kBAAkB;AAAA,MACzB,SAAS,OAAO;AACd,aAAK,kBAAkB,qBAAqB,KAAK,IAAI,QAAQ;AAC7D,cAAM,KAAK,KAAK,UAAU,OAAO,KAAK,CAAC;AACvC,eAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,UAC/D,WAAW,qBAAqB,KAAK;AAAA,QACvC;AAAA,MACF;AACA,UAAI;AACF,cAAM,KAAK,KAAK,UAAU,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,CAAC;AAAA,MAClE,SAAS,OAAO;AACd,cAAM,KAAK,MAAM,KAAK;AAAA,MACxB;AACA,gBAAU,KAAK,SAAS;AACxB,UAAI,KAAK,SAAS,SAAS,OAAO,CAAC,KAAK,UAAU,KAAK,WAAW,OAAQ;AAAA,IAC5E;AACA,WAAO,EAAE,QAAQ,MAAM,OAAO;AAAA,EAChC;AAAA,EAEA,MAAM,KAAK,UAAyE,CAAC,GAAwB;AAC3G,SAAK,cAAc;AACnB,UAAM,KAAK,KAAK,WAAW;AAC3B,UAAM,KAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AACtC,UAAM,UAAU,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,QAAQ,WAAW,GAAG,GAAG,CAAC,GAAG,GAAK;AAC/E,UAAM,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,QAAQ,YAAY,EAAE,GAAG,CAAC,GAAG,GAAG;AAC9E,QAAI,SAAS;AACb,QAAI,eAAe;AACnB,QAAI,SAAS;AACb,QAAI;AACJ,QAAI;AAEJ,QAAI,QAAQ,QAAQ,SAAS;AAC3B,YAAMC,SAAQ,MAAM,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC;AAC9C,aAAO;AAAA,QACL,QAAQ;AAAA,QAAO,QAAQ;AAAA,QAAG,cAAc;AAAA,QAAG,QAAQ;AAAA,QACnD,SAASA,OAAM;AAAA,QAAS,SAASA,OAAM;AAAA,QAAS,QAAQA,OAAM;AAAA,QAC9D,QAAQA,OAAM;AAAA,QAAY,cAAcA,OAAM;AAAA,QAC9C,WAAW;AAAA,QAAqB,kBAAkB;AAAA,MACpD;AAAA,IACF;AAEA,aAAS,QAAQ,GAAG,QAAQ,SAAS,SAAS,GAAG;AAC/C,UAAI,KAAK,UAAU,QAAQ,MAAM,EAAG;AACpC,YAAM,SAAS,MAAM,KAAK,SAAS,QAAQ,MAAM;AACjD,UAAI,OAAO,UAAU,QAAS;AAC9B,UAAI,OAAO,UAAU,aAAa;AAChC,kBAAU;AACV,YAAI,CAAC,OAAO,OAAO,QAAS,iBAAgB;AAC5C;AAAA,MACF;AACA,UAAI,OAAO,UAAU,QAAS,OAAM,OAAO;AAC3C,UAAI,OAAO,UAAU,UAAU;AAC7B,oBAAY,OAAO,OAAO,KAAK;AAC/B;AAAA,MACF;AACA,kBAAY,OAAO,OAAO,KAAK;AAC/B,yBAAmB,OAAO,UAAU,UAAU,OAAO,YAAY;AACjE,UAAI,OAAO,UAAU,QAAS,UAAS;AACvC,UAAI,OAAO,UAAU,QAAS;AAAA,IAChC;AAEA,QAAI,SAAS;AACb,QAAI,WAAW,KAAK,CAAC,KAAK,UAAU,QAAQ,MAAM,KAAK,CAAC,WAAW,WAAW,mBAAmB,GAAG;AAClG,YAAM,OAAO,MAAM,KAAK,KAAK,UAAU,QAAQ,MAAM;AACrD,eAAS,UAAU,KAAK;AACxB,eAAS,KAAK;AACd,UAAI,KAAK,OAAO;AACd,oBAAY,OAAO,KAAK,KAAK;AAC7B,2BAAmB,KAAK;AAAA,MAC1B;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC;AAC9C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,cAAc,MAAM;AAAA,MACpB,WAAW,aAAa,MAAM;AAAA,MAC9B;AAAA,MACA,gBAAgB,MAAM;AAAA,MACtB,sBAAsB,MAAM;AAAA,MAC5B,yBAAyB,MAAM;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,WAA4B,QAAsB,CAAC,GAA+B;AACnG,SAAK,cAAc;AACnB,SAAK,gBAAgB,SAAS;AAC9B,UAAM,KAAK,KAAK,EAAE,SAAS,IAAI,UAAU,EAAE,CAAC;AAC5C,QAAI;AACJ,QAAI;AACF,YAAM,KAAK,aAAa;AACxB,mBAAa,MAAM,KAAK,OAAO,aAAa,WAAW,KAAK;AAAA,IAC9D,SAAS,OAAO;AACd,YAAM,YAAY,qBAAqB,KAAK;AAC5C,WAAK,kBAAkB,YAAY,QAAQ;AAC3C,UAAI,CAAC,UAAW,OAAM;AACtB,YAAM,KAAK,KAAK,UAAU,OAAO,KAAK,CAAC;AACvC,UAAI;AACJ,UAAI;AACJ,UAAI;AACF,iBAAS,MAAM,KAAK,KAAK,KAAK,KAAK;AACnC,gBAAQ,MAAM,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,MAC1C,SAAS,YAAY;AACnB,cAAM,KAAK,MAAM,UAAU;AAAA,MAC7B;AACA,aAAO;AAAA,QAAE,GAAG;AAAA,QAAQ,QAAQ;AAAA,QAAS,OAAO;AAAA,QAAM,UAAU;AAAA,QAC1D,kBAAmB,MAAM,gBAAgB,MAAM,iBAAiB,SAAU,sBAAsB,QAAQ,YAAY;AAAA,QACpH,cAAc,MAAM;AAAA,MAAW;AAAA,IACnC;AACA,QAAI;AACF,WAAK,kBAAkB;AACvB,YAAM,KAAK,KAAK,YAAY,WAAW,UAAU,KAAK,IAAI,CAAC;AAC3D,YAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC;AAC9C,aAAO;AAAA,QAAE,GAAG;AAAA,QAAY,QAAQ;AAAA,QAAU,OAAO;AAAA,QAAO,UAAU;AAAA,QAChE,kBAAkB;AAAA,QAAiB,cAAc,MAAM;AAAA,MAAW;AAAA,IACtE,SAAS,OAAO;AACd,YAAM,KAAK,MAAM,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,WACA,YACA,QACiB;AACjB,SAAK,gBAAgB,WAAW,KAAK;AACrC,UAAM,KAAK,aAAa;AACxB,WAAO,KAAK,OAAO,cAAc,WAAW,YAAY,MAAM;AAAA,EAChE;AAAA,EAEA,MAAM,cAAc,WAA4B,SAAuD;AACrG,SAAK,gBAAgB,SAAS;AAC9B,UAAM,KAAK,aAAa;AACxB,WAAO,KAAK,OAAO,cAAc,WAAW,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,cACJ,WACA,YACA,YACA,SACgC;AAChC,SAAK,gBAAgB,SAAS;AAC9B,UAAM,KAAK,aAAa;AACxB,WAAO,KAAK,OAAO,cAAc,WAAW,YAAY,YAAY,OAAO;AAAA,EAC7E;AAAA,EAEA,MAAM,eACJ,WACA,YACA,YACA,OACA,OACA,cACgC;AAChC,SAAK,gBAAgB,SAAS;AAC9B,UAAM,KAAK,aAAa;AACxB,WAAO,KAAK,OAAO,eAAe,WAAW,YAAY,YAAY,OAAO,KAAK;AAAA,EACnF;AAAA,EAEA,MAAM,eAAe,WAA4B,QAAmD,CAAC,GAAG;AAAE,SAAK,gBAAgB,SAAS;AAAG,UAAM,KAAK,aAAa;AAAG,QAAG,CAAC,KAAK,OAAO,eAAgB,OAAM,IAAI,MAAM,mCAAmC;AAAG,WAAO,KAAK,OAAO,eAAe,WAAU,KAAK;AAAA,EAAG;AAAA,EAChT,MAAM,mBAAmB,WAA2B,IAAU,QAAqC,CAAC,GAAG;AAAE,SAAK,gBAAgB,SAAS;AAAE,UAAM,KAAK,aAAa;AAAE,QAAG,CAAC,KAAK,OAAO,mBAAmB,OAAM,IAAI,MAAM,yCAAyC;AAAE,WAAO,KAAK,OAAO,mBAAmB,WAAU,IAAG,KAAK;AAAA,EAAG;AAAA,EAC5T,MAAM,eAAe,WAA0B,IAAU;AAAC,SAAK,gBAAgB,SAAS;AAAE,UAAM,KAAK,aAAa;AAAE,QAAG,CAAC,KAAK,OAAO,eAAe,OAAM,IAAI,MAAM,wCAAwC;AAAE,WAAO,KAAK,OAAO,eAAe,WAAU,EAAE;AAAA,EAAE;AAAA,EAC7P,MAAM,gBAAgB,WAA0B,IAAU;AAAC,SAAK,gBAAgB,SAAS;AAAE,UAAM,KAAK,aAAa;AAAE,QAAG,CAAC,KAAK,OAAO,gBAAgB,OAAM,IAAI,MAAM,mCAAmC;AAAE,WAAO,KAAK,OAAO,gBAAgB,WAAU,EAAE;AAAA,EAAE;AAAA,EAE3P,MAAM,YAAY,WAA4B,UAA2C,CAAC,GAA6B;AACrH,SAAK,gBAAgB,SAAS;AAC9B,UAAM,OAAO,MAAM,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC;AAC7C,QAAI;AACJ,QAAI;AACJ,QAAI,QAAQ,SAAS,SAAS;AAC5B,UAAI;AACF,YAAI,KAAK,OAAO,YAAa,UAAS,MAAM,KAAK,OAAO,YAAY,SAAS;AAAA,YACxE,OAAM,KAAK,aAAa;AAC7B,aAAK,kBAAkB;AAAA,MACzB,SAAS,OAAO;AACd,cAAM,YAAY,qBAAqB,KAAK;AAC5C,aAAK,kBAAkB,YAAY,QAAQ;AAC3C,sBAAc,OAAO,KAAK;AAAA,MAC5B;AAAA,IACF;AACA,WAAO;AAAA,MACL,eAAe,QAAQ,iBAAiB;AAAA,MACxC,mBAAmB,QAAQ,qBAAqB;AAAA,MAChD,SAAS,QAAQ,WAAW;AAAA,MAC5B,SAAS,QAAQ,WAAW;AAAA,MAC5B,UAAU,QAAQ,YAAY;AAAA,MAC9B,MAAM,QAAQ,QAAQ;AAAA,MACtB,WAAW,QAAQ,aAAa;AAAA,MAChC,mBAAmB,QAAQ;AAAA,MAC3B,KAAK,QAAQ,OAAO;AAAA,MACpB,WAAW,QAAQ,aAAa;AAAA,MAChC,eAAe,QAAQ,iBAAiB;AAAA,MACxC,aAAa,QAAQ;AAAA,MACrB,YAAY,QAAQ,cAAc;AAAA,MAClC,WAAW,EAAE,WAAW,UAAU,WAAW,OAAO,UAAU,MAAM;AAAA,MACpE,iBAAiB,QAAQ,SAAS,UAAU,KAAK,kBAAkB;AAAA,MACnE,eAAe,KAAK;AAAA,MACpB,eAAe,KAAK;AAAA,MACpB,gBAAgB,KAAK;AAAA,MACrB,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,cAAc,KAAK;AAAA,MACnB,mBAAmB,KAAK;AAAA,MACxB,kBAAkB,KAAK;AAAA,MACvB,uBAAuB,KAAK;AAAA,MAC5B,oBAAoB,KAAK;AAAA,MACzB,0BAA0B,KAAK;AAAA,MAC/B,wBAAwB,KAAK;AAAA,MAC7B,mBAAmB,KAAK;AAAA,MACxB,oBAAoB,KAAK;AAAA,MACzB,mBAAmB,KAAK;AAAA,MACxB,mBAAmB,KAAK;AAAA,MACxB,eAAe,KAAK,kBAAkB,WAAW,KAAK;AAAA,MACtD,eAAe,KAAK,kBAAkB,OAAO,KAAK,eAAe,IAAI;AAAA,MACrE;AAAA,MACA,gBAAgB,KAAK;AAAA,MACrB,sBAAsB,KAAK;AAAA,MAC3B,yBAAyB,KAAK;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,WAA4B,SAAiB,aAAsB,eAAyB,CAAC,GAAG;AAC9G,SAAK,gBAAgB,SAAS;AAC9B,UAAM,KAAK,aAAa;AACxB,QAAI,CAAC,KAAK,OAAO,UAAW,OAAM,IAAI,MAAM,kDAAkD;AAC9F,WAAO,KAAK,OAAO,UAAU,WAAW,SAAS,aAAa,YAAY;AAAA,EAC5E;AAAA,EAEA,MAAM,aAAa,WAA4B;AAC7C,SAAK,gBAAgB,SAAS;AAC9B,UAAM,KAAK,aAAa;AACxB,QAAI,CAAC,KAAK,OAAO,aAAc,OAAM,IAAI,MAAM,kDAAkD;AACjG,WAAO,KAAK,OAAO,aAAa,SAAS;AAAA,EAC3C;AAAA,EAEA,MAAM,QAAuB;AAC3B,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,gBAAgB,MAAM,IAAI,MAAM,yBAAyB,CAAC;AAC/D,QAAI,KAAK,UAAW,cAAa,KAAK,SAAS;AAC/C,SAAK,OAAO;AACZ,UAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,MACvC,KAAK,OAAO,QAAQ,KAAK,QAAQ,QAAQ;AAAA,MACzC,KAAK,cAAc,QAAQ,QAAQ;AAAA,IACrC,CAAC;AACD,UAAM,WAAW,QACd,OAAO,CAAC,WAA4C,OAAO,WAAW,UAAU,EAChF,IAAI,CAAC,WAAW,OAAO,MAAM;AAChC,QAAI,KAAK,gBAAiB,UAAS,KAAK,KAAK,eAAe;AAC5D,QAAI,KAAK,WAAW;AAClB,UAAI;AAAE,cAAM,KAAK,KAAK,MAAM;AAAA,MAAG,SAAS,OAAO;AAAE,iBAAS,KAAK,KAAK;AAAA,MAAG;AAAA,IACzE;AACA,QAAI,SAAS,WAAW,EAAG,OAAM,SAAS,CAAC;AAC3C,QAAI,SAAS,SAAS,EAAG,OAAM,OAAO,OAAO,IAAI,MAAM,2CAA2C,GAAG,EAAE,QAAQ,SAAS,CAAC;AAAA,EAC3H;AACF;","names":["require","stats"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|