@lucern/graph-sync 1.0.31 → 1.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/neo4jDriver.ts","../src/neo4jEdgeAPI.ts","../src/convex.ts","../src/neo4jQueries.ts","../src/neo4jQueriesCore.ts","../src/neo4jQueriesAdvanced.ts","../src/neo4jQueryRoute.ts","../src/neo4jSync.ts","../src/neo4jSyncHelpers.ts"],"names":["v","deleteEdge","permissiveReturn","readString","result"],"mappings":"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","file":"index.js","sourcesContent":["// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jDriver subpath; rename needs an export-map migration.\n/**\n * neo4jDriver module implementation.\n */\n\n\"use node\";\n/**\n * Direct Neo4j Driver for Convex\n *\n * Uses the \"use node\" directive to enable Node.js runtime, allowing\n * direct use of the neo4j-driver package instead of HTTP proxies.\n *\n * Environment Variables (set per deployment via `npx convex env set`):\n * - NEO4J_URI: neo4j+s://xxx.databases.neo4j.io\n * - NEO4J_USER: neo4j\n * - NEO4J_PASSWORD: your-password\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\nimport neo4j, { type Driver } from \"neo4j-driver\";\n\n// =============================================================================\n// VALID LABELS AND RELATIONSHIP TYPES (Security: Prevent Cypher Injection)\n// =============================================================================\n\nconst VALID_NODE_LABELS = new Set([\n // Ontological\n \"ValueChain\",\n \"Function\",\n \"FinSector\",\n \"Company\",\n \"Person\",\n \"Investor\",\n // Epistemic\n \"Theme\",\n \"Belief\",\n \"Question\",\n \"Evidence\",\n \"Source\",\n \"Decision\",\n \"Sprint\",\n \"Claim\",\n \"Synthesis\",\n \"Answer\",\n]);\n\nconst VALID_RELATIONSHIP_TYPES = new Set([\n // Cross-layer edges\n \"EXTRACTED_FROM\",\n \"ANSWERS\",\n \"RESPONDS_TO\",\n \"INFORMS\",\n \"QUALIFIES\",\n \"TESTS\",\n \"EXPLORES\",\n \"BASED_ON\",\n \"RELATES_TO_THESIS\",\n \"BELONGS_TO\",\n \"PLAYS_THEME\",\n // Same-layer edges\n \"SUPERSEDES\",\n \"SAME_AS\",\n \"DEPENDS_ON\",\n \"REINFORCES\",\n \"PARENT_OF\",\n \"CHILD_OF\",\n \"FALSIFIED_BY\",\n \"EXCLUSIVE_WITH\",\n \"COLLAPSES_IF\",\n \"CASCADE_FROM\",\n \"STRENGTHENED_BY\",\n \"WEAKENED_BY\",\n \"ALTERNATIVE_TO\",\n \"SUBSUMES\",\n \"VALIDATED_BY\",\n \"REQUIRED_FOR\",\n \"PREREQUISITE_FOR\",\n \"PARALLEL_TO\",\n \"CORROBORATES\",\n \"EXTENDS\",\n \"SAME_SOURCE_AS\",\n \"SAME_THEME_AS\",\n // Ontological\n \"EVALUATES\",\n \"PERSPECTIVE_ON\",\n \"WORKS_AT\",\n \"PARTICIPATES_IN\",\n \"PERFORMS\",\n \"FUNCTION_IN\",\n \"IMPACTS\",\n \"INVESTED_IN\",\n \"RAISED_FROM\",\n \"BASED_ON_BELIEF\",\n \"BASED_ON_QUESTION\",\n \"BLOCKED_BY_CONTRADICTION\",\n \"INFORMED_BY_THEME\",\n]);\n\nexport function validateLabel(label: string): void {\n if (!VALID_NODE_LABELS.has(label)) {\n throw new Error(\n `[Neo4j Security] Invalid node label: ${label}. Must be one of: ${Array.from(VALID_NODE_LABELS).join(\", \")}`\n );\n }\n}\n\nexport function validateRelType(relType: string): void {\n if (!VALID_RELATIONSHIP_TYPES.has(relType)) {\n throw new Error(\n `[Neo4j Security] Invalid relationship type: ${relType}. Must be one of: ${Array.from(VALID_RELATIONSHIP_TYPES).join(\", \")}`\n );\n }\n}\n\n// =============================================================================\n// DRIVER SINGLETON\n// =============================================================================\n\nlet driver: Driver | null = null;\n\nfunction getDriver(): Driver {\n if (!driver) {\n const uri = process.env.NEO4J_URI;\n const user = process.env.NEO4J_USER;\n const password = process.env.NEO4J_PASSWORD;\n\n if (!(uri && user && password)) {\n throw new Error(\n \"[Neo4j Driver] Missing credentials. Set NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD via `npx convex env set`\"\n );\n }\n\n driver = neo4j.driver(uri, neo4j.auth.basic(user, password), {\n // Connection pool settings\n maxConnectionPoolSize: 50,\n connectionAcquisitionTimeout: 30_000,\n // Logging\n logging: {\n level: \"warn\",\n logger: (level, message) => console.log(`[Neo4j ${level}] ${message}`),\n },\n });\n }\n return driver;\n}\n\n// =============================================================================\n// QUERY CONFIGURATION\n// =============================================================================\n\n/**\n * Default query timeout in milliseconds.\n * Prevents expensive graph traversals from hanging indefinitely.\n */\nexport const DEFAULT_QUERY_TIMEOUT_MS = 30_000; // 30 seconds\n\n/**\n * Timeout for complex graph queries (cascade simulation, lineage traversal)\n */\nexport const COMPLEX_QUERY_TIMEOUT_MS = 60_000; // 60 seconds\n\n// =============================================================================\n// QUERY EXECUTION\n// =============================================================================\n\n/**\n * Convert JavaScript values to Neo4j-compatible types\n * Neo4j requires explicit integers, not floats\n */\nfunction toNeo4jParams(\n params: Record<string, unknown>\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === \"number\" && Number.isInteger(value)) {\n // Convert JavaScript integers to Neo4j integers\n result[key] = neo4j.int(value);\n } else if (Array.isArray(value)) {\n result[key] = value.map((v) =>\n typeof v === \"number\" && Number.isInteger(v) ? neo4j.int(v) : v\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Execute a Cypher query and return results as typed objects\n *\n * @param query - Cypher query string\n * @param params - Query parameters\n * @param timeoutMs - Query timeout in milliseconds (default: 30s)\n */\nexport async function runCypher<T = Record<string, unknown>>(\n query: string,\n params: Record<string, unknown> = {},\n timeoutMs: number = DEFAULT_QUERY_TIMEOUT_MS\n): Promise<T[]> {\n const neo4jDriver = getDriver();\n const session = neo4jDriver.session();\n\n try {\n const neo4jParams = toNeo4jParams(params);\n const result = await session.run(query, neo4jParams, {\n timeout: neo4j.int(timeoutMs),\n });\n return result.records.map((record) => {\n const obj: Record<string, unknown> = {};\n for (const key of record.keys) {\n const field = String(key);\n obj[field] = convertNeo4jValue(record.get(field));\n }\n return obj as T;\n });\n } finally {\n await session.close();\n }\n}\n\n/**\n * Execute a write transaction (for mutations)\n *\n * @param query - Cypher query string\n * @param params - Query parameters\n * @param timeoutMs - Transaction timeout in milliseconds (default: 30s)\n */\nexport async function runWriteTransaction<T = Record<string, unknown>>(\n query: string,\n params: Record<string, unknown> = {},\n timeoutMs: number = DEFAULT_QUERY_TIMEOUT_MS\n): Promise<T[]> {\n const neo4jDriver = getDriver();\n const session = neo4jDriver.session();\n\n try {\n const neo4jParams = toNeo4jParams(params);\n const result = await session.executeWrite(\n async (tx) => await tx.run(query, neo4jParams),\n { timeout: timeoutMs }\n );\n return result.records.map((record) => {\n const obj: Record<string, unknown> = {};\n for (const key of record.keys) {\n const field = String(key);\n obj[field] = convertNeo4jValue(record.get(field));\n }\n return obj as T;\n });\n } finally {\n await session.close();\n }\n}\n\n/**\n * Execute multiple queries in a single transaction\n *\n * @param queries - Array of queries with parameters\n * @param timeoutMs - Transaction timeout in milliseconds (default: 60s for batch)\n */\nexport async function runBatchTransaction(\n queries: Array<{ query: string; params: Record<string, unknown> }>,\n timeoutMs: number = COMPLEX_QUERY_TIMEOUT_MS\n): Promise<void> {\n const neo4jDriver = getDriver();\n const session = neo4jDriver.session();\n\n try {\n await session.executeWrite(\n async (tx) => {\n for (const { query, params } of queries) {\n await tx.run(query, params);\n }\n },\n { timeout: timeoutMs }\n );\n } finally {\n await session.close();\n }\n}\n\n// =============================================================================\n// NODE OPERATIONS\n// =============================================================================\n\n/**\n * Upsert a node by globalId\n */\nexport async function upsertNode(\n label: string,\n globalId: string,\n properties: Record<string, unknown>\n): Promise<void> {\n validateLabel(label); // Security: prevent Cypher injection\n await runWriteTransaction(\n `\n MERGE (n:${label} {globalId: $globalId})\n SET n += $properties\n SET n.updatedAt = timestamp()\n `,\n { globalId, properties }\n );\n}\n\n/**\n * Delete a node by globalId\n */\nexport async function deleteNode(globalId: string): Promise<void> {\n await runWriteTransaction(\n `\n MATCH (n {globalId: $globalId})\n DETACH DELETE n\n `,\n { globalId }\n );\n}\n\n/**\n * Batch upsert nodes\n */\nexport async function batchUpsertNodes(\n label: string,\n nodes: Array<{ globalId: string; properties: Record<string, unknown> }>\n): Promise<void> {\n if (nodes.length === 0) {\n return;\n }\n\n validateLabel(label); // Security: prevent Cypher injection\n await runWriteTransaction(\n `\n UNWIND $nodes as node\n MERGE (n:${label} {globalId: node.globalId})\n SET n += node.properties\n SET n.updatedAt = timestamp()\n `,\n { nodes }\n );\n}\n\n// =============================================================================\n// EDGE OPERATIONS\n// =============================================================================\n\n/**\n * Upsert an edge by globalId\n */\nexport async function upsertEdge(\n relType: string,\n globalId: string,\n fromGlobalId: string,\n toGlobalId: string,\n properties: Record<string, unknown> = {}\n): Promise<void> {\n validateRelType(relType); // Security: prevent Cypher injection\n await runWriteTransaction(\n `\n MATCH (from {globalId: $fromGlobalId})\n MATCH (to {globalId: $toGlobalId})\n MERGE (from)-[r:${relType} {globalId: $globalId}]->(to)\n SET r += $properties\n SET r.updatedAt = timestamp()\n `,\n { globalId, fromGlobalId, toGlobalId, properties }\n );\n}\n\n/**\n * Delete an edge by globalId\n */\nexport async function deleteEdge(globalId: string): Promise<void> {\n await runWriteTransaction(\n `\n MATCH ()-[r {globalId: $globalId}]->()\n DELETE r\n `,\n { globalId }\n );\n}\n\n/**\n * Batch upsert edges\n */\nexport async function batchUpsertEdges(\n edges: Array<{\n relType: string;\n globalId: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties?: Record<string, unknown>;\n }>\n): Promise<void> {\n if (edges.length === 0) {\n return;\n }\n\n // Group by relationship type for efficient batching\n const byType = new Map<string, typeof edges>();\n for (const edge of edges) {\n const existing = byType.get(edge.relType) || [];\n existing.push(edge);\n byType.set(edge.relType, existing);\n }\n\n const queries: Array<{ query: string; params: Record<string, unknown> }> = [];\n for (const [relType, typeEdges] of byType) {\n queries.push({\n query: `\n UNWIND $edges as edge\n MATCH (from {globalId: edge.fromGlobalId})\n MATCH (to {globalId: edge.toGlobalId})\n MERGE (from)-[r:${relType} {globalId: edge.globalId}]->(to)\n SET r += edge.properties\n SET r.updatedAt = timestamp()\n `,\n params: {\n edges: typeEdges.map((e) => ({\n globalId: e.globalId,\n fromGlobalId: e.fromGlobalId,\n toGlobalId: e.toGlobalId,\n properties: e.properties || {},\n })),\n },\n });\n }\n\n await runBatchTransaction(queries);\n}\n\n// =============================================================================\n// HEALTH CHECK\n// =============================================================================\n\n/**\n * Check if Neo4j connection is healthy\n */\nexport async function healthCheck(): Promise<{\n healthy: boolean;\n nodeCount?: number;\n error?: string;\n}> {\n try {\n const result = await runCypher<{ count: number }>(\n \"MATCH (n) RETURN count(n) as count LIMIT 1\"\n );\n return {\n healthy: true,\n nodeCount: result[0]?.count || 0,\n };\n } catch (error) {\n return {\n healthy: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n}\n\n/**\n * Get connection info (for debugging)\n */\nexport function getConnectionInfo(): {\n uri: string | undefined;\n user: string | undefined;\n configured: boolean;\n} {\n return {\n uri: process.env.NEO4J_URI,\n user: process.env.NEO4J_USER,\n configured: Boolean(\n process.env.NEO4J_URI &&\n process.env.NEO4J_USER &&\n process.env.NEO4J_PASSWORD\n ),\n };\n}\n\n// =============================================================================\n// VALUE CONVERSION\n// =============================================================================\n\n/**\n * Convert Neo4j types to plain JavaScript\n */\nfunction convertNeo4jValue(value: unknown): unknown {\n if (value === null || value === undefined) {\n return null;\n }\n\n // Handle Neo4j Integer\n if (neo4j.isInt(value)) {\n return neo4j.integer.toNumber(value);\n }\n\n // Handle Neo4j Date/Time types\n if (neo4j.isDate(value) || neo4j.isDateTime(value) || neo4j.isTime(value)) {\n return value.toString();\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return value.map(convertNeo4jValue);\n }\n\n // Handle Node objects\n if (value && typeof value === \"object\" && \"properties\" in value) {\n const nodeObj = value as { properties: Record<string, unknown> };\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(nodeObj.properties)) {\n result[k] = convertNeo4jValue(v);\n }\n return result;\n }\n\n // Handle plain objects\n if (typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = convertNeo4jValue(v);\n }\n return result;\n }\n\n return value;\n}\n\n// =============================================================================\n// CLEANUP\n// =============================================================================\n\n/**\n * Close the driver connection (for graceful shutdown)\n */\nexport async function closeDriver(): Promise<void> {\n if (driver) {\n await driver.close();\n driver = null;\n }\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jEdgeAPI subpath; rename needs an export-map migration.\n\"use node\";\n\n/**\n * Neo4j edge API host actions.\n *\n * The reasoning kernel schedules these actions through the tenant Convex host\n * when optional graph mirroring is installed. Neo4j remains authoritative for\n * traversal topology; Convex mirrors selected edge types for realtime reads.\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { getNeo4jRelType } from \"@lucern/graph-primitives/graphTypes\";\nimport { v } from \"convex/values\";\nimport { internal, internalAction } from \"./convex\";\nimport {\n getConnectionInfo,\n runCypher,\n runWriteTransaction,\n} from \"./neo4jDriver\";\n\nexport const DUAL_WRITE_EDGE_TYPES = [\n \"supports\",\n \"informs\",\n \"tests\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"supersedes\",\n \"extracted_from\",\n \"responds_to\",\n \"based_on\",\n \"answers\",\n \"belongs_to\",\n \"relates_to_thesis\",\n \"corroborates\",\n \"extends\",\n \"same_source_as\",\n \"same_theme_as\",\n \"plays_theme\",\n \"impacts\",\n \"evaluates\",\n \"mentioned_in\",\n \"perspective_on\",\n] as const;\n\nexport type DualWriteEdgeType = (typeof DUAL_WRITE_EDGE_TYPES)[number];\nconst LOWER_EDGE_TYPE_REGEX = /^[a-z0-9_]+$/u;\nconst UPPER_EDGE_TYPE_REGEX = /^[A-Z0-9_]+$/u;\n\ninterface EdgeActionCtx {\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\n\ninterface CreateEdgeInput {\n confidence?: number;\n context?: string;\n createdBy: string;\n derivationType?: string;\n edgeType: string;\n fromGlobalId: string;\n fromLayer?: string;\n fromNodeType?: string;\n globalId: string;\n logicalRole?: string;\n metadata?: unknown;\n reasoningMethod?: string;\n temporalClass?: string;\n tenantId?: string;\n toGlobalId: string;\n toLayer?: string;\n toNodeType?: string;\n topicId?: string;\n validFrom?: number;\n validUntil?: number;\n weight?: number;\n workspaceId?: string;\n}\n\ninterface MirrorEdgeInput {\n confidence?: number;\n context?: string;\n createdBy: string;\n derivationType?: string;\n edgeType: string;\n fromGlobalId: string;\n fromLayer?: string;\n fromNodeType?: string;\n globalId: string;\n logicalRole?: string;\n reasoningMethod?: string;\n temporalClass?: string;\n toGlobalId: string;\n toLayer?: string;\n toNodeType?: string;\n topicId?: string;\n validFrom?: number;\n validUntil?: number;\n weight?: number;\n}\n\nexport function needsDualWrite(edgeType: string): boolean {\n return DUAL_WRITE_EDGE_TYPES.includes(edgeType as DualWriteEdgeType);\n}\n\nfunction normalizeEdgeType(edgeType: string): string {\n const normalized = edgeType.trim().toLowerCase();\n if (!LOWER_EDGE_TYPE_REGEX.test(normalized)) {\n throw new Error(`[Neo4j Edge API] Invalid edge type: ${edgeType}`);\n }\n return normalized;\n}\n\nfunction resolveRelationshipType(edgeType: string): string {\n const relType = getNeo4jRelType(edgeType);\n if (!UPPER_EDGE_TYPE_REGEX.test(relType)) {\n throw new Error(`[Neo4j Edge API] Invalid relationship type: ${relType}`);\n }\n return relType;\n}\n\nfunction readStringProperty(\n source: Record<string, unknown> | undefined,\n key: string\n): string | undefined {\n const value = source?.[key];\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction readNumberProperty(\n source: Record<string, unknown> | undefined,\n key: string\n): number | undefined {\n const value = source?.[key];\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction metadataSummary(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n if (!metadata) {\n return;\n }\n\n return Object.entries(metadata)\n .map(([key, value]) => `${key}=${String(value)}`)\n .slice(0, 8)\n .join(\" | \");\n}\n\nfunction readMetadata(metadata: unknown): Record<string, unknown> | undefined {\n return metadata && typeof metadata === \"object\" && !Array.isArray(metadata)\n ? (metadata as Record<string, unknown>)\n : undefined;\n}\n\nfunction neo4jEdgeProperties(\n args: CreateEdgeInput,\n edgeType: string,\n metadata: Record<string, unknown> | undefined,\n now: number\n): Record<string, unknown> {\n return {\n globalId: args.globalId,\n edgeType,\n weight: args.weight ?? 1,\n confidence:\n args.confidence ?? readNumberProperty(metadata, \"confidence\") ?? 1,\n context: args.context ?? metadataSummary(metadata) ?? \"\",\n derivationType: args.derivationType ?? \"\",\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n topicId: args.topicId ?? readStringProperty(metadata, \"topicId\") ?? \"\",\n tenantId: args.tenantId ?? readStringProperty(metadata, \"tenantId\") ?? \"\",\n workspaceId:\n args.workspaceId ?? readStringProperty(metadata, \"workspaceId\") ?? \"\",\n fromLayer: args.fromLayer ?? \"\",\n toLayer: args.toLayer ?? \"\",\n fromNodeType: args.fromNodeType ?? \"\",\n toNodeType: args.toNodeType ?? \"\",\n reasoningMethod: args.reasoningMethod ?? \"\",\n logicalRole: args.logicalRole ?? \"\",\n temporalClass: args.temporalClass ?? \"structural\",\n validFrom: args.validFrom ?? now,\n validUntil: args.validUntil ?? null,\n };\n}\n\nfunction mirrorInputFromCreateArgs(\n args: CreateEdgeInput,\n edgeType: string\n): MirrorEdgeInput {\n return {\n globalId: args.globalId,\n fromGlobalId: args.fromGlobalId,\n toGlobalId: args.toGlobalId,\n edgeType,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n createdBy: args.createdBy,\n topicId: args.topicId,\n fromLayer: args.fromLayer,\n toLayer: args.toLayer,\n fromNodeType: args.fromNodeType,\n toNodeType: args.toNodeType,\n reasoningMethod: args.reasoningMethod,\n logicalRole: args.logicalRole,\n temporalClass: args.temporalClass,\n validFrom: args.validFrom,\n validUntil: args.validUntil,\n };\n}\n\nasync function mirrorEdgeToConvex(\n ctx: EdgeActionCtx,\n args: MirrorEdgeInput\n): Promise<void> {\n await ctx.runMutation(internal.epistemicEdges.mirrorEdgeToConvex, args);\n}\n\nasync function queueEdgeRetry(\n ctx: EdgeActionCtx,\n args: { globalId: string; operation: \"upsert\" | \"delete\"; error: string }\n): Promise<void> {\n await ctx.runMutation(internal.neo4jSyncHelpers.queueForRetry, {\n entityType: \"edge\",\n entityId: args.globalId,\n operation: args.operation,\n error: args.error,\n });\n}\n\nasync function mirrorCreatedEdgeIfNeeded(\n ctx: EdgeActionCtx,\n args: CreateEdgeInput,\n edgeType: string\n): Promise<void> {\n if (!needsDualWrite(edgeType)) {\n return;\n }\n try {\n await mirrorEdgeToConvex(ctx, mirrorInputFromCreateArgs(args, edgeType));\n } catch (error) {\n await queueEdgeRetry(ctx, {\n globalId: args.globalId,\n operation: \"upsert\",\n error: `Convex mirror failed: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n });\n }\n}\n\nasync function handleMissingNeo4jEndpoints(\n ctx: EdgeActionCtx,\n args: CreateEdgeInput,\n edgeType: string\n) {\n await queueEdgeRetry(ctx, {\n globalId: args.globalId,\n operation: \"upsert\",\n error: `Source or target node not yet synced to Neo4j (from: ${args.fromGlobalId}, to: ${args.toGlobalId})`,\n });\n\n if (needsDualWrite(edgeType)) {\n try {\n await mirrorEdgeToConvex(ctx, mirrorInputFromCreateArgs(args, edgeType));\n } catch {\n // Retry was already queued for the Neo4j write; avoid hiding it.\n }\n }\n\n return {\n success: false,\n globalId: args.globalId,\n edgeType,\n queuedForRetry: true,\n reason: \"nodes_not_synced\",\n };\n}\n\nexport const createEdge = internalAction({\n args: {\n globalId: v.string(),\n fromGlobalId: v.string(),\n toGlobalId: v.string(),\n edgeType: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n metadata: v.optional(v.any()),\n createdBy: v.string(),\n topicId: v.optional(v.string()),\n tenantId: v.optional(v.string()),\n workspaceId: v.optional(v.string()),\n fromLayer: v.optional(v.string()),\n toLayer: v.optional(v.string()),\n fromNodeType: v.optional(v.string()),\n toNodeType: v.optional(v.string()),\n reasoningMethod: v.optional(v.string()),\n logicalRole: v.optional(v.string()),\n temporalClass: v.optional(v.string()),\n validFrom: v.optional(v.number()),\n validUntil: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n throw new Error(\n \"[Neo4j Edge API] Neo4j not configured. Set NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD\"\n );\n }\n\n const edgeType = normalizeEdgeType(args.edgeType);\n const relType = resolveRelationshipType(edgeType);\n const now = Date.now();\n const metadata = readMetadata(args.metadata);\n const properties = neo4jEdgeProperties(args, edgeType, metadata, now);\n\n const result = await runWriteTransaction<{ globalId: string }>(\n `\n MATCH (from {globalId: $fromGlobalId})\n MATCH (to {globalId: $toGlobalId})\n MERGE (from)-[r:${relType} {globalId: $globalId}]->(to)\n SET r += $properties\n RETURN r.globalId as globalId\n `,\n {\n fromGlobalId: args.fromGlobalId,\n toGlobalId: args.toGlobalId,\n globalId: args.globalId,\n properties,\n }\n );\n\n if (result.length === 0) {\n return handleMissingNeo4jEndpoints(ctx, args, edgeType);\n }\n\n await mirrorCreatedEdgeIfNeeded(ctx, args, edgeType);\n\n return {\n success: true,\n globalId: args.globalId,\n edgeType,\n dualWritten: needsDualWrite(edgeType),\n };\n },\n});\n\nexport const deleteEdge = internalAction({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n throw new Error(\"[Neo4j Edge API] Neo4j not configured\");\n }\n\n await runWriteTransaction(\n `\n MATCH ()-[r {globalId: $globalId}]->()\n DELETE r\n `,\n { globalId: args.globalId }\n );\n\n try {\n await ctx.runMutation(internal.epistemicEdges.deleteEdgeFromConvex, {\n globalId: args.globalId,\n });\n } catch {\n // The mirror may not exist for non-dual-write edge types.\n }\n\n return { success: true };\n },\n});\n\nexport const updateEdge = internalAction({\n args: {\n globalId: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n throw new Error(\"[Neo4j Edge API] Neo4j not configured\");\n }\n\n const updates: Record<string, unknown> = { updatedAt: Date.now() };\n if (args.weight !== undefined) {\n updates.weight = args.weight;\n }\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.context !== undefined) {\n updates.context = args.context;\n }\n if (args.derivationType !== undefined) {\n updates.derivationType = args.derivationType;\n }\n\n const result = await runWriteTransaction<{\n updated: boolean;\n edgeType: string;\n }>(\n `\n MATCH ()-[r {globalId: $globalId}]->()\n SET r += $updates\n RETURN true as updated, r.edgeType as edgeType\n `,\n { globalId: args.globalId, updates }\n );\n\n if (result.length === 0) {\n return { success: false, error: \"Edge not found\" };\n }\n\n const edgeType = result[0]?.edgeType;\n if (edgeType && needsDualWrite(edgeType)) {\n try {\n await ctx.runMutation(internal.epistemicEdges.updateEdgeInConvex, {\n globalId: args.globalId,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n });\n } catch {\n await queueEdgeRetry(ctx, {\n globalId: args.globalId,\n operation: \"upsert\",\n error: \"Convex mirror update failed\",\n });\n }\n }\n\n return { success: true, globalId: args.globalId };\n },\n});\n\nexport const getEdge = internalAction({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return null;\n }\n\n const result = await runCypher<{\n globalId: string;\n edgeType: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties: Record<string, unknown>;\n }>(\n `\n MATCH (from)-[r {globalId: $globalId}]->(to)\n RETURN r.globalId as globalId,\n r.edgeType as edgeType,\n from.globalId as fromGlobalId,\n to.globalId as toGlobalId,\n properties(r) as properties\n LIMIT 1\n `,\n { globalId: args.globalId }\n );\n\n return result[0] ?? null;\n },\n});\n\nexport const retryProjectionByGlobalId = internalAction({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return { success: false, error: \"[Neo4j Edge API] Neo4j not configured\" };\n }\n\n const result = await runCypher<{\n edgeType: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties: Record<string, unknown>;\n }>(\n `\n MATCH (from)-[r {globalId: $globalId}]->(to)\n RETURN r.edgeType as edgeType,\n from.globalId as fromGlobalId,\n to.globalId as toGlobalId,\n properties(r) as properties\n LIMIT 1\n `,\n { globalId: args.globalId }\n );\n\n if (result.length === 0) {\n return {\n success: false,\n error: `[Neo4j Edge API] Edge not found in Neo4j: ${args.globalId}`,\n };\n }\n\n const [edge] = result;\n if (!edge) {\n return {\n success: false,\n error: `[Neo4j Edge API] Edge not found in Neo4j: ${args.globalId}`,\n };\n }\n if (!needsDualWrite(edge.edgeType)) {\n return {\n success: true,\n skipped: true,\n reason: \"edge_type_not_projected\",\n edgeType: edge.edgeType,\n };\n }\n\n const props = edge.properties || {};\n await mirrorEdgeToConvex(ctx, {\n globalId: args.globalId,\n fromGlobalId: edge.fromGlobalId,\n toGlobalId: edge.toGlobalId,\n edgeType: edge.edgeType,\n weight: readNumberProperty(props, \"weight\"),\n confidence: readNumberProperty(props, \"confidence\"),\n context: readStringProperty(props, \"context\"),\n derivationType: readStringProperty(props, \"derivationType\"),\n createdBy:\n readStringProperty(props, \"createdBy\") ?? \"neo4j_projection_retry\",\n topicId: readStringProperty(props, \"topicId\"),\n fromLayer: readStringProperty(props, \"fromLayer\"),\n toLayer: readStringProperty(props, \"toLayer\"),\n fromNodeType: readStringProperty(props, \"fromNodeType\"),\n toNodeType: readStringProperty(props, \"toNodeType\"),\n reasoningMethod: readStringProperty(props, \"reasoningMethod\"),\n logicalRole: readStringProperty(props, \"logicalRole\"),\n temporalClass: readStringProperty(props, \"temporalClass\"),\n validFrom: readNumberProperty(props, \"validFrom\"),\n validUntil: readNumberProperty(props, \"validUntil\"),\n });\n\n return { success: true, globalId: args.globalId, projected: true };\n },\n});\n","import { unsafeConvexAnyApi } from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n type ActionBuilder,\n actionGeneric,\n type GenericActionCtx,\n type GenericDataModel,\n type GenericDocument,\n type GenericMutationCtx,\n type GenericQueryCtx,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n type MutationBuilder,\n type QueryBuilder,\n} from \"convex/server\";\nimport type { GenericId, Value } from \"convex/values\";\n\nexport const internal = unsafeConvexAnyApi(\n \"graph-sync top-level module bundle lacks a committed Convex _generated/api surface\"\n);\n\ntype TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\ntype GraphSyncDocument<TableName extends string> = GenericDocument & {\n _creationTime: number;\n _id: GenericId<TableName>;\n};\n\ninterface GraphSyncTableInfo<\n Document extends GenericDocument,\n Indexes extends Record<string, string[]>,\n> {\n document: Document;\n fieldPaths: string;\n indexes: Indexes;\n searchIndexes: Record<string, never>;\n vectorIndexes: Record<string, never>;\n}\n\ntype EpistemicNodeDocument = GraphSyncDocument<\"epistemicNodes\"> & {\n globalId: string;\n nodeType: string;\n projectId?: string;\n updatedAt?: number;\n};\n\ntype EpistemicNodeEmbeddingDocument =\n GraphSyncDocument<\"epistemicNodeEmbeddings\"> & {\n embedding?: number[];\n nodeId: GenericId<\"epistemicNodes\">;\n };\n\ntype EpistemicEdgeDocument = GraphSyncDocument<\"epistemicEdges\"> & {\n edgeType: string;\n fromNodeId?: GenericId<\"epistemicNodes\"> | null;\n globalId?: string;\n sourceGlobalId?: string;\n targetGlobalId?: string;\n toNodeId?: GenericId<\"epistemicNodes\"> | null;\n};\n\ntype Neo4jSyncQueueDocument = GraphSyncDocument<\"neo4jSyncQueue\"> & {\n attempts?: number;\n createdAt?: number;\n entityId: string;\n entityType: \"node\" | \"edge\";\n lastAttemptAt?: number;\n lastError?: string;\n maxAttempts?: number;\n operation: \"upsert\" | \"delete\";\n status: \"pending\" | \"in_progress\" | \"failed\" | \"succeeded\";\n updatedAt?: number;\n};\n\ninterface GraphSyncDataModel extends GenericDataModel {\n epistemicEdges: GraphSyncTableInfo<\n EpistemicEdgeDocument,\n {\n by_globalId: [\"globalId\"];\n }\n >;\n epistemicNodeEmbeddings: GraphSyncTableInfo<\n EpistemicNodeEmbeddingDocument,\n {\n by_nodeId: [\"nodeId\"];\n }\n >;\n epistemicNodes: GraphSyncTableInfo<\n EpistemicNodeDocument,\n {\n by_nodeType: [\"nodeType\"];\n }\n >;\n neo4jSyncQueue: GraphSyncTableInfo<\n Neo4jSyncQueueDocument,\n {\n by_entity: [\"entityType\", \"entityId\"];\n by_status: [\"status\"];\n }\n >;\n}\n\nexport type GraphSyncRecord = Record<string, Value>;\nexport type ActionCtx = GenericActionCtx<GraphSyncDataModel>;\nexport type MutationCtx = GenericMutationCtx<GraphSyncDataModel>;\nexport type QueryCtx = GenericQueryCtx<GraphSyncDataModel>;\n\nexport const action = actionGeneric as ActionBuilder<\n GraphSyncDataModel,\n \"public\"\n>;\nexport const internalAction = internalActionGeneric as ActionBuilder<\n GraphSyncDataModel,\n \"internal\"\n>;\nexport const internalMutation = internalMutationGeneric as MutationBuilder<\n GraphSyncDataModel,\n \"internal\"\n>;\nexport const internalQuery = internalQueryGeneric as QueryBuilder<\n GraphSyncDataModel,\n \"internal\"\n>;\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueries subpath; rename needs an export-map migration.\n// biome-ignore-all lint/performance/noBarrelFile: Public Neo4j query facade preserving current graph-sync import surface.\n/**\n * Neo4j Graph Queries\n *\n * Convex actions that execute graph queries against Neo4j.\n * These provide graph intelligence that's hard/impossible in Convex alone:\n * - Multi-hop traversals\n * - Path finding\n * - Cross-theme patterns\n * - Contradiction detection\n *\n * Architecture:\n * - Convex action calls a tenant-owned query proxy route\n * - Query proxy executes a predefined Cypher query\n * - Results return to the Convex caller\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport { action } from \"./convex\";\nimport { callNeo4jQuery, toInt, withTopicScope } from \"./neo4jQueriesCore\";\n\n// =============================================================================\n// GRAPH QUERIES\n// =============================================================================\n\n/**\n * Get the full lineage of a node (what it was derived/extracted from)\n * Uses Neo4j for efficient multi-hop traversal up to 10 levels deep\n */\nexport const getNodeLineageGraph = action({\n args: {\n globalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"nodeLineage\",\n withTopicScope(args, {\n globalId: args.globalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n console.error(\"[Neo4j] Lineage query failed:\", result.error);\n return { lineage: [], error: result.error };\n }\n\n // Extract lineage from first result\n const lineage =\n (result.data?.[0] as { lineage?: unknown[] })?.lineage || [];\n return { lineage };\n },\n});\n\n/**\n * Get nodes connected to a given node within N hops\n * Much more powerful than Convex's single-hop queries\n */\nexport const getConnectedNodesGraph = action({\n args: {\n globalId: v.string(),\n maxHops: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // Ensure numeric params are integers (Neo4j requires integers, not floats)\n const maxHops = Math.min(toInt(args.maxHops, 2), 5);\n const limit = toInt(args.limit, 50);\n\n const result = await callNeo4jQuery(\n \"connectedNodes\",\n withTopicScope(args, {\n globalId: args.globalId,\n maxHops,\n limit,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n console.error(\"[Neo4j] Connected nodes query failed:\", result.error);\n return { nodes: [], error: result.error };\n }\n\n return { nodes: result.data || [] };\n },\n});\n\n/**\n * Get all beliefs that belong to a theme\n */\nexport const getThemeBeliefsGraph = action({\n args: {\n themeGlobalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"themeBeliefs\", {\n themeGlobalId: args.themeGlobalId,\n });\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return {\n beliefs: result.data?.map((r) => (r as { belief: unknown }).belief) || [],\n };\n },\n});\n\n/**\n * Get evidence that supports a belief (through question chain OR direct link)\n */\nexport const getBeliefEvidenceGraph = action({\n args: {\n beliefGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"beliefEvidence\",\n withTopicScope(args, {\n beliefGlobalId: args.beliefGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { evidence: [], error: result.error };\n }\n\n return {\n evidence:\n result.data?.map((r) => (r as { evidence: unknown }).evidence) || [],\n };\n },\n});\n\n/**\n * Find beliefs that appear in multiple themes (cross-cutting insights)\n */\nexport const getCrossThemeBeliefs = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"crossThemeBeliefs\",\n withTopicScope(args, {\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return {\n beliefs: result.data?.map((r) => (r as { belief: unknown }).belief) || [],\n };\n },\n});\n\n/**\n * Find potential contradictions in the knowledge graph\n * Evidence that tests conflicting beliefs\n */\nexport const findPotentialContradictions = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"potentialContradictions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 10),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { contradictions: [], error: result.error };\n }\n\n return {\n contradictions:\n result.data?.map(\n (r) => (r as { contradiction: unknown }).contradiction\n ) || [],\n };\n },\n});\n\n/**\n * Get the full subgraph for a theme (all connected beliefs, questions, evidence)\n */\nexport const getThemeSubgraph = action({\n args: {\n themeGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"themeSubgraph\",\n withTopicScope(args, {\n themeGlobalId: args.themeGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { subgraph: null, error: result.error };\n }\n\n return {\n subgraph: (result.data?.[0] as { subgraph: unknown })?.subgraph || null,\n };\n },\n});\n\n/**\n * Find the path from evidence to a belief (how does this evidence support this belief?)\n */\nexport const getEvidenceToBeliefPath = action({\n args: {\n evidenceGlobalId: v.string(),\n beliefGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"evidenceToBeliefPath\",\n withTopicScope(args, {\n evidenceGlobalId: args.evidenceGlobalId,\n beliefGlobalId: args.beliefGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { path: null, error: result.error };\n }\n\n // Query returns: { pathResult: { nodes: [...], relationships: [...], length: N } }\n const pathResult = result.data?.[0] as {\n pathResult?: {\n nodes?: unknown[];\n relationships?: string[];\n length?: number;\n };\n };\n\n if (!pathResult?.pathResult) {\n return { path: null, error: \"No path found between evidence and belief\" };\n }\n\n return {\n path: {\n nodes: pathResult.pathResult.nodes || [],\n relationships: pathResult.pathResult.relationships || [],\n length: pathResult.pathResult.length || 0,\n },\n };\n },\n});\n\n/**\n * Get stats for a theme (counts of beliefs, questions, evidence)\n */\nexport const getThemeStats = action({\n args: {\n themeGlobalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"themeStats\", {\n themeGlobalId: args.themeGlobalId,\n });\n\n if (!result.success) {\n return { stats: null, error: result.error };\n }\n\n return { stats: (result.data?.[0] as { stats: unknown })?.stats || null };\n },\n});\n\n/**\n * Get candidate theme-to-valuechain mappings\n * Returns all themes and value chains for manual or AI-assisted matching\n */\nexport const getThemeValueChainCandidates = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"themeValueChainCandidates\",\n withTopicScope(args, {\n limit: toInt(args.limit, 100),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { candidates: [], error: result.error };\n }\n\n return {\n candidates:\n result.data?.map((r) => (r as { candidate: unknown }).candidate) || [],\n };\n },\n});\n\n// =============================================================================\n// RELATIONSHIP QUERIES\n// =============================================================================\n\n/**\n * Find themes that impact a specific company\n */\nexport const getThemesImpactingCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"themesImpactingCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 20),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find companies related to a theme\n */\nexport const getCompaniesByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"companiesByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find questions about a value chain\n */\nexport const getQuestionsByValueChain = action({\n args: {\n valueChainName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"questionsByValueChain\", {\n valueChainName: args.valueChainName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find questions about a theme\n */\nexport const getQuestionsByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"questionsByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find people/contacts related to a theme\n */\nexport const getPeopleByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"peopleByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find people at a specific company\n */\nexport const getPeopleByCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"peopleByCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find value chains for a theme\n */\nexport const getValueChainsByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"valueChainsByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 20),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find functions in a value chain\n */\nexport const getFunctionsByValueChain = action({\n args: {\n valueChainName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"functionsByValueChain\", {\n valueChainName: args.valueChainName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find beliefs about a company\n */\nexport const getBeliefsByCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"beliefsByCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 30),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find evidence about a company\n */\nexport const getEvidenceByCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"evidenceByCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Search all nodes by text\n */\nexport const searchAllNodes = action({\n args: {\n searchText: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"searchAllNodes\", {\n searchText: args.searchText,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get all relationships from a node\n */\nexport const getNodeRelationships = action({\n args: {\n globalId: v.optional(v.string()),\n searchText: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"nodeRelationships\", {\n globalId: args.globalId || \"\",\n searchText: args.searchText || \"\",\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get graph statistics (node counts by type)\n */\nexport const getGraphStats = action({\n args: {},\n returns: permissiveReturn,\n handler: async () => {\n const result = await callNeo4jQuery(\"graphStats\", {});\n\n if (!result.success) {\n return { stats: [], error: result.error };\n }\n\n return { stats: result.data || [] };\n },\n});\n\n/**\n * Flexible graph query - routes to appropriate query based on intent\n * This is the main entry point for natural language graph queries\n */\nexport const queryGraph = action({\n args: {\n queryType: v.union(\n v.literal(\"themesImpactingCompany\"),\n v.literal(\"companiesByTheme\"),\n v.literal(\"questionsByValueChain\"),\n v.literal(\"questionsByTheme\"),\n v.literal(\"peopleByTheme\"),\n v.literal(\"peopleByCompany\"),\n v.literal(\"valueChainsByTheme\"),\n v.literal(\"functionsByValueChain\"),\n v.literal(\"beliefsByCompany\"),\n v.literal(\"evidenceByCompany\"),\n v.literal(\"searchAllNodes\"),\n v.literal(\"nodeRelationships\"),\n v.literal(\"graphStats\")\n ),\n params: v.object({\n companyName: v.optional(v.string()),\n themeName: v.optional(v.string()),\n valueChainName: v.optional(v.string()),\n searchText: v.optional(v.string()),\n globalId: v.optional(v.string()),\n limit: v.optional(v.number()),\n }),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // Ensure limit is an integer (JavaScript may pass floats)\n const limit = toInt(args.params.limit, 30);\n\n // Validate required params based on query type\n const themeRequiredQueries = [\n \"questionsByTheme\",\n \"peopleByTheme\",\n \"companiesByTheme\",\n \"valueChainsByTheme\",\n ];\n const companyRequiredQueries = [\n \"themesImpactingCompany\",\n \"peopleByCompany\",\n \"beliefsByCompany\",\n \"evidenceByCompany\",\n ];\n const valueChainRequiredQueries = [\n \"questionsByValueChain\",\n \"functionsByValueChain\",\n ];\n\n if (\n themeRequiredQueries.includes(args.queryType) &&\n !args.params.themeName\n ) {\n return {\n results: [],\n error: `Query type '${args.queryType}' requires 'themeName' parameter`,\n };\n }\n if (\n companyRequiredQueries.includes(args.queryType) &&\n !args.params.companyName\n ) {\n return {\n results: [],\n error: `Query type '${args.queryType}' requires 'companyName' parameter`,\n };\n }\n if (\n valueChainRequiredQueries.includes(args.queryType) &&\n !args.params.valueChainName\n ) {\n return {\n results: [],\n error: `Query type '${args.queryType}' requires 'valueChainName' parameter`,\n };\n }\n\n const result = await callNeo4jQuery(\n args.queryType,\n withTopicScope(args, {\n ...args.params,\n limit,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\nexport * from \"./neo4jQueriesAdvanced\";\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueriesCore subpath; rename needs an export-map migration.\n/**\n * Neo4j Graph Queries - shared transport helpers.\n */\n\ntype Neo4jQueryTransportSuccess = Readonly<{\n success: true;\n data: unknown[];\n}>;\n\ntype Neo4jQueryTransportFailure = Readonly<{\n success: false;\n error: string;\n}>;\n\ntype Neo4jQueryTransportResult =\n | Neo4jQueryTransportSuccess\n | Neo4jQueryTransportFailure;\n\ninterface Neo4jProxyResponse {\n data?: unknown[];\n error?: string;\n}\n\nconst TRAILING_SLASH_REGEX = /\\/+$/u;\nconst NEO4J_QUERY_TIMEOUT_MS = 10_000;\n\nexport function toInt(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null) {\n return defaultValue;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? Math.floor(parsed) : defaultValue;\n}\n\nfunction isAllowedProxyUrl(urlString: string): boolean {\n try {\n const url = new URL(urlString);\n const isLocalhost =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\";\n if (!isLocalhost && url.protocol !== \"https:\") {\n return false;\n }\n if (url.username || url.password) {\n return false;\n }\n\n const configuredHosts = (\n process.env.LUCERN_GRAPH_SYNC_ALLOWED_PROXY_HOSTS || \"\"\n )\n .split(\",\")\n .map((host) => host.trim().toLowerCase())\n .filter(Boolean);\n if (configuredHosts.length === 0) {\n return true;\n }\n\n const hostname = url.hostname.toLowerCase();\n return configuredHosts.some((host) =>\n host.startsWith(\".\") ? hostname.endsWith(host) : hostname === host\n );\n } catch {\n console.warn(\"[Neo4j Queries] Rejected malformed proxy URL\", urlString);\n return false;\n }\n}\n\nfunction createNeo4jQueryTransportSuccess(\n data: unknown[]\n): Neo4jQueryTransportSuccess {\n return { success: true, data };\n}\n\nfunction createNeo4jQueryTransportFailure(\n error: string\n): Neo4jQueryTransportFailure {\n return { success: false, error };\n}\n\nfunction resolveProxyBaseUrl(apiBaseUrl?: string): string | null {\n const resolved =\n apiBaseUrl ||\n process.env.LUCERN_GRAPH_SYNC_QUERY_BASE_URL ||\n process.env.NEXT_PUBLIC_APP_URL;\n const normalized = resolved?.trim();\n return normalized ? normalized.replace(TRAILING_SLASH_REGEX, \"\") : null;\n}\n\nfunction buildProxyEndpoint(proxyBaseUrl: string): string {\n const endpoint = new URL(proxyBaseUrl);\n if (!endpoint.pathname.endsWith(\"/api/neo4j-query\")) {\n endpoint.pathname = `${endpoint.pathname.replace(\n TRAILING_SLASH_REGEX,\n \"\"\n )}/api/neo4j-query`;\n }\n return endpoint.toString();\n}\n\nfunction tenantContextFromParams(params: Record<string, unknown>): string {\n const explicitTenant =\n typeof params.tenantId === \"string\" ? params.tenantId.trim() : \"\";\n const scopedTopic =\n typeof params.topicId === \"string\" ? params.topicId.trim() : \"\";\n const legacyProjectScope =\n typeof params.projectId === \"string\" ? params.projectId.trim() : \"\";\n const scopedTopicId = scopedTopic || legacyProjectScope;\n const projectTenant = scopedTopicId ? `project:${scopedTopicId}` : \"\";\n const defaultTenant = process.env.LUCERN_DEFAULT_TENANT_ID?.trim() || \"\";\n return explicitTenant || projectTenant || defaultTenant;\n}\n\nfunction neo4jQueryHeaders(\n syncSecret: string,\n apiBaseUrl: string | undefined\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${syncSecret}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret && apiBaseUrl) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return headers;\n}\n\nasync function postNeo4jQuery(args: {\n apiBaseUrl?: string;\n params: Record<string, unknown>;\n proxyUrl: string;\n queryName: string;\n syncSecret: string;\n}): Promise<Neo4jQueryTransportResult> {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n NEO4J_QUERY_TIMEOUT_MS\n );\n\n try {\n const response = await fetch(buildProxyEndpoint(args.proxyUrl), {\n method: \"POST\",\n headers: neo4jQueryHeaders(args.syncSecret, args.apiBaseUrl),\n body: JSON.stringify({\n queryName: args.queryName,\n params: args.params,\n }),\n signal: controller.signal,\n });\n\n const result = (await response.json()) as Neo4jProxyResponse;\n if (!response.ok) {\n return createNeo4jQueryTransportFailure(result.error || \"Query failed\");\n }\n\n return createNeo4jQueryTransportSuccess(result.data || []);\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === \"AbortError\") {\n console.warn(\"[Neo4j Queries] Request timed out for:\", args.queryName);\n return createNeo4jQueryTransportFailure(\"Query timed out (10s)\");\n }\n throw fetchError;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n\nexport function withTopicScope<T extends Record<string, unknown>>(\n args: { topicId?: string },\n params: T\n): T & { topicId?: string } {\n return args.topicId ? { ...params, topicId: args.topicId } : params;\n}\n\nexport async function callNeo4jQuery(\n queryName: string,\n params: Record<string, unknown>,\n apiBaseUrl?: string\n): Promise<Neo4jQueryTransportResult> {\n const proxyUrl = resolveProxyBaseUrl(apiBaseUrl);\n if (!proxyUrl) {\n return createNeo4jQueryTransportFailure(\n \"Neo4j query proxy URL not configured\"\n );\n }\n\n if (!isAllowedProxyUrl(proxyUrl)) {\n console.error(\n \"[Neo4j Queries] Blocked request to disallowed URL:\",\n proxyUrl\n );\n return createNeo4jQueryTransportFailure(\"Invalid proxy URL\");\n }\n\n const syncSecret = process.env.NEO4J_SYNC_SECRET;\n\n if (!syncSecret) {\n console.error(\"[Neo4j Queries] NEO4J_SYNC_SECRET not configured\");\n return createNeo4jQueryTransportFailure(\"Neo4j sync secret not configured\");\n }\n\n try {\n const tenantId = tenantContextFromParams(params);\n if (!tenantId) {\n return createNeo4jQueryTransportFailure(\n \"Missing required tenant context (tenantId or topicId)\"\n );\n }\n const scopedParams = { ...params, tenantId };\n return await postNeo4jQuery({\n apiBaseUrl,\n params: scopedParams,\n proxyUrl,\n queryName,\n syncSecret,\n });\n } catch (error) {\n console.error(\"[Neo4j Queries] Error in callNeo4jQuery:\", queryName, error);\n return createNeo4jQueryTransportFailure(\n error instanceof Error\n ? error.message\n : \"Network error connecting to query proxy\"\n );\n }\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueriesAdvanced subpath; rename needs an export-map migration.\n/**\n * Neo4j Graph Queries - advanced query surfaces.\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport { action } from \"./convex\";\nimport { callNeo4jQuery, toInt, withTopicScope } from \"./neo4jQueriesCore\";\n\n// =============================================================================\n// CLASSIFICATION-POWERED QUERIES (Logic Machine)\n// These leverage the new epistemic classification fields\n// =============================================================================\n\n/**\n * Get high-priority questions (critical/high) that test beliefs\n */\nexport const getHighPriorityQuestions = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"highPriorityQuestions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { questions: [], error: result.error };\n }\n\n return { questions: result.data || [] };\n },\n});\n\n/**\n * Get evidence filtered by methodology (expert_interview, customer_interview, etc.)\n */\nexport const getEvidenceByMethodology = action({\n args: {\n methodology: v.string(),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"evidenceByMethodology\",\n withTopicScope(args, {\n methodology: args.methodology,\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { evidence: [], error: result.error };\n }\n\n return { evidence: result.data || [] };\n },\n});\n\n/**\n * Get proprietary/early evidence (information asymmetry advantage)\n */\nexport const getProprietaryEvidence = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"proprietaryEvidence\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { evidence: [], error: result.error };\n }\n\n return { evidence: result.data || [] };\n },\n});\n\n/**\n * Get beliefs by epistemic status (hypothesis, emerging, established, challenged, etc.)\n */\nexport const getBeliefsByEpistemicStatus = action({\n args: {\n epistemicStatus: v.string(),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"beliefsByEpistemicStatus\",\n withTopicScope(args, {\n epistemicStatus: args.epistemicStatus,\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return { beliefs: result.data || [] };\n },\n});\n\n/**\n * Get challenged beliefs that need attention\n */\nexport const getChallengedBeliefs = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"challengedBeliefs\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return { beliefs: result.data || [] };\n },\n});\n\n/**\n * Get predictions with deadlines\n */\nexport const getPredictions = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"predictions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { predictions: [], error: result.error };\n }\n\n return { predictions: result.data || [] };\n },\n});\n\n/**\n * Get causal chains (edges with causal reasoning method)\n */\nexport const getCausalChains = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"causalChains\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { chains: [], error: result.error };\n }\n\n return { chains: result.data || [] };\n },\n});\n\n/**\n * Get necessary evidence for beliefs (logicalRole = necessary or necessary_sufficient)\n */\nexport const getNecessaryEvidence = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"necessaryEvidence\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get falsification questions (designed to disprove beliefs)\n */\nexport const getFalsificationQuestions = action({\n args: {\n limit: v.optional(v.number()),\n beliefIds: v.optional(v.array(v.string())),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"falsificationQuestions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n beliefIds: args.beliefIds,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { questions: [], error: result.error };\n }\n\n return { questions: result.data || [] };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - COGNITIVE BIAS DETECTION\n// =============================================================================\n\n/**\n * Detect confirmation bias in beliefs.\n * Returns beliefs with high supporting:contradicting evidence ratio.\n */\nexport const getConfirmationBiasScore = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"confirmationBiasScore\",\n {\n ...(args.topicId ? { topicId: args.topicId } : {}),\n limit: toInt(args.limit, 30),\n },\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Detect anchoring bias - old beliefs that never got challenged or forked.\n */\nexport const getAnchoringBiasDetection = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"anchoringBiasDetection\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Detect source concentration risk - beliefs where all evidence traces to single source.\n */\nexport const getSourceConcentrationRisk = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"sourceConcentrationRisk\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - THESIS STRESS TESTING\n// =============================================================================\n\n/**\n * Find the minimum falsification set - smallest set of beliefs that would collapse the thesis.\n */\nexport const getMinimumFalsificationSet = action({\n args: {\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"minimumFalsificationSet\",\n withTopicScope(args, {}),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { result: null, error: result.error };\n }\n\n // Extract from result array (single result expected)\n const data = result.data;\n return { result: Array.isArray(data) && data.length > 0 ? data[0] : null };\n },\n});\n\n/**\n * Get contradiction tension map - all unresolved tensions in the graph.\n */\nexport const getContradictionTensionMap = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"contradictionTensionMap\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - EPISTEMIC HEALTH\n// =============================================================================\n\n/**\n * Get reasoning depth score - how deep is the evidence chain for each belief?\n */\nexport const getReasoningDepthScore = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"reasoningDepthScore\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get knowledge frontier - open questions on the boundary of what we know.\n */\nexport const getKnowledgeFrontier = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"knowledgeFrontier\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get belief half-life analysis - how long do beliefs survive before being superseded?\n */\nexport const getBeliefHalfLife = action({\n args: {\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"beliefHalfLife\",\n withTopicScope(args, {}),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { result: null, error: result.error };\n }\n\n // Single result expected\n const data = result.data;\n return { result: Array.isArray(data) && data.length > 0 ? data[0] : null };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - OPERATIONAL INTELLIGENCE\n// =============================================================================\n\n/**\n * Get meeting prep brief for a person at a company.\n */\nexport const getMeetingPrepBrief = action({\n args: {\n personGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"meetingPrepBrief\",\n withTopicScope(args, {\n personGlobalId: args.personGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { brief: null, error: result.error };\n }\n\n // Single result expected\n const data = result.data;\n return { brief: Array.isArray(data) && data.length > 0 ? data[0] : null };\n },\n});\n\n/**\n * Get proprietary signals - our unique insights not in public discourse.\n */\nexport const getProprietarySignals = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"proprietarySignals\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get portfolio conviction dashboard - aggregate conviction metrics across all themes.\n */\nexport const getPortfolioConviction = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"portfolioConviction\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { portfolio: [], error: result.error };\n }\n\n return { portfolio: result.data || [] };\n },\n});\n\n/**\n * Get stale themes - themes with no recent activity.\n */\nexport const getStaleThemes = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"staleThemes\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { themes: [], error: result.error };\n }\n\n return { themes: result.data || [] };\n },\n});\n\n/**\n * Get missing question detection - high-confidence beliefs with no testing questions.\n */\nexport const getMissingQuestionDetection = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"missingQuestionDetection\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get surprise detection - evidence that surprised us (high surprise score).\n */\nexport const getSurpriseDetection = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"surpriseDetection\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get non-consensus beliefs - beliefs where we diverge from market consensus.\n */\nexport const getNonConsensusBeliefs = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"nonConsensusBeliefs\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n// =============================================================================\n// HYBRID SEMANTIC + STRUCTURAL QUERIES (Neo4j Vector Indexes)\n// =============================================================================\n\n/** Expected embedding dimensions (llama-text-embed-v2). */\nconst EMBEDDING_DIMENSIONS = 1024;\n\n/** Valid Neo4j vector index names. */\nconst VALID_INDEX_NAMES = new Set([\n \"belief_embedding_index\",\n \"question_embedding_index\",\n \"evidence_embedding_index\",\n \"theme_embedding_index\",\n \"source_embedding_index\",\n \"synthesis_embedding_index\",\n]);\n\n/** Clamp a number to [min, max]. */\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * Semantic search with graph context — find nodes by embedding similarity\n * and return their graph neighborhood for context.\n */\nexport const semanticSearch = action({\n args: {\n embedding: v.array(v.float64()),\n indexName: v.optional(v.string()),\n topK: v.optional(v.number()),\n minScore: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // SECURITY: Validate embedding dimensions\n if (args.embedding.length !== EMBEDDING_DIMENSIONS) {\n return {\n results: [],\n error: `Embedding must be ${EMBEDDING_DIMENSIONS} dimensions, got ${args.embedding.length}`,\n };\n }\n\n // SECURITY: Validate index name against known set\n const indexName = args.indexName || \"belief_embedding_index\";\n if (!VALID_INDEX_NAMES.has(indexName)) {\n return { results: [], error: `Invalid index name: ${indexName}` };\n }\n\n const result = await callNeo4jQuery(\n \"semanticSearch\",\n {\n embedding: args.embedding,\n indexName,\n topK: toInt(args.topK, 10),\n minScore: clamp(args.minScore ?? 0.5, 0, 1),\n },\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find semantic orphans — nodes structurally connected but semantically\n * distant from their graph neighbors.\n */\nexport const getSemanticOrphans = action({\n args: {\n threshold: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"semanticOrphans\",\n withTopicScope(args, {\n threshold: clamp(args.threshold ?? 0.4, 0, 1),\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find soft contradictions — beliefs about the same topic (high embedding similarity)\n * but with divergent evidence or confidence.\n */\nexport const getSoftContradictions = action({\n args: {\n similarityThreshold: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"softContradictions\",\n withTopicScope(args, {\n similarityThreshold: clamp(args.similarityThreshold ?? 0.7, 0, 1),\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find semantic bridges — nodes semantically similar but graph-distant.\n * These represent potential missing connections.\n */\nexport const getSemanticBridges = action({\n args: {\n similarityThreshold: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"semanticBridges\",\n withTopicScope(args, {\n similarityThreshold: clamp(args.similarityThreshold ?? 0.7, 0, 1),\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Graph-aware RAG search — semantic search that expands along graph structure\n * to pull in supporting context (evidence, themes, sources).\n */\nexport const graphAwareSearch = action({\n args: {\n embedding: v.array(v.float64()),\n indexName: v.optional(v.string()),\n topK: v.optional(v.number()),\n minScore: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // SECURITY: Validate embedding dimensions\n if (args.embedding.length !== EMBEDDING_DIMENSIONS) {\n return {\n results: [],\n error: `Embedding must be ${EMBEDDING_DIMENSIONS} dimensions, got ${args.embedding.length}`,\n };\n }\n\n // SECURITY: Validate index name against known set\n const indexName = args.indexName || \"belief_embedding_index\";\n if (!VALID_INDEX_NAMES.has(indexName)) {\n return { results: [], error: `Invalid index name: ${indexName}` };\n }\n\n const result = await callNeo4jQuery(\n \"graphAwareSearch\",\n withTopicScope(args, {\n embedding: args.embedding,\n indexName,\n topK: toInt(args.topK, 10),\n minScore: clamp(args.minScore ?? 0.5, 0, 1),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueryRoute subpath; rename needs an export-map migration.\n/**\n * Vercel/Next route helper for the Neo4j query proxy.\n *\n * The helper accepts named Cypher only. It never accepts raw Cypher from a\n * request body, which keeps tenant routes small without opening an injection\n * surface.\n */\n\n\"use node\";\n\nimport { DEFAULT_QUERY_TIMEOUT_MS, runCypher } from \"./neo4jDriver\";\n\nconst BEARER_AUTHORIZATION_PATTERN = /^Bearer\\s+(.+)$/iu;\n\nexport type Neo4jNamedQuery = Readonly<{\n cypher: string;\n timeoutMs?: number;\n}>;\n\nexport type Neo4jQueryRegistry = Readonly<Record<string, Neo4jNamedQuery>>;\n\nexport type Neo4jQueryRouteOptions = Readonly<{\n queries: Neo4jQueryRegistry;\n syncSecret?: string;\n requireTenantContext?: boolean;\n}>;\n\ntype Neo4jQueryRequestBody = Readonly<{\n queryName?: unknown;\n params?: unknown;\n}>;\n\nfunction jsonResponse(body: unknown, init?: ResponseInit): Response {\n return new Response(JSON.stringify(body), {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n ...init?.headers,\n },\n });\n}\n\nfunction readBearerSecret(request: Request): string | null {\n const authorization = request.headers.get(\"authorization\") ?? \"\";\n const match = authorization.match(BEARER_AUTHORIZATION_PATTERN);\n return match?.[1]?.trim() || null;\n}\n\nfunction validateRouteSecret(\n request: Request,\n options: Neo4jQueryRouteOptions\n): Response | null {\n const expectedSecret =\n options.syncSecret ?? process.env.NEO4J_SYNC_SECRET?.trim();\n if (!expectedSecret) {\n return jsonResponse(\n { error: \"Neo4j sync secret not configured\" },\n { status: 500 }\n );\n }\n if (readBearerSecret(request) !== expectedSecret) {\n return jsonResponse({ error: \"Unauthorized\" }, { status: 401 });\n }\n return null;\n}\n\nasync function readQueryBody(\n request: Request\n): Promise<\n { ok: true; body: Neo4jQueryRequestBody } | { ok: false; response: Response }\n> {\n try {\n return {\n ok: true,\n body: (await request.json()) as Neo4jQueryRequestBody,\n };\n } catch {\n return {\n ok: false,\n response: jsonResponse({ error: \"Invalid JSON body\" }, { status: 400 }),\n };\n }\n}\n\nfunction normalizeQueryParams(params: unknown): Record<string, unknown> {\n return params && typeof params === \"object\" && !Array.isArray(params)\n ? (params as Record<string, unknown>)\n : {};\n}\n\nfunction hasTenantContext(params: Record<string, unknown>): boolean {\n const tenantId = params.tenantId;\n const topicId = params.topicId;\n const projectId = params.projectId;\n return [tenantId, topicId, projectId].some(\n (value) => typeof value === \"string\" && value.trim().length > 0\n );\n}\n\nfunction normalizeConnectedNodesQuery(\n queryName: string,\n params: Record<string, unknown>,\n queries: Neo4jQueryRegistry\n): string {\n if (queryName !== \"connectedNodes\") {\n return queryName;\n }\n\n const hops =\n typeof params.maxHops === \"number\" && Number.isFinite(params.maxHops)\n ? Math.min(Math.max(Math.floor(params.maxHops), 1), 5)\n : 2;\n const aliased = `connectedNodes${hops}`;\n return queries[aliased] ? aliased : queryName;\n}\n\nfunction requireTenantContext(\n options: Neo4jQueryRouteOptions,\n params: Record<string, unknown>\n): Response | null {\n if ((options.requireTenantContext ?? true) && !hasTenantContext(params)) {\n return jsonResponse(\n { error: \"Missing required tenant context\" },\n { status: 400 }\n );\n }\n return null;\n}\n\nfunction resolveNamedQuery(\n queryName: string,\n params: Record<string, unknown>,\n queries: Neo4jQueryRegistry\n):\n | { ok: true; queryName: string; query: Neo4jNamedQuery }\n | { ok: false; response: Response } {\n const normalizedQueryName = normalizeConnectedNodesQuery(\n queryName,\n params,\n queries\n );\n const query = queries[normalizedQueryName];\n if (!query) {\n return {\n ok: false,\n response: jsonResponse(\n { error: `Unknown query: ${queryName}` },\n { status: 400 }\n ),\n };\n }\n return { ok: true, query, queryName: normalizedQueryName };\n}\n\nasync function executeNamedQuery(\n queryName: string,\n query: Neo4jNamedQuery,\n params: Record<string, unknown>\n): Promise<Response> {\n try {\n const data = await runCypher(\n query.cypher,\n params,\n query.timeoutMs ?? DEFAULT_QUERY_TIMEOUT_MS\n );\n return jsonResponse({ data, queryName });\n } catch (error) {\n return jsonResponse(\n {\n error: error instanceof Error ? error.message : \"Neo4j query failed\",\n queryName,\n },\n { status: 500 }\n );\n }\n}\n\nexport function createNeo4jQueryRouteHandler(\n options: Neo4jQueryRouteOptions\n): (request: Request) => Promise<Response> {\n return async function handleNeo4jQuery(request: Request): Promise<Response> {\n const authError = validateRouteSecret(request, options);\n if (authError) {\n return authError;\n }\n\n const bodyResult = await readQueryBody(request);\n if (!bodyResult.ok) {\n return bodyResult.response;\n }\n const { body } = bodyResult;\n if (typeof body.queryName !== \"string\" || body.queryName.length === 0) {\n return jsonResponse({ error: \"Missing queryName\" }, { status: 400 });\n }\n\n const params = normalizeQueryParams(body.params);\n const tenantContextError = requireTenantContext(options, params);\n if (tenantContextError) {\n return tenantContextError;\n }\n\n const namedQuery = resolveNamedQuery(\n body.queryName,\n params,\n options.queries\n );\n if (!namedQuery.ok) {\n return namedQuery.response;\n }\n return executeNamedQuery(namedQuery.queryName, namedQuery.query, params);\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jSync subpath and Convex function module; rename needs export-map/generated API migration.\n/**\n * neo4jSync module implementation.\n */\n\n\"use node\";\n\n/**\n * Neo4j Sync - Node & Edge Mirroring\n *\n * Canonical split (ADR P2-D11):\n * - Convex is canonical for node state and lifecycle.\n * - Neo4j is canonical for edge topology and graph traversal/analytics.\n *\n * This module projects node/lifecycle state from Convex -> Neo4j and provides\n * batch sync for both nodes and edges.\n * Uses DIRECT neo4j-driver (no HTTP proxy) enabled by \"use node\" directive.\n *\n * Environment Variables (set per deployment via `npx convex env set`):\n * - NEO4J_URI: neo4j+s://xxx.databases.neo4j.io\n * - NEO4J_USER: neo4j\n * - NEO4J_PASSWORD: your-password\n *\n * NOTE: This file only contains actions because \"use node\" requires it.\n * Queries and mutations are in neo4jSyncHelpers.ts\n *\n * Reconciliation SLO targets (ADR §3.2):\n * - Node sync latency (Convex -> Neo4j): P95 < 5s\n * - Edge mirror latency (Neo4j -> Convex): P95 < 2s\n * - Retry queue depth: < 100 sustained entries\n * - Drift detection: weekly full reconcile + spot-check property parity\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\n// Import from Convex-compatible type registry\nimport {\n EDGE_TYPE_TO_REL,\n NODE_TYPE_TO_LABEL,\n} from \"@lucern/graph-primitives/graphTypes\";\nimport type { FunctionReference } from \"convex/server\";\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { internal, internalAction } from \"./convex\";\n// Import direct Neo4j driver functions\nimport {\n batchUpsertEdges,\n batchUpsertNodes,\n deleteEdge,\n deleteNode,\n getConnectionInfo,\n healthCheck,\n runWriteTransaction,\n upsertEdge,\n upsertNode,\n} from \"./neo4jDriver\";\n\ntype SyncEntityType = \"node\" | \"edge\" | \"embedding\";\ntype SyncOperation = \"upsert\" | \"delete\" | \"sync\";\ntype SyncResult = Readonly<{\n error?: string;\n entityType: SyncEntityType;\n operation: SyncOperation;\n skipped?: boolean;\n skippedReason?: string;\n success: boolean;\n}>;\n\ntype Neo4jNodeForSync = Record<string, unknown> & {\n _id: Id<\"epistemicNodes\">;\n answerQuality?: string;\n canonicalText?: string;\n confidence?: number;\n createdAt?: number;\n createdBy?: string;\n domain?: string;\n epistemicLayer?: string;\n epistemicStatus?: string;\n globalId: string;\n informationAsymmetry?: string;\n metadata?: Record<string, unknown>;\n methodology?: string;\n nodeType: string;\n predictionMeta?: Record<string, unknown>;\n projectId?: string;\n questionPriority?: string;\n questionType?: string;\n reversibility?: string;\n sourceType?: string;\n status?: string;\n subtype?: string;\n tenantId?: string;\n title?: string;\n updatedAt?: number;\n verificationStatus?: string;\n workspaceId?: string;\n};\n\ntype Neo4jEdgeForSync = Record<string, unknown> & {\n _id: Id<\"epistemicEdges\">;\n confidence?: number;\n context?: string;\n createdAt?: number;\n createdBy?: string;\n derivationType?: string;\n edgeType: string;\n fromGlobalId?: string;\n fromLayer?: string;\n globalId: string;\n logicalRole?: string;\n projectId?: string;\n reasoningMethod?: string;\n temporalClass?: string;\n tenantId?: string;\n toGlobalId?: string;\n toLayer?: string;\n weight?: number;\n workspaceId?: string;\n};\n\ntype NodeSyncOperation = \"upsert\" | \"delete\";\ntype EdgeSyncOperation = \"upsert\" | \"delete\";\ntype BatchSyncResult = Readonly<{\n failed: number;\n hasMore: boolean;\n nextCursor?: string | null;\n synced: number;\n}>;\ntype NodeBatchForSyncResult = Readonly<{\n hasMore: boolean;\n nextCursor?: string | null;\n nodes: Neo4jNodeForSync[];\n}>;\ntype EdgeBatchForSyncResult = Readonly<{\n edges: Neo4jEdgeForSync[];\n hasMore: boolean;\n nextCursor?: string | null;\n}>;\ntype RetryQueueItem = Readonly<{\n _id: Id<\"neo4jSyncQueue\">;\n entityId: string;\n entityType: \"node\" | \"edge\";\n operation: NodeSyncOperation;\n}>;\ntype EdgeRetryTarget =\n | Readonly<{\n edgeGlobalId: string;\n edgeId: Id<\"epistemicEdges\">;\n mode: \"convex_id\" | \"global_id_in_convex\";\n }>\n | Readonly<{\n edgeGlobalId: string;\n mode: \"global_id_only\";\n }>;\ntype ProjectionRetryResult = Pick<SyncResult, \"error\" | \"success\">;\ntype InternalQueryReference<\n Args extends Record<string, unknown>,\n Result,\n> = FunctionReference<\"query\", \"internal\", Args, Result>;\ntype InternalMutationReference<\n Args extends Record<string, unknown>,\n Result,\n> = FunctionReference<\"mutation\", \"internal\", Args, Result>;\ntype InternalActionReference<\n Args extends Record<string, unknown>,\n Result,\n> = FunctionReference<\"action\", \"internal\", Args, Result>;\n\nconst graphSyncHelpers = internal.neo4jSyncHelpers as unknown as {\n getAllEdgesForResync: InternalQueryReference<\n { cursor?: string; limit: number },\n EdgeBatchForSyncResult\n >;\n getAllNodesForResync: InternalQueryReference<\n { cursor?: string; limit: number; nodeType?: string },\n NodeBatchForSyncResult\n >;\n getEdgeBatchForSync: InternalQueryReference<\n { cursor?: string; limit: number },\n EdgeBatchForSyncResult\n >;\n getEdgeForSync: InternalQueryReference<\n { edgeId: Id<\"epistemicEdges\"> },\n Neo4jEdgeForSync | null\n >;\n getEmbeddingForSync: InternalQueryReference<\n { nodeId: Id<\"epistemicNodes\"> },\n number[] | null\n >;\n getNodeBatchForSync: InternalQueryReference<\n { cursor?: string; limit: number },\n NodeBatchForSyncResult\n >;\n getNodeForSync: InternalQueryReference<\n { nodeId: Id<\"epistemicNodes\"> },\n Neo4jNodeForSync | null\n >;\n getPendingRetries: InternalQueryReference<\n { limit: number },\n RetryQueueItem[]\n >;\n incrementAttempts: InternalMutationReference<\n { error: string; queueId: Id<\"neo4jSyncQueue\"> },\n { failed: boolean }\n >;\n logSyncEvent: InternalMutationReference<Record<string, unknown>, null>;\n queueForRetry: InternalMutationReference<Record<string, unknown>, unknown>;\n resolveEdgeRetryTarget: InternalQueryReference<\n { entityId: string },\n EdgeRetryTarget\n >;\n updateQueueStatus: InternalMutationReference<\n { queueId: Id<\"neo4jSyncQueue\">; status: string },\n null\n >;\n};\n\nconst graphSyncActions = internal.neo4jSync as unknown as {\n syncAllEdgesToNeo4j: InternalActionReference<\n { batchSize: number; cursor?: string },\n BatchSyncResult\n >;\n syncAllNodesToNeo4j: InternalActionReference<\n { batchSize: number; cursor?: string },\n BatchSyncResult\n >;\n syncEdgeToNeo4j: InternalActionReference<\n { edgeId: Id<\"epistemicEdges\">; operation: EdgeSyncOperation },\n SyncResult\n >;\n syncNodeToNeo4j: InternalActionReference<\n { nodeId: Id<\"epistemicNodes\">; operation: NodeSyncOperation },\n SyncResult\n >;\n};\n\nconst graphSyncEdgeApi = internal.neo4jEdgeAPI as unknown as {\n retryProjectionByGlobalId: InternalActionReference<\n { globalId: string },\n ProjectionRetryResult\n >;\n};\n\nfunction buildSyncResponse(\n entityType: SyncEntityType,\n operation: SyncOperation,\n fields: {\n success: boolean;\n error?: string;\n skipped?: boolean;\n skippedReason?: string;\n }\n): SyncResult {\n return {\n entityType,\n operation,\n ...fields,\n };\n}\n\nfunction buildSyncSuccess(\n entityType: SyncEntityType,\n operation: SyncOperation,\n fields?: {\n skipped?: boolean;\n skippedReason?: string;\n }\n): SyncResult {\n return buildSyncResponse(entityType, operation, {\n success: true,\n ...fields,\n });\n}\n\nfunction buildSyncFailure(\n entityType: SyncEntityType,\n operation: SyncOperation,\n error: string,\n fields?: {\n skipped?: boolean;\n skippedReason?: string;\n }\n): SyncResult {\n return buildSyncResponse(entityType, operation, {\n success: false,\n error,\n ...fields,\n });\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction readFirstString(...values: unknown[]): string {\n for (const value of values) {\n const stringValue = readString(value);\n if (stringValue.length > 0) {\n return stringValue;\n }\n }\n return \"\";\n}\n\nfunction readArrayLength(value: unknown): number {\n return Array.isArray(value) ? value.length : 0;\n}\n\nfunction nodeSyncEventType(\n operation: NodeSyncOperation\n): \"node_deleted\" | \"node_updated\" {\n return operation === \"delete\" ? \"node_deleted\" : \"node_updated\";\n}\n\nfunction edgeSyncEventType(\n operation: EdgeSyncOperation\n): \"edge_deleted\" | \"edge_created\" {\n return operation === \"delete\" ? \"edge_deleted\" : \"edge_created\";\n}\n\nfunction readNeo4jEndpointFailure(\n edge: Neo4jEdgeForSync,\n operation: EdgeSyncOperation\n): SyncResult | null {\n if (edge.fromGlobalId && edge.toGlobalId) {\n return null;\n }\n console.warn(\n \"[Neo4j Sync] Edge missing fromGlobalId or toGlobalId, skipping\"\n );\n return buildSyncFailure(\n \"edge\",\n operation,\n \"Edge missing connected node globalIds\",\n {\n skippedReason: \"edge_endpoint_missing\",\n }\n );\n}\n\nasync function applyEdgeOperation(\n edge: Neo4jEdgeForSync,\n operation: EdgeSyncOperation,\n edgeId: Id<\"epistemicEdges\">\n): Promise<string> {\n const relType =\n EDGE_TYPE_TO_REL[edge.edgeType] || edge.edgeType.toUpperCase();\n if (operation === \"delete\") {\n await deleteEdge(edge.globalId);\n console.log(`[Neo4j Sync] Deleted edge ${edge.globalId}`);\n return relType;\n }\n\n await upsertEdge(\n relType,\n edge.globalId,\n edge.fromGlobalId ?? \"\",\n edge.toGlobalId ?? \"\",\n {\n ...buildEdgeProperties(edge),\n convexId: edgeId,\n }\n );\n console.log(`[Neo4j Sync] Upserted edge ${edge.globalId} as ${relType}`);\n return relType;\n}\n\n// =============================================================================\n// SHARED PROPERTY BUILDERS\n// =============================================================================\n\n/**\n * Build the full Neo4j property set for a node.\n * Used by both single sync and batch sync to ensure parity.\n */\nfunction buildNodeProperties(node: Neo4jNodeForSync): Record<string, unknown> {\n const metadata = readRecord(node.metadata);\n const predictionMeta = readRecord(node.predictionMeta);\n return {\n answerQuality: readString(node.answerQuality),\n canonicalText: node.canonicalText || \"\",\n confidence: node.confidence || 0,\n convexId: node._id,\n createdAt: node.createdAt,\n createdBy: node.createdBy || \"\",\n criticality: readString(metadata.criticality),\n domain: node.domain || \"\",\n epistemicLayer: node.epistemicLayer || \"\",\n epistemicStatus: readString(node.epistemicStatus),\n expectedBy: predictionMeta?.expectedBy\n ? String(predictionMeta.expectedBy)\n : \"\",\n informationAsymmetry: readString(node.informationAsymmetry),\n isPrediction: predictionMeta?.isPrediction ? \"true\" : \"false\",\n methodology: readString(node.methodology),\n nodeType: node.nodeType,\n pillar: readFirstString(metadata.pillar, metadata.topic),\n projectId: node.projectId || \"\",\n questionPriority: readString(node.questionPriority),\n questionType: readString(node.questionType),\n reversibility: readString(node.reversibility),\n sourceType: node.sourceType || \"unknown\",\n stage: readFirstString(metadata.stage, metadata.beliefStage),\n status: node.status || \"active\",\n subtype: node.subtype || \"\",\n synthesizedFromCount: readArrayLength(metadata.synthesizedFrom),\n tenantId: node.tenantId || \"\",\n title: node.title || \"\",\n updatedAt: node.updatedAt || Date.now(),\n verificationStatus: node.verificationStatus || \"unverified\",\n workspaceId: node.workspaceId || \"\",\n };\n}\n\n/**\n * Build the full Neo4j property set for an edge.\n * Used by both single sync and batch sync to ensure parity.\n */\nfunction buildEdgeProperties(edge: Neo4jEdgeForSync): Record<string, unknown> {\n return {\n convexId: edge._id,\n weight: edge.weight || 1,\n confidence: edge.confidence || 0,\n context: edge.context || \"\",\n derivationType: edge.derivationType || \"\",\n createdAt: edge.createdAt,\n createdBy: edge.createdBy || \"\",\n edgeType: edge.edgeType,\n fromLayer: edge.fromLayer || \"\",\n toLayer: edge.toLayer || \"\",\n projectId: edge.projectId || \"\",\n tenantId: edge.tenantId || \"\",\n workspaceId: edge.workspaceId || \"\",\n // Classification fields (Logic Machine)\n reasoningMethod: edge.reasoningMethod || \"\",\n logicalRole: edge.logicalRole || \"\",\n temporalClass: edge.temporalClass || \"\",\n };\n}\n\n// =============================================================================\n// NODE SYNC (DIRECT DRIVER)\n// =============================================================================\n\nexport const syncNodeToNeo4j = internalAction({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n operation: v.union(v.literal(\"upsert\"), v.literal(\"delete\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n console.warn(\n \"[Neo4j Sync] Missing Neo4j credentials, skipping sync. Set via `npx convex env set`\"\n );\n return buildSyncFailure(\"node\", args.operation, \"Missing credentials\", {\n skippedReason: \"credentials_missing\",\n });\n }\n\n const node = await ctx.runQuery(graphSyncHelpers.getNodeForSync, {\n nodeId: args.nodeId,\n });\n\n if (!node) {\n if (args.operation === \"upsert\") {\n return buildSyncFailure(\"node\", args.operation, \"Node not found\", {\n skippedReason: \"source_node_missing\",\n });\n }\n console.log(\"[Neo4j Sync] Node not found for delete, skipping\");\n return buildSyncSuccess(\"node\", args.operation, {\n skipped: true,\n skippedReason: \"source_node_missing\",\n });\n }\n\n const label = NODE_TYPE_TO_LABEL[node.nodeType] || \"Node\";\n\n try {\n if (args.operation === \"delete\") {\n await deleteNode(node.globalId);\n console.log(`[Neo4j Sync] Deleted node ${node.globalId}`);\n } else {\n const props = buildNodeProperties(node as Neo4jNodeForSync);\n\n // Include embedding vector if available (for Neo4j vector indexes)\n const embedding = await ctx.runQuery(\n graphSyncHelpers.getEmbeddingForSync,\n { nodeId: args.nodeId }\n );\n if (embedding) {\n props.embedding = embedding;\n }\n\n await upsertNode(label, node.globalId, props);\n console.log(\n `[Neo4j Sync] Upserted node ${node.globalId} as ${label}` +\n ` with projectId=${node.projectId}` +\n (embedding ? ` (with ${embedding.length}-dim embedding)` : \"\")\n );\n }\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType: nodeSyncEventType(args.operation),\n entityId: args.nodeId,\n entityType: node.nodeType,\n status: \"success\",\n });\n\n return buildSyncSuccess(\"node\", args.operation);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : \"Unknown error\";\n console.error(\"[Neo4j Sync] Node sync error:\", errorMsg);\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType:\n args.operation === \"delete\" ? \"node_deleted\" : \"node_updated\",\n entityId: args.nodeId,\n entityType: node.nodeType,\n status: \"failed\",\n error: errorMsg,\n });\n\n await ctx.runMutation(graphSyncHelpers.queueForRetry, {\n entityType: \"node\",\n entityId: args.nodeId,\n operation: args.operation,\n error: errorMsg,\n });\n\n return buildSyncFailure(\"node\", args.operation, errorMsg);\n }\n },\n});\n\n// =============================================================================\n// EDGE SYNC (DIRECT DRIVER)\n// =============================================================================\n\nexport const syncEdgeToNeo4j = internalAction({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n operation: v.union(v.literal(\"upsert\"), v.literal(\"delete\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n console.warn(\n \"[Neo4j Sync] Missing Neo4j credentials, skipping sync. Set via `npx convex env set`\"\n );\n return buildSyncFailure(\"edge\", args.operation, \"Missing credentials\", {\n skippedReason: \"credentials_missing\",\n });\n }\n\n const edge = await ctx.runQuery(graphSyncHelpers.getEdgeForSync, {\n edgeId: args.edgeId,\n });\n\n if (!edge) {\n if (args.operation === \"upsert\") {\n return buildSyncFailure(\"edge\", args.operation, \"Edge not found\", {\n skippedReason: \"source_edge_missing\",\n });\n }\n console.log(\"[Neo4j Sync] Edge not found for delete, skipping\");\n return buildSyncSuccess(\"edge\", args.operation, {\n skipped: true,\n skippedReason: \"source_edge_missing\",\n });\n }\n\n const edgeForSync = edge as Neo4jEdgeForSync;\n const endpointFailure = readNeo4jEndpointFailure(\n edgeForSync,\n args.operation\n );\n if (endpointFailure) {\n return endpointFailure;\n }\n\n try {\n await applyEdgeOperation(edgeForSync, args.operation, args.edgeId);\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType: edgeSyncEventType(args.operation),\n entityId: args.edgeId,\n entityType: edge.edgeType,\n status: \"success\",\n });\n\n return buildSyncSuccess(\"edge\", args.operation);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : \"Unknown error\";\n console.error(\"[Neo4j Sync] Edge sync error:\", errorMsg);\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType: edgeSyncEventType(args.operation),\n entityId: args.edgeId,\n entityType: edge.edgeType,\n status: \"failed\",\n error: errorMsg,\n });\n\n await ctx.runMutation(graphSyncHelpers.queueForRetry, {\n entityType: \"edge\",\n entityId: args.edgeId,\n operation: args.operation,\n error: errorMsg,\n });\n\n return buildSyncFailure(\"edge\", args.operation, errorMsg);\n }\n },\n});\n\n// =============================================================================\n// BATCH SYNC (for backfill)\n// =============================================================================\n\nexport const syncAllNodesToNeo4j = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 100;\n\n const result = await ctx.runQuery(graphSyncHelpers.getNodeBatchForSync, {\n limit: batchSize,\n cursor: args.cursor,\n });\n\n if (result.nodes.length === 0) {\n return { synced: 0, failed: 0, hasMore: false };\n }\n\n const nodesByLabel = new Map<\n string,\n Array<{ globalId: string; properties: Record<string, unknown> }>\n >();\n\n for (const node of result.nodes) {\n const label = NODE_TYPE_TO_LABEL[node.nodeType] || \"Node\";\n if (!nodesByLabel.has(label)) {\n nodesByLabel.set(label, []);\n }\n nodesByLabel.get(label)?.push({\n globalId: node.globalId,\n properties: buildNodeProperties(node as Neo4jNodeForSync),\n });\n }\n\n let synced = 0;\n let failed = 0;\n\n for (const [label, nodes] of nodesByLabel) {\n try {\n await batchUpsertNodes(label, nodes);\n synced += nodes.length;\n console.log(\n `[Neo4j Sync] Batch upserted ${nodes.length} ${label} nodes`\n );\n } catch (error) {\n console.error(`[Neo4j Sync] Batch upsert failed for ${label}:`, error);\n failed += nodes.length;\n }\n }\n\n return {\n synced,\n failed,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n\nexport const syncAllEdgesToNeo4j = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 100;\n\n const result = await ctx.runQuery(graphSyncHelpers.getEdgeBatchForSync, {\n limit: batchSize,\n cursor: args.cursor,\n });\n\n if (result.edges.length === 0) {\n return { synced: 0, failed: 0, hasMore: false };\n }\n\n const edgesToSync: Array<{\n relType: string;\n globalId: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties: Record<string, unknown>;\n }> = [];\n\n for (const edge of result.edges) {\n if (!(edge.fromGlobalId && edge.toGlobalId)) {\n console.warn(\n `[Neo4j Sync] Skipping edge ${edge.globalId} - missing globalIds`\n );\n continue;\n }\n const relType =\n EDGE_TYPE_TO_REL[edge.edgeType] || edge.edgeType.toUpperCase();\n edgesToSync.push({\n relType,\n globalId: edge.globalId,\n fromGlobalId: edge.fromGlobalId,\n toGlobalId: edge.toGlobalId,\n properties: buildEdgeProperties(edge as Neo4jEdgeForSync),\n });\n }\n\n let synced = 0;\n let failed = 0;\n\n try {\n await batchUpsertEdges(edgesToSync);\n synced = edgesToSync.length;\n console.log(`[Neo4j Sync] Batch upserted ${synced} edges`);\n } catch (error) {\n console.error(\"[Neo4j Sync] Batch edge upsert failed:\", error);\n failed = edgesToSync.length;\n }\n\n return {\n synced,\n failed,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n\n// =============================================================================\n// FULL BACKFILL\n// =============================================================================\n\nexport const backfillAllToNeo4j = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 100;\n let totalNodes = 0;\n let totalEdges = 0;\n let totalFailed = 0;\n\n console.log(\"[Neo4j Sync] Starting full backfill...\");\n\n // Sync all nodes first\n let nodeCursor: string | undefined;\n do {\n const result = await ctx.runAction(graphSyncActions.syncAllNodesToNeo4j, {\n batchSize,\n cursor: nodeCursor,\n });\n totalNodes += result.synced;\n totalFailed += result.failed;\n nodeCursor = result.hasMore\n ? (result.nextCursor ?? undefined)\n : undefined;\n console.log(\n `[Neo4j Sync] Nodes progress: ${totalNodes} synced, ${totalFailed} failed`\n );\n } while (nodeCursor);\n\n console.log(`[Neo4j Sync] Finished nodes: ${totalNodes} synced`);\n\n // Then sync all edges\n let edgeCursor: string | undefined;\n do {\n const result = await ctx.runAction(graphSyncActions.syncAllEdgesToNeo4j, {\n batchSize,\n cursor: edgeCursor,\n });\n totalEdges += result.synced;\n totalFailed += result.failed;\n edgeCursor = result.hasMore\n ? (result.nextCursor ?? undefined)\n : undefined;\n console.log(\n `[Neo4j Sync] Edges progress: ${totalEdges} synced, ${totalFailed} failed`\n );\n } while (edgeCursor);\n\n console.log(\n `[Neo4j Sync] Backfill complete: ${totalNodes} nodes, ${totalEdges} edges, ${totalFailed} failed`\n );\n\n return {\n totalNodes,\n totalEdges,\n totalFailed,\n };\n },\n});\n\n// =============================================================================\n// RETRY QUEUE PROCESSING\n// =============================================================================\n\nexport const processRetryQueue = internalAction({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 10;\n\n const pendingItems = await ctx.runQuery(\n graphSyncHelpers.getPendingRetries,\n { limit }\n );\n\n if (pendingItems.length === 0) {\n return { processed: 0, succeeded: 0, failed: 0 };\n }\n\n let succeeded = 0;\n let failed = 0;\n\n for (const item of pendingItems) {\n await ctx.runMutation(graphSyncHelpers.updateQueueStatus, {\n queueId: item._id,\n status: \"in_progress\",\n });\n\n let result: Pick<SyncResult, \"success\" | \"error\">;\n\n if (item.entityType === \"node\") {\n result = await ctx.runAction(graphSyncActions.syncNodeToNeo4j, {\n nodeId: item.entityId as Id<\"epistemicNodes\">,\n operation: item.operation,\n });\n } else {\n const resolved = await ctx.runQuery(\n graphSyncHelpers.resolveEdgeRetryTarget,\n {\n entityId: item.entityId,\n }\n );\n\n if (\n resolved.mode === \"convex_id\" ||\n resolved.mode === \"global_id_in_convex\"\n ) {\n result = await ctx.runAction(graphSyncActions.syncEdgeToNeo4j, {\n edgeId: resolved.edgeId as Id<\"epistemicEdges\">,\n operation: item.operation,\n });\n } else {\n // Edge exists in Neo4j but not in Convex projection; retry mirror by globalId.\n result = await ctx.runAction(\n graphSyncEdgeApi.retryProjectionByGlobalId,\n {\n globalId: resolved.edgeGlobalId,\n }\n );\n }\n }\n\n if (result.success) {\n await ctx.runMutation(graphSyncHelpers.updateQueueStatus, {\n queueId: item._id,\n status: \"succeeded\",\n });\n succeeded++;\n } else {\n const updated = await ctx.runMutation(\n graphSyncHelpers.incrementAttempts,\n {\n queueId: item._id,\n error: result.error || \"Unknown error\",\n }\n );\n if (updated.failed) {\n failed++;\n }\n }\n }\n\n return { processed: pendingItems.length, succeeded, failed };\n },\n});\n\n// =============================================================================\n// EMBEDDING SYNC (triggered after embedding generation)\n// =============================================================================\n\n/**\n * Sync an embedding vector to an existing Neo4j node.\n * Called after saveEpistemicNodeEmbedding completes, ensuring the\n * embedding reaches Neo4j even if the initial node sync ran before\n * the embedding was generated.\n */\nexport const syncEmbeddingToNeo4j = internalAction({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return buildSyncFailure(\"embedding\", \"sync\", \"Missing credentials\", {\n skippedReason: \"credentials_missing\",\n });\n }\n\n const node = await ctx.runQuery(graphSyncHelpers.getNodeForSync, {\n nodeId: args.nodeId,\n });\n if (!node?.globalId) {\n return buildSyncFailure(\"embedding\", \"sync\", \"Node not found\", {\n skippedReason: \"source_node_missing\",\n });\n }\n\n const embedding = await ctx.runQuery(graphSyncHelpers.getEmbeddingForSync, {\n nodeId: args.nodeId,\n });\n if (!embedding) {\n return buildSyncFailure(\"embedding\", \"sync\", \"Embedding not found\", {\n skippedReason: \"embedding_missing\",\n });\n }\n\n try {\n await runWriteTransaction(\n \"MATCH (n {globalId: $globalId}) SET n.embedding = $embedding\",\n { globalId: node.globalId, embedding }\n );\n console.log(\n `[Neo4j Sync] Synced ${embedding.length}-dim embedding for node ${node.globalId}`\n );\n return buildSyncSuccess(\"embedding\", \"sync\");\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : \"Unknown error\";\n console.error(\"[Neo4j Sync] Embedding sync error:\", errorMsg);\n return buildSyncFailure(\"embedding\", \"sync\", errorMsg);\n }\n },\n});\n\n// =============================================================================\n// HEALTH CHECK\n// =============================================================================\n\nexport const checkNeo4jHealth = internalAction({\n args: {},\n returns: permissiveReturn,\n handler: async () => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return {\n healthy: false,\n error: \"Neo4j not configured\",\n uri: connInfo.uri,\n };\n }\n\n const health = await healthCheck();\n return {\n ...health,\n uri: connInfo.uri,\n };\n },\n});\n\n// =============================================================================\n// RE-SYNC ALL NODES (to update with new properties like projectId, pillar)\n// =============================================================================\n\n/**\n * Re-sync all epistemic nodes to Neo4j with updated properties (paginated)\n * Use after adding new fields to the sync\n */\nexport const resyncAllNodes = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n nodeType: v.optional(v.string()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 50;\n\n // Get nodes with cursor\n const result = await ctx.runQuery(graphSyncHelpers.getAllNodesForResync, {\n nodeType: args.nodeType,\n limit: batchSize,\n cursor: args.cursor,\n });\n\n let synced = 0;\n let failed = 0;\n\n for (const node of result.nodes) {\n try {\n const syncResult = await ctx.runAction(\n graphSyncActions.syncNodeToNeo4j,\n {\n nodeId: node._id,\n operation: \"upsert\",\n }\n );\n if (syncResult.success) {\n synced++;\n } else {\n failed++;\n }\n } catch (error) {\n console.error(`[Neo4j Resync] Failed to sync node ${node._id}:`, error);\n failed++;\n }\n }\n\n return {\n synced,\n failed,\n total: result.nodes.length,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n\n/**\n * Re-sync all epistemic edges to Neo4j with updated properties (paginated)\n * Use after adding new fields to the sync (e.g., classification fields)\n */\nexport const resyncAllEdges = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 50;\n\n // Get edges with cursor\n const result = await ctx.runQuery(graphSyncHelpers.getAllEdgesForResync, {\n limit: batchSize,\n cursor: args.cursor,\n });\n\n let synced = 0;\n let failed = 0;\n\n for (const edge of result.edges) {\n try {\n const syncResult = await ctx.runAction(\n graphSyncActions.syncEdgeToNeo4j,\n {\n edgeId: edge._id,\n operation: \"upsert\",\n }\n );\n if (syncResult.success) {\n synced++;\n } else {\n failed++;\n }\n } catch (error) {\n console.error(`[Neo4j Resync] Failed to sync edge ${edge._id}:`, error);\n failed++;\n }\n }\n\n return {\n synced,\n failed,\n total: result.edges.length,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jSyncHelpers subpath and Convex helper module; rename needs export-map/generated API migration.\n/**\n * Neo4j Sync Helpers - Queries and Mutations\n *\n * These are Convex queries and mutations that support the Neo4j sync process.\n * Separated from neo4jSync.ts because that file uses \"use node\" directive\n * which only supports actions.\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { internalMutation, internalQuery } from \"./convex\";\n\ninterface SyncEdgeDocLike extends Record<string, unknown> {\n _id: Id<\"epistemicEdges\">;\n edgeType: string;\n fromNodeId?: Id<\"epistemicNodes\"> | null;\n globalId?: string;\n sourceGlobalId?: string;\n targetGlobalId?: string;\n toNodeId?: Id<\"epistemicNodes\"> | null;\n}\n\nfunction logRetryTargetFallback(context: string, error: unknown): void {\n const env = (\n globalThis as {\n process?: { env?: Record<string, string | undefined> };\n }\n ).process?.env;\n if (env?.LUCERN_GRAPH_SYNC_DEBUG !== \"1\") {\n return;\n }\n\n console.debug(\"[graph-sync][neo4jSyncHelpers]\", context, error);\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction isSyncEdgeDoc(value: unknown): value is SyncEdgeDocLike {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"edgeType\" in value &&\n typeof (value as { edgeType?: unknown }).edgeType === \"string\" &&\n \"fromNodeId\" in value\n );\n}\n\n// =============================================================================\n// SYNC LOG (for debugging)\n// =============================================================================\n\nexport const logSyncEvent = internalMutation({\n args: {\n eventType: v.union(\n v.literal(\"node_created\"),\n v.literal(\"node_updated\"),\n v.literal(\"node_deleted\"),\n v.literal(\"edge_created\"),\n v.literal(\"edge_deleted\")\n ),\n entityId: v.string(),\n entityType: v.string(),\n status: v.union(\n v.literal(\"pending\"),\n v.literal(\"success\"),\n v.literal(\"failed\")\n ),\n error: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: (_ctx, args) => {\n console.log(\n `[Neo4j Sync] ${args.eventType} ${args.entityType}:${args.entityId} - ${args.status}`,\n args.error || \"\"\n );\n },\n});\n\n// =============================================================================\n// NODE/EDGE QUERIES\n// =============================================================================\n\nexport const getNodeForSync = internalQuery({\n args: { nodeId: v.id(\"epistemicNodes\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => await ctx.db.get(args.nodeId),\n});\n\n/**\n * Get the embedding vector for a node, if it exists.\n * Used by neo4jSync to include embeddings in node upserts.\n */\nexport const getEmbeddingForSync = internalQuery({\n args: { nodeId: v.id(\"epistemicNodes\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const record = await ctx.db\n .query(\"epistemicNodeEmbeddings\")\n .withIndex(\"by_nodeId\", (q) => q.eq(\"nodeId\", args.nodeId))\n .first();\n return record?.embedding ?? null;\n },\n});\n\n/**\n * Get all nodes for re-sync with optional type filter (paginated)\n */\nexport const getAllNodesForResync = internalQuery({\n args: {\n nodeType: v.optional(v.string()),\n limit: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 100;\n\n const paginationOpts = {\n numItems: limit,\n cursor: args.cursor ?? null,\n };\n\n const nodeType = args.nodeType;\n if (nodeType) {\n const result = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", nodeType))\n .paginate(paginationOpts);\n return {\n nodes: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n }\n\n const result = await ctx.db\n .query(\"epistemicNodes\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n return {\n nodes: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\nexport const getEdgeForSync = internalQuery({\n args: { edgeId: v.id(\"epistemicEdges\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n return null;\n }\n\n const fromNode = edge.fromNodeId ? await ctx.db.get(edge.fromNodeId) : null;\n const toNode = edge.toNodeId ? await ctx.db.get(edge.toNodeId) : null;\n\n return {\n ...edge,\n // Cross-graph edges may not have toNodeId/fromNodeId in Convex mirror.\n // Fall back to denormalized global IDs when node lookup is unavailable.\n fromGlobalId: readString(fromNode?.globalId) ?? edge.sourceGlobalId,\n toGlobalId: readString(toNode?.globalId) ?? edge.targetGlobalId,\n };\n },\n});\n\n/**\n * Get all edges for re-sync (paginated)\n */\nexport const getAllEdgesForResync = internalQuery({\n args: {\n limit: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 100;\n\n const paginationOpts = {\n numItems: limit,\n cursor: args.cursor ?? null,\n };\n\n const result = await ctx.db\n .query(\"epistemicEdges\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n return {\n edges: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\nexport const getNodeBatchForSync = internalQuery({\n args: {\n limit: v.number(),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const paginationOpts = {\n numItems: args.limit,\n cursor: args.cursor ?? null,\n };\n\n const result = await ctx.db\n .query(\"epistemicNodes\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n return {\n nodes: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\nexport const getEdgeBatchForSync = internalQuery({\n args: {\n limit: v.number(),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const paginationOpts = {\n numItems: args.limit,\n cursor: args.cursor ?? null,\n };\n\n const result = await ctx.db\n .query(\"epistemicEdges\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n // Enrich edges with globalIds\n const enrichedEdges = await Promise.all(\n result.page.map(async (edge: SyncEdgeDocLike) => {\n const fromNode = edge.fromNodeId\n ? await ctx.db.get(edge.fromNodeId)\n : null;\n const toNode = edge.toNodeId ? await ctx.db.get(edge.toNodeId) : null;\n return {\n ...edge,\n fromGlobalId: readString(fromNode?.globalId) ?? edge.sourceGlobalId,\n toGlobalId: readString(toNode?.globalId) ?? edge.targetGlobalId,\n };\n })\n );\n\n return {\n edges: enrichedEdges,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\n/**\n * Resolve retry queue entityId for edge operations.\n *\n * Queue entries can contain either:\n * - Convex edge document IDs (legacy sync retries)\n * - Edge globalIds (projection retries from Neo4j-first writes)\n */\nexport const resolveEdgeRetryTarget = internalQuery({\n args: {\n entityId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // First, attempt direct Convex edge ID lookup.\n try {\n const directEdgeId = ctx.db.normalizeId(\"epistemicEdges\", args.entityId);\n if (directEdgeId) {\n const byId = await ctx.db.get(directEdgeId);\n if (isSyncEdgeDoc(byId)) {\n const edgeGlobalId = readString(byId.globalId) ?? args.entityId;\n return {\n mode: \"convex_id\" as const,\n edgeId: byId._id,\n edgeGlobalId,\n };\n }\n }\n } catch (error) {\n logRetryTargetFallback(\n `direct edge lookup fallback for entityId=${args.entityId}`,\n error\n );\n }\n\n // Then attempt lookup by edge globalId.\n const byGlobalId = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.entityId))\n .first();\n\n if (byGlobalId) {\n return {\n mode: \"global_id_in_convex\" as const,\n edgeId: byGlobalId._id,\n edgeGlobalId: byGlobalId.globalId,\n };\n }\n\n // Neo4j-only edge (projection may have failed and never mirrored).\n return {\n mode: \"global_id_only\" as const,\n edgeGlobalId: args.entityId,\n };\n },\n});\n\n// =============================================================================\n// RETRY QUEUE MUTATIONS\n// =============================================================================\n\nexport const queueForRetry = internalMutation({\n args: {\n entityType: v.union(v.literal(\"node\"), v.literal(\"edge\")),\n entityId: v.string(),\n operation: v.union(v.literal(\"upsert\"), v.literal(\"delete\")),\n error: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const existing = await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_entity\", (q) =>\n q.eq(\"entityType\", args.entityType).eq(\"entityId\", args.entityId)\n )\n .first();\n\n if (existing) {\n const attempts = existing.attempts ?? 0;\n const maxAttempts = existing.maxAttempts ?? 5;\n await ctx.db.patch(existing._id, {\n attempts: attempts + 1,\n maxAttempts,\n lastAttemptAt: now,\n lastError: args.error,\n status: attempts + 1 >= maxAttempts ? \"failed\" : \"pending\",\n updatedAt: now,\n });\n return { queued: true, updated: true, queueId: existing._id };\n }\n\n const queueId = await ctx.db.insert(\"neo4jSyncQueue\", {\n entityType: args.entityType,\n entityId: args.entityId,\n operation: args.operation,\n attempts: 1,\n maxAttempts: 5,\n lastAttemptAt: now,\n lastError: args.error,\n status: \"pending\",\n createdAt: now,\n updatedAt: now,\n });\n\n return { queued: true, updated: false, queueId };\n },\n});\n\nexport const getPendingRetries = internalQuery({\n args: {\n limit: v.number(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) =>\n await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q) => q.eq(\"status\", \"pending\"))\n .take(args.limit),\n});\n\nexport const updateQueueStatus = internalMutation({\n args: {\n queueId: v.id(\"neo4jSyncQueue\"),\n status: v.union(\n v.literal(\"pending\"),\n v.literal(\"in_progress\"),\n v.literal(\"failed\"),\n v.literal(\"succeeded\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n await ctx.db.patch(args.queueId, {\n status: args.status,\n updatedAt: Date.now(),\n });\n },\n});\n\nexport const incrementAttempts = internalMutation({\n args: {\n queueId: v.id(\"neo4jSyncQueue\"),\n error: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const item = await ctx.db.get(args.queueId);\n if (!item) {\n return { failed: false };\n }\n\n const attempts = item.attempts ?? 0;\n const maxAttempts = item.maxAttempts ?? 5;\n const newAttempts = attempts + 1;\n const isFailed = newAttempts >= maxAttempts;\n\n await ctx.db.patch(args.queueId, {\n attempts: newAttempts,\n maxAttempts,\n lastAttemptAt: Date.now(),\n lastError: args.error,\n status: isFailed ? \"failed\" : \"pending\",\n updatedAt: Date.now(),\n });\n\n return { failed: isFailed };\n },\n});\n\n// =============================================================================\n// HEALTH CHECK QUERY\n// =============================================================================\n\nexport const checkSyncHealth = internalQuery({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx) => {\n const now = Date.now();\n const oneHourAgo = now - 60 * 60 * 1000;\n\n const recentNodes = await ctx.db\n .query(\"epistemicNodes\")\n .filter((q) => q.gte(q.field(\"updatedAt\"), oneHourAgo))\n .collect();\n\n const recentEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.gte(q.field(\"createdAt\"), oneHourAgo))\n .collect();\n\n const pendingRetries = await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q) => q.eq(\"status\", \"pending\"))\n .collect();\n\n const failedRetries = await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q) => q.eq(\"status\", \"failed\"))\n .collect();\n\n let healthStatus: \"healthy\" | \"degraded\" | \"unhealthy\" = \"healthy\";\n if (failedRetries.length > 10) {\n healthStatus = \"unhealthy\";\n } else if (pendingRetries.length > 50) {\n healthStatus = \"degraded\";\n }\n\n return {\n recentNodesUpdated: recentNodes.length,\n recentEdgesUpdated: recentEdges.length,\n pendingRetries: pendingRetries.length,\n failedRetries: failedRetries.length,\n healthStatus,\n checkedAt: now,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/neo4jDriver.ts","../src/neo4jEdgeAPI.ts","../src/convex.ts","../src/neo4jQueries.ts","../src/neo4jQueriesCore.ts","../src/neo4jQueriesAdvanced.ts","../src/neo4jQueryRoute.ts","../src/neo4jSync.ts","../src/neo4jSyncHelpers.ts"],"names":["v","deleteEdge","permissiveReturn","readString","result"],"mappings":"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","file":"index.js","sourcesContent":["// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jDriver subpath; rename needs an export-map migration.\n/**\n * neo4jDriver module implementation.\n */\n\n\"use node\";\n/**\n * Direct Neo4j Driver for Convex\n *\n * Uses the \"use node\" directive to enable Node.js runtime, allowing\n * direct use of the neo4j-driver package instead of HTTP proxies.\n *\n * Environment Variables (set per deployment via `npx convex env set`):\n * - NEO4J_URI: neo4j+s://xxx.databases.neo4j.io\n * - NEO4J_USER: neo4j\n * - NEO4J_PASSWORD: your-password\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\nimport neo4j, { type Driver } from \"neo4j-driver\";\n\n// =============================================================================\n// VALID LABELS AND RELATIONSHIP TYPES (Security: Prevent Cypher Injection)\n// =============================================================================\n\nconst VALID_NODE_LABELS = new Set([\n // Ontological\n \"ValueChain\",\n \"Function\",\n \"FinSector\",\n \"Company\",\n \"Person\",\n \"Investor\",\n // Epistemic\n \"Theme\",\n \"Belief\",\n \"Question\",\n \"Evidence\",\n \"Source\",\n \"Decision\",\n \"Sprint\",\n \"Claim\",\n \"Synthesis\",\n \"Answer\",\n]);\n\nconst VALID_RELATIONSHIP_TYPES = new Set([\n // Cross-layer edges\n \"EXTRACTED_FROM\",\n \"ANSWERS\",\n \"RESPONDS_TO\",\n \"INFORMS\",\n \"QUALIFIES\",\n \"TESTS\",\n \"EXPLORES\",\n \"BASED_ON\",\n \"RELATES_TO_THESIS\",\n \"BELONGS_TO\",\n \"PLAYS_THEME\",\n // Same-layer edges\n \"SUPERSEDES\",\n \"SAME_AS\",\n \"DEPENDS_ON\",\n \"REINFORCES\",\n \"PARENT_OF\",\n \"CHILD_OF\",\n \"FALSIFIED_BY\",\n \"EXCLUSIVE_WITH\",\n \"COLLAPSES_IF\",\n \"CASCADE_FROM\",\n \"STRENGTHENED_BY\",\n \"WEAKENED_BY\",\n \"ALTERNATIVE_TO\",\n \"SUBSUMES\",\n \"VALIDATED_BY\",\n \"REQUIRED_FOR\",\n \"PREREQUISITE_FOR\",\n \"PARALLEL_TO\",\n \"CORROBORATES\",\n \"EXTENDS\",\n \"SAME_SOURCE_AS\",\n \"SAME_THEME_AS\",\n // Ontological\n \"EVALUATES\",\n \"PERSPECTIVE_ON\",\n \"WORKS_AT\",\n \"PARTICIPATES_IN\",\n \"PERFORMS\",\n \"FUNCTION_IN\",\n \"IMPACTS\",\n \"INVESTED_IN\",\n \"RAISED_FROM\",\n \"BASED_ON_BELIEF\",\n \"BASED_ON_QUESTION\",\n \"BLOCKED_BY_CONTRADICTION\",\n \"INFORMED_BY_THEME\",\n]);\n\nexport function validateLabel(label: string): void {\n if (!VALID_NODE_LABELS.has(label)) {\n throw new Error(\n `[Neo4j Security] Invalid node label: ${label}. Must be one of: ${Array.from(VALID_NODE_LABELS).join(\", \")}`\n );\n }\n}\n\nexport function validateRelType(relType: string): void {\n if (!VALID_RELATIONSHIP_TYPES.has(relType)) {\n throw new Error(\n `[Neo4j Security] Invalid relationship type: ${relType}. Must be one of: ${Array.from(VALID_RELATIONSHIP_TYPES).join(\", \")}`\n );\n }\n}\n\n// =============================================================================\n// DRIVER SINGLETON\n// =============================================================================\n\nlet driver: Driver | null = null;\n\nfunction getDriver(): Driver {\n if (!driver) {\n const uri = process.env.NEO4J_URI;\n const user = process.env.NEO4J_USER;\n const password = process.env.NEO4J_PASSWORD;\n\n if (!(uri && user && password)) {\n throw new Error(\n \"[Neo4j Driver] Missing credentials. Set NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD via `npx convex env set`\"\n );\n }\n\n driver = neo4j.driver(uri, neo4j.auth.basic(user, password), {\n // Connection pool settings\n maxConnectionPoolSize: 50,\n connectionAcquisitionTimeout: 30_000,\n // Logging\n logging: {\n level: \"warn\",\n logger: (level, message) => console.log(`[Neo4j ${level}] ${message}`),\n },\n });\n }\n return driver;\n}\n\n// =============================================================================\n// QUERY CONFIGURATION\n// =============================================================================\n\n/**\n * Default query timeout in milliseconds.\n * Prevents expensive graph traversals from hanging indefinitely.\n */\nexport const DEFAULT_QUERY_TIMEOUT_MS = 30_000; // 30 seconds\n\n/**\n * Timeout for complex graph queries (cascade simulation, lineage traversal)\n */\nexport const COMPLEX_QUERY_TIMEOUT_MS = 60_000; // 60 seconds\n\n// =============================================================================\n// QUERY EXECUTION\n// =============================================================================\n\n/**\n * Convert JavaScript values to Neo4j-compatible types\n * Neo4j requires explicit integers, not floats\n */\nfunction toNeo4jParams(\n params: Record<string, unknown>\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === \"number\" && Number.isInteger(value)) {\n // Convert JavaScript integers to Neo4j integers\n result[key] = neo4j.int(value);\n } else if (Array.isArray(value)) {\n result[key] = value.map((v) =>\n typeof v === \"number\" && Number.isInteger(v) ? neo4j.int(v) : v\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Execute a Cypher query and return results as typed objects\n *\n * @param query - Cypher query string\n * @param params - Query parameters\n * @param timeoutMs - Query timeout in milliseconds (default: 30s)\n */\nexport async function runCypher<T = Record<string, unknown>>(\n query: string,\n params: Record<string, unknown> = {},\n timeoutMs: number = DEFAULT_QUERY_TIMEOUT_MS\n): Promise<T[]> {\n const neo4jDriver = getDriver();\n const session = neo4jDriver.session();\n\n try {\n const neo4jParams = toNeo4jParams(params);\n const result = await session.run(query, neo4jParams, {\n timeout: neo4j.int(timeoutMs),\n });\n return result.records.map((record) => {\n const obj: Record<string, unknown> = {};\n for (const key of record.keys) {\n const field = String(key);\n obj[field] = convertNeo4jValue(record.get(field));\n }\n return obj as T;\n });\n } finally {\n await session.close();\n }\n}\n\n/**\n * Execute a write transaction (for mutations)\n *\n * @param query - Cypher query string\n * @param params - Query parameters\n * @param timeoutMs - Transaction timeout in milliseconds (default: 30s)\n */\nexport async function runWriteTransaction<T = Record<string, unknown>>(\n query: string,\n params: Record<string, unknown> = {},\n timeoutMs: number = DEFAULT_QUERY_TIMEOUT_MS\n): Promise<T[]> {\n const neo4jDriver = getDriver();\n const session = neo4jDriver.session();\n\n try {\n const neo4jParams = toNeo4jParams(params);\n const result = await session.executeWrite(\n async (tx) => await tx.run(query, neo4jParams),\n { timeout: timeoutMs }\n );\n return result.records.map((record) => {\n const obj: Record<string, unknown> = {};\n for (const key of record.keys) {\n const field = String(key);\n obj[field] = convertNeo4jValue(record.get(field));\n }\n return obj as T;\n });\n } finally {\n await session.close();\n }\n}\n\n/**\n * Execute multiple queries in a single transaction\n *\n * @param queries - Array of queries with parameters\n * @param timeoutMs - Transaction timeout in milliseconds (default: 60s for batch)\n */\nexport async function runBatchTransaction(\n queries: Array<{ query: string; params: Record<string, unknown> }>,\n timeoutMs: number = COMPLEX_QUERY_TIMEOUT_MS\n): Promise<void> {\n const neo4jDriver = getDriver();\n const session = neo4jDriver.session();\n\n try {\n await session.executeWrite(\n async (tx) => {\n for (const { query, params } of queries) {\n await tx.run(query, params);\n }\n },\n { timeout: timeoutMs }\n );\n } finally {\n await session.close();\n }\n}\n\n// =============================================================================\n// NODE OPERATIONS\n// =============================================================================\n\n/**\n * Upsert a node by globalId\n */\nexport async function upsertNode(\n label: string,\n globalId: string,\n properties: Record<string, unknown>\n): Promise<void> {\n validateLabel(label); // Security: prevent Cypher injection\n await runWriteTransaction(\n `\n MERGE (n:${label} {globalId: $globalId})\n SET n += $properties\n SET n.updatedAt = timestamp()\n `,\n { globalId, properties }\n );\n}\n\n/**\n * Delete a node by globalId\n */\nexport async function deleteNode(globalId: string): Promise<void> {\n await runWriteTransaction(\n `\n MATCH (n {globalId: $globalId})\n DETACH DELETE n\n `,\n { globalId }\n );\n}\n\n/**\n * Batch upsert nodes\n */\nexport async function batchUpsertNodes(\n label: string,\n nodes: Array<{ globalId: string; properties: Record<string, unknown> }>\n): Promise<void> {\n if (nodes.length === 0) {\n return;\n }\n\n validateLabel(label); // Security: prevent Cypher injection\n await runWriteTransaction(\n `\n UNWIND $nodes as node\n MERGE (n:${label} {globalId: node.globalId})\n SET n += node.properties\n SET n.updatedAt = timestamp()\n `,\n { nodes }\n );\n}\n\n// =============================================================================\n// EDGE OPERATIONS\n// =============================================================================\n\n/**\n * Upsert an edge by globalId\n */\nexport async function upsertEdge(\n relType: string,\n globalId: string,\n fromGlobalId: string,\n toGlobalId: string,\n properties: Record<string, unknown> = {}\n): Promise<void> {\n validateRelType(relType); // Security: prevent Cypher injection\n await runWriteTransaction(\n `\n MATCH (from {globalId: $fromGlobalId})\n MATCH (to {globalId: $toGlobalId})\n MERGE (from)-[r:${relType} {globalId: $globalId}]->(to)\n SET r += $properties\n SET r.updatedAt = timestamp()\n `,\n { globalId, fromGlobalId, toGlobalId, properties }\n );\n}\n\n/**\n * Delete an edge by globalId\n */\nexport async function deleteEdge(globalId: string): Promise<void> {\n await runWriteTransaction(\n `\n MATCH ()-[r {globalId: $globalId}]->()\n DELETE r\n `,\n { globalId }\n );\n}\n\n/**\n * Batch upsert edges\n */\nexport async function batchUpsertEdges(\n edges: Array<{\n relType: string;\n globalId: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties?: Record<string, unknown>;\n }>\n): Promise<void> {\n if (edges.length === 0) {\n return;\n }\n\n // Group by relationship type for efficient batching\n const byType = new Map<string, typeof edges>();\n for (const edge of edges) {\n const existing = byType.get(edge.relType) || [];\n existing.push(edge);\n byType.set(edge.relType, existing);\n }\n\n const queries: Array<{ query: string; params: Record<string, unknown> }> = [];\n for (const [relType, typeEdges] of byType) {\n queries.push({\n query: `\n UNWIND $edges as edge\n MATCH (from {globalId: edge.fromGlobalId})\n MATCH (to {globalId: edge.toGlobalId})\n MERGE (from)-[r:${relType} {globalId: edge.globalId}]->(to)\n SET r += edge.properties\n SET r.updatedAt = timestamp()\n `,\n params: {\n edges: typeEdges.map((e) => ({\n globalId: e.globalId,\n fromGlobalId: e.fromGlobalId,\n toGlobalId: e.toGlobalId,\n properties: e.properties || {},\n })),\n },\n });\n }\n\n await runBatchTransaction(queries);\n}\n\n// =============================================================================\n// HEALTH CHECK\n// =============================================================================\n\n/**\n * Check if Neo4j connection is healthy\n */\nexport async function healthCheck(): Promise<{\n healthy: boolean;\n nodeCount?: number;\n error?: string;\n}> {\n try {\n const result = await runCypher<{ count: number }>(\n \"MATCH (n) RETURN count(n) as count LIMIT 1\"\n );\n return {\n healthy: true,\n nodeCount: result[0]?.count || 0,\n };\n } catch (error) {\n return {\n healthy: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n}\n\n/**\n * Get connection info (for debugging)\n */\nexport function getConnectionInfo(): {\n uri: string | undefined;\n user: string | undefined;\n configured: boolean;\n} {\n return {\n uri: process.env.NEO4J_URI,\n user: process.env.NEO4J_USER,\n configured: Boolean(\n process.env.NEO4J_URI &&\n process.env.NEO4J_USER &&\n process.env.NEO4J_PASSWORD\n ),\n };\n}\n\n// =============================================================================\n// VALUE CONVERSION\n// =============================================================================\n\n/**\n * Convert Neo4j types to plain JavaScript\n */\nfunction convertNeo4jValue(value: unknown): unknown {\n if (value === null || value === undefined) {\n return null;\n }\n\n // Handle Neo4j Integer\n if (neo4j.isInt(value)) {\n return neo4j.integer.toNumber(value);\n }\n\n // Handle Neo4j Date/Time types\n if (neo4j.isDate(value) || neo4j.isDateTime(value) || neo4j.isTime(value)) {\n return value.toString();\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return value.map(convertNeo4jValue);\n }\n\n // Handle Node objects\n if (value && typeof value === \"object\" && \"properties\" in value) {\n const nodeObj = value as { properties: Record<string, unknown> };\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(nodeObj.properties)) {\n result[k] = convertNeo4jValue(v);\n }\n return result;\n }\n\n // Handle plain objects\n if (typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = convertNeo4jValue(v);\n }\n return result;\n }\n\n return value;\n}\n\n// =============================================================================\n// CLEANUP\n// =============================================================================\n\n/**\n * Close the driver connection (for graceful shutdown)\n */\nexport async function closeDriver(): Promise<void> {\n if (driver) {\n await driver.close();\n driver = null;\n }\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jEdgeAPI subpath; rename needs an export-map migration.\n\"use node\";\n\n/**\n * Neo4j edge API host actions.\n *\n * The reasoning kernel schedules these actions through the tenant Convex host\n * when optional graph mirroring is installed. Neo4j remains authoritative for\n * traversal topology; Convex mirrors selected edge types for realtime reads.\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { getNeo4jRelType } from \"@lucern/graph-primitives/graphTypes\";\nimport { v } from \"convex/values\";\nimport { internal, internalAction } from \"./convex\";\nimport {\n getConnectionInfo,\n runCypher,\n runWriteTransaction,\n} from \"./neo4jDriver\";\n\nexport const DUAL_WRITE_EDGE_TYPES = [\n \"supports\",\n \"informs\",\n \"tests\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"supersedes\",\n \"extracted_from\",\n \"responds_to\",\n \"based_on\",\n \"answers\",\n \"belongs_to\",\n \"relates_to_thesis\",\n \"corroborates\",\n \"extends\",\n \"same_source_as\",\n \"same_theme_as\",\n \"plays_theme\",\n \"impacts\",\n \"evaluates\",\n \"mentioned_in\",\n \"perspective_on\",\n] as const;\n\nexport type DualWriteEdgeType = (typeof DUAL_WRITE_EDGE_TYPES)[number];\nconst LOWER_EDGE_TYPE_REGEX = /^[a-z0-9_]+$/u;\nconst UPPER_EDGE_TYPE_REGEX = /^[A-Z0-9_]+$/u;\n\ninterface EdgeActionCtx {\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\n\ninterface CreateEdgeInput {\n confidence?: number;\n context?: string;\n createdBy: string;\n derivationType?: string;\n edgeType: string;\n fromGlobalId: string;\n fromLayer?: string;\n fromNodeType?: string;\n globalId: string;\n logicalRole?: string;\n metadata?: unknown;\n reasoningMethod?: string;\n temporalClass?: string;\n tenantId?: string;\n toGlobalId: string;\n toLayer?: string;\n toNodeType?: string;\n topicId?: string;\n validFrom?: number;\n validUntil?: number;\n weight?: number;\n workspaceId?: string;\n}\n\ninterface MirrorEdgeInput {\n confidence?: number;\n context?: string;\n createdBy: string;\n derivationType?: string;\n edgeType: string;\n fromGlobalId: string;\n fromLayer?: string;\n fromNodeType?: string;\n globalId: string;\n logicalRole?: string;\n reasoningMethod?: string;\n temporalClass?: string;\n toGlobalId: string;\n toLayer?: string;\n toNodeType?: string;\n topicId?: string;\n validFrom?: number;\n validUntil?: number;\n weight?: number;\n}\n\nexport function needsDualWrite(edgeType: string): boolean {\n return DUAL_WRITE_EDGE_TYPES.includes(edgeType as DualWriteEdgeType);\n}\n\nfunction normalizeEdgeType(edgeType: string): string {\n const normalized = edgeType.trim().toLowerCase();\n if (!LOWER_EDGE_TYPE_REGEX.test(normalized)) {\n throw new Error(`[Neo4j Edge API] Invalid edge type: ${edgeType}`);\n }\n return normalized;\n}\n\nfunction resolveRelationshipType(edgeType: string): string {\n const relType = getNeo4jRelType(edgeType);\n if (!UPPER_EDGE_TYPE_REGEX.test(relType)) {\n throw new Error(`[Neo4j Edge API] Invalid relationship type: ${relType}`);\n }\n return relType;\n}\n\nfunction readStringProperty(\n source: Record<string, unknown> | undefined,\n key: string\n): string | undefined {\n const value = source?.[key];\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction readNumberProperty(\n source: Record<string, unknown> | undefined,\n key: string\n): number | undefined {\n const value = source?.[key];\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction metadataSummary(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n if (!metadata) {\n return;\n }\n\n return Object.entries(metadata)\n .map(([key, value]) => `${key}=${String(value)}`)\n .slice(0, 8)\n .join(\" | \");\n}\n\nfunction readMetadata(metadata: unknown): Record<string, unknown> | undefined {\n return metadata && typeof metadata === \"object\" && !Array.isArray(metadata)\n ? (metadata as Record<string, unknown>)\n : undefined;\n}\n\nfunction neo4jEdgeProperties(\n args: CreateEdgeInput,\n edgeType: string,\n metadata: Record<string, unknown> | undefined,\n now: number\n): Record<string, unknown> {\n return {\n globalId: args.globalId,\n edgeType,\n weight: args.weight ?? 1,\n confidence:\n args.confidence ?? readNumberProperty(metadata, \"confidence\") ?? 1,\n context: args.context ?? metadataSummary(metadata) ?? \"\",\n derivationType: args.derivationType ?? \"\",\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n topicId: args.topicId ?? readStringProperty(metadata, \"topicId\") ?? \"\",\n tenantId: args.tenantId ?? readStringProperty(metadata, \"tenantId\") ?? \"\",\n workspaceId:\n args.workspaceId ?? readStringProperty(metadata, \"workspaceId\") ?? \"\",\n fromLayer: args.fromLayer ?? \"\",\n toLayer: args.toLayer ?? \"\",\n fromNodeType: args.fromNodeType ?? \"\",\n toNodeType: args.toNodeType ?? \"\",\n reasoningMethod: args.reasoningMethod ?? \"\",\n logicalRole: args.logicalRole ?? \"\",\n temporalClass: args.temporalClass ?? \"structural\",\n validFrom: args.validFrom ?? now,\n validUntil: args.validUntil ?? null,\n };\n}\n\nfunction mirrorInputFromCreateArgs(\n args: CreateEdgeInput,\n edgeType: string\n): MirrorEdgeInput {\n return {\n globalId: args.globalId,\n fromGlobalId: args.fromGlobalId,\n toGlobalId: args.toGlobalId,\n edgeType,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n createdBy: args.createdBy,\n topicId: args.topicId,\n fromLayer: args.fromLayer,\n toLayer: args.toLayer,\n fromNodeType: args.fromNodeType,\n toNodeType: args.toNodeType,\n reasoningMethod: args.reasoningMethod,\n logicalRole: args.logicalRole,\n temporalClass: args.temporalClass,\n validFrom: args.validFrom,\n validUntil: args.validUntil,\n };\n}\n\nasync function mirrorEdgeToConvex(\n ctx: EdgeActionCtx,\n args: MirrorEdgeInput\n): Promise<void> {\n await ctx.runMutation(internal.epistemicEdges.mirrorEdgeToConvex, args);\n}\n\nasync function queueEdgeRetry(\n ctx: EdgeActionCtx,\n args: { globalId: string; operation: \"upsert\" | \"delete\"; error: string }\n): Promise<void> {\n await ctx.runMutation(internal.neo4jSyncHelpers.queueForRetry, {\n entityType: \"edge\",\n entityId: args.globalId,\n operation: args.operation,\n error: args.error,\n });\n}\n\nasync function mirrorCreatedEdgeIfNeeded(\n ctx: EdgeActionCtx,\n args: CreateEdgeInput,\n edgeType: string\n): Promise<void> {\n if (!needsDualWrite(edgeType)) {\n return;\n }\n try {\n await mirrorEdgeToConvex(ctx, mirrorInputFromCreateArgs(args, edgeType));\n } catch (error) {\n await queueEdgeRetry(ctx, {\n globalId: args.globalId,\n operation: \"upsert\",\n error: `Convex mirror failed: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n });\n }\n}\n\nasync function handleMissingNeo4jEndpoints(\n ctx: EdgeActionCtx,\n args: CreateEdgeInput,\n edgeType: string\n) {\n await queueEdgeRetry(ctx, {\n globalId: args.globalId,\n operation: \"upsert\",\n error: `Source or target node not yet synced to Neo4j (from: ${args.fromGlobalId}, to: ${args.toGlobalId})`,\n });\n\n if (needsDualWrite(edgeType)) {\n try {\n await mirrorEdgeToConvex(ctx, mirrorInputFromCreateArgs(args, edgeType));\n } catch {\n // Retry was already queued for the Neo4j write; avoid hiding it.\n }\n }\n\n return {\n success: false,\n globalId: args.globalId,\n edgeType,\n queuedForRetry: true,\n reason: \"nodes_not_synced\",\n };\n}\n\nexport const createEdge = internalAction({\n args: {\n globalId: v.string(),\n fromGlobalId: v.string(),\n toGlobalId: v.string(),\n edgeType: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n metadata: v.optional(v.any()),\n createdBy: v.string(),\n topicId: v.optional(v.string()),\n tenantId: v.optional(v.string()),\n workspaceId: v.optional(v.string()),\n fromLayer: v.optional(v.string()),\n toLayer: v.optional(v.string()),\n fromNodeType: v.optional(v.string()),\n toNodeType: v.optional(v.string()),\n reasoningMethod: v.optional(v.string()),\n logicalRole: v.optional(v.string()),\n temporalClass: v.optional(v.string()),\n validFrom: v.optional(v.number()),\n validUntil: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n throw new Error(\n \"[Neo4j Edge API] Neo4j not configured. Set NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD\"\n );\n }\n\n const edgeType = normalizeEdgeType(args.edgeType);\n const relType = resolveRelationshipType(edgeType);\n const now = Date.now();\n const metadata = readMetadata(args.metadata);\n const properties = neo4jEdgeProperties(args, edgeType, metadata, now);\n\n const result = await runWriteTransaction<{ globalId: string }>(\n `\n MATCH (from {globalId: $fromGlobalId})\n MATCH (to {globalId: $toGlobalId})\n MERGE (from)-[r:${relType} {globalId: $globalId}]->(to)\n SET r += $properties\n RETURN r.globalId as globalId\n `,\n {\n fromGlobalId: args.fromGlobalId,\n toGlobalId: args.toGlobalId,\n globalId: args.globalId,\n properties,\n }\n );\n\n if (result.length === 0) {\n return handleMissingNeo4jEndpoints(ctx, args, edgeType);\n }\n\n await mirrorCreatedEdgeIfNeeded(ctx, args, edgeType);\n\n return {\n success: true,\n globalId: args.globalId,\n edgeType,\n dualWritten: needsDualWrite(edgeType),\n };\n },\n});\n\nexport const deleteEdge = internalAction({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n throw new Error(\"[Neo4j Edge API] Neo4j not configured\");\n }\n\n await runWriteTransaction(\n `\n MATCH ()-[r {globalId: $globalId}]->()\n DELETE r\n `,\n { globalId: args.globalId }\n );\n\n try {\n await ctx.runMutation(internal.epistemicEdges.deleteEdgeFromConvex, {\n globalId: args.globalId,\n });\n } catch {\n // The mirror may not exist for non-dual-write edge types.\n }\n\n return { success: true };\n },\n});\n\nexport const updateEdge = internalAction({\n args: {\n globalId: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n throw new Error(\"[Neo4j Edge API] Neo4j not configured\");\n }\n\n const updates: Record<string, unknown> = { updatedAt: Date.now() };\n if (args.weight !== undefined) {\n updates.weight = args.weight;\n }\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.context !== undefined) {\n updates.context = args.context;\n }\n if (args.derivationType !== undefined) {\n updates.derivationType = args.derivationType;\n }\n\n const result = await runWriteTransaction<{\n updated: boolean;\n edgeType: string;\n }>(\n `\n MATCH ()-[r {globalId: $globalId}]->()\n SET r += $updates\n RETURN true as updated, r.edgeType as edgeType\n `,\n { globalId: args.globalId, updates }\n );\n\n if (result.length === 0) {\n return { success: false, error: \"Edge not found\" };\n }\n\n const edgeType = result[0]?.edgeType;\n if (edgeType && needsDualWrite(edgeType)) {\n try {\n await ctx.runMutation(internal.epistemicEdges.updateEdgeInConvex, {\n globalId: args.globalId,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n });\n } catch {\n await queueEdgeRetry(ctx, {\n globalId: args.globalId,\n operation: \"upsert\",\n error: \"Convex mirror update failed\",\n });\n }\n }\n\n return { success: true, globalId: args.globalId };\n },\n});\n\nexport const getEdge = internalAction({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return null;\n }\n\n const result = await runCypher<{\n globalId: string;\n edgeType: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties: Record<string, unknown>;\n }>(\n `\n MATCH (from)-[r {globalId: $globalId}]->(to)\n RETURN r.globalId as globalId,\n r.edgeType as edgeType,\n from.globalId as fromGlobalId,\n to.globalId as toGlobalId,\n properties(r) as properties\n LIMIT 1\n `,\n { globalId: args.globalId }\n );\n\n return result[0] ?? null;\n },\n});\n\nexport const retryProjectionByGlobalId = internalAction({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return { success: false, error: \"[Neo4j Edge API] Neo4j not configured\" };\n }\n\n const result = await runCypher<{\n edgeType: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties: Record<string, unknown>;\n }>(\n `\n MATCH (from)-[r {globalId: $globalId}]->(to)\n RETURN r.edgeType as edgeType,\n from.globalId as fromGlobalId,\n to.globalId as toGlobalId,\n properties(r) as properties\n LIMIT 1\n `,\n { globalId: args.globalId }\n );\n\n if (result.length === 0) {\n return {\n success: false,\n error: `[Neo4j Edge API] Edge not found in Neo4j: ${args.globalId}`,\n };\n }\n\n const [edge] = result;\n if (!edge) {\n return {\n success: false,\n error: `[Neo4j Edge API] Edge not found in Neo4j: ${args.globalId}`,\n };\n }\n if (!needsDualWrite(edge.edgeType)) {\n return {\n success: true,\n skipped: true,\n reason: \"edge_type_not_projected\",\n edgeType: edge.edgeType,\n };\n }\n\n const props = edge.properties || {};\n await mirrorEdgeToConvex(ctx, {\n globalId: args.globalId,\n fromGlobalId: edge.fromGlobalId,\n toGlobalId: edge.toGlobalId,\n edgeType: edge.edgeType,\n weight: readNumberProperty(props, \"weight\"),\n confidence: readNumberProperty(props, \"confidence\"),\n context: readStringProperty(props, \"context\"),\n derivationType: readStringProperty(props, \"derivationType\"),\n createdBy:\n readStringProperty(props, \"createdBy\") ?? \"neo4j_projection_retry\",\n topicId: readStringProperty(props, \"topicId\"),\n fromLayer: readStringProperty(props, \"fromLayer\"),\n toLayer: readStringProperty(props, \"toLayer\"),\n fromNodeType: readStringProperty(props, \"fromNodeType\"),\n toNodeType: readStringProperty(props, \"toNodeType\"),\n reasoningMethod: readStringProperty(props, \"reasoningMethod\"),\n logicalRole: readStringProperty(props, \"logicalRole\"),\n temporalClass: readStringProperty(props, \"temporalClass\"),\n validFrom: readNumberProperty(props, \"validFrom\"),\n validUntil: readNumberProperty(props, \"validUntil\"),\n });\n\n return { success: true, globalId: args.globalId, projected: true };\n },\n});\n","import { unsafeConvexAnyApi } from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n type ActionBuilder,\n actionGeneric,\n type GenericDataModel,\n type GenericDocument,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n type MutationBuilder,\n type QueryBuilder,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const internal = unsafeConvexAnyApi(\n \"graph-sync top-level module bundle lacks a committed Convex _generated/api surface\"\n);\n\ntype TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\ntype GraphSyncDocument<TableName extends string> = GenericDocument & {\n _creationTime: number;\n _id: GenericId<TableName>;\n};\n\ninterface GraphSyncTableInfo<\n Document extends GenericDocument,\n Indexes extends Record<string, string[]>,\n> {\n document: Document;\n fieldPaths: string;\n indexes: Indexes;\n searchIndexes: Record<string, never>;\n vectorIndexes: Record<string, never>;\n}\n\ntype EpistemicNodeDocument = GraphSyncDocument<\"epistemicNodes\"> & {\n globalId: string;\n nodeType: string;\n projectId?: string;\n updatedAt?: number;\n};\n\ntype EpistemicNodeEmbeddingDocument =\n GraphSyncDocument<\"epistemicNodeEmbeddings\"> & {\n embedding?: number[];\n nodeId: GenericId<\"epistemicNodes\">;\n };\n\ntype EpistemicEdgeDocument = GraphSyncDocument<\"epistemicEdges\"> & {\n edgeType: string;\n fromNodeId?: GenericId<\"epistemicNodes\"> | null;\n globalId?: string;\n sourceGlobalId?: string;\n targetGlobalId?: string;\n toNodeId?: GenericId<\"epistemicNodes\"> | null;\n};\n\ntype Neo4jSyncQueueDocument = GraphSyncDocument<\"neo4jSyncQueue\"> & {\n attempts?: number;\n createdAt?: number;\n entityId: string;\n entityType: \"node\" | \"edge\";\n lastAttemptAt?: number;\n lastError?: string;\n maxAttempts?: number;\n operation: \"upsert\" | \"delete\";\n status: \"pending\" | \"in_progress\" | \"failed\" | \"succeeded\";\n updatedAt?: number;\n};\n\ninterface GraphSyncDataModel extends GenericDataModel {\n epistemicEdges: GraphSyncTableInfo<\n EpistemicEdgeDocument,\n {\n by_globalId: [\"globalId\"];\n }\n >;\n epistemicNodeEmbeddings: GraphSyncTableInfo<\n EpistemicNodeEmbeddingDocument,\n {\n by_nodeId: [\"nodeId\"];\n }\n >;\n epistemicNodes: GraphSyncTableInfo<\n EpistemicNodeDocument,\n {\n by_nodeType: [\"nodeType\"];\n }\n >;\n neo4jSyncQueue: GraphSyncTableInfo<\n Neo4jSyncQueueDocument,\n {\n by_entity: [\"entityType\", \"entityId\"];\n by_status: [\"status\"];\n }\n >;\n}\n\nexport const action = actionGeneric as ActionBuilder<\n GraphSyncDataModel,\n \"public\"\n>;\nexport const internalAction = internalActionGeneric as ActionBuilder<\n GraphSyncDataModel,\n \"internal\"\n>;\nexport const internalMutation = internalMutationGeneric as MutationBuilder<\n GraphSyncDataModel,\n \"internal\"\n>;\nexport const internalQuery = internalQueryGeneric as QueryBuilder<\n GraphSyncDataModel,\n \"internal\"\n>;\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueries subpath; rename needs an export-map migration.\n// biome-ignore-all lint/performance/noBarrelFile: Public Neo4j query facade preserving current graph-sync import surface.\n/**\n * Neo4j Graph Queries\n *\n * Convex actions that execute graph queries against Neo4j.\n * These provide graph intelligence that's hard/impossible in Convex alone:\n * - Multi-hop traversals\n * - Path finding\n * - Cross-theme patterns\n * - Contradiction detection\n *\n * Architecture:\n * - Convex action calls a tenant-owned query proxy route\n * - Query proxy executes a predefined Cypher query\n * - Results return to the Convex caller\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport { action } from \"./convex\";\nimport { callNeo4jQuery, toInt, withTopicScope } from \"./neo4jQueriesCore\";\n\n// =============================================================================\n// GRAPH QUERIES\n// =============================================================================\n\n/**\n * Get the full lineage of a node (what it was derived/extracted from)\n * Uses Neo4j for efficient multi-hop traversal up to 10 levels deep\n */\nexport const getNodeLineageGraph = action({\n args: {\n globalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"nodeLineage\",\n withTopicScope(args, {\n globalId: args.globalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n console.error(\"[Neo4j] Lineage query failed:\", result.error);\n return { lineage: [], error: result.error };\n }\n\n // Extract lineage from first result\n const lineage =\n (result.data?.[0] as { lineage?: unknown[] })?.lineage || [];\n return { lineage };\n },\n});\n\n/**\n * Get nodes connected to a given node within N hops\n * Much more powerful than Convex's single-hop queries\n */\nexport const getConnectedNodesGraph = action({\n args: {\n globalId: v.string(),\n maxHops: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // Ensure numeric params are integers (Neo4j requires integers, not floats)\n const maxHops = Math.min(toInt(args.maxHops, 2), 5);\n const limit = toInt(args.limit, 50);\n\n const result = await callNeo4jQuery(\n \"connectedNodes\",\n withTopicScope(args, {\n globalId: args.globalId,\n maxHops,\n limit,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n console.error(\"[Neo4j] Connected nodes query failed:\", result.error);\n return { nodes: [], error: result.error };\n }\n\n return { nodes: result.data || [] };\n },\n});\n\n/**\n * Get all beliefs that belong to a theme\n */\nexport const getThemeBeliefsGraph = action({\n args: {\n themeGlobalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"themeBeliefs\", {\n themeGlobalId: args.themeGlobalId,\n });\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return {\n beliefs: result.data?.map((r) => (r as { belief: unknown }).belief) || [],\n };\n },\n});\n\n/**\n * Get evidence that supports a belief (through question chain OR direct link)\n */\nexport const getBeliefEvidenceGraph = action({\n args: {\n beliefGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"beliefEvidence\",\n withTopicScope(args, {\n beliefGlobalId: args.beliefGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { evidence: [], error: result.error };\n }\n\n return {\n evidence:\n result.data?.map((r) => (r as { evidence: unknown }).evidence) || [],\n };\n },\n});\n\n/**\n * Find beliefs that appear in multiple themes (cross-cutting insights)\n */\nexport const getCrossThemeBeliefs = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"crossThemeBeliefs\",\n withTopicScope(args, {\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return {\n beliefs: result.data?.map((r) => (r as { belief: unknown }).belief) || [],\n };\n },\n});\n\n/**\n * Find potential contradictions in the knowledge graph\n * Evidence that tests conflicting beliefs\n */\nexport const findPotentialContradictions = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"potentialContradictions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 10),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { contradictions: [], error: result.error };\n }\n\n return {\n contradictions:\n result.data?.map(\n (r) => (r as { contradiction: unknown }).contradiction\n ) || [],\n };\n },\n});\n\n/**\n * Get the full subgraph for a theme (all connected beliefs, questions, evidence)\n */\nexport const getThemeSubgraph = action({\n args: {\n themeGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"themeSubgraph\",\n withTopicScope(args, {\n themeGlobalId: args.themeGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { subgraph: null, error: result.error };\n }\n\n return {\n subgraph: (result.data?.[0] as { subgraph: unknown })?.subgraph || null,\n };\n },\n});\n\n/**\n * Find the path from evidence to a belief (how does this evidence support this belief?)\n */\nexport const getEvidenceToBeliefPath = action({\n args: {\n evidenceGlobalId: v.string(),\n beliefGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"evidenceToBeliefPath\",\n withTopicScope(args, {\n evidenceGlobalId: args.evidenceGlobalId,\n beliefGlobalId: args.beliefGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { path: null, error: result.error };\n }\n\n // Query returns: { pathResult: { nodes: [...], relationships: [...], length: N } }\n const pathResult = result.data?.[0] as {\n pathResult?: {\n nodes?: unknown[];\n relationships?: string[];\n length?: number;\n };\n };\n\n if (!pathResult?.pathResult) {\n return { path: null, error: \"No path found between evidence and belief\" };\n }\n\n return {\n path: {\n nodes: pathResult.pathResult.nodes || [],\n relationships: pathResult.pathResult.relationships || [],\n length: pathResult.pathResult.length || 0,\n },\n };\n },\n});\n\n/**\n * Get stats for a theme (counts of beliefs, questions, evidence)\n */\nexport const getThemeStats = action({\n args: {\n themeGlobalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"themeStats\", {\n themeGlobalId: args.themeGlobalId,\n });\n\n if (!result.success) {\n return { stats: null, error: result.error };\n }\n\n return { stats: (result.data?.[0] as { stats: unknown })?.stats || null };\n },\n});\n\n/**\n * Get candidate theme-to-valuechain mappings\n * Returns all themes and value chains for manual or AI-assisted matching\n */\nexport const getThemeValueChainCandidates = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"themeValueChainCandidates\",\n withTopicScope(args, {\n limit: toInt(args.limit, 100),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { candidates: [], error: result.error };\n }\n\n return {\n candidates:\n result.data?.map((r) => (r as { candidate: unknown }).candidate) || [],\n };\n },\n});\n\n// =============================================================================\n// RELATIONSHIP QUERIES\n// =============================================================================\n\n/**\n * Find themes that impact a specific company\n */\nexport const getThemesImpactingCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"themesImpactingCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 20),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find companies related to a theme\n */\nexport const getCompaniesByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"companiesByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find questions about a value chain\n */\nexport const getQuestionsByValueChain = action({\n args: {\n valueChainName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"questionsByValueChain\", {\n valueChainName: args.valueChainName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find questions about a theme\n */\nexport const getQuestionsByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"questionsByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find people/contacts related to a theme\n */\nexport const getPeopleByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"peopleByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find people at a specific company\n */\nexport const getPeopleByCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"peopleByCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find value chains for a theme\n */\nexport const getValueChainsByTheme = action({\n args: {\n themeName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"valueChainsByTheme\", {\n themeName: args.themeName,\n limit: toInt(args.limit, 20),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find functions in a value chain\n */\nexport const getFunctionsByValueChain = action({\n args: {\n valueChainName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"functionsByValueChain\", {\n valueChainName: args.valueChainName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find beliefs about a company\n */\nexport const getBeliefsByCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"beliefsByCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 30),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find evidence about a company\n */\nexport const getEvidenceByCompany = action({\n args: {\n companyName: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"evidenceByCompany\", {\n companyName: args.companyName,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Search all nodes by text\n */\nexport const searchAllNodes = action({\n args: {\n searchText: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"searchAllNodes\", {\n searchText: args.searchText,\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get all relationships from a node\n */\nexport const getNodeRelationships = action({\n args: {\n globalId: v.optional(v.string()),\n searchText: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\"nodeRelationships\", {\n globalId: args.globalId || \"\",\n searchText: args.searchText || \"\",\n limit: toInt(args.limit, 50),\n });\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get graph statistics (node counts by type)\n */\nexport const getGraphStats = action({\n args: {},\n returns: permissiveReturn,\n handler: async () => {\n const result = await callNeo4jQuery(\"graphStats\", {});\n\n if (!result.success) {\n return { stats: [], error: result.error };\n }\n\n return { stats: result.data || [] };\n },\n});\n\n/**\n * Flexible graph query - routes to appropriate query based on intent\n * This is the main entry point for natural language graph queries\n */\nexport const queryGraph = action({\n args: {\n queryType: v.union(\n v.literal(\"themesImpactingCompany\"),\n v.literal(\"companiesByTheme\"),\n v.literal(\"questionsByValueChain\"),\n v.literal(\"questionsByTheme\"),\n v.literal(\"peopleByTheme\"),\n v.literal(\"peopleByCompany\"),\n v.literal(\"valueChainsByTheme\"),\n v.literal(\"functionsByValueChain\"),\n v.literal(\"beliefsByCompany\"),\n v.literal(\"evidenceByCompany\"),\n v.literal(\"searchAllNodes\"),\n v.literal(\"nodeRelationships\"),\n v.literal(\"graphStats\")\n ),\n params: v.object({\n companyName: v.optional(v.string()),\n themeName: v.optional(v.string()),\n valueChainName: v.optional(v.string()),\n searchText: v.optional(v.string()),\n globalId: v.optional(v.string()),\n limit: v.optional(v.number()),\n }),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // Ensure limit is an integer (JavaScript may pass floats)\n const limit = toInt(args.params.limit, 30);\n\n // Validate required params based on query type\n const themeRequiredQueries = [\n \"questionsByTheme\",\n \"peopleByTheme\",\n \"companiesByTheme\",\n \"valueChainsByTheme\",\n ];\n const companyRequiredQueries = [\n \"themesImpactingCompany\",\n \"peopleByCompany\",\n \"beliefsByCompany\",\n \"evidenceByCompany\",\n ];\n const valueChainRequiredQueries = [\n \"questionsByValueChain\",\n \"functionsByValueChain\",\n ];\n\n if (\n themeRequiredQueries.includes(args.queryType) &&\n !args.params.themeName\n ) {\n return {\n results: [],\n error: `Query type '${args.queryType}' requires 'themeName' parameter`,\n };\n }\n if (\n companyRequiredQueries.includes(args.queryType) &&\n !args.params.companyName\n ) {\n return {\n results: [],\n error: `Query type '${args.queryType}' requires 'companyName' parameter`,\n };\n }\n if (\n valueChainRequiredQueries.includes(args.queryType) &&\n !args.params.valueChainName\n ) {\n return {\n results: [],\n error: `Query type '${args.queryType}' requires 'valueChainName' parameter`,\n };\n }\n\n const result = await callNeo4jQuery(\n args.queryType,\n withTopicScope(args, {\n ...args.params,\n limit,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\nexport * from \"./neo4jQueriesAdvanced\";\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueriesCore subpath; rename needs an export-map migration.\n/**\n * Neo4j Graph Queries - shared transport helpers.\n */\n\ntype Neo4jQueryTransportSuccess = Readonly<{\n success: true;\n data: unknown[];\n}>;\n\ntype Neo4jQueryTransportFailure = Readonly<{\n success: false;\n error: string;\n}>;\n\ntype Neo4jQueryTransportResult =\n | Neo4jQueryTransportSuccess\n | Neo4jQueryTransportFailure;\n\ninterface Neo4jProxyResponse {\n data?: unknown[];\n error?: string;\n}\n\nconst TRAILING_SLASH_REGEX = /\\/+$/u;\nconst NEO4J_QUERY_TIMEOUT_MS = 10_000;\n\nexport function toInt(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null) {\n return defaultValue;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? Math.floor(parsed) : defaultValue;\n}\n\nfunction isAllowedProxyUrl(urlString: string): boolean {\n try {\n const url = new URL(urlString);\n const isLocalhost =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\";\n if (!isLocalhost && url.protocol !== \"https:\") {\n return false;\n }\n if (url.username || url.password) {\n return false;\n }\n\n const configuredHosts = (\n process.env.LUCERN_GRAPH_SYNC_ALLOWED_PROXY_HOSTS || \"\"\n )\n .split(\",\")\n .map((host) => host.trim().toLowerCase())\n .filter(Boolean);\n if (configuredHosts.length === 0) {\n return true;\n }\n\n const hostname = url.hostname.toLowerCase();\n return configuredHosts.some((host) =>\n host.startsWith(\".\") ? hostname.endsWith(host) : hostname === host\n );\n } catch {\n console.warn(\"[Neo4j Queries] Rejected malformed proxy URL\", urlString);\n return false;\n }\n}\n\nfunction createNeo4jQueryTransportSuccess(\n data: unknown[]\n): Neo4jQueryTransportSuccess {\n return { success: true, data };\n}\n\nfunction createNeo4jQueryTransportFailure(\n error: string\n): Neo4jQueryTransportFailure {\n return { success: false, error };\n}\n\nfunction resolveProxyBaseUrl(apiBaseUrl?: string): string | null {\n const resolved =\n apiBaseUrl ||\n process.env.LUCERN_GRAPH_SYNC_QUERY_BASE_URL ||\n process.env.NEXT_PUBLIC_APP_URL;\n const normalized = resolved?.trim();\n return normalized ? normalized.replace(TRAILING_SLASH_REGEX, \"\") : null;\n}\n\nfunction buildProxyEndpoint(proxyBaseUrl: string): string {\n const endpoint = new URL(proxyBaseUrl);\n if (!endpoint.pathname.endsWith(\"/api/neo4j-query\")) {\n endpoint.pathname = `${endpoint.pathname.replace(\n TRAILING_SLASH_REGEX,\n \"\"\n )}/api/neo4j-query`;\n }\n return endpoint.toString();\n}\n\nfunction tenantContextFromParams(params: Record<string, unknown>): string {\n const explicitTenant =\n typeof params.tenantId === \"string\" ? params.tenantId.trim() : \"\";\n const scopedTopic =\n typeof params.topicId === \"string\" ? params.topicId.trim() : \"\";\n const legacyProjectScope =\n typeof params.projectId === \"string\" ? params.projectId.trim() : \"\";\n const scopedTopicId = scopedTopic || legacyProjectScope;\n const projectTenant = scopedTopicId ? `project:${scopedTopicId}` : \"\";\n const defaultTenant = process.env.LUCERN_DEFAULT_TENANT_ID?.trim() || \"\";\n return explicitTenant || projectTenant || defaultTenant;\n}\n\nfunction neo4jQueryHeaders(\n syncSecret: string,\n apiBaseUrl: string | undefined\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${syncSecret}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret && apiBaseUrl) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return headers;\n}\n\nasync function postNeo4jQuery(args: {\n apiBaseUrl?: string;\n params: Record<string, unknown>;\n proxyUrl: string;\n queryName: string;\n syncSecret: string;\n}): Promise<Neo4jQueryTransportResult> {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n NEO4J_QUERY_TIMEOUT_MS\n );\n\n try {\n const response = await fetch(buildProxyEndpoint(args.proxyUrl), {\n method: \"POST\",\n headers: neo4jQueryHeaders(args.syncSecret, args.apiBaseUrl),\n body: JSON.stringify({\n queryName: args.queryName,\n params: args.params,\n }),\n signal: controller.signal,\n });\n\n const result = (await response.json()) as Neo4jProxyResponse;\n if (!response.ok) {\n return createNeo4jQueryTransportFailure(result.error || \"Query failed\");\n }\n\n return createNeo4jQueryTransportSuccess(result.data || []);\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === \"AbortError\") {\n console.warn(\"[Neo4j Queries] Request timed out for:\", args.queryName);\n return createNeo4jQueryTransportFailure(\"Query timed out (10s)\");\n }\n throw fetchError;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n\nexport function withTopicScope<T extends Record<string, unknown>>(\n args: { topicId?: string },\n params: T\n): T & { topicId?: string } {\n return args.topicId ? { ...params, topicId: args.topicId } : params;\n}\n\nexport async function callNeo4jQuery(\n queryName: string,\n params: Record<string, unknown>,\n apiBaseUrl?: string\n): Promise<Neo4jQueryTransportResult> {\n const proxyUrl = resolveProxyBaseUrl(apiBaseUrl);\n if (!proxyUrl) {\n return createNeo4jQueryTransportFailure(\n \"Neo4j query proxy URL not configured\"\n );\n }\n\n if (!isAllowedProxyUrl(proxyUrl)) {\n console.error(\n \"[Neo4j Queries] Blocked request to disallowed URL:\",\n proxyUrl\n );\n return createNeo4jQueryTransportFailure(\"Invalid proxy URL\");\n }\n\n const syncSecret = process.env.NEO4J_SYNC_SECRET;\n\n if (!syncSecret) {\n console.error(\"[Neo4j Queries] NEO4J_SYNC_SECRET not configured\");\n return createNeo4jQueryTransportFailure(\"Neo4j sync secret not configured\");\n }\n\n try {\n const tenantId = tenantContextFromParams(params);\n if (!tenantId) {\n return createNeo4jQueryTransportFailure(\n \"Missing required tenant context (tenantId or topicId)\"\n );\n }\n const scopedParams = { ...params, tenantId };\n return await postNeo4jQuery({\n apiBaseUrl,\n params: scopedParams,\n proxyUrl,\n queryName,\n syncSecret,\n });\n } catch (error) {\n console.error(\"[Neo4j Queries] Error in callNeo4jQuery:\", queryName, error);\n return createNeo4jQueryTransportFailure(\n error instanceof Error\n ? error.message\n : \"Network error connecting to query proxy\"\n );\n }\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueriesAdvanced subpath; rename needs an export-map migration.\n/**\n * Neo4j Graph Queries - advanced query surfaces.\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport { action } from \"./convex\";\nimport { callNeo4jQuery, toInt, withTopicScope } from \"./neo4jQueriesCore\";\n\n// =============================================================================\n// CLASSIFICATION-POWERED QUERIES (Logic Machine)\n// These leverage the new epistemic classification fields\n// =============================================================================\n\n/**\n * Get high-priority questions (critical/high) that test beliefs\n */\nexport const getHighPriorityQuestions = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"highPriorityQuestions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { questions: [], error: result.error };\n }\n\n return { questions: result.data || [] };\n },\n});\n\n/**\n * Get evidence filtered by methodology (expert_interview, customer_interview, etc.)\n */\nexport const getEvidenceByMethodology = action({\n args: {\n methodology: v.string(),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"evidenceByMethodology\",\n withTopicScope(args, {\n methodology: args.methodology,\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { evidence: [], error: result.error };\n }\n\n return { evidence: result.data || [] };\n },\n});\n\n/**\n * Get proprietary/early evidence (information asymmetry advantage)\n */\nexport const getProprietaryEvidence = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"proprietaryEvidence\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { evidence: [], error: result.error };\n }\n\n return { evidence: result.data || [] };\n },\n});\n\n/**\n * Get beliefs by epistemic status (hypothesis, emerging, established, challenged, etc.)\n */\nexport const getBeliefsByEpistemicStatus = action({\n args: {\n epistemicStatus: v.string(),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"beliefsByEpistemicStatus\",\n withTopicScope(args, {\n epistemicStatus: args.epistemicStatus,\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return { beliefs: result.data || [] };\n },\n});\n\n/**\n * Get challenged beliefs that need attention\n */\nexport const getChallengedBeliefs = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"challengedBeliefs\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { beliefs: [], error: result.error };\n }\n\n return { beliefs: result.data || [] };\n },\n});\n\n/**\n * Get predictions with deadlines\n */\nexport const getPredictions = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"predictions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { predictions: [], error: result.error };\n }\n\n return { predictions: result.data || [] };\n },\n});\n\n/**\n * Get causal chains (edges with causal reasoning method)\n */\nexport const getCausalChains = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"causalChains\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { chains: [], error: result.error };\n }\n\n return { chains: result.data || [] };\n },\n});\n\n/**\n * Get necessary evidence for beliefs (logicalRole = necessary or necessary_sufficient)\n */\nexport const getNecessaryEvidence = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"necessaryEvidence\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get falsification questions (designed to disprove beliefs)\n */\nexport const getFalsificationQuestions = action({\n args: {\n limit: v.optional(v.number()),\n beliefIds: v.optional(v.array(v.string())),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"falsificationQuestions\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n beliefIds: args.beliefIds,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { questions: [], error: result.error };\n }\n\n return { questions: result.data || [] };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - COGNITIVE BIAS DETECTION\n// =============================================================================\n\n/**\n * Detect confirmation bias in beliefs.\n * Returns beliefs with high supporting:contradicting evidence ratio.\n */\nexport const getConfirmationBiasScore = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"confirmationBiasScore\",\n {\n ...(args.topicId ? { topicId: args.topicId } : {}),\n limit: toInt(args.limit, 30),\n },\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Detect anchoring bias - old beliefs that never got challenged or forked.\n */\nexport const getAnchoringBiasDetection = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"anchoringBiasDetection\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Detect source concentration risk - beliefs where all evidence traces to single source.\n */\nexport const getSourceConcentrationRisk = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"sourceConcentrationRisk\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - THESIS STRESS TESTING\n// =============================================================================\n\n/**\n * Find the minimum falsification set - smallest set of beliefs that would collapse the thesis.\n */\nexport const getMinimumFalsificationSet = action({\n args: {\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"minimumFalsificationSet\",\n withTopicScope(args, {}),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { result: null, error: result.error };\n }\n\n // Extract from result array (single result expected)\n const data = result.data;\n return { result: Array.isArray(data) && data.length > 0 ? data[0] : null };\n },\n});\n\n/**\n * Get contradiction tension map - all unresolved tensions in the graph.\n */\nexport const getContradictionTensionMap = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"contradictionTensionMap\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - EPISTEMIC HEALTH\n// =============================================================================\n\n/**\n * Get reasoning depth score - how deep is the evidence chain for each belief?\n */\nexport const getReasoningDepthScore = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"reasoningDepthScore\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get knowledge frontier - open questions on the boundary of what we know.\n */\nexport const getKnowledgeFrontier = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"knowledgeFrontier\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get belief half-life analysis - how long do beliefs survive before being superseded?\n */\nexport const getBeliefHalfLife = action({\n args: {\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"beliefHalfLife\",\n withTopicScope(args, {}),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { result: null, error: result.error };\n }\n\n // Single result expected\n const data = result.data;\n return { result: Array.isArray(data) && data.length > 0 ? data[0] : null };\n },\n});\n\n// =============================================================================\n// KILLER QUERIES - OPERATIONAL INTELLIGENCE\n// =============================================================================\n\n/**\n * Get meeting prep brief for a person at a company.\n */\nexport const getMeetingPrepBrief = action({\n args: {\n personGlobalId: v.string(),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"meetingPrepBrief\",\n withTopicScope(args, {\n personGlobalId: args.personGlobalId,\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { brief: null, error: result.error };\n }\n\n // Single result expected\n const data = result.data;\n return { brief: Array.isArray(data) && data.length > 0 ? data[0] : null };\n },\n});\n\n/**\n * Get proprietary signals - our unique insights not in public discourse.\n */\nexport const getProprietarySignals = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"proprietarySignals\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get portfolio conviction dashboard - aggregate conviction metrics across all themes.\n */\nexport const getPortfolioConviction = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"portfolioConviction\",\n withTopicScope(args, {\n limit: toInt(args.limit, 50),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { portfolio: [], error: result.error };\n }\n\n return { portfolio: result.data || [] };\n },\n});\n\n/**\n * Get stale themes - themes with no recent activity.\n */\nexport const getStaleThemes = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"staleThemes\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { themes: [], error: result.error };\n }\n\n return { themes: result.data || [] };\n },\n});\n\n/**\n * Get missing question detection - high-confidence beliefs with no testing questions.\n */\nexport const getMissingQuestionDetection = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"missingQuestionDetection\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get surprise detection - evidence that surprised us (high surprise score).\n */\nexport const getSurpriseDetection = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"surpriseDetection\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Get non-consensus beliefs - beliefs where we diverge from market consensus.\n */\nexport const getNonConsensusBeliefs = action({\n args: {\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"nonConsensusBeliefs\",\n withTopicScope(args, {\n limit: toInt(args.limit, 30),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n// =============================================================================\n// HYBRID SEMANTIC + STRUCTURAL QUERIES (Neo4j Vector Indexes)\n// =============================================================================\n\n/** Expected embedding dimensions (llama-text-embed-v2). */\nconst EMBEDDING_DIMENSIONS = 1024;\n\n/** Valid Neo4j vector index names. */\nconst VALID_INDEX_NAMES = new Set([\n \"belief_embedding_index\",\n \"question_embedding_index\",\n \"evidence_embedding_index\",\n \"theme_embedding_index\",\n \"source_embedding_index\",\n \"synthesis_embedding_index\",\n]);\n\n/** Clamp a number to [min, max]. */\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * Semantic search with graph context — find nodes by embedding similarity\n * and return their graph neighborhood for context.\n */\nexport const semanticSearch = action({\n args: {\n embedding: v.array(v.float64()),\n indexName: v.optional(v.string()),\n topK: v.optional(v.number()),\n minScore: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // SECURITY: Validate embedding dimensions\n if (args.embedding.length !== EMBEDDING_DIMENSIONS) {\n return {\n results: [],\n error: `Embedding must be ${EMBEDDING_DIMENSIONS} dimensions, got ${args.embedding.length}`,\n };\n }\n\n // SECURITY: Validate index name against known set\n const indexName = args.indexName || \"belief_embedding_index\";\n if (!VALID_INDEX_NAMES.has(indexName)) {\n return { results: [], error: `Invalid index name: ${indexName}` };\n }\n\n const result = await callNeo4jQuery(\n \"semanticSearch\",\n {\n embedding: args.embedding,\n indexName,\n topK: toInt(args.topK, 10),\n minScore: clamp(args.minScore ?? 0.5, 0, 1),\n },\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find semantic orphans — nodes structurally connected but semantically\n * distant from their graph neighbors.\n */\nexport const getSemanticOrphans = action({\n args: {\n threshold: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"semanticOrphans\",\n withTopicScope(args, {\n threshold: clamp(args.threshold ?? 0.4, 0, 1),\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find soft contradictions — beliefs about the same topic (high embedding similarity)\n * but with divergent evidence or confidence.\n */\nexport const getSoftContradictions = action({\n args: {\n similarityThreshold: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"softContradictions\",\n withTopicScope(args, {\n similarityThreshold: clamp(args.similarityThreshold ?? 0.7, 0, 1),\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Find semantic bridges — nodes semantically similar but graph-distant.\n * These represent potential missing connections.\n */\nexport const getSemanticBridges = action({\n args: {\n similarityThreshold: v.optional(v.number()),\n limit: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n const result = await callNeo4jQuery(\n \"semanticBridges\",\n withTopicScope(args, {\n similarityThreshold: clamp(args.similarityThreshold ?? 0.7, 0, 1),\n limit: toInt(args.limit, 20),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n\n/**\n * Graph-aware RAG search — semantic search that expands along graph structure\n * to pull in supporting context (evidence, themes, sources).\n */\nexport const graphAwareSearch = action({\n args: {\n embedding: v.array(v.float64()),\n indexName: v.optional(v.string()),\n topK: v.optional(v.number()),\n minScore: v.optional(v.number()),\n apiBaseUrl: v.optional(v.string()),\n topicId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, args) => {\n // SECURITY: Validate embedding dimensions\n if (args.embedding.length !== EMBEDDING_DIMENSIONS) {\n return {\n results: [],\n error: `Embedding must be ${EMBEDDING_DIMENSIONS} dimensions, got ${args.embedding.length}`,\n };\n }\n\n // SECURITY: Validate index name against known set\n const indexName = args.indexName || \"belief_embedding_index\";\n if (!VALID_INDEX_NAMES.has(indexName)) {\n return { results: [], error: `Invalid index name: ${indexName}` };\n }\n\n const result = await callNeo4jQuery(\n \"graphAwareSearch\",\n withTopicScope(args, {\n embedding: args.embedding,\n indexName,\n topK: toInt(args.topK, 10),\n minScore: clamp(args.minScore ?? 0.5, 0, 1),\n }),\n args.apiBaseUrl\n );\n\n if (!result.success) {\n return { results: [], error: result.error };\n }\n\n return { results: result.data || [] };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jQueryRoute subpath; rename needs an export-map migration.\n/**\n * Vercel/Next route helper for the Neo4j query proxy.\n *\n * The helper accepts named Cypher only. It never accepts raw Cypher from a\n * request body, which keeps tenant routes small without opening an injection\n * surface.\n */\n\n\"use node\";\n\nimport { DEFAULT_QUERY_TIMEOUT_MS, runCypher } from \"./neo4jDriver\";\n\nconst BEARER_AUTHORIZATION_PATTERN = /^Bearer\\s+(.+)$/iu;\n\nexport type Neo4jNamedQuery = Readonly<{\n cypher: string;\n timeoutMs?: number;\n}>;\n\nexport type Neo4jQueryRegistry = Readonly<Record<string, Neo4jNamedQuery>>;\n\nexport type Neo4jQueryRouteOptions = Readonly<{\n queries: Neo4jQueryRegistry;\n syncSecret?: string;\n requireTenantContext?: boolean;\n}>;\n\ntype Neo4jQueryRequestBody = Readonly<{\n queryName?: unknown;\n params?: unknown;\n}>;\n\nfunction jsonResponse(body: unknown, init?: ResponseInit): Response {\n return new Response(JSON.stringify(body), {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n ...init?.headers,\n },\n });\n}\n\nfunction readBearerSecret(request: Request): string | null {\n const authorization = request.headers.get(\"authorization\") ?? \"\";\n const match = authorization.match(BEARER_AUTHORIZATION_PATTERN);\n return match?.[1]?.trim() || null;\n}\n\nfunction validateRouteSecret(\n request: Request,\n options: Neo4jQueryRouteOptions\n): Response | null {\n const expectedSecret =\n options.syncSecret ?? process.env.NEO4J_SYNC_SECRET?.trim();\n if (!expectedSecret) {\n return jsonResponse(\n { error: \"Neo4j sync secret not configured\" },\n { status: 500 }\n );\n }\n if (readBearerSecret(request) !== expectedSecret) {\n return jsonResponse({ error: \"Unauthorized\" }, { status: 401 });\n }\n return null;\n}\n\nasync function readQueryBody(\n request: Request\n): Promise<\n { ok: true; body: Neo4jQueryRequestBody } | { ok: false; response: Response }\n> {\n try {\n return {\n ok: true,\n body: (await request.json()) as Neo4jQueryRequestBody,\n };\n } catch {\n return {\n ok: false,\n response: jsonResponse({ error: \"Invalid JSON body\" }, { status: 400 }),\n };\n }\n}\n\nfunction normalizeQueryParams(params: unknown): Record<string, unknown> {\n return params && typeof params === \"object\" && !Array.isArray(params)\n ? (params as Record<string, unknown>)\n : {};\n}\n\nfunction hasTenantContext(params: Record<string, unknown>): boolean {\n const tenantId = params.tenantId;\n const topicId = params.topicId;\n const projectId = params.projectId;\n return [tenantId, topicId, projectId].some(\n (value) => typeof value === \"string\" && value.trim().length > 0\n );\n}\n\nfunction normalizeConnectedNodesQuery(\n queryName: string,\n params: Record<string, unknown>,\n queries: Neo4jQueryRegistry\n): string {\n if (queryName !== \"connectedNodes\") {\n return queryName;\n }\n\n const hops =\n typeof params.maxHops === \"number\" && Number.isFinite(params.maxHops)\n ? Math.min(Math.max(Math.floor(params.maxHops), 1), 5)\n : 2;\n const aliased = `connectedNodes${hops}`;\n return queries[aliased] ? aliased : queryName;\n}\n\nfunction requireTenantContext(\n options: Neo4jQueryRouteOptions,\n params: Record<string, unknown>\n): Response | null {\n if ((options.requireTenantContext ?? true) && !hasTenantContext(params)) {\n return jsonResponse(\n { error: \"Missing required tenant context\" },\n { status: 400 }\n );\n }\n return null;\n}\n\nfunction resolveNamedQuery(\n queryName: string,\n params: Record<string, unknown>,\n queries: Neo4jQueryRegistry\n):\n | { ok: true; queryName: string; query: Neo4jNamedQuery }\n | { ok: false; response: Response } {\n const normalizedQueryName = normalizeConnectedNodesQuery(\n queryName,\n params,\n queries\n );\n const query = queries[normalizedQueryName];\n if (!query) {\n return {\n ok: false,\n response: jsonResponse(\n { error: `Unknown query: ${queryName}` },\n { status: 400 }\n ),\n };\n }\n return { ok: true, query, queryName: normalizedQueryName };\n}\n\nasync function executeNamedQuery(\n queryName: string,\n query: Neo4jNamedQuery,\n params: Record<string, unknown>\n): Promise<Response> {\n try {\n const data = await runCypher(\n query.cypher,\n params,\n query.timeoutMs ?? DEFAULT_QUERY_TIMEOUT_MS\n );\n return jsonResponse({ data, queryName });\n } catch (error) {\n return jsonResponse(\n {\n error: error instanceof Error ? error.message : \"Neo4j query failed\",\n queryName,\n },\n { status: 500 }\n );\n }\n}\n\nexport function createNeo4jQueryRouteHandler(\n options: Neo4jQueryRouteOptions\n): (request: Request) => Promise<Response> {\n return async function handleNeo4jQuery(request: Request): Promise<Response> {\n const authError = validateRouteSecret(request, options);\n if (authError) {\n return authError;\n }\n\n const bodyResult = await readQueryBody(request);\n if (!bodyResult.ok) {\n return bodyResult.response;\n }\n const { body } = bodyResult;\n if (typeof body.queryName !== \"string\" || body.queryName.length === 0) {\n return jsonResponse({ error: \"Missing queryName\" }, { status: 400 });\n }\n\n const params = normalizeQueryParams(body.params);\n const tenantContextError = requireTenantContext(options, params);\n if (tenantContextError) {\n return tenantContextError;\n }\n\n const namedQuery = resolveNamedQuery(\n body.queryName,\n params,\n options.queries\n );\n if (!namedQuery.ok) {\n return namedQuery.response;\n }\n return executeNamedQuery(namedQuery.queryName, namedQuery.query, params);\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jSync subpath and Convex function module; rename needs export-map/generated API migration.\n/**\n * neo4jSync module implementation.\n */\n\n\"use node\";\n\n/**\n * Neo4j Sync - Node & Edge Mirroring\n *\n * Canonical split (ADR P2-D11):\n * - Convex is canonical for node state and lifecycle.\n * - Neo4j is canonical for edge topology and graph traversal/analytics.\n *\n * This module projects node/lifecycle state from Convex -> Neo4j and provides\n * batch sync for both nodes and edges.\n * Uses DIRECT neo4j-driver (no HTTP proxy) enabled by \"use node\" directive.\n *\n * Environment Variables (set per deployment via `npx convex env set`):\n * - NEO4J_URI: neo4j+s://xxx.databases.neo4j.io\n * - NEO4J_USER: neo4j\n * - NEO4J_PASSWORD: your-password\n *\n * NOTE: This file only contains actions because \"use node\" requires it.\n * Queries and mutations are in neo4jSyncHelpers.ts\n *\n * Reconciliation SLO targets (ADR §3.2):\n * - Node sync latency (Convex -> Neo4j): P95 < 5s\n * - Edge mirror latency (Neo4j -> Convex): P95 < 2s\n * - Retry queue depth: < 100 sustained entries\n * - Drift detection: weekly full reconcile + spot-check property parity\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\n// Import from Convex-compatible type registry\nimport {\n EDGE_TYPE_TO_REL,\n NODE_TYPE_TO_LABEL,\n} from \"@lucern/graph-primitives/graphTypes\";\nimport type { FunctionReference } from \"convex/server\";\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { internal, internalAction } from \"./convex\";\n// Import direct Neo4j driver functions\nimport {\n batchUpsertEdges,\n batchUpsertNodes,\n deleteEdge,\n deleteNode,\n getConnectionInfo,\n healthCheck,\n runWriteTransaction,\n upsertEdge,\n upsertNode,\n} from \"./neo4jDriver\";\n\ntype SyncEntityType = \"node\" | \"edge\" | \"embedding\";\ntype SyncOperation = \"upsert\" | \"delete\" | \"sync\";\ntype SyncResult = Readonly<{\n error?: string;\n entityType: SyncEntityType;\n operation: SyncOperation;\n skipped?: boolean;\n skippedReason?: string;\n success: boolean;\n}>;\n\ntype Neo4jNodeForSync = Record<string, unknown> & {\n _id: Id<\"epistemicNodes\">;\n answerQuality?: string;\n canonicalText?: string;\n confidence?: number;\n createdAt?: number;\n createdBy?: string;\n domain?: string;\n epistemicLayer?: string;\n epistemicStatus?: string;\n globalId: string;\n informationAsymmetry?: string;\n metadata?: Record<string, unknown>;\n methodology?: string;\n nodeType: string;\n predictionMeta?: Record<string, unknown>;\n projectId?: string;\n questionPriority?: string;\n questionType?: string;\n reversibility?: string;\n sourceType?: string;\n status?: string;\n subtype?: string;\n tenantId?: string;\n title?: string;\n updatedAt?: number;\n verificationStatus?: string;\n workspaceId?: string;\n};\n\ntype Neo4jEdgeForSync = Record<string, unknown> & {\n _id: Id<\"epistemicEdges\">;\n confidence?: number;\n context?: string;\n createdAt?: number;\n createdBy?: string;\n derivationType?: string;\n edgeType: string;\n fromGlobalId?: string;\n fromLayer?: string;\n globalId: string;\n logicalRole?: string;\n projectId?: string;\n reasoningMethod?: string;\n temporalClass?: string;\n tenantId?: string;\n toGlobalId?: string;\n toLayer?: string;\n weight?: number;\n workspaceId?: string;\n};\n\ntype NodeSyncOperation = \"upsert\" | \"delete\";\ntype EdgeSyncOperation = \"upsert\" | \"delete\";\ntype BatchSyncResult = Readonly<{\n failed: number;\n hasMore: boolean;\n nextCursor?: string | null;\n synced: number;\n}>;\ntype NodeBatchForSyncResult = Readonly<{\n hasMore: boolean;\n nextCursor?: string | null;\n nodes: Neo4jNodeForSync[];\n}>;\ntype EdgeBatchForSyncResult = Readonly<{\n edges: Neo4jEdgeForSync[];\n hasMore: boolean;\n nextCursor?: string | null;\n}>;\ntype RetryQueueItem = Readonly<{\n _id: Id<\"neo4jSyncQueue\">;\n entityId: string;\n entityType: \"node\" | \"edge\";\n operation: NodeSyncOperation;\n}>;\ntype EdgeRetryTarget =\n | Readonly<{\n edgeGlobalId: string;\n edgeId: Id<\"epistemicEdges\">;\n mode: \"convex_id\" | \"global_id_in_convex\";\n }>\n | Readonly<{\n edgeGlobalId: string;\n mode: \"global_id_only\";\n }>;\ntype ProjectionRetryResult = Pick<SyncResult, \"error\" | \"success\">;\ntype InternalQueryReference<\n Args extends Record<string, unknown>,\n Result,\n> = FunctionReference<\"query\", \"internal\", Args, Result>;\ntype InternalMutationReference<\n Args extends Record<string, unknown>,\n Result,\n> = FunctionReference<\"mutation\", \"internal\", Args, Result>;\ntype InternalActionReference<\n Args extends Record<string, unknown>,\n Result,\n> = FunctionReference<\"action\", \"internal\", Args, Result>;\n\nconst graphSyncHelpers = internal.neo4jSyncHelpers as unknown as {\n getAllEdgesForResync: InternalQueryReference<\n { cursor?: string; limit: number },\n EdgeBatchForSyncResult\n >;\n getAllNodesForResync: InternalQueryReference<\n { cursor?: string; limit: number; nodeType?: string },\n NodeBatchForSyncResult\n >;\n getEdgeBatchForSync: InternalQueryReference<\n { cursor?: string; limit: number },\n EdgeBatchForSyncResult\n >;\n getEdgeForSync: InternalQueryReference<\n { edgeId: Id<\"epistemicEdges\"> },\n Neo4jEdgeForSync | null\n >;\n getEmbeddingForSync: InternalQueryReference<\n { nodeId: Id<\"epistemicNodes\"> },\n number[] | null\n >;\n getNodeBatchForSync: InternalQueryReference<\n { cursor?: string; limit: number },\n NodeBatchForSyncResult\n >;\n getNodeForSync: InternalQueryReference<\n { nodeId: Id<\"epistemicNodes\"> },\n Neo4jNodeForSync | null\n >;\n getPendingRetries: InternalQueryReference<\n { limit: number },\n RetryQueueItem[]\n >;\n incrementAttempts: InternalMutationReference<\n { error: string; queueId: Id<\"neo4jSyncQueue\"> },\n { failed: boolean }\n >;\n logSyncEvent: InternalMutationReference<Record<string, unknown>, null>;\n queueForRetry: InternalMutationReference<Record<string, unknown>, unknown>;\n resolveEdgeRetryTarget: InternalQueryReference<\n { entityId: string },\n EdgeRetryTarget\n >;\n updateQueueStatus: InternalMutationReference<\n { queueId: Id<\"neo4jSyncQueue\">; status: string },\n null\n >;\n};\n\nconst graphSyncActions = internal.neo4jSync as unknown as {\n syncAllEdgesToNeo4j: InternalActionReference<\n { batchSize: number; cursor?: string },\n BatchSyncResult\n >;\n syncAllNodesToNeo4j: InternalActionReference<\n { batchSize: number; cursor?: string },\n BatchSyncResult\n >;\n syncEdgeToNeo4j: InternalActionReference<\n { edgeId: Id<\"epistemicEdges\">; operation: EdgeSyncOperation },\n SyncResult\n >;\n syncNodeToNeo4j: InternalActionReference<\n { nodeId: Id<\"epistemicNodes\">; operation: NodeSyncOperation },\n SyncResult\n >;\n};\n\nconst graphSyncEdgeApi = internal.neo4jEdgeAPI as unknown as {\n retryProjectionByGlobalId: InternalActionReference<\n { globalId: string },\n ProjectionRetryResult\n >;\n};\n\nfunction buildSyncResponse(\n entityType: SyncEntityType,\n operation: SyncOperation,\n fields: {\n success: boolean;\n error?: string;\n skipped?: boolean;\n skippedReason?: string;\n }\n): SyncResult {\n return {\n entityType,\n operation,\n ...fields,\n };\n}\n\nfunction buildSyncSuccess(\n entityType: SyncEntityType,\n operation: SyncOperation,\n fields?: {\n skipped?: boolean;\n skippedReason?: string;\n }\n): SyncResult {\n return buildSyncResponse(entityType, operation, {\n success: true,\n ...fields,\n });\n}\n\nfunction buildSyncFailure(\n entityType: SyncEntityType,\n operation: SyncOperation,\n error: string,\n fields?: {\n skipped?: boolean;\n skippedReason?: string;\n }\n): SyncResult {\n return buildSyncResponse(entityType, operation, {\n success: false,\n error,\n ...fields,\n });\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction readFirstString(...values: unknown[]): string {\n for (const value of values) {\n const stringValue = readString(value);\n if (stringValue.length > 0) {\n return stringValue;\n }\n }\n return \"\";\n}\n\nfunction readArrayLength(value: unknown): number {\n return Array.isArray(value) ? value.length : 0;\n}\n\nfunction nodeSyncEventType(\n operation: NodeSyncOperation\n): \"node_deleted\" | \"node_updated\" {\n return operation === \"delete\" ? \"node_deleted\" : \"node_updated\";\n}\n\nfunction edgeSyncEventType(\n operation: EdgeSyncOperation\n): \"edge_deleted\" | \"edge_created\" {\n return operation === \"delete\" ? \"edge_deleted\" : \"edge_created\";\n}\n\nfunction readNeo4jEndpointFailure(\n edge: Neo4jEdgeForSync,\n operation: EdgeSyncOperation\n): SyncResult | null {\n if (edge.fromGlobalId && edge.toGlobalId) {\n return null;\n }\n console.warn(\n \"[Neo4j Sync] Edge missing fromGlobalId or toGlobalId, skipping\"\n );\n return buildSyncFailure(\n \"edge\",\n operation,\n \"Edge missing connected node globalIds\",\n {\n skippedReason: \"edge_endpoint_missing\",\n }\n );\n}\n\nasync function applyEdgeOperation(\n edge: Neo4jEdgeForSync,\n operation: EdgeSyncOperation,\n edgeId: Id<\"epistemicEdges\">\n): Promise<string> {\n const relType =\n EDGE_TYPE_TO_REL[edge.edgeType] || edge.edgeType.toUpperCase();\n if (operation === \"delete\") {\n await deleteEdge(edge.globalId);\n console.log(`[Neo4j Sync] Deleted edge ${edge.globalId}`);\n return relType;\n }\n\n await upsertEdge(\n relType,\n edge.globalId,\n edge.fromGlobalId ?? \"\",\n edge.toGlobalId ?? \"\",\n {\n ...buildEdgeProperties(edge),\n convexId: edgeId,\n }\n );\n console.log(`[Neo4j Sync] Upserted edge ${edge.globalId} as ${relType}`);\n return relType;\n}\n\n// =============================================================================\n// SHARED PROPERTY BUILDERS\n// =============================================================================\n\n/**\n * Build the full Neo4j property set for a node.\n * Used by both single sync and batch sync to ensure parity.\n */\nfunction buildNodeProperties(node: Neo4jNodeForSync): Record<string, unknown> {\n const metadata = readRecord(node.metadata);\n const predictionMeta = readRecord(node.predictionMeta);\n return {\n answerQuality: readString(node.answerQuality),\n canonicalText: node.canonicalText || \"\",\n confidence: node.confidence || 0,\n convexId: node._id,\n createdAt: node.createdAt,\n createdBy: node.createdBy || \"\",\n criticality: readString(metadata.criticality),\n domain: node.domain || \"\",\n epistemicLayer: node.epistemicLayer || \"\",\n epistemicStatus: readString(node.epistemicStatus),\n expectedBy: predictionMeta?.expectedBy\n ? String(predictionMeta.expectedBy)\n : \"\",\n informationAsymmetry: readString(node.informationAsymmetry),\n isPrediction: predictionMeta?.isPrediction ? \"true\" : \"false\",\n methodology: readString(node.methodology),\n nodeType: node.nodeType,\n pillar: readFirstString(metadata.pillar, metadata.topic),\n projectId: node.projectId || \"\",\n questionPriority: readString(node.questionPriority),\n questionType: readString(node.questionType),\n reversibility: readString(node.reversibility),\n sourceType: node.sourceType || \"unknown\",\n stage: readFirstString(metadata.stage, metadata.beliefStage),\n status: node.status || \"active\",\n subtype: node.subtype || \"\",\n synthesizedFromCount: readArrayLength(metadata.synthesizedFrom),\n tenantId: node.tenantId || \"\",\n title: node.title || \"\",\n updatedAt: node.updatedAt || Date.now(),\n verificationStatus: node.verificationStatus || \"unverified\",\n workspaceId: node.workspaceId || \"\",\n };\n}\n\n/**\n * Build the full Neo4j property set for an edge.\n * Used by both single sync and batch sync to ensure parity.\n */\nfunction buildEdgeProperties(edge: Neo4jEdgeForSync): Record<string, unknown> {\n return {\n convexId: edge._id,\n weight: edge.weight || 1,\n confidence: edge.confidence || 0,\n context: edge.context || \"\",\n derivationType: edge.derivationType || \"\",\n createdAt: edge.createdAt,\n createdBy: edge.createdBy || \"\",\n edgeType: edge.edgeType,\n fromLayer: edge.fromLayer || \"\",\n toLayer: edge.toLayer || \"\",\n projectId: edge.projectId || \"\",\n tenantId: edge.tenantId || \"\",\n workspaceId: edge.workspaceId || \"\",\n // Classification fields (Logic Machine)\n reasoningMethod: edge.reasoningMethod || \"\",\n logicalRole: edge.logicalRole || \"\",\n temporalClass: edge.temporalClass || \"\",\n };\n}\n\n// =============================================================================\n// NODE SYNC (DIRECT DRIVER)\n// =============================================================================\n\nexport const syncNodeToNeo4j = internalAction({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n operation: v.union(v.literal(\"upsert\"), v.literal(\"delete\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n console.warn(\n \"[Neo4j Sync] Missing Neo4j credentials, skipping sync. Set via `npx convex env set`\"\n );\n return buildSyncFailure(\"node\", args.operation, \"Missing credentials\", {\n skippedReason: \"credentials_missing\",\n });\n }\n\n const node = await ctx.runQuery(graphSyncHelpers.getNodeForSync, {\n nodeId: args.nodeId,\n });\n\n if (!node) {\n if (args.operation === \"upsert\") {\n return buildSyncFailure(\"node\", args.operation, \"Node not found\", {\n skippedReason: \"source_node_missing\",\n });\n }\n console.log(\"[Neo4j Sync] Node not found for delete, skipping\");\n return buildSyncSuccess(\"node\", args.operation, {\n skipped: true,\n skippedReason: \"source_node_missing\",\n });\n }\n\n const label = NODE_TYPE_TO_LABEL[node.nodeType] || \"Node\";\n\n try {\n if (args.operation === \"delete\") {\n await deleteNode(node.globalId);\n console.log(`[Neo4j Sync] Deleted node ${node.globalId}`);\n } else {\n const props = buildNodeProperties(node as Neo4jNodeForSync);\n\n // Include embedding vector if available (for Neo4j vector indexes)\n const embedding = await ctx.runQuery(\n graphSyncHelpers.getEmbeddingForSync,\n { nodeId: args.nodeId }\n );\n if (embedding) {\n props.embedding = embedding;\n }\n\n await upsertNode(label, node.globalId, props);\n console.log(\n `[Neo4j Sync] Upserted node ${node.globalId} as ${label}` +\n ` with projectId=${node.projectId}` +\n (embedding ? ` (with ${embedding.length}-dim embedding)` : \"\")\n );\n }\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType: nodeSyncEventType(args.operation),\n entityId: args.nodeId,\n entityType: node.nodeType,\n status: \"success\",\n });\n\n return buildSyncSuccess(\"node\", args.operation);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : \"Unknown error\";\n console.error(\"[Neo4j Sync] Node sync error:\", errorMsg);\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType:\n args.operation === \"delete\" ? \"node_deleted\" : \"node_updated\",\n entityId: args.nodeId,\n entityType: node.nodeType,\n status: \"failed\",\n error: errorMsg,\n });\n\n await ctx.runMutation(graphSyncHelpers.queueForRetry, {\n entityType: \"node\",\n entityId: args.nodeId,\n operation: args.operation,\n error: errorMsg,\n });\n\n return buildSyncFailure(\"node\", args.operation, errorMsg);\n }\n },\n});\n\n// =============================================================================\n// EDGE SYNC (DIRECT DRIVER)\n// =============================================================================\n\nexport const syncEdgeToNeo4j = internalAction({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n operation: v.union(v.literal(\"upsert\"), v.literal(\"delete\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n console.warn(\n \"[Neo4j Sync] Missing Neo4j credentials, skipping sync. Set via `npx convex env set`\"\n );\n return buildSyncFailure(\"edge\", args.operation, \"Missing credentials\", {\n skippedReason: \"credentials_missing\",\n });\n }\n\n const edge = await ctx.runQuery(graphSyncHelpers.getEdgeForSync, {\n edgeId: args.edgeId,\n });\n\n if (!edge) {\n if (args.operation === \"upsert\") {\n return buildSyncFailure(\"edge\", args.operation, \"Edge not found\", {\n skippedReason: \"source_edge_missing\",\n });\n }\n console.log(\"[Neo4j Sync] Edge not found for delete, skipping\");\n return buildSyncSuccess(\"edge\", args.operation, {\n skipped: true,\n skippedReason: \"source_edge_missing\",\n });\n }\n\n const edgeForSync = edge as Neo4jEdgeForSync;\n const endpointFailure = readNeo4jEndpointFailure(\n edgeForSync,\n args.operation\n );\n if (endpointFailure) {\n return endpointFailure;\n }\n\n try {\n await applyEdgeOperation(edgeForSync, args.operation, args.edgeId);\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType: edgeSyncEventType(args.operation),\n entityId: args.edgeId,\n entityType: edge.edgeType,\n status: \"success\",\n });\n\n return buildSyncSuccess(\"edge\", args.operation);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : \"Unknown error\";\n console.error(\"[Neo4j Sync] Edge sync error:\", errorMsg);\n\n await ctx.runMutation(graphSyncHelpers.logSyncEvent, {\n eventType: edgeSyncEventType(args.operation),\n entityId: args.edgeId,\n entityType: edge.edgeType,\n status: \"failed\",\n error: errorMsg,\n });\n\n await ctx.runMutation(graphSyncHelpers.queueForRetry, {\n entityType: \"edge\",\n entityId: args.edgeId,\n operation: args.operation,\n error: errorMsg,\n });\n\n return buildSyncFailure(\"edge\", args.operation, errorMsg);\n }\n },\n});\n\n// =============================================================================\n// BATCH SYNC (for backfill)\n// =============================================================================\n\nexport const syncAllNodesToNeo4j = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 100;\n\n const result = await ctx.runQuery(graphSyncHelpers.getNodeBatchForSync, {\n limit: batchSize,\n cursor: args.cursor,\n });\n\n if (result.nodes.length === 0) {\n return { synced: 0, failed: 0, hasMore: false };\n }\n\n const nodesByLabel = new Map<\n string,\n Array<{ globalId: string; properties: Record<string, unknown> }>\n >();\n\n for (const node of result.nodes) {\n const label = NODE_TYPE_TO_LABEL[node.nodeType] || \"Node\";\n if (!nodesByLabel.has(label)) {\n nodesByLabel.set(label, []);\n }\n nodesByLabel.get(label)?.push({\n globalId: node.globalId,\n properties: buildNodeProperties(node as Neo4jNodeForSync),\n });\n }\n\n let synced = 0;\n let failed = 0;\n\n for (const [label, nodes] of nodesByLabel) {\n try {\n await batchUpsertNodes(label, nodes);\n synced += nodes.length;\n console.log(\n `[Neo4j Sync] Batch upserted ${nodes.length} ${label} nodes`\n );\n } catch (error) {\n console.error(`[Neo4j Sync] Batch upsert failed for ${label}:`, error);\n failed += nodes.length;\n }\n }\n\n return {\n synced,\n failed,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n\nexport const syncAllEdgesToNeo4j = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 100;\n\n const result = await ctx.runQuery(graphSyncHelpers.getEdgeBatchForSync, {\n limit: batchSize,\n cursor: args.cursor,\n });\n\n if (result.edges.length === 0) {\n return { synced: 0, failed: 0, hasMore: false };\n }\n\n const edgesToSync: Array<{\n relType: string;\n globalId: string;\n fromGlobalId: string;\n toGlobalId: string;\n properties: Record<string, unknown>;\n }> = [];\n\n for (const edge of result.edges) {\n if (!(edge.fromGlobalId && edge.toGlobalId)) {\n console.warn(\n `[Neo4j Sync] Skipping edge ${edge.globalId} - missing globalIds`\n );\n continue;\n }\n const relType =\n EDGE_TYPE_TO_REL[edge.edgeType] || edge.edgeType.toUpperCase();\n edgesToSync.push({\n relType,\n globalId: edge.globalId,\n fromGlobalId: edge.fromGlobalId,\n toGlobalId: edge.toGlobalId,\n properties: buildEdgeProperties(edge as Neo4jEdgeForSync),\n });\n }\n\n let synced = 0;\n let failed = 0;\n\n try {\n await batchUpsertEdges(edgesToSync);\n synced = edgesToSync.length;\n console.log(`[Neo4j Sync] Batch upserted ${synced} edges`);\n } catch (error) {\n console.error(\"[Neo4j Sync] Batch edge upsert failed:\", error);\n failed = edgesToSync.length;\n }\n\n return {\n synced,\n failed,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n\n// =============================================================================\n// FULL BACKFILL\n// =============================================================================\n\nexport const backfillAllToNeo4j = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 100;\n let totalNodes = 0;\n let totalEdges = 0;\n let totalFailed = 0;\n\n console.log(\"[Neo4j Sync] Starting full backfill...\");\n\n // Sync all nodes first\n let nodeCursor: string | undefined;\n do {\n const result = await ctx.runAction(graphSyncActions.syncAllNodesToNeo4j, {\n batchSize,\n cursor: nodeCursor,\n });\n totalNodes += result.synced;\n totalFailed += result.failed;\n nodeCursor = result.hasMore\n ? (result.nextCursor ?? undefined)\n : undefined;\n console.log(\n `[Neo4j Sync] Nodes progress: ${totalNodes} synced, ${totalFailed} failed`\n );\n } while (nodeCursor);\n\n console.log(`[Neo4j Sync] Finished nodes: ${totalNodes} synced`);\n\n // Then sync all edges\n let edgeCursor: string | undefined;\n do {\n const result = await ctx.runAction(graphSyncActions.syncAllEdgesToNeo4j, {\n batchSize,\n cursor: edgeCursor,\n });\n totalEdges += result.synced;\n totalFailed += result.failed;\n edgeCursor = result.hasMore\n ? (result.nextCursor ?? undefined)\n : undefined;\n console.log(\n `[Neo4j Sync] Edges progress: ${totalEdges} synced, ${totalFailed} failed`\n );\n } while (edgeCursor);\n\n console.log(\n `[Neo4j Sync] Backfill complete: ${totalNodes} nodes, ${totalEdges} edges, ${totalFailed} failed`\n );\n\n return {\n totalNodes,\n totalEdges,\n totalFailed,\n };\n },\n});\n\n// =============================================================================\n// RETRY QUEUE PROCESSING\n// =============================================================================\n\nexport const processRetryQueue = internalAction({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 10;\n\n const pendingItems = await ctx.runQuery(\n graphSyncHelpers.getPendingRetries,\n { limit }\n );\n\n if (pendingItems.length === 0) {\n return { processed: 0, succeeded: 0, failed: 0 };\n }\n\n let succeeded = 0;\n let failed = 0;\n\n for (const item of pendingItems) {\n await ctx.runMutation(graphSyncHelpers.updateQueueStatus, {\n queueId: item._id,\n status: \"in_progress\",\n });\n\n let result: Pick<SyncResult, \"success\" | \"error\">;\n\n if (item.entityType === \"node\") {\n result = await ctx.runAction(graphSyncActions.syncNodeToNeo4j, {\n nodeId: item.entityId as Id<\"epistemicNodes\">,\n operation: item.operation,\n });\n } else {\n const resolved = await ctx.runQuery(\n graphSyncHelpers.resolveEdgeRetryTarget,\n {\n entityId: item.entityId,\n }\n );\n\n if (\n resolved.mode === \"convex_id\" ||\n resolved.mode === \"global_id_in_convex\"\n ) {\n result = await ctx.runAction(graphSyncActions.syncEdgeToNeo4j, {\n edgeId: resolved.edgeId as Id<\"epistemicEdges\">,\n operation: item.operation,\n });\n } else {\n // Edge exists in Neo4j but not in Convex projection; retry mirror by globalId.\n result = await ctx.runAction(\n graphSyncEdgeApi.retryProjectionByGlobalId,\n {\n globalId: resolved.edgeGlobalId,\n }\n );\n }\n }\n\n if (result.success) {\n await ctx.runMutation(graphSyncHelpers.updateQueueStatus, {\n queueId: item._id,\n status: \"succeeded\",\n });\n succeeded++;\n } else {\n const updated = await ctx.runMutation(\n graphSyncHelpers.incrementAttempts,\n {\n queueId: item._id,\n error: result.error || \"Unknown error\",\n }\n );\n if (updated.failed) {\n failed++;\n }\n }\n }\n\n return { processed: pendingItems.length, succeeded, failed };\n },\n});\n\n// =============================================================================\n// EMBEDDING SYNC (triggered after embedding generation)\n// =============================================================================\n\n/**\n * Sync an embedding vector to an existing Neo4j node.\n * Called after saveEpistemicNodeEmbedding completes, ensuring the\n * embedding reaches Neo4j even if the initial node sync ran before\n * the embedding was generated.\n */\nexport const syncEmbeddingToNeo4j = internalAction({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return buildSyncFailure(\"embedding\", \"sync\", \"Missing credentials\", {\n skippedReason: \"credentials_missing\",\n });\n }\n\n const node = await ctx.runQuery(graphSyncHelpers.getNodeForSync, {\n nodeId: args.nodeId,\n });\n if (!node?.globalId) {\n return buildSyncFailure(\"embedding\", \"sync\", \"Node not found\", {\n skippedReason: \"source_node_missing\",\n });\n }\n\n const embedding = await ctx.runQuery(graphSyncHelpers.getEmbeddingForSync, {\n nodeId: args.nodeId,\n });\n if (!embedding) {\n return buildSyncFailure(\"embedding\", \"sync\", \"Embedding not found\", {\n skippedReason: \"embedding_missing\",\n });\n }\n\n try {\n await runWriteTransaction(\n \"MATCH (n {globalId: $globalId}) SET n.embedding = $embedding\",\n { globalId: node.globalId, embedding }\n );\n console.log(\n `[Neo4j Sync] Synced ${embedding.length}-dim embedding for node ${node.globalId}`\n );\n return buildSyncSuccess(\"embedding\", \"sync\");\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : \"Unknown error\";\n console.error(\"[Neo4j Sync] Embedding sync error:\", errorMsg);\n return buildSyncFailure(\"embedding\", \"sync\", errorMsg);\n }\n },\n});\n\n// =============================================================================\n// HEALTH CHECK\n// =============================================================================\n\nexport const checkNeo4jHealth = internalAction({\n args: {},\n returns: permissiveReturn,\n handler: async () => {\n const connInfo = getConnectionInfo();\n if (!connInfo.configured) {\n return {\n healthy: false,\n error: \"Neo4j not configured\",\n uri: connInfo.uri,\n };\n }\n\n const health = await healthCheck();\n return {\n ...health,\n uri: connInfo.uri,\n };\n },\n});\n\n// =============================================================================\n// RE-SYNC ALL NODES (to update with new properties like projectId, pillar)\n// =============================================================================\n\n/**\n * Re-sync all epistemic nodes to Neo4j with updated properties (paginated)\n * Use after adding new fields to the sync\n */\nexport const resyncAllNodes = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n nodeType: v.optional(v.string()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 50;\n\n // Get nodes with cursor\n const result = await ctx.runQuery(graphSyncHelpers.getAllNodesForResync, {\n nodeType: args.nodeType,\n limit: batchSize,\n cursor: args.cursor,\n });\n\n let synced = 0;\n let failed = 0;\n\n for (const node of result.nodes) {\n try {\n const syncResult = await ctx.runAction(\n graphSyncActions.syncNodeToNeo4j,\n {\n nodeId: node._id,\n operation: \"upsert\",\n }\n );\n if (syncResult.success) {\n synced++;\n } else {\n failed++;\n }\n } catch (error) {\n console.error(`[Neo4j Resync] Failed to sync node ${node._id}:`, error);\n failed++;\n }\n }\n\n return {\n synced,\n failed,\n total: result.nodes.length,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n\n/**\n * Re-sync all epistemic edges to Neo4j with updated properties (paginated)\n * Use after adding new fields to the sync (e.g., classification fields)\n */\nexport const resyncAllEdges = internalAction({\n args: {\n batchSize: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const batchSize = args.batchSize ?? 50;\n\n // Get edges with cursor\n const result = await ctx.runQuery(graphSyncHelpers.getAllEdgesForResync, {\n limit: batchSize,\n cursor: args.cursor,\n });\n\n let synced = 0;\n let failed = 0;\n\n for (const edge of result.edges) {\n try {\n const syncResult = await ctx.runAction(\n graphSyncActions.syncEdgeToNeo4j,\n {\n edgeId: edge._id,\n operation: \"upsert\",\n }\n );\n if (syncResult.success) {\n synced++;\n } else {\n failed++;\n }\n } catch (error) {\n console.error(`[Neo4j Resync] Failed to sync edge ${edge._id}:`, error);\n failed++;\n }\n }\n\n return {\n synced,\n failed,\n total: result.edges.length,\n hasMore: result.hasMore,\n nextCursor: result.nextCursor,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Published @lucern/graph-sync/neo4jSyncHelpers subpath and Convex helper module; rename needs export-map/generated API migration.\n/**\n * Neo4j Sync Helpers - Queries and Mutations\n *\n * These are Convex queries and mutations that support the Neo4j sync process.\n * Separated from neo4jSync.ts because that file uses \"use node\" directive\n * which only supports actions.\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { internalMutation, internalQuery } from \"./convex\";\n\ninterface SyncEdgeDocLike extends Record<string, unknown> {\n _id: Id<\"epistemicEdges\">;\n edgeType: string;\n fromNodeId?: Id<\"epistemicNodes\"> | null;\n globalId?: string;\n sourceGlobalId?: string;\n targetGlobalId?: string;\n toNodeId?: Id<\"epistemicNodes\"> | null;\n}\n\nfunction logRetryTargetFallback(context: string, error: unknown): void {\n const env = (\n globalThis as {\n process?: { env?: Record<string, string | undefined> };\n }\n ).process?.env;\n if (env?.LUCERN_GRAPH_SYNC_DEBUG !== \"1\") {\n return;\n }\n\n console.debug(\"[graph-sync][neo4jSyncHelpers]\", context, error);\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction isSyncEdgeDoc(value: unknown): value is SyncEdgeDocLike {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"edgeType\" in value &&\n typeof (value as { edgeType?: unknown }).edgeType === \"string\" &&\n \"fromNodeId\" in value\n );\n}\n\n// =============================================================================\n// SYNC LOG (for debugging)\n// =============================================================================\n\nexport const logSyncEvent = internalMutation({\n args: {\n eventType: v.union(\n v.literal(\"node_created\"),\n v.literal(\"node_updated\"),\n v.literal(\"node_deleted\"),\n v.literal(\"edge_created\"),\n v.literal(\"edge_deleted\")\n ),\n entityId: v.string(),\n entityType: v.string(),\n status: v.union(\n v.literal(\"pending\"),\n v.literal(\"success\"),\n v.literal(\"failed\")\n ),\n error: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: (_ctx, args) => {\n console.log(\n `[Neo4j Sync] ${args.eventType} ${args.entityType}:${args.entityId} - ${args.status}`,\n args.error || \"\"\n );\n },\n});\n\n// =============================================================================\n// NODE/EDGE QUERIES\n// =============================================================================\n\nexport const getNodeForSync = internalQuery({\n args: { nodeId: v.id(\"epistemicNodes\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => await ctx.db.get(args.nodeId),\n});\n\n/**\n * Get the embedding vector for a node, if it exists.\n * Used by neo4jSync to include embeddings in node upserts.\n */\nexport const getEmbeddingForSync = internalQuery({\n args: { nodeId: v.id(\"epistemicNodes\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const record = await ctx.db\n .query(\"epistemicNodeEmbeddings\")\n .withIndex(\"by_nodeId\", (q) => q.eq(\"nodeId\", args.nodeId))\n .first();\n return record?.embedding ?? null;\n },\n});\n\n/**\n * Get all nodes for re-sync with optional type filter (paginated)\n */\nexport const getAllNodesForResync = internalQuery({\n args: {\n nodeType: v.optional(v.string()),\n limit: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 100;\n\n const paginationOpts = {\n numItems: limit,\n cursor: args.cursor ?? null,\n };\n\n const nodeType = args.nodeType;\n if (nodeType) {\n const result = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", nodeType))\n .paginate(paginationOpts);\n return {\n nodes: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n }\n\n const result = await ctx.db\n .query(\"epistemicNodes\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n return {\n nodes: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\nexport const getEdgeForSync = internalQuery({\n args: { edgeId: v.id(\"epistemicEdges\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n return null;\n }\n\n const fromNode = edge.fromNodeId ? await ctx.db.get(edge.fromNodeId) : null;\n const toNode = edge.toNodeId ? await ctx.db.get(edge.toNodeId) : null;\n\n return {\n ...edge,\n // Cross-graph edges may not have toNodeId/fromNodeId in Convex mirror.\n // Fall back to denormalized global IDs when node lookup is unavailable.\n fromGlobalId: readString(fromNode?.globalId) ?? edge.sourceGlobalId,\n toGlobalId: readString(toNode?.globalId) ?? edge.targetGlobalId,\n };\n },\n});\n\n/**\n * Get all edges for re-sync (paginated)\n */\nexport const getAllEdgesForResync = internalQuery({\n args: {\n limit: v.optional(v.number()),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 100;\n\n const paginationOpts = {\n numItems: limit,\n cursor: args.cursor ?? null,\n };\n\n const result = await ctx.db\n .query(\"epistemicEdges\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n return {\n edges: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\nexport const getNodeBatchForSync = internalQuery({\n args: {\n limit: v.number(),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const paginationOpts = {\n numItems: args.limit,\n cursor: args.cursor ?? null,\n };\n\n const result = await ctx.db\n .query(\"epistemicNodes\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n return {\n nodes: result.page,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\nexport const getEdgeBatchForSync = internalQuery({\n args: {\n limit: v.number(),\n cursor: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const paginationOpts = {\n numItems: args.limit,\n cursor: args.cursor ?? null,\n };\n\n const result = await ctx.db\n .query(\"epistemicEdges\")\n .order(\"asc\")\n .paginate(paginationOpts);\n\n // Enrich edges with globalIds\n const enrichedEdges = await Promise.all(\n result.page.map(async (edge: SyncEdgeDocLike) => {\n const fromNode = edge.fromNodeId\n ? await ctx.db.get(edge.fromNodeId)\n : null;\n const toNode = edge.toNodeId ? await ctx.db.get(edge.toNodeId) : null;\n return {\n ...edge,\n fromGlobalId: readString(fromNode?.globalId) ?? edge.sourceGlobalId,\n toGlobalId: readString(toNode?.globalId) ?? edge.targetGlobalId,\n };\n })\n );\n\n return {\n edges: enrichedEdges,\n hasMore: !result.isDone,\n nextCursor: result.continueCursor,\n };\n },\n});\n\n/**\n * Resolve retry queue entityId for edge operations.\n *\n * Queue entries can contain either:\n * - Convex edge document IDs (legacy sync retries)\n * - Edge globalIds (projection retries from Neo4j-first writes)\n */\nexport const resolveEdgeRetryTarget = internalQuery({\n args: {\n entityId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // First, attempt direct Convex edge ID lookup.\n try {\n const directEdgeId = ctx.db.normalizeId(\"epistemicEdges\", args.entityId);\n if (directEdgeId) {\n const byId = await ctx.db.get(directEdgeId);\n if (isSyncEdgeDoc(byId)) {\n const edgeGlobalId = readString(byId.globalId) ?? args.entityId;\n return {\n mode: \"convex_id\" as const,\n edgeId: byId._id,\n edgeGlobalId,\n };\n }\n }\n } catch (error) {\n logRetryTargetFallback(\n `direct edge lookup fallback for entityId=${args.entityId}`,\n error\n );\n }\n\n // Then attempt lookup by edge globalId.\n const byGlobalId = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.entityId))\n .first();\n\n if (byGlobalId) {\n return {\n mode: \"global_id_in_convex\" as const,\n edgeId: byGlobalId._id,\n edgeGlobalId: byGlobalId.globalId,\n };\n }\n\n // Neo4j-only edge (projection may have failed and never mirrored).\n return {\n mode: \"global_id_only\" as const,\n edgeGlobalId: args.entityId,\n };\n },\n});\n\n// =============================================================================\n// RETRY QUEUE MUTATIONS\n// =============================================================================\n\nexport const queueForRetry = internalMutation({\n args: {\n entityType: v.union(v.literal(\"node\"), v.literal(\"edge\")),\n entityId: v.string(),\n operation: v.union(v.literal(\"upsert\"), v.literal(\"delete\")),\n error: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const existing = await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_entity\", (q) =>\n q.eq(\"entityType\", args.entityType).eq(\"entityId\", args.entityId)\n )\n .first();\n\n if (existing) {\n const attempts = existing.attempts ?? 0;\n const maxAttempts = existing.maxAttempts ?? 5;\n await ctx.db.patch(existing._id, {\n attempts: attempts + 1,\n maxAttempts,\n lastAttemptAt: now,\n lastError: args.error,\n status: attempts + 1 >= maxAttempts ? \"failed\" : \"pending\",\n updatedAt: now,\n });\n return { queued: true, updated: true, queueId: existing._id };\n }\n\n const queueId = await ctx.db.insert(\"neo4jSyncQueue\", {\n entityType: args.entityType,\n entityId: args.entityId,\n operation: args.operation,\n attempts: 1,\n maxAttempts: 5,\n lastAttemptAt: now,\n lastError: args.error,\n status: \"pending\",\n createdAt: now,\n updatedAt: now,\n });\n\n return { queued: true, updated: false, queueId };\n },\n});\n\nexport const getPendingRetries = internalQuery({\n args: {\n limit: v.number(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) =>\n await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q) => q.eq(\"status\", \"pending\"))\n .take(args.limit),\n});\n\nexport const updateQueueStatus = internalMutation({\n args: {\n queueId: v.id(\"neo4jSyncQueue\"),\n status: v.union(\n v.literal(\"pending\"),\n v.literal(\"in_progress\"),\n v.literal(\"failed\"),\n v.literal(\"succeeded\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n await ctx.db.patch(args.queueId, {\n status: args.status,\n updatedAt: Date.now(),\n });\n },\n});\n\nexport const incrementAttempts = internalMutation({\n args: {\n queueId: v.id(\"neo4jSyncQueue\"),\n error: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const item = await ctx.db.get(args.queueId);\n if (!item) {\n return { failed: false };\n }\n\n const attempts = item.attempts ?? 0;\n const maxAttempts = item.maxAttempts ?? 5;\n const newAttempts = attempts + 1;\n const isFailed = newAttempts >= maxAttempts;\n\n await ctx.db.patch(args.queueId, {\n attempts: newAttempts,\n maxAttempts,\n lastAttemptAt: Date.now(),\n lastError: args.error,\n status: isFailed ? \"failed\" : \"pending\",\n updatedAt: Date.now(),\n });\n\n return { failed: isFailed };\n },\n});\n\n// =============================================================================\n// HEALTH CHECK QUERY\n// =============================================================================\n\nexport const checkSyncHealth = internalQuery({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx) => {\n const now = Date.now();\n const oneHourAgo = now - 60 * 60 * 1000;\n\n const recentNodes = await ctx.db\n .query(\"epistemicNodes\")\n .filter((q) => q.gte(q.field(\"updatedAt\"), oneHourAgo))\n .collect();\n\n const recentEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.gte(q.field(\"createdAt\"), oneHourAgo))\n .collect();\n\n const pendingRetries = await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q) => q.eq(\"status\", \"pending\"))\n .collect();\n\n const failedRetries = await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q) => q.eq(\"status\", \"failed\"))\n .collect();\n\n let healthStatus: \"healthy\" | \"degraded\" | \"unhealthy\" = \"healthy\";\n if (failedRetries.length > 10) {\n healthStatus = \"unhealthy\";\n } else if (pendingRetries.length > 50) {\n healthStatus = \"degraded\";\n }\n\n return {\n recentNodesUpdated: recentNodes.length,\n recentEdgesUpdated: recentEdges.length,\n pendingRetries: pendingRetries.length,\n failedRetries: failedRetries.length,\n healthStatus,\n checkedAt: now,\n };\n },\n});\n"]}