@claritylabs/cl-sdk 3.2.13 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/sqlite/index.ts","../src/storage/sqlite/migrations.ts","../src/storage/sqlite/document-store.ts","../src/core/concurrency.ts","../src/storage/sqlite/memory-store.ts","../src/source/schemas.ts","../src/schemas/enums.ts","../src/source/policy-types.ts","../src/source/retrieval.ts","../src/storage/sqlite/source-store.ts"],"sourcesContent":["import type { EmbedText } from \"../../core/types\";\nimport type { DocumentStore } from \"../interfaces\";\nimport type { MemoryStore } from \"../interfaces\";\nimport type { SourceStore } from \"../../source\";\nimport { CREATE_TABLES } from \"./migrations\";\nimport { createSqliteDocumentStore } from \"./document-store\";\nimport { createSqliteMemoryStore } from \"./memory-store\";\nimport { createSqliteSourceStore } from \"./source-store\";\n\nexport { createSqliteDocumentStore } from \"./document-store\";\nexport { createSqliteMemoryStore } from \"./memory-store\";\nexport { createSqliteSourceStore } from \"./source-store\";\n\nexport interface SqliteStoreOptions {\n path: string;\n embed: EmbedText;\n}\n\nexport function createSqliteStore(options: SqliteStoreOptions): {\n documents: DocumentStore;\n memory: MemoryStore;\n source: SourceStore;\n close: () => void;\n} {\n // Dynamic import to keep better-sqlite3 optional\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const BetterSqlite3 = require(\"better-sqlite3\");\n const db = new BetterSqlite3(options.path);\n\n db.pragma(\"journal_mode = WAL\");\n db.pragma(\"foreign_keys = ON\");\n db.exec(CREATE_TABLES);\n\n return {\n documents: createSqliteDocumentStore(db),\n memory: createSqliteMemoryStore(db, options.embed),\n source: createSqliteSourceStore(db, options.embed),\n close: () => db.close(),\n };\n}\n\nexport type { DocumentStore, MemoryStore } from \"../interfaces\";\nexport type { SourceStore } from \"../../source\";\n","export const CREATE_TABLES = `\nCREATE TABLE IF NOT EXISTS documents (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n data TEXT NOT NULL,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE TABLE IF NOT EXISTS chunks (\n id TEXT PRIMARY KEY,\n document_id TEXT NOT NULL,\n type TEXT NOT NULL,\n text TEXT NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n embedding BLOB,\n FOREIGN KEY (document_id) REFERENCES documents(id) ON DELETE CASCADE\n);\n\nCREATE TABLE IF NOT EXISTS conversation_turns (\n id TEXT PRIMARY KEY,\n conversation_id TEXT NOT NULL,\n role TEXT NOT NULL,\n content TEXT NOT NULL,\n tool_name TEXT,\n tool_result TEXT,\n timestamp INTEGER NOT NULL,\n embedding BLOB\n);\n\nCREATE TABLE IF NOT EXISTS source_spans (\n id TEXT PRIMARY KEY,\n document_id TEXT NOT NULL,\n source_kind TEXT,\n chunk_id TEXT,\n kind TEXT NOT NULL,\n text TEXT NOT NULL,\n hash TEXT NOT NULL,\n text_hash TEXT,\n page_start INTEGER,\n page_end INTEGER,\n section_id TEXT,\n form_number TEXT,\n source_unit TEXT,\n parent_span_id TEXT,\n table_location TEXT,\n location TEXT,\n bbox TEXT,\n metadata TEXT NOT NULL DEFAULT '{}',\n embedding BLOB\n);\n\nCREATE TABLE IF NOT EXISTS source_chunks (\n id TEXT PRIMARY KEY,\n document_id TEXT NOT NULL,\n source_span_ids TEXT NOT NULL,\n text TEXT NOT NULL,\n text_hash TEXT NOT NULL,\n page_start INTEGER,\n page_end INTEGER,\n metadata TEXT NOT NULL DEFAULT '{}'\n);\n\nCREATE INDEX IF NOT EXISTS idx_chunks_document_id ON chunks(document_id);\nCREATE INDEX IF NOT EXISTS idx_chunks_type ON chunks(type);\nCREATE INDEX IF NOT EXISTS idx_turns_conversation_id ON conversation_turns(conversation_id);\nCREATE INDEX IF NOT EXISTS idx_turns_timestamp ON conversation_turns(timestamp);\nCREATE INDEX IF NOT EXISTS idx_source_spans_document_id ON source_spans(document_id);\nCREATE INDEX IF NOT EXISTS idx_source_spans_chunk_id ON source_spans(chunk_id);\nCREATE INDEX IF NOT EXISTS idx_source_chunks_document_id ON source_chunks(document_id);\n`;\n","import type Database from \"better-sqlite3\";\nimport type { DocumentStore } from \"../interfaces\";\nimport type { InsuranceDocument } from \"../../schemas/document\";\nimport type { DocumentFilters } from \"../chunk-types\";\n\nexport function createSqliteDocumentStore(db: Database.Database): DocumentStore {\n return {\n async save(doc: InsuranceDocument): Promise<void> {\n db.prepare(\"INSERT OR REPLACE INTO documents (id, type, data) VALUES (?, ?, ?)\").run(\n doc.id, doc.type, JSON.stringify(doc),\n );\n },\n\n async get(id: string): Promise<InsuranceDocument | null> {\n const row = db.prepare(\"SELECT data FROM documents WHERE id = ?\").get(id) as { data: string } | undefined;\n return row ? JSON.parse(row.data) : null;\n },\n\n async query(filters: DocumentFilters): Promise<InsuranceDocument[]> {\n let sql = \"SELECT data FROM documents WHERE 1=1\";\n const params: unknown[] = [];\n\n if (filters.type) {\n sql += \" AND type = ?\";\n params.push(filters.type);\n }\n if (filters.carrier) {\n sql += \" AND json_extract(data, '$.carrier') LIKE ?\";\n params.push(`%${filters.carrier}%`);\n }\n if (filters.insuredName) {\n sql += \" AND json_extract(data, '$.insuredName') LIKE ?\";\n params.push(`%${filters.insuredName}%`);\n }\n if (filters.policyNumber) {\n sql += \" AND json_extract(data, '$.policyNumber') = ?\";\n params.push(filters.policyNumber);\n }\n if (filters.quoteNumber) {\n sql += \" AND json_extract(data, '$.quoteNumber') = ?\";\n params.push(filters.quoteNumber);\n }\n\n const rows = db.prepare(sql).all(...params) as { data: string }[];\n return rows.map((r) => JSON.parse(r.data));\n },\n\n async delete(id: string): Promise<void> {\n db.prepare(\"DELETE FROM documents WHERE id = ?\").run(id);\n },\n };\n}\n","/**\n * Concurrency limiter — returns a function that wraps async tasks\n * so at most `concurrency` run simultaneously.\n */\nexport function pLimit(concurrency: number) {\n const maxConcurrency = Number.isFinite(concurrency) ? Math.max(1, Math.floor(concurrency)) : 1;\n let active = 0;\n const queue: Array<() => void> = [];\n\n function next() {\n if (queue.length > 0 && active < maxConcurrency) {\n active++;\n queue.shift()!();\n }\n }\n\n return <T>(fn: () => Promise<T>): Promise<T> =>\n new Promise<T>((resolve, reject) => {\n const run = () => {\n fn().then(resolve, reject).finally(() => {\n active--;\n next();\n });\n };\n queue.push(run);\n next();\n });\n}\n","import type Database from \"better-sqlite3\";\nimport type { MemoryStore } from \"../interfaces\";\nimport type { DocumentChunk, ConversationTurn, ChunkFilter } from \"../chunk-types\";\nimport type { EmbedText } from \"../../core/types\";\nimport { pLimit } from \"../../core/concurrency\";\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n\nexport function createSqliteMemoryStore(db: Database.Database, embed: EmbedText): MemoryStore {\n const limit = pLimit(4);\n\n return {\n async addChunks(chunks: DocumentChunk[]): Promise<void> {\n const stmt = db.prepare(\"INSERT OR REPLACE INTO chunks (id, document_id, type, text, metadata, embedding) VALUES (?, ?, ?, ?, ?, ?)\");\n const insertMany = db.transaction((items: DocumentChunk[]) => {\n for (const chunk of items) {\n stmt.run(chunk.id, chunk.documentId, chunk.type, chunk.text, JSON.stringify(chunk.metadata), null);\n }\n });\n insertMany(chunks);\n\n await Promise.all(chunks.map((chunk) =>\n limit(async () => {\n try {\n const embedding = await embed(chunk.text);\n const buf = Buffer.from(new Float64Array(embedding).buffer);\n db.prepare(\"UPDATE chunks SET embedding = ? WHERE id = ?\").run(buf, chunk.id);\n } catch {\n // Embedding failure is non-fatal\n }\n }),\n ));\n },\n\n async search(query: string, options?: { limit?: number; filter?: ChunkFilter }): Promise<DocumentChunk[]> {\n const queryEmbedding = await embed(query);\n const resultLimit = options?.limit ?? 10;\n\n let sql = \"SELECT id, document_id, type, text, metadata, embedding FROM chunks WHERE embedding IS NOT NULL\";\n const params: unknown[] = [];\n\n if (options?.filter?.documentId) {\n sql += \" AND document_id = ?\";\n params.push(options.filter.documentId);\n }\n if (options?.filter?.type) {\n sql += \" AND type = ?\";\n params.push(options.filter.type);\n }\n\n const rows = db.prepare(sql).all(...params) as Array<{\n id: string; document_id: string; type: string; text: string; metadata: string; embedding: Buffer;\n }>;\n\n const scored = rows.map((row) => {\n const stored = Array.from(new Float64Array(row.embedding.buffer, row.embedding.byteOffset, row.embedding.byteLength / 8));\n return {\n chunk: {\n id: row.id,\n documentId: row.document_id,\n type: row.type as DocumentChunk[\"type\"],\n text: row.text,\n metadata: JSON.parse(row.metadata),\n },\n score: cosineSimilarity(queryEmbedding, stored),\n };\n });\n\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, resultLimit).map((s) => s.chunk);\n },\n\n async addTurn(turn: ConversationTurn): Promise<void> {\n const embedding = await embed(turn.content).catch(() => null);\n const buf = embedding ? Buffer.from(new Float64Array(embedding).buffer) : null;\n db.prepare(\n \"INSERT INTO conversation_turns (id, conversation_id, role, content, tool_name, tool_result, timestamp, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\"\n ).run(turn.id, turn.conversationId, turn.role, turn.content, turn.toolName ?? null, turn.toolResult ?? null, turn.timestamp, buf);\n },\n\n async getHistory(conversationId: string, options?: { limit?: number }): Promise<ConversationTurn[]> {\n const resultLimit = options?.limit ?? 50;\n const rows = db.prepare(\n \"SELECT id, conversation_id, role, content, tool_name, tool_result, timestamp FROM conversation_turns WHERE conversation_id = ? ORDER BY timestamp DESC LIMIT ?\"\n ).all(conversationId, resultLimit) as Array<Record<string, unknown>>;\n\n return rows.reverse().map((r) => ({\n id: r.id as string,\n conversationId: r.conversation_id as string,\n role: r.role as ConversationTurn[\"role\"],\n content: r.content as string,\n toolName: r.tool_name as string | undefined,\n toolResult: r.tool_result as string | undefined,\n timestamp: r.timestamp as number,\n }));\n },\n\n async searchHistory(query: string, conversationId?: string): Promise<ConversationTurn[]> {\n const queryEmbedding = await embed(query);\n\n let sql = \"SELECT id, conversation_id, role, content, tool_name, tool_result, timestamp, embedding FROM conversation_turns WHERE embedding IS NOT NULL\";\n const params: unknown[] = [];\n if (conversationId) {\n sql += \" AND conversation_id = ?\";\n params.push(conversationId);\n }\n\n const rows = db.prepare(sql).all(...params) as Array<Record<string, unknown>>;\n\n const scored = rows.map((row) => {\n const buf = row.embedding as Buffer;\n const stored = Array.from(new Float64Array(buf.buffer, buf.byteOffset, buf.byteLength / 8));\n return {\n turn: {\n id: row.id as string,\n conversationId: row.conversation_id as string,\n role: row.role as ConversationTurn[\"role\"],\n content: row.content as string,\n toolName: row.tool_name as string | undefined,\n toolResult: row.tool_result as string | undefined,\n timestamp: row.timestamp as number,\n },\n score: cosineSimilarity(queryEmbedding, stored),\n };\n });\n\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, 10).map((s) => s.turn);\n },\n };\n}\n","import { z } from \"zod\";\n\nexport const SourceSpanKindSchema = z.enum([\n \"pdf_text\",\n \"pdf_image\",\n \"html\",\n \"markdown\",\n \"plain_text\",\n \"structured_field\",\n]);\nexport type SourceSpanKind = z.infer<typeof SourceSpanKindSchema>;\n\nexport const SourceSpanUnitSchema = z.enum([\n \"page\",\n \"section\",\n \"table\",\n \"table_row\",\n \"table_cell\",\n \"key_value\",\n \"text\",\n]);\nexport type SourceSpanUnit = z.infer<typeof SourceSpanUnitSchema>;\n\nexport const SourceKindSchema = z.enum([\n \"policy_pdf\",\n \"application_pdf\",\n \"email\",\n \"attachment\",\n \"manual_note\",\n]);\nexport type SourceKind = z.infer<typeof SourceKindSchema>;\n\nexport const SourceSpanBBoxSchema = z.object({\n page: z.number().int().positive(),\n x: z.number(),\n y: z.number(),\n width: z.number(),\n height: z.number(),\n});\nexport type SourceSpanBBox = z.infer<typeof SourceSpanBBoxSchema>;\n\nexport const SourceSpanLocationSchema = z.object({\n page: z.number().int().positive().optional(),\n startPage: z.number().int().positive().optional(),\n endPage: z.number().int().positive().optional(),\n charStart: z.number().int().nonnegative().optional(),\n charEnd: z.number().int().nonnegative().optional(),\n lineStart: z.number().int().positive().optional(),\n lineEnd: z.number().int().positive().optional(),\n fieldPath: z.string().optional(),\n});\nexport type SourceSpanLocation = z.infer<typeof SourceSpanLocationSchema>;\n\nexport const SourceSpanTableLocationSchema = z.object({\n tableId: z.string().optional(),\n rowIndex: z.number().int().nonnegative().optional(),\n columnIndex: z.number().int().nonnegative().optional(),\n columnName: z.string().optional(),\n rowSpanId: z.string().optional(),\n tableSpanId: z.string().optional(),\n isHeader: z.boolean().optional(),\n});\nexport type SourceSpanTableLocation = z.infer<typeof SourceSpanTableLocationSchema>;\n\nexport const SourceSpanSchema = z.object({\n id: z.string().min(1),\n documentId: z.string().min(1),\n sourceKind: SourceKindSchema.optional(),\n chunkId: z.string().optional(),\n kind: SourceSpanKindSchema,\n text: z.string(),\n hash: z.string().min(1),\n textHash: z.string().optional(),\n pageStart: z.number().int().positive().optional(),\n pageEnd: z.number().int().positive().optional(),\n sectionId: z.string().optional(),\n formNumber: z.string().optional(),\n sourceUnit: SourceSpanUnitSchema.optional(),\n parentSpanId: z.string().optional(),\n table: SourceSpanTableLocationSchema.optional(),\n bbox: z.array(SourceSpanBBoxSchema).optional(),\n location: SourceSpanLocationSchema.optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n});\nexport type SourceSpan = z.infer<typeof SourceSpanSchema>;\n\nexport const SourceSpanRefSchema = z.object({\n sourceSpanId: z.string().min(1),\n documentId: z.string().min(1).optional(),\n chunkId: z.string().optional(),\n quote: z.string().optional(),\n hash: z.string().optional(),\n location: SourceSpanLocationSchema.optional(),\n});\nexport type SourceSpanRef = z.infer<typeof SourceSpanRefSchema>;\n\nexport const SourceChunkSchema = z.object({\n id: z.string().min(1),\n documentId: z.string().min(1),\n sourceSpanIds: z.array(z.string().min(1)),\n text: z.string(),\n textHash: z.string().min(1),\n pageStart: z.number().int().positive().optional(),\n pageEnd: z.number().int().positive().optional(),\n metadata: z.record(z.string(), z.string()).default({}),\n});\nexport type SourceChunk = z.infer<typeof SourceChunkSchema>;\n\nexport const DocumentSourceNodeKindSchema = z.enum([\n \"document\",\n \"page_group\",\n \"page\",\n \"form\",\n \"endorsement\",\n \"section\",\n \"schedule\",\n \"clause\",\n \"table\",\n \"table_row\",\n \"table_cell\",\n \"text\",\n]);\nexport type DocumentSourceNodeKind = z.infer<typeof DocumentSourceNodeKindSchema>;\n\nexport const DocumentSourceNodeSchema = z.object({\n id: z.string().min(1),\n documentId: z.string().min(1),\n parentId: z.string().optional(),\n kind: DocumentSourceNodeKindSchema,\n title: z.string(),\n description: z.string(),\n textExcerpt: z.string().optional(),\n sourceSpanIds: z.array(z.string().min(1)),\n pageStart: z.number().int().positive().optional(),\n pageEnd: z.number().int().positive().optional(),\n bbox: z.array(SourceSpanBBoxSchema).optional(),\n order: z.number().int().nonnegative(),\n path: z.string(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\nexport type DocumentSourceNode = z.infer<typeof DocumentSourceNodeSchema>;\n\nexport const SourceBackedValueSchema = z.object({\n value: z.string(),\n normalizedValue: z.string().optional(),\n confidence: z.enum([\"low\", \"medium\", \"high\"]).default(\"medium\"),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type SourceBackedValue = z.infer<typeof SourceBackedValueSchema>;\n\nexport const OperationalCoverageTermSchema = z.object({\n kind: z.enum([\n \"each_claim_limit\",\n \"each_occurrence_limit\",\n \"each_loss_limit\",\n \"aggregate_limit\",\n \"sublimit\",\n \"retention\",\n \"deductible\",\n \"retroactive_date\",\n \"premium\",\n \"other\",\n ]).default(\"other\"),\n label: z.string(),\n value: z.string(),\n amount: z.number().optional(),\n appliesTo: z.string().optional(),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalCoverageTerm = z.infer<typeof OperationalCoverageTermSchema>;\n\nexport const OperationalCoverageLineSchema = z.object({\n name: z.string(),\n coverageCode: z.string().optional(),\n limit: z.string().optional(),\n deductible: z.string().optional(),\n premium: z.string().optional(),\n retroactiveDate: z.string().optional(),\n formNumber: z.string().optional(),\n sectionRef: z.string().optional(),\n endorsementNumber: z.string().optional(),\n limits: z.array(OperationalCoverageTermSchema).default([]),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalCoverageLine = z.infer<typeof OperationalCoverageLineSchema>;\n\nexport const OperationalPartySchema = z.object({\n role: z.string(),\n name: z.string(),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalParty = z.infer<typeof OperationalPartySchema>;\n\nexport const OperationalEndorsementSupportSchema = z.object({\n kind: z.string(),\n status: z.enum([\"supported\", \"excluded\", \"requires_review\"]),\n summary: z.string(),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalEndorsementSupport = z.infer<typeof OperationalEndorsementSupportSchema>;\n\nexport const PolicyOperationalProfileSchema = z.object({\n documentType: z.enum([\"policy\", \"quote\"]).default(\"policy\"),\n policyTypes: z.array(z.string()).default([\"other\"]),\n policyNumber: SourceBackedValueSchema.optional(),\n namedInsured: SourceBackedValueSchema.optional(),\n insurer: SourceBackedValueSchema.optional(),\n broker: SourceBackedValueSchema.optional(),\n effectiveDate: SourceBackedValueSchema.optional(),\n expirationDate: SourceBackedValueSchema.optional(),\n retroactiveDate: SourceBackedValueSchema.optional(),\n premium: SourceBackedValueSchema.optional(),\n coverages: z.array(OperationalCoverageLineSchema).default([]),\n parties: z.array(OperationalPartySchema).default([]),\n endorsementSupport: z.array(OperationalEndorsementSupportSchema).default([]),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n warnings: z.array(z.string()).default([]),\n});\nexport type PolicyOperationalProfile = z.infer<typeof PolicyOperationalProfileSchema>;\n","import { z } from \"zod\";\n\n// ── PolicyType ──\n\nexport const PolicyTypeSchema = z.enum([\n // Commercial lines\n \"general_liability\",\n \"commercial_property\",\n \"commercial_auto\",\n \"non_owned_auto\",\n \"workers_comp\",\n \"umbrella\",\n \"excess_liability\",\n \"professional_liability\",\n \"cyber\",\n \"epli\",\n \"directors_officers\",\n \"fiduciary_liability\",\n \"crime_fidelity\",\n \"inland_marine\",\n \"builders_risk\",\n \"environmental\",\n \"ocean_marine\",\n \"surety\",\n \"product_liability\",\n \"bop\",\n \"management_liability_package\",\n \"property\",\n // Personal lines\n \"homeowners_ho3\",\n \"homeowners_ho5\",\n \"renters_ho4\",\n \"condo_ho6\",\n \"dwelling_fire\",\n \"mobile_home\",\n \"personal_auto\",\n \"personal_umbrella\",\n \"flood_nfip\",\n \"flood_private\",\n \"earthquake\",\n \"personal_inland_marine\",\n \"watercraft\",\n \"recreational_vehicle\",\n \"farm_ranch\",\n \"life\",\n \"critical_illness\",\n \"disability\",\n \"long_term_care\",\n \"pet\",\n \"travel\",\n \"identity_theft\",\n \"title\",\n \"other\",\n]);\nexport type PolicyType = z.infer<typeof PolicyTypeSchema>;\nexport const POLICY_TYPES = PolicyTypeSchema.options;\n\n// ── EndorsementType ──\n\nexport const EndorsementTypeSchema = z.enum([\n \"additional_insured\",\n \"waiver_of_subrogation\",\n \"primary_noncontributory\",\n \"blanket_additional_insured\",\n \"loss_payee\",\n \"mortgage_holder\",\n \"broadening\",\n \"restriction\",\n \"exclusion\",\n \"amendatory\",\n \"notice_of_cancellation\",\n \"designated_premises\",\n \"classification_change\",\n \"schedule_update\",\n \"deductible_change\",\n \"limit_change\",\n \"territorial_extension\",\n \"other\",\n]);\nexport type EndorsementType = z.infer<typeof EndorsementTypeSchema>;\nexport const ENDORSEMENT_TYPES = EndorsementTypeSchema.options;\n\n// ── ConditionType ──\n\nexport const ConditionTypeSchema = z.enum([\n \"duties_after_loss\",\n \"notice_requirements\",\n \"other_insurance\",\n \"cancellation\",\n \"nonrenewal\",\n \"transfer_of_rights\",\n \"liberalization\",\n \"arbitration\",\n \"concealment_fraud\",\n \"examination_under_oath\",\n \"legal_action\",\n \"loss_payment\",\n \"appraisal\",\n \"mortgage_holders\",\n \"policy_territory\",\n \"separation_of_insureds\",\n \"other\",\n]);\nexport type ConditionType = z.infer<typeof ConditionTypeSchema>;\nexport const CONDITION_TYPES = ConditionTypeSchema.options;\n\n// ── PolicySectionType ──\n\nexport const PolicySectionTypeSchema = z.enum([\n \"declarations\",\n \"insuring_agreement\",\n \"policy_form\",\n \"endorsement\",\n \"application\",\n \"exclusion\",\n \"condition\",\n \"definition\",\n \"schedule\",\n \"notice\",\n \"regulatory\",\n \"other\",\n]);\nexport type PolicySectionType = z.infer<typeof PolicySectionTypeSchema>;\nexport const POLICY_SECTION_TYPES = PolicySectionTypeSchema.options;\n\n// ── QuoteSectionType ──\n\nexport const QuoteSectionTypeSchema = z.enum([\n \"terms_summary\",\n \"premium_indication\",\n \"underwriting_condition\",\n \"subjectivity\",\n \"coverage_summary\",\n \"exclusion\",\n \"other\",\n]);\nexport type QuoteSectionType = z.infer<typeof QuoteSectionTypeSchema>;\nexport const QUOTE_SECTION_TYPES = QuoteSectionTypeSchema.options;\n\n// ── CoverageForm ──\n\nexport const CoverageFormSchema = z.enum([\"occurrence\", \"claims_made\", \"accident\"]);\nexport type CoverageForm = z.infer<typeof CoverageFormSchema>;\nexport const COVERAGE_FORMS = CoverageFormSchema.options;\n\n// ── PolicyTermType ──\n\nexport const PolicyTermTypeSchema = z.enum([\"fixed\", \"continuous\"]);\nexport type PolicyTermType = z.infer<typeof PolicyTermTypeSchema>;\nexport const POLICY_TERM_TYPES = PolicyTermTypeSchema.options;\n\n// ── CoverageTrigger ──\n\nexport const CoverageTriggerSchema = z.enum([\"occurrence\", \"claims_made\", \"accident\"]);\nexport type CoverageTrigger = z.infer<typeof CoverageTriggerSchema>;\nexport const COVERAGE_TRIGGERS = CoverageTriggerSchema.options;\n\n// ── LimitType ──\n\nexport const LimitTypeSchema = z.enum([\n \"per_occurrence\",\n \"per_claim\",\n \"aggregate\",\n \"per_person\",\n \"per_accident\",\n \"statutory\",\n \"blanket\",\n \"scheduled\",\n]);\nexport type LimitType = z.infer<typeof LimitTypeSchema>;\nexport const LIMIT_TYPES = LimitTypeSchema.options;\n\n// ── DeductibleType ──\n\nexport const DeductibleTypeSchema = z.enum([\n \"per_occurrence\",\n \"per_claim\",\n \"aggregate\",\n \"percentage\",\n \"waiting_period\",\n]);\nexport type DeductibleType = z.infer<typeof DeductibleTypeSchema>;\nexport const DEDUCTIBLE_TYPES = DeductibleTypeSchema.options;\n\n// ── ValuationMethod ──\n\nexport const ValuationMethodSchema = z.enum([\n \"replacement_cost\",\n \"actual_cash_value\",\n \"agreed_value\",\n \"functional_replacement\",\n]);\nexport type ValuationMethod = z.infer<typeof ValuationMethodSchema>;\nexport const VALUATION_METHODS = ValuationMethodSchema.options;\n\n// ── DefenseCostTreatment ──\n\nexport const DefenseCostTreatmentSchema = z.enum([\"inside_limits\", \"outside_limits\", \"supplementary\"]);\nexport type DefenseCostTreatment = z.infer<typeof DefenseCostTreatmentSchema>;\nexport const DEFENSE_COST_TREATMENTS = DefenseCostTreatmentSchema.options;\n\n// ── EntityType ──\n\nexport const EntityTypeSchema = z.enum([\n \"corporation\",\n \"llc\",\n \"partnership\",\n \"sole_proprietor\",\n \"joint_venture\",\n \"trust\",\n \"nonprofit\",\n \"municipality\",\n \"individual\",\n \"married_couple\",\n \"other\",\n]);\nexport type EntityType = z.infer<typeof EntityTypeSchema>;\nexport const ENTITY_TYPES = EntityTypeSchema.options;\n\n// ── AdmittedStatus ──\n\nexport const AdmittedStatusSchema = z.enum([\"admitted\", \"non_admitted\", \"surplus_lines\"]);\nexport type AdmittedStatus = z.infer<typeof AdmittedStatusSchema>;\nexport const ADMITTED_STATUSES = AdmittedStatusSchema.options;\n\n// ── AuditType ──\n\nexport const AuditTypeSchema = z.enum([\n \"annual\",\n \"semi_annual\",\n \"quarterly\",\n \"monthly\",\n \"self\",\n \"physical\",\n \"none\",\n]);\nexport type AuditType = z.infer<typeof AuditTypeSchema>;\nexport const AUDIT_TYPES = AuditTypeSchema.options;\n\n// ── EndorsementPartyRole ──\n\nexport const EndorsementPartyRoleSchema = z.enum([\n \"additional_insured\",\n \"loss_payee\",\n \"mortgage_holder\",\n \"certificate_holder\",\n \"notice_recipient\",\n \"other\",\n]);\nexport type EndorsementPartyRole = z.infer<typeof EndorsementPartyRoleSchema>;\nexport const ENDORSEMENT_PARTY_ROLES = EndorsementPartyRoleSchema.options;\n\n// ── ClaimStatus ──\n\nexport const ClaimStatusSchema = z.enum([\"open\", \"closed\", \"reopened\"]);\nexport type ClaimStatus = z.infer<typeof ClaimStatusSchema>;\nexport const CLAIM_STATUSES = ClaimStatusSchema.options;\n\n// ── SubjectivityCategory ──\n\nexport const SubjectivityCategorySchema = z.enum([\"pre_binding\", \"post_binding\", \"information\"]);\nexport type SubjectivityCategory = z.infer<typeof SubjectivityCategorySchema>;\nexport const SUBJECTIVITY_CATEGORIES = SubjectivityCategorySchema.options;\n\n// ── DocumentType ──\n\nexport const DocumentTypeSchema = z.enum([\"policy\", \"quote\", \"binder\", \"endorsement\", \"certificate\"]);\nexport type DocumentType = z.infer<typeof DocumentTypeSchema>;\nexport const DOCUMENT_TYPES = DocumentTypeSchema.options;\n\n// ── ChunkType ──\n\nexport const ChunkTypeSchema = z.enum([\n \"declarations\",\n \"coverage_form\",\n \"endorsement\",\n \"schedule\",\n \"conditions\",\n \"mixed\",\n]);\nexport type ChunkType = z.infer<typeof ChunkTypeSchema>;\nexport const CHUNK_TYPES = ChunkTypeSchema.options;\n\n// ── RatingBasisType ──\n\nexport const RatingBasisTypeSchema = z.enum([\n \"payroll\",\n \"revenue\",\n \"area\",\n \"units\",\n \"vehicle_count\",\n \"employee_count\",\n \"per_capita\",\n \"dwelling_value\",\n \"vehicle_value\",\n \"contents_value\",\n \"other\",\n]);\nexport type RatingBasisType = z.infer<typeof RatingBasisTypeSchema>;\nexport const RATING_BASIS_TYPES = RatingBasisTypeSchema.options;\n\n// ── VehicleCoverageType ──\n\nexport const VehicleCoverageTypeSchema = z.enum([\n \"liability\",\n \"collision\",\n \"comprehensive\",\n \"uninsured_motorist\",\n \"underinsured_motorist\",\n \"medical_payments\",\n \"hired_auto\",\n \"non_owned_auto\",\n \"cargo\",\n \"physical_damage\",\n]);\nexport type VehicleCoverageType = z.infer<typeof VehicleCoverageTypeSchema>;\nexport const VEHICLE_COVERAGE_TYPES = VehicleCoverageTypeSchema.options;\n\n// ── Personal lines ──\n\nexport const HomeownersFormTypeSchema = z.enum([\"HO-3\", \"HO-5\", \"HO-4\", \"HO-6\", \"HO-7\", \"HO-8\"]);\nexport type HomeownersFormType = z.infer<typeof HomeownersFormTypeSchema>;\nexport const HOMEOWNERS_FORM_TYPES = HomeownersFormTypeSchema.options;\n\nexport const DwellingFireFormTypeSchema = z.enum([\"DP-1\", \"DP-2\", \"DP-3\"]);\nexport type DwellingFireFormType = z.infer<typeof DwellingFireFormTypeSchema>;\nexport const DWELLING_FIRE_FORM_TYPES = DwellingFireFormTypeSchema.options;\n\nexport const FloodZoneSchema = z.enum([\"A\", \"AE\", \"AH\", \"AO\", \"AR\", \"V\", \"VE\", \"B\", \"C\", \"X\", \"D\"]);\nexport type FloodZone = z.infer<typeof FloodZoneSchema>;\nexport const FLOOD_ZONES = FloodZoneSchema.options;\n\nexport const ConstructionTypeSchema = z.enum([\"frame\", \"masonry\", \"superior\", \"mixed\", \"other\"]);\nexport type ConstructionType = z.infer<typeof ConstructionTypeSchema>;\nexport const CONSTRUCTION_TYPES = ConstructionTypeSchema.options;\n\nexport const RoofTypeSchema = z.enum([\"asphalt_shingle\", \"tile\", \"metal\", \"slate\", \"flat\", \"wood_shake\", \"other\"]);\nexport type RoofType = z.infer<typeof RoofTypeSchema>;\nexport const ROOF_TYPES = RoofTypeSchema.options;\n\nexport const FoundationTypeSchema = z.enum([\"basement\", \"crawl_space\", \"slab\", \"pier\", \"other\"]);\nexport type FoundationType = z.infer<typeof FoundationTypeSchema>;\nexport const FOUNDATION_TYPES = FoundationTypeSchema.options;\n\nexport const PersonalAutoUsageSchema = z.enum([\"pleasure\", \"commute\", \"business\", \"farm\"]);\nexport type PersonalAutoUsage = z.infer<typeof PersonalAutoUsageSchema>;\nexport const PERSONAL_AUTO_USAGES = PersonalAutoUsageSchema.options;\n\nexport const LossSettlementSchema = z.enum([\n \"replacement_cost\",\n \"actual_cash_value\",\n \"extended_replacement_cost\",\n \"guaranteed_replacement_cost\",\n]);\nexport type LossSettlement = z.infer<typeof LossSettlementSchema>;\nexport const LOSS_SETTLEMENTS = LossSettlementSchema.options;\n\nexport const BoatTypeSchema = z.enum([\"sailboat\", \"powerboat\", \"pontoon\", \"jet_ski\", \"kayak_canoe\", \"yacht\", \"other\"]);\nexport type BoatType = z.infer<typeof BoatTypeSchema>;\nexport const BOAT_TYPES = BoatTypeSchema.options;\n\nexport const RVTypeSchema = z.enum([\"rv_motorhome\", \"travel_trailer\", \"atv\", \"snowmobile\", \"golf_cart\", \"dirt_bike\", \"other\"]);\nexport type RVType = z.infer<typeof RVTypeSchema>;\nexport const RV_TYPES = RVTypeSchema.options;\n\nexport const ScheduledItemCategorySchema = z.enum([\n \"jewelry\",\n \"fine_art\",\n \"musical_instruments\",\n \"silverware\",\n \"furs\",\n \"cameras\",\n \"collectibles\",\n \"firearms\",\n \"golf_equipment\",\n \"other\",\n]);\nexport type ScheduledItemCategory = z.infer<typeof ScheduledItemCategorySchema>;\nexport const SCHEDULED_ITEM_CATEGORIES = ScheduledItemCategorySchema.options;\n\nexport const TitlePolicyTypeSchema = z.enum([\"owners\", \"lenders\"]);\nexport type TitlePolicyType = z.infer<typeof TitlePolicyTypeSchema>;\nexport const TITLE_POLICY_TYPES = TitlePolicyTypeSchema.options;\n\nexport const PetSpeciesSchema = z.enum([\"dog\", \"cat\", \"other\"]);\nexport type PetSpecies = z.infer<typeof PetSpeciesSchema>;\nexport const PET_SPECIES = PetSpeciesSchema.options;\n","import { POLICY_TYPES } from \"../schemas/enums\";\nimport type { OperationalCoverageLine } from \"./schemas\";\n\nconst POLICY_TYPE_KEYS = new Set<string>(POLICY_TYPES);\n\nconst POLICY_TYPE_ALIASES: Record<string, string> = {\n \"general liability\": \"general_liability\",\n \"commercial general liability\": \"general_liability\",\n cgl: \"general_liability\",\n \"commercial property\": \"commercial_property\",\n property: \"property\",\n \"property insurance\": \"commercial_property\",\n \"commercial auto\": \"commercial_auto\",\n \"commercial automobile\": \"commercial_auto\",\n \"business auto\": \"commercial_auto\",\n \"business automobile\": \"commercial_auto\",\n \"auto physical damage\": \"commercial_auto\",\n \"automobile physical damage\": \"commercial_auto\",\n \"hired non owned auto\": \"non_owned_auto\",\n \"hired non-owned auto\": \"non_owned_auto\",\n \"non owned auto\": \"non_owned_auto\",\n \"non-owned auto\": \"non_owned_auto\",\n \"workers comp\": \"workers_comp\",\n \"workers compensation\": \"workers_comp\",\n \"workers' compensation\": \"workers_comp\",\n umbrella: \"umbrella\",\n \"excess liability\": \"excess_liability\",\n \"professional liability\": \"professional_liability\",\n \"errors and omissions\": \"professional_liability\",\n \"e&o\": \"professional_liability\",\n cyber: \"cyber\",\n \"cyber liability\": \"cyber\",\n \"network security\": \"cyber\",\n \"privacy liability\": \"cyber\",\n epli: \"epli\",\n \"employment practices liability\": \"epli\",\n \"directors and officers\": \"directors_officers\",\n \"directors & officers\": \"directors_officers\",\n \"d&o\": \"directors_officers\",\n \"fiduciary liability insurance\": \"fiduciary_liability\",\n \"crime insurance\": \"crime_fidelity\",\n \"fidelity bond\": \"crime_fidelity\",\n \"inland marine insurance\": \"inland_marine\",\n \"motor truck cargo\": \"inland_marine\",\n \"motor truck cargo legal liability\": \"inland_marine\",\n \"builders risk insurance\": \"builders_risk\",\n \"pollution liability\": \"environmental\",\n \"premises pollution liability\": \"environmental\",\n \"environmental liability\": \"environmental\",\n \"ocean marine insurance\": \"ocean_marine\",\n \"surety bond\": \"surety\",\n \"product liability insurance\": \"product_liability\",\n \"life insurance\": \"life\",\n \"permanent life\": \"life\",\n \"term life\": \"life\",\n \"whole life\": \"life\",\n \"universal life\": \"life\",\n \"critical illness\": \"critical_illness\",\n \"critical illness insurance\": \"critical_illness\",\n \"disability insurance\": \"disability\",\n \"long term care\": \"long_term_care\",\n \"long-term care\": \"long_term_care\",\n};\n\nconst POLICY_TYPE_TEXT_PATTERNS: Array<{ type: string; pattern: RegExp }> = [\n { type: \"general_liability\", pattern: /\\b(?:commercial\\s+)?general\\s+liability\\b|\\bcgl\\b/i },\n { type: \"commercial_property\", pattern: /\\bcommercial\\s+property\\b|\\bproperty\\s+insurance\\b/i },\n { type: \"commercial_auto\", pattern: /\\bcommercial\\s+auto(?:mobile)?\\b|\\bbusiness\\s+auto(?:mobile)?\\b|\\bauto(?:mobile)?\\s+physical\\s+damage\\b/i },\n { type: \"non_owned_auto\", pattern: /\\b(?:hired\\s+(?:and\\s+)?)?non[-\\s]?owned\\s+auto\\b/i },\n { type: \"workers_comp\", pattern: /\\bworkers['’]?\\s+comp(?:ensation)?\\b/i },\n { type: \"umbrella\", pattern: /\\bcommercial\\s+umbrella\\b|\\bumbrella\\s+liability\\b/i },\n { type: \"excess_liability\", pattern: /\\bexcess\\s+liability\\b/i },\n { type: \"professional_liability\", pattern: /\\bprofessional\\s+liability\\b|\\berrors?\\s*(?:and|&)\\s*omissions?\\b|\\be&o\\b/i },\n { type: \"cyber\", pattern: /\\bcyber\\b|\\bnetwork\\s+security\\b|\\bprivacy\\s+liability\\b/i },\n { type: \"epli\", pattern: /\\bemployment\\s+practices?\\s+liability\\b|\\bepli\\b/i },\n { type: \"directors_officers\", pattern: /\\bdirectors?\\s*(?:and|&)\\s*officers?\\b|\\bd&o\\b/i },\n { type: \"fiduciary_liability\", pattern: /\\bfiduciary\\s+liability\\b/i },\n { type: \"crime_fidelity\", pattern: /\\bcrime\\b|\\bfidelity\\b/i },\n { type: \"inland_marine\", pattern: /\\binland\\s+marine\\b|\\bmotor\\s+truck\\s+cargo\\b|\\bcargo\\s+legal\\s+liability\\b/i },\n { type: \"builders_risk\", pattern: /\\bbuilders?\\s+risk\\b/i },\n { type: \"environmental\", pattern: /\\bpollution\\s+liability\\b|\\benvironmental\\s+liability\\b/i },\n { type: \"ocean_marine\", pattern: /\\bocean\\s+marine\\b/i },\n { type: \"surety\", pattern: /\\bsurety\\b/i },\n { type: \"product_liability\", pattern: /\\bproduct\\s+liability\\b|\\bproducts?\\s+completed\\s+operations\\b/i },\n { type: \"bop\", pattern: /\\bbusiness\\s*owners?\\s+policy\\b|\\bbop\\b/i },\n { type: \"homeowners_ho3\", pattern: /\\bhomeowners?\\s*(?:ho[-\\s]?3)?\\b/i },\n { type: \"homeowners_ho5\", pattern: /\\bho[-\\s]?5\\b/i },\n { type: \"renters_ho4\", pattern: /\\brenters?\\b|\\bho[-\\s]?4\\b/i },\n { type: \"condo_ho6\", pattern: /\\bcondo(?:minium)?\\b|\\bho[-\\s]?6\\b/i },\n { type: \"dwelling_fire\", pattern: /\\bdwelling\\s+fire\\b/i },\n { type: \"personal_auto\", pattern: /\\bpersonal\\s+auto\\b/i },\n { type: \"personal_umbrella\", pattern: /\\bpersonal\\s+umbrella\\b/i },\n { type: \"flood_private\", pattern: /\\bflood\\b/i },\n { type: \"earthquake\", pattern: /\\bearthquake\\b/i },\n { type: \"personal_inland_marine\", pattern: /\\bpersonal\\s+(?:articles|inland\\s+marine)\\b/i },\n { type: \"watercraft\", pattern: /\\bwatercraft\\b|\\bboat\\s+insurance\\b/i },\n { type: \"recreational_vehicle\", pattern: /\\brecreational\\s+vehicle\\b|\\brv\\s+insurance\\b/i },\n { type: \"farm_ranch\", pattern: /\\bfarm\\b|\\branch\\b/i },\n { type: \"life\", pattern: /\\blife\\s+insurance\\b|\\bterm\\s+life\\b|\\bwhole\\s+life\\b|\\buniversal\\s+life\\b/i },\n { type: \"critical_illness\", pattern: /\\bcritical\\s+illness\\b/i },\n { type: \"disability\", pattern: /\\bdisability\\s+insurance\\b|\\btotal\\s+disability\\b/i },\n { type: \"long_term_care\", pattern: /\\blong[-\\s]?term\\s+care\\b/i },\n { type: \"pet\", pattern: /\\bpet\\s+insurance\\b/i },\n { type: \"travel\", pattern: /\\btravel\\s+insurance\\b/i },\n { type: \"identity_theft\", pattern: /\\bidentity\\s+theft\\b/i },\n { type: \"title\", pattern: /\\btitle\\s+insurance\\b/i },\n];\n\nexport type PolicyTypeResolutionSource =\n | \"coverage\"\n | \"profile_hint\"\n | \"existing_hint\"\n | \"default\";\n\nfunction normalizeWhitespace(value: string): string {\n return value.replace(/\\s+/g, \" \").trim();\n}\n\nexport function normalizeOperationalPolicyTypes(values: unknown): string[] {\n const types = Array.isArray(values)\n ? values.filter((value): value is string => typeof value === \"string\")\n : [];\n const controlled = types\n .map((type) => type.trim().toLowerCase().replace(/\\s+/g, \" \"))\n .map((type) => POLICY_TYPE_ALIASES[type] ?? type.replace(/[\\s-]+/g, \"_\"))\n .filter((type) => POLICY_TYPE_KEYS.has(type));\n const unique = [...new Set(controlled)].slice(0, 6);\n return unique.length ? unique : [\"other\"];\n}\n\nfunction hasSpecificPolicyType(types: string[]): boolean {\n return types.some((type) => type !== \"other\");\n}\n\nfunction policyTypesFromText(value: string | undefined): string[] {\n const text = normalizeWhitespace(value ?? \"\");\n if (!text) return [];\n const aliasType = POLICY_TYPE_ALIASES[text.toLowerCase()];\n if (aliasType && POLICY_TYPE_KEYS.has(aliasType)) return [aliasType];\n return POLICY_TYPE_TEXT_PATTERNS\n .filter(({ pattern }) => pattern.test(text))\n .map(({ type }) => type)\n .filter((type) => POLICY_TYPE_KEYS.has(type));\n}\n\nexport function inferPolicyTypesFromOperationalCoverages(coverages: OperationalCoverageLine[]): string[] {\n const inferred: string[] = [];\n for (const coverage of coverages) {\n const limits = coverage.limits ?? [];\n const text = [\n coverage.coverageCode,\n coverage.formNumber,\n coverage.name,\n ...limits.flatMap((term) => [term.appliesTo, term.label]),\n ].filter((value): value is string => typeof value === \"string\" && value.trim().length > 0);\n for (const value of text) {\n for (const type of policyTypesFromText(value)) {\n if (!inferred.includes(type)) inferred.push(type);\n }\n }\n }\n return inferred.slice(0, 6);\n}\n\nexport function resolveOperationalProfilePolicyTypes(params: {\n profileTypes: unknown;\n existingTypes?: unknown;\n coverages?: OperationalCoverageLine[];\n}): { policyTypes: string[]; source: PolicyTypeResolutionSource } {\n const inferred = inferPolicyTypesFromOperationalCoverages(params.coverages ?? []);\n if (inferred.length > 0) {\n return { policyTypes: inferred, source: \"coverage\" };\n }\n\n const controlled = normalizeOperationalPolicyTypes(params.profileTypes);\n if (hasSpecificPolicyType(controlled)) return { policyTypes: controlled, source: \"profile_hint\" };\n\n const existingControlled = normalizeOperationalPolicyTypes(params.existingTypes);\n if (hasSpecificPolicyType(existingControlled)) return { policyTypes: existingControlled, source: \"existing_hint\" };\n\n return { policyTypes: controlled, source: \"default\" };\n}\n","import type { DocumentSourceNode, SourceSpan } from \"./schemas\";\n\nexport type SourceRetrievalMode = \"graph_only\" | \"source_rag\" | \"long_context\" | \"hybrid\";\n\nexport interface SourceRetrievalQuery {\n question: string;\n documentIds?: string[];\n chunkIds?: string[];\n limit?: number;\n mode?: SourceRetrievalMode;\n filters?: Record<string, string>;\n}\n\nexport interface SourceRetrievalResult {\n span: SourceSpan;\n relevance: number;\n}\n\nexport interface SourceNodeRetrievalResult {\n node: DocumentSourceNode;\n relevance: number;\n hierarchy: DocumentSourceNode[];\n spans: SourceSpan[];\n}\n\nexport interface SourceRetriever {\n searchSourceSpans(query: SourceRetrievalQuery): Promise<SourceRetrievalResult[]>;\n searchSourceNodes?(query: SourceRetrievalQuery): Promise<SourceNodeRetrievalResult[]>;\n}\n\nexport interface OrderableSourceEvidence {\n source?: string;\n sourceSpanId?: string;\n chunkId?: string;\n documentId?: string;\n turnId?: string;\n attachmentId?: string;\n text: string;\n relevance: number;\n}\n\nfunction evidenceTieBreakId(evidence: OrderableSourceEvidence): string {\n return [\n evidence.source ?? \"\",\n evidence.sourceSpanId ?? \"\",\n evidence.chunkId ?? \"\",\n evidence.documentId ?? \"\",\n evidence.turnId ?? \"\",\n evidence.attachmentId ?? \"\",\n evidence.text,\n ].join(\"|\");\n}\n\nexport function compareSourceEvidence(a: OrderableSourceEvidence, b: OrderableSourceEvidence): number {\n const relevanceDelta = b.relevance - a.relevance;\n if (relevanceDelta !== 0) return relevanceDelta;\n return evidenceTieBreakId(a).localeCompare(evidenceTieBreakId(b));\n}\n\nexport function orderSourceEvidence<T extends OrderableSourceEvidence>(evidence: T[]): T[] {\n return [...evidence].sort(compareSourceEvidence);\n}\n","import type Database from \"better-sqlite3\";\nimport type { EmbedText } from \"../../core/types\";\nimport type {\n SourceChunk,\n SourceRetrievalQuery,\n SourceRetrievalResult,\n SourceSpan,\n SourceStore,\n} from \"../../source\";\nimport { orderSourceEvidence } from \"../../source\";\nimport { pLimit } from \"../../core/concurrency\";\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n const denominator = Math.sqrt(magA) * Math.sqrt(magB);\n return denominator === 0 ? 0 : dot / denominator;\n}\n\nfunction embeddingToBuffer(embedding: number[]): Buffer {\n return Buffer.from(new Float64Array(embedding).buffer);\n}\n\nfunction bufferToEmbedding(buffer: Buffer): number[] {\n return Array.from(new Float64Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 8));\n}\n\nfunction parseJson<T>(value: string | null | undefined, fallback: T): T {\n if (!value) return fallback;\n try {\n return JSON.parse(value) as T;\n } catch {\n return fallback;\n }\n}\n\nfunction rowToSourceSpan(row: Record<string, unknown>): SourceSpan {\n const metadata = parseJson(row.metadata as string | undefined, {});\n return {\n id: row.id as string,\n documentId: row.document_id as string,\n sourceKind: (row.source_kind ?? undefined) as SourceSpan[\"sourceKind\"],\n chunkId: (row.chunk_id ?? undefined) as string | undefined,\n kind: row.kind as SourceSpan[\"kind\"],\n text: row.text as string,\n hash: row.hash as string,\n textHash: (row.text_hash ?? undefined) as string | undefined,\n pageStart: (row.page_start ?? undefined) as number | undefined,\n pageEnd: (row.page_end ?? undefined) as number | undefined,\n sectionId: (row.section_id ?? undefined) as string | undefined,\n formNumber: (row.form_number ?? undefined) as string | undefined,\n sourceUnit: (row.source_unit ?? undefined) as SourceSpan[\"sourceUnit\"],\n parentSpanId: (row.parent_span_id ?? undefined) as string | undefined,\n table: parseJson(row.table_location as string | undefined, undefined),\n location: parseJson(row.location as string | undefined, undefined),\n bbox: parseJson(row.bbox as string | undefined, undefined),\n metadata: Object.keys(metadata).length ? metadata : undefined,\n };\n}\n\nfunction rowToSourceChunk(row: Record<string, unknown>): SourceChunk {\n return {\n id: row.id as string,\n documentId: row.document_id as string,\n sourceSpanIds: parseJson(row.source_span_ids as string | undefined, []),\n text: row.text as string,\n textHash: row.text_hash as string,\n pageStart: row.page_start as number | undefined,\n pageEnd: row.page_end as number | undefined,\n metadata: parseJson(row.metadata as string | undefined, {}),\n };\n}\n\nexport function createSqliteSourceStore(db: Database.Database, embed: EmbedText): SourceStore {\n const limit = pLimit(4);\n\n return {\n async addSourceSpans(spans: SourceSpan[]): Promise<void> {\n const stmt = db.prepare(`\n INSERT OR REPLACE INTO source_spans (\n id, document_id, source_kind, chunk_id, kind, text, hash, text_hash,\n page_start, page_end, section_id, form_number, source_unit, parent_span_id,\n table_location, location, bbox, metadata, embedding\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n const insertMany = db.transaction((items: SourceSpan[]) => {\n for (const span of items) {\n stmt.run(\n span.id,\n span.documentId,\n span.sourceKind ?? null,\n span.chunkId ?? null,\n span.kind,\n span.text,\n span.hash,\n span.textHash ?? null,\n span.pageStart ?? null,\n span.pageEnd ?? null,\n span.sectionId ?? null,\n span.formNumber ?? null,\n span.sourceUnit ?? null,\n span.parentSpanId ?? null,\n span.table ? JSON.stringify(span.table) : null,\n span.location ? JSON.stringify(span.location) : null,\n span.bbox ? JSON.stringify(span.bbox) : null,\n JSON.stringify(span.metadata ?? {}),\n null,\n );\n }\n });\n insertMany(spans);\n\n await Promise.all(spans.map((span) =>\n limit(async () => {\n try {\n const embedding = await embed(span.text);\n db.prepare(\"UPDATE source_spans SET embedding = ? WHERE id = ?\").run(embeddingToBuffer(embedding), span.id);\n } catch {\n // Embedding failure is non-fatal; span text remains persisted.\n }\n }),\n ));\n },\n\n async addSourceChunks(chunks: SourceChunk[]): Promise<void> {\n const stmt = db.prepare(`\n INSERT OR REPLACE INTO source_chunks (\n id, document_id, source_span_ids, text, text_hash, page_start, page_end, metadata\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `);\n const insertMany = db.transaction((items: SourceChunk[]) => {\n for (const chunk of items) {\n stmt.run(\n chunk.id,\n chunk.documentId,\n JSON.stringify(chunk.sourceSpanIds),\n chunk.text,\n chunk.textHash,\n chunk.pageStart ?? null,\n chunk.pageEnd ?? null,\n JSON.stringify(chunk.metadata ?? {}),\n );\n }\n });\n insertMany(chunks);\n },\n\n async getSourceSpan(id: string): Promise<SourceSpan | null> {\n const row = db.prepare(\"SELECT * FROM source_spans WHERE id = ?\").get(id) as Record<string, unknown> | undefined;\n return row ? rowToSourceSpan(row) : null;\n },\n\n async getSourceSpansByDocument(documentId: string): Promise<SourceSpan[]> {\n const rows = db.prepare(\"SELECT * FROM source_spans WHERE document_id = ? ORDER BY id ASC\").all(documentId) as Array<Record<string, unknown>>;\n return rows.map(rowToSourceSpan);\n },\n\n async getSourceChunksByDocument(documentId: string): Promise<SourceChunk[]> {\n const rows = db.prepare(\"SELECT * FROM source_chunks WHERE document_id = ? ORDER BY id ASC\").all(documentId) as Array<Record<string, unknown>>;\n return rows.map(rowToSourceChunk);\n },\n\n async deleteDocumentSource(documentId: string): Promise<void> {\n db.prepare(\"DELETE FROM source_chunks WHERE document_id = ?\").run(documentId);\n db.prepare(\"DELETE FROM source_spans WHERE document_id = ?\").run(documentId);\n },\n\n async searchSourceSpans(query: SourceRetrievalQuery): Promise<SourceRetrievalResult[]> {\n const queryEmbedding = await embed(query.question);\n const resultLimit = query.limit ?? 10;\n let sql = \"SELECT * FROM source_spans WHERE embedding IS NOT NULL\";\n const params: unknown[] = [];\n\n if (query.documentIds?.length) {\n sql += ` AND document_id IN (${query.documentIds.map(() => \"?\").join(\",\")})`;\n params.push(...query.documentIds);\n }\n if (query.chunkIds?.length) {\n sql += ` AND chunk_id IN (${query.chunkIds.map(() => \"?\").join(\",\")})`;\n params.push(...query.chunkIds);\n }\n if (query.filters?.sourceKind) {\n sql += \" AND source_kind = ?\";\n params.push(query.filters.sourceKind);\n }\n if (query.filters?.formNumber) {\n sql += \" AND form_number = ?\";\n params.push(query.filters.formNumber);\n }\n if (query.filters?.sectionId) {\n sql += \" AND section_id = ?\";\n params.push(query.filters.sectionId);\n }\n\n const rows = db.prepare(sql).all(...params) as Array<Record<string, unknown>>;\n const scored = rows.map((row) => {\n const span = rowToSourceSpan(row);\n return {\n span,\n relevance: cosineSimilarity(queryEmbedding, bufferToEmbedding(row.embedding as Buffer)),\n };\n });\n\n return orderSourceEvidence(scored.map((result) => ({\n ...result,\n sourceSpanId: result.span.id,\n chunkId: result.span.chunkId,\n documentId: result.span.documentId,\n text: result.span.text,\n }))).map(({ span, relevance }) => ({ span, relevance })).slice(0, resultLimit);\n },\n };\n}\n"],"mappings":"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","names":["import_zod","cosineSimilarity"]}
1
+ {"version":3,"sources":["../src/storage/sqlite/index.ts","../src/storage/sqlite/migrations.ts","../src/storage/sqlite/document-store.ts","../src/core/concurrency.ts","../src/storage/sqlite/memory-store.ts","../src/source/schemas.ts","../src/schemas/lines-of-business.ts","../src/source/retrieval.ts","../src/storage/sqlite/source-store.ts"],"sourcesContent":["import type { EmbedText } from \"../../core/types\";\nimport type { DocumentStore } from \"../interfaces\";\nimport type { MemoryStore } from \"../interfaces\";\nimport type { SourceStore } from \"../../source\";\nimport { CREATE_TABLES } from \"./migrations\";\nimport { createSqliteDocumentStore } from \"./document-store\";\nimport { createSqliteMemoryStore } from \"./memory-store\";\nimport { createSqliteSourceStore } from \"./source-store\";\n\nexport { createSqliteDocumentStore } from \"./document-store\";\nexport { createSqliteMemoryStore } from \"./memory-store\";\nexport { createSqliteSourceStore } from \"./source-store\";\n\nexport interface SqliteStoreOptions {\n path: string;\n embed: EmbedText;\n}\n\nexport function createSqliteStore(options: SqliteStoreOptions): {\n documents: DocumentStore;\n memory: MemoryStore;\n source: SourceStore;\n close: () => void;\n} {\n // Dynamic import to keep better-sqlite3 optional\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const BetterSqlite3 = require(\"better-sqlite3\");\n const db = new BetterSqlite3(options.path);\n\n db.pragma(\"journal_mode = WAL\");\n db.pragma(\"foreign_keys = ON\");\n db.exec(CREATE_TABLES);\n\n return {\n documents: createSqliteDocumentStore(db),\n memory: createSqliteMemoryStore(db, options.embed),\n source: createSqliteSourceStore(db, options.embed),\n close: () => db.close(),\n };\n}\n\nexport type { DocumentStore, MemoryStore } from \"../interfaces\";\nexport type { SourceStore } from \"../../source\";\n","export const CREATE_TABLES = `\nCREATE TABLE IF NOT EXISTS documents (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n data TEXT NOT NULL,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE TABLE IF NOT EXISTS chunks (\n id TEXT PRIMARY KEY,\n document_id TEXT NOT NULL,\n type TEXT NOT NULL,\n text TEXT NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n embedding BLOB,\n FOREIGN KEY (document_id) REFERENCES documents(id) ON DELETE CASCADE\n);\n\nCREATE TABLE IF NOT EXISTS conversation_turns (\n id TEXT PRIMARY KEY,\n conversation_id TEXT NOT NULL,\n role TEXT NOT NULL,\n content TEXT NOT NULL,\n tool_name TEXT,\n tool_result TEXT,\n timestamp INTEGER NOT NULL,\n embedding BLOB\n);\n\nCREATE TABLE IF NOT EXISTS source_spans (\n id TEXT PRIMARY KEY,\n document_id TEXT NOT NULL,\n source_kind TEXT,\n chunk_id TEXT,\n kind TEXT NOT NULL,\n text TEXT NOT NULL,\n hash TEXT NOT NULL,\n text_hash TEXT,\n page_start INTEGER,\n page_end INTEGER,\n section_id TEXT,\n form_number TEXT,\n source_unit TEXT,\n parent_span_id TEXT,\n table_location TEXT,\n location TEXT,\n bbox TEXT,\n metadata TEXT NOT NULL DEFAULT '{}',\n embedding BLOB\n);\n\nCREATE TABLE IF NOT EXISTS source_chunks (\n id TEXT PRIMARY KEY,\n document_id TEXT NOT NULL,\n source_span_ids TEXT NOT NULL,\n text TEXT NOT NULL,\n text_hash TEXT NOT NULL,\n page_start INTEGER,\n page_end INTEGER,\n metadata TEXT NOT NULL DEFAULT '{}'\n);\n\nCREATE INDEX IF NOT EXISTS idx_chunks_document_id ON chunks(document_id);\nCREATE INDEX IF NOT EXISTS idx_chunks_type ON chunks(type);\nCREATE INDEX IF NOT EXISTS idx_turns_conversation_id ON conversation_turns(conversation_id);\nCREATE INDEX IF NOT EXISTS idx_turns_timestamp ON conversation_turns(timestamp);\nCREATE INDEX IF NOT EXISTS idx_source_spans_document_id ON source_spans(document_id);\nCREATE INDEX IF NOT EXISTS idx_source_spans_chunk_id ON source_spans(chunk_id);\nCREATE INDEX IF NOT EXISTS idx_source_chunks_document_id ON source_chunks(document_id);\n`;\n","import type Database from \"better-sqlite3\";\nimport type { DocumentStore } from \"../interfaces\";\nimport type { InsuranceDocument } from \"../../schemas/document\";\nimport type { DocumentFilters } from \"../chunk-types\";\n\nexport function createSqliteDocumentStore(db: Database.Database): DocumentStore {\n return {\n async save(doc: InsuranceDocument): Promise<void> {\n db.prepare(\"INSERT OR REPLACE INTO documents (id, type, data) VALUES (?, ?, ?)\").run(\n doc.id, doc.type, JSON.stringify(doc),\n );\n },\n\n async get(id: string): Promise<InsuranceDocument | null> {\n const row = db.prepare(\"SELECT data FROM documents WHERE id = ?\").get(id) as { data: string } | undefined;\n return row ? JSON.parse(row.data) : null;\n },\n\n async query(filters: DocumentFilters): Promise<InsuranceDocument[]> {\n let sql = \"SELECT data FROM documents WHERE 1=1\";\n const params: unknown[] = [];\n\n if (filters.type) {\n sql += \" AND type = ?\";\n params.push(filters.type);\n }\n if (filters.carrier) {\n sql += \" AND json_extract(data, '$.carrier') LIKE ?\";\n params.push(`%${filters.carrier}%`);\n }\n if (filters.insuredName) {\n sql += \" AND json_extract(data, '$.insuredName') LIKE ?\";\n params.push(`%${filters.insuredName}%`);\n }\n if (filters.policyNumber) {\n sql += \" AND json_extract(data, '$.policyNumber') = ?\";\n params.push(filters.policyNumber);\n }\n if (filters.quoteNumber) {\n sql += \" AND json_extract(data, '$.quoteNumber') = ?\";\n params.push(filters.quoteNumber);\n }\n\n const rows = db.prepare(sql).all(...params) as { data: string }[];\n return rows.map((r) => JSON.parse(r.data));\n },\n\n async delete(id: string): Promise<void> {\n db.prepare(\"DELETE FROM documents WHERE id = ?\").run(id);\n },\n };\n}\n","/**\n * Concurrency limiter — returns a function that wraps async tasks\n * so at most `concurrency` run simultaneously.\n */\nexport function pLimit(concurrency: number) {\n const maxConcurrency = Number.isFinite(concurrency) ? Math.max(1, Math.floor(concurrency)) : 1;\n let active = 0;\n const queue: Array<() => void> = [];\n\n function next() {\n if (queue.length > 0 && active < maxConcurrency) {\n active++;\n queue.shift()!();\n }\n }\n\n return <T>(fn: () => Promise<T>): Promise<T> =>\n new Promise<T>((resolve, reject) => {\n const run = () => {\n fn().then(resolve, reject).finally(() => {\n active--;\n next();\n });\n };\n queue.push(run);\n next();\n });\n}\n","import type Database from \"better-sqlite3\";\nimport type { MemoryStore } from \"../interfaces\";\nimport type { DocumentChunk, ConversationTurn, ChunkFilter } from \"../chunk-types\";\nimport type { EmbedText } from \"../../core/types\";\nimport { pLimit } from \"../../core/concurrency\";\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n\nexport function createSqliteMemoryStore(db: Database.Database, embed: EmbedText): MemoryStore {\n const limit = pLimit(4);\n\n return {\n async addChunks(chunks: DocumentChunk[]): Promise<void> {\n const stmt = db.prepare(\"INSERT OR REPLACE INTO chunks (id, document_id, type, text, metadata, embedding) VALUES (?, ?, ?, ?, ?, ?)\");\n const insertMany = db.transaction((items: DocumentChunk[]) => {\n for (const chunk of items) {\n stmt.run(chunk.id, chunk.documentId, chunk.type, chunk.text, JSON.stringify(chunk.metadata), null);\n }\n });\n insertMany(chunks);\n\n await Promise.all(chunks.map((chunk) =>\n limit(async () => {\n try {\n const embedding = await embed(chunk.text);\n const buf = Buffer.from(new Float64Array(embedding).buffer);\n db.prepare(\"UPDATE chunks SET embedding = ? WHERE id = ?\").run(buf, chunk.id);\n } catch {\n // Embedding failure is non-fatal\n }\n }),\n ));\n },\n\n async search(query: string, options?: { limit?: number; filter?: ChunkFilter }): Promise<DocumentChunk[]> {\n const queryEmbedding = await embed(query);\n const resultLimit = options?.limit ?? 10;\n\n let sql = \"SELECT id, document_id, type, text, metadata, embedding FROM chunks WHERE embedding IS NOT NULL\";\n const params: unknown[] = [];\n\n if (options?.filter?.documentId) {\n sql += \" AND document_id = ?\";\n params.push(options.filter.documentId);\n }\n if (options?.filter?.type) {\n sql += \" AND type = ?\";\n params.push(options.filter.type);\n }\n\n const rows = db.prepare(sql).all(...params) as Array<{\n id: string; document_id: string; type: string; text: string; metadata: string; embedding: Buffer;\n }>;\n\n const scored = rows.map((row) => {\n const stored = Array.from(new Float64Array(row.embedding.buffer, row.embedding.byteOffset, row.embedding.byteLength / 8));\n return {\n chunk: {\n id: row.id,\n documentId: row.document_id,\n type: row.type as DocumentChunk[\"type\"],\n text: row.text,\n metadata: JSON.parse(row.metadata),\n },\n score: cosineSimilarity(queryEmbedding, stored),\n };\n });\n\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, resultLimit).map((s) => s.chunk);\n },\n\n async addTurn(turn: ConversationTurn): Promise<void> {\n const embedding = await embed(turn.content).catch(() => null);\n const buf = embedding ? Buffer.from(new Float64Array(embedding).buffer) : null;\n db.prepare(\n \"INSERT INTO conversation_turns (id, conversation_id, role, content, tool_name, tool_result, timestamp, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\"\n ).run(turn.id, turn.conversationId, turn.role, turn.content, turn.toolName ?? null, turn.toolResult ?? null, turn.timestamp, buf);\n },\n\n async getHistory(conversationId: string, options?: { limit?: number }): Promise<ConversationTurn[]> {\n const resultLimit = options?.limit ?? 50;\n const rows = db.prepare(\n \"SELECT id, conversation_id, role, content, tool_name, tool_result, timestamp FROM conversation_turns WHERE conversation_id = ? ORDER BY timestamp DESC LIMIT ?\"\n ).all(conversationId, resultLimit) as Array<Record<string, unknown>>;\n\n return rows.reverse().map((r) => ({\n id: r.id as string,\n conversationId: r.conversation_id as string,\n role: r.role as ConversationTurn[\"role\"],\n content: r.content as string,\n toolName: r.tool_name as string | undefined,\n toolResult: r.tool_result as string | undefined,\n timestamp: r.timestamp as number,\n }));\n },\n\n async searchHistory(query: string, conversationId?: string): Promise<ConversationTurn[]> {\n const queryEmbedding = await embed(query);\n\n let sql = \"SELECT id, conversation_id, role, content, tool_name, tool_result, timestamp, embedding FROM conversation_turns WHERE embedding IS NOT NULL\";\n const params: unknown[] = [];\n if (conversationId) {\n sql += \" AND conversation_id = ?\";\n params.push(conversationId);\n }\n\n const rows = db.prepare(sql).all(...params) as Array<Record<string, unknown>>;\n\n const scored = rows.map((row) => {\n const buf = row.embedding as Buffer;\n const stored = Array.from(new Float64Array(buf.buffer, buf.byteOffset, buf.byteLength / 8));\n return {\n turn: {\n id: row.id as string,\n conversationId: row.conversation_id as string,\n role: row.role as ConversationTurn[\"role\"],\n content: row.content as string,\n toolName: row.tool_name as string | undefined,\n toolResult: row.tool_result as string | undefined,\n timestamp: row.timestamp as number,\n },\n score: cosineSimilarity(queryEmbedding, stored),\n };\n });\n\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, 10).map((s) => s.turn);\n },\n };\n}\n","import { z } from \"zod\";\nimport { AcordLobCodeSchema, toLobCodes } from \"../schemas/lines-of-business\";\n\nexport const SourceSpanKindSchema = z.enum([\n \"pdf_text\",\n \"pdf_image\",\n \"html\",\n \"markdown\",\n \"plain_text\",\n \"structured_field\",\n]);\nexport type SourceSpanKind = z.infer<typeof SourceSpanKindSchema>;\n\nexport const SourceSpanUnitSchema = z.enum([\n \"page\",\n \"section\",\n \"table\",\n \"table_row\",\n \"table_cell\",\n \"key_value\",\n \"text\",\n]);\nexport type SourceSpanUnit = z.infer<typeof SourceSpanUnitSchema>;\n\nexport const SourceKindSchema = z.enum([\n \"policy_pdf\",\n \"application_pdf\",\n \"email\",\n \"attachment\",\n \"manual_note\",\n]);\nexport type SourceKind = z.infer<typeof SourceKindSchema>;\n\nexport const SourceSpanBBoxSchema = z.object({\n page: z.number().int().positive(),\n x: z.number(),\n y: z.number(),\n width: z.number(),\n height: z.number(),\n});\nexport type SourceSpanBBox = z.infer<typeof SourceSpanBBoxSchema>;\n\nexport const SourceSpanLocationSchema = z.object({\n page: z.number().int().positive().optional(),\n startPage: z.number().int().positive().optional(),\n endPage: z.number().int().positive().optional(),\n charStart: z.number().int().nonnegative().optional(),\n charEnd: z.number().int().nonnegative().optional(),\n lineStart: z.number().int().positive().optional(),\n lineEnd: z.number().int().positive().optional(),\n fieldPath: z.string().optional(),\n});\nexport type SourceSpanLocation = z.infer<typeof SourceSpanLocationSchema>;\n\nexport const SourceSpanTableLocationSchema = z.object({\n tableId: z.string().optional(),\n rowIndex: z.number().int().nonnegative().optional(),\n columnIndex: z.number().int().nonnegative().optional(),\n columnName: z.string().optional(),\n rowSpanId: z.string().optional(),\n tableSpanId: z.string().optional(),\n isHeader: z.boolean().optional(),\n});\nexport type SourceSpanTableLocation = z.infer<typeof SourceSpanTableLocationSchema>;\n\nexport const SourceSpanSchema = z.object({\n id: z.string().min(1),\n documentId: z.string().min(1),\n sourceKind: SourceKindSchema.optional(),\n chunkId: z.string().optional(),\n kind: SourceSpanKindSchema,\n text: z.string(),\n hash: z.string().min(1),\n textHash: z.string().optional(),\n pageStart: z.number().int().positive().optional(),\n pageEnd: z.number().int().positive().optional(),\n sectionId: z.string().optional(),\n formNumber: z.string().optional(),\n sourceUnit: SourceSpanUnitSchema.optional(),\n parentSpanId: z.string().optional(),\n table: SourceSpanTableLocationSchema.optional(),\n bbox: z.array(SourceSpanBBoxSchema).optional(),\n location: SourceSpanLocationSchema.optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n});\nexport type SourceSpan = z.infer<typeof SourceSpanSchema>;\n\nexport const SourceSpanRefSchema = z.object({\n sourceSpanId: z.string().min(1),\n documentId: z.string().min(1).optional(),\n chunkId: z.string().optional(),\n quote: z.string().optional(),\n hash: z.string().optional(),\n location: SourceSpanLocationSchema.optional(),\n});\nexport type SourceSpanRef = z.infer<typeof SourceSpanRefSchema>;\n\nexport const SourceChunkSchema = z.object({\n id: z.string().min(1),\n documentId: z.string().min(1),\n sourceSpanIds: z.array(z.string().min(1)),\n text: z.string(),\n textHash: z.string().min(1),\n pageStart: z.number().int().positive().optional(),\n pageEnd: z.number().int().positive().optional(),\n metadata: z.record(z.string(), z.string()).default({}),\n});\nexport type SourceChunk = z.infer<typeof SourceChunkSchema>;\n\nexport const DocumentSourceNodeKindSchema = z.enum([\n \"document\",\n \"page_group\",\n \"page\",\n \"form\",\n \"endorsement\",\n \"section\",\n \"schedule\",\n \"clause\",\n \"table\",\n \"table_row\",\n \"table_cell\",\n \"text\",\n]);\nexport type DocumentSourceNodeKind = z.infer<typeof DocumentSourceNodeKindSchema>;\n\nexport const DocumentSourceNodeSchema = z.object({\n id: z.string().min(1),\n documentId: z.string().min(1),\n parentId: z.string().optional(),\n kind: DocumentSourceNodeKindSchema,\n title: z.string(),\n description: z.string(),\n textExcerpt: z.string().optional(),\n sourceSpanIds: z.array(z.string().min(1)),\n pageStart: z.number().int().positive().optional(),\n pageEnd: z.number().int().positive().optional(),\n bbox: z.array(SourceSpanBBoxSchema).optional(),\n order: z.number().int().nonnegative(),\n path: z.string(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\nexport type DocumentSourceNode = z.infer<typeof DocumentSourceNodeSchema>;\n\nexport const SourceBackedValueSchema = z.object({\n value: z.string(),\n normalizedValue: z.string().optional(),\n confidence: z.enum([\"low\", \"medium\", \"high\"]).default(\"medium\"),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type SourceBackedValue = z.infer<typeof SourceBackedValueSchema>;\n\nexport const OperationalAddressSchema = z.object({\n street1: z.string().optional(),\n street2: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n zip: z.string().optional(),\n country: z.string().optional(),\n formatted: z.string().optional(),\n});\nexport type OperationalAddress = z.infer<typeof OperationalAddressSchema>;\n\nexport const OperationalDeclarationFactSchema = z.object({\n field: z.enum([\n \"namedInsured\",\n \"mailingAddress\",\n \"dba\",\n \"entityType\",\n \"taxId\",\n \"additionalNamedInsured\",\n \"policyNumber\",\n \"insurer\",\n \"broker\",\n \"effectiveDate\",\n \"expirationDate\",\n \"premium\",\n \"other\",\n ]),\n label: z.string().optional(),\n value: z.string(),\n normalizedValue: z.string().optional(),\n valueKind: z.enum([\"string\", \"number\", \"date\", \"money\", \"address\", \"list\", \"unknown\"]).default(\"string\"),\n address: OperationalAddressSchema.optional(),\n confidence: z.enum([\"low\", \"medium\", \"high\"]).default(\"medium\"),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalDeclarationFact = z.infer<typeof OperationalDeclarationFactSchema>;\n\nexport const OperationalCoverageTermSchema = z.object({\n kind: z.enum([\n \"each_claim_limit\",\n \"each_occurrence_limit\",\n \"each_loss_limit\",\n \"aggregate_limit\",\n \"sublimit\",\n \"retention\",\n \"deductible\",\n \"retroactive_date\",\n \"premium\",\n \"other\",\n ]).default(\"other\"),\n label: z.string(),\n value: z.string(),\n amount: z.number().optional(),\n appliesTo: z.string().optional(),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalCoverageTerm = z.infer<typeof OperationalCoverageTermSchema>;\n\nexport const OperationalCoverageLineSchema = z.object({\n name: z.string(),\n coverageCode: z.string().optional(),\n limit: z.string().optional(),\n deductible: z.string().optional(),\n premium: z.string().optional(),\n retroactiveDate: z.string().optional(),\n formNumber: z.string().optional(),\n sectionRef: z.string().optional(),\n endorsementNumber: z.string().optional(),\n limits: z.array(OperationalCoverageTermSchema).default([]),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalCoverageLine = z.infer<typeof OperationalCoverageLineSchema>;\n\nexport const OperationalPartySchema = z.object({\n role: z.string(),\n name: z.string(),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalParty = z.infer<typeof OperationalPartySchema>;\n\nexport const OperationalEndorsementSupportSchema = z.object({\n kind: z.string(),\n status: z.enum([\"supported\", \"excluded\", \"requires_review\"]),\n summary: z.string(),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n});\nexport type OperationalEndorsementSupport = z.infer<typeof OperationalEndorsementSupportSchema>;\n\nfunction legacyOperationalProfileInput(value: unknown) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return value;\n const record = value as Record<string, unknown>;\n if (\"linesOfBusiness\" in record) return value;\n if (!(\"policyTypes\" in record)) return value;\n return {\n ...record,\n linesOfBusiness: record.policyTypes,\n };\n}\n\nconst OperationalLinesOfBusinessSchema = z.preprocess(\n (value) => (Array.isArray(value) ? toLobCodes(value.filter((item): item is string => typeof item === \"string\")) : undefined),\n z.array(AcordLobCodeSchema).default([\"UN\"]),\n);\n\nexport const PolicyOperationalProfileSchema = z.preprocess(\n legacyOperationalProfileInput,\n z.object({\n documentType: z.enum([\"policy\", \"quote\"]).default(\"policy\"),\n linesOfBusiness: OperationalLinesOfBusinessSchema,\n policyNumber: SourceBackedValueSchema.optional(),\n namedInsured: SourceBackedValueSchema.optional(),\n insurer: SourceBackedValueSchema.optional(),\n broker: SourceBackedValueSchema.optional(),\n effectiveDate: SourceBackedValueSchema.optional(),\n expirationDate: SourceBackedValueSchema.optional(),\n retroactiveDate: SourceBackedValueSchema.optional(),\n premium: SourceBackedValueSchema.optional(),\n declarationFacts: z.array(OperationalDeclarationFactSchema).default([]),\n coverages: z.array(OperationalCoverageLineSchema).default([]),\n parties: z.array(OperationalPartySchema).default([]),\n endorsementSupport: z.array(OperationalEndorsementSupportSchema).default([]),\n sourceNodeIds: z.array(z.string().min(1)).default([]),\n sourceSpanIds: z.array(z.string().min(1)).default([]),\n warnings: z.array(z.string()).default([]),\n }),\n);\nexport type PolicyOperationalProfile = z.infer<typeof PolicyOperationalProfileSchema>;\n","import { z } from \"zod\";\n\nexport const ACORD_LOB_CODES = [\n \"AAPPL\",\n \"AGLIA\",\n \"AGPP\",\n \"AGPR\",\n \"AIRC\",\n \"AIRPFB\",\n \"APKG\",\n \"APKGE\",\n \"APROD\",\n \"ARVP\",\n \"AUTO\",\n \"AUTOB\",\n \"AUTOP\",\n \"AVPKG\",\n \"BANDM\",\n \"BLANK\",\n \"BMISC\",\n \"BOAT\",\n \"BOP\",\n \"BOPGL\",\n \"BOPPR\",\n \"CAVN\",\n \"CEQFL\",\n \"CFIRE\",\n \"CFRM\",\n \"CGL\",\n \"COMAR\",\n \"COMR\",\n \"CONTR\",\n \"CPKGE\",\n \"CPMP\",\n \"CRIME\",\n \"DFIRE\",\n \"DISAB\",\n \"DO\",\n \"EDP\",\n \"EL\",\n \"EO\",\n \"EPLI\",\n \"EQ\",\n \"EQPFL\",\n \"EXLIA\",\n \"FIDTY\",\n \"FIDUC\",\n \"FINEA\",\n \"FLOOD\",\n \"GARAG\",\n \"GL\",\n \"GLASS\",\n \"HANG\",\n \"HBB\",\n \"HOME\",\n \"INBR\",\n \"INMAR\",\n \"INMRC\",\n \"INMRP\",\n \"JUDCL\",\n \"KIDRA\",\n \"LL\",\n \"MHOME\",\n \"MMAL\",\n \"Motorcycle\",\n \"MTRTK\",\n \"OLIB\",\n \"PHYS\",\n \"PKG\",\n \"PL\",\n \"PLMSC\",\n \"PPKGE\",\n \"PROP\",\n \"PROPC\",\n \"PUBOF\",\n \"RECV\",\n \"SCHPR\",\n \"SIGNS\",\n \"SMP\",\n \"SURE\",\n \"TRANS\",\n \"TRUCK\",\n \"UMBRC\",\n \"UMBRL\",\n \"UMBRP\",\n \"UN\",\n \"WCMA\",\n \"WIND\",\n \"WORK\",\n \"WORKP\",\n \"WORKV\",\n] as const;\n\nexport const AcordLobCodeSchema = z.enum(ACORD_LOB_CODES);\nexport type AcordLobCode = z.infer<typeof AcordLobCodeSchema>;\n\nexport const ACORD_LOB_LABELS: Record<AcordLobCode, string> = {\n AAPPL: \"Aircraft / Aerial Applicator\",\n AGLIA: \"Agricultural Liability\",\n AGPP: \"Agricultural Personal Property\",\n AGPR: \"Agricultural Property\",\n AIRC: \"Aircraft\",\n AIRPFB: \"Airport / Fixed Base Operator\",\n APKG: \"Agricultural Package\",\n APKGE: \"Agricultural Package (Extended)\",\n APROD: \"Agricultural Products\",\n ARVP: \"Recreational Vehicle Package\",\n AUTO: \"Automobile\",\n AUTOB: \"Business Auto\",\n AUTOP: \"Personal Auto\",\n AVPKG: \"Aviation Package\",\n BANDM: \"Boiler & Machinery\",\n BLANK: \"Blanket\",\n BMISC: \"Business Miscellaneous\",\n BOAT: \"Boat\",\n BOP: \"Businessowners Policy\",\n BOPGL: \"BOP - General Liability\",\n BOPPR: \"BOP - Property\",\n CAVN: \"Commercial Aviation\",\n CEQFL: \"Contractors Equipment Floater\",\n CFIRE: \"Commercial Fire\",\n CFRM: \"Commercial Farm\",\n CGL: \"Commercial General Liability\",\n COMAR: \"Commercial Marine / Ocean Marine\",\n COMR: \"Commercial (misc.)\",\n CONTR: \"Contractors\",\n CPKGE: \"Commercial Package\",\n CPMP: \"Commercial Package (multi-peril)\",\n CRIME: \"Crime\",\n DFIRE: \"Dwelling Fire\",\n DISAB: \"Disability\",\n DO: \"Directors & Officers Liability\",\n EDP: \"Electronic Data Processing\",\n EL: \"Employers Liability\",\n EO: \"Errors & Omissions\",\n EPLI: \"Employment Practices Liability\",\n EQ: \"Earthquake\",\n EQPFL: \"Equipment Floater\",\n EXLIA: \"Excess Liability\",\n FIDTY: \"Fidelity\",\n FIDUC: \"Fiduciary Liability\",\n FINEA: \"Fine Arts\",\n FLOOD: \"Flood\",\n GARAG: \"Garage\",\n GL: \"General Liability\",\n GLASS: \"Glass\",\n HANG: \"Hangar (Aviation)\",\n HBB: \"Home-Based Business\",\n HOME: \"Homeowners\",\n INBR: \"Inland Marine - Brokers\",\n INMAR: \"Inland Marine\",\n INMRC: \"Inland Marine - Commercial\",\n INMRP: \"Inland Marine - Personal\",\n JUDCL: \"Judicial Bonds\",\n KIDRA: \"Kidnap & Ransom\",\n LL: \"Liquor Liability\",\n MHOME: \"Mobile Home\",\n MMAL: \"Medical Malpractice\",\n Motorcycle: \"Motorcycle\",\n MTRTK: \"Motor Truck Cargo\",\n OLIB: \"Other Liability\",\n PHYS: \"Physical Damage\",\n PKG: \"Package\",\n PL: \"Professional Liability\",\n PLMSC: \"Personal Lines Miscellaneous\",\n PPKGE: \"Personal Package\",\n PROP: \"Property\",\n PROPC: \"Property - Commercial\",\n PUBOF: \"Public Officials Liability\",\n RECV: \"Recreational Vehicle\",\n SCHPR: \"Scheduled Property\",\n SIGNS: \"Signs\",\n SMP: \"Special Multi-Peril\",\n SURE: \"Surety\",\n TRANS: \"Transportation\",\n TRUCK: \"Trucking\",\n UMBRC: \"Umbrella - Commercial\",\n UMBRL: \"Umbrella\",\n UMBRP: \"Umbrella - Personal\",\n UN: \"Unspecified / Unknown\",\n WCMA: \"Workers Comp - Monopolistic/State\",\n WIND: \"Wind\",\n WORK: \"Workers Compensation\",\n WORKP: \"Workers Compensation (Personal/Package)\",\n WORKV: \"Workers Compensation (Voluntary)\",\n};\n\nexport const EXCLUDED_ACORD_LOB_CODES = new Set([\n \"ACHE\",\n \"INTER\",\n \"LICPT\",\n \"LSTIN\",\n \"NWFGR\",\n \"PAPER\",\n \"SCAP\",\n \"SFRNC\",\n]);\n\nexport const LEGACY_POLICY_TYPE_TO_LOB: Record<string, AcordLobCode[]> = {\n general_liability: [\"CGL\"],\n commercial_property: [\"PROPC\"],\n commercial_auto: [\"AUTOB\"],\n non_owned_auto: [\"AUTOB\"],\n workers_comp: [\"WORK\"],\n umbrella: [\"UMBRC\"],\n excess_liability: [\"EXLIA\"],\n professional_liability: [\"EO\"],\n cyber: [\"OLIB\"],\n epli: [\"EPLI\"],\n directors_officers: [\"DO\"],\n fiduciary_liability: [\"FIDUC\"],\n crime_fidelity: [\"CRIME\"],\n inland_marine: [\"INMRC\"],\n builders_risk: [\"INMRC\"],\n environmental: [\"OLIB\"],\n ocean_marine: [\"COMAR\"],\n surety: [\"SURE\"],\n product_liability: [\"OLIB\"],\n bop: [\"BOP\"],\n management_liability_package: [\"DO\", \"EPLI\", \"FIDUC\"],\n property: [\"PROP\"],\n homeowners_ho3: [\"HOME\"],\n homeowners_ho5: [\"HOME\"],\n renters_ho4: [\"HOME\"],\n condo_ho6: [\"HOME\"],\n dwelling_fire: [\"DFIRE\"],\n mobile_home: [\"MHOME\"],\n personal_auto: [\"AUTOP\"],\n personal_umbrella: [\"UMBRP\"],\n flood_nfip: [\"FLOOD\"],\n flood_private: [\"FLOOD\"],\n earthquake: [\"EQ\"],\n personal_inland_marine: [\"INMRP\"],\n watercraft: [\"BOAT\"],\n recreational_vehicle: [\"RECV\"],\n farm_ranch: [\"CFRM\"],\n life: [\"UN\"],\n critical_illness: [\"DISAB\"],\n disability: [\"DISAB\"],\n long_term_care: [\"UN\"],\n pet: [\"UN\"],\n travel: [\"UN\"],\n identity_theft: [\"UN\"],\n title: [\"UN\"],\n other: [\"UN\"],\n unknown: [\"UN\"],\n auto: [\"AUTOB\"],\n crime: [\"CRIME\"],\n crim: [\"CRIME\"],\n fiduciary: [\"FIDUC\"],\n d_and_o: [\"DO\"],\n d_o: [\"DO\"],\n homeowners: [\"HOME\"],\n renters: [\"HOME\"],\n flood: [\"FLOOD\"],\n boat: [\"BOAT\"],\n motorcycle: [\"Motorcycle\"],\n};\n\nexport const PERSONAL_LOB_CODES = new Set<AcordLobCode>([\n \"AUTOP\",\n \"HOME\",\n \"MHOME\",\n \"DFIRE\",\n \"FLOOD\",\n \"EQ\",\n \"INMRP\",\n \"UMBRP\",\n \"BOAT\",\n \"RECV\",\n \"Motorcycle\",\n \"PPKGE\",\n \"DISAB\",\n \"PLMSC\",\n \"HBB\",\n]);\n\nfunction hasOwn<T extends object>(object: T, key: PropertyKey): key is keyof T {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction canonicalLegacyKey(value: string) {\n return value\n .trim()\n .toLowerCase()\n .replace(/&/g, \" and \")\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .replace(/_+/g, \"_\");\n}\n\nfunction humanize(value: string) {\n return value\n .trim()\n .replace(/[_-]+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function isLobCode(value: unknown): value is AcordLobCode {\n return typeof value === \"string\" && hasOwn(ACORD_LOB_LABELS, value);\n}\n\nfunction resolveLobCode(value: string): AcordLobCode | undefined {\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n if (isLobCode(trimmed)) return trimmed;\n if (trimmed.toLowerCase() === \"motorcycle\") return \"Motorcycle\";\n const legacy = LEGACY_POLICY_TYPE_TO_LOB[canonicalLegacyKey(trimmed)];\n if (legacy?.[0]) return legacy[0];\n const upper = trimmed.toUpperCase();\n if (upper === \"CRIM\") return \"CRIME\";\n if (isLobCode(upper)) return upper;\n return undefined;\n}\n\nexport function normalizeOperationalLinesOfBusiness(values: unknown): AcordLobCode[] {\n const source = Array.isArray(values)\n ? values.filter((value): value is string => typeof value === \"string\" && value.trim().length > 0)\n : [];\n return toLobCodes(source);\n}\n\nexport function toLobCodes(values?: readonly string[]): AcordLobCode[] {\n const source = values?.filter((value) => typeof value === \"string\" && value.trim()) ?? [];\n if (source.length === 0) return [\"UN\"];\n const codes: AcordLobCode[] = [];\n for (const value of source) {\n const trimmed = value.trim();\n if (isLobCode(trimmed)) {\n codes.push(trimmed);\n continue;\n }\n if (trimmed.toUpperCase() === \"CRIM\") {\n codes.push(\"CRIME\");\n continue;\n }\n const mapped = LEGACY_POLICY_TYPE_TO_LOB[canonicalLegacyKey(trimmed)];\n if (mapped) {\n codes.push(...mapped);\n continue;\n }\n const upper = trimmed.toUpperCase();\n if (isLobCode(upper)) {\n codes.push(upper);\n continue;\n }\n codes.push(\"UN\");\n }\n return Array.from(new Set(codes));\n}\n\nexport function lobLabel(value: string): string {\n const code = resolveLobCode(value);\n return code ? ACORD_LOB_LABELS[code] : humanize(value);\n}\n\nexport function isPersonalLob(code: string): boolean {\n return isLobCode(code) && PERSONAL_LOB_CODES.has(code);\n}\n","import type { DocumentSourceNode, SourceSpan } from \"./schemas\";\n\nexport type SourceRetrievalMode = \"graph_only\" | \"source_rag\" | \"long_context\" | \"hybrid\";\n\nexport interface SourceRetrievalQuery {\n question: string;\n documentIds?: string[];\n chunkIds?: string[];\n limit?: number;\n mode?: SourceRetrievalMode;\n filters?: Record<string, string>;\n}\n\nexport interface SourceRetrievalResult {\n span: SourceSpan;\n relevance: number;\n}\n\nexport interface SourceNodeRetrievalResult {\n node: DocumentSourceNode;\n relevance: number;\n hierarchy: DocumentSourceNode[];\n spans: SourceSpan[];\n}\n\nexport interface SourceRetriever {\n searchSourceSpans(query: SourceRetrievalQuery): Promise<SourceRetrievalResult[]>;\n searchSourceNodes?(query: SourceRetrievalQuery): Promise<SourceNodeRetrievalResult[]>;\n}\n\nexport interface OrderableSourceEvidence {\n source?: string;\n sourceSpanId?: string;\n chunkId?: string;\n documentId?: string;\n turnId?: string;\n attachmentId?: string;\n text: string;\n relevance: number;\n}\n\nfunction evidenceTieBreakId(evidence: OrderableSourceEvidence): string {\n return [\n evidence.source ?? \"\",\n evidence.sourceSpanId ?? \"\",\n evidence.chunkId ?? \"\",\n evidence.documentId ?? \"\",\n evidence.turnId ?? \"\",\n evidence.attachmentId ?? \"\",\n evidence.text,\n ].join(\"|\");\n}\n\nexport function compareSourceEvidence(a: OrderableSourceEvidence, b: OrderableSourceEvidence): number {\n const relevanceDelta = b.relevance - a.relevance;\n if (relevanceDelta !== 0) return relevanceDelta;\n return evidenceTieBreakId(a).localeCompare(evidenceTieBreakId(b));\n}\n\nexport function orderSourceEvidence<T extends OrderableSourceEvidence>(evidence: T[]): T[] {\n return [...evidence].sort(compareSourceEvidence);\n}\n","import type Database from \"better-sqlite3\";\nimport type { EmbedText } from \"../../core/types\";\nimport type {\n SourceChunk,\n SourceRetrievalQuery,\n SourceRetrievalResult,\n SourceSpan,\n SourceStore,\n} from \"../../source\";\nimport { orderSourceEvidence } from \"../../source\";\nimport { pLimit } from \"../../core/concurrency\";\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n const denominator = Math.sqrt(magA) * Math.sqrt(magB);\n return denominator === 0 ? 0 : dot / denominator;\n}\n\nfunction embeddingToBuffer(embedding: number[]): Buffer {\n return Buffer.from(new Float64Array(embedding).buffer);\n}\n\nfunction bufferToEmbedding(buffer: Buffer): number[] {\n return Array.from(new Float64Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 8));\n}\n\nfunction parseJson<T>(value: string | null | undefined, fallback: T): T {\n if (!value) return fallback;\n try {\n return JSON.parse(value) as T;\n } catch {\n return fallback;\n }\n}\n\nfunction rowToSourceSpan(row: Record<string, unknown>): SourceSpan {\n const metadata = parseJson(row.metadata as string | undefined, {});\n return {\n id: row.id as string,\n documentId: row.document_id as string,\n sourceKind: (row.source_kind ?? undefined) as SourceSpan[\"sourceKind\"],\n chunkId: (row.chunk_id ?? undefined) as string | undefined,\n kind: row.kind as SourceSpan[\"kind\"],\n text: row.text as string,\n hash: row.hash as string,\n textHash: (row.text_hash ?? undefined) as string | undefined,\n pageStart: (row.page_start ?? undefined) as number | undefined,\n pageEnd: (row.page_end ?? undefined) as number | undefined,\n sectionId: (row.section_id ?? undefined) as string | undefined,\n formNumber: (row.form_number ?? undefined) as string | undefined,\n sourceUnit: (row.source_unit ?? undefined) as SourceSpan[\"sourceUnit\"],\n parentSpanId: (row.parent_span_id ?? undefined) as string | undefined,\n table: parseJson(row.table_location as string | undefined, undefined),\n location: parseJson(row.location as string | undefined, undefined),\n bbox: parseJson(row.bbox as string | undefined, undefined),\n metadata: Object.keys(metadata).length ? metadata : undefined,\n };\n}\n\nfunction rowToSourceChunk(row: Record<string, unknown>): SourceChunk {\n return {\n id: row.id as string,\n documentId: row.document_id as string,\n sourceSpanIds: parseJson(row.source_span_ids as string | undefined, []),\n text: row.text as string,\n textHash: row.text_hash as string,\n pageStart: row.page_start as number | undefined,\n pageEnd: row.page_end as number | undefined,\n metadata: parseJson(row.metadata as string | undefined, {}),\n };\n}\n\nexport function createSqliteSourceStore(db: Database.Database, embed: EmbedText): SourceStore {\n const limit = pLimit(4);\n\n return {\n async addSourceSpans(spans: SourceSpan[]): Promise<void> {\n const stmt = db.prepare(`\n INSERT OR REPLACE INTO source_spans (\n id, document_id, source_kind, chunk_id, kind, text, hash, text_hash,\n page_start, page_end, section_id, form_number, source_unit, parent_span_id,\n table_location, location, bbox, metadata, embedding\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n const insertMany = db.transaction((items: SourceSpan[]) => {\n for (const span of items) {\n stmt.run(\n span.id,\n span.documentId,\n span.sourceKind ?? null,\n span.chunkId ?? null,\n span.kind,\n span.text,\n span.hash,\n span.textHash ?? null,\n span.pageStart ?? null,\n span.pageEnd ?? null,\n span.sectionId ?? null,\n span.formNumber ?? null,\n span.sourceUnit ?? null,\n span.parentSpanId ?? null,\n span.table ? JSON.stringify(span.table) : null,\n span.location ? JSON.stringify(span.location) : null,\n span.bbox ? JSON.stringify(span.bbox) : null,\n JSON.stringify(span.metadata ?? {}),\n null,\n );\n }\n });\n insertMany(spans);\n\n await Promise.all(spans.map((span) =>\n limit(async () => {\n try {\n const embedding = await embed(span.text);\n db.prepare(\"UPDATE source_spans SET embedding = ? WHERE id = ?\").run(embeddingToBuffer(embedding), span.id);\n } catch {\n // Embedding failure is non-fatal; span text remains persisted.\n }\n }),\n ));\n },\n\n async addSourceChunks(chunks: SourceChunk[]): Promise<void> {\n const stmt = db.prepare(`\n INSERT OR REPLACE INTO source_chunks (\n id, document_id, source_span_ids, text, text_hash, page_start, page_end, metadata\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `);\n const insertMany = db.transaction((items: SourceChunk[]) => {\n for (const chunk of items) {\n stmt.run(\n chunk.id,\n chunk.documentId,\n JSON.stringify(chunk.sourceSpanIds),\n chunk.text,\n chunk.textHash,\n chunk.pageStart ?? null,\n chunk.pageEnd ?? null,\n JSON.stringify(chunk.metadata ?? {}),\n );\n }\n });\n insertMany(chunks);\n },\n\n async getSourceSpan(id: string): Promise<SourceSpan | null> {\n const row = db.prepare(\"SELECT * FROM source_spans WHERE id = ?\").get(id) as Record<string, unknown> | undefined;\n return row ? rowToSourceSpan(row) : null;\n },\n\n async getSourceSpansByDocument(documentId: string): Promise<SourceSpan[]> {\n const rows = db.prepare(\"SELECT * FROM source_spans WHERE document_id = ? ORDER BY id ASC\").all(documentId) as Array<Record<string, unknown>>;\n return rows.map(rowToSourceSpan);\n },\n\n async getSourceChunksByDocument(documentId: string): Promise<SourceChunk[]> {\n const rows = db.prepare(\"SELECT * FROM source_chunks WHERE document_id = ? ORDER BY id ASC\").all(documentId) as Array<Record<string, unknown>>;\n return rows.map(rowToSourceChunk);\n },\n\n async deleteDocumentSource(documentId: string): Promise<void> {\n db.prepare(\"DELETE FROM source_chunks WHERE document_id = ?\").run(documentId);\n db.prepare(\"DELETE FROM source_spans WHERE document_id = ?\").run(documentId);\n },\n\n async searchSourceSpans(query: SourceRetrievalQuery): Promise<SourceRetrievalResult[]> {\n const queryEmbedding = await embed(query.question);\n const resultLimit = query.limit ?? 10;\n let sql = \"SELECT * FROM source_spans WHERE embedding IS NOT NULL\";\n const params: unknown[] = [];\n\n if (query.documentIds?.length) {\n sql += ` AND document_id IN (${query.documentIds.map(() => \"?\").join(\",\")})`;\n params.push(...query.documentIds);\n }\n if (query.chunkIds?.length) {\n sql += ` AND chunk_id IN (${query.chunkIds.map(() => \"?\").join(\",\")})`;\n params.push(...query.chunkIds);\n }\n if (query.filters?.sourceKind) {\n sql += \" AND source_kind = ?\";\n params.push(query.filters.sourceKind);\n }\n if (query.filters?.formNumber) {\n sql += \" AND form_number = ?\";\n params.push(query.filters.formNumber);\n }\n if (query.filters?.sectionId) {\n sql += \" AND section_id = ?\";\n params.push(query.filters.sectionId);\n }\n\n const rows = db.prepare(sql).all(...params) as Array<Record<string, unknown>>;\n const scored = rows.map((row) => {\n const span = rowToSourceSpan(row);\n return {\n span,\n relevance: cosineSimilarity(queryEmbedding, bufferToEmbedding(row.embedding as Buffer)),\n };\n });\n\n return orderSourceEvidence(scored.map((result) => ({\n ...result,\n sourceSpanId: result.span.id,\n chunkId: result.span.chunkId,\n documentId: result.span.documentId,\n text: result.span.text,\n }))).map(({ span, relevance }) => ({ span, relevance })).slice(0, resultLimit);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKtB,SAAS,0BAA0B,IAAsC;AAC9E,SAAO;AAAA,IACL,MAAM,KAAK,KAAuC;AAChD,SAAG,QAAQ,oEAAoE,EAAE;AAAA,QAC/E,IAAI;AAAA,QAAI,IAAI;AAAA,QAAM,KAAK,UAAU,GAAG;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,IAA+C;AACvD,YAAM,MAAM,GAAG,QAAQ,yCAAyC,EAAE,IAAI,EAAE;AACxE,aAAO,MAAM,KAAK,MAAM,IAAI,IAAI,IAAI;AAAA,IACtC;AAAA,IAEA,MAAM,MAAM,SAAwD;AAClE,UAAI,MAAM;AACV,YAAM,SAAoB,CAAC;AAE3B,UAAI,QAAQ,MAAM;AAChB,eAAO;AACP,eAAO,KAAK,QAAQ,IAAI;AAAA,MAC1B;AACA,UAAI,QAAQ,SAAS;AACnB,eAAO;AACP,eAAO,KAAK,IAAI,QAAQ,OAAO,GAAG;AAAA,MACpC;AACA,UAAI,QAAQ,aAAa;AACvB,eAAO;AACP,eAAO,KAAK,IAAI,QAAQ,WAAW,GAAG;AAAA,MACxC;AACA,UAAI,QAAQ,cAAc;AACxB,eAAO;AACP,eAAO,KAAK,QAAQ,YAAY;AAAA,MAClC;AACA,UAAI,QAAQ,aAAa;AACvB,eAAO;AACP,eAAO,KAAK,QAAQ,WAAW;AAAA,MACjC;AAEA,YAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,IAAI,GAAG,MAAM;AAC1C,aAAO,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,IAAI,CAAC;AAAA,IAC3C;AAAA,IAEA,MAAM,OAAO,IAA2B;AACtC,SAAG,QAAQ,oCAAoC,EAAE,IAAI,EAAE;AAAA,IACzD;AAAA,EACF;AACF;;;AC/CO,SAAS,OAAO,aAAqB;AAC1C,QAAM,iBAAiB,OAAO,SAAS,WAAW,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,WAAW,CAAC,IAAI;AAC7F,MAAI,SAAS;AACb,QAAM,QAA2B,CAAC;AAElC,WAAS,OAAO;AACd,QAAI,MAAM,SAAS,KAAK,SAAS,gBAAgB;AAC/C;AACA,YAAM,MAAM,EAAG;AAAA,IACjB;AAAA,EACF;AAEA,SAAO,CAAI,OACT,IAAI,QAAW,CAAC,SAAS,WAAW;AAClC,UAAM,MAAM,MAAM;AAChB,SAAG,EAAE,KAAK,SAAS,MAAM,EAAE,QAAQ,MAAM;AACvC;AACA,aAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,UAAM,KAAK,GAAG;AACd,SAAK;AAAA,EACP,CAAC;AACL;;;ACrBA,SAAS,iBAAiB,GAAa,GAAqB;AAC1D,MAAI,MAAM,GAAG,OAAO,GAAG,OAAO;AAC9B,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,WAAO,EAAE,CAAC,IAAI,EAAE,CAAC;AACjB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,EACpB;AACA,SAAO,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;AAChD;AAEO,SAAS,wBAAwB,IAAuB,OAA+B;AAC5F,QAAM,QAAQ,OAAO,CAAC;AAEtB,SAAO;AAAA,IACL,MAAM,UAAU,QAAwC;AACtD,YAAM,OAAO,GAAG,QAAQ,4GAA4G;AACpI,YAAM,aAAa,GAAG,YAAY,CAAC,UAA2B;AAC5D,mBAAW,SAAS,OAAO;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM,YAAY,MAAM,MAAM,MAAM,MAAM,KAAK,UAAU,MAAM,QAAQ,GAAG,IAAI;AAAA,QACnG;AAAA,MACF,CAAC;AACD,iBAAW,MAAM;AAEjB,YAAM,QAAQ,IAAI,OAAO;AAAA,QAAI,CAAC,UAC5B,MAAM,YAAY;AAChB,cAAI;AACF,kBAAM,YAAY,MAAM,MAAM,MAAM,IAAI;AACxC,kBAAM,MAAM,OAAO,KAAK,IAAI,aAAa,SAAS,EAAE,MAAM;AAC1D,eAAG,QAAQ,8CAA8C,EAAE,IAAI,KAAK,MAAM,EAAE;AAAA,UAC9E,QAAQ;AAAA,UAER;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,OAAO,OAAe,SAA8E;AACxG,YAAM,iBAAiB,MAAM,MAAM,KAAK;AACxC,YAAM,cAAc,SAAS,SAAS;AAEtC,UAAI,MAAM;AACV,YAAM,SAAoB,CAAC;AAE3B,UAAI,SAAS,QAAQ,YAAY;AAC/B,eAAO;AACP,eAAO,KAAK,QAAQ,OAAO,UAAU;AAAA,MACvC;AACA,UAAI,SAAS,QAAQ,MAAM;AACzB,eAAO;AACP,eAAO,KAAK,QAAQ,OAAO,IAAI;AAAA,MACjC;AAEA,YAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,IAAI,GAAG,MAAM;AAI1C,YAAM,SAAS,KAAK,IAAI,CAAC,QAAQ;AAC/B,cAAM,SAAS,MAAM,KAAK,IAAI,aAAa,IAAI,UAAU,QAAQ,IAAI,UAAU,YAAY,IAAI,UAAU,aAAa,CAAC,CAAC;AACxH,eAAO;AAAA,UACL,OAAO;AAAA,YACL,IAAI,IAAI;AAAA,YACR,YAAY,IAAI;AAAA,YAChB,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,UAAU,KAAK,MAAM,IAAI,QAAQ;AAAA,UACnC;AAAA,UACA,OAAO,iBAAiB,gBAAgB,MAAM;AAAA,QAChD;AAAA,MACF,CAAC;AAED,aAAO,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACvC,aAAO,OAAO,MAAM,GAAG,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,IACxD;AAAA,IAEA,MAAM,QAAQ,MAAuC;AACnD,YAAM,YAAY,MAAM,MAAM,KAAK,OAAO,EAAE,MAAM,MAAM,IAAI;AAC5D,YAAM,MAAM,YAAY,OAAO,KAAK,IAAI,aAAa,SAAS,EAAE,MAAM,IAAI;AAC1E,SAAG;AAAA,QACD;AAAA,MACF,EAAE,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,MAAM,KAAK,SAAS,KAAK,YAAY,MAAM,KAAK,cAAc,MAAM,KAAK,WAAW,GAAG;AAAA,IAClI;AAAA,IAEA,MAAM,WAAW,gBAAwB,SAA2D;AAClG,YAAM,cAAc,SAAS,SAAS;AACtC,YAAM,OAAO,GAAG;AAAA,QACd;AAAA,MACF,EAAE,IAAI,gBAAgB,WAAW;AAEjC,aAAO,KAAK,QAAQ,EAAE,IAAI,CAAC,OAAO;AAAA,QAChC,IAAI,EAAE;AAAA,QACN,gBAAgB,EAAE;AAAA,QAClB,MAAM,EAAE;AAAA,QACR,SAAS,EAAE;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,YAAY,EAAE;AAAA,QACd,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,IACJ;AAAA,IAEA,MAAM,cAAc,OAAe,gBAAsD;AACvF,YAAM,iBAAiB,MAAM,MAAM,KAAK;AAExC,UAAI,MAAM;AACV,YAAM,SAAoB,CAAC;AAC3B,UAAI,gBAAgB;AAClB,eAAO;AACP,eAAO,KAAK,cAAc;AAAA,MAC5B;AAEA,YAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,IAAI,GAAG,MAAM;AAE1C,YAAM,SAAS,KAAK,IAAI,CAAC,QAAQ;AAC/B,cAAM,MAAM,IAAI;AAChB,cAAM,SAAS,MAAM,KAAK,IAAI,aAAa,IAAI,QAAQ,IAAI,YAAY,IAAI,aAAa,CAAC,CAAC;AAC1F,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,IAAI,IAAI;AAAA,YACR,gBAAgB,IAAI;AAAA,YACpB,MAAM,IAAI;AAAA,YACV,SAAS,IAAI;AAAA,YACb,UAAU,IAAI;AAAA,YACd,YAAY,IAAI;AAAA,YAChB,WAAW,IAAI;AAAA,UACjB;AAAA,UACA,OAAO,iBAAiB,gBAAgB,MAAM;AAAA,QAChD;AAAA,MACF,CAAC;AAED,aAAO,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACvC,aAAO,OAAO,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAC9C;AAAA,EACF;AACF;;;AC1IA,IAAAA,cAAkB;;;ACAlB,iBAAkB;AAEX,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qBAAqB,aAAE,KAAK,eAAe;AAGjD,IAAM,mBAAiD;AAAA,EAC5D,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAaO,IAAM,4BAA4D;AAAA,EACvE,mBAAmB,CAAC,KAAK;AAAA,EACzB,qBAAqB,CAAC,OAAO;AAAA,EAC7B,iBAAiB,CAAC,OAAO;AAAA,EACzB,gBAAgB,CAAC,OAAO;AAAA,EACxB,cAAc,CAAC,MAAM;AAAA,EACrB,UAAU,CAAC,OAAO;AAAA,EAClB,kBAAkB,CAAC,OAAO;AAAA,EAC1B,wBAAwB,CAAC,IAAI;AAAA,EAC7B,OAAO,CAAC,MAAM;AAAA,EACd,MAAM,CAAC,MAAM;AAAA,EACb,oBAAoB,CAAC,IAAI;AAAA,EACzB,qBAAqB,CAAC,OAAO;AAAA,EAC7B,gBAAgB,CAAC,OAAO;AAAA,EACxB,eAAe,CAAC,OAAO;AAAA,EACvB,eAAe,CAAC,OAAO;AAAA,EACvB,eAAe,CAAC,MAAM;AAAA,EACtB,cAAc,CAAC,OAAO;AAAA,EACtB,QAAQ,CAAC,MAAM;AAAA,EACf,mBAAmB,CAAC,MAAM;AAAA,EAC1B,KAAK,CAAC,KAAK;AAAA,EACX,8BAA8B,CAAC,MAAM,QAAQ,OAAO;AAAA,EACpD,UAAU,CAAC,MAAM;AAAA,EACjB,gBAAgB,CAAC,MAAM;AAAA,EACvB,gBAAgB,CAAC,MAAM;AAAA,EACvB,aAAa,CAAC,MAAM;AAAA,EACpB,WAAW,CAAC,MAAM;AAAA,EAClB,eAAe,CAAC,OAAO;AAAA,EACvB,aAAa,CAAC,OAAO;AAAA,EACrB,eAAe,CAAC,OAAO;AAAA,EACvB,mBAAmB,CAAC,OAAO;AAAA,EAC3B,YAAY,CAAC,OAAO;AAAA,EACpB,eAAe,CAAC,OAAO;AAAA,EACvB,YAAY,CAAC,IAAI;AAAA,EACjB,wBAAwB,CAAC,OAAO;AAAA,EAChC,YAAY,CAAC,MAAM;AAAA,EACnB,sBAAsB,CAAC,MAAM;AAAA,EAC7B,YAAY,CAAC,MAAM;AAAA,EACnB,MAAM,CAAC,IAAI;AAAA,EACX,kBAAkB,CAAC,OAAO;AAAA,EAC1B,YAAY,CAAC,OAAO;AAAA,EACpB,gBAAgB,CAAC,IAAI;AAAA,EACrB,KAAK,CAAC,IAAI;AAAA,EACV,QAAQ,CAAC,IAAI;AAAA,EACb,gBAAgB,CAAC,IAAI;AAAA,EACrB,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,IAAI;AAAA,EACZ,SAAS,CAAC,IAAI;AAAA,EACd,MAAM,CAAC,OAAO;AAAA,EACd,OAAO,CAAC,OAAO;AAAA,EACf,MAAM,CAAC,OAAO;AAAA,EACd,WAAW,CAAC,OAAO;AAAA,EACnB,SAAS,CAAC,IAAI;AAAA,EACd,KAAK,CAAC,IAAI;AAAA,EACV,YAAY,CAAC,MAAM;AAAA,EACnB,SAAS,CAAC,MAAM;AAAA,EAChB,OAAO,CAAC,OAAO;AAAA,EACf,MAAM,CAAC,MAAM;AAAA,EACb,YAAY,CAAC,YAAY;AAC3B;AAoBA,SAAS,OAAyB,QAAW,KAAkC;AAC7E,SAAO,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG;AACzD;AAEA,SAAS,mBAAmB,OAAe;AACzC,SAAO,MACJ,KAAK,EACL,YAAY,EACZ,QAAQ,MAAM,OAAO,EACrB,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE,EACtB,QAAQ,OAAO,GAAG;AACvB;AASO,SAAS,UAAU,OAAuC;AAC/D,SAAO,OAAO,UAAU,YAAY,OAAO,kBAAkB,KAAK;AACpE;AAsBO,SAAS,WAAW,QAA4C;AACrE,QAAM,SAAS,QAAQ,OAAO,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,KAAK,CAAC;AACxF,MAAI,OAAO,WAAW,EAAG,QAAO,CAAC,IAAI;AACrC,QAAM,QAAwB,CAAC;AAC/B,aAAW,SAAS,QAAQ;AAC1B,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,UAAU,OAAO,GAAG;AACtB,YAAM,KAAK,OAAO;AAClB;AAAA,IACF;AACA,QAAI,QAAQ,YAAY,MAAM,QAAQ;AACpC,YAAM,KAAK,OAAO;AAClB;AAAA,IACF;AACA,UAAM,SAAS,0BAA0B,mBAAmB,OAAO,CAAC;AACpE,QAAI,QAAQ;AACV,YAAM,KAAK,GAAG,MAAM;AACpB;AAAA,IACF;AACA,UAAM,QAAQ,QAAQ,YAAY;AAClC,QAAI,UAAU,KAAK,GAAG;AACpB,YAAM,KAAK,KAAK;AAChB;AAAA,IACF;AACA,UAAM,KAAK,IAAI;AAAA,EACjB;AACA,SAAO,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC;AAClC;;;AD1VO,IAAM,uBAAuB,cAAE,KAAK;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,uBAAuB,cAAE,KAAK;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,mBAAmB,cAAE,KAAK;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,uBAAuB,cAAE,OAAO;AAAA,EAC3C,MAAM,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAChC,GAAG,cAAE,OAAO;AAAA,EACZ,GAAG,cAAE,OAAO;AAAA,EACZ,OAAO,cAAE,OAAO;AAAA,EAChB,QAAQ,cAAE,OAAO;AACnB,CAAC;AAGM,IAAM,2BAA2B,cAAE,OAAO;AAAA,EAC/C,MAAM,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,WAAW,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,SAAS,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,WAAW,cAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACnD,SAAS,cAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACjD,WAAW,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,SAAS,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,WAAW,cAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAGM,IAAM,gCAAgC,cAAE,OAAO;AAAA,EACpD,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,cAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAClD,aAAa,cAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACrD,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,cAAE,QAAQ,EAAE,SAAS;AACjC,CAAC;AAGM,IAAM,mBAAmB,cAAE,OAAO;AAAA,EACvC,IAAI,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,YAAY,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,YAAY,iBAAiB,SAAS;AAAA,EACtC,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,SAAS,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAY,qBAAqB,SAAS;AAAA,EAC1C,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO,8BAA8B,SAAS;AAAA,EAC9C,MAAM,cAAE,MAAM,oBAAoB,EAAE,SAAS;AAAA,EAC7C,UAAU,yBAAyB,SAAS;AAAA,EAC5C,UAAU,cAAE,OAAO,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,EAAE,SAAS;AACtD,CAAC;AAGM,IAAM,sBAAsB,cAAE,OAAO;AAAA,EAC1C,cAAc,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,YAAY,cAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACvC,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,yBAAyB,SAAS;AAC9C,CAAC;AAGM,IAAM,oBAAoB,cAAE,OAAO;AAAA,EACxC,IAAI,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,YAAY,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAAA,EACxC,MAAM,cAAE,OAAO;AAAA,EACf,UAAU,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,WAAW,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,SAAS,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,UAAU,cAAE,OAAO,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAGM,IAAM,+BAA+B,cAAE,KAAK;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,2BAA2B,cAAE,OAAO;AAAA,EAC/C,IAAI,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,YAAY,cAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,MAAM;AAAA,EACN,OAAO,cAAE,OAAO;AAAA,EAChB,aAAa,cAAE,OAAO;AAAA,EACtB,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAAA,EACxC,WAAW,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,SAAS,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,MAAM,cAAE,MAAM,oBAAoB,EAAE,SAAS;AAAA,EAC7C,OAAO,cAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACpC,MAAM,cAAE,OAAO;AAAA,EACf,UAAU,cAAE,OAAO,cAAE,OAAO,GAAG,cAAE,QAAQ,CAAC,EAAE,SAAS;AACvD,CAAC;AAGM,IAAM,0BAA0B,cAAE,OAAO;AAAA,EAC9C,OAAO,cAAE,OAAO;AAAA,EAChB,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,YAAY,cAAE,KAAK,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,QAAQ,QAAQ;AAAA,EAC9D,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAGM,IAAM,2BAA2B,cAAE,OAAO;AAAA,EAC/C,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAW,cAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAGM,IAAM,mCAAmC,cAAE,OAAO;AAAA,EACvD,OAAO,cAAE,KAAK;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,OAAO,cAAE,OAAO;AAAA,EAChB,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,WAAW,cAAE,KAAK,CAAC,UAAU,UAAU,QAAQ,SAAS,WAAW,QAAQ,SAAS,CAAC,EAAE,QAAQ,QAAQ;AAAA,EACvG,SAAS,yBAAyB,SAAS;AAAA,EAC3C,YAAY,cAAE,KAAK,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,QAAQ,QAAQ;AAAA,EAC9D,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAGM,IAAM,gCAAgC,cAAE,OAAO;AAAA,EACpD,MAAM,cAAE,KAAK;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,EAAE,QAAQ,OAAO;AAAA,EAClB,OAAO,cAAE,OAAO;AAAA,EAChB,OAAO,cAAE,OAAO;AAAA,EAChB,QAAQ,cAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAGM,IAAM,gCAAgC,cAAE,OAAO;AAAA,EACpD,MAAM,cAAE,OAAO;AAAA,EACf,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,mBAAmB,cAAE,OAAO,EAAE,SAAS;AAAA,EACvC,QAAQ,cAAE,MAAM,6BAA6B,EAAE,QAAQ,CAAC,CAAC;AAAA,EACzD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAGM,IAAM,yBAAyB,cAAE,OAAO;AAAA,EAC7C,MAAM,cAAE,OAAO;AAAA,EACf,MAAM,cAAE,OAAO;AAAA,EACf,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAGM,IAAM,sCAAsC,cAAE,OAAO;AAAA,EAC1D,MAAM,cAAE,OAAO;AAAA,EACf,QAAQ,cAAE,KAAK,CAAC,aAAa,YAAY,iBAAiB,CAAC;AAAA,EAC3D,SAAS,cAAE,OAAO;AAAA,EAClB,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAGD,SAAS,8BAA8B,OAAgB;AACrD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,SAAS;AACf,MAAI,qBAAqB,OAAQ,QAAO;AACxC,MAAI,EAAE,iBAAiB,QAAS,QAAO;AACvC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iBAAiB,OAAO;AAAA,EAC1B;AACF;AAEA,IAAM,mCAAmC,cAAE;AAAA,EACzC,CAAC,UAAW,MAAM,QAAQ,KAAK,IAAI,WAAW,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ,CAAC,IAAI;AAAA,EAClH,cAAE,MAAM,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC5C;AAEO,IAAM,iCAAiC,cAAE;AAAA,EAC9C;AAAA,EACA,cAAE,OAAO;AAAA,IACP,cAAc,cAAE,KAAK,CAAC,UAAU,OAAO,CAAC,EAAE,QAAQ,QAAQ;AAAA,IAC1D,iBAAiB;AAAA,IACjB,cAAc,wBAAwB,SAAS;AAAA,IAC/C,cAAc,wBAAwB,SAAS;AAAA,IAC/C,SAAS,wBAAwB,SAAS;AAAA,IAC1C,QAAQ,wBAAwB,SAAS;AAAA,IACzC,eAAe,wBAAwB,SAAS;AAAA,IAChD,gBAAgB,wBAAwB,SAAS;AAAA,IACjD,iBAAiB,wBAAwB,SAAS;AAAA,IAClD,SAAS,wBAAwB,SAAS;AAAA,IAC1C,kBAAkB,cAAE,MAAM,gCAAgC,EAAE,QAAQ,CAAC,CAAC;AAAA,IACtE,WAAW,cAAE,MAAM,6BAA6B,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC5D,SAAS,cAAE,MAAM,sBAAsB,EAAE,QAAQ,CAAC,CAAC;AAAA,IACnD,oBAAoB,cAAE,MAAM,mCAAmC,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC3E,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,IACpD,eAAe,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,IACpD,UAAU,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC1C,CAAC;AACH;;;AEjPA,SAAS,mBAAmB,UAA2C;AACrE,SAAO;AAAA,IACL,SAAS,UAAU;AAAA,IACnB,SAAS,gBAAgB;AAAA,IACzB,SAAS,WAAW;AAAA,IACpB,SAAS,cAAc;AAAA,IACvB,SAAS,UAAU;AAAA,IACnB,SAAS,gBAAgB;AAAA,IACzB,SAAS;AAAA,EACX,EAAE,KAAK,GAAG;AACZ;AAEO,SAAS,sBAAsB,GAA4B,GAAoC;AACpG,QAAM,iBAAiB,EAAE,YAAY,EAAE;AACvC,MAAI,mBAAmB,EAAG,QAAO;AACjC,SAAO,mBAAmB,CAAC,EAAE,cAAc,mBAAmB,CAAC,CAAC;AAClE;AAEO,SAAS,oBAAuD,UAAoB;AACzF,SAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,qBAAqB;AACjD;;;ACjDA,SAASC,kBAAiB,GAAa,GAAqB;AAC1D,MAAI,MAAM,GAAG,OAAO,GAAG,OAAO;AAC9B,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,WAAO,EAAE,CAAC,IAAI,EAAE,CAAC;AACjB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,EACpB;AACA,QAAM,cAAc,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;AACpD,SAAO,gBAAgB,IAAI,IAAI,MAAM;AACvC;AAEA,SAAS,kBAAkB,WAA6B;AACtD,SAAO,OAAO,KAAK,IAAI,aAAa,SAAS,EAAE,MAAM;AACvD;AAEA,SAAS,kBAAkB,QAA0B;AACnD,SAAO,MAAM,KAAK,IAAI,aAAa,OAAO,QAAQ,OAAO,YAAY,OAAO,aAAa,CAAC,CAAC;AAC7F;AAEA,SAAS,UAAa,OAAkC,UAAgB;AACtE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI;AACF,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,KAA0C;AACjE,QAAM,WAAW,UAAU,IAAI,UAAgC,CAAC,CAAC;AACjE,SAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,YAAY,IAAI;AAAA,IAChB,YAAa,IAAI,eAAe;AAAA,IAChC,SAAU,IAAI,YAAY;AAAA,IAC1B,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,UAAW,IAAI,aAAa;AAAA,IAC5B,WAAY,IAAI,cAAc;AAAA,IAC9B,SAAU,IAAI,YAAY;AAAA,IAC1B,WAAY,IAAI,cAAc;AAAA,IAC9B,YAAa,IAAI,eAAe;AAAA,IAChC,YAAa,IAAI,eAAe;AAAA,IAChC,cAAe,IAAI,kBAAkB;AAAA,IACrC,OAAO,UAAU,IAAI,gBAAsC,MAAS;AAAA,IACpE,UAAU,UAAU,IAAI,UAAgC,MAAS;AAAA,IACjE,MAAM,UAAU,IAAI,MAA4B,MAAS;AAAA,IACzD,UAAU,OAAO,KAAK,QAAQ,EAAE,SAAS,WAAW;AAAA,EACtD;AACF;AAEA,SAAS,iBAAiB,KAA2C;AACnE,SAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,YAAY,IAAI;AAAA,IAChB,eAAe,UAAU,IAAI,iBAAuC,CAAC,CAAC;AAAA,IACtE,MAAM,IAAI;AAAA,IACV,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,UAAU,UAAU,IAAI,UAAgC,CAAC,CAAC;AAAA,EAC5D;AACF;AAEO,SAAS,wBAAwB,IAAuB,OAA+B;AAC5F,QAAM,QAAQ,OAAO,CAAC;AAEtB,SAAO;AAAA,IACL,MAAM,eAAe,OAAoC;AACvD,YAAM,OAAO,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMvB;AACD,YAAM,aAAa,GAAG,YAAY,CAAC,UAAwB;AACzD,mBAAW,QAAQ,OAAO;AACxB,eAAK;AAAA,YACH,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK,cAAc;AAAA,YACnB,KAAK,WAAW;AAAA,YAChB,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK,YAAY;AAAA,YACjB,KAAK,aAAa;AAAA,YAClB,KAAK,WAAW;AAAA,YAChB,KAAK,aAAa;AAAA,YAClB,KAAK,cAAc;AAAA,YACnB,KAAK,cAAc;AAAA,YACnB,KAAK,gBAAgB;AAAA,YACrB,KAAK,QAAQ,KAAK,UAAU,KAAK,KAAK,IAAI;AAAA,YAC1C,KAAK,WAAW,KAAK,UAAU,KAAK,QAAQ,IAAI;AAAA,YAChD,KAAK,OAAO,KAAK,UAAU,KAAK,IAAI,IAAI;AAAA,YACxC,KAAK,UAAU,KAAK,YAAY,CAAC,CAAC;AAAA,YAClC;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACD,iBAAW,KAAK;AAEhB,YAAM,QAAQ,IAAI,MAAM;AAAA,QAAI,CAAC,SAC3B,MAAM,YAAY;AAChB,cAAI;AACF,kBAAM,YAAY,MAAM,MAAM,KAAK,IAAI;AACvC,eAAG,QAAQ,oDAAoD,EAAE,IAAI,kBAAkB,SAAS,GAAG,KAAK,EAAE;AAAA,UAC5G,QAAQ;AAAA,UAER;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,gBAAgB,QAAsC;AAC1D,YAAM,OAAO,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA,OAIvB;AACD,YAAM,aAAa,GAAG,YAAY,CAAC,UAAyB;AAC1D,mBAAW,SAAS,OAAO;AACzB,eAAK;AAAA,YACH,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK,UAAU,MAAM,aAAa;AAAA,YAClC,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM,aAAa;AAAA,YACnB,MAAM,WAAW;AAAA,YACjB,KAAK,UAAU,MAAM,YAAY,CAAC,CAAC;AAAA,UACrC;AAAA,QACF;AAAA,MACF,CAAC;AACD,iBAAW,MAAM;AAAA,IACnB;AAAA,IAEA,MAAM,cAAc,IAAwC;AAC1D,YAAM,MAAM,GAAG,QAAQ,yCAAyC,EAAE,IAAI,EAAE;AACxE,aAAO,MAAM,gBAAgB,GAAG,IAAI;AAAA,IACtC;AAAA,IAEA,MAAM,yBAAyB,YAA2C;AACxE,YAAM,OAAO,GAAG,QAAQ,kEAAkE,EAAE,IAAI,UAAU;AAC1G,aAAO,KAAK,IAAI,eAAe;AAAA,IACjC;AAAA,IAEA,MAAM,0BAA0B,YAA4C;AAC1E,YAAM,OAAO,GAAG,QAAQ,mEAAmE,EAAE,IAAI,UAAU;AAC3G,aAAO,KAAK,IAAI,gBAAgB;AAAA,IAClC;AAAA,IAEA,MAAM,qBAAqB,YAAmC;AAC5D,SAAG,QAAQ,iDAAiD,EAAE,IAAI,UAAU;AAC5E,SAAG,QAAQ,gDAAgD,EAAE,IAAI,UAAU;AAAA,IAC7E;AAAA,IAEA,MAAM,kBAAkB,OAA+D;AACrF,YAAM,iBAAiB,MAAM,MAAM,MAAM,QAAQ;AACjD,YAAM,cAAc,MAAM,SAAS;AACnC,UAAI,MAAM;AACV,YAAM,SAAoB,CAAC;AAE3B,UAAI,MAAM,aAAa,QAAQ;AAC7B,eAAO,wBAAwB,MAAM,YAAY,IAAI,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC;AACzE,eAAO,KAAK,GAAG,MAAM,WAAW;AAAA,MAClC;AACA,UAAI,MAAM,UAAU,QAAQ;AAC1B,eAAO,qBAAqB,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC;AACnE,eAAO,KAAK,GAAG,MAAM,QAAQ;AAAA,MAC/B;AACA,UAAI,MAAM,SAAS,YAAY;AAC7B,eAAO;AACP,eAAO,KAAK,MAAM,QAAQ,UAAU;AAAA,MACtC;AACA,UAAI,MAAM,SAAS,YAAY;AAC7B,eAAO;AACP,eAAO,KAAK,MAAM,QAAQ,UAAU;AAAA,MACtC;AACA,UAAI,MAAM,SAAS,WAAW;AAC5B,eAAO;AACP,eAAO,KAAK,MAAM,QAAQ,SAAS;AAAA,MACrC;AAEA,YAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,IAAI,GAAG,MAAM;AAC1C,YAAM,SAAS,KAAK,IAAI,CAAC,QAAQ;AAC/B,cAAM,OAAO,gBAAgB,GAAG;AAChC,eAAO;AAAA,UACL;AAAA,UACA,WAAWA,kBAAiB,gBAAgB,kBAAkB,IAAI,SAAmB,CAAC;AAAA,QACxF;AAAA,MACF,CAAC;AAED,aAAO,oBAAoB,OAAO,IAAI,CAAC,YAAY;AAAA,QACjD,GAAG;AAAA,QACH,cAAc,OAAO,KAAK;AAAA,QAC1B,SAAS,OAAO,KAAK;AAAA,QACrB,YAAY,OAAO,KAAK;AAAA,QACxB,MAAM,OAAO,KAAK;AAAA,MACpB,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,UAAU,OAAO,EAAE,MAAM,UAAU,EAAE,EAAE,MAAM,GAAG,WAAW;AAAA,IAC/E;AAAA,EACF;AACF;;;ARtMO,SAAS,kBAAkB,SAKhC;AAGA,QAAM,gBAAgB,QAAQ,gBAAgB;AAC9C,QAAM,KAAK,IAAI,cAAc,QAAQ,IAAI;AAEzC,KAAG,OAAO,oBAAoB;AAC9B,KAAG,OAAO,mBAAmB;AAC7B,KAAG,KAAK,aAAa;AAErB,SAAO;AAAA,IACL,WAAW,0BAA0B,EAAE;AAAA,IACvC,QAAQ,wBAAwB,IAAI,QAAQ,KAAK;AAAA,IACjD,QAAQ,wBAAwB,IAAI,QAAQ,KAAK;AAAA,IACjD,OAAO,MAAM,GAAG,MAAM;AAAA,EACxB;AACF;","names":["import_zod","cosineSimilarity"]}