@lucern/mcp 0.2.0-alpha.5 → 0.2.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../server-core/src/kernelApi.ts","../../../lucern/apps/mcp-server/src/kernelApi.ts","../../../lucern/modules/graph-intelligence/src/graphIntel/edgeWeights.ts","../../../lucern/modules/graph-intelligence/src/graphIntel/algorithms/louvain.ts","../../../lucern/apps/mcp-server/src/logging.ts","../../../lucern/apps/mcp-server/src/convex-client.ts","../../contracts/src/ids.contract.ts","../../contracts/src/lens-filter.contract.ts","../../contracts/src/text-matching.contract.ts","../../contracts/src/v1/ontologies/v1.ts","../../contracts/src/v1/topics/v1.ts","../../../lucern/apps/mcp-server/src/scope.ts","../../../lucern/apps/mcp-server/src/handlers-compat/auto-branching.ts","../../../lucern/apps/mcp-server/src/handlers-compat/bootstrap.ts","../../../lucern/apps/mcp-server/src/handlers-compat/coding.ts","../../../lucern/apps/mcp-server/src/handlers-compat/coordination.ts","../../../lucern/apps/mcp-server/src/handlers-compat/policy.ts","../../../lucern/apps/mcp-server/src/handlers-compat/research.ts","../../../lucern/apps/mcp-server/src/evidence-ingestion.ts","../../server-core/src/domain/context/compile.ts","../../../lucern/apps/mcp-server/src/handlers-compat/scope-context.ts","../../../lucern/apps/mcp-server/src/handlers/sdk.ts","../../../lucern/apps/mcp-server/src/handlers/answers.ts","../../../lucern/apps/mcp-server/src/handlers/auto-branching.ts","../../../lucern/apps/mcp-server/src/handlers/beliefs.ts","../../../lucern/apps/mcp-server/src/handlers/bootstrap.ts","../../../lucern/apps/mcp-server/src/handlers/coding.ts","../../../lucern/apps/mcp-server/src/handlers/contracts.ts","../../../lucern/apps/mcp-server/src/handlers/contradictions.ts","../../../lucern/apps/mcp-server/src/handlers/coordination.ts","../../../lucern/apps/mcp-server/src/handlers/edges.ts","../../../lucern/apps/mcp-server/src/handlers/graph.ts","../../../lucern/apps/mcp-server/src/handlers/topics.ts","../../../lucern/apps/mcp-server/src/handlers/coverage.ts","../../../lucern/apps/mcp-server/src/handlers/discovery.ts","../../../lucern/apps/mcp-server/src/handlers-compat/engineering-verification.ts","../../../lucern/apps/mcp-server/src/handlers/engineering-verification.ts","../../../lucern/apps/mcp-server/src/handlers/evidence.ts","../../../lucern/apps/mcp-server/src/handlers/identity.ts","../../../lucern/apps/mcp-server/src/handlers/intelligence.ts","../../../lucern/apps/mcp-server/src/handlers/judgments.ts","../../../lucern/apps/mcp-server/src/handlers/lenses.ts","../../../lucern/apps/mcp-server/src/handlers/lineage.ts","../../../lucern/apps/mcp-server/src/handlers/observations.ts","../../../lucern/apps/mcp-server/src/handlers/ontologies.ts","../../../lucern/apps/mcp-server/src/handlers/ontology-matching.ts","../../../lucern/apps/mcp-server/src/handlers/policy.ts","../../../lucern/apps/mcp-server/src/handlers/questions.ts","../../../lucern/apps/mcp-server/src/handlers/research.ts","../../../lucern/apps/mcp-server/src/handlers-compat/research-verification.ts","../../../lucern/apps/mcp-server/src/handlers/research-verification.ts","../../../lucern/apps/mcp-server/src/handlers/scope-context.ts","../../../lucern/apps/mcp-server/src/handlers/search.ts","../../../lucern/apps/mcp-server/src/handlers/tasks.ts","../../../lucern/apps/mcp-server/src/handlers-compat/thesis-artifacts.ts","../../../lucern/apps/mcp-server/src/handlers/thesis-artifacts.ts","../../../lucern/apps/mcp-server/src/handlers/worktrees.ts","../../../lucern/apps/mcp-server/src/handlers/index.ts","../../../lucern/apps/mcp-server/src/write-policy.ts","../../../lucern/apps/mcp-server/src/credentials.ts"],"names":["kernelApi","kernelComponents","kernelInternal","api","internal","path","allowedTopicIds","topicId","topic","autoBranchingHandlers","bootstrapHandlers","codingHandlers","coordinationHandlers","engineeringVerificationHandlers","policyHandlers","researchHandlers","researchVerificationHandlers","scopeContextHandlers","defaultTopicId","thesisArtifactHandlers"],"mappings":"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","file":"runtime.js","sourcesContent":["/**\n * Server-core kernelApi — host-registered Convex API binding.\n *\n * Hosts (Stack gateway, mcp-server, identity-template, etc.) call\n * registerKernelApi({ api, components, internal }) at boot with their\n * deployment's generated bindings. Server-core consumers continue to\n * use `api.xxx`, `components.xxx`, `internal.xxx` unchanged — the\n * exports are Proxies that dispatch to the registered binding at\n * access time.\n */\n\nexport interface KernelApiBinding {\n api: any;\n components: any;\n internal: any;\n}\n\nlet binding: KernelApiBinding | null = null;\n\nexport function registerKernelApi(nextBinding: KernelApiBinding): void {\n binding = nextBinding;\n}\n\nexport function isKernelApiRegistered(): boolean {\n return binding !== null;\n}\n\nfunction getBinding(): KernelApiBinding {\n if (!binding) {\n throw new Error(\n \"Server-core kernelApi not registered. \" +\n \"Call registerKernelApi({api, components, internal}) at host boot.\"\n );\n }\n return binding;\n}\n\nfunction makeProxy(which: keyof KernelApiBinding): any {\n return new Proxy({} as any, {\n get(_target, prop) {\n return getBinding()[which][prop as string];\n },\n });\n}\n\nexport const api: any = makeProxy(\"api\");\nexport const components: any = makeProxy(\"components\");\nexport const internal: any = makeProxy(\"internal\");\n","import {\n api as kernelApi,\n components as kernelComponents,\n internal as kernelInternal,\n} from \"@lucern/reasoning-kernel/_generated/api.js\";\nimport { registerKernelApi } from \"@lucern/server-core/kernelApi\";\n\nregisterKernelApi({\n api: kernelApi,\n components: kernelComponents,\n internal: kernelInternal,\n});\n\nexport const api = kernelApi as any;\nexport const components = kernelComponents as any;\nexport const internal = kernelInternal as any;\n","/**\n * graphIntel/edgeWeights.ts — Semantic edge weight system for PageRank and algorithms.\n *\n * Each edge type carries a semantic importance weight (0-1) that determines how\n * much influence it has in the PageRank random walk and other weighted algorithms.\n *\n * The effective weight of any edge is: typeWeight * schemaWeight * edgeConfidence\n *\n * To add a new edge type: add it to EDGE_TYPE_WEIGHTS with an appropriate weight.\n * The default for unknown edge types is 0.5.\n */\n\nimport type { AnalysisEdge, AnalysisNode } from \"./types\";\n\n// =============================================================================\n// EDGE TYPE WEIGHTS — semantic importance for PageRank\n// =============================================================================\n\n/** How much epistemic weight does each edge type carry in the PageRank walk?\n * Higher = this edge is a stronger signal of importance. */\nexport const EDGE_TYPE_WEIGHTS: Record<string, number> = {\n // Core epistemic flow — highest weight\n depends_on: 1.0,\n required_for: 1.0,\n collapses_if: 1.0,\n falsified_by: 0.95,\n based_on_belief: 0.95,\n based_on_question: 0.9,\n blocked_by_contradiction: 0.95,\n\n // Evidence flow — high weight\n informs: 0.9,\n extracted_from: 0.85,\n based_on: 0.85,\n answers: 0.85,\n tests: 0.8,\n validates: 0.8,\n qualifies: 0.75,\n explores: 0.7,\n\n // Structural dependencies\n reinforces: 0.75,\n strengthened_by: 0.75,\n weakened_by: 0.7,\n cascade_from: 0.7,\n parent_of: 0.65,\n child_of: 0.65,\n supersedes: 0.6,\n same_as: 0.55,\n\n // Theme / thesis connections\n relates_to_thesis: 0.6,\n informed_by_theme: 0.6,\n belongs_to: 0.55,\n plays_theme: 0.5,\n\n // Question relationships\n prerequisite_for: 0.8,\n parallel_to: 0.4,\n\n // Ontological connections\n evaluates: 0.6,\n perspective_on: 0.5,\n works_at: 0.3,\n participates_in: 0.3,\n performs: 0.3,\n function_in: 0.3,\n impacts: 0.5,\n invested_in: 0.4,\n raised_from: 0.4,\n\n // Contradiction / tension edges\n contradicts: 0.9,\n exclusive_with: 0.85,\n alternative_to: 0.6,\n\n // Weak reasoning links — lowest weight\n analogous_to: 0.3,\n corroborates: 0.4,\n extends: 0.35,\n same_source_as: 0.2,\n same_theme_as: 0.2,\n independent_of: 0.1,\n};\n\n/** Get the semantic weight for an edge type. Unknown types default to 0.5. */\nexport function getEdgeTypeWeight(edgeType: string): number {\n return EDGE_TYPE_WEIGHTS[edgeType] ?? 0.5;\n}\n\n/** Combined edge weight = schema weight * type weight * edge confidence. */\nexport function getEffectiveWeight(edge: AnalysisEdge): number {\n const typeW = getEdgeTypeWeight(edge.edgeType);\n const schemaW = edge.weight !== undefined ? Math.abs(edge.weight) : 1.0;\n const confW = edge.edgeConfidence ?? 1.0;\n return typeW * schemaW * confW;\n}\n\n// =============================================================================\n// MATURITY-AWARE EDGE WEIGHTS\n// =============================================================================\n\n/**\n * Lifecycle gravity multipliers for belief nodes.\n * Pre-validation beliefs contribute less to graph algorithms.\n */\nconst BELIEF_STATUS_WEIGHT: Record<string, number> = {\n assumption: 0.1, // Near-zero contribution\n hypothesis: 0.2, // Minimal\n belief: 1.0, // Full active weight\n fact: 0.7, // Resolved, historically important\n};\n\n/**\n * Temporal nature discount for evidence nodes.\n * Factual evidence gets full weight. Forecasts are discounted.\n */\nconst TEMPORAL_NATURE_WEIGHT: Record<string, number> = {\n factual: 1.0, // Resolved outcome. Full weight.\n forecast: 0.7, // Prediction. Discounted.\n unknown: 1.0, // Unclassified. Treat as factual.\n};\n\n/**\n * Get the belief lifecycle weight for a node.\n * Returns 1.0 for non-belief nodes.\n */\nexport function getMaturityWeight(node: AnalysisNode): number {\n if (node.nodeType !== \"belief\") {\n return 1.0;\n }\n return (\n BELIEF_STATUS_WEIGHT[node.beliefStatus ?? \"\"] ??\n // Fallback: if status not set, use confidence as proxy\n (node.confidence !== undefined ? 0.5 + node.confidence * 0.5 : 0.1)\n );\n}\n\n/**\n * Get the temporal nature weight for a node.\n * Returns 1.0 for non-evidence nodes.\n */\nexport function getTemporalNatureWeight(node: AnalysisNode): number {\n if (node.nodeType !== \"evidence\") {\n return 1.0;\n }\n return TEMPORAL_NATURE_WEIGHT[node.temporalNature ?? \"unknown\"] ?? 1.0;\n}\n\n/**\n * Combined effective weight with maturity and temporal nature awareness.\n *\n * weight = typeWeight * schemaWeight * edgeConfidence\n * sourceNodeMaturity * sourceNodeTemporalNature\n *\n * This ensures that edges FROM immature beliefs or forecast evidence\n * carry less weight in PageRank and other graph algorithms.\n */\nexport function getEffectiveWeightWithContext(\n edge: AnalysisEdge,\n sourceNode?: AnalysisNode,\n targetNode?: AnalysisNode\n): number {\n const baseWeight = getEffectiveWeight(edge);\n\n // Apply source node discounts\n const sourceMaturity = sourceNode ? getMaturityWeight(sourceNode) : 1.0;\n const sourceTemporal = sourceNode ? getTemporalNatureWeight(sourceNode) : 1.0;\n\n // For evidence→belief edges, also check target maturity\n // Evidence informing an unscored belief is less important than\n // evidence informing a live belief\n const targetMaturity = targetNode ? getMaturityWeight(targetNode) : 1.0;\n\n // Geometric mean of source and target maturity for bidirectional awareness\n const maturityFactor = Math.sqrt(sourceMaturity * targetMaturity);\n\n return baseWeight * maturityFactor * sourceTemporal;\n}\n","/**\n * algorithms/louvain.ts — Full two-phase Louvain modularity community detection.\n *\n * Deterministic, weighted community detection that replaces the non-deterministic\n * label propagation from v1. Optimizes Newman-Girvan modularity Q by:\n *\n * Phase 1: Greedily move nodes to maximize delta-Q\n * Phase 2: Contract communities into super-nodes, rebuild graph, repeat\n *\n * Iteration continues until no further improvement is found. This detects\n * hierarchical community structure that single-level optimization misses.\n *\n * Modularity Q is computed with the full formula including negative terms\n * for non-edge pairs within the same community:\n * Q = sum_c [ sigmaIn_c / 2m - (sigmaTot_c / 2m)^2 ]\n *\n * Complexity: O(passes * iterations * |V| * avg_degree)\n */\n\nimport { getEffectiveWeight } from \"../edgeWeights\";\nimport type { AnalysisEdge } from \"../types\";\n\n// =============================================================================\n// INTERNAL GRAPH REPRESENTATION\n// =============================================================================\n\n/** Compact graph for Louvain phases. Uses numeric IDs for performance. */\ntype LouvainGraph = {\n nodeIds: number[];\n /** Adjacency: node -> (neighbor -> weight). No self-loops in adj. */\n adj: Map<number, Map<number, number>>;\n /** Weighted degree per node (includes 2 * self-loop weight). */\n degree: Map<number, number>;\n /** Total edge weight (each edge counted once). */\n totalWeight: number;\n /** Self-loop weights (from contracted communities). */\n selfLoops: Map<number, number>;\n};\n\nfunction getRequiredMapValue<K, V>(map: Map<K, V>, key: K, label: string): V {\n const value = map.get(key);\n if (value === undefined) {\n throw new Error(`Missing ${label}: ${String(key)}`);\n }\n return value;\n}\n\nfunction buildLouvainGraph(\n nodeIds: string[],\n edges: AnalysisEdge[]\n): { graph: LouvainGraph; nodeMap: Map<string, number> } {\n const nodeMap = new Map<string, number>();\n for (let i = 0; i < nodeIds.length; i++) {\n nodeMap.set(nodeIds[i], i);\n }\n\n const adj = new Map<number, Map<number, number>>();\n const degree = new Map<number, number>();\n const selfLoops = new Map<number, number>();\n let totalWeight = 0;\n\n for (const id of nodeMap.values()) {\n adj.set(id, new Map());\n degree.set(id, 0);\n selfLoops.set(id, 0);\n }\n\n const nodeSet = new Set(nodeIds);\n for (const edge of edges) {\n if (!nodeSet.has(edge.source) || !nodeSet.has(edge.target)) {\n continue;\n }\n const i = getRequiredMapValue(nodeMap, edge.source, \"node index\");\n const j = getRequiredMapValue(nodeMap, edge.target, \"node index\");\n const w = getEffectiveWeight(edge);\n totalWeight += w;\n\n if (i === j) {\n selfLoops.set(i, (selfLoops.get(i) || 0) + w);\n degree.set(i, (degree.get(i) || 0) + 2 * w);\n continue;\n }\n\n // Undirected: store both directions in adj\n const fwd = getRequiredMapValue(adj, i, \"adjacency bucket\");\n fwd.set(j, (fwd.get(j) || 0) + w);\n const rev = getRequiredMapValue(adj, j, \"adjacency bucket\");\n rev.set(i, (rev.get(i) || 0) + w);\n degree.set(i, (degree.get(i) || 0) + w);\n degree.set(j, (degree.get(j) || 0) + w);\n }\n\n return {\n graph: {\n nodeIds: [...new Set(nodeMap.values())],\n adj,\n degree,\n totalWeight: Math.max(totalWeight, 1),\n selfLoops,\n },\n nodeMap,\n };\n}\n\n// =============================================================================\n// PHASE 1: LOCAL NODE MOVES\n// =============================================================================\n\n/**\n * Greedily move nodes between communities to maximize modularity.\n * Returns community assignment and whether any node actually moved.\n */\nfunction phase1(\n graph: LouvainGraph,\n maxIterations = 15\n): { community: Map<number, number>; improved: boolean } {\n const { nodeIds, adj, degree, totalWeight, selfLoops } = graph;\n const m2 = 2 * totalWeight;\n\n // Each node starts in its own community\n const community = new Map<number, number>();\n for (const id of nodeIds) {\n community.set(id, id);\n }\n\n // Sum of degrees of all nodes in each community\n const sigmaTot = new Map<number, number>();\n for (const id of nodeIds) {\n sigmaTot.set(id, degree.get(id) || 0);\n }\n\n // Sum of internal edge weights for each community (edges both endpoints inside)\n const sigmaIn = new Map<number, number>();\n for (const id of nodeIds) {\n sigmaIn.set(id, (selfLoops.get(id) || 0) * 2);\n }\n\n let improved = false;\n\n for (let iter = 0; iter < maxIterations; iter++) {\n let moved = false;\n\n for (const id of nodeIds) {\n const currentCom = getRequiredMapValue(community, id, \"community\");\n const ki = degree.get(id) || 0;\n const neighbors = adj.get(id);\n if (!neighbors || neighbors.size === 0) {\n continue;\n }\n\n // Weight from id to each neighbor community\n const neighborComWeights = new Map<number, number>();\n for (const [neighbor, w] of neighbors) {\n const nCom = getRequiredMapValue(community, neighbor, \"community\");\n neighborComWeights.set(nCom, (neighborComWeights.get(nCom) || 0) + w);\n }\n\n // Weight from id to nodes in its own community\n const kiInCurrent = neighborComWeights.get(currentCom) || 0;\n const selfW = (selfLoops.get(id) || 0) * 2;\n\n // Remove id from its current community\n sigmaTot.set(currentCom, (sigmaTot.get(currentCom) || 0) - ki);\n sigmaIn.set(\n currentCom,\n (sigmaIn.get(currentCom) || 0) - 2 * kiInCurrent - selfW\n );\n\n // Evaluate delta-Q for moving to each neighbor community\n // delta-Q = [kiIn_new / m - sigmaTot_new * ki / (2m^2)]\n // - [kiIn_old / m - sigmaTot_old * ki / (2m^2)]\n // Since we removed id from current, staying is also a \"move\" to evaluate\n let bestCom = currentCom;\n let bestDeltaQ = 0;\n\n for (const [c, wic] of neighborComWeights) {\n const st = sigmaTot.get(c) || 0;\n const deltaQ = wic / totalWeight - (st * ki) / (m2 * totalWeight);\n if (deltaQ > bestDeltaQ) {\n bestDeltaQ = deltaQ;\n bestCom = c;\n }\n }\n\n // Re-insert id into best community\n const bestWic = neighborComWeights.get(bestCom) || 0;\n community.set(id, bestCom);\n sigmaTot.set(bestCom, (sigmaTot.get(bestCom) || 0) + ki);\n sigmaIn.set(bestCom, (sigmaIn.get(bestCom) || 0) + 2 * bestWic + selfW);\n\n if (bestCom !== currentCom) {\n moved = true;\n }\n }\n\n if (!moved) {\n break;\n }\n improved = true;\n }\n\n return { community, improved };\n}\n\n// =============================================================================\n// PHASE 2: GRAPH CONTRACTION\n// =============================================================================\n\n/**\n * Contract communities into super-nodes to form a new, smaller graph.\n * Internal community edges become self-loops on the super-node.\n */\nfunction phase2(\n graph: LouvainGraph,\n community: Map<number, number>\n): LouvainGraph {\n // Map community IDs to contiguous new IDs\n const comIds = [...new Set(community.values())];\n const comRemap = new Map<number, number>();\n for (let i = 0; i < comIds.length; i++) {\n comRemap.set(comIds[i], i);\n }\n\n const newN = comIds.length;\n const newAdj = new Map<number, Map<number, number>>();\n const newDegree = new Map<number, number>();\n const newSelfLoops = new Map<number, number>();\n\n for (let i = 0; i < newN; i++) {\n newAdj.set(i, new Map());\n newDegree.set(i, 0);\n newSelfLoops.set(i, 0);\n }\n\n // Carry over original self-loops\n for (const [nodeId, sw] of graph.selfLoops) {\n if (sw > 0) {\n const nodeCommunity = getRequiredMapValue(community, nodeId, \"community\");\n const c = getRequiredMapValue(comRemap, nodeCommunity, \"community remap\");\n newSelfLoops.set(c, (newSelfLoops.get(c) || 0) + sw);\n }\n }\n\n // Aggregate edges between communities\n // adj stores each undirected edge as two directed entries (i->j and j->i)\n // To avoid double-counting, only process when src < tgt\n const processed = new Set<string>();\n for (const [src, neighbors] of graph.adj) {\n const sourceCommunity = getRequiredMapValue(community, src, \"community\");\n const cSrc = getRequiredMapValue(\n comRemap,\n sourceCommunity,\n \"community remap\"\n );\n for (const [tgt, w] of neighbors) {\n // Deduplicate undirected edges\n const key = src < tgt ? `${src}:${tgt}` : `${tgt}:${src}`;\n if (processed.has(key)) {\n continue;\n }\n processed.add(key);\n\n const targetCommunity = getRequiredMapValue(community, tgt, \"community\");\n const cTgt = getRequiredMapValue(\n comRemap,\n targetCommunity,\n \"community remap\"\n );\n if (cSrc === cTgt) {\n // Internal edge becomes self-loop\n newSelfLoops.set(cSrc, (newSelfLoops.get(cSrc) || 0) + w);\n } else {\n // External edge: add both directions\n const fwd = getRequiredMapValue(newAdj, cSrc, \"contracted adjacency\");\n fwd.set(cTgt, (fwd.get(cTgt) || 0) + w);\n const rev = getRequiredMapValue(newAdj, cTgt, \"contracted adjacency\");\n rev.set(cSrc, (rev.get(cSrc) || 0) + w);\n }\n }\n }\n\n // Compute total weight and degrees\n let totalWeight = 0;\n for (const sw of newSelfLoops.values()) {\n totalWeight += sw;\n }\n for (const [src, neighbors] of newAdj) {\n for (const [tgt, w] of neighbors) {\n if (src < tgt) {\n totalWeight += w; // Count each undirected edge once\n }\n }\n }\n\n for (let i = 0; i < newN; i++) {\n let d = (newSelfLoops.get(i) || 0) * 2;\n const neighbors = newAdj.get(i);\n if (neighbors) {\n for (const w of neighbors.values()) {\n d += w;\n }\n }\n newDegree.set(i, d);\n }\n\n return {\n nodeIds: Array.from({ length: newN }, (_, i) => i),\n adj: newAdj,\n degree: newDegree,\n totalWeight: Math.max(totalWeight, 1),\n selfLoops: newSelfLoops,\n };\n}\n\n// =============================================================================\n// MODULARITY COMPUTATION (full formula)\n// =============================================================================\n\n/**\n * Q = sum_c [ sigmaIn_c / 2m - (sigmaTot_c / 2m)^2 ]\n *\n * where sigmaIn_c = sum of all edge weights with both endpoints in c\n * sigmaTot_c = sum of degrees of all nodes in c\n * m = total edge weight\n */\nfunction computeModularity(\n graph: LouvainGraph,\n community: Map<number, number>\n): number {\n const m2 = 2 * graph.totalWeight;\n if (m2 === 0) {\n return 0;\n }\n\n const sigmaTot = new Map<number, number>();\n const sigmaIn = new Map<number, number>();\n\n for (const id of graph.nodeIds) {\n const c = getRequiredMapValue(community, id, \"community\");\n sigmaTot.set(c, (sigmaTot.get(c) || 0) + (graph.degree.get(id) || 0));\n // Self-loops contribute 2 * weight to internal edges\n sigmaIn.set(c, (sigmaIn.get(c) || 0) + (graph.selfLoops.get(id) || 0) * 2);\n }\n\n // Count internal edge weights (adj stores both directions, so each edge counted twice)\n for (const [src, neighbors] of graph.adj) {\n const cSrc = getRequiredMapValue(community, src, \"community\");\n for (const [tgt, w] of neighbors) {\n if (community.get(tgt) === cSrc) {\n // This edge is internal. Since adj is symmetric, this counts w twice\n // (once for src->tgt, once for tgt->src). sigmaIn needs 2*w per edge,\n // so we just accumulate all entries.\n sigmaIn.set(cSrc, (sigmaIn.get(cSrc) || 0) + w);\n }\n }\n }\n\n let Q = 0;\n for (const c of new Set(community.values())) {\n const si = sigmaIn.get(c) || 0;\n const st = sigmaTot.get(c) || 0;\n Q += si / m2 - (st / m2) * (st / m2);\n }\n\n return Q;\n}\n\n// =============================================================================\n// PUBLIC API\n// =============================================================================\n\nexport function louvainCommunities(\n nodeIds: string[],\n edges: AnalysisEdge[]\n): { communities: Map<string, number>; modularity: number; count: number } {\n if (nodeIds.length === 0) {\n return { communities: new Map(), modularity: 0, count: 0 };\n }\n\n const { graph: initialGraph, nodeMap } = buildLouvainGraph(nodeIds, edges);\n\n // Track the mapping from original nodes through each contraction level\n let currentGraph = initialGraph;\n const mappings: Map<number, number>[] = [];\n\n // Multi-level loop: Phase 1 + Phase 2, repeat until convergence\n const maxPasses = 10;\n for (let pass = 0; pass < maxPasses; pass++) {\n const { community, improved } = phase1(currentGraph);\n mappings.push(community);\n\n if (!improved && pass > 0) {\n break;\n }\n\n // Check if contraction is possible\n const uniqueComs = new Set(community.values()).size;\n if (uniqueComs >= currentGraph.nodeIds.length) {\n break; // No merges\n }\n if (uniqueComs <= 1) {\n break; // Single community\n }\n\n // Phase 2: contract graph\n currentGraph = phase2(currentGraph, community);\n }\n\n // Compose all mapping layers: original node -> final community\n const finalCommunity = new Map<string, number>();\n for (const [originalId, idx] of nodeMap) {\n let current = idx;\n for (const mapping of mappings) {\n current = mapping.get(current) ?? current;\n }\n finalCommunity.set(originalId, current);\n }\n\n // Renumber communities to contiguous 0..N-1\n const uniqueFinal = [...new Set(finalCommunity.values())];\n const renumber = new Map<number, number>();\n for (let i = 0; i < uniqueFinal.length; i++) {\n renumber.set(uniqueFinal[i], i);\n }\n for (const [key, val] of finalCommunity) {\n finalCommunity.set(key, getRequiredMapValue(renumber, val, \"community id\"));\n }\n\n // Compute Q on the original graph with final community assignments\n const originalCommunity = new Map<number, number>();\n for (const [originalId, comId] of finalCommunity) {\n originalCommunity.set(\n getRequiredMapValue(nodeMap, originalId, \"node index\"),\n comId\n );\n }\n const modularity = computeModularity(initialGraph, originalCommunity);\n\n return {\n communities: finalCommunity,\n modularity,\n count: uniqueFinal.length,\n };\n}\n","import { appendFileSync } from \"node:fs\";\n\nexport function isQuietMcpBoot(): boolean {\n return process.env.LUCERN_MCP_QUIET === \"1\";\n}\n\nexport function logMcpInfo(message: string): void {\n if (!isQuietMcpBoot()) {\n console.error(message);\n }\n}\n\nexport function appendMcpDiagnostics(\n event: string,\n fields: Record<string, unknown> = {}\n): void {\n const path = process.env.LUCERN_MCP_DIAGNOSTICS_FILE?.trim();\n if (!path) {\n return;\n }\n\n const payload = {\n ts: new Date().toISOString(),\n pid: process.pid,\n event,\n ...Object.fromEntries(\n Object.entries(fields).filter(([, value]) => value !== undefined)\n ),\n };\n\n try {\n appendFileSync(path, `${JSON.stringify(payload)}\\n`);\n } catch {\n // Diagnostics must never interfere with MCP startup.\n }\n}\n","/**\n * Convex Clients — Lazy-initialized admin-authed ConvexHttpClients for MCP server.\n *\n * LAZY INITIALIZATION: Clients are created on first use, not at import time.\n * This allows index.ts loadLucernEnv() to decode LUCERN_API_KEY and\n * STACK_API_KEY into their respective URL and deploy key env vars before\n * any Convex calls are made.\n *\n * Three clients:\n * - Lucern client → reasoning graph (good-blackbird / precious-dog) [required]\n * - Stack client → StackOS platform (sincere-shepherd / sleek-mink) [optional]\n * - Master Control client → control plane (utmost-ox / successful-clam) [optional]\n *\n * Lucern + Stack are decoded from API keys by index.ts resolveCredentials() at startup.\n * Master Control is resolved from MC_CONVEX_URL + MC_DEPLOY_KEY (set in ~/.lucern/credentials).\n * Uses deploy key auth to call internal mutations/queries directly,\n * bypassing Clerk (standard Convex server-to-server pattern).\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { api } from \"./kernelApi.js\";\nimport { ConvexHttpClient } from \"convex/browser\";\nimport { logMcpInfo } from \"./logging.js\";\n\n// ── Per-request client override (hosted multi-tenant) ─────────────────────\n// On Vercel, the hosted route serves multiple MCP instances (lucern, stack)\n// from the same process. Each instance needs to query a different Convex\n// deployment. AsyncLocalStorage lets handlers transparently use the correct\n// client without changing their call signatures.\n\nconst _requestScopedClient = new AsyncLocalStorage<ConvexHttpClient>();\n\n/**\n * Run a function with a request-scoped Convex client.\n * All `adminQuery`/`adminMutation`/`adminAction` calls within `fn` will\n * use the provided client instead of the process-level singleton.\n */\nexport function runWithScopedClient<T>(\n client: ConvexHttpClient,\n fn: () => T | Promise<T>\n): T | Promise<T> {\n return _requestScopedClient.run(client, fn);\n}\n\n/**\n * Create an admin-authed ConvexHttpClient for a specific deployment.\n * Used by the hosted route to create per-instance clients.\n */\nexport function createAdminClient(url: string, deployKey: string): ConvexHttpClient {\n const client = new ConvexHttpClient(url);\n (client as unknown as { setAdminAuth: (key: string) => void }).setAdminAuth(deployKey);\n return client;\n}\n\n// ── Lucern Client (required, lazy) ──────────────────────────────────────────\n\nlet _lucernClient: ConvexHttpClient | null = null;\n\n/**\n * Get the admin-authed Lucern ConvexHttpClient.\n * Checks AsyncLocalStorage first for per-request override (hosted multi-tenant),\n * then falls back to the process-level singleton.\n * Created on first call — env vars must be set by then (index.ts does this).\n */\nfunction getLucernClient(): ConvexHttpClient {\n const scoped = _requestScopedClient.getStore();\n if (scoped) {\n return scoped;\n }\n\n if (_lucernClient) {\n return _lucernClient;\n }\n\n const url = process.env.LUCERN_CONVEX_URL;\n const key = process.env.LUCERN_DEPLOY_KEY;\n\n if (!url) {\n throw new Error(\n \"LUCERN_CONVEX_URL is required. Ensure LUCERN_API_KEY is set in .env.lucern\"\n );\n }\n\n if (!key) {\n throw new Error(\n \"LUCERN_DEPLOY_KEY is required. Ensure LUCERN_API_KEY is set in .env.lucern\"\n );\n }\n\n _lucernClient = new ConvexHttpClient(url);\n // setAdminAuth exists at runtime but is not in the public type declarations.\n // This is the standard Convex pattern for server-to-server admin access.\n (\n _lucernClient as unknown as { setAdminAuth: (key: string) => void }\n ).setAdminAuth(key);\n\n logMcpInfo(`[lucern-graph] Lucern client initialized → ${url}`);\n return _lucernClient;\n}\n\n// ── Stack Client (optional, lazy) ───────────────────────────────────────────\n\nlet _stackClient: ConvexHttpClient | null = null;\nlet _stackClientChecked = false;\n\n/**\n * Get the admin-authed Stack ConvexHttpClient.\n * Returns null if STACK_API_KEY is not configured.\n * Created on first call — env vars must be set by then (index.ts does this).\n */\nfunction getStackClient(): ConvexHttpClient | null {\n if (_stackClientChecked) {\n return _stackClient;\n }\n\n const url = process.env.STACK_CONVEX_URL;\n const key = process.env.STACK_DEPLOY_KEY;\n\n if (url && key) {\n _stackClient = new ConvexHttpClient(url);\n (\n _stackClient as unknown as { setAdminAuth: (key: string) => void }\n ).setAdminAuth(key);\n logMcpInfo(`[lucern-graph] Stack client initialized → ${url}`);\n } else {\n logMcpInfo(\n \"[lucern-graph] Stack client not configured (no STACK_API_KEY). Stack tools unavailable.\"\n );\n }\n\n _stackClientChecked = true;\n return _stackClient;\n}\n\n// ── Admin helpers (Lucern) ──────────────────────────────────────────────────\n\n/**\n * Admin-authed mutation/query/action helpers for Lucern graph.\n * ConvexHttpClient types restrict .mutation()/.query() to public functions,\n * but admin auth enables internal function calls at runtime.\n * These helpers apply the necessary type assertions.\n */\n\n/**\n * MCP-layer metadata fields that handlers attach for observability but that\n * must NOT be forwarded to Convex mutations (validators reject unknown fields).\n * Some Convex functions accept these as v.optional() (S2-13K), but many don't.\n * Stripping here guarantees safety for all call sites while keeping the\n * observability data available for MCP-side logging.\n */\nconst MCP_META_KEYS = [\n \"mcpSessionId\",\n \"mcpToolName\",\n \"runtimeToolName\",\n \"runtimePackKey\",\n \"runtimePackInstallScope\",\n] as const;\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\ntype MutationRuntimeFields = {\n runtimeToolName: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: RuntimePackInstallScope;\n};\nconst mutationRuntimeCache = new Map<\n string,\n Promise<MutationRuntimeFields | null>\n>();\nconst packInstallScopeCache = new Map<\n string,\n Promise<RuntimePackInstallScope | undefined>\n>();\n\nasync function resolvePackInstallScope(\n packKey: string\n): Promise<RuntimePackInstallScope | undefined> {\n const normalizedPackKey = packKey.trim();\n if (!normalizedPackKey) {\n return;\n }\n\n let cached = packInstallScopeCache.get(normalizedPackKey);\n if (!cached) {\n cached = (async () => {\n const packDefinition = await mcAdminQuery(\n \"packs:getPackDefinition\" as any,\n {\n packKey: normalizedPackKey,\n }\n );\n const installScope = (packDefinition as { installScope?: unknown } | null)\n ?.installScope;\n if (installScope === \"tenant\" || installScope === \"workspace\") {\n return installScope;\n }\n throw new Error(\n `[mcp-runtime] Pack \"${normalizedPackKey}\" is missing a valid installScope`\n );\n })();\n packInstallScopeCache.set(normalizedPackKey, cached);\n }\n\n return await cached;\n}\n\nasync function resolveMutationRuntimeFields(\n toolName: unknown\n): Promise<MutationRuntimeFields | null> {\n if (typeof toolName !== \"string\" || toolName.trim().length === 0) {\n return null;\n }\n const normalizedToolName = toolName.trim();\n\n let cached = mutationRuntimeCache.get(normalizedToolName);\n if (!cached) {\n cached = (async () => {\n const tools = (await (getLucernClient() as any).query(\n api.toolAccess.getExecutableTools,\n {}\n )) as Array<{\n toolName?: string;\n isActive?: boolean;\n status?: string;\n packKey?: string;\n }>;\n const tool = tools.find(\n (candidate) =>\n candidate?.toolName === normalizedToolName &&\n candidate?.isActive !== false &&\n candidate?.status !== \"deprecated\" &&\n candidate?.status !== \"disabled\"\n );\n const packKey =\n typeof tool?.packKey === \"string\" ? tool.packKey.trim() : \"\";\n if (!packKey) {\n return { runtimeToolName: normalizedToolName };\n }\n\n return {\n runtimeToolName: normalizedToolName,\n runtimePackKey: packKey,\n runtimePackInstallScope: await resolvePackInstallScope(packKey),\n };\n })();\n mutationRuntimeCache.set(normalizedToolName, cached);\n }\n\n return await cached;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function adminMutation(fn: any, args: any): Promise<any> {\n // Strip MCP-layer metadata before forwarding to Convex.\n // These fields are used for session tracking / observability in the MCP layer\n // but cause ArgumentValidationError when the Convex validator doesn't expect them.\n const cleanArgs = { ...args };\n if (\n cleanArgs.runtimeToolName === undefined &&\n cleanArgs.runtimePackKey === undefined &&\n cleanArgs.runtimePackInstallScope === undefined\n ) {\n const runtimeFields = await resolveMutationRuntimeFields(args?.mcpToolName);\n if (runtimeFields) {\n Object.assign(cleanArgs, runtimeFields);\n }\n }\n for (const key of MCP_META_KEYS) {\n delete cleanArgs[key];\n }\n return (getLucernClient() as any).mutation(fn, cleanArgs);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function adminQuery(fn: any, args: any): Promise<any> {\n return (getLucernClient() as any).query(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function adminAction(fn: any, args: any): Promise<any> {\n return (getLucernClient() as any).action(fn, args);\n}\n\n// ── Admin helpers (Stack) ───────────────────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function stackAdminMutation(fn: any, args: any): Promise<any> {\n const c = getStackClient();\n if (!c) {\n throw new Error(\n \"Stack client not configured (set STACK_API_KEY in .env.lucern)\"\n );\n }\n return (c as any).mutation(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function stackAdminQuery(fn: any, args: any): Promise<any> {\n const c = getStackClient();\n if (!c) {\n throw new Error(\n \"Stack client not configured (set STACK_API_KEY in .env.lucern)\"\n );\n }\n return (c as any).query(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function stackAdminAction(fn: any, args: any): Promise<any> {\n const c = getStackClient();\n if (!c) {\n throw new Error(\n \"Stack client not configured (set STACK_API_KEY in .env.lucern)\"\n );\n }\n return (c as any).action(fn, args);\n}\n\n// ── Master Control Client (optional, lazy) ───────────────────────────────\n// Control plane (utmost-ox-403 dev / successful-clam-833 prod).\n// Stores: methodology pack definitions, tenant assignments, API key validation.\n// Tenant-custom packs live in the TENANT's deployment (Lucern client), not here.\n// MCP reads from BOTH to compile the full methodology set.\n\nlet _mcClient: ConvexHttpClient | null = null;\nlet _mcClientChecked = false;\n\nfunction getMcClient(): ConvexHttpClient | null {\n if (_mcClientChecked) {\n return _mcClient;\n }\n\n const url = process.env.MC_CONVEX_URL;\n const key = process.env.MC_DEPLOY_KEY;\n\n if (url && key) {\n _mcClient = new ConvexHttpClient(url);\n (\n _mcClient as unknown as { setAdminAuth: (key: string) => void }\n ).setAdminAuth(key);\n logMcpInfo(`[lucern-graph] Master Control client initialized → ${url}`);\n } else {\n logMcpInfo(\n \"[lucern-graph] Master Control client not configured (no MC_CONVEX_URL). \" +\n \"Methodology packs will use hardcoded fallback.\"\n );\n }\n\n _mcClientChecked = true;\n return _mcClient;\n}\n\n// ── Admin helpers (Master Control) ───────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function mcAdminQuery(fn: any, args: any): Promise<any> {\n const c = getMcClient();\n if (!c) {\n throw new Error(\n \"Master Control client not configured (set MC_CONVEX_URL + MC_DEPLOY_KEY)\"\n );\n }\n return (c as any).query(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function mcAdminMutation(fn: any, args: any): Promise<any> {\n const c = getMcClient();\n if (!c) {\n throw new Error(\n \"Master Control client not configured (set MC_CONVEX_URL + MC_DEPLOY_KEY)\"\n );\n }\n return (c as any).mutation(fn, args);\n}\n\n/**\n * Check if Master Control client is available.\n * Use this to decide whether to fetch from control plane or use hardcoded fallback.\n */\nexport function isMcClientAvailable(): boolean {\n return !!(process.env.MC_CONVEX_URL && process.env.MC_DEPLOY_KEY);\n}\n\n// ── Tenant Config (MC-validated session context) ────────────────────────────\n// Set at MCP server boot after MC validateMcpSession succeeds.\n// Handlers read this to scope methodology, features, and audit attribution.\n\nexport type TenantConfig = {\n tenantId: string;\n slug: string;\n name: string;\n tier: string;\n methodologyPackIds: string[];\n apiKeyId: string;\n // Block 11B: Per-user session context (optional — omitted for legacy callers)\n sessionType?: \"agent\" | \"user\";\n userId?: string; // Clerk user ID (user sessions) or AGENT_IDENTITY (agent sessions)\n userEmail?: string; // For audit trail (user sessions only)\n userRole?: string; // From MC membership: platform_admin | tenant_admin | editor | viewer | ...\n allowedTools?: string[] | null; // null = all (agents), string[] = filtered (users), [] = deny all\n // Block 11C: Cached permitted tools from tenant Convex getPermittedTools (session-boot)\n permittedTools?: Array<{\n toolName: string;\n requiredRole?: string;\n approvalGateId?: string;\n isCore?: boolean;\n category?: string;\n }>;\n // Block 11D: Topic-level access resolved at session boot from MC resolveTopicAccess.\n // null = unrestricted (agents, admins). string[] = specific topic IDs. [] = no topic access.\n allowedTopics?: string[] | null;\n isTopicAdmin?: boolean; // true for platform_admin/tenant_admin admin bypass\n // Layer 2a: Group-pack binding — resolved at boot from MC resolveUserPackAccess\n groupIds?: string[]; // Groups this user belongs to\n permittedPackKeys?: string[]; // Packs accessible via group assignments\n permittedToolNames?: string[]; // Tool names from permitted packs (for intersection with RBAC)\n principalId?: string;\n principalType?: \"human\" | \"service\" | \"agent\";\n workspaceId?: string;\n scopes?: string[];\n authMode?:\n | \"interactive_user\"\n | \"service_principal\"\n | \"tenant_api_key\"\n | \"session_token\";\n roles?: string[];\n};\n\nlet _tenantConfig: TenantConfig | null = null;\n\n/**\n * Set tenant config — write-once guard. Can only be set once per process lifetime.\n * The config is frozen to prevent mutation by handlers.\n */\nexport function setTenantConfig(config: TenantConfig): void {\n if (_tenantConfig !== null) {\n throw new Error(\n \"[lucern] Tenant config already set — write-once guard prevents overwrite. \" +\n \"Restart the MCP server to change tenant context.\"\n );\n }\n _tenantConfig = Object.freeze({ ...config }) as TenantConfig;\n logMcpInfo(\n `[lucern] Tenant config set: slug=\"${config.slug}\" tier=${config.tier} packs=[${config.methodologyPackIds.join(\",\")}]`\n );\n}\n\n/**\n * Get validated tenant config. Returns a frozen object (immutable).\n */\nexport function getTenantConfig(): Readonly<TenantConfig> | null {\n return _tenantConfig;\n}\n\n// ── Identity & defaults ─────────────────────────────────────────────────────\n\n/**\n * Default agent identity for MCP operations.\n * All graph mutations will be attributed to this identity.\n */\nexport const AGENT_IDENTITY =\n process.env.LUCERN_AGENT_IDENTITY || \"agent:claude-code\";\n\n/**\n * Process-local session identity for inter-agent coordination.\n * Each MCP server process gets a unique UUID, enabling parallel sessions\n * to discover and message each other via agentSessions/agentMessages tables.\n */\nexport const SESSION_ID = crypto.randomUUID();\n\n/**\n * Default topic ID — set after seed script runs.\n * MCP handlers use this if topicId is not explicitly provided.\n *\n * @deprecated DEAD CODE — no importers. Use scope.ts defaultTopicId instead.\n * Will be removed when the legacy scope table is eliminated.\n * See TC-D: Project Overlay Demotion.\n */\nlet defaultTopicId: string | null = null;\n\n/** @deprecated Use scope.ts setDefaultScopeContext instead. No importers. */\nexport function setDefaultTopicId(id: string): void {\n defaultTopicId = id;\n}\n\n/** @deprecated Use scope.ts getDefaultTopicId instead. No importers. */\nexport function getDefaultTopicId(): string | null {\n return defaultTopicId;\n}\n","export type DecodedPrefixedId = {\n prefix: string;\n value: string;\n};\n\nconst PREFIXED_ID_PATTERN = /^([a-z][a-z0-9]*)_(.+)$/;\n\nexport function encodePrefixedId(prefix: string, value: string): string {\n const normalizedPrefix = prefix.trim();\n const normalizedValue = value.trim();\n\n if (!normalizedPrefix || !normalizedValue) {\n throw new Error(\"Both prefix and value are required to encode a prefixed ID.\");\n }\n\n return `${normalizedPrefix}_${normalizedValue}`;\n}\n\nexport function decodePrefixedId(id: string): DecodedPrefixedId {\n const normalized = id.trim();\n const match = PREFIXED_ID_PATTERN.exec(normalized);\n\n if (!match) {\n throw new Error(`Invalid prefixed ID: ${id}`);\n }\n\n return {\n prefix: match[1],\n value: match[2],\n };\n}\n\nexport function hasPrefixedIdPrefix(id: string, prefix: string): boolean {\n const decoded = decodePrefixedId(id);\n return decoded.prefix === prefix.trim();\n}\n","/**\n * Lens Filter Criteria Contract\n *\n * Version-discriminated filter DSL for lenses. Each filter criteria document\n * carries a `version` and `kind` discriminator so future shapes can coexist\n * without schema migrations. The Convex `filterCriteria` field remains v.any()\n * — all type enforcement happens here at the TypeScript contract layer.\n *\n * Forward-compatibility guarantees:\n * - `version` field: new versions add fields, never remove or rename existing ones\n * - `kind` field: new filter kinds (temporal, confidence-range) can be added\n * without touching taxonomy code paths\n * - `entityTypeFilters` array items are open to extension in future versions\n * - Resolution logic switches on `version` + `kind` to select the right resolver\n *\n * @module lucern/contracts/src/lens-filter\n */\n\n// ---------------------------------------------------------------------------\n// V1: Taxonomy Filter — entity type + subtype matching\n// ---------------------------------------------------------------------------\n\n/**\n * A single entity type filter entry. Matches nodes whose `nodeType` equals\n * `entityTypeValue`, optionally further narrowed by subtype membership.\n *\n * V2 will add `propertyMatchers` here for arbitrary JSON Schema facet queries.\n */\nexport type EntityTypeFilterV1 = {\n /** References ontologyVersion.entityTypes[].value, e.g. \"company\" */\n entityTypeValue: string;\n\n /** Optional subtype narrowing. If omitted or empty, all subtypes match. */\n subtypeValues?: string[];\n};\n\n/**\n * Optional scope to restrict which ontology the filter resolves against.\n * If omitted, resolution uses whatever ontology is active in the workspace.\n */\nexport type OntologyScope = {\n /** Restrict to a specific ontology by key, e.g. \"vc-investment\" */\n ontologyKey?: string;\n};\n\n/**\n * Taxonomy filter criteria v1: entity type + subtype matching over ontology.\n */\nexport type TaxonomyFilterCriteriaV1 = {\n version: 1;\n kind: \"taxonomy\";\n entityTypeFilters: EntityTypeFilterV1[];\n ontologyScope?: OntologyScope;\n};\n\n// ---------------------------------------------------------------------------\n// Union: All filter criteria versions and kinds\n// ---------------------------------------------------------------------------\n\n/**\n * Discriminated union of all supported filter criteria.\n * Resolution logic switches on `version` + `kind`.\n *\n * To add a new filter kind:\n * 1. Define a new type (e.g., TemporalFilterCriteriaV1)\n * 2. Add it to this union\n * 3. Add a resolver in taxonomy-filter.ts\n * 4. No schema migration needed — filterCriteria is v.any()\n */\nexport type LensFilterCriteria = TaxonomyFilterCriteriaV1;\n// Future: | TemporalFilterCriteriaV1 | ConfidenceRangeFilterCriteriaV1 | ...\n\n// ---------------------------------------------------------------------------\n// Type guards\n// ---------------------------------------------------------------------------\n\nexport function isLensFilterCriteria(\n value: unknown\n): value is LensFilterCriteria {\n if (!value || typeof value !== \"object\") return false;\n const obj = value as Record<string, unknown>;\n return typeof obj.version === \"number\" && typeof obj.kind === \"string\";\n}\n\nexport function isTaxonomyFilterCriteriaV1(\n value: unknown\n): value is TaxonomyFilterCriteriaV1 {\n if (!isLensFilterCriteria(value)) return false;\n return value.version === 1 && value.kind === \"taxonomy\";\n}\n\n// ---------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------\n\nexport type FilterValidationResult =\n | { valid: true }\n | { valid: false; errors: string[] };\n\n/**\n * Validate a filter criteria document at the contract layer.\n * This runs before persisting to Convex.\n */\nexport function validateFilterCriteria(\n value: unknown\n): FilterValidationResult {\n if (value === undefined || value === null) {\n return { valid: true }; // filterCriteria is optional\n }\n\n if (!isLensFilterCriteria(value)) {\n return {\n valid: false,\n errors: [\n 'filterCriteria must have numeric \"version\" and string \"kind\" fields',\n ],\n };\n }\n\n if (isTaxonomyFilterCriteriaV1(value)) {\n return validateTaxonomyFilterV1(value);\n }\n\n // Cast to access properties — TypeScript narrows to `never` when all union\n // members are exhausted, but at runtime unknown version/kind combos are possible.\n const raw = value as { version: number; kind: string };\n return {\n valid: false,\n errors: [\n `Unsupported filter criteria: version=${raw.version}, kind=${raw.kind}`,\n ],\n };\n}\n\nfunction validateTaxonomyFilterV1(\n criteria: TaxonomyFilterCriteriaV1\n): FilterValidationResult {\n const errors: string[] = [];\n\n if (!Array.isArray(criteria.entityTypeFilters)) {\n errors.push(\"entityTypeFilters must be an array\");\n return { valid: false, errors };\n }\n\n if (criteria.entityTypeFilters.length === 0) {\n errors.push(\"entityTypeFilters must contain at least one entry\");\n return { valid: false, errors };\n }\n\n for (let i = 0; i < criteria.entityTypeFilters.length; i++) {\n const filter = criteria.entityTypeFilters[i];\n if (!filter || typeof filter.entityTypeValue !== \"string\") {\n errors.push(\n `entityTypeFilters[${i}].entityTypeValue must be a non-empty string`\n );\n continue;\n }\n if (filter.entityTypeValue.trim().length === 0) {\n errors.push(\n `entityTypeFilters[${i}].entityTypeValue must be a non-empty string`\n );\n }\n if (\n filter.subtypeValues !== undefined &&\n !Array.isArray(filter.subtypeValues)\n ) {\n errors.push(`entityTypeFilters[${i}].subtypeValues must be an array`);\n }\n }\n\n if (criteria.ontologyScope !== undefined) {\n if (\n typeof criteria.ontologyScope !== \"object\" ||\n criteria.ontologyScope === null\n ) {\n errors.push(\"ontologyScope must be an object\");\n }\n }\n\n return errors.length === 0\n ? { valid: true }\n : { valid: false, errors };\n}\n","/**\n * Shared lexical matching primitives used across MCP handlers and graph utilities.\n *\n * The goal is not to replace downstream LLM scoring. It provides a fast,\n * deterministic substrate for candidate generation, reranking, and light\n * classification across belief/question/evidence/entity surfaces.\n */\n\nexport type LexicalStrategy = \"tokenOverlap\" | \"bigramJaccard\" | \"wordOverlap\";\n\nexport type PreparedLexicalQuery = {\n raw: string;\n tokens: string[];\n words: string[];\n bigrams: Set<string>;\n};\n\nexport type LexicalSignal = {\n strategy?: LexicalStrategy;\n text: string | null | undefined;\n weight: number;\n};\n\nexport type LexicalRerankOptions = {\n lexicalWeight?: number;\n rankWeight?: number;\n};\n\nconst TOKEN_SPLIT_REGEX = /[^a-z0-9]+/;\nconst NON_ALPHANUMERIC_REGEX = /[^a-z0-9]/g;\n\n/** Stop words that add noise to scoring. */\nconst STOP_WORDS = new Set([\n \"the\",\n \"a\",\n \"an\",\n \"and\",\n \"or\",\n \"but\",\n \"in\",\n \"on\",\n \"at\",\n \"to\",\n \"for\",\n \"of\",\n \"with\",\n \"by\",\n \"from\",\n \"is\",\n \"it\",\n \"as\",\n \"be\",\n \"was\",\n \"are\",\n \"this\",\n \"that\",\n \"has\",\n \"had\",\n \"have\",\n \"not\",\n \"all\",\n \"can\",\n \"do\",\n \"its\",\n \"may\",\n \"will\",\n \"how\",\n \"what\",\n \"which\",\n \"who\",\n \"when\",\n \"where\",\n \"than\",\n \"then\",\n \"each\",\n \"into\",\n \"such\",\n \"any\",\n \"been\",\n \"if\",\n \"would\",\n \"about\",\n \"should\",\n \"these\",\n \"those\",\n \"their\",\n \"we\",\n \"our\",\n \"so\",\n]);\n\n/** Tokenize a string into lowercase words, removing stop words. */\nexport function tokenizeSearchText(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n}\n\n/** Simple stemmer: strip common English suffixes for fuzzy matching. */\nexport function stemToken(word: string): string {\n if (word.length <= 4) {\n return word;\n }\n if (word.endsWith(\"ation\")) {\n return word.slice(0, -5);\n }\n if (word.endsWith(\"ment\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ness\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ical\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"tion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"sion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ing\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ous\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ive\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ity\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ics\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ly\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ed\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"er\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"es\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"al\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ic\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"s\") && !word.endsWith(\"ss\")) {\n return word.slice(0, -1);\n }\n return word;\n}\n\n/** Compute token overlap score between query tokens and text tokens. */\nexport function tokenOverlapScore(\n queryTokens: string[],\n textTokens: string[]\n): number {\n if (queryTokens.length === 0 || textTokens.length === 0) {\n return 0;\n }\n\n const stemmedText = new Set(textTokens.map(stemToken));\n let matchCount = 0;\n\n for (const queryToken of queryTokens) {\n const stemmedQuery = stemToken(queryToken);\n\n if (stemmedText.has(stemmedQuery)) {\n matchCount += 1;\n continue;\n }\n\n for (const textToken of stemmedText) {\n if (\n textToken.startsWith(stemmedQuery) ||\n stemmedQuery.startsWith(textToken)\n ) {\n matchCount += 0.5;\n break;\n }\n }\n }\n\n return matchCount / queryTokens.length;\n}\n\n/**\n * Extract character bigrams from text. Normalizes to lowercase, removes\n * non-alphanumeric characters, and generates overlapping pairs.\n */\nexport function bigramTokenize(text: string): Set<string> {\n const normalized = text.toLowerCase().replace(NON_ALPHANUMERIC_REGEX, \"\");\n const bigrams = new Set<string>();\n for (let i = 0; i < normalized.length - 1; i++) {\n bigrams.add(normalized.slice(i, i + 2));\n }\n return bigrams;\n}\n\n/**\n * Extract word-level tokens from text (for coarser matching).\n * Normalizes to lowercase, splits on non-alphanumeric.\n */\nexport function wordTokenize(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length > 1);\n}\n\n/** Jaccard similarity between two sets: |A ∩ B| / |A ∪ B|. */\nexport function jaccardSimilarity(\n setA: Set<string>,\n setB: Set<string>\n): number {\n if (setA.size === 0 && setB.size === 0) {\n return 0;\n }\n\n let intersectionSize = 0;\n const smaller = setA.size <= setB.size ? setA : setB;\n const larger = setA.size <= setB.size ? setB : setA;\n\n for (const item of smaller) {\n if (larger.has(item)) {\n intersectionSize++;\n }\n }\n\n const unionSize = setA.size + setB.size - intersectionSize;\n return unionSize === 0 ? 0 : intersectionSize / unionSize;\n}\n\n/** Exact word overlap score: fraction of type words found in input text. */\nexport function wordOverlapScore(\n inputWords: string[],\n typeWords: string[]\n): number {\n if (typeWords.length === 0) {\n return 0;\n }\n let matches = 0;\n for (const word of typeWords) {\n if (inputWords.includes(word)) {\n matches++;\n }\n }\n return matches / typeWords.length;\n}\n\n/** Pre-compute reusable lexical structures for a query. */\nexport function prepareLexicalQuery(query: string): PreparedLexicalQuery {\n return {\n raw: query,\n tokens: tokenizeSearchText(query),\n words: wordTokenize(query),\n bigrams: bigramTokenize(query),\n };\n}\n\n/** Score a single lexical signal against a prepared query. */\nexport function scoreLexicalSignal(\n query: PreparedLexicalQuery,\n signal: LexicalSignal\n): number {\n const text = signal.text?.trim();\n if (!text) {\n return 0;\n }\n\n switch (signal.strategy ?? \"tokenOverlap\") {\n case \"bigramJaccard\":\n return jaccardSimilarity(query.bigrams, bigramTokenize(text));\n case \"wordOverlap\":\n return wordOverlapScore(query.words, wordTokenize(text));\n default:\n return tokenOverlapScore(query.tokens, tokenizeSearchText(text));\n }\n}\n\n/** Weighted lexical score across multiple textual signals. */\nexport function scoreLexicalSignals(\n query: PreparedLexicalQuery,\n signals: LexicalSignal[]\n): number {\n let weightedScore = 0;\n let totalWeight = 0;\n\n for (const signal of signals) {\n if (!signal.text?.trim() || signal.weight <= 0) {\n continue;\n }\n weightedScore += scoreLexicalSignal(query, signal) * signal.weight;\n totalWeight += signal.weight;\n }\n\n return totalWeight === 0 ? 0 : weightedScore / totalWeight;\n}\n\n/** Map a candidate's original rank position into a 0..1 prior. */\nexport function rankWindowScore(index: number, total: number): number {\n if (total <= 1) {\n return 1;\n }\n const clampedIndex = Math.max(0, Math.min(index, total - 1));\n return 1 - clampedIndex / (total - 1);\n}\n\n/** Rerank a candidate window by lexical overlap while preserving original-rank prior. */\nexport function rerankLexicalWindow<T>(\n query: string,\n items: T[],\n getText: (item: T) => string | null | undefined,\n options?: LexicalRerankOptions\n): T[] {\n const preparedQuery = prepareLexicalQuery(query);\n if (preparedQuery.tokens.length === 0 || items.length <= 1) {\n return items;\n }\n\n const lexicalWeight = options?.lexicalWeight ?? 0.65;\n const rankWeight = options?.rankWeight ?? 0.35;\n\n return items\n .map((item, index) => {\n const lexicalScore = scoreLexicalSignals(preparedQuery, [\n { text: getText(item) ?? \"\", weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const rankScore = rankWindowScore(index, items.length);\n\n return {\n item,\n combinedScore: lexicalScore * lexicalWeight + rankScore * rankWeight,\n };\n })\n .sort((left, right) => right.combinedScore - left.combinedScore)\n .map(({ item }) => item);\n}\n","/**\n * @lucern/contracts — OntologiesV1 namespace (resource contracts)\n *\n * Ontology Matching Engine — L0 entity type classification and similarity scoring.\n * Provides bigram-based text similarity for matching free text against\n * ontology entity types. Domain-agnostic: works identically for companies,\n * molecules, code modules, or any tenant-defined entity vocabulary.\n *\n * Moved from src/ontology-matching.contract.ts in EK-16 T1 PR 2.\n * Compat shim remains at the old path until the Lucern 1.0.0 cut.\n */\n\nimport {\n bigramTokenize,\n jaccardSimilarity,\n prepareLexicalQuery,\n scoreLexicalSignals,\n wordOverlapScore,\n wordTokenize,\n} from \"../../text-matching.contract\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/** An entity type definition from a resolved ontology version. */\nexport type OntologyEntityType = {\n value: string;\n label: string;\n description?: string;\n subtypes?: Array<{ value: string; label: string; description?: string }>;\n};\n\n/** A scored match between input text and an entity type. */\nexport type EntityTypeMatch = {\n entityType: string;\n label: string;\n score: number;\n reason: string;\n};\n\n/** A candidate entity node that can be matched against a target node. */\nexport type EntityMatchCandidate = {\n nodeId: string;\n entityType: string;\n title: string;\n canonicalText: string;\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n};\n\n/** A scored entity match with suggested bridge edge type. */\nexport type EntityConnectionMatch = {\n entityNodeId: string;\n entityType: string;\n title: string;\n score: number;\n suggestedEdgeType: string;\n reason: string;\n};\n\n// =============================================================================\n// ENTITY TYPE SCORING\n// =============================================================================\n\n/** Weights for combining scoring signals. */\nconst MATCH_WEIGHTS = {\n tokenOverlap: 0.35,\n bigramSimilarity: 0.25,\n wordOverlap: 0.2,\n descriptionBonus: 0.2,\n} as const;\n\n/**\n * Score how well input text matches a single entity type definition.\n * Combines bigram Jaccard similarity, word overlap, and description matching.\n */\nexport function scoreEntityTypeMatch(\n inputText: string,\n entityType: OntologyEntityType\n): EntityTypeMatch {\n const preparedQuery = prepareLexicalQuery(inputText);\n const labelText = `${entityType.label} ${entityType.value}`;\n\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: labelText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n\n // Score against the type label (primary signal)\n const labelBigrams = bigramTokenize(entityType.label);\n const bigramScore = jaccardSimilarity(preparedQuery.bigrams, labelBigrams);\n\n // Word overlap with label + value\n const labelWords = wordTokenize(labelText);\n const wordScore = wordOverlapScore(preparedQuery.words, labelWords);\n\n // Description matching bonus (if description exists)\n let descScore = 0;\n if (entityType.description) {\n descScore = scoreLexicalSignals(preparedQuery, [\n { text: entityType.description, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n }\n\n // Check subtypes for additional matches\n let subtypeBonus = 0;\n if (entityType.subtypes && entityType.subtypes.length > 0) {\n for (const subtype of entityType.subtypes) {\n const subtypeScore = scoreLexicalSignals(preparedQuery, [\n {\n text: `${subtype.label} ${subtype.value} ${subtype.description || \"\"}`,\n weight: 1,\n strategy: \"tokenOverlap\",\n },\n ]);\n subtypeBonus = Math.max(subtypeBonus, subtypeScore * 0.3); // up to 30% subtype bonus\n }\n }\n\n const score = Math.min(\n 1.0,\n tokenScore * MATCH_WEIGHTS.tokenOverlap +\n bigramScore * MATCH_WEIGHTS.bigramSimilarity +\n wordScore * MATCH_WEIGHTS.wordOverlap +\n descScore * MATCH_WEIGHTS.descriptionBonus +\n subtypeBonus\n );\n\n // Generate human-readable reason\n const reasons: string[] = [];\n if (tokenScore > 0.3) {\n reasons.push(`stem match: ${(tokenScore * 100).toFixed(0)}%`);\n }\n if (bigramScore > 0.3) {\n reasons.push(`text similarity: ${(bigramScore * 100).toFixed(0)}%`);\n }\n if (wordScore > 0.3) {\n reasons.push(`word match: ${(wordScore * 100).toFixed(0)}%`);\n }\n if (descScore > 0.2) {\n reasons.push(\"description match\");\n }\n if (subtypeBonus > 0.05) {\n reasons.push(\"subtype match\");\n }\n const reason = reasons.length > 0 ? reasons.join(\", \") : \"low similarity\";\n\n return {\n entityType: entityType.value,\n label: entityType.label,\n score,\n reason,\n };\n}\n\n/**\n * Rank all entity types in an ontology against input text.\n * Returns matches sorted by score (descending), filtered to score > minScore.\n */\nexport function rankEntityTypeMatches(\n inputText: string,\n entityTypes: OntologyEntityType[],\n options?: { minScore?: number; limit?: number }\n): EntityTypeMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n const matches = entityTypes\n .map((et) => scoreEntityTypeMatch(inputText, et))\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n\n return matches;\n}\n\n// =============================================================================\n// ENTITY DISCOVERY SCORING\n// =============================================================================\n\n/**\n * Score how well a node's text matches an entity candidate.\n * Used by discover_entity_connections to suggest missing bridge edges.\n */\nexport function scoreEntityConnection(\n nodeText: string,\n candidate: EntityMatchCandidate,\n options?: { connectivityWeight?: number }\n): EntityConnectionMatch {\n const preparedQuery = prepareLexicalQuery(nodeText);\n const connectivityWeight = options?.connectivityWeight ?? 0.3;\n const textWeight = 1.0 - connectivityWeight;\n const candidateText = `${candidate.title} ${candidate.canonicalText}`;\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const textScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"bigramJaccard\" },\n ]);\n const wordScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"wordOverlap\" },\n ]);\n\n // Connectivity signal (normalized externally by caller)\n const maxConnections = Math.max(\n 1,\n candidate.connectedBeliefCount + candidate.connectedEvidenceCount\n );\n const connectivityScore = Math.min(1.0, maxConnections / 10); // soft-cap at 10\n\n const combinedTextScore =\n tokenScore * 0.45 + textScore * 0.35 + wordScore * 0.2;\n const score =\n combinedTextScore * textWeight + connectivityScore * connectivityWeight;\n\n // Suggest edge type based on entity type\n const suggestedEdgeType = suggestEdgeType(candidate.entityType);\n\n const reason =\n tokenScore > 0.3\n ? `stem match: ${(tokenScore * 100).toFixed(0)}%`\n : textScore > 0.2\n ? `name similarity: ${(textScore * 100).toFixed(0)}%`\n : wordScore > 0.2\n ? `keyword match: ${(wordScore * 100).toFixed(0)}%`\n : `connectivity: ${candidate.connectedBeliefCount} beliefs`;\n\n return {\n entityNodeId: candidate.nodeId,\n entityType: candidate.entityType,\n title: candidate.title,\n score,\n suggestedEdgeType,\n reason,\n };\n}\n\n/**\n * Suggest the most appropriate bridge edge type for an entity type.\n */\nfunction suggestEdgeType(entityType: string): string {\n switch (entityType) {\n case \"company\":\n case \"person\":\n case \"investor\":\n return \"contains\";\n case \"function\":\n case \"value_chain\":\n return \"impacts\";\n default:\n return \"contains\";\n }\n}\n\n/**\n * Rank entity candidates against a node's text.\n * Returns sorted matches above the minimum score threshold.\n */\nexport function rankEntityConnections(\n nodeText: string,\n candidates: EntityMatchCandidate[],\n options?: { minScore?: number; limit?: number; connectivityWeight?: number }\n): EntityConnectionMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n return candidates\n .map((c) =>\n scoreEntityConnection(nodeText, c, {\n connectivityWeight: options?.connectivityWeight,\n })\n )\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n}\n","/**\n * @lucern/contracts — TopicsV1 namespace (resource contracts)\n *\n * Moved from src/topic-scope.contract.ts in EK-16 T1 PR 2.\n * Compat shim remains at the old path until the Lucern 1.0.0 cut.\n */\n\nexport const ROOT_TOPIC_ID = \"n17tm38rwet7wqgzrmwahyt1z582590y\";\n\nexport type TopicDoc = {\n _id: string;\n name?: string;\n parentTopicId?: string;\n depth?: number;\n type?: string;\n};\n\n/**\n * BFS traversal collecting a topic and its neighborhood:\n * ancestors up to root + descendants down to maxDescendantDepth.\n */\nexport function collectTopicNeighborhood(\n topics: TopicDoc[],\n rootTopicId: string,\n maxDescendantDepth = 2\n): string[] {\n const byId = new Map<string, TopicDoc>();\n const children = new Map<string, string[]>();\n for (const topic of topics) {\n const id = String(topic._id);\n byId.set(id, topic);\n if (!children.has(id)) {\n children.set(id, []);\n }\n }\n for (const topic of topics) {\n if (!topic.parentTopicId) {\n continue;\n }\n const parent = String(topic.parentTopicId);\n const id = String(topic._id);\n const list = children.get(parent) || [];\n list.push(id);\n children.set(parent, list);\n }\n\n const selected = new Set<string>();\n selected.add(rootTopicId);\n\n // Ancestors\n let cursor = byId.get(rootTopicId);\n while (cursor?.parentTopicId) {\n const parentId = String(cursor.parentTopicId);\n if (selected.has(parentId)) {\n break;\n }\n selected.add(parentId);\n cursor = byId.get(parentId);\n }\n\n // Descendants\n const queue: Array<{ id: string; depth: number }> = [\n { id: rootTopicId, depth: 0 },\n ];\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (current.depth >= maxDescendantDepth) {\n continue;\n }\n for (const childId of children.get(current.id) || []) {\n if (!selected.has(childId)) {\n selected.add(childId);\n }\n queue.push({ id: childId, depth: current.depth + 1 });\n }\n }\n\n return Array.from(selected);\n}\n","/**\n * Scope Resolution Helpers\n *\n * `topicId` is the canonical parameter name in MCP tool contracts.\n * `projectId` is accepted as a backward-compatibility alias — callers may\n * still pass it, but new tool schemas expose `topicId`.\n *\n * Use `readTopicIdArg(args)` to read whichever the caller provided:\n * topicId takes precedence; projectId is the fallback.\n *\n * Topic -> legacy scope alias mapping is resolved in this order:\n * 1) topic legacy graph scope field / topic.metadata legacy graph scope field\n * 2) topic.metadata.legacyProjectId\n * 3) topic.metadata.projectId\n * 4) heuristic inference from existing node search results\n *\n * Ambient context: When no explicit topicId/projectId is provided and\n * no in-memory default is set, falls back to .lucern.json in the repo root.\n * This file is written by begin_build_session/compile_context flows and read by hooks + handlers.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { ROOT_TOPIC_ID } from \"@lucern/contracts\";\nimport { api, internal } from \"./kernelApi.js\";\nimport { adminQuery } from \"./convex-client.js\";\nimport { checkTopicScope } from \"./topic-scope.js\";\nimport type { Id } from \"@lucern/reasoning-kernel/_generated/dataModel.js\";\n\ntype AnyRecord = Record<string, unknown>;\n\nexport type ScopeResolution = {\n inputScopeId?: string;\n topicId?: string;\n topicName?: string;\n legacyScopeId?: string;\n source:\n | \"default_topic\"\n | \"direct_topic\"\n | \"topic_metadata\"\n | \"topic_inferred\"\n | \"legacy_project_alias\"\n | \"node_topic\"\n | \"node_project\"\n | \"lucern_json\"\n | \"unresolved\";\n};\n\nlet defaultTopicId: string | null = null;\nconst PUBLIC_TOPIC_PREFIX = \"top_\";\n\nfunction encodePublicTopicId(topicId: string | undefined): string | undefined {\n if (!isNonEmptyString(topicId)) {\n return undefined;\n }\n return topicId.startsWith(PUBLIC_TOPIC_PREFIX)\n ? topicId\n : `${PUBLIC_TOPIC_PREFIX}${topicId}`;\n}\n\nfunction decodePublicTopicId(topicId: string | undefined): string | undefined {\n if (!isNonEmptyString(topicId)) {\n return undefined;\n }\n return topicId.startsWith(PUBLIC_TOPIC_PREFIX)\n ? topicId.slice(PUBLIC_TOPIC_PREFIX.length)\n : topicId;\n}\n\n/**\n * Read the topic scope from MCP tool args.\n * Returns undefined if topicId is not provided — let resolveTopicScopeId handle fallback.\n */\nexport function readTopicIdArg(\n args: Record<string, unknown>\n): string | undefined {\n const topicId = args.topicId as string | undefined;\n const legacyProjectId = args.projectId as string | undefined;\n return topicId || legacyProjectId || undefined;\n}\n\n// --- .lucern.json ambient context ---\n\nexport type LucernContextFile = {\n topicId?: string;\n topicName?: string;\n activeWorktree?: {\n worktreeId: string;\n title: string;\n status: string;\n executionOrder: number | null;\n gate: string | null;\n } | null;\n deployment?: string;\n lastUpdated?: number;\n};\n\nconst LUCERN_JSON_PATH = path.resolve(process.cwd(), \".lucern.json\");\n\n/**\n * Read .lucern.json from the repo root (synchronous).\n * Returns null if the file doesn't exist or is malformed.\n */\nexport function readLucernJson(): LucernContextFile | null {\n try {\n const raw = fs.readFileSync(LUCERN_JSON_PATH, \"utf-8\");\n const parsed = JSON.parse(raw) as LucernContextFile;\n return {\n ...parsed,\n topicId: parsed.topicId,\n topicName: parsed.topicName,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Write .lucern.json to the repo root.\n * Called by session bootstrap flows after successful init.\n */\nexport function writeLucernJson(context: LucernContextFile): void {\n try {\n const normalized: LucernContextFile = {\n ...context,\n topicId: encodePublicTopicId(context.topicId),\n };\n fs.writeFileSync(\n LUCERN_JSON_PATH,\n `${JSON.stringify(normalized, null, 2)}\\n`,\n \"utf-8\"\n );\n } catch {\n // Non-critical — ambient context just won't be available\n }\n}\n\n// The Root \"Lucern\" topic is a container for child topics.\n// Epistemic nodes (beliefs, questions, evidence, answers) should\n// NEVER be scoped to Root — they belong under specific child topics.\nexport { ROOT_TOPIC_ID };\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\n/**\n * Resolve topicId from a linked epistemic node.\n * Used by creation handlers to inherit topic from a parent node\n * (e.g., question inherits from belief, answer inherits from question).\n */\nexport async function resolveTopicFromNode(\n nodeId: string | undefined,\n _toolName: string\n): Promise<string | null> {\n if (!isNonEmptyString(nodeId)) {\n return null;\n }\n const node = await tryGetNodeById(nodeId);\n if (!node) {\n return null;\n }\n const topicId = isNonEmptyString(node.topicId) ? node.topicId : null;\n // Never inherit Root — the linked node itself needs backfill\n if (topicId === ROOT_TOPIC_ID) {\n return null;\n }\n return topicId;\n}\n\nfunction readTopicMappedProjectId(topic: AnyRecord): string | undefined {\n const metadata = (topic.metadata || {}) as AnyRecord;\n const candidate =\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return isNonEmptyString(candidate) ? candidate : undefined;\n}\n\nasync function tryGetTopicById(topicId: string): Promise<AnyRecord | null> {\n const normalizedTopicId = decodePublicTopicId(topicId);\n if (!normalizedTopicId) {\n return null;\n }\n try {\n const topic = (await adminQuery(api.topics.get, {\n id: normalizedTopicId as Id<\"topics\">,\n })) as AnyRecord | null;\n return topic || null;\n } catch {\n return null;\n }\n}\n\nasync function tryGetNodeById(nodeId: string): Promise<AnyRecord | null> {\n try {\n const node = (await adminQuery(internal.epistemicNodes.getInternal, {\n nodeId: nodeId as any,\n })) as AnyRecord | null;\n return node || null;\n } catch {\n return null;\n }\n}\n\nasync function findTopicByMappedProjectId(\n legacyScopeId: string\n): Promise<AnyRecord | null> {\n try {\n const topics = (await adminQuery(api.topics.list, {})) as AnyRecord[];\n return (\n topics.find((topic) => readTopicMappedProjectId(topic) === legacyScopeId) ||\n null\n );\n } catch {\n return null;\n }\n}\n\nexport async function resolveTopicScopeContext(\n scopeId?: string\n): Promise<ScopeResolution> {\n const normalizedScopeId = decodePublicTopicId(scopeId);\n\n if (!isNonEmptyString(scopeId)) {\n if (isNonEmptyString(defaultTopicId)) {\n const defaultTopic = await tryGetTopicById(defaultTopicId);\n const mapped = defaultTopic\n ? readTopicMappedProjectId(defaultTopic)\n : undefined;\n return {\n inputScopeId: undefined,\n legacyScopeId: mapped || undefined,\n topicId: defaultTopicId || undefined,\n topicName: defaultTopic ? String(defaultTopic.name || \"\") : undefined,\n source: \"default_topic\",\n };\n }\n return { inputScopeId: undefined, source: \"unresolved\" };\n }\n\n const topic = normalizedScopeId\n ? await tryGetTopicById(normalizedScopeId)\n : null;\n if (topic) {\n const mapped = readTopicMappedProjectId(topic);\n if (mapped) {\n return {\n inputScopeId: scopeId,\n topicId: String(topic._id),\n topicName: String(topic.name || \"\"),\n legacyScopeId: mapped,\n source: \"topic_metadata\",\n };\n }\n\n return {\n inputScopeId: scopeId,\n topicId: String(topic._id),\n topicName: String(topic.name || \"\"),\n source: \"direct_topic\",\n };\n }\n\n const mappedTopic = normalizedScopeId\n ? await findTopicByMappedProjectId(normalizedScopeId)\n : null;\n if (mappedTopic) {\n return {\n inputScopeId: scopeId,\n topicId: String(mappedTopic._id),\n topicName: String(mappedTopic.name || \"\"),\n legacyScopeId: normalizedScopeId,\n source: \"legacy_project_alias\",\n };\n }\n\n const node = normalizedScopeId ? await tryGetNodeById(normalizedScopeId) : null;\n if (node) {\n const nodeTopicId = node.topicId;\n if (isNonEmptyString(nodeTopicId)) {\n const nodeTopic = await tryGetTopicById(nodeTopicId);\n const mapped = nodeTopic\n ? readTopicMappedProjectId(nodeTopic)\n : undefined;\n return {\n inputScopeId: scopeId,\n topicId: nodeTopicId,\n topicName: nodeTopic ? String(nodeTopic.name || \"\") : undefined,\n legacyScopeId: mapped,\n source: \"node_topic\",\n };\n }\n const nodeProjectId = node.projectId;\n if (isNonEmptyString(nodeProjectId)) {\n const mappedTopic = await findTopicByMappedProjectId(nodeProjectId);\n return {\n inputScopeId: scopeId,\n topicId: mappedTopic ? String(mappedTopic._id) : undefined,\n topicName: mappedTopic ? String(mappedTopic.name || \"\") : undefined,\n legacyScopeId: nodeProjectId,\n source: \"node_project\",\n };\n }\n }\n\n return {\n inputScopeId: scopeId,\n source: \"unresolved\",\n };\n}\n\nexport async function resolveTopicScopeId(\n scopeId: string | undefined,\n toolName: string\n): Promise<string> {\n let resolved: string | undefined;\n const normalizedScopeId = decodePublicTopicId(scopeId);\n\n if (!isNonEmptyString(scopeId)) {\n if (isNonEmptyString(defaultTopicId)) {\n resolved = defaultTopicId;\n } else {\n // Fall back to .lucern.json ambient context\n const lucernContext = readLucernJson();\n const ambientTopicId = decodePublicTopicId(lucernContext?.topicId);\n if (isNonEmptyString(ambientTopicId)) {\n resolved = ambientTopicId;\n }\n }\n if (!resolved) {\n throw new Error(\n `[${toolName}] Missing topic scope. Provide topicId.`\n );\n }\n }\n\n if (!resolved) {\n const topic = normalizedScopeId\n ? await tryGetTopicById(normalizedScopeId)\n : null;\n if (topic) {\n resolved = String(topic._id);\n }\n }\n\n if (!resolved) {\n const mappedTopic = normalizedScopeId\n ? await findTopicByMappedProjectId(normalizedScopeId)\n : null;\n if (mappedTopic) {\n resolved = String(mappedTopic._id);\n }\n }\n\n if (!resolved) {\n const node = normalizedScopeId\n ? await tryGetNodeById(normalizedScopeId)\n : null;\n if (node && isNonEmptyString(node.topicId)) {\n resolved = node.topicId;\n }\n }\n\n if (!resolved) {\n throw new Error(\n `[${toolName}] Scope \"${scopeId}\" is not a topic and has no mapped topic.`\n );\n }\n\n // Block 11D: Enforce topic-level access control.\n // Checks the session-level permitted topics set by setSessionTopicScope() at boot.\n // Agent sessions and admin sessions pass through (allowedTopics = null).\n // User sessions are restricted to their assigned topics via pack assignments.\n checkTopicScope(resolved, toolName);\n\n return resolved;\n}\n\nexport async function setDefaultScopeContext(\n scopeId: string\n): Promise<ScopeResolution> {\n const resolved = await resolveTopicScopeContext(scopeId);\n if (isNonEmptyString(resolved.topicId)) {\n defaultTopicId = decodePublicTopicId(resolved.topicId) || null;\n }\n return resolved;\n}\n\nexport function getDefaultScopeContext(): { topicId: string | null } {\n if (defaultTopicId) {\n return { topicId: defaultTopicId };\n }\n // Fall back to .lucern.json ambient context\n const lucernContext = readLucernJson();\n const ambientTopicId = decodePublicTopicId(lucernContext?.topicId);\n if (ambientTopicId) {\n return { topicId: ambientTopicId };\n }\n return { topicId: null };\n}\n","/**\n * Auto-Branching Handlers — analyze_topic_density, apply_auto_branching\n *\n * TC-C2: Density-based auto-branching for topic tree self-organization.\n * When a topic exceeds a belief density threshold, these tools detect\n * natural conceptual clusters via HYBRID clustering (semantic + structural)\n * and create subtopics to decompose the dense topic.\n *\n * Clustering strategy:\n * 1. Semantic similarity (PRIMARY) — cosine similarity between belief embeddings\n * 2. Structural edges (SECONDARY) — existing graph edges between beliefs\n * Both are combined into a weighted edge set for Louvain community detection.\n *\n * Advisory-first design: analyze_topic_density surfaces suggestions,\n * apply_auto_branching executes the decomposition after human approval.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { api } from \"../kernelApi.js\";\nimport { louvainCommunities } from \"../../../../modules/graph-intelligence/src/graphIntel/algorithms/louvain.js\";\nimport type { AnalysisEdge } from \"../../../../modules/graph-intelligence/src/graphIntel/types.js\";\nimport { adminMutation, adminQuery } from \"../convex-client.js\";\nimport { resolveTopicScopeId } from \"../scope.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\nconst DEFAULT_THRESHOLD = 10;\nconst DEFAULT_MIN_MODULARITY = 0.25;\n\n/**\n * Semantic similarity threshold for generating synthetic edges.\n * Belief pairs with cosine similarity >= this value get a synthetic edge.\n * 0.45 is calibrated to connect beliefs about the same concept without\n * connecting tangentially related beliefs.\n */\nconst SEMANTIC_SIMILARITY_THRESHOLD = 0.45;\n\n/**\n * Weight multiplier for semantic edges vs structural edges.\n * Semantic edges are the primary signal (beliefs about the same concept\n * cluster together even without explicit graph connections), so they get\n * higher weight than structural edges.\n */\nconst SEMANTIC_EDGE_WEIGHT = 1.5;\nconst STRUCTURAL_EDGE_WEIGHT = 1.0;\n\n/**\n * Fetch all belief nodes in a topic.\n */\nasync function getBeliefsByTopic(topicId: string): Promise<any[]> {\n return (await adminQuery(api.epistemicBeliefs.getByTopic, {\n topicId: topicId as any,\n })) as any[];\n}\n\n/**\n * Fetch belief-internal edges: edges where both endpoints are beliefs in the topic.\n * Uses api.epistemicEdges.getFromNode to query outbound edges for each belief,\n * filtering to edges where the target is also a belief in the set.\n * Louvain's buildLouvainGraph creates undirected adjacency from directed edges,\n * so we only need outbound edges to capture the full structure.\n */\nasync function getBeliefInternalEdges(\n beliefIdSet: Set<string>\n): Promise<AnalysisEdge[]> {\n const edgeMap = new Map<string, AnalysisEdge>();\n\n for (const nodeId of beliefIdSet) {\n try {\n const outbound = (await adminQuery(api.epistemicEdges.getFromNode, {\n fromNodeId: nodeId as any,\n })) as any[];\n\n for (const edge of outbound) {\n if (edge.toNodeId && beliefIdSet.has(String(edge.toNodeId))) {\n edgeMap.set(String(edge._id), {\n source: String(edge.fromNodeId),\n target: String(edge.toNodeId),\n edgeType: edge.edgeType || \"informs\",\n weight: edge.weight ?? 1.0,\n edgeConfidence: edge.edgeConfidence,\n reasoningMethod: edge.reasoningMethod,\n });\n }\n }\n } catch {\n // Skip nodes with edge query errors\n }\n }\n\n return Array.from(edgeMap.values());\n}\n\n// ── Semantic Similarity ──────────────────────────────────────────────────────\n\ntype BeliefEmbedding = {\n beliefId: string;\n embedding: number[];\n};\n\n/**\n * Fetch belief embeddings for a topic from epistemicNodeEmbeddings (spine-first).\n * Returns empty array if no embeddings exist.\n */\nasync function getBeliefEmbeddingsForTopic(topicId: string): Promise<BeliefEmbedding[]> {\n try {\n const results = (await adminQuery(\n api.embeddingQueries.getEpistemicNodeEmbeddingsByTopic,\n { topicId, nodeType: \"belief\" }\n )) as Array<{ beliefId: string; embedding: number[] }>;\n return results || [];\n } catch {\n return [];\n }\n}\n\n/**\n * Cosine similarity between two vectors.\n */\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length || a.length === 0) return 0;\n let dot = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n const denom = Math.sqrt(normA) * Math.sqrt(normB);\n return denom === 0 ? 0 : dot / denom;\n}\n\n/**\n * Generate synthetic edges from semantic similarity between belief embeddings.\n * Only creates edges for pairs above the similarity threshold.\n * These are the PRIMARY clustering signal — structural edges are secondary.\n */\nfunction generateSemanticEdges(\n embeddings: BeliefEmbedding[],\n beliefIdSet: Set<string>,\n threshold: number = SEMANTIC_SIMILARITY_THRESHOLD\n): AnalysisEdge[] {\n const edges: AnalysisEdge[] = [];\n\n // Filter to beliefs that are actually in the topic's belief set\n const relevant = embeddings.filter((e) => beliefIdSet.has(String(e.beliefId)));\n\n // Pairwise similarity — O(n^2) but n is small (10-50 beliefs max in a topic)\n for (let i = 0; i < relevant.length; i++) {\n for (let j = i + 1; j < relevant.length; j++) {\n const sim = cosineSimilarity(relevant[i].embedding, relevant[j].embedding);\n if (sim >= threshold) {\n edges.push({\n source: String(relevant[i].beliefId),\n target: String(relevant[j].beliefId),\n edgeType: \"semantic_similarity\",\n weight: sim * SEMANTIC_EDGE_WEIGHT,\n });\n }\n }\n }\n\n return edges;\n}\n\n/**\n * Scale structural edge weights to be consistent with semantic edge weights.\n */\nfunction scaleStructuralEdges(edges: AnalysisEdge[]): AnalysisEdge[] {\n return edges.map((e) => ({\n ...e,\n weight: (e.weight ?? 1.0) * STRUCTURAL_EDGE_WEIGHT,\n }));\n}\n\n/**\n * Generate a suggested name for a cluster based on its top beliefs.\n * Simple heuristic: extract common terms from belief titles.\n */\nfunction suggestClusterName(beliefs: any[], clusterIndex: number): string {\n if (beliefs.length === 0) {\n return `Cluster ${clusterIndex + 1}`;\n }\n\n // Use the highest-confidence belief's title as a base\n const sorted = [...beliefs].sort(\n (a, b) => (b.confidence ?? 0) - (a.confidence ?? 0)\n );\n const topBelief = sorted[0];\n const title = topBelief.title || topBelief.canonicalText?.slice(0, 80) || \"\";\n\n // Truncate to a reasonable name\n if (title.length <= 60) {\n return title;\n }\n return `${title.slice(0, 57)}...`;\n}\n\nexport const autoBranchingHandlers: HandlerModule = {\n /**\n * Analyze topic density and identify natural conceptual clusters.\n * Advisory only — returns suggestions for human review.\n */\n async analyze_topic_density(args, _ctx) {\n const topicId = await resolveTopicScopeId(\n args.topicId as string | undefined,\n \"analyze_topic_density\"\n );\n\n const threshold = (args.threshold as number) ?? DEFAULT_THRESHOLD;\n const minModularity =\n (args.minModularity as number) ?? DEFAULT_MIN_MODULARITY;\n\n // Get topic metadata\n const topic = (await adminQuery(api.topics.get, {\n id: topicId as any,\n })) as any;\n\n if (!topic) {\n return { error: `Topic not found: ${topicId}` };\n }\n\n // Get all beliefs in the topic\n const beliefs = await getBeliefsByTopic(topicId);\n const beliefCount = beliefs.length;\n\n // Early exit: not dense\n if (beliefCount < threshold) {\n return {\n topicId,\n topicName: topic.name,\n beliefCount,\n edgeCount: 0,\n threshold,\n isDense: false,\n modularity: 0,\n clusterCount: 0,\n clusters: [],\n recommendation: `Topic has ${beliefCount} beliefs (threshold: ${threshold}). No decomposition needed.`,\n };\n }\n\n // Build hybrid edge set: semantic (primary) + structural (secondary)\n const beliefNodeIds = beliefs.map((b: any) => String(b._id));\n const beliefIdSet = new Set(beliefNodeIds);\n\n // 1. Semantic edges from belief embeddings (PRIMARY signal)\n const embeddings = await getBeliefEmbeddingsForTopic(topicId);\n const semanticEdges = generateSemanticEdges(embeddings, beliefIdSet);\n\n // 2. Structural edges from graph connections (SECONDARY signal)\n const rawStructuralEdges = await getBeliefInternalEdges(beliefIdSet);\n const structuralEdges = scaleStructuralEdges(rawStructuralEdges);\n\n // 3. Merge: semantic + structural (deduplicate by taking max weight)\n const edgeKey = (s: string, t: string) =>\n s < t ? `${s}:${t}` : `${t}:${s}`;\n const edgeMap = new Map<string, AnalysisEdge>();\n\n for (const edge of [...semanticEdges, ...structuralEdges]) {\n const key = edgeKey(edge.source, edge.target);\n const existing = edgeMap.get(key);\n if (!existing || (edge.weight ?? 0) > (existing.weight ?? 0)) {\n edgeMap.set(key, edge);\n }\n }\n\n const edges = Array.from(edgeMap.values());\n\n // Run Louvain community detection on hybrid graph\n const {\n communities,\n modularity,\n count: clusterCount,\n } = louvainCommunities(beliefNodeIds, edges);\n\n // Group beliefs by cluster\n const clusterMap = new Map<number, any[]>();\n for (const belief of beliefs) {\n const clusterId = communities.get(String(belief._id)) ?? 0;\n if (!clusterMap.has(clusterId)) {\n clusterMap.set(clusterId, []);\n }\n clusterMap.get(clusterId)?.push(belief);\n }\n\n // Build cluster previews\n const clusters = Array.from(clusterMap.entries()).map(\n ([clusterId, clusterBeliefs]) => {\n const sorted = [...clusterBeliefs].sort(\n (a, b) => (b.confidence ?? 0) - (a.confidence ?? 0)\n );\n return {\n clusterId,\n beliefCount: clusterBeliefs.length,\n topBeliefs: sorted.slice(0, 5).map((b: any) => ({\n nodeId: String(b._id),\n title: b.title || (b.canonicalText?.slice(0, 100) ?? \"Untitled\"),\n confidence: b.confidence ?? null,\n })),\n allBeliefIds: clusterBeliefs.map((b: any) => String(b._id)),\n suggestedName: suggestClusterName(clusterBeliefs, clusterId),\n };\n }\n );\n\n // Sort clusters by size (largest first)\n clusters.sort((a, b) => b.beliefCount - a.beliefCount);\n\n // Determine recommendation\n let recommendation: string;\n if (modularity < minModularity) {\n recommendation = `Beliefs are densely connected but lack clear cluster structure (modularity: ${modularity.toFixed(3)} < ${minModularity}). Monitor but don't decompose yet.`;\n } else if (clusterCount <= 1) {\n recommendation =\n \"All beliefs form a single cluster. No natural decomposition found.\";\n } else {\n recommendation = `Found ${clusterCount} natural clusters with modularity ${modularity.toFixed(3)}. Recommend applying auto-branching to create subtopics.`;\n }\n\n return {\n topicId,\n topicName: topic.name,\n beliefCount,\n edgeCount: edges.length,\n semanticEdgeCount: semanticEdges.length,\n structuralEdgeCount: rawStructuralEdges.length,\n embeddingCoverage: `${embeddings.filter((e) => beliefIdSet.has(String(e.beliefId))).length}/${beliefCount}`,\n threshold,\n isDense: true,\n modularity: Number(modularity.toFixed(4)),\n clusterCount,\n clusters,\n recommendation,\n };\n },\n\n /**\n * Execute topic decomposition: create subtopics and reassign beliefs.\n * Requires prior analyze_topic_density call to identify clusters.\n */\n async apply_auto_branching(args, ctx) {\n const topicId = await resolveTopicScopeId(\n args.topicId as string | undefined,\n \"apply_auto_branching\"\n );\n const clusters = args.clusters as Array<{\n name: string;\n beliefIds: string[];\n }>;\n const dryRun = (args.dryRun as boolean) ?? false;\n\n if (!clusters || !Array.isArray(clusters) || clusters.length === 0) {\n return {\n error: \"clusters parameter is required and must be a non-empty array\",\n };\n }\n\n // Get parent topic\n const parentTopic = (await adminQuery(api.topics.get, {\n id: topicId as any,\n })) as any;\n\n if (!parentTopic) {\n return { error: `Parent topic not found: ${topicId}` };\n }\n\n if (dryRun) {\n return {\n success: true,\n dryRun: true,\n parentTopicId: topicId,\n parentTopicName: parentTopic.name,\n wouldCreate: clusters.map((c) => ({\n name: c.name,\n beliefCount: c.beliefIds.length,\n })),\n totalBeliefs: clusters.reduce((sum, c) => sum + c.beliefIds.length, 0),\n };\n }\n\n // Create subtopics and reassign beliefs\n const createdSubtopics: Array<{\n topicId: string;\n globalId: string;\n name: string;\n beliefCount: number;\n reassigned: number;\n skipped: number;\n }> = [];\n\n let totalReassigned = 0;\n let totalSkipped = 0;\n\n for (const cluster of clusters) {\n // 1. Create the subtopic in the topics table\n const result = (await adminMutation(api.topics.create, {\n name: cluster.name,\n type: parentTopic.type || \"domain\",\n description: `Auto-branched from \"${parentTopic.name}\" via density-based decomposition (TC-C2)`,\n parentTopicId: topicId as any,\n createdBy: ctx.userId || \"system:auto-branching\",\n })) as any;\n\n // 2. Create corresponding epistemicNode (nodeType: \"topic\") so the graph\n // explorer can see the new subtopic. Without this, the subtopic only\n // exists in the topics table and is invisible to the graph.\n const contentHash = createHash(\"sha256\")\n .update(`topic:${cluster.name}`)\n .digest(\"hex\");\n const globalId = `topic_${contentHash.slice(0, 12)}`;\n try {\n await adminMutation(api.epistemicNodes.create, {\n globalId,\n nodeType: \"topic\" as any,\n canonicalText: cluster.name,\n contentHash,\n title: cluster.name.slice(0, 100),\n sourceType: \"system\" as any,\n createdBy: ctx.userId || \"system:auto-branching\",\n topicId: topicId as any, // Parent topic — places this node in the tree\n metadata: {\n topicTableId: String(result.id),\n autoBranched: true,\n parentTopicName: parentTopic.name,\n },\n });\n } catch {\n // Non-fatal — the subtopic still exists in the topics table\n }\n\n // 3. Reassign beliefs (and connected nodes) to the new subtopic\n const reassignResult = (await adminMutation(\n (api.epistemicBeliefs as any).reassignBeliefsTopic,\n {\n beliefNodeIds: cluster.beliefIds,\n targetTopicId: result.id,\n reason: `Auto-branching from topic \"${parentTopic.name}\" — cluster \"${cluster.name}\"`,\n }\n )) as any;\n\n const reassigned = reassignResult?.reassigned ?? 0;\n const skipped = reassignResult?.skipped ?? 0;\n\n createdSubtopics.push({\n topicId: String(result.id),\n globalId: result.globalId ?? globalId,\n name: cluster.name,\n beliefCount: cluster.beliefIds.length,\n reassigned,\n skipped,\n });\n\n totalReassigned += reassigned;\n totalSkipped += skipped;\n }\n\n return {\n success: true,\n dryRun: false,\n parentTopicId: topicId,\n parentTopicName: parentTopic.name,\n createdSubtopics,\n totalReassigned,\n totalSkipped,\n };\n },\n};\n","/**\n * Bootstrap Handlers — generate_session_handoff\n *\n * Generates complete, zero-context handoff instructions for new Claude Code sessions.\n * Solves the cold-start problem: a fresh session gets everything it needs to be\n * fully operational on a Lucern worktree in a single copy-paste.\n *\n * Follows the 3-Phase Development Loop (Context → Execute → Close) with\n * tiered ceremony (Light worktrees = solo OK, Full = multi-agent team).\n *\n * The handoff includes:\n * 0. Session root verification (MCP availability)\n * 1. Git setup (create worktree or fast-forward existing)\n * 2. MCP initialization (begin_build_session / compile_context with parameters)\n * 3. Lucern worktree activation (if needed)\n * 4. Graph neighborhood + question engagement\n * 5. Development loop (3-phase + tiered ceremony)\n * 6. Task scope (hypothesis, deliverables, beliefs, questions)\n * 7. Track boundaries (what to do, what NOT to do)\n * 8. Close — writeback (Light vs Full checklists)\n */\n\nimport { api } from \"../kernelApi.js\";\nimport { adminQuery, adminMutation } from \"../convex-client.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\ntype AnyRecord = Record<string, unknown>;\n\n// ── Helpers ────────────────────────────────────────────────────────────────────\n\nfunction slugify(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n .slice(0, 40);\n}\n\nfunction statusEmoji(status: string): string {\n switch (status) {\n case \"completed\":\n case \"merged\":\n return \"✅\";\n case \"active\":\n return \"🟡\";\n case \"planning\":\n return \"📋\";\n default:\n return \"⬜\";\n }\n}\n\n/**\n * Resolve beliefs by nodeId — returns text summaries for the handoff.\n */\nasync function resolveBeliefs(\n nodeIds: string[]\n): Promise<Array<{ nodeId: string; text: string; confidence: number | null }>> {\n const results: Array<{\n nodeId: string;\n text: string;\n confidence: number | null;\n }> = [];\n for (const nodeId of nodeIds.slice(0, 10)) {\n try {\n const node = (await adminQuery(api.epistemicNodes.get, {\n nodeId: nodeId as any,\n })) as AnyRecord | null;\n if (node) {\n results.push({\n nodeId,\n text: String(node.canonicalText || \"\").slice(0, 200),\n confidence:\n typeof node.confidence === \"number\" ? node.confidence : null,\n });\n }\n } catch {\n // Skip unresolvable beliefs\n }\n }\n return results;\n}\n\n/**\n * Resolve questions by nodeId — returns text summaries for the handoff.\n */\nasync function resolveQuestions(\n nodeIds: string[]\n): Promise<\n Array<{ nodeId: string; text: string; status: string; priority: string }>\n> {\n const results: Array<{\n nodeId: string;\n text: string;\n status: string;\n priority: string;\n }> = [];\n for (const nodeId of nodeIds.slice(0, 10)) {\n try {\n const node = (await adminQuery(api.epistemicNodes.get, {\n nodeId: nodeId as any,\n })) as AnyRecord | null;\n if (node) {\n const metadata = (node.metadata || {}) as AnyRecord;\n results.push({\n nodeId,\n text: String(node.canonicalText || \"\").slice(0, 200),\n status: String(metadata.questionStatus || node.status || \"open\"),\n priority: String(metadata.priority || \"medium\"),\n });\n }\n } catch {\n // Skip unresolvable questions\n }\n }\n return results;\n}\n\n// ── Main Handler ───────────────────────────────────────────────────────────────\n\nexport const bootstrapHandlers: HandlerModule = {\n async generate_session_handoff(args, _ctx) {\n const worktreeId = args.worktreeId as string;\n if (!worktreeId) {\n throw new Error(\"[generate_session_handoff] worktreeId is required\");\n }\n\n const gitWorktreePath = args.gitWorktreePath as string | undefined;\n const gitBranchName = args.gitBranchName as string | undefined;\n const additionalContext = args.additionalContext as string | undefined;\n\n // ── 1. Fetch worktree metadata ──────────────────────────────────────────\n let worktree: AnyRecord;\n try {\n const result = await adminQuery(api.worktrees.get, {\n worktreeId: worktreeId as any,\n });\n if (!result) {\n throw new Error(`Worktree ${worktreeId} not found`);\n }\n worktree = result as AnyRecord;\n } catch (err) {\n throw new Error(\n `[generate_session_handoff] Failed to fetch worktree ${worktreeId}: ${err instanceof Error ? err.message : err}`\n );\n }\n\n const worktreeName = String(worktree.name || \"Untitled Worktree\");\n const topicId = String(worktree.topicId || \"\");\n const track = String(worktree.track || \"untracked\");\n const trackPosition = worktree.trackPosition as number | undefined;\n const executionBand = worktree.executionBand as number | undefined;\n const hypothesis = String(\n worktree.hypothesis || worktree.beliefFocus || \"\"\n );\n const objective = String(worktree.objective || worktreeName);\n const status = String(worktree.status || \"planning\");\n const dependsOn = (worktree.dependsOn as string[]) || [];\n const blocks = (worktree.blocks as string[]) || [];\n const gate = worktree.gate as string | undefined;\n const targetBeliefIds = (worktree.targetBeliefIds as string[]) || [];\n const targetQuestionIds = (worktree.targetQuestionIds as string[]) || [];\n\n // ── 2. Fetch topic name ─────────────────────────────────────────────────\n let topicName = \"Unknown\";\n try {\n const topic = await adminQuery(api.topics.get, {\n id: topicId as any,\n });\n if (topic && typeof topic === \"object\") {\n topicName = String((topic as AnyRecord).name || \"Unknown\");\n }\n } catch {\n // Non-critical\n }\n\n // ── 3. Fetch track sibling worktrees (for boundary analysis) ────────────\n let trackWorktrees: AnyRecord[] = [];\n try {\n const all = (await adminQuery(api.worktrees.listAll, {\n track,\n })) as AnyRecord[];\n trackWorktrees = all.sort(\n (a, b) =>\n ((a.trackPosition as number) || 0) -\n ((b.trackPosition as number) || 0)\n );\n } catch {\n // Non-critical — track boundaries just won't be available\n }\n\n // ── 4. Fetch dependency worktree details ────────────────────────────────\n const depDetails: Array<{\n id: string;\n name: string;\n status: string;\n track: string;\n }> = [];\n for (const depId of dependsOn) {\n try {\n const dep = (await adminQuery(api.worktrees.get, {\n worktreeId: depId as any,\n })) as AnyRecord | null;\n if (dep) {\n depDetails.push({\n id: depId,\n name: String(dep.name || \"Unknown\"),\n status: String(dep.status || \"unknown\"),\n track: String(dep.track || \"untracked\"),\n });\n }\n } catch {\n depDetails.push({\n id: depId,\n name: \"Unknown\",\n status: \"unknown\",\n track: \"unknown\",\n });\n }\n }\n\n // ── 5. Fetch blocked-by worktree details ────────────────────────────────\n const blockDetails: Array<{\n id: string;\n name: string;\n status: string;\n track: string;\n }> = [];\n for (const blockId of blocks) {\n try {\n const blk = (await adminQuery(api.worktrees.get, {\n worktreeId: blockId as any,\n })) as AnyRecord | null;\n if (blk) {\n blockDetails.push({\n id: blockId,\n name: String(blk.name || \"Unknown\"),\n status: String(blk.status || \"unknown\"),\n track: String(blk.track || \"untracked\"),\n });\n }\n } catch {\n blockDetails.push({\n id: blockId,\n name: \"Unknown\",\n status: \"unknown\",\n track: \"unknown\",\n });\n }\n }\n\n // ── 6. Resolve beliefs and questions for task scope ─────────────────────\n const beliefs = await resolveBeliefs(targetBeliefIds);\n const questions = await resolveQuestions(targetQuestionIds);\n\n // ── 6b. Fetch ALL open questions from the topic (not just worktree targets)\n // This ensures the handoff surfaces questions that need discussion even if\n // they weren't explicitly linked to the worktree.\n const topicOpenQuestions: Array<{\n nodeId: string;\n text: string;\n priority: string;\n }> = [];\n try {\n const allQuestions = await adminQuery(api.epistemicQuestions.getByTopic, {\n topicId: topicId as any,\n userId: \"system\",\n limit: 50,\n }).catch(() => []);\n for (const q of Array.isArray(allQuestions) ? allQuestions : []) {\n const metadata = (q.metadata || {}) as AnyRecord;\n const qStatus = String(\n metadata.questionStatus || q.status || \"open\"\n ).toLowerCase();\n if (\n qStatus === \"open\" ||\n qStatus === \"in_progress\" ||\n qStatus === \"active\"\n ) {\n // Skip questions already in the worktree targets (avoid duplicates)\n const qId = String(q._id);\n if (!targetQuestionIds.includes(qId)) {\n topicOpenQuestions.push({\n nodeId: qId,\n text: String(q.canonicalText || \"\").slice(0, 250),\n priority: String(metadata.priority || \"medium\"),\n });\n }\n }\n }\n // Sort by priority: critical > high > medium > low\n const priorityOrder: Record<string, number> = {\n critical: 0,\n high: 1,\n medium: 2,\n low: 3,\n };\n topicOpenQuestions.sort(\n (a, b) =>\n (priorityOrder[a.priority] ?? 3) - (priorityOrder[b.priority] ?? 3)\n );\n } catch {\n // Non-critical — topic questions just won't be available\n }\n\n // ── 7. Compute track boundaries ─────────────────────────────────────────\n // Find which worktrees on this track can be done solo (no cross-track deps)\n const currentPos = trackPosition ?? 0;\n const soloWorktrees: string[] = [worktreeName];\n const blockedWorktrees: Array<{ name: string; reason: string }> = [];\n\n for (const tw of trackWorktrees) {\n const twPos = (tw.trackPosition as number) || 0;\n if (twPos <= currentPos) {\n continue; // Skip current and earlier\n }\n\n const twDeps = (tw.dependsOn as string[]) || [];\n // Check if this worktree depends on anything outside our track\n const crossTrackDeps = twDeps.filter((depId) => {\n const dep = depDetails.find((d) => d.id === depId);\n if (dep) {\n return dep.track !== track;\n }\n // Check if the dep is in our track worktrees\n return !trackWorktrees.some((ttw) => String(ttw._id) === depId);\n });\n\n if (crossTrackDeps.length > 0) {\n blockedWorktrees.push({\n name: String(tw.name || \"Unknown\"),\n reason:\n \"Cross-track dependency: needs worktrees from other tracks to complete first\",\n });\n break; // Everything after is also blocked\n }\n soloWorktrees.push(String(tw.name || \"Unknown\"));\n }\n\n const trackBoundary = {\n canDo: soloWorktrees,\n cannotDo: blockedWorktrees.map((b) => `${b.name} (${b.reason})`),\n maxSoloRun: `${soloWorktrees.length} worktree${soloWorktrees.length > 1 ? \"s\" : \"\"}: ${soloWorktrees.join(\" → \")}`,\n };\n\n // ── 8. Compute git setup instructions ───────────────────────────────────\n const needsActivation = status === \"planning\";\n const slug = slugify(worktreeName);\n const effectiveBranch = gitBranchName || `claude/${slug}`;\n const effectivePath = gitWorktreePath || `.claude/worktrees/${slug}`;\n\n let gitSetupType: \"create\" | \"fast-forward\" | \"ready\";\n let gitSetupInstructions: string;\n\n if (gitWorktreePath) {\n // Existing worktree — needs fast-forward\n gitSetupType = \"fast-forward\";\n gitSetupInstructions = [\n \"You have an existing git worktree that may be BEHIND main. Fast-forward it:\",\n \"\",\n \"```bash\",\n `cd /Users/petercasella/front-end/${gitWorktreePath}`,\n \"git fetch origin main\",\n \"git merge origin/main\",\n \"```\",\n \"\",\n \"After this, verify you have the latest changes:\",\n \"```bash\",\n \"git log --oneline -1\",\n \"```\",\n \"\",\n \"Your working directory for ALL code changes is:\",\n `\\`/Users/petercasella/front-end/${gitWorktreePath}\\``,\n \"\",\n `Your git branch is \\`${effectiveBranch}\\`. All commits go here — NEVER push to main directly.`,\n ].join(\"\\n\");\n } else {\n // No worktree — needs creation\n gitSetupType = \"create\";\n gitSetupInstructions = [\n \"Create a new git worktree for this task. Run this from the main repo:\",\n \"\",\n \"```bash\",\n \"cd /Users/petercasella/front-end\",\n `git worktree add ${effectivePath} -b ${effectiveBranch}`,\n \"```\",\n \"\",\n \"Your working directory for ALL code changes is:\",\n `\\`/Users/petercasella/front-end/${effectivePath}\\``,\n \"\",\n `Your git branch is \\`${effectiveBranch}\\`. All commits go here — NEVER push to main directly.`,\n \"\",\n \"After creating the worktree, verify it's on the latest main:\",\n \"```bash\",\n `cd /Users/petercasella/front-end/${effectivePath}`,\n \"git log --oneline -1\",\n \"```\",\n ].join(\"\\n\");\n }\n\n // ── 9. Generate the handoff message ─────────────────────────────────────\n const sections: string[] = [];\n\n // Header\n sections.push(`# Task: ${worktreeName}`);\n sections.push(\"\");\n sections.push(\n \"You are picking up a development task in the StackOS codebase. \" +\n \"Follow these steps to set up your context (Phase 1), \" +\n \"then execute (Phase 2), then close with graph writeback (Phase 3).\"\n );\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 0: Session Root (CRITICAL for MCP)\n sections.push(\"\");\n sections.push(\n \"## ⛔ CRITICAL: Session Must Be Opened From The Main Repo Root\"\n );\n sections.push(\"\");\n sections.push(\n \"This session MUST be running from `/Users/petercasella/front-end` (the main repo root). \" +\n \"The `.mcp.json` file that configures the Lucern reasoning graph MCP server lives there. \" +\n \"If you opened this session from a git worktree subdirectory, the MCP tools \" +\n \"(`mcp__lucern-graph__*`) will NOT be available and you cannot proceed.\"\n );\n sections.push(\"\");\n sections.push(\n \"**Verify:** Check that `mcp__lucern-graph__begin_build_session` or `mcp__lucern-graph__compile_context` appears in your available tools. \" +\n \"If it does NOT, this session must be restarted from the main repo root.\"\n );\n sections.push(\"\");\n sections.push(\n \"You will use the git worktree directory (shown in Step 1) as your WORKING DIRECTORY for \" +\n \"code changes, but the Claude Code session itself must be rooted at the main repo.\"\n );\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 1: Git Setup\n sections.push(\"\");\n sections.push(\"## STEP 1: Git Setup (you MUST do this first)\");\n sections.push(\"\");\n sections.push(gitSetupInstructions);\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 2: MCP Initialization\n sections.push(\"\");\n sections.push(\n \"## STEP 2: Initialize the Lucern Reasoning Graph (MANDATORY before any work)\"\n );\n sections.push(\"\");\n sections.push(\n 'This codebase uses a \"reasoning graph\" — a knowledge base of beliefs, evidence, ' +\n \"questions, and decisions stored in a Convex database. You interact with it through \" +\n \"MCP tools prefixed with `mcp__lucern-graph__`.\"\n );\n sections.push(\"\");\n sections.push(\"**Call this MCP tool NOW as your very first action:**\");\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(\"Tool: mcp__lucern-graph__begin_build_session\");\n sections.push(\"Parameters:\");\n sections.push(` worktreeId: \"${worktreeId}\"`);\n sections.push(\"```\");\n sections.push(\"\");\n sections.push(\"This returns:\");\n sections.push(\"- The reasoning protocol (how to use all the graph tools)\");\n sections.push(\"- Active worktrees and their status\");\n sections.push(\"- Open questions and beliefs relevant to your query\");\n sections.push(\n \"- Any previously failed approaches (so you don't repeat them)\"\n );\n sections.push(\"\");\n sections.push(\n \"**READ the entire response carefully.** It contains the graph's current knowledge about your task — \" +\n \"beliefs that are settled (high confidence = constraints you must respect), \" +\n \"questions that are open (things to investigate), and contradictions (tensions to work within).\"\n );\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 3: Worktree Activation\n sections.push(\"\");\n sections.push(\"## STEP 3: Activate the Lucern Worktree\");\n sections.push(\"\");\n sections.push(\n 'A \"Lucern worktree\" is a focused investigation scope in the reasoning graph — ' +\n \"it tracks which beliefs and questions you're working on. \" +\n \"Your worktree already exists in the graph.\"\n );\n sections.push(\"\");\n sections.push(`**Your Lucern worktree ID is: \\`${worktreeId}\\`**`);\n sections.push(`**Name: \"${worktreeName}\"**`);\n sections.push(`**Current status: ${status}**`);\n\n if (needsActivation) {\n sections.push(\"\");\n sections.push(\n 'Your worktree is in \"planning\" status and needs to be ACTIVATED before you can work on it.'\n );\n sections.push(\"\");\n sections.push(\"Activate it now:\");\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(\"Tool: mcp__lucern-graph__activate_worktree\");\n sections.push(\"Parameters:\");\n sections.push(` worktreeId: \"${worktreeId}\"`);\n sections.push(\"```\");\n sections.push(\"\");\n sections.push(\"After activation, verify it shows as active:\");\n } else {\n sections.push(\"\");\n sections.push(\"Your worktree is already active. Verify it's loaded:\");\n }\n\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(\"Tool: mcp__lucern-graph__list_worktrees\");\n sections.push(\"Parameters:\");\n sections.push(` topicId: \"${topicId}\"`);\n sections.push(' status: \"active\"');\n sections.push(\"```\");\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 4: Graph Neighborhood\n sections.push(\"\");\n sections.push(\"## STEP 4: Read Your Graph Neighborhood\");\n sections.push(\"\");\n sections.push(\n \"Before writing any code, understand what the graph already knows:\"\n );\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(\"Tool: mcp__lucern-graph__compile_context\");\n sections.push(\"Parameters:\");\n sections.push(` topicId: \"${topicId}\"`);\n sections.push(` query: \"${hypothesis.slice(0, 80)}\"`);\n sections.push(' ranking: \"weighted_v1\"');\n sections.push(\"```\");\n sections.push(\"\");\n sections.push(\"Also check for previously failed approaches:\");\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(\"Tool: mcp__lucern-graph__get_failure_log\");\n sections.push(\"Parameters:\");\n sections.push(` query: \"${hypothesis.slice(0, 80)}\"`);\n sections.push(\"```\");\n sections.push(\"\");\n sections.push(\"And check open questions:\");\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(\"Tool: mcp__lucern-graph__list_questions\");\n sections.push(\"Parameters:\");\n sections.push(` topicId: \"${topicId}\"`);\n sections.push(' status: \"open\"');\n sections.push(\"```\");\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 4b: Question Engagement\n sections.push(\"\");\n sections.push(\"## STEP 4b: Question Engagement\");\n sections.push(\"\");\n sections.push(\n \"**The graph contains open questions that may affect your implementation.** \" +\n \"Engage with these questions — not just read them.\"\n );\n sections.push(\"\");\n sections.push(\"**Categorize each open question:**\");\n sections.push(\"\");\n sections.push(\"| Category | When to Use | Action |\");\n sections.push(\"|----------|-------------|--------|\");\n sections.push(\n \"| **Needs User Decision** (DEFAULT) | Direction, approach, tradeoffs, architecture, preferences | Present to user with 2-3 options + your recommendation |\"\n );\n sections.push(\n '| **Answer Now** | Code-verifiable facts (deterministic from grep, read, graph lookup) | `create_answer` + `update_question_status(\"answered\")` with evidence |'\n );\n sections.push(\n \"| **Deferred** | Out of scope for this worktree | Document why |\"\n );\n sections.push(\"\");\n sections.push(\n \"**⚠️ ANTI-PATTERN: Do NOT auto-answer directional questions.** \" +\n \"Being able to generate a plausible answer ≠ being authorized to decide. \" +\n \"Users choose direction; agents provide analysis and options.\"\n );\n sections.push(\"\");\n sections.push(\n \"**Soft gate for async sessions:** If the user is unavailable and questions need decisions, \" +\n \"proceed with the most reasonable default option. Record it as a **hypothesis belief at 0.65 credence** \" +\n \"flagged for user confirmation. The graph preserves the assumption — future sessions can correct it.\"\n );\n sections.push(\"\");\n\n // Include worktree target questions\n if (questions.length > 0) {\n sections.push(\n \"**Worktree-scoped questions (these are YOUR responsibility):**\"\n );\n for (const q of questions) {\n sections.push(`- **[${q.priority.toUpperCase()}]** ${q.text}`);\n sections.push(` → ID: \\`${q.nodeId}\\` | Status: ${q.status}`);\n }\n sections.push(\"\");\n }\n\n // Include topic-level open questions\n if (topicOpenQuestions.length > 0) {\n sections.push(\n \"**Topic-level open questions (review for relevance to your work):**\"\n );\n for (const q of topicOpenQuestions.slice(0, 10)) {\n sections.push(`- **[${q.priority.toUpperCase()}]** ${q.text}`);\n sections.push(` → ID: \\`${q.nodeId}\\``);\n }\n sections.push(\"\");\n }\n\n if (questions.length === 0 && topicOpenQuestions.length === 0) {\n sections.push(\n \"*No open questions found. If your implementation surfaces unknowns or design decisions, \" +\n \"create new questions with `create_question`.*\"\n );\n sections.push(\"\");\n }\n\n sections.push(\n \"**Present 'Needs User Decision' questions to the user before planning.** \" +\n \"If the user is unavailable, proceed with hypothesis defaults at 0.65 credence.\"\n );\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 5: Development Loop + Team Setup (3-Phase with tiered ceremony)\n sections.push(\"\");\n sections.push(\"## STEP 5: Development Loop\");\n sections.push(\"\");\n sections.push(\"**The 3-Phase Development Loop:**\");\n sections.push(\"```\");\n sections.push(\n \"Phase 1: CONTEXT — Initialize graph, read context, engage questions (DONE — Steps 1-4b above)\"\n );\n sections.push(\"Phase 2: EXECUTE — Plan, build in parallel, ship PR\");\n sections.push(\"Phase 3: CLOSE — Session-end writeback quality gate\");\n sections.push(\"```\");\n sections.push(\"\");\n sections.push(\"### Tiered Ceremony\");\n sections.push(\"\");\n sections.push(\"| | Light | Full |\");\n sections.push(\"|---|---|---|\");\n sections.push(\n \"| **Criteria** | ≤3 tasks, ≤500 lines, no architectural questions | >3 tasks, cross-domain, architectural decisions |\"\n );\n sections.push(\n \"| **Team** | Solo session allowed | Multi-agent team required |\"\n );\n sections.push(\n \"| **Close** | Scope learning + confidence modulations | Full writeback checklist |\"\n );\n sections.push(\"\");\n sections.push(\n \"**If this is a Full worktree**, spawn your agent team using the Task tool:\"\n );\n sections.push(\"\");\n sections.push(\"| Scope | Agents |\");\n sections.push(\"|-------|--------|\");\n sections.push(\n \"| Schema/backend | convex-backend (Opus), testing-qa (Opus) |\"\n );\n sections.push(\n \"| Full-stack feature | convex-backend (Opus), frontend-ui (Opus), testing-qa (Opus) |\"\n );\n sections.push(\n \"| MCP/SDK work | convex-backend (Opus), ai-tools (Opus), testing-qa (Opus) |\"\n );\n sections.push(\n \"| Epistemic spine | epistemic-system (Opus), convex-backend (Opus), testing-qa (Opus) |\"\n );\n sections.push(\"\");\n sections.push(\"**During Execute, every agent MUST:**\");\n sections.push(\n \"- `create_task` for every TODO, deferred work, or future step\"\n );\n sections.push(\"- `record_attempt` immediately when an approach fails\");\n sections.push(\"- `create_question` for unanswered design decisions\");\n sections.push(\"- `create_belief` for architectural decisions made\");\n sections.push(\"\");\n sections.push(\n \"**Cross-model review** (optional — for security-critical, schema, or invariant changes):\"\n );\n sections.push(\"```bash\");\n sections.push(\"npx @openai/codex review --base main\");\n sections.push(\"```\");\n sections.push(\"Skip for routine feature work.\");\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 6: Task Scope (was STEP 5)\n sections.push(\"\");\n sections.push(\"## STEP 6: Your Task — What to Build\");\n sections.push(\"\");\n if (hypothesis) {\n sections.push(`**Hypothesis:** ${hypothesis}`);\n sections.push(\"\");\n }\n if (objective && objective !== worktreeName) {\n sections.push(`**Objective:** ${objective}`);\n sections.push(\"\");\n }\n\n // Belief focus area\n if (worktree.beliefFocus && worktree.beliefFocus !== hypothesis) {\n sections.push(`**Focus:** ${String(worktree.beliefFocus).slice(0, 300)}`);\n sections.push(\"\");\n }\n\n // Dependencies\n if (depDetails.length > 0) {\n sections.push(\"**Dependencies (must be complete before you start):**\");\n for (const dep of depDetails) {\n sections.push(\n `- ${statusEmoji(dep.status)} ${dep.name} (${dep.status}) — track: ${dep.track}`\n );\n }\n sections.push(\"\");\n }\n\n // Target beliefs\n if (beliefs.length > 0) {\n sections.push(\n \"**Key beliefs to validate/investigate** (from the reasoning graph):\"\n );\n for (const b of beliefs) {\n const conf = b.confidence !== null ? ` [${b.confidence}]` : \"\";\n sections.push(`- ${b.text}${conf}`);\n }\n sections.push(\"\");\n }\n\n // Target questions\n if (questions.length > 0) {\n sections.push(\"**Open questions to answer:**\");\n for (const q of questions) {\n sections.push(`- [${q.priority}] ${q.text}`);\n }\n sections.push(\"\");\n }\n\n // Additional context from the caller\n if (additionalContext) {\n sections.push(\"**Additional context:**\");\n sections.push(additionalContext);\n sections.push(\"\");\n }\n\n sections.push(\"---\");\n\n // STEP 7: Track Boundaries\n sections.push(\"\");\n sections.push(\"## STEP 7: Track Boundaries — Where to STOP\");\n sections.push(\"\");\n sections.push(\n `You are on the **${track}** track, position ${trackPosition ?? \"unset\"} (${worktreeName.split(\":\")[0]}).`\n );\n\n if (executionBand !== undefined) {\n sections.push(`Execution band: ${executionBand}.`);\n }\n sections.push(\"\");\n\n // What you CAN do\n sections.push(`**You CAN do:** ${trackBoundary.canDo.join(\" → \")}`);\n sections.push(\"\");\n\n // What you CANNOT do\n if (trackBoundary.cannotDo.length > 0) {\n sections.push(\"**You CANNOT do:**\");\n for (const item of trackBoundary.cannotDo) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n }\n\n // What this worktree blocks\n if (blockDetails.length > 0) {\n sections.push(\n \"**Your work unblocks these worktrees** (they depend on your completion):\"\n );\n for (const blk of blockDetails) {\n sections.push(`- ${blk.name} (${blk.status}) — track: ${blk.track}`);\n }\n sections.push(\"\");\n }\n\n // Track map\n if (trackWorktrees.length > 1) {\n sections.push(`**Full ${track} track map:**`);\n for (const tw of trackWorktrees) {\n const isCurrent = String(tw._id) === worktreeId;\n const marker = isCurrent ? \" ← YOU ARE HERE\" : \"\";\n sections.push(\n `${statusEmoji(String(tw.status))} [pos ${tw.trackPosition ?? \"?\"}] ${tw.name}${marker}`\n );\n }\n sections.push(\"\");\n }\n\n sections.push(\"**After completing this worktree (Ship flow):**\");\n sections.push(\"1. Create commit and push branch\");\n sections.push(\n `2. Create PR: \\`gh pr create\\` from \\`${effectiveBranch}\\` to \\`main\\``\n );\n sections.push(\n \"3. Merge Lucern worktree: `merge(worktreeId, outcomes, summary)` → status flips to `completed`\"\n );\n sections.push(\"4. Write back to graph (see Step 8 below)\");\n sections.push(\n '5. Notify PM: `send_agent_message` with `messageType: \"handoff\"`'\n );\n sections.push(\"\");\n sections.push(\"---\");\n\n // STEP 8: Close — Writeback (tiered: Light vs Full)\n sections.push(\"\");\n sections.push(\"## STEP 8: Close — Writing Back to the Graph\");\n sections.push(\"\");\n sections.push(\n \"**The graph is the primary deliverable. Code is evidence.** \" +\n \"Your PR is NOT complete until the graph reflects what you learned.\"\n );\n sections.push(\"\");\n sections.push(\"### Full Worktree Checklist:\");\n sections.push(\"\");\n sections.push(\"| Check | Requirement |\");\n sections.push(\"|-------|-------------|\");\n sections.push(\n \"| Scope learnings recorded | Every commit with SHA + touched file paths via `record_scope_learning` |\"\n );\n sections.push(\n \"| New beliefs created | ≥1 per worktree (architectural decisions) via `create_belief` + `modulate_confidence` |\"\n );\n sections.push(\n '| Questions answered | All questions resolved by code via `create_answer` + `update_question_status(\"answered\")` |'\n );\n sections.push(\n \"| New questions created | Any unknowns discovered during build via `create_question` |\"\n );\n sections.push(\n \"| Confidence modulated | Every touched belief updated via `modulate_confidence` |\"\n );\n sections.push(\n \"| Failed approaches logged | Every dead end recorded via `record_attempt` |\"\n );\n sections.push(\"| TODO/deferred work | All → `create_task` in graph |\");\n sections.push(\"| Worktree status | Confirmed `completed` via `merge` |\");\n sections.push(\n \"| Seed next worktree | Link questions, beliefs, tasks to next in sequence |\"\n );\n sections.push(\"\");\n sections.push(\"### Light Worktree Checklist:\");\n sections.push(\"\");\n sections.push(\"| Check | Requirement |\");\n sections.push(\"|-------|-------------|\");\n sections.push(\n \"| Scope learnings recorded | At least 1 with commit SHA + touched paths |\"\n );\n sections.push(\"| Confidence modulated | Every touched belief updated |\");\n sections.push(\"| Failed approaches logged | If any |\");\n sections.push(\"| Worktree status | Confirmed `completed` |\");\n sections.push(\"\");\n sections.push(\n \"**The graph compounds with every session.** If you skip writeback, the next session starts cold. \" +\n \"If you write back thoroughly, the next session inherits everything you learned.\"\n );\n sections.push(\"\");\n sections.push(\"---\");\n\n // Deploy rules\n sections.push(\"\");\n sections.push(\"## Deploy Rules\");\n sections.push(\"\");\n sections.push(\"- NEVER run `pnpm` — it crashes the terminal\");\n sections.push(\"- Convex dev deploy: `npx convex dev --once`\");\n sections.push(\"- TypeScript check: `npx tsc --noEmit`\");\n sections.push(\"- Tests: `npx vitest run`\");\n sections.push(\n \"- Lucern deployment (good-blackbird-774): use `--env-file .env.lucern`\"\n );\n\n // Exit gate (if present)\n if (gate) {\n sections.push(\"\");\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(`## Exit Gate: \\`${gate}\\``);\n sections.push(\"\");\n sections.push(\n \"This worktree has a named exit gate. \" +\n \"The gate condition must be satisfied before the worktree can be considered complete. \" +\n \"Check the reasoning graph for the gate's requirements.\"\n );\n }\n\n // ── 10. Assemble the final handoff ──────────────────────────────────────\n const handoffMessage = sections.join(\"\\n\");\n\n return {\n handoffMessage,\n worktreeId,\n worktreeName,\n topicId,\n topicName,\n track,\n trackPosition: trackPosition ?? null,\n executionBand: executionBand ?? null,\n status,\n needsActivation,\n needsGitSetup: gitSetupType,\n gitBranch: effectiveBranch,\n gitPath: effectivePath,\n trackBoundary,\n dependencyStatus: depDetails,\n targetBeliefCount: targetBeliefIds.length,\n targetQuestionCount: targetQuestionIds.length,\n };\n },\n\n // ── begin_build_session ──────────────────────────────────────────────────\n // Compact JSON build packet for Codex sessions. No markdown, no prose.\n async begin_build_session(args, _ctx) {\n const worktreeId = args.worktreeId as string;\n if (!worktreeId) {\n throw new Error(\"[begin_build_session] worktreeId is required\");\n }\n\n const branch = args.branch as string | undefined;\n const branchBase = (args.branchBase as string) || \"staging\";\n const prBase = (args.prBase as string) || \"staging\";\n const sessionMode = (args.sessionMode as string) || \"async\";\n const activateIfPlanning = args.activateIfPlanning !== false;\n\n // 1. Fetch worktree\n const worktree = (await adminQuery(api.worktrees.get, {\n worktreeId: worktreeId as any,\n })) as AnyRecord | null;\n if (!worktree) {\n throw new Error(`Worktree ${worktreeId} not found`);\n }\n\n const worktreeName = String(worktree.name || \"Untitled\");\n const topicId = String(worktree.topicId || \"\");\n const track = String(worktree.track || \"untracked\");\n const trackPosition = (worktree.trackPosition as number) ?? 0;\n const executionBand = (worktree.executionBand as number) ?? 0;\n const gate = String(worktree.gate || \"\");\n const hypothesis = String(worktree.hypothesis || worktree.beliefFocus || \"\");\n let status = String(worktree.status || \"planning\");\n const dependsOn = (worktree.dependsOn as string[]) || [];\n const blocks = (worktree.blocks as string[]) || [];\n const targetBeliefIds = (worktree.targetBeliefIds as string[]) || [];\n const targetQuestionIds = (worktree.targetQuestionIds as string[]) || [];\n\n // 2. Activate if planning\n if (activateIfPlanning && status === \"planning\") {\n try {\n await adminMutation(api.worktrees.activate, {\n worktreeId: worktreeId as any,\n });\n status = \"active\";\n } catch {\n // Non-fatal — status stays \"planning\"\n }\n }\n\n // 3. Fetch topic name\n let topicName = \"Unknown\";\n try {\n const topic = (await adminQuery(api.topics.get, {\n id: topicId as any,\n })) as AnyRecord | null;\n if (topic) topicName = String(topic.name || \"Unknown\");\n } catch {\n // Non-critical\n }\n\n // 4. Resolve ALL targeted beliefs (not just 5) and sort by confidence\n const allBeliefs = await resolveBeliefs(targetBeliefIds);\n const sortedBeliefs = allBeliefs.sort((a, b) => (b.confidence ?? -1) - (a.confidence ?? -1));\n const topBeliefs = sortedBeliefs.slice(0, 8);\n\n // 5. Resolve questions — split into open vs answered\n const allQuestions = await resolveQuestions(targetQuestionIds);\n const openQuestions: Array<{ nodeId: string; text: string; priority: string }> = [];\n const resolvedDecisions: Array<{ question: string; decision: string }> = [];\n\n for (const q of allQuestions) {\n const qStatus = q.status.toLowerCase();\n if (qStatus === \"answered\" || qStatus === \"resolved\") {\n // Try multiple answer resolution paths\n let decision = \"(decision recorded — call get_answer for details)\";\n try {\n // Path 1: Direct answer query\n const answer = (await adminQuery(api.epistemicAnswers.getLatestForQuestion, {\n questionNodeId: q.nodeId as any,\n })) as AnyRecord | null;\n if (answer) {\n decision = String(answer.answerText || answer.canonicalText || decision).slice(0, 200);\n }\n } catch {\n // Path 2: Try via MCP get_answer pattern (globalId resolution)\n try {\n const node = (await adminQuery(api.epistemicNodes.get, {\n nodeId: q.nodeId as any,\n })) as AnyRecord | null;\n if (node && node._id) {\n const answer = (await adminQuery(api.epistemicAnswers.getLatestForQuestion, {\n questionNodeId: node._id as any,\n })) as AnyRecord | null;\n if (answer) {\n decision = String(answer.answerText || answer.canonicalText || decision).slice(0, 200);\n }\n }\n } catch {\n // Keep default\n }\n }\n resolvedDecisions.push({ question: q.text.slice(0, 150), decision });\n } else {\n openQuestions.push({ nodeId: q.nodeId, text: q.text, priority: q.priority });\n }\n }\n\n // Also pull topic-level open questions not in worktree targets\n try {\n const topicQs = await adminQuery(api.epistemicQuestions.getByTopic, {\n topicId: topicId as any,\n userId: \"system\",\n limit: 20,\n }).catch(() => []);\n for (const q of Array.isArray(topicQs) ? topicQs : []) {\n const md = (q.metadata || {}) as AnyRecord;\n const qs = String(md.questionStatus || q.status || \"open\").toLowerCase();\n if ((qs === \"open\" || qs === \"in_progress\") && !targetQuestionIds.includes(String(q._id))) {\n openQuestions.push({\n nodeId: String(q._id),\n text: String(q.canonicalText || \"\").slice(0, 200),\n priority: String(md.priority || \"medium\"),\n });\n }\n }\n } catch {\n // Non-critical\n }\n\n // 6. Fetch dependencies and unblocks\n const dependencies: Array<{ worktreeId: string; title: string; status: string }> = [];\n for (const depId of dependsOn.slice(0, 5)) {\n try {\n const dep = (await adminQuery(api.worktrees.get, { worktreeId: depId as any })) as AnyRecord | null;\n if (dep) {\n dependencies.push({\n worktreeId: depId,\n title: String(dep.name || \"Unknown\"),\n status: String(dep.status || \"unknown\"),\n });\n }\n } catch {\n dependencies.push({ worktreeId: depId, title: \"Unknown\", status: \"unknown\" });\n }\n }\n\n const unblocks: Array<{ worktreeId: string; title: string }> = [];\n for (const blockId of blocks.slice(0, 5)) {\n try {\n const blk = (await adminQuery(api.worktrees.get, { worktreeId: blockId as any })) as AnyRecord | null;\n if (blk) {\n unblocks.push({ worktreeId: blockId, title: String(blk.name || \"Unknown\") });\n }\n } catch {\n unblocks.push({ worktreeId: blockId, title: \"Unknown\" });\n }\n }\n\n // 7. Compute git branch\n const effectiveBranch = branch || `codex/${slugify(worktreeName)}`;\n\n // 8. Merge order notes\n let mergeOrderNotes = \"none\";\n if (dependsOn.length > 0) {\n const incomplete = dependencies.filter((d) => d.status !== \"completed\" && d.status !== \"merged\");\n if (incomplete.length > 0) {\n mergeOrderNotes = `Blocked by: ${incomplete.map((d) => d.title).join(\", \")}`;\n }\n }\n\n // 9. Required docs — architecture docs relevant to this worktree, not generic boilerplate\n const requiredDocs = [\n \"lucern/docs/api/EK-13-api-sdk-architecture.md\",\n \"lucern/docs/api/EK-13.1.5-repo-architecture-blueprint.md\",\n \"lucern/docs/api/EK-13.1-contract-authority.md\",\n \"docs/development/handoff-contract.md\",\n ];\n\n // 10. Focus — one-line summary of what to build\n const focus = hypothesis\n ? hypothesis.split(\".\")[0] + \".\"\n : `Complete ${worktreeName}`;\n\n // 11. Exit criteria — derived from gate name\n const exitCriteria: string[] = [];\n if (gate) {\n exitCriteria.push(`Gate: ${gate}`);\n }\n exitCriteria.push(\n \"All namespace surfaces end-to-end: contract → domain → HTTP → SDK → MCP → test\",\n \"All code lands in target-state paths under lucern/\",\n \"PR targets staging, not main\",\n );\n\n // 12. Key files — existing code the agent should read before building\n const keyFiles = [\n \"app/api/platform/v1/_lib/gateway.ts\",\n \"lucern/modules/access-control/src/principalContext.ts\",\n \"lucern/packages/sdk/src/coreClient.ts\",\n \"lucern/packages/sdk/src/identityClient.ts\",\n \"lucern/contracts/src/sdk-methods.contract.ts\",\n \"app/api/platform/v1/identity/\",\n ];\n\n // 13. Pillar beliefs — the north star for what we're building.\n // These express how each of Lucern's 8 innovation pillars maps to API operations.\n // Search for pillar-specific beliefs among the targeted beliefs.\n const pillarKeywords = [\"Pillar 1\", \"Pillar 2\", \"Pillar 3\", \"Pillar 4\", \"Pillar 5\", \"Pillar 6\", \"Pillar 7\", \"Pillar 8\", \"8 innovation pillars\"];\n const pillarBeliefs: Array<{ pillar: string; text: string; nodeId: string }> = [];\n for (const belief of allBeliefs) {\n for (const kw of pillarKeywords) {\n if (belief.text.includes(kw)) {\n // Extract pillar name from the belief text\n const pillarMatch = belief.text.match(/Pillar \\d+ \\([^)]+\\)/);\n const pillarName = pillarMatch ? pillarMatch[0] : kw;\n pillarBeliefs.push({\n pillar: pillarName,\n text: belief.text.slice(0, 250),\n nodeId: belief.nodeId,\n });\n break;\n }\n }\n }\n\n // 14. Vision docs — the north star documents. Every build should serve these.\n const visionDocs = [\n { path: \"lucern/docs/product/core-value-propositions.md\", description: \"8 innovation pillars through developer, marketing, and investor lenses\" },\n { path: \"lucern/docs/product/five-domains.md\", description: \"5 product domains: MC, Tenant, Developer, Reasoning Control, Reasoning\" },\n { path: \"lucern/docs/product/innovation-pillars.md\", description: \"The 8 pillars that define what makes Lucern unique\" },\n { path: \"lucern/docs/product/vision-to-roadmap-bridge.md\", description: \"Where each pillar is today vs. where it goes — the north star trajectory\" },\n ];\n\n return {\n topicId,\n topicName,\n worktreeId,\n worktreeName,\n branch: effectiveBranch,\n branchBase,\n prBase,\n track,\n trackPosition,\n executionBand,\n gate,\n hypothesis,\n focus,\n status,\n sessionMode,\n targetBeliefIds,\n targetQuestionIds,\n topBeliefs,\n openQuestions,\n resolvedDecisions,\n exitCriteria,\n requiredDocs,\n keyFiles,\n pillarBeliefs,\n visionDocs,\n dependencies,\n unblocks,\n mergeOrderNotes,\n };\n },\n};\n","/**\n * Coding Intelligence Handlers\n *\n * MCP tools for code-grounded knowledge:\n * - get_code_context — returns beliefs, contracts, failures anchored to a file/function\n * - get_change_history — recent changes and decisions for a file path\n * - record_attempt — logs a failed approach as evidence linked to a belief\n * - get_failure_log — searches past failed attempts matching a task description\n *\n * These tools use existing epistemic primitives (beliefs, evidence, edges)\n * with coding-domain beliefType overlays:\n * implementation_decision, interface_contract, migration_state,\n * code_pattern, deprecation_notice\n *\n * Coding nodes carry metadata.codeAnchors: string[] — file paths the node\n * is grounded to. All queries filter by this metadata field.\n *\n * @module mcp/handlers/coding\n */\n\nimport { internal } from \"../kernelApi.js\";\nimport { adminMutation, adminQuery } from \"../convex-client.js\";\nimport {\n readTopicIdArg,\n ROOT_TOPIC_ID,\n resolveTopicFromNode,\n resolveTopicScopeId,\n} from \"../scope.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Coding-domain belief types (registered in schemaEnumConfig) */\nconst CODING_BELIEF_TYPES = [\n \"implementation_decision\",\n \"interface_contract\",\n \"migration_state\",\n \"code_pattern\",\n \"deprecation_notice\",\n] as const;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ntype AnyRecord = Record<string, unknown>;\n\n/**\n * Extract codeAnchors from a node's metadata.\n * Returns empty array if metadata is missing or codeAnchors is not set.\n */\nfunction getCodeAnchors(node: AnyRecord): string[] {\n const metadata = node.metadata as AnyRecord | undefined;\n if (!metadata) {\n return [];\n }\n const anchors = metadata.codeAnchors;\n if (!Array.isArray(anchors)) {\n return [];\n }\n return anchors.filter((a): a is string => typeof a === \"string\");\n}\n\n/**\n * Check if any of a node's codeAnchors match a file path query.\n * Matches if the anchor ends with the query path, or the query path ends with\n * the anchor, or they're equal. This handles both exact paths and partial paths\n * like \"epistemicBeliefs.ts\" or \"convex/epistemicBeliefs.ts\".\n */\nfunction anchorsMatchPath(anchors: string[], filePath: string): boolean {\n if (anchors.length === 0 || !filePath) {\n return false;\n }\n const normalizedQuery = filePath.replace(/\\\\/g, \"/\").toLowerCase();\n return anchors.some((anchor) => {\n const normalizedAnchor = anchor.replace(/\\\\/g, \"/\").toLowerCase();\n return (\n normalizedAnchor === normalizedQuery ||\n normalizedAnchor.endsWith(normalizedQuery) ||\n normalizedQuery.endsWith(normalizedAnchor)\n );\n });\n}\n\n/**\n * Filter search results to only nodes with matching codeAnchors.\n */\nfunction filterByCodeAnchors(\n nodes: AnyRecord[],\n filePath: string\n): AnyRecord[] {\n return nodes.filter((node) =>\n anchorsMatchPath(getCodeAnchors(node), filePath)\n );\n}\n\n/**\n * Project a node to a coding-context view for the agent.\n */\nfunction toCodingView(node: AnyRecord): AnyRecord {\n const metadata = (node.metadata || {}) as AnyRecord;\n return {\n nodeId: node._id || node.globalId,\n globalId: node.globalId,\n nodeType: node.nodeType,\n beliefType: node.beliefType,\n canonicalText: node.canonicalText,\n confidence: node.confidence,\n status: node.status,\n codeAnchors: getCodeAnchors(node),\n createdAt: node.createdAt,\n updatedAt: node.updatedAt,\n // Coding-specific metadata\n ...(metadata.failedApproach\n ? { failedApproach: metadata.failedApproach }\n : {}),\n ...(metadata.errorMessage ? { errorMessage: metadata.errorMessage } : {}),\n ...(metadata.commitSha ? { commitSha: metadata.commitSha } : {}),\n ...(metadata.migratingFrom\n ? { migratingFrom: metadata.migratingFrom }\n : {}),\n ...(metadata.migratingTo ? { migratingTo: metadata.migratingTo } : {}),\n ...(metadata.replacementPattern\n ? { replacementPattern: metadata.replacementPattern }\n : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Handlers\n// ---------------------------------------------------------------------------\n\nexport const codingHandlers: HandlerModule = {\n /**\n * get_code_context\n *\n * Returns code-grounded beliefs, contracts, migration states, and failed\n * attempts anchored to a specific file or function path.\n *\n * @param filePath - File path to search for (partial matches supported)\n * @param topicId - Topic scope (optional, uses default if not provided)\n * @param includeFailures - Whether to include failed attempt evidence (default: true)\n */\n async get_code_context(args, _ctx) {\n const filePath = args.filePath as string;\n if (!filePath || typeof filePath !== \"string\" || !filePath.trim()) {\n return { error: \"filePath is required\" };\n }\n\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"get_code_context\"\n );\n const includeFailures = (args.includeFailures as boolean) ?? true;\n\n // Search for beliefs with coding types that match this file\n const _allBeliefTypes = [\n ...CODING_BELIEF_TYPES,\n \"belief\",\n \"principle\",\n \"invariant\",\n ];\n const searchResults: AnyRecord[] = [];\n\n // Search by file path text (will catch nodes mentioning the file)\n const pathResults = await adminQuery(internal.lucernMcp.searchNodes, {\n query: filePath,\n nodeType: \"belief\",\n topicId: topicId as any,\n limit: 50,\n });\n if (Array.isArray(pathResults)) {\n searchResults.push(...pathResults);\n }\n\n // Also search for evidence anchored to this file\n const evidenceResults = await adminQuery(internal.lucernMcp.searchNodes, {\n query: filePath,\n nodeType: \"evidence\",\n topicId: topicId as any,\n limit: 30,\n });\n\n // Filter to nodes with matching codeAnchors\n const matchedBeliefs = filterByCodeAnchors(searchResults, filePath);\n const matchedEvidence = filterByCodeAnchors(\n Array.isArray(evidenceResults) ? evidenceResults : [],\n filePath\n );\n\n // Separate by belief type\n const decisions = matchedBeliefs.filter(\n (n) => n.beliefType === \"implementation_decision\"\n );\n const contracts = matchedBeliefs.filter(\n (n) => n.beliefType === \"interface_contract\"\n );\n const migrations = matchedBeliefs.filter(\n (n) => n.beliefType === \"migration_state\"\n );\n const patterns = matchedBeliefs.filter(\n (n) => n.beliefType === \"code_pattern\"\n );\n const deprecations = matchedBeliefs.filter(\n (n) => n.beliefType === \"deprecation_notice\"\n );\n const otherBeliefs = matchedBeliefs.filter(\n (n) => !CODING_BELIEF_TYPES.includes(n.beliefType as any)\n );\n\n // Filter evidence for failed attempts\n const failures = includeFailures\n ? matchedEvidence.filter((n) => {\n const metadata = (n.metadata || {}) as AnyRecord;\n return (\n metadata.failedApproach === true ||\n metadata.isFailedAttempt === true\n );\n })\n : [];\n\n return {\n filePath,\n topicId,\n decisions: decisions.map(toCodingView),\n contracts: contracts.map(toCodingView),\n migrations: migrations.map(toCodingView),\n patterns: patterns.map(toCodingView),\n deprecations: deprecations.map(toCodingView),\n otherBeliefs: otherBeliefs.map(toCodingView),\n failures: failures.map(toCodingView),\n totalMatched:\n matchedBeliefs.length + (includeFailures ? failures.length : 0),\n };\n },\n\n /**\n * get_change_history\n *\n * Returns recent changes and decisions for a file path — the \"why\" behind\n * recent code changes. Searches evidence and beliefs updated recently.\n *\n * @param filePath - File path to get history for\n * @param topicId - Topic scope (optional)\n * @param limit - Max results (default: 10)\n */\n async get_change_history(args, _ctx) {\n const filePath = args.filePath as string;\n if (!filePath || typeof filePath !== \"string\" || !filePath.trim()) {\n return { error: \"filePath is required\" };\n }\n\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"get_change_history\"\n );\n const limit = (args.limit as number) ?? 10;\n\n // Search for nodes mentioning this file\n const searchResults = await adminQuery(internal.lucernMcp.searchNodes, {\n query: filePath,\n topicId: topicId as any,\n limit: limit * 3,\n });\n\n // Filter to nodes with matching codeAnchors\n const matched = filterByCodeAnchors(\n Array.isArray(searchResults) ? searchResults : [],\n filePath\n );\n\n // Sort by updatedAt descending (most recent first)\n const sorted = matched\n .sort((a, b) => {\n const aTime = (a.updatedAt as number) || (a.createdAt as number) || 0;\n const bTime = (b.updatedAt as number) || (b.createdAt as number) || 0;\n return bTime - aTime;\n })\n .slice(0, limit);\n\n return {\n filePath,\n topicId,\n changes: sorted.map(toCodingView),\n totalFound: matched.length,\n showing: sorted.length,\n };\n },\n\n /**\n * record_attempt\n *\n * Logs a failed approach as evidence linked to a belief. This is the key\n * anti-repetition mechanism — if the same task comes up again, the agent\n * can check the failure log to avoid repeating the same mistake.\n *\n * Creates an evidence node with metadata.failedApproach=true and\n * metadata.codeAnchors set to the relevant file paths.\n *\n * @param description - What was attempted and why it failed\n * @param filePaths - File paths involved in the attempt\n * @param errorMessage - Error message or failure reason (optional)\n * @param linkedBeliefId - Belief this attempt was targeting (optional)\n * @param topicId - Topic scope (optional)\n */\n async record_attempt(args, ctx) {\n const description = args.description as string;\n if (\n !description ||\n typeof description !== \"string\" ||\n !description.trim()\n ) {\n return { error: \"description is required\" };\n }\n\n const filePaths = (args.filePaths as string[]) || [];\n const errorMessage = (args.errorMessage as string) || undefined;\n const linkedBeliefId = (args.linkedBeliefId as string) || undefined;\n\n // Prefer topicId inherited from linked belief (evidence belongs near its belief).\n const inheritedTopicId = await resolveTopicFromNode(\n linkedBeliefId,\n \"record_attempt\"\n );\n const topicId =\n inheritedTopicId ??\n (await resolveTopicScopeId(\n readTopicIdArg(args),\n \"record_attempt\"\n ));\n\n // Root topic is NEVER a valid home for epistemic nodes\n if (topicId === ROOT_TOPIC_ID) {\n throw new Error(\n \"[record_attempt] Resolved topic is Root — epistemic nodes must belong to a child topic. \" +\n \"Provide a valid topicId or link to a belief under a specific topic.\"\n );\n }\n\n // Build the canonical text for the evidence node\n const canonicalParts = [`Failed attempt: ${description}`];\n if (errorMessage) {\n canonicalParts.push(`Error: ${errorMessage}`);\n }\n if (filePaths.length > 0) {\n canonicalParts.push(`Files: ${filePaths.join(\", \")}`);\n }\n const canonicalText = canonicalParts.join(\"\\n\");\n\n // Create evidence node with failed attempt metadata\n const result = await adminMutation(\n internal.epistemicEvidence.internalCreate,\n {\n topicId: topicId as any,\n text: canonicalText,\n userId: ctx.userId,\n sourceType: \"ai_generated\",\n metadata: {\n failedApproach: true,\n isFailedAttempt: true,\n codeAnchors: filePaths,\n errorMessage: errorMessage || null,\n attemptedAt: Date.now(),\n },\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"record_attempt\",\n }\n );\n\n // Link to target belief if provided (weight = -0.5 means \"this didn't work\")\n let edgeId: string | null = null;\n if (linkedBeliefId && result) {\n const evidenceResult = result as AnyRecord;\n const evidenceNodeId = evidenceResult.nodeId || evidenceResult._id;\n\n if (evidenceNodeId) {\n try {\n const edgeResult = await adminMutation(\n internal.lucernMcp.internalLinkEvidence,\n {\n evidenceNodeId,\n beliefNodeId: linkedBeliefId,\n weight: -0.5,\n rationale: `Failed attempt: ${description.slice(0, 200)}`,\n userId: ctx.userId,\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"record_attempt\",\n }\n );\n const maybeEdgeId = (edgeResult as AnyRecord).edgeGlobalId;\n edgeId = typeof maybeEdgeId === \"string\" ? maybeEdgeId : null;\n } catch (linkError) {\n console.error(\n \"[coding] Failed to link attempt to belief:\",\n linkError\n );\n }\n }\n }\n\n return {\n ...(result as AnyRecord),\n edgeId,\n recorded: true,\n filePaths,\n };\n },\n\n /**\n * get_failure_log\n *\n * Searches past failed attempts matching a task description. Before trying\n * a new approach, the agent can check if similar approaches have already\n * been tried and failed.\n *\n * @param query - Description of the task or approach to search for\n * @param filePath - Optional file path to narrow results\n * @param topicId - Topic scope (optional)\n * @param limit - Max results (default: 5)\n */\n async get_failure_log(args, _ctx) {\n const query = args.query as string;\n if (!query || typeof query !== \"string\" || !query.trim()) {\n return { error: \"query is required\" };\n }\n\n const filePath = (args.filePath as string) || undefined;\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"get_failure_log\"\n );\n const limit = (args.limit as number) ?? 5;\n\n // Search evidence nodes for failed attempts\n const searchResults = await adminQuery(internal.lucernMcp.searchNodes, {\n query: `failed attempt ${query}`,\n nodeType: \"evidence\",\n topicId: topicId as any,\n limit: limit * 5,\n });\n\n // Filter to failed attempts only\n let failures = (Array.isArray(searchResults) ? searchResults : []).filter(\n (node: AnyRecord) => {\n const metadata = (node.metadata || {}) as AnyRecord;\n return (\n metadata.failedApproach === true || metadata.isFailedAttempt === true\n );\n }\n );\n\n // Optionally filter by file path\n if (filePath) {\n const fileFiltered = filterByCodeAnchors(failures, filePath);\n if (fileFiltered.length > 0) {\n failures = fileFiltered;\n }\n // If no file-specific matches, return all matching failures\n }\n\n // Sort by recency\n const sorted = failures\n .sort((a: AnyRecord, b: AnyRecord) => {\n const aTime = (a.createdAt as number) || 0;\n const bTime = (b.createdAt as number) || 0;\n return bTime - aTime;\n })\n .slice(0, limit);\n\n return {\n query,\n filePath: filePath || null,\n topicId,\n failures: sorted.map(toCodingView),\n totalFound: failures.length,\n showing: sorted.length,\n };\n },\n};\n","/**\n * Coordination Handlers — MCP tool handlers for inter-agent session coordination.\n *\n * Bridges MCP tool calls to Convex agentCoordination functions.\n * Each handler validates args, calls the Convex function via adminMutation/adminQuery,\n * and returns a structured result.\n *\n * SESSION_ID is process-local — generated once per MCP server process.\n * This means each Claude Code session gets a unique identity automatically.\n */\n\nimport { api } from \"../kernelApi.js\";\nimport { adminMutation, adminQuery } from \"../convex-client.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\nexport const coordinationHandlers: HandlerModule = {\n // ───────────────────────────────────────────────────────────────────────────\n // SESSION MANAGEMENT\n // ───────────────────────────────────────────────────────────────────────────\n\n async register_session(args, ctx) {\n const result = await adminMutation(\n api.agentCoordination.registerSession,\n {\n sessionId: ctx.sessionId,\n sessionName: (args.sessionName as string) || undefined,\n agentType: (args.agentType as string) || undefined,\n topicId: (args.topicId as string) || undefined,\n worktreeId: (args.worktreeId as string) || undefined,\n gitBranch: (args.gitBranch as string) || undefined,\n }\n );\n\n return result as Record<string, unknown>;\n },\n\n async heartbeat_session(args, ctx) {\n const result = await adminMutation(\n api.agentCoordination.heartbeatSession,\n {\n sessionId: ctx.sessionId,\n topicId: (args.topicId as string) || undefined,\n worktreeId: (args.worktreeId as string) || undefined,\n gitBranch: (args.gitBranch as string) || undefined,\n status: (args.status as \"active\" | \"idle\") || undefined,\n }\n );\n\n return result as Record<string, unknown>;\n },\n\n async end_session(_args, ctx) {\n const result = await adminMutation(api.agentCoordination.endSession, {\n sessionId: ctx.sessionId,\n });\n\n return result as Record<string, unknown>;\n },\n\n async list_active_sessions(args, ctx) {\n const sessions = await adminQuery(\n api.agentCoordination.listActiveSessions,\n {\n includeIdle: (args.includeIdle as boolean) ?? true,\n }\n );\n\n return {\n currentSessionId: ctx.sessionId,\n sessions: sessions as Record<string, unknown>[],\n count: (sessions as unknown[]).length,\n };\n },\n\n // ───────────────────────────────────────────────────────────────────────────\n // MESSAGING\n // ───────────────────────────────────────────────────────────────────────────\n\n async send_agent_message(args, ctx) {\n const toSessionId = args.toSessionId as string;\n const content = args.content as string;\n\n if (!toSessionId) {\n throw new Error(\"[send_agent_message] toSessionId is required\");\n }\n if (!content) {\n throw new Error(\"[send_agent_message] content is required\");\n }\n\n const result = await adminMutation(api.agentCoordination.sendMessage, {\n fromSessionId: ctx.sessionId,\n toSessionId,\n content,\n messageType:\n (args.messageType as\n | \"note\"\n | \"question\"\n | \"answer\"\n | \"alert\"\n | \"handoff\") || \"note\",\n relatedBeliefId: (args.relatedBeliefId as string) || undefined,\n relatedWorktreeId: (args.relatedWorktreeId as string) || undefined,\n });\n\n return result as Record<string, unknown>;\n },\n\n async broadcast_message(args, ctx) {\n const content = args.content as string;\n\n if (!content) {\n throw new Error(\"[broadcast_message] content is required\");\n }\n\n const result = await adminMutation(api.agentCoordination.sendMessage, {\n fromSessionId: ctx.sessionId,\n toSessionId: \"__broadcast__\",\n content,\n messageType: (args.messageType as \"note\" | \"alert\" | \"handoff\") || \"note\",\n relatedBeliefId: (args.relatedBeliefId as string) || undefined,\n relatedWorktreeId: (args.relatedWorktreeId as string) || undefined,\n });\n\n return result as Record<string, unknown>;\n },\n\n async get_agent_inbox(args, ctx) {\n const limit = (args.limit as number) ?? 50;\n const markAsRead = (args.markAsRead as boolean) ?? true;\n\n const messages = await adminQuery(api.agentCoordination.getInbox, {\n sessionId: ctx.sessionId,\n limit,\n });\n\n const msgArray = messages as Record<string, unknown>[];\n\n // Mark as read if requested and there are messages\n if (markAsRead && msgArray.length > 0) {\n const messageIds = msgArray.map((m) => m.messageId as string);\n await adminMutation(api.agentCoordination.markRead, {\n messageIds,\n });\n }\n\n return {\n currentSessionId: ctx.sessionId,\n messages: msgArray,\n count: msgArray.length,\n };\n },\n\n // ───────────────────────────────────────────────────────────────────────────\n // FILE COORDINATION\n // ───────────────────────────────────────────────────────────────────────────\n\n async claim_files(args, ctx) {\n const files = args.files as string[];\n\n if (!files || !Array.isArray(files)) {\n throw new Error(\"[claim_files] files array is required\");\n }\n\n const result = await adminMutation(api.agentCoordination.claimFiles, {\n sessionId: ctx.sessionId,\n touchedFiles: files,\n });\n\n return result as Record<string, unknown>;\n },\n};\n","/**\n * Policy Handlers — check_permission, filter_by_permission, manage_write_policy\n *\n * TC-B: Migrated from resolveProjectScopeId → resolveTopicScopeId.\n * Uses checkPermissionByTopic (internal) bridge for topic-canonical policy evaluation.\n */\n\nimport { api, internal } from \"../kernelApi.js\";\nimport { adminMutation, adminQuery } from \"../convex-client.js\";\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\ntype Permission = \"read\" | \"write\";\n\ntype TopicDoc = {\n _id: string;\n name?: string;\n type?: string;\n status?: string;\n};\n\nasync function evaluatePermissionForTopic(args: {\n topicId: string;\n permission: Permission;\n principal?: string;\n beliefClusterId?: string;\n}): Promise<{\n allowed: boolean;\n decision: \"allow\" | \"deny\";\n reasonCode: string;\n topicId: string;\n}> {\n try {\n const result = (await adminQuery(internal.platform.checkPermissionByTopic, {\n topicId: args.topicId,\n permission: args.permission,\n principalId: args.principal,\n beliefClusterId: args.beliefClusterId,\n })) as Record<string, unknown>;\n\n const allowed = result.allowed === true;\n return {\n allowed,\n decision: allowed ? \"allow\" : \"deny\",\n reasonCode: String(\n result.reasonCode || (allowed ? \"policy_allow\" : \"policy_deny\")\n ),\n topicId: args.topicId,\n };\n } catch {\n return {\n allowed: false,\n decision: \"deny\",\n reasonCode: \"policy_eval_error\",\n topicId: args.topicId,\n };\n }\n}\n\nexport const policyHandlers: HandlerModule = {\n async check_permission(args, ctx) {\n const permission = ((args.permission as string) || \"read\") as Permission;\n const principal = (args.principal as string) || undefined;\n const beliefClusterId = (args.beliefClusterId as string) || undefined;\n\n let topicId: string;\n try {\n topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"check_permission\"\n );\n } catch {\n // Graceful degradation for unmapped scopes during dev\n return {\n allowed: true,\n decision: \"allow\",\n reasonCode: \"topic_scope_unmapped_dev_allow\",\n principalId: principal || \"current\",\n topicId: readTopicIdArg(args) || \"\",\n permission,\n };\n }\n\n if (!principal && ctx.sessionType === \"agent\") {\n const allowed =\n ctx.allowedTopics === null ||\n ctx.allowedTopics.includes(topicId);\n return {\n allowed,\n decision: allowed ? \"allow\" : \"deny\",\n reasonCode: allowed ? \"SESSION_SCOPE_ALLOW\" : \"SESSION_SCOPE_DENY\",\n principalId: ctx.userId,\n topicId,\n permission,\n };\n }\n\n const evalResult = await evaluatePermissionForTopic({\n topicId,\n permission,\n principal: principal ?? ctx.userId,\n beliefClusterId,\n });\n\n return {\n allowed: evalResult.allowed,\n decision: evalResult.decision,\n reasonCode: evalResult.reasonCode,\n principalId: principal || \"current\",\n topicId: evalResult.topicId,\n permission,\n };\n },\n async filter_by_permission(args, ctx) {\n const permission = ((args.permission as string) || \"read\") as Permission;\n const principal = (args.principal as string) || undefined;\n const requestedTopicIds =\n (args.topicIds as string[]) || (args.projectIds as string[]) || [];\n\n if (!principal && ctx.sessionType === \"agent\") {\n const allowedTopics = ctx.allowedTopics;\n const unrestricted = allowedTopics === null;\n const allowedTopicIds = unrestricted\n ? requestedTopicIds\n : requestedTopicIds.filter((topicId) => allowedTopics.includes(topicId));\n\n return {\n permission,\n allowedTopicIds,\n deniedTopics: unrestricted\n ? []\n : requestedTopicIds\n .filter((topicId) => !allowedTopics.includes(topicId))\n .map((topicId) => ({\n topicId,\n reasonCode: \"SESSION_SCOPE_DENY\",\n })),\n count: allowedTopicIds.length,\n };\n }\n\n const evaluated = await Promise.all(\n requestedTopicIds.map(async (id) => ({\n id,\n evaluation: await evaluatePermissionForTopic({\n topicId: id,\n permission,\n principal: principal ?? ctx.userId,\n }),\n }))\n );\n\n const allowedTopicIds = evaluated\n .filter((row) => row.evaluation.allowed)\n .map((row) => row.id);\n\n const deniedTopics = evaluated\n .filter((row) => !row.evaluation.allowed)\n .map((row) => ({\n topicId: row.id,\n reasonCode: row.evaluation.reasonCode,\n }));\n\n return {\n permission,\n allowedTopicIds,\n deniedTopics,\n count: allowedTopicIds.length,\n };\n },\n\n /**\n * manage_write_policy — upsert or read write policies for MCP tools.\n *\n * Like `git config` for write permissions — sets per-topic or global\n * write policies that control which roles can mutate the graph.\n */\n async manage_write_policy(args, ctx) {\n const action = (args.action as string) || \"get\";\n const topicId = (args.topicId as string) || undefined;\n const role = (args.role as string) || undefined;\n const permission = (args.permission as string) || undefined;\n const maxWritesPerSession =\n (args.maxWritesPerSession as number) || undefined;\n const rationale = (args.rationale as string) || undefined;\n\n if (action === \"get\") {\n // Read current policies for a topic or global scope\n try {\n const policies = await adminQuery(\n \"mcpWritePolicy:listPolicies\" as any,\n {\n topicId: topicId ?? undefined,\n }\n );\n return {\n action: \"get\",\n topicId: topicId || null,\n policies: Array.isArray(policies) ? policies : [],\n };\n } catch (_err) {\n return {\n action: \"get\",\n topicId: topicId || null,\n policies: [],\n note: \"Policy table may not exist yet. Policies are fail-open by default.\",\n };\n }\n }\n\n if (action === \"set\") {\n if (!role || !permission) {\n throw new Error(\n \"[manage_write_policy] 'set' action requires role and permission fields.\"\n );\n }\n\n try {\n const result = await adminMutation(\n \"mcpWritePolicy:upsertPolicy\" as any,\n {\n topicId: topicId ?? undefined,\n role,\n permission,\n maxWritesPerSession: maxWritesPerSession ?? undefined,\n rationale: rationale ?? undefined,\n updatedBy: ctx.userId,\n }\n );\n return {\n action: \"set\",\n topicId: topicId || null,\n role,\n permission,\n maxWritesPerSession: maxWritesPerSession || null,\n result,\n };\n } catch (err) {\n return {\n action: \"set\",\n error: err instanceof Error ? err.message : String(err),\n note: \"Policy table may not exist yet. The convex-backend agent creates the mcpWritePolicy table.\",\n };\n }\n }\n\n throw new Error(\n `[manage_write_policy] Unknown action: \"${action}\". Use \"get\" or \"set\".`\n );\n },\n};\n","/**\n * Research Handlers — search_sources, execute_deep_research\n *\n * R-5.2.1: Multi-Tenant Research Gateway\n *\n * These handlers dispatch research queries through tenant-registered external\n * integrations. Each tenant brings their own tools — the MCP layer is the\n * router, not the executor.\n *\n * Flow:\n * 1. Look up tenant's integrations with the required capability\n * 2. Create a research job (audit trail)\n * 3. Dispatch to Convex action (which makes the external HTTP call)\n * 4. Return results to the caller\n * 5. Optionally auto-commit results as evidence nodes\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { internal } from \"../kernelApi.js\";\nimport { adminAction, adminMutation, adminQuery } from \"../convex-client.js\";\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\n/**\n * Resolve the first active integration for a given tenant + capability.\n * Returns null if none found.\n */\nasync function findIntegration(\n tenantId: string,\n capability: string\n): Promise<any | null> {\n const integrations = await adminQuery(\n internal.tenantIntegrations.getByCapability,\n { tenantId, capability }\n );\n if (!integrations || integrations.length === 0) return null;\n return integrations[0]; // Use the first active integration\n}\n\n/**\n * Auto-commit search results as evidence nodes in the reasoning graph.\n * Each result becomes an evidence node linked to the topic.\n */\nasync function autoCommitSearchResults(\n results: Array<{\n title?: string;\n url?: string;\n excerpt?: string;\n source?: string;\n }>,\n topicId: string,\n userId: string,\n sessionId: string\n): Promise<string[]> {\n const committedIds: string[] = [];\n for (const result of results.slice(0, 10)) {\n // Cap at 10 auto-commits\n if (!result.title && !result.excerpt) continue;\n\n try {\n const evidence = await adminMutation(\n internal.epistemicEvidence.internalCreate,\n {\n topicId: topicId as any,\n text:\n result.excerpt ??\n result.title ??\n \"Search result from external source\",\n title: result.title,\n sourceUrl: result.url,\n userId,\n sourceType: \"external_research\" as any,\n mcpSessionId: sessionId,\n mcpToolName: \"search_sources\",\n }\n );\n if (evidence?.nodeId) committedIds.push(evidence.nodeId);\n } catch {\n // Non-fatal: skip individual evidence commit failures\n }\n }\n return committedIds;\n}\n\nexport const researchHandlers: HandlerModule = {\n /**\n * search_sources — Search external sources via tenant integrations.\n *\n * Looks up the tenant's search-capable integrations, dispatches the query,\n * and returns normalized results. Optionally auto-commits as evidence.\n */\n async search_sources(args, ctx) {\n const query = args.query as string;\n if (!query?.trim()) {\n return { error: \"query is required\", results: [] };\n }\n\n const sources = (args.sources as string[]) || [\"web\"];\n const tenantId = ctx.tenantId;\n\n // 1. Find a search-capable integration for this tenant\n const integration = await findIntegration(tenantId, \"search\");\n\n if (!integration) {\n return {\n query,\n sources,\n results: [],\n note:\n \"No search integrations configured for this tenant. \" +\n \"Register an external search service (e.g., Parallel News, Serper, Brave Search) \" +\n \"in Developer Settings → Integrations. \" +\n \"Alternatively, use `add_evidence` with a sourceUrl to manually commit evidence.\",\n setup: {\n action: \"register_integration\",\n requiredCapability: \"search\",\n exampleIntegrations: [\n \"Parallel News API (SEC/financial research)\",\n \"Serper (Google search API)\",\n \"Brave Search API\",\n \"Tavily (AI-optimized search)\",\n ],\n },\n };\n }\n\n // 2. Create a research job for audit trail\n const jobId = randomUUID();\n await adminMutation(internal.researchGateway.createJob, {\n tenantId,\n jobId,\n type: \"search\",\n query,\n integrationKey: integration.integrationKey,\n autoCommitEvidence: false, // Caller decides after seeing results\n requestedBy: ctx.userId,\n });\n\n // 3. Execute the search via Convex action\n const result = await adminAction(internal.researchGateway.executeSearch, {\n jobId,\n tenantId,\n integrationKey: integration.integrationKey,\n query,\n sources,\n });\n\n if (!result.success) {\n return {\n query,\n sources,\n results: [],\n error: result.error,\n integration: integration.displayName,\n jobId,\n };\n }\n\n // 4. Normalize and return results\n const results = result.results ?? [];\n\n return {\n query,\n sources,\n integration: integration.displayName,\n jobId,\n resultCount: results.length,\n results: results.map((r: any) => ({\n title: r.title,\n url: r.url,\n source: r.source,\n publishedAt: r.publishedAt,\n excerpt: r.excerpt,\n relevanceScore: r.relevanceScore,\n })),\n suggestedAction:\n results.length > 0\n ? \"Use `add_evidence` to commit relevant results to the reasoning graph, \" +\n \"or pass autoCommitEvidence=true in future calls to auto-commit.\"\n : undefined,\n };\n },\n\n /**\n * execute_deep_research — Run multi-source deep research via tenant integrations.\n *\n * Dispatches to the tenant's deep-research-capable integration (e.g., Gemini\n * Deep Research, custom pipeline). Supports both sync and async external APIs.\n */\n async execute_deep_research(args, ctx) {\n const query = args.query as string;\n if (!query?.trim()) {\n return { error: \"query is required\", report: null };\n }\n\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"execute_deep_research\"\n );\n const depth = (args.depth as string) || \"standard\";\n const tenantId = ctx.tenantId;\n\n // 1. Find a deep-research-capable integration\n const integration = await findIntegration(tenantId, \"deep_research\");\n\n if (!integration) {\n // Fallback: check for search-capable integration (degraded mode)\n const searchIntegration = await findIntegration(tenantId, \"search\");\n\n if (searchIntegration) {\n return {\n query,\n topicId,\n depth,\n report: null,\n note:\n `No deep research integration configured, but \"${searchIntegration.displayName}\" ` +\n \"supports search. Consider using `search_sources` for lighter research, \" +\n \"or register a deep research integration (e.g., Gemini Deep Research API, \" +\n \"Perplexity Research) in Developer Settings → Integrations.\",\n fallback: {\n availableCapability: \"search\",\n integration: searchIntegration.displayName,\n suggestion: \"Use search_sources for lighter research queries\",\n },\n };\n }\n\n return {\n query,\n topicId,\n depth,\n report: null,\n note:\n \"No research integrations configured for this tenant. \" +\n \"Register a deep research service in Developer Settings → Integrations. \" +\n \"Alternatively, use `create_question` + `add_evidence` for manual research workflows.\",\n setup: {\n action: \"register_integration\",\n requiredCapability: \"deep_research\",\n exampleIntegrations: [\n \"Gemini Deep Research API\",\n \"Perplexity Research API\",\n \"Custom research pipeline\",\n ],\n },\n };\n }\n\n // 2. Create a research job\n const jobId = randomUUID();\n await adminMutation(internal.researchGateway.createJob, {\n tenantId,\n jobId,\n type: \"deep_research\",\n query,\n topicId,\n depth,\n integrationKey: integration.integrationKey,\n autoCommitEvidence: false,\n requestedBy: ctx.userId,\n });\n\n // 3. Execute the deep research\n const result = await adminAction(\n internal.researchGateway.executeDeepResearch,\n {\n jobId,\n tenantId,\n integrationKey: integration.integrationKey,\n query,\n depth,\n topicId,\n }\n );\n\n if (!result.success) {\n return {\n query,\n topicId,\n depth,\n report: null,\n error: result.error,\n integration: integration.displayName,\n jobId,\n };\n }\n\n // 4. Return the research report\n const report = result.report;\n\n return {\n query,\n topicId,\n depth,\n integration: integration.displayName,\n jobId,\n report: {\n summary: report?.summary ?? null,\n findings: report?.findings ?? [],\n sources: report?.sources ?? [],\n linkedEvidence: [],\n linkedQuestions: [],\n },\n suggestedAction:\n \"Review the report and use `add_evidence` to commit key findings \" +\n \"to the reasoning graph. Link evidence to relevant beliefs with \" +\n \"`link_evidence_to_belief`.\",\n };\n },\n};\n","import { api, internal } from \"./kernelApi.js\";\nimport {\n rankEntityTypeMatches,\n type EntityTypeMatch,\n type OntologyEntityType,\n} from \"../../../modules/graph-primitives/src/ontology-matching.js\";\nimport { adminMutation, adminQuery } from \"./convex-client.js\";\nimport type { AuthContext } from \"./handlers/types.js\";\n\nexport type LatticeTier = \"core\" | \"derived\" | \"peripheral\";\n\ntype LatticeConnectivityCounts = {\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n};\n\ntype TopicOntologyVocabulary = {\n ontologyId: string;\n ontologyKey: string | null;\n ontologyName: string | null;\n ontologyVersion: string | null;\n entityTypes: OntologyEntityType[];\n};\n\ntype LatticeRoutingResult = {\n ontologyKey: string | null;\n ontologyVersion: string | null;\n matchedEntityType: string | null;\n matchedLabel: string | null;\n matchedScore: number | null;\n candidateCount: number;\n candidates: EntityTypeMatch[];\n routedBeliefId: string | null;\n routeEdgeId: string | null;\n latticeTier: LatticeTier | null;\n};\n\nfunction trimString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction normalizeSourceKind(value: unknown): string {\n const kind = trimString(value)?.toLowerCase();\n return [\"commit\", \"merge\", \"doc\", \"issue\", \"manual\"].includes(kind || \"\")\n ? (kind as string)\n : \"manual\";\n}\n\nfunction buildSourceIdentity(\n sourceKind: string,\n sourceRef: string | undefined,\n sourceUrl: string | undefined\n): string | null {\n const identityValue = sourceRef || sourceUrl;\n if (!identityValue) {\n return null;\n }\n return `${sourceKind}:${identityValue}`;\n}\n\nfunction buildSourceTitle(\n sourceKind: string,\n sourceRef: string | undefined,\n sourceUrl: string | undefined\n): string {\n if (sourceKind === \"commit\" && sourceRef) {\n return `COMMIT ${sourceRef.slice(0, 7)}`;\n }\n if (sourceKind === \"merge\" && sourceRef) {\n return `MERGE ${sourceRef.slice(0, 7)}`;\n }\n if (sourceKind === \"doc\" && sourceRef) {\n return `DOC ${sourceRef}`;\n }\n if (sourceKind === \"issue\" && sourceRef) {\n return `ISSUE ${sourceRef}`;\n }\n return sourceRef || sourceUrl || `${sourceKind.toUpperCase()} SOURCE`;\n}\n\nfunction buildSourceContent(\n summary: string | undefined,\n sourceRef: string | undefined,\n sourceUrl: string | undefined,\n touchedPaths: string[]\n): string | undefined {\n const lines = [\n trimString(summary) ? `Summary: ${summary?.trim()}` : null,\n sourceRef ? `Source Ref: ${sourceRef}` : null,\n sourceUrl ? `Source URL: ${sourceUrl}` : null,\n touchedPaths.length > 0 ? \"Touched paths:\" : null,\n ...touchedPaths.slice(0, 15).map((path) => `- ${path}`),\n ].filter((line): line is string => typeof line === \"string\");\n\n return lines.length > 0 ? lines.join(\"\\n\") : undefined;\n}\n\nfunction isWorkspaceScopeInvariant(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return message.includes(\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\"\n );\n}\n\nexport function classifyLatticeTier(\n counts: LatticeConnectivityCounts\n): LatticeTier {\n if (counts.connectedBeliefCount > 0) {\n return \"core\";\n }\n if (counts.connectedEvidenceCount > 0) {\n return \"derived\";\n }\n return \"peripheral\";\n}\n\nexport async function resolveTopicOntologyVocabulary(\n topicId: string\n): Promise<TopicOntologyVocabulary | null> {\n const resolved = (await adminQuery(api.topics.resolveTopicOntology, {\n topicId: topicId as any,\n })) as {\n ontologyId?: string;\n ontologyKey?: string;\n ontologyName?: string;\n publishedVersion?: { version?: string } | null;\n } | null;\n\n if (!resolved?.ontologyId) {\n return null;\n }\n\n const effective = (await adminQuery(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: resolved.ontologyId as any,\n }\n )) as { entityTypes?: OntologyEntityType[] } | null;\n\n return {\n ontologyId: String(resolved.ontologyId),\n ontologyKey: trimString(resolved.ontologyKey) || null,\n ontologyName: trimString(resolved.ontologyName) || null,\n ontologyVersion: trimString(resolved.publishedVersion?.version) || null,\n entityTypes: Array.isArray(effective?.entityTypes)\n ? effective.entityTypes\n : [],\n };\n}\n\nexport async function attachEvidenceSourceProvenance(args: {\n ctx: AuthContext;\n evidenceNodeId: string;\n toolName: string;\n topicId: string;\n summary?: string;\n sourceKind?: string;\n sourceRef?: string;\n sourceUrl?: string;\n touchedPaths?: string[];\n}): Promise<\n | {\n sourceNodeId: string;\n sourceCreated: boolean;\n sourceTitle: string;\n provenanceEdgeId: string | null;\n }\n | null\n> {\n const sourceKind = normalizeSourceKind(args.sourceKind);\n const sourceRef = trimString(args.sourceRef);\n const sourceUrl = trimString(args.sourceUrl);\n const sourceIdentity = buildSourceIdentity(sourceKind, sourceRef, sourceUrl);\n\n if (!sourceIdentity || sourceKind === \"manual\") {\n return null;\n }\n\n const touchedPaths = Array.isArray(args.touchedPaths)\n ? args.touchedPaths\n .map((path) => trimString(path))\n .filter((path): path is string => Boolean(path))\n : [];\n const sourceTitle = buildSourceTitle(sourceKind, sourceRef, sourceUrl);\n const sourceContent = buildSourceContent(\n args.summary,\n sourceRef,\n sourceUrl,\n touchedPaths\n );\n\n let sourceResult: { nodeId?: string; created?: boolean };\n try {\n sourceResult = (await adminMutation(\n (internal.lucernMcp as any).internalUpsertSourceNode,\n {\n topicId: args.topicId as any,\n anchorNodeId: args.evidenceNodeId as any,\n sourceKind,\n sourceRef,\n sourceUrl,\n title: sourceTitle,\n content: sourceContent,\n metadata: {\n sourceIdentity,\n touchedPaths,\n },\n userId: args.ctx.userId,\n mcpSessionId: args.ctx.sessionId,\n mcpToolName: args.toolName,\n }\n )) as { nodeId?: string; created?: boolean };\n } catch (error) {\n if (isWorkspaceScopeInvariant(error)) {\n return null;\n }\n throw error;\n }\n\n const sourceNodeId = trimString(sourceResult?.nodeId);\n if (!sourceNodeId) {\n return null;\n }\n\n const provenanceResult = (await adminMutation(\n internal.lucernMcp.internalCreateEdge,\n {\n fromNodeId: args.evidenceNodeId as any,\n toNodeId: sourceNodeId as any,\n edgeType: \"extracted_from\",\n weight: 1,\n context: `Evidence provenance linked to ${sourceTitle}`,\n userId: args.ctx.userId,\n mcpSessionId: args.ctx.sessionId,\n mcpToolName: args.toolName,\n }\n )) as { globalId?: string };\n\n return {\n sourceNodeId,\n sourceCreated: sourceResult?.created === true,\n sourceTitle,\n provenanceEdgeId: trimString(provenanceResult?.globalId) || null,\n };\n}\n\nexport async function routeEvidenceToLattice(args: {\n ctx: AuthContext;\n evidenceNodeId: string;\n inputText: string;\n toolName: string;\n topicId: string;\n minScore?: number;\n}): Promise<LatticeRoutingResult | null> {\n const inputText = trimString(args.inputText);\n if (!inputText) {\n return null;\n }\n\n const ontology = await resolveTopicOntologyVocabulary(args.topicId);\n if (!ontology || ontology.entityTypes.length === 0) {\n return null;\n }\n\n const candidates = rankEntityTypeMatches(inputText, ontology.entityTypes, {\n minScore: typeof args.minScore === \"number\" ? args.minScore : 0.08,\n limit: 3,\n });\n\n if (candidates.length === 0) {\n return {\n ontologyKey: ontology.ontologyKey,\n ontologyVersion: ontology.ontologyVersion,\n matchedEntityType: null,\n matchedLabel: null,\n matchedScore: null,\n candidateCount: 0,\n candidates: [],\n routedBeliefId: null,\n routeEdgeId: null,\n latticeTier: null,\n };\n }\n\n const seedsResult = (await adminQuery(\n internal.lucernMcp.findLatticeSeedBeliefs,\n {\n topicId: args.topicId as any,\n }\n )) as { seeds?: Record<string, { nodeId: string }> };\n\n const selectedCandidate = candidates.find(\n (candidate) => seedsResult?.seeds?.[candidate.entityType]\n );\n\n if (!selectedCandidate) {\n return {\n ontologyKey: ontology.ontologyKey,\n ontologyVersion: ontology.ontologyVersion,\n matchedEntityType: candidates[0]?.entityType || null,\n matchedLabel: candidates[0]?.label || null,\n matchedScore: candidates[0]?.score ?? null,\n candidateCount: candidates.length,\n candidates,\n routedBeliefId: null,\n routeEdgeId: null,\n latticeTier: null,\n };\n }\n\n const routedBeliefId = trimString(\n seedsResult?.seeds?.[selectedCandidate.entityType]?.nodeId\n );\n if (!routedBeliefId) {\n return null;\n }\n\n const routeResult = (await adminMutation(\n internal.lucernMcp.internalCreateEdge,\n {\n fromNodeId: args.evidenceNodeId as any,\n toNodeId: routedBeliefId as any,\n edgeType: \"informs\",\n weight: Math.max(0.25, Math.min(selectedCandidate.score, 0.95)),\n context:\n `Evidence routed to lattice seed for entity type \"${selectedCandidate.entityType}\" ` +\n `via ontology matching${ontology.ontologyKey ? ` (${ontology.ontologyKey})` : \"\"}.`,\n userId: args.ctx.userId,\n mcpSessionId: args.ctx.sessionId,\n mcpToolName: args.toolName,\n }\n )) as { globalId?: string };\n\n const connectivityResult = (await adminQuery(\n internal.lucernMcp.getLatticeConnectivity,\n {\n topicId: args.topicId as any,\n }\n )) as {\n connectivity?: Record<string, LatticeConnectivityCounts>;\n };\n\n const counts = connectivityResult?.connectivity?.[selectedCandidate.entityType] || {\n connectedBeliefCount: 0,\n connectedEvidenceCount: 0,\n };\n const latticeTier = classifyLatticeTier(counts);\n\n await adminMutation((internal.lucernMcp as any).internalSetBeliefLatticeTier, {\n beliefNodeId: routedBeliefId as any,\n latticeTier,\n userId: args.ctx.userId,\n mcpSessionId: args.ctx.sessionId,\n mcpToolName: args.toolName,\n }).catch(() => null);\n\n return {\n ontologyKey: ontology.ontologyKey,\n ontologyVersion: ontology.ontologyVersion,\n matchedEntityType: selectedCandidate.entityType,\n matchedLabel: selectedCandidate.label,\n matchedScore: selectedCandidate.score,\n candidateCount: candidates.length,\n candidates,\n routedBeliefId,\n routeEdgeId: trimString(routeResult?.globalId) || null,\n latticeTier,\n };\n}\n","import type { ContextPackV1 } from \"@lucern/contracts\";\nimport {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\nimport {\n type CompileContextCommand,\n type CompileContextPorts,\n type CompileContextPortInput,\n} from \"./ports\";\nimport type { PublicCompiledContext } from \"./public-types\";\n\nexport class ContextCompileError extends Error {\n readonly code: string;\n readonly status: number;\n\n constructor(code: string, message: string, status: number) {\n super(message);\n this.name = \"ContextCompileError\";\n this.code = code;\n this.status = status;\n }\n}\n\nexport function isContextCompileError(\n error: unknown\n): error is ContextCompileError {\n return error instanceof ContextCompileError;\n}\n\nfunction cleanString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction cleanNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction cleanBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction cleanStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => cleanString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction prefixId(prefix: string, value: unknown): string {\n const cleaned = cleanString(value);\n if (!cleaned) {\n return `${prefix}_unknown`;\n }\n try {\n const decoded = decodePrefixedId(cleaned);\n if (decoded.prefix === prefix) {\n return cleaned;\n }\n } catch {\n // Fall through and encode raw ids below.\n }\n return encodePrefixedId(prefix, cleaned);\n}\n\nfunction mapSelectedIds(\n value: Record<string, string[]>\n): Record<string, string[]> {\n return {\n invariants: (value.invariants ?? []).map((id) => prefixId(\"bel\", id)),\n activeBeliefs: (value.activeBeliefs ?? []).map((id) => prefixId(\"bel\", id)),\n openQuestions: (value.openQuestions ?? []).map((id) => prefixId(\"que\", id)),\n recentEvidence: (value.recentEvidence ?? []).map((id) => prefixId(\"evi\", id)),\n contradictions: (value.contradictions ?? []).map((id) => prefixId(\"con\", id)),\n };\n}\n\nfunction mapExcludedId(section: string, id: string): string {\n if (section === \"invariants\" || section === \"activeBeliefs\") {\n return prefixId(\"bel\", id);\n }\n if (section === \"openQuestions\") {\n return prefixId(\"que\", id);\n }\n if (section === \"recentEvidence\") {\n return prefixId(\"evi\", id);\n }\n if (section === \"contradictions\") {\n return prefixId(\"con\", id);\n }\n return id;\n}\n\nexport function toPublicCompiledContext(\n pack: ContextPackV1\n): PublicCompiledContext {\n return {\n schemaVersion: pack.schemaVersion,\n topicId: prefixId(\"top\", pack.topicId),\n topicName: pack.topicName,\n scopedTopicIds: (pack.scopedTopicIds ?? []).map((id) => prefixId(\"top\", id)),\n generatedAt: pack.generatedAt,\n ranking: pack.rankingProfile,\n summary: pack.summary as Record<string, unknown>,\n invariants: (pack.invariants ?? []).map((belief) => ({\n beliefId: prefixId(\"bel\", belief.nodeId),\n text: belief.canonicalText,\n confidence: belief.confidence ?? null,\n beliefType: belief.beliefType ?? null,\n score: belief.score,\n ...(belief.justification ? { justification: belief.justification } : {}),\n })),\n activeBeliefs: (pack.activeBeliefs ?? []).map((belief) => ({\n beliefId: prefixId(\"bel\", belief.nodeId),\n text: belief.canonicalText,\n confidence: belief.confidence ?? null,\n beliefType: belief.beliefType ?? null,\n status: belief.status,\n updatedAt: belief.updatedAt ?? null,\n score: belief.score,\n ...(belief.justification ? { justification: belief.justification } : {}),\n })),\n openQuestions: (pack.openQuestions ?? []).map((question) => ({\n questionId: prefixId(\"que\", question.questionId),\n text: question.text,\n status: question.status,\n priority: question.priority,\n updatedAt: question.updatedAt ?? null,\n score: question.score,\n ...(question.justification ? { justification: question.justification } : {}),\n })),\n recentEvidence: (pack.recentEvidence ?? []).map((evidence) => ({\n evidenceId: prefixId(\"evi\", evidence.nodeId),\n text: evidence.canonicalText,\n kind: evidence.kind,\n sourceUrl: evidence.sourceUrl ?? null,\n createdAt: evidence.createdAt ?? null,\n score: evidence.score,\n ...(evidence.justification ? { justification: evidence.justification } : {}),\n })),\n contradictions: (pack.contradictions ?? []).map((contradiction) => ({\n contradictionId: prefixId(\"con\", contradiction.contradictionId),\n severity: contradiction.severity,\n status: contradiction.status,\n description: contradiction.description,\n score: contradiction.score,\n ...(contradiction.justification\n ? { justification: contradiction.justification }\n : {}),\n })),\n ...(pack.relatedEntities\n ? {\n relatedEntities: pack.relatedEntities.map((entity) => ({\n entityId: cleanString(entity.nodeId) ?? \"\",\n entityType: entity.entityType,\n title: entity.title,\n text: cleanString((entity as Record<string, unknown>).canonicalText),\n connectedBeliefCount: entity.connectedBeliefCount,\n connectedEvidenceCount: entity.connectedEvidenceCount,\n score: entity.score,\n ...(entity.metadata ? { metadata: entity.metadata } : {}),\n })),\n }\n : {}),\n contextNarrative: pack.contextNarrative ?? [],\n injectionPolicy: {\n tokenBudget: pack.injectionPolicy.tokenBudget,\n estimatedTokens: pack.injectionPolicy.estimatedTokens,\n sectionBudgets: pack.injectionPolicy.sectionBudgets,\n sectionUsage: pack.injectionPolicy.sectionUsage,\n selected: mapSelectedIds(pack.injectionPolicy.selected),\n ...(pack.injectionPolicy.excludedItems\n ? {\n excludedItems: pack.injectionPolicy.excludedItems.map((item) => ({\n ...item,\n id: mapExcludedId(item.section, item.id),\n })),\n }\n : {}),\n },\n diagnostics: pack.diagnostics as Record<string, unknown>,\n ...(pack.compilationMode ? { compilationMode: pack.compilationMode } : {}),\n ...(pack.failureContext\n ? {\n failureContext: {\n failures: pack.failureContext.failures.map((failure) => ({\n ...failure,\n attemptId: prefixId(\"evi\", failure.attemptId),\n })),\n suppressedIds: pack.failureContext.suppressedIds.map((id) =>\n prefixId(\"evi\", id)\n ),\n },\n }\n : {}),\n ...(pack.deltaReport\n ? {\n deltaReport: {\n changedItems: pack.deltaReport.changedItems.map((item) => ({\n ...item,\n id: mapExcludedId(item.section, item.id),\n })),\n verificationObligations: pack.deltaReport.verificationObligations,\n referencePoint: prefixId(\"wt\", pack.deltaReport.referencePoint),\n },\n }\n : {}),\n ...(pack.appliedWeightOverrides\n ? { appliedWeightOverrides: pack.appliedWeightOverrides }\n : {}),\n };\n}\n\nfunction toCompilePortInput(\n input: CompileContextCommand,\n allowedTopicIds: string[]\n): CompileContextPortInput {\n const topicId = cleanString(input.topicId) ?? cleanString(input.projectId);\n if (!topicId) {\n throw new ContextCompileError(\n \"INVALID_REQUEST\",\n \"topicId is required.\",\n 400\n );\n }\n\n const query = cleanString(input.query);\n const ranking = cleanString(input.ranking) ?? cleanString(input.rankingProfile);\n const worktreeId = cleanString(input.worktreeId);\n const sessionId = cleanString(input.sessionId);\n\n return {\n topicId,\n projectId: topicId,\n ...(query ? { query } : {}),\n ...(cleanNumber(input.budget) !== undefined\n ? { budget: cleanNumber(input.budget) }\n : cleanNumber(input.tokenBudget) !== undefined\n ? { budget: cleanNumber(input.tokenBudget) }\n : {}),\n ...(ranking ? { ranking: ranking as CompileContextPortInput[\"ranking\"] } : {}),\n ...(cleanNumber(input.limit) !== undefined ? { limit: cleanNumber(input.limit) } : {}),\n ...(cleanNumber(input.maxDepth) !== undefined\n ? { maxDepth: cleanNumber(input.maxDepth) }\n : {}),\n ...(cleanBoolean(input.includeEntities) !== undefined\n ? { includeEntities: cleanBoolean(input.includeEntities) }\n : {}),\n ...(cleanString(input.mode) ? { mode: input.mode } : {}),\n ...(cleanBoolean(input.includeFailures) !== undefined\n ? { includeFailures: cleanBoolean(input.includeFailures) }\n : {}),\n ...(worktreeId ? { worktreeId } : {}),\n ...(sessionId ? { sessionId } : {}),\n ...(Array.isArray(input.packWeightOverrides) &&\n input.packWeightOverrides.length > 0\n ? { packWeightOverrides: input.packWeightOverrides }\n : {}),\n allowedTopicIds,\n };\n}\n\nexport async function compileContext(\n ports: CompileContextPorts,\n input: CompileContextCommand\n): Promise<PublicCompiledContext> {\n const topicId = cleanString(input.topicId) ?? cleanString(input.projectId);\n if (!topicId) {\n throw new ContextCompileError(\n \"INVALID_REQUEST\",\n \"topicId is required.\",\n 400\n );\n }\n\n const actorPrincipalId = cleanString(input.actorPrincipalId);\n if (ports.requireAuth !== false && !actorPrincipalId) {\n throw new ContextCompileError(\n \"AUTHENTICATION_REQUIRED\",\n \"Authentication is required to compile context.\",\n 401\n );\n }\n\n let allowedTopicIds = cleanStringArray(input.allowedTopicIds);\n if (ports.policy && actorPrincipalId) {\n const readableRoots = await ports.policy.filterReadableTopicIds({\n topicIds: [topicId],\n actorPrincipalId,\n traceId: input.policyTraceId,\n });\n if (!readableRoots.includes(topicId)) {\n throw new ContextCompileError(\n \"FORBIDDEN\",\n \"Access denied to compile context for this topic.\",\n 403\n );\n }\n const listedTopics = await ports.policy.listReadableTopicIds({\n actorPrincipalId,\n traceId: input.policyTraceId,\n });\n allowedTopicIds = listedTopics.length > 0 ? listedTopics : [topicId];\n }\n\n const compiled = await ports.compiler.compile(\n toCompilePortInput(input, allowedTopicIds.length > 0 ? allowedTopicIds : [topicId])\n );\n return toPublicCompiledContext(compiled);\n}\n","/**\n * Universal scope workflow handlers.\n *\n * Adds higher-level context assembly and structured learning writeback\n * on top of the core epistemic primitives.\n */\n\nimport { api, internal } from \"../kernelApi.js\";\nimport {\n type ContextCompilationMode,\n type ContextPackFailure,\n DEFAULT_COMPILATION_MODE,\n DEFAULT_ENTITY_LIMIT,\n MAX_ENTITY_LIMIT,\n type PackWeightOverride,\n} from \"@lucern/contracts/context-pack.contract\";\nimport {\n applySuppression,\n buildInjectionPlan,\n type EntityCandidate,\n parseTokenBudget,\n rankContextSection,\n rankEntities,\n resolveEffectiveWeights,\n} from \"../context-pack-policy.js\";\nimport {\n assertContextPackSchema,\n CONTEXT_PACK_SCHEMA_VERSION,\n type ContextRankingProfile,\n} from \"../context-pack-schema.js\";\nimport { adminMutation, adminQuery } from \"../convex-client.js\";\nimport {\n attachEvidenceSourceProvenance,\n classifyLatticeTier,\n resolveTopicOntologyVocabulary,\n routeEvidenceToLattice,\n} from \"../evidence-ingestion.js\";\nimport { toPublicCompiledContext } from \"@lucern/server-core/domain/context/compile\";\nimport {\n getDefaultScopeContext,\n readTopicIdArg,\n ROOT_TOPIC_ID,\n resolveTopicFromNode,\n resolveTopicScopeId,\n} from \"../scope.js\";\nimport {\n collectTopicNeighborhood,\n dedupeById,\n type TopicDoc,\n} from \"../topic-utils.js\";\nimport type { AuthContext, HandlerModule } from \"../handlers/types.js\";\n\nfunction asStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => (typeof entry === \"string\" ? entry.trim() : \"\"))\n .filter((entry) => entry.length > 0);\n}\n\nfunction normalizeText(value: unknown): string {\n return typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n}\n\nfunction chooseTopicByName(\n topics: Array<{ _id: string; name?: string }>,\n target: string\n) {\n const normalizedTarget = normalizeText(target);\n if (!normalizedTarget) {\n return null;\n }\n\n const exact = topics.find(\n (topic) => normalizeText(topic.name) === normalizedTarget\n );\n if (exact) {\n return exact;\n }\n\n const startsWith = topics.find((topic) =>\n normalizeText(topic.name).startsWith(normalizedTarget)\n );\n if (startsWith) {\n return startsWith;\n }\n\n const contains = topics.find((topic) =>\n normalizeText(topic.name).includes(normalizedTarget)\n );\n return contains || null;\n}\n\nasync function resolveScopeInput(\n requestedScope: string | undefined,\n toolName: string\n): Promise<{ topicId: string; topic: TopicDoc | null }> {\n if (requestedScope && requestedScope.trim().length > 0) {\n try {\n const topicId = await resolveTopicScopeId(requestedScope, toolName);\n const topic = (await adminQuery(api.topics.get, {\n id: topicId as any,\n }).catch(() => null)) as TopicDoc | null;\n return { topicId, topic };\n } catch {\n const topics = (await adminQuery(api.topics.list, {\n status: \"active\",\n })) as TopicDoc[];\n const matched = chooseTopicByName(topics, requestedScope);\n if (matched?._id) {\n const topicId = String(matched._id);\n return { topicId, topic: matched };\n }\n throw new Error(\n `[${toolName}] Scope \"${requestedScope}\" is not a topic ID and no matching topic name was found.`\n );\n }\n }\n\n const topicId = await resolveTopicScopeId(undefined, toolName);\n const topic = (await adminQuery(api.topics.get, {\n id: topicId as any,\n }).catch(() => null)) as TopicDoc | null;\n return { topicId, topic };\n}\n\nfunction toPositiveInt(value: unknown, fallback: number, max: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n const floored = Math.floor(value);\n return Math.max(1, Math.min(floored, max));\n}\n\nfunction normalizeQueryTokens(query: string | undefined): string[] {\n if (!query) {\n return [];\n }\n return query\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .map((token) => token.trim())\n .filter((token) => token.length >= 2);\n}\n\nfunction parseRankingProfile(value: unknown): ContextRankingProfile {\n return value === \"baseline_v1\" ? \"baseline_v1\" : \"weighted_v1\";\n}\n\nfunction beliefTypeOf(node: any): string {\n if (typeof node?.beliefType === \"string\") {\n return node.beliefType;\n }\n const metadata = (node?.metadata || {}) as Record<string, unknown>;\n if (typeof metadata.beliefType === \"string\") {\n return metadata.beliefType;\n }\n return \"\";\n}\n\nfunction questionStatusOf(node: any): string {\n const metadata = (node?.metadata || {}) as Record<string, unknown>;\n const direct = typeof node?.status === \"string\" ? node.status : \"\";\n const questionStatus =\n typeof metadata.questionStatus === \"string\" ? metadata.questionStatus : \"\";\n return (questionStatus || direct || \"open\").toLowerCase();\n}\n\nfunction isOpenQuestion(status: string): boolean {\n return ![\n \"answered\",\n \"archived\",\n \"closed\",\n \"resolved\",\n \"resolved_support\",\n \"resolved_contra\",\n \"belief_forked\",\n ].includes(status);\n}\n\nfunction buildEvidenceTitle(\n summary: string,\n sourceKind: string,\n sourceRef: string | undefined,\n providedTitle: string | undefined\n): string {\n if (providedTitle && providedTitle.trim().length > 0) {\n return providedTitle.trim();\n }\n const ref = sourceRef?.trim();\n if (sourceKind === \"commit\" && ref) {\n return `COMMIT ${ref.slice(0, 7)}`;\n }\n if (sourceKind === \"merge\" && ref) {\n return `MERGE ${ref.slice(0, 7)}`;\n }\n if (sourceKind === \"doc\" && ref) {\n return `DOC ${ref}`;\n }\n if (sourceKind === \"issue\" && ref) {\n return `ISSUE ${ref}`;\n }\n return summary.slice(0, 180);\n}\n\nfunction buildEvidenceBody(\n summary: string,\n touchedPaths: string[],\n sourceKind: string,\n sourceRef: string | undefined,\n providedBody: string | undefined\n): string {\n if (providedBody && providedBody.trim().length > 0) {\n return providedBody;\n }\n\n const previewPaths = touchedPaths.slice(0, 15);\n const formatted =\n previewPaths.length > 0\n ? previewPaths.map((path) => `- ${path}`).join(\"\\n\")\n : \"- (none)\";\n const truncated =\n touchedPaths.length > previewPaths.length\n ? `\\n- ... ${touchedPaths.length - previewPaths.length} more`\n : \"\";\n\n const lines = [\n `Summary: ${summary}`,\n `Source Kind: ${sourceKind}`,\n sourceRef ? `Source Ref: ${sourceRef}` : null,\n \"\",\n \"Touched paths:\",\n `${formatted}${truncated}`,\n ].filter((line): line is string => typeof line === \"string\");\n\n return lines.join(\"\\n\");\n}\n\nfunction buildLearningSourceUrl(\n sourceKind: string,\n sourceRef: string | undefined,\n sourceUrl: string | undefined\n): string | undefined {\n if (sourceUrl && sourceUrl.trim().length > 0) {\n return sourceUrl;\n }\n if (!sourceRef || sourceRef.trim().length === 0) {\n return;\n }\n\n const ref = sourceRef.trim();\n if (sourceKind === \"commit\") {\n return `git://commit/${ref}`;\n }\n if (sourceKind === \"merge\") {\n return `git://merge/${ref}`;\n }\n if (sourceKind === \"issue\") {\n return `issue://${ref}`;\n }\n if (sourceKind === \"doc\") {\n return `doc://${ref}`;\n }\n return `note://${ref}`;\n}\n\nfunction metadataText(payload: Record<string, unknown>): string {\n return JSON.stringify(payload).toLowerCase();\n}\n\n// collectTopicNeighborhood imported from ../topic-utils.js\n\nasync function compileContextPackViaQuery(\n args: Record<string, unknown>,\n ctx: AuthContext,\n options: {\n toolName: string;\n allowAmbientScope: boolean;\n }\n): Promise<Record<string, unknown>> {\n const requestedScope =\n readTopicIdArg(args) ||\n (options.allowAmbientScope ? getDefaultScopeContext().topicId : undefined) ||\n undefined;\n\n if (!requestedScope) {\n throw new Error(`[${options.toolName}] topicId is required.`);\n }\n\n const { topicId } = await resolveScopeInput(requestedScope, options.toolName);\n if (\n ctx.sessionType === \"user\" &&\n Array.isArray(ctx.allowedTopics) &&\n (!ctx.allowedTopics.includes(topicId) || ctx.allowedTopics.length === 0)\n ) {\n throw new Error(\n `[${options.toolName}] Access denied to compile context for topic ${topicId}.`\n );\n }\n\n const compileArgs: Record<string, unknown> = {\n ...args,\n topicId,\n projectId: topicId,\n };\n if (ctx.sessionType === \"user\" && Array.isArray(ctx.allowedTopics)) {\n compileArgs.allowedTopicIds = ctx.allowedTopics;\n }\n\n return (await adminQuery((api as any).contextCompiler.compile, compileArgs)) as Record<\n string,\n unknown\n >;\n}\n\nexport const scopeContextHandlers: HandlerModule = {\n async compile_context(args, ctx) {\n const compiled = await compileContextPackViaQuery(args, ctx, {\n toolName: \"compile_context\",\n allowAmbientScope: false,\n });\n return toPublicCompiledContext(compiled as any);\n },\n\n async record_scope_learning(args, ctx) {\n const linkedBeliefNodeId =\n typeof args.linkedBeliefNodeId === \"string\" &&\n args.linkedBeliefNodeId.trim().length > 0\n ? args.linkedBeliefNodeId\n : undefined;\n\n // Prefer topicId inherited from linked belief (evidence belongs near its belief).\n const inheritedTopicId = await resolveTopicFromNode(\n linkedBeliefNodeId,\n \"record_scope_learning\"\n );\n\n const requestedScope =\n readTopicIdArg(args) ||\n getDefaultScopeContext().topicId ||\n undefined;\n\n let topicId: string;\n if (inheritedTopicId) {\n topicId = inheritedTopicId;\n } else {\n const resolved = await resolveScopeInput(\n requestedScope,\n \"record_scope_learning\"\n );\n topicId = resolved.topicId;\n }\n\n // Root topic is NEVER a valid home for epistemic nodes\n if (topicId === ROOT_TOPIC_ID) {\n throw new Error(\n \"[record_scope_learning] Resolved topic is Root — epistemic nodes must belong to a child topic. \" +\n \"Provide a valid topicId or link to a belief under a specific topic.\"\n );\n }\n\n const summary = String(args.summary || \"\").trim();\n if (!summary) {\n throw new Error(\"[record_scope_learning] summary is required.\");\n }\n\n const sourceKindRaw = String(args.sourceKind || \"manual\").toLowerCase();\n const sourceKind = [\"commit\", \"merge\", \"doc\", \"issue\", \"manual\"].includes(\n sourceKindRaw\n )\n ? sourceKindRaw\n : \"manual\";\n const sourceRef =\n typeof args.sourceRef === \"string\" && args.sourceRef.trim().length > 0\n ? args.sourceRef.trim()\n : undefined;\n const providedTitle =\n typeof args.title === \"string\" && args.title.trim().length > 0\n ? args.title.trim()\n : undefined;\n const providedBody =\n typeof args.body === \"string\" && args.body.trim().length > 0\n ? args.body\n : undefined;\n const contentType =\n typeof args.contentType === \"string\" && args.contentType.trim().length > 0\n ? args.contentType.trim()\n : \"markdown\";\n const sourceUrl = buildLearningSourceUrl(\n sourceKind,\n sourceRef,\n typeof args.sourceUrl === \"string\" ? args.sourceUrl : undefined\n );\n\n const touchedPaths = asStringArray(args.touchedPaths);\n const tags = Array.from(\n new Set([\n \"learning\",\n sourceKind,\n ...asStringArray(args.tags),\n ...touchedPaths.slice(0, 8).map((path) => {\n const topLevel = path.split(\"/\")[0] || path;\n return `path:${topLevel}`;\n }),\n ])\n );\n\n const relationRaw = String(\n args.evidenceRelation || \"supports\"\n ).toLowerCase();\n const evidenceRelation =\n relationRaw === \"contradicts\" ? \"contradicts\" : \"supports\";\n const confidence =\n typeof args.confidence === \"number\" && Number.isFinite(args.confidence)\n ? Math.max(0, Math.min(1, args.confidence))\n : undefined;\n\n const evidenceTitle = buildEvidenceTitle(\n summary,\n sourceKind,\n sourceRef,\n providedTitle\n );\n const evidenceBody = buildEvidenceBody(\n summary,\n touchedPaths,\n sourceKind,\n sourceRef,\n providedBody\n );\n\n const evidenceResult = (await adminMutation(\n internal.epistemicEvidence.internalCreate,\n {\n topicId: topicId as any,\n text: summary,\n title: evidenceTitle,\n content: evidenceBody,\n contentType,\n sourceUrl,\n tags,\n sourceType: \"ai_generated\",\n userId: ctx.userId,\n metadata: {\n sourceKind,\n sourceRef,\n touchedPaths,\n context: \"record_scope_learning\",\n },\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"record_scope_learning\",\n ...(linkedBeliefNodeId\n ? {\n linkedBeliefNodeId: linkedBeliefNodeId as any,\n evidenceRelation,\n ...(typeof confidence === \"number\" ? { confidence } : {}),\n }\n : {}),\n }\n )) as { nodeId?: string };\n\n const evidenceNodeId = String(evidenceResult?.nodeId || \"\");\n\n // OE-C: Create entity bridge edges if entityNodeIds provided\n const entityNodeIds = Array.isArray(args.entityNodeIds)\n ? (args.entityNodeIds as string[]).filter(\n (id) => typeof id === \"string\" && id.length > 0\n )\n : [];\n const entityEdgeIds: string[] = [];\n\n if (entityNodeIds.length > 0 && evidenceNodeId) {\n for (const entityId of entityNodeIds) {\n try {\n const bridgeResult = await adminMutation(\n internal.lucernMcp.internalCreateEdge,\n {\n fromNodeId: evidenceNodeId,\n toNodeId: entityId,\n edgeType: \"entity_referenced_in\",\n weight: confidence ?? 0.5,\n context: `Scope learning references entity (${sourceKind}${sourceRef ? `: ${sourceRef}` : \"\"})`,\n userId: ctx.userId,\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"record_scope_learning\",\n }\n );\n const globalId = (bridgeResult as Record<string, unknown>).globalId;\n if (globalId) {\n entityEdgeIds.push(globalId as string);\n }\n } catch (error) {\n console.error(\n `[record_scope_learning] Failed to link entity ${entityId}:`,\n error\n );\n }\n }\n }\n\n const provenance =\n evidenceNodeId && (sourceKind !== \"manual\" || sourceRef || sourceUrl)\n ? await attachEvidenceSourceProvenance({\n ctx,\n evidenceNodeId,\n toolName: \"record_scope_learning\",\n topicId,\n summary,\n sourceKind,\n sourceRef,\n sourceUrl,\n touchedPaths,\n })\n : null;\n\n const latticeRouting =\n evidenceNodeId && summary.length > 0\n ? await routeEvidenceToLattice({\n ctx,\n evidenceNodeId,\n inputText: `${summary}\\n\\n${evidenceBody}`,\n toolName: \"record_scope_learning\",\n topicId,\n })\n : null;\n\n const createQuestionText =\n typeof args.createQuestionText === \"string\" &&\n args.createQuestionText.trim().length > 0\n ? args.createQuestionText.trim()\n : undefined;\n\n const createBeliefText =\n typeof args.createBeliefText === \"string\" &&\n args.createBeliefText.trim().length > 0\n ? args.createBeliefText.trim()\n : undefined;\n\n const createdQuestionId = createQuestionText\n ? String(\n (\n (await adminMutation(internal.epistemicQuestions.internalCreate, {\n topicId: topicId as any,\n question: createQuestionText,\n source: \"user\",\n priority: \"medium\",\n userId: ctx.userId,\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"record_scope_learning\",\n ...(linkedBeliefNodeId\n ? { linkedBeliefNodeId: linkedBeliefNodeId as any }\n : {}),\n })) as { nodeId?: string }\n )?.nodeId || \"\"\n )\n : null;\n\n const createdBeliefId = createBeliefText\n ? String(\n (\n (await adminMutation(internal.epistemicBeliefs.internalCreate, {\n topicId: topicId as any,\n formulation: createBeliefText,\n userId: ctx.userId,\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"record_scope_learning\",\n ...(typeof args.beliefType === \"string\" &&\n args.beliefType.trim().length > 0\n ? { beliefType: args.beliefType.trim() }\n : {}),\n })) as { nodeId?: string }\n )?.nodeId || \"\"\n )\n : null;\n\n return {\n topicId,\n evidenceNodeId,\n linkedBeliefNodeId: linkedBeliefNodeId || null,\n createdQuestionId,\n createdBeliefId,\n sourceUrl: sourceUrl || null,\n ...(entityEdgeIds.length > 0 ? { entityEdgeIds } : {}),\n ...(provenance ? provenance : {}),\n ...(latticeRouting ? { latticeRouting } : {}),\n createdAt: Date.now(),\n };\n },\n\n // ===========================================================================\n // seed_belief_lattice — S2-13M Topic-Aligned Belief Lattice Seeder\n // ===========================================================================\n\n /**\n * Seed belief lattice for a topic based on its resolved ontology.\n *\n * For each entity type in the topic's ontology, ensures a seed belief exists\n * that covers that entity type. Seeds are:\n * - Marked with `metadata.latticeSeedEntityType` for deduplication\n * - Classified with `metadata.latticeTier` (core/derived/peripheral)\n * - Auto-scored at 0.70 (ontology validates existence, domain relevance unverified)\n * - Tagged with `metadata.ontologyVersion` for staleness detection\n */\n async seed_belief_lattice(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"seed_belief_lattice\"\n );\n\n if (topicId === ROOT_TOPIC_ID) {\n throw new Error(\n \"[seed_belief_lattice] Resolved topic is Root — lattice seeding must target a child topic.\"\n );\n }\n\n // Step 1: Resolve the ontology for this topic\n const ontology = await resolveTopicOntologyVocabulary(topicId);\n if (!ontology || ontology.entityTypes.length === 0) {\n return {\n topicId,\n ontologyResolved: false,\n ontologyKey: null,\n seeds: [],\n message:\n \"No ontology bound to this topic (or no published version with entity types).\",\n };\n }\n\n // Step 2: Find existing lattice seed beliefs in scope\n const existingSeedsResult = (await adminQuery(\n internal.lucernMcp.findLatticeSeedBeliefs,\n { topicId: topicId as any }\n )) as { seeds: Record<string, { nodeId: string; canonicalText: string }> };\n\n const existingSeeds = existingSeedsResult?.seeds || {};\n const connectivityResult = (await adminQuery(\n internal.lucernMcp.getLatticeConnectivity,\n { topicId: topicId as any }\n )) as {\n connectivity?: Record<\n string,\n { connectedBeliefCount: number; connectedEvidenceCount: number }\n >;\n };\n const connectivity = connectivityResult?.connectivity || {};\n\n // Step 3: For each entity type, either find existing seed or create new one\n type SeedEntry = {\n beliefNodeId: string;\n entityType: string;\n created: boolean;\n scored: boolean;\n canonicalText: string;\n latticeTier: \"core\" | \"derived\" | \"peripheral\";\n };\n\n const seeds: SeedEntry[] = [];\n const dryRun = args.dryRun === true;\n const ontologyVersion = ontology.ontologyVersion;\n\n for (const entityTypeDef of ontology.entityTypes) {\n const entityType = entityTypeDef.value;\n const existing = existingSeeds[entityType];\n const latticeTier = classifyLatticeTier(\n connectivity[entityType] || {\n connectedBeliefCount: 0,\n connectedEvidenceCount: 0,\n }\n );\n\n if (existing) {\n if (!dryRun) {\n await adminMutation(\n (internal.lucernMcp as any).internalSetBeliefLatticeTier,\n {\n beliefNodeId: existing.nodeId as any,\n latticeTier,\n userId: ctx.userId,\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"seed_belief_lattice\",\n }\n ).catch(() => null);\n }\n seeds.push({\n beliefNodeId: existing.nodeId,\n entityType,\n created: false,\n scored: false,\n canonicalText: existing.canonicalText,\n latticeTier,\n });\n continue;\n }\n\n const seedText = `The ${entityType} entity type is relevant to this topic's domain and should be used to anchor beliefs about ${entityType}-class entities within this scope.`;\n\n if (dryRun) {\n seeds.push({\n beliefNodeId: \"\",\n entityType,\n created: true,\n scored: false,\n canonicalText: seedText,\n latticeTier,\n });\n continue;\n }\n\n // Create seed belief with latticeTier and ontology version metadata\n const result = (await adminMutation(\n internal.epistemicBeliefs.internalCreate,\n {\n topicId: topicId as any,\n formulation: seedText,\n beliefType: \"belief\",\n confidence: \"medium\" as const,\n userId: ctx.userId,\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"seed_belief_lattice\",\n extraMetadata: {\n latticeSeedEntityType: entityType,\n latticeTier,\n ontologyKey: ontology.ontologyKey,\n ontologyVersion,\n seededAt: Date.now(),\n },\n }\n )) as { nodeId?: string };\n\n const nodeId = String(result?.nodeId || \"\");\n\n // Auto-score at 0.70 — ontology validates existence, domain relevance unverified\n let scored = false;\n if (nodeId) {\n try {\n await adminMutation(internal.lucernMcp.internalModulateConfidence, {\n nodeId: nodeId as any,\n confidence: 0.7,\n trigger: \"manual\" as const,\n rationale:\n `Lattice seed auto-scored at 0.70: ontology \"${ontology.ontologyKey}\" ` +\n `(v${ontologyVersion}) validates entity type \"${entityType}\" exists ` +\n `in this topic's domain. Domain relevance is unverified.`,\n userId: ctx.userId,\n mcpSessionId: ctx.sessionId,\n mcpToolName: \"seed_belief_lattice\",\n });\n scored = true;\n } catch {\n // Scoring may be gated by confidence policy — seed still exists\n }\n }\n\n seeds.push({\n beliefNodeId: nodeId,\n entityType,\n created: true,\n scored,\n canonicalText: seedText,\n latticeTier,\n });\n }\n\n const createdCount = seeds.filter((s) => s.created).length;\n const existingCount = seeds.filter((s) => !s.created).length;\n const scoredCount = seeds.filter((s) => s.scored).length;\n\n return {\n topicId,\n ontologyResolved: true,\n ontologyKey: ontology.ontologyKey || null,\n ontologyVersion,\n entityTypeCount: ontology.entityTypes.length,\n seeds,\n summary: {\n created: createdCount,\n existing: existingCount,\n scored: scoredCount,\n total: seeds.length,\n },\n dryRun: dryRun || false,\n };\n },\n\n // ===========================================================================\n // get_lattice_coverage — S2-13M Lattice Coverage Report\n // ===========================================================================\n\n /**\n * Report belief lattice coverage for a topic — which entity types have\n * seed beliefs, which have real beliefs connected (anchored), and which\n * are hollow or missing. Returns per-entity-type connectivity metrics.\n */\n async get_lattice_coverage(args, _ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"get_lattice_coverage\"\n );\n\n // Step 1: Resolve ontology\n const ontology = await resolveTopicOntologyVocabulary(topicId);\n if (!ontology || ontology.entityTypes.length === 0) {\n return {\n topicId,\n ontologyKey: null,\n ontologyVersion: null,\n entityTypes: [],\n summary: {\n total: 0,\n anchored: 0,\n hollow: 0,\n missing: 0,\n coverageScore: 0,\n },\n message: \"No ontology bound to this topic.\",\n };\n }\n\n // Step 2: Get existing seed beliefs\n const existingSeedsResult = (await adminQuery(\n internal.lucernMcp.findLatticeSeedBeliefs,\n { topicId: topicId as any }\n )) as { seeds: Record<string, { nodeId: string; canonicalText: string }> };\n const existingSeeds = existingSeedsResult?.seeds || {};\n\n // Step 3: Get connectivity data (real beliefs + evidence per entity type)\n const connectivityResult = (await adminQuery(\n internal.lucernMcp.getLatticeConnectivity,\n { topicId: topicId as any }\n )) as {\n connectivity: Record<\n string,\n { connectedBeliefCount: number; connectedEvidenceCount: number }\n >;\n };\n const connectivity = connectivityResult?.connectivity || {};\n\n // Step 4: Classify each entity type\n type CoverageEntry = {\n entityType: string;\n status: \"anchored\" | \"hollow\" | \"missing\";\n seedBeliefId: string | null;\n latticeTier: \"core\" | \"derived\" | \"peripheral\";\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n };\n\n const entityTypes: CoverageEntry[] = [];\n let anchored = 0;\n let hollow = 0;\n let missing = 0;\n\n for (const entityTypeDef of ontology.entityTypes) {\n const entityType = entityTypeDef.value;\n const seed = existingSeeds[entityType];\n const conn = connectivity[entityType] || {\n connectedBeliefCount: 0,\n connectedEvidenceCount: 0,\n };\n\n let status: \"anchored\" | \"hollow\" | \"missing\";\n if (!seed) {\n status = \"missing\";\n missing++;\n } else if (conn.connectedBeliefCount > 0) {\n status = \"anchored\";\n anchored++;\n } else {\n status = \"hollow\";\n hollow++;\n }\n\n entityTypes.push({\n entityType,\n status,\n seedBeliefId: seed?.nodeId || null,\n latticeTier: classifyLatticeTier(conn),\n connectedBeliefCount: conn.connectedBeliefCount,\n connectedEvidenceCount: conn.connectedEvidenceCount,\n });\n }\n\n const total = ontology.entityTypes.length;\n const coverageScore = total > 0 ? anchored / total : 0;\n\n return {\n topicId,\n ontologyKey: ontology.ontologyKey || null,\n ontologyVersion: ontology.ontologyVersion,\n entityTypes,\n summary: {\n total,\n anchored,\n hollow,\n missing,\n coverageScore: Math.round(coverageScore * 100) / 100,\n },\n };\n },\n};\n","import { autoBranchingHandlers as autoBranchingCompatHandlers } from \"../handlers-compat/auto-branching.js\";\nimport { bootstrapHandlers as bootstrapCompatHandlers } from \"../handlers-compat/bootstrap.js\";\nimport { codingHandlers as codingCompatHandlers } from \"../handlers-compat/coding.js\";\nimport { coordinationHandlers as coordinationCompatHandlers } from \"../handlers-compat/coordination.js\";\nimport { policyHandlers as policyCompatHandlers } from \"../handlers-compat/policy.js\";\nimport { researchHandlers as researchCompatHandlers } from \"../handlers-compat/research.js\";\nimport { scopeContextHandlers as scopeContextCompatHandlers } from \"../handlers-compat/scope-context.js\";\nimport type { AuthContext } from \"./types.js\";\n\ntype HandlerSdkClient = Record<string, any>;\n\nconst handlerSdkClientCache = new WeakMap<AuthContext, HandlerSdkClient>();\n\nasync function resolveOntologyFromLookup(\n baseClient: Record<string, any>,\n input: Record<string, unknown>\n) {\n const id = readString(input.id ?? input.ontologyId);\n if (id) {\n return baseClient.ontologies.get(id);\n }\n\n const ontologyKey = readString(input.ontologyKey);\n if (!ontologyKey) {\n return {\n error: \"Either id or ontologyKey is required.\",\n };\n }\n\n const listResult = await baseClient.ontologies.list({\n tenantId: readString(input.tenantId),\n tier: readString(input.tier),\n status: readString(input.status),\n });\n const payload = asRecord(listResult);\n const rows = Array.isArray(payload.ontologies)\n ? payload.ontologies\n : Array.isArray(payload.definitions)\n ? payload.definitions\n : [];\n const tenantId = readString(input.tenantId);\n const match = rows.find((row) => {\n const record = asRecord(row);\n if (readString(record.ontologyKey) !== ontologyKey) {\n return false;\n }\n if (!tenantId) {\n return true;\n }\n return readString(record.tenantId) === tenantId;\n });\n\n return match\n ? asRecord(match)\n : {\n error: `Ontology not found: ${ontologyKey}`,\n };\n}\n\nfunction buildHandlerSdkClient(ctx: AuthContext): HandlerSdkClient {\n const baseClient = ctx.lucernClient as HandlerSdkClient;\n\n return {\n ...baseClient,\n context: {\n ...baseClient.context,\n recordScopeLearning(input: Record<string, unknown>) {\n return scopeContextCompatHandlers.record_scope_learning(input ?? {}, ctx);\n },\n analyzeTopicDensity(input: Record<string, unknown>) {\n return autoBranchingCompatHandlers.analyze_topic_density(\n input ?? {},\n ctx\n );\n },\n applyAutoBranching(input: Record<string, unknown>) {\n return autoBranchingCompatHandlers.apply_auto_branching(\n input ?? {},\n ctx\n );\n },\n seedBeliefLattice(input: Record<string, unknown> = {}) {\n return scopeContextCompatHandlers.seed_belief_lattice(input, ctx);\n },\n getLatticeCoverage(input: Record<string, unknown> = {}) {\n return scopeContextCompatHandlers.get_lattice_coverage(input, ctx);\n },\n },\n coordination: {\n ...baseClient.coordination,\n registerSession(input: Record<string, unknown> = {}) {\n return coordinationCompatHandlers.register_session(input, ctx);\n },\n heartbeatSession(input: Record<string, unknown> = {}) {\n return coordinationCompatHandlers.heartbeat_session(input, ctx);\n },\n endSession(input: Record<string, unknown> = {}) {\n return coordinationCompatHandlers.end_session(input, ctx);\n },\n listActiveSessions(input: Record<string, unknown> = {}) {\n return coordinationCompatHandlers.list_active_sessions(input, ctx);\n },\n sendAgentMessage(input: Record<string, unknown>) {\n return coordinationCompatHandlers.send_agent_message(input ?? {}, ctx);\n },\n broadcastMessage(input: Record<string, unknown>) {\n return coordinationCompatHandlers.broadcast_message(input ?? {}, ctx);\n },\n getInbox(input: Record<string, unknown> = {}) {\n return coordinationCompatHandlers.get_agent_inbox(input, ctx);\n },\n claimFiles(input: Record<string, unknown>) {\n return coordinationCompatHandlers.claim_files(input ?? {}, ctx);\n },\n },\n coding: {\n ...baseClient.coding,\n getCodeContext(input: Record<string, unknown>) {\n return codingCompatHandlers.get_code_context(input ?? {}, ctx);\n },\n getChangeHistory(input: Record<string, unknown>) {\n return codingCompatHandlers.get_change_history(input ?? {}, ctx);\n },\n recordAttempt(input: Record<string, unknown>) {\n return codingCompatHandlers.record_attempt(input ?? {}, ctx);\n },\n getFailureLog(input: Record<string, unknown>) {\n return codingCompatHandlers.get_failure_log(input ?? {}, ctx);\n },\n },\n policy: {\n ...baseClient.policy,\n checkPermission(input: Record<string, unknown>) {\n return policyCompatHandlers.check_permission(input ?? {}, ctx);\n },\n filterByPermission(input: Record<string, unknown>) {\n return policyCompatHandlers.filter_by_permission(input ?? {}, ctx);\n },\n manageWritePolicy(input: Record<string, unknown>) {\n return policyCompatHandlers.manage_write_policy(input ?? {}, ctx);\n },\n },\n research: {\n ...baseClient.research,\n searchSources(input: Record<string, unknown>) {\n return researchCompatHandlers.search_sources(input ?? {}, ctx);\n },\n executeDeepResearch(input: Record<string, unknown>) {\n return researchCompatHandlers.execute_deep_research(input ?? {}, ctx);\n },\n },\n bootstrap: {\n ...baseClient.bootstrap,\n generateSessionHandoff(input: Record<string, unknown>) {\n return bootstrapCompatHandlers.generate_session_handoff(input ?? {}, ctx);\n },\n },\n ontologies: {\n ...baseClient.ontologies,\n get(input: string | Record<string, unknown>) {\n return typeof input === \"string\"\n ? baseClient.ontologies.get(input)\n : resolveOntologyFromLookup(baseClient, input ?? {});\n },\n },\n };\n}\n\nexport function getSdkClient(ctx: AuthContext): HandlerSdkClient {\n if (!ctx.lucernClient) {\n throw new Error(\"Lucern SDK client is not available for this MCP runtime.\");\n }\n\n const cached = handlerSdkClientCache.get(ctx);\n if (cached) {\n return cached;\n }\n\n const wrappedClient = buildHandlerSdkClient(ctx);\n handlerSdkClientCache.set(ctx, wrappedClient);\n return wrappedClient;\n}\n\nexport function formatSdkResult<T>(value: T): Record<string, unknown> {\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"data\" in value\n ) {\n const envelope = value as { data?: Record<string, unknown> };\n if (\n envelope.data &&\n typeof envelope.data === \"object\" &&\n !Array.isArray(envelope.data)\n ) {\n return envelope.data;\n }\n }\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n\n return { value } as Record<string, unknown>;\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nexport function asJsonObject(\n value: unknown\n): Record<string, unknown> | undefined {\n const record = asRecord(value);\n return Object.keys(record).length > 0 ? record : undefined;\n}\n\nexport function readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nexport function readNumber(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const parsed = Number(value.trim());\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n}\n\nexport function readBoolean(value: unknown): boolean | undefined {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") {\n return true;\n }\n if (normalized === \"false\") {\n return false;\n }\n }\n return undefined;\n}\n\nexport function readStringArray(value: unknown): string[] | undefined {\n if (Array.isArray(value)) {\n const items = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n\n return items.length > 0 ? items : undefined;\n }\n\n if (typeof value === \"string\") {\n const normalized = value.trim();\n if (normalized.startsWith(\"[\")) {\n try {\n const parsed = JSON.parse(normalized);\n if (Array.isArray(parsed)) {\n return readStringArray(parsed);\n }\n } catch {\n // Ignore malformed JSON and fall through to undefined.\n }\n }\n }\n\n return undefined;\n}\n\nexport function readTimeRange(\n value: unknown\n): { start: number; end: number } | undefined {\n const record = asRecord(value);\n const start = readNumber(record.start);\n const end = readNumber(record.end);\n\n if (start === undefined && end === undefined) {\n return undefined;\n }\n\n return {\n start: start ?? Number.NaN,\n end: end ?? Number.NaN,\n };\n}\n","/**\n * Answer Handlers — create_answer, get_answer\n */\n\nimport type { HandlerModule } from \"./types.js\";\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\n\nexport const answerHandlers: HandlerModule = {\n async create_answer(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).answers.create({\n questionNodeId: args.questionNodeId as string,\n answerText: args.answerText as string,\n confidence: (args.confidence as string) || \"moderate\",\n evidenceNodeIds: (args.evidenceNodeIds as string[]) || [],\n answerSource: (args.answerSource as string) || \"ai_generated\",\n })\n );\n },\n\n async get_answer(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).answers.get({\n questionNodeId: args.questionNodeId as string,\n })\n );\n },\n};\n","/**\n * Auto-Branching Handlers — analyze_topic_density, apply_auto_branching\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const autoBranchingHandlers: HandlerModule = {\n async analyze_topic_density(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.analyzeTopicDensity(args)\n );\n },\n\n async apply_auto_branching(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.applyAutoBranching(args)\n );\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport { readTopicIdArg } from \"../scope.js\";\nimport {\n asJsonObject,\n asRecord,\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n readStringArray,\n readTimeRange,\n} from \"./sdk.js\";\n\nexport const beliefHandlers: HandlerModule = {\n async create_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.create({\n topicId: readString(readTopicIdArg(args)) ?? \"\",\n text:\n readString(args.text ?? args.canonicalText ?? args.formulation) ?? \"\",\n rationale: readString(args.rationale),\n worktreeId: readString(args.worktreeId),\n pillar: readString(args.pillar),\n sourceBeliefIds: readStringArray(args.sourceBeliefIds),\n sourceType: readString(args.sourceType),\n beliefType: readString(args.beliefType),\n reversibility: readString(args.reversibility),\n predictionMeta: asJsonObject(args.predictionMeta) as any,\n metadata: asJsonObject(args.metadata) as any,\n })\n );\n },\n\n async get_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.get(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async list_beliefs(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.list({\n topicId: readString(readTopicIdArg(args)),\n status: readString(args.status),\n worktreeId: readString(args.worktreeId),\n minConfidence: readNumber(args.minConfidence),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async refine_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.refine(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n text:\n readString(args.canonicalText ?? args.text ?? args.formulation) ??\n \"\",\n rationale: readString(args.rationale),\n }\n )\n );\n },\n\n async modulate_confidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.modulateConfidence(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n confidence:\n readNumber(args.confidence ?? args.newConfidence) ?? Number.NaN,\n trigger: readString(args.trigger) as any,\n rationale: readString(args.rationale) ?? \"\",\n certainty: readNumber(args.certainty),\n maxInlinePropagationTargets: readNumber(\n args.maxInlinePropagationTargets\n ),\n }\n )\n );\n },\n\n async fork_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.fork(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n text:\n readString(args.text ?? args.newFormulation ?? args.formulation) ??\n \"\",\n forkReason: readString(args.forkReason) as any,\n rationale: readString(args.rationale),\n }\n )\n );\n },\n\n async archive_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.archive(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n reason: readString(args.reason ?? args.rationale),\n }\n )\n );\n },\n\n async query_lineage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.lineage(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async get_confidence_history(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.confidenceHistory(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async create_epistemic_contract(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.createContract(\n readString(\n args.id ?? args.nodeId ?? args.beliefId ?? args.beliefNodeId\n ) ?? \"\",\n {\n title: readString(args.title) ?? \"\",\n description: readString(args.description),\n conditionType: readString(args.conditionType) as any,\n direction: readString(args.direction) as any,\n condition: asRecord(args.condition) as any,\n deadline: readNumber(args.deadline),\n compositeOf: readStringArray(args.compositeOf),\n compositeOperator: readString(args.compositeOperator) as any,\n modulation: asRecord(args.modulation) as any,\n evaluationSchedule: readString(\n args.evaluationSchedule ?? args.schedule\n ) as any,\n periodicIntervalMs: readNumber(args.periodicIntervalMs),\n }\n )\n );\n },\n\n async bisect_confidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.bisect(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n expectedDirection: readString(args.expectedDirection) as any,\n timeRange: readTimeRange(args.timeRange),\n }\n )\n );\n },\n};\n","/**\n * Bootstrap Handlers — generate_session_handoff\n */\n\nimport { bootstrapHandlers as bootstrapCompatHandlers } from \"../handlers-compat/bootstrap.js\";\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const bootstrapHandlers: HandlerModule = {\n async generate_session_handoff(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).bootstrap.generateSessionHandoff(args)\n );\n },\n\n async begin_build_session(args, ctx) {\n // DIRECT: orchestration — build-session startup composes activation, question hydration, and session packet assembly.\n return bootstrapCompatHandlers.begin_build_session(args, ctx);\n },\n};\n","/**\n * Coding Intelligence Handlers\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const codingHandlers: HandlerModule = {\n async get_code_context(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coding.getCodeContext(args));\n },\n\n async get_change_history(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coding.getChangeHistory(args)\n );\n },\n\n async record_attempt(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coding.recordAttempt(args));\n },\n\n async get_failure_log(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coding.getFailureLog(args));\n },\n};\n","import type { JsonObject } from \"@lucern/sdk/types\";\nimport { formatSdkResult, getSdkClient, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const contractHandlers: HandlerModule = {\n async create_epistemic_contract(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).contracts.create(args as JsonObject)\n );\n },\n\n async evaluate_contract(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).contracts.evaluate({\n contractId: readString(args.contractId),\n trigger: args.trigger as any,\n topicId: readString(args.topicId),\n })\n );\n },\n\n async get_contract_status(args, ctx) {\n if (!args.beliefNodeId && !args.contractId) {\n throw new Error(\n \"get_contract_status requires either beliefNodeId or contractId.\"\n );\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).contracts.getStatus({\n beliefNodeId: readString(args.beliefNodeId),\n contractId: readString(args.contractId),\n status: args.status as any,\n })\n );\n },\n};\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nfunction normalizeBeliefId(value: string): string {\n try {\n const decoded = decodePrefixedId(value);\n return encodePrefixedId(\"bel\", decoded.value);\n } catch {\n return encodePrefixedId(\"bel\", value);\n }\n}\n\nexport const contradictionHandlers: HandlerModule = {\n async flag_contradiction(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"flag_contradiction\"\n );\n\n return formatSdkResult(\n await getSdkClient(ctx).contradictions.flag({\n beliefA: readString(args.beliefA) ?? \"\",\n beliefB: readString(args.beliefB) ?? \"\",\n description: readString(args.description) ?? \"\",\n topicId,\n severity: readString(args.severity),\n defeatType: readString(args.defeatType),\n })\n );\n },\n\n async find_contradictions(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args) ?? readString(args.nodeId),\n \"find_contradictions\"\n );\n const beliefId = readString(args.nodeId);\n const payload = formatSdkResult(\n await getSdkClient(ctx).contradictions.list({\n topicId,\n status: readString(args.status),\n limit: readNumber(args.limit),\n })\n );\n\n if (!beliefId) {\n return payload;\n }\n\n const normalizedBeliefId = normalizeBeliefId(beliefId);\n return {\n ...payload,\n contradictions: (Array.isArray(payload.contradictions)\n ? payload.contradictions\n : []\n ).filter(\n (entry) =>\n entry.beliefA === normalizedBeliefId ||\n entry.beliefB === normalizedBeliefId\n ),\n };\n },\n\n async list_contradictions(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"list_contradictions\"\n );\n\n return formatSdkResult(\n await getSdkClient(ctx).contradictions.list({\n topicId,\n status: readString(args.status),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async get_contradiction(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).contradictions.get(\n readString(args.id ?? args.contradictionId) ?? \"\"\n )\n );\n },\n};\n","/**\n * Coordination Handlers — MCP tool handlers for inter-agent session coordination.\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const coordinationHandlers: HandlerModule = {\n async register_session(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.registerSession(args)\n );\n },\n\n async heartbeat_session(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.heartbeatSession(args)\n );\n },\n\n async end_session(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coordination.endSession(args));\n },\n\n async list_active_sessions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.listActiveSessions(args)\n );\n },\n\n async send_agent_message(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.sendAgentMessage(args)\n );\n },\n\n async broadcast_message(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.broadcastMessage(args)\n );\n },\n\n async get_agent_inbox(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coordination.getInbox(args));\n },\n\n async claim_files(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coordination.claimFiles(args));\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const edgeHandlers: HandlerModule = {\n async create_edge(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).edges.create({\n sourceId: readString(args.sourceId) ?? \"\",\n targetId: readString(args.targetId) ?? \"\",\n edgeType: readString(args.edgeType) ?? \"\",\n topicId: readString(args.topicId ?? args.projectId),\n confidence: readNumber(args.confidence),\n weight: readNumber(args.weight),\n context: readString(args.context) ?? readString(args.reasoning),\n })\n );\n },\n\n async list_edges(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).edges.list({\n sourceId: readString(args.sourceId) ?? \"\",\n edgeType: readString(args.edgeType),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async traverse_graph(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).edges.traverse({\n startNode: readString(args.startNode) ?? \"\",\n direction: readString(args.direction),\n maxDepth: readNumber(args.maxDepth),\n topicId: readString(args.topicId ?? args.projectId),\n })\n );\n },\n};\n","/**\n * Graph Handlers — traverse_graph, search_beliefs, find_contradictions,\n * bisect_confidence, trace_entity_impact\n */\n\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport { beliefHandlers } from \"./beliefs.js\";\nimport { contradictionHandlers } from \"./contradictions.js\";\nimport { edgeHandlers } from \"./edges.js\";\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const graphHandlers: HandlerModule = {\n async traverse_graph(args, ctx) {\n return edgeHandlers.traverse_graph(args, ctx);\n },\n\n async search_beliefs(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"search_beliefs\"\n );\n\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.search({\n query: typeof args.query === \"string\" ? args.query : \"\",\n topicId,\n status: typeof args.status === \"string\" ? args.status : undefined,\n minConfidence:\n typeof args.minConfidence === \"number\" ? args.minConfidence : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n })\n );\n },\n\n async find_contradictions(args, ctx) {\n return contradictionHandlers.find_contradictions(args, ctx);\n },\n\n async bisect_confidence(args, ctx) {\n return beliefHandlers.bisect_confidence(args, ctx);\n },\n\n async trace_entity_impact(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"trace_entity_impact\"\n ).catch(() => undefined);\n\n return formatSdkResult(\n await getSdkClient(ctx).graph.traceEntityImpact({\n nodeId: typeof args.nodeId === \"string\" ? args.nodeId : \"\",\n topicId,\n })\n );\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readBoolean,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const topicHandlers: HandlerModule = {\n async create_topic(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.create({\n name: readString(args.name) ?? \"\",\n description: readString(args.description),\n type: readString(args.type),\n parentTopicId: readString(args.parentTopicId),\n ontologyId: readString(args.ontologyId),\n tenantId: readString(args.tenantId),\n workspaceId: readString(args.workspaceId),\n visibility: readString(args.visibility) as any,\n createdBy: readString(args.createdBy),\n })\n );\n },\n\n async list_topics(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.list({\n ontologyId: readString(args.ontologyId),\n parentTopicId: readString(args.parentTopicId),\n status: readString(args.status),\n type: readString(args.type),\n })\n );\n },\n\n async get_topic(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.get(\n readString(args.topicId ?? args.id) ?? \"\"\n )\n );\n },\n\n async update_topic(args, ctx) {\n const topicId = readString(args.topicId ?? args.id) ?? \"\";\n if (!topicId) {\n throw new Error(\"topicId is required.\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).topics.update(topicId, {\n name: readString(args.name),\n description: readString(args.description),\n type: readString(args.type),\n ontologyId: readString(args.ontologyId),\n clearOntologyId: readBoolean(args.clearOntologyId),\n status: readString(args.status) as\n | \"active\"\n | \"archived\"\n | \"watching\"\n | undefined,\n visibility: readString(args.visibility) as\n | \"private\"\n | \"team\"\n | \"firm\"\n | \"external\"\n | \"public\"\n | undefined,\n })\n );\n },\n\n async get_topic_tree(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.getTree({\n rootId: readString(args.rootId ?? args.topicId ?? args.id) ?? \"\",\n maxDepth: readNumber(args.maxDepth),\n })\n );\n },\n\n async get_topic_coverage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.coverage(\n readString(args.topicId ?? args.id) ?? \"\",\n {\n includeDescendants: readBoolean(args.includeDescendants),\n maxDepth: readNumber(args.maxDepth),\n }\n )\n );\n },\n};\n","import { graphHandlers as modernGraphHandlers } from \"./graph.js\";\nimport { topicHandlers } from \"./topics.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const coverageHandlers: HandlerModule = {\n async get_topic_coverage(args, ctx) {\n return topicHandlers.get_topic_coverage(\n {\n topicId: args.topicId ?? args.id,\n includeDescendants: args.includeDescendants,\n maxDepth: args.maxDepth,\n },\n ctx\n );\n },\n\n async get_graph_gaps(args, ctx) {\n return modernGraphHandlers.get_graph_gaps(\n {\n topicId: args.topicId ?? args.projectId,\n minConfidence: args.minConfidence,\n },\n ctx\n );\n },\n};\n","/**\n * Discovery Handler — LLM-friendly topic tree navigation for cross-topic search.\n */\n\nimport { formatSdkResult, getSdkClient, readBoolean, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const discoveryHandlers: HandlerModule = {\n async discover(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.discover({\n query: readString(args.query) ?? \"\",\n topK: readNumber(args.topK),\n includeNeighborhood: readBoolean(args.includeNeighborhood),\n })\n );\n },\n};\n","import { adminMutation } from \"../convex-client.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\nfunction hasVerificationPayload(args: Record<string, unknown>): boolean {\n return (\n args.testOutput !== undefined ||\n args.tscOutput !== undefined ||\n args.lintOutput !== undefined ||\n args.sentryData !== undefined\n );\n}\n\nexport const engineeringVerificationHandlers: HandlerModule = {\n async evaluate_engineering_contract(args, ctx) {\n if (!hasVerificationPayload(args)) {\n throw new Error(\n \"evaluate_engineering_contract requires at least one verification payload.\"\n );\n }\n\n const result = await adminMutation(\n \"epistemicContracts:evaluateEngineeringContracts\" as any,\n {\n beliefNodeId: args.beliefNodeId,\n trigger: args.trigger,\n testOutput: args.testOutput,\n tscOutput: args.tscOutput,\n lintOutput: args.lintOutput,\n sentryData: args.sentryData,\n authenticatedUserId: ctx.userId,\n }\n );\n\n return result as Record<string, unknown>;\n },\n};\n","import { engineeringVerificationHandlers as engineeringVerificationCompatHandlers } from \"../handlers-compat/engineering-verification.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const engineeringVerificationHandlers: HandlerModule = {\n async evaluate_engineering_contract(args, ctx) {\n // DIRECT: temporarily no SDK equivalent — K-tier engineering contract evaluation still runs through the verification substrate.\n return engineeringVerificationCompatHandlers.evaluate_engineering_contract(\n args,\n ctx\n );\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport { readTopicIdArg } from \"../scope.js\";\nimport {\n asJsonObject,\n asRecord,\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const evidenceHandlers: HandlerModule = {\n async create_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.create({\n topicId: readString(readTopicIdArg(args)) ?? \"\",\n text: readString(args.text) ?? \"\",\n source: readString(args.source),\n targetId: readString(args.targetId),\n weight: readNumber(args.weight),\n metadata: asJsonObject(args.metadata) as any,\n title: readString(args.title),\n content: readString(args.content),\n contentType: readString(args.contentType),\n kind: readString(args.kind),\n })\n );\n },\n\n async get_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.get(\n readString(args.id ?? args.evidenceId) ?? \"\"\n )\n );\n },\n\n async list_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.list({\n topicId: readString(readTopicIdArg(args)),\n targetId: readString(args.targetId),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async link_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.link({\n evidenceId: readString(args.evidenceId) ?? \"\",\n targetId:\n readString(args.targetId ?? args.beliefId ?? args.questionId) ?? \"\",\n targetType: readString(args.targetType),\n weight: readNumber(args.weight ?? args.relevance),\n rationale: readString(args.rationale),\n })\n );\n },\n\n async search_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.search({\n q: readString(args.q ?? args.query) ?? \"\",\n topicId: readString(readTopicIdArg(args)),\n targetId: readString(args.targetId),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async add_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.add({\n topicId: readString(readTopicIdArg(args)) ?? \"\",\n text: readString(args.text ?? args.canonicalText) ?? \"\",\n source: readString(args.source ?? args.sourceUrl),\n targetId: readString(args.targetId ?? args.targetNodeId),\n weight: readNumber(args.weight),\n metadata: {\n ...asRecord(args.metadata),\n ...(readString(args.reasoning)\n ? { rationale: readString(args.reasoning) }\n : {}),\n } as any,\n title: readString(args.title),\n content: readString(args.content),\n contentType: readString(args.contentType),\n kind: readString(args.kind),\n })\n );\n },\n\n async link_evidence_to_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.linkToBelief({\n evidenceId: readString(args.evidenceId) ?? \"\",\n beliefId: readString(args.beliefId) ?? \"\",\n weight: readNumber(args.weight) ?? 1,\n rationale: readString(args.rationale),\n })\n );\n },\n};\n","import { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const identityHandlers: HandlerModule = {\n async identity_whoami(_args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).identity.whoami());\n },\n};\n","import { graphHandlers } from \"./graph.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const intelligenceHandlers: HandlerModule = {\n detect_confirmation_bias: graphHandlers.detect_confirmation_bias,\n get_graph_structure_analysis: graphHandlers.get_graph_structure_analysis,\n get_falsification_questions: graphHandlers.get_falsification_questions,\n};\n","/**\n * Judgment Handlers — record_judgment\n */\n\nimport { readTopicIdArg, ROOT_TOPIC_ID, resolveTopicScopeId } from \"../scope.js\";\nimport { formatSdkResult, getSdkClient, readNumber, readString, readStringArray } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const judgmentHandlers: HandlerModule = {\n async record_judgment(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"record_judgment\"\n );\n\n if (topicId === ROOT_TOPIC_ID) {\n throw new Error(\n \"[record_judgment] Resolved topic is Root — epistemic nodes must belong to a child topic. \" +\n \"Provide a valid topicId for this judgment.\"\n );\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).judgments.record({\n title: readString(args.title) ?? \"\",\n rationale: readString(args.rationale) ?? \"\",\n topicId,\n confidence: readNumber(args.confidence) ?? 0.7,\n beliefIds: readStringArray(args.beliefIds),\n })\n );\n },\n};\n","/**\n * Lens Handlers — create_lens, list_lenses, apply_lens_to_topic, remove_lens_from_topic\n */\n\nimport { validateFilterCriteria } from \"@lucern/contracts/lens-filter.contract\";\nimport { readTopicIdArg } from \"../scope.js\";\nimport { formatSdkResult, getSdkClient, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nfunction readWorkspaceIdArg(args: Record<string, unknown>): string | undefined {\n return readString(args.workspaceId);\n}\n\nexport const lensHandlers: HandlerModule = {\n async create_lens(args, ctx) {\n const filterCriteria =\n args.filterCriteria && typeof args.filterCriteria === \"object\"\n ? (args.filterCriteria as Record<string, unknown>)\n : undefined;\n\n if (filterCriteria !== undefined) {\n const validation = validateFilterCriteria(filterCriteria);\n if (!validation.valid) {\n throw new Error(\n `Invalid filterCriteria: ${validation.errors.join(\"; \")}`\n );\n }\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.createLens({\n name: readString(args.name) ?? \"\",\n topicId: readTopicIdArg(args),\n workspaceId: readWorkspaceIdArg(args),\n description: readString(args.description),\n perspectiveType: readString(args.perspectiveType) as any,\n promptTemplates: Array.isArray(args.promptTemplates)\n ? (args.promptTemplates as any[])\n : undefined,\n workflowTemplates: Array.isArray(args.workflowTemplates)\n ? (args.workflowTemplates as any[])\n : undefined,\n taskTemplates: Array.isArray(args.taskTemplates)\n ? (args.taskTemplates as any[])\n : undefined,\n questionTemplates: Array.isArray(args.questionTemplates)\n ? (args.questionTemplates as any[])\n : undefined,\n filterCriteria,\n })\n );\n },\n\n async list_lenses(args, ctx) {\n try {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.listLenses({\n workspaceId: readWorkspaceIdArg(args),\n topicId: readTopicIdArg(args),\n status: readString(args.status) as any,\n perspectiveType: readString(args.perspectiveType) as any,\n })\n );\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\n \"workspaceId is required unless topicId resolves to a workspace-scoped topic\"\n )\n ) {\n return {\n lenses: [],\n note: \"workspaceId is required unless topicId resolves to a workspace-scoped topic\",\n };\n }\n throw error;\n }\n },\n\n async apply_lens_to_topic(args, ctx) {\n const topicId = readTopicIdArg(args);\n if (!topicId) {\n throw new Error(\"topicId is required\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.applyLensToTopic({\n lensId: readString(args.lensId) ?? \"\",\n topicId,\n metadata:\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : undefined,\n })\n );\n },\n\n async remove_lens_from_topic(args, ctx) {\n const topicId = readTopicIdArg(args);\n if (!topicId) {\n throw new Error(\"topicId is required\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.removeLensFromTopic({\n lensId: readString(args.lensId) ?? \"\",\n topicId,\n })\n );\n },\n};\n","import { formatSdkResult, getSdkClient, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const lineageHandlers: HandlerModule = {\n async query_lineage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).graph.queryLineage(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async get_confidence_history(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).graph.getConfidenceHistory(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async get_audit_trail(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).graph.getAuditTrail(\n args.nodeId as string,\n (args.limit as number) ?? 50\n )\n );\n },\n};\n","/**\n * Observation Handlers — ingest_observation, get_observation_context\n *\n * Stage-1 implementation is process-local and read-only to graph state.\n * This preserves invariant #14: observations stage candidate updates but do not mutate epistemic nodes.\n */\n\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport type { HandlerModule } from \"./types.js\";\n\ntype ObservationType =\n | \"claim\"\n | \"evidence\"\n | \"question\"\n | \"contradiction\"\n | \"judgment\"\n | \"note\";\n\ntype ObservationRecord = {\n observationId: string;\n topicId: string;\n observationType: ObservationType;\n summary: string;\n source?: string;\n confidence?: number;\n tags: string[];\n metadata?: Record<string, unknown>;\n createdAt: number;\n};\n\nconst observationStore = new Map<string, ObservationRecord[]>();\n\nfunction tokenize(input: string): string[] {\n return input\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .map((token) => token.trim())\n .filter(Boolean);\n}\n\nfunction scoreSemanticMatch(record: ObservationRecord, query: string): number {\n const queryTokens = new Set(tokenize(query));\n if (queryTokens.size === 0) {\n return 0;\n }\n const haystack = [record.summary, record.source || \"\", ...(record.tags || [])]\n .join(\" \")\n .toLowerCase();\n let score = 0;\n for (const token of queryTokens) {\n if (haystack.includes(token)) {\n score += 1;\n }\n }\n return score;\n}\n\nexport const observationHandlers: HandlerModule = {\n async ingest_observation(args, _ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"ingest_observation\"\n );\n const observationType = args.observationType as ObservationType;\n const summary = args.summary as string;\n const source = (args.source as string) || undefined;\n const confidence = (args.confidence as number) || undefined;\n const tags = ((args.tags as string[]) || []).filter(\n (tag) => typeof tag === \"string\" && tag.trim().length > 0\n );\n const metadata = (args.metadata as Record<string, unknown>) || undefined;\n\n const createdAt = Date.now();\n const observationId = (\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : `obs_${createdAt}_${Math.random().toString(36).slice(2)}`\n ) as string;\n\n const record: ObservationRecord = {\n observationId,\n topicId,\n observationType,\n summary,\n source,\n confidence,\n tags,\n metadata,\n createdAt,\n };\n\n const existing = observationStore.get(topicId) || [];\n existing.push(record);\n observationStore.set(topicId, existing.slice(-500));\n\n return {\n observationId,\n topicId,\n observationType,\n createdAt,\n contextResourceUri: `lucern://observations/${topicId}`,\n };\n },\n\n async get_observation_context(args, _ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"get_observation_context\"\n );\n const query = (args.query as string) || \"\";\n const limit = Math.max(1, Math.min((args.limit as number) || 25, 200));\n const records = observationStore.get(topicId) || [];\n\n const latest = records.slice(-limit).reverse();\n\n const semanticMatches = query\n ? records\n .map((record) => ({\n record,\n score: scoreSemanticMatch(record, query),\n }))\n .filter((row) => row.score > 0)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit)\n .map((row) => row.record)\n : [];\n\n const byType: Record<string, number> = {};\n for (const row of records) {\n byType[row.observationType] = (byType[row.observationType] || 0) + 1;\n }\n\n return {\n topicId,\n totalObservations: records.length,\n latest,\n semanticMatches,\n byType,\n generatedAt: Date.now(),\n };\n },\n};\n","/**\n * Ontology Handlers — MCP handlers for ontology definition CRUD.\n */\n\nimport { formatSdkResult, getSdkClient, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const ontologyHandlers: HandlerModule = {\n async list_ontologies(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.list({\n tenantId: readString(args.tenantId),\n tier: readString(args.tier),\n status: readString(args.status),\n })\n );\n },\n\n async get_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.get({\n id: readString(args.id ?? args.ontologyId),\n ontologyKey: readString(args.ontologyKey),\n tenantId: readString(args.tenantId),\n tier: readString(args.tier),\n status: readString(args.status),\n } as any)\n );\n },\n\n async apply_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.bind({\n ontologyId: readString(args.ontologyId ?? args.id) ?? \"\",\n topicId: readString(args.topicId) ?? \"\",\n })\n );\n },\n\n async match_entity_type(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.match({\n text: readString(args.text) ?? \"\",\n topicId: readString(args.topicId),\n ontologyId: readString(args.ontologyId),\n minScore: readNumber(args.minScore),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async create_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.create({\n ontologyKey: readString(args.ontologyKey) ?? \"\",\n name: readString(args.name) ?? \"\",\n description: readString(args.description),\n tenantId: readString(args.tenantId),\n tier: readString(args.tier) ?? \"platform\",\n parentOntologyId: readString(args.parentOntologyId),\n })\n );\n },\n\n async update_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.update({\n id: readString(args.id) ?? \"\",\n name: readString(args.name),\n description: readString(args.description),\n status: readString(args.status),\n })\n );\n },\n\n async archive_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.archive({\n id: readString(args.id) ?? \"\",\n })\n );\n },\n\n async create_ontology_version(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.createVersion({\n ontologyId: readString(args.ontologyId) ?? \"\",\n version: readString(args.version) ?? \"\",\n entityTypes: Array.isArray(args.entityTypes) ? (args.entityTypes as any[]) : [],\n edgeTypes: Array.isArray(args.edgeTypes) ? (args.edgeTypes as any[]) : [],\n releaseNotes: readString(args.releaseNotes),\n })\n );\n },\n\n async publish_ontology_version(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.publishVersion({\n id: readString(args.id) ?? \"\",\n })\n );\n },\n\n async deprecate_ontology_version(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.deprecateVersion({\n id: readString(args.id) ?? \"\",\n })\n );\n },\n\n async resolve_effective_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.resolveEffective({\n ontologyId: readString(args.ontologyId) ?? \"\",\n })\n );\n },\n};\n","/**\n * Ontology Matching Handlers — MCP handlers for L0 entity type classification,\n * entity discovery, and change-triggered belief review.\n */\n\nimport { ontologyHandlers } from \"./ontologies.js\";\nimport { formatSdkResult, getSdkClient, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const ontologyMatchingHandlers: HandlerModule = {\n async match_entity_type(args, ctx) {\n return ontologyHandlers.match_entity_type(args, ctx);\n },\n\n async discover_entity_connections(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.discoverEntityConnections({\n nodeId: readString(args.nodeId) ?? \"\",\n topicId: readString(args.topicId),\n minScore: readNumber(args.minScore),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async trigger_belief_review(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.triggerBeliefReview({\n entityNodeId: readString(args.entityNodeId) ?? \"\",\n changeDescription: readString(args.changeDescription),\n maxQuestions: readNumber(args.maxQuestions),\n })\n );\n },\n};\n","/**\n * Policy Handlers — check_permission, filter_by_permission, manage_write_policy\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const policyHandlers: HandlerModule = {\n async check_permission(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).policy.checkPermission(args)\n );\n },\n\n async filter_by_permission(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).policy.filterByPermission(args)\n );\n },\n\n async manage_write_policy(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).policy.manageWritePolicy(args)\n );\n },\n};\n","import { evidenceHandlers } from \"./evidence.js\";\nimport {\n asRecord,\n formatSdkResult,\n getSdkClient,\n readBoolean,\n readNumber,\n readString,\n readStringArray,\n} from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const questionHandlers: HandlerModule = {\n async create_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.create({\n topicId: readString(args.topicId) ?? \"\",\n text: readString(args.text) ?? \"\",\n priority: readString(args.priority),\n linkedBeliefId: readString(args.linkedBeliefId),\n metadata: asRecord(args.metadata) as any,\n })\n );\n },\n\n async get_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.get(\n readString(args.id ?? args.questionId) ?? \"\"\n )\n );\n },\n\n async list_questions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.list({\n topicId: readString(args.topicId),\n status: readString(args.status),\n priority: readString(args.priority),\n worktreeId: readString(args.worktreeId),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async answer_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.answer(\n readString(args.id ?? args.questionId) ?? \"\",\n {\n text: readString(args.text) ?? \"\",\n confidence: readString(args.confidence),\n evidenceIds: readStringArray(args.evidenceIds),\n rationale: readString(args.rationale),\n }\n )\n );\n },\n\n async refine_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.refine(\n readString(args.id ?? args.questionId) ?? \"\",\n readString(args.text) ?? \"\",\n readString(args.rationale ?? args.refinementReason)\n )\n );\n },\n\n async update_question_status(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.updateStatus(\n readString(args.id ?? args.questionId) ?? \"\",\n readString(args.status) ?? \"\",\n readString(args.rationale)\n )\n );\n },\n\n async archive_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.archive(\n readString(args.id ?? args.questionId) ?? \"\",\n readString(args.reason ?? args.rationale)\n )\n );\n },\n\n async link_evidence_to_question(args, ctx) {\n const result = await evidenceHandlers.link_evidence(\n {\n evidenceId: readString(args.evidenceId) ?? \"\",\n targetId: readString(args.questionId) ?? \"\",\n weight: readNumber(args.relevance),\n rationale: readString(args.rationale),\n },\n ctx\n );\n\n return {\n ...result,\n questionId: readString(args.questionId) ?? result.targetId,\n relevance: readNumber(args.relevance),\n };\n },\n\n async get_high_priority_questions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.getHighPriority({\n topicId: readString(args.topicId),\n limit: readNumber(args.limit),\n includeAnswered: readBoolean(args.includeAnswered),\n })\n );\n },\n\n async find_missing_questions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.findMissing({\n topicId: readString(args.topicId) ?? \"\",\n minConfidence: readNumber(args.minConfidence),\n })\n );\n },\n};\n","/**\n * Research Handlers — search_sources, execute_deep_research\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const researchHandlers: HandlerModule = {\n async search_sources(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).research.searchSources(args));\n },\n\n async execute_deep_research(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).research.executeDeepResearch(args)\n );\n },\n};\n","import { api } from \"../kernelApi.js\";\nimport { adminMutation } from \"../convex-client.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\nfunction buildInputData(args: Record<string, unknown>): Record<string, unknown> | undefined {\n const entries = Object.entries({\n metricData: args.metricData,\n referenceCheckData: args.referenceCheckData,\n marketIndexData: args.marketIndexData,\n temporalData: args.temporalData,\n }).filter(([, value]) => value !== undefined);\n\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport const researchVerificationHandlers: HandlerModule = {\n async evaluate_research_contract(args, ctx) {\n const inputData = buildInputData(args);\n const result = await adminMutation(\n api.epistemicContracts.evaluateContractsForTrigger as any,\n {\n beliefNodeId: args.beliefNodeId,\n trigger:\n typeof args.trigger === \"string\" && args.trigger.length > 0\n ? args.trigger\n : \"event_driven\",\n ...(inputData ? { inputData } : {}),\n authenticatedUserId: ctx.userId,\n }\n );\n\n return result as Record<string, unknown>;\n },\n};\n","import { researchVerificationHandlers as researchVerificationCompatHandlers } from \"../handlers-compat/research-verification.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const researchVerificationHandlers: HandlerModule = {\n async evaluate_research_contract(args, ctx) {\n // DIRECT: temporarily no SDK equivalent — K-tier research contract evaluation still runs through the verification substrate.\n return researchVerificationCompatHandlers.evaluate_research_contract(\n args,\n ctx\n );\n },\n};\n","/**\n * Universal scope workflow handlers.\n */\n\nimport { toPublicCompiledContext } from \"@lucern/server-core/domain/context/compile\";\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport { formatSdkResult, getSdkClient, readBoolean, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const scopeContextHandlers: HandlerModule = {\n async compile_context(args, ctx) {\n const requestedScope = readTopicIdArg(args);\n if (!requestedScope) {\n throw new Error(\"[compile_context] topicId is required.\");\n }\n\n const topicId = await resolveTopicScopeId(requestedScope, \"compile_context\");\n if (\n ctx.sessionType === \"user\" &&\n Array.isArray(ctx.allowedTopics) &&\n (!ctx.allowedTopics.includes(topicId) || ctx.allowedTopics.length === 0)\n ) {\n throw new Error(\n `[compile_context] Access denied to compile context for topic ${topicId}.`\n );\n }\n\n const compiled = formatSdkResult(\n await getSdkClient(ctx).context.compile(topicId, {\n query: readString(args.query),\n budget: readNumber(args.budget ?? args.tokenBudget),\n ranking: readString(args.ranking ?? args.rankingProfile),\n limit: readNumber(args.limit),\n maxDepth: readNumber(args.maxDepth),\n includeEntities: readBoolean(args.includeEntities),\n mode: readString(args.mode),\n includeFailures: readBoolean(args.includeFailures),\n worktreeId: readString(args.worktreeId),\n sessionId: readString(args.sessionId),\n packWeightOverrides: Array.isArray(args.packWeightOverrides)\n ? (args.packWeightOverrides as any[])\n : undefined,\n })\n );\n\n return toPublicCompiledContext(compiled as any);\n },\n\n async record_scope_learning(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.recordScopeLearning(args)\n );\n },\n\n async seed_belief_lattice(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.seedBeliefLattice(args)\n );\n },\n\n async get_lattice_coverage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.getLatticeCoverage(args)\n );\n },\n};\n","import {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n readStringArray,\n} from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const searchHandlers: HandlerModule = {\n async search_resources(args, ctx) {\n const topicId = readString(args.topicId) ?? readString(args.projectId) ?? \"\";\n if (!topicId) {\n throw new Error(\"search_resources requires a topicId parameter\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).search(readString(args.q) ?? readString(args.query) ?? \"\", {\n topicId,\n types: readStringArray(args.types) as\n | Array<\"belief\" | \"evidence\" | \"question\">\n | undefined,\n status: readString(args.status),\n minConfidence: readNumber(args.minConfidence),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const taskHandlers: HandlerModule = {\n async create_task(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.create({\n topicId: readString(args.topicId ?? args.projectId) ?? \"\",\n title: readString(args.title) ?? \"\",\n description: readString(args.description),\n taskType: readString(args.taskType) as any,\n priority: readString(args.priority) as any,\n linkedBeliefId: readString(args.linkedBeliefId),\n linkedQuestionId: readString(args.linkedQuestionId),\n linkedWorktreeId: readString(args.linkedWorktreeId),\n })\n );\n },\n\n async complete_task(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.complete(\n readString(args.taskId ?? args.id) ?? \"\",\n {\n outputSummary: readString(args.outputSummary) ?? \"\",\n }\n )\n );\n },\n\n async update_task(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.update(\n readString(args.taskId ?? args.id) ?? \"\",\n {\n title: readString(args.title),\n description: readString(args.description),\n priority: readString(args.priority) as any,\n status: readString(args.status) as any,\n linkedBeliefId: readString(args.linkedBeliefId),\n linkedQuestionId: readString(args.linkedQuestionId),\n linkedWorktreeId: readString(args.linkedWorktreeId),\n }\n )\n );\n },\n\n async list_tasks(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.list({\n topicId: readString(args.topicId ?? args.projectId),\n worktreeId:\n readString(args.worktreeId) ?? readString(args.linkedWorktreeId),\n status: readString(args.status),\n limit: readNumber(args.limit),\n })\n );\n },\n};\n","import { api } from \"../kernelApi.js\";\nimport { adminQuery } from \"../convex-client.js\";\nimport { getDefaultScopeContext, readTopicIdArg } from \"../scope.js\";\nimport type { HandlerModule } from \"../handlers/types.js\";\n\ntype ThesisDoc = {\n content?: string;\n memoContent?: string;\n status?: string;\n generatedAt?: number;\n approvedAt?: number;\n};\n\ntype WorktreeDoc = Record<string, unknown> & {\n _id?: string;\n worktreeId?: string;\n name?: string;\n title?: string;\n status?: string;\n phase?: string;\n hypothesis?: string;\n track?: string;\n executionBand?: number;\n topicId?: string;\n projectId?: string;\n branchThesis?: ThesisDoc;\n pillarThesis?: ThesisDoc;\n updatedAt?: number;\n createdAt?: number;\n _creationTime?: number;\n};\n\nfunction stripHtml(value: string): string {\n return value\n .replace(/<[^>]+>/g, \" \")\n .replace(/&nbsp;/g, \" \")\n .replace(/&amp;/g, \"&\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction truncateText(value: string | null, maxChars = 320): string | null {\n if (!value) {\n return null;\n }\n\n if (value.length <= maxChars) {\n return value;\n }\n\n return `${value.slice(0, maxChars - 3).trimEnd()}...`;\n}\n\nfunction normalizeThesis(worktree: WorktreeDoc): ThesisDoc | null {\n const thesis =\n worktree.branchThesis && typeof worktree.branchThesis === \"object\"\n ? worktree.branchThesis\n : worktree.pillarThesis && typeof worktree.pillarThesis === \"object\"\n ? worktree.pillarThesis\n : null;\n\n if (!thesis) {\n return null;\n }\n\n return thesis;\n}\n\nfunction hasThesisArtifact(worktree: WorktreeDoc): boolean {\n const thesis = normalizeThesis(worktree);\n return Boolean(\n typeof thesis?.content === \"string\" && thesis.content.trim().length > 0\n );\n}\n\nfunction normalizeWorktreeId(worktree: WorktreeDoc): string | null {\n if (typeof worktree.worktreeId === \"string\") {\n return worktree.worktreeId;\n }\n if (typeof worktree._id === \"string\") {\n return worktree._id;\n }\n return null;\n}\n\nfunction normalizeTopicId(worktree: WorktreeDoc): string | null {\n if (typeof worktree.topicId === \"string\") {\n return worktree.topicId;\n }\n if (typeof worktree.projectId === \"string\") {\n return worktree.projectId;\n }\n return null;\n}\n\nfunction rankWorktreesByArtifact(left: WorktreeDoc, right: WorktreeDoc): number {\n const leftThesis = normalizeThesis(left);\n const rightThesis = normalizeThesis(right);\n\n const leftRank =\n leftThesis?.status === \"final\" || typeof leftThesis?.approvedAt === \"number\"\n ? 2\n : 1;\n const rightRank =\n rightThesis?.status === \"final\" || typeof rightThesis?.approvedAt === \"number\"\n ? 2\n : 1;\n if (leftRank !== rightRank) {\n return rightRank - leftRank;\n }\n\n const leftTimestamp =\n leftThesis?.approvedAt ??\n leftThesis?.generatedAt ??\n left.updatedAt ??\n left.createdAt ??\n left._creationTime ??\n 0;\n const rightTimestamp =\n rightThesis?.approvedAt ??\n rightThesis?.generatedAt ??\n right.updatedAt ??\n right.createdAt ??\n right._creationTime ??\n 0;\n return rightTimestamp - leftTimestamp;\n}\n\nfunction summarizeQuestionPayload(questions: unknown[]): {\n total: number;\n answered: number;\n open: number;\n} {\n const normalized = Array.isArray(questions) ? questions : [];\n const answered = normalized.filter((question) => {\n const status =\n question && typeof question === \"object\" && \"status\" in question\n ? String((question as Record<string, unknown>).status ?? \"\").toLowerCase()\n : \"\";\n return status === \"answered\" || status === \"final\";\n }).length;\n const open = normalized.filter((question) => {\n const status =\n question && typeof question === \"object\" && \"status\" in question\n ? String((question as Record<string, unknown>).status ?? \"\").toLowerCase()\n : \"\";\n return status === \"open\" || status === \"in_progress\" || status === \"active\";\n }).length;\n\n return {\n total: normalized.length,\n answered,\n open,\n };\n}\n\nasync function buildWorktreeArtifact(args: {\n worktree: WorktreeDoc;\n topicId: string | null;\n topicName: string | null;\n userId: string;\n includeVersions: boolean;\n}) {\n const worktreeId = normalizeWorktreeId(args.worktree);\n if (!worktreeId) {\n return null;\n }\n\n const thesis = normalizeThesis(args.worktree);\n const thesisHtml =\n typeof thesis?.content === \"string\" && thesis.content.trim().length > 0\n ? thesis.content\n : null;\n const memoHtml =\n typeof thesis?.memoContent === \"string\" && thesis.memoContent.trim().length > 0\n ? thesis.memoContent\n : null;\n const thesisText = thesisHtml ? stripHtml(thesisHtml) : null;\n const memoText = memoHtml ? stripHtml(memoHtml) : null;\n\n const [beliefs, qa, recentEvidence, openQuestions, versionHistory] = await Promise.all([\n adminQuery(api.epistemicBeliefs.getByWorktree, {\n worktreeId: worktreeId as any,\n }).catch(() => []),\n args.topicId\n ? adminQuery((api as any).worktrees.getWorktreeQAForReport, {\n worktreeId: worktreeId as any,\n topicId: args.topicId as any,\n userId: args.userId,\n }).catch(() => null)\n : Promise.resolve(null),\n args.topicId\n ? adminQuery(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId as any,\n userId: args.userId,\n limit: 8,\n }).catch(() => [])\n : Promise.resolve([]),\n args.topicId\n ? adminQuery(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId as any,\n userId: args.userId,\n limit: 8,\n status: \"open\",\n }).catch(() => [])\n : Promise.resolve([]),\n args.includeVersions\n ? adminQuery((api as any).worktrees.getPillarThesisVersions, {\n worktreeId: worktreeId as any,\n }).catch(() => [])\n : Promise.resolve([]),\n ]);\n\n const supportingBeliefs = (Array.isArray(beliefs) ? beliefs : [])\n .slice()\n .sort((left: any, right: any) => {\n const leftConfidence =\n typeof left?.confidence === \"number\"\n ? left.confidence\n : typeof left?.currentConfidence === \"number\"\n ? left.currentConfidence\n : 0;\n const rightConfidence =\n typeof right?.confidence === \"number\"\n ? right.confidence\n : typeof right?.currentConfidence === \"number\"\n ? right.currentConfidence\n : 0;\n return rightConfidence - leftConfidence;\n })\n .slice(0, 8)\n .map((belief: any) => ({\n nodeId: String(belief?._id ?? belief?.nodeId ?? \"\"),\n canonicalText: String(\n belief?.canonicalText ?? belief?.text ?? belief?.title ?? \"\"\n ),\n confidence:\n typeof belief?.confidence === \"number\"\n ? belief.confidence\n : typeof belief?.currentConfidence === \"number\"\n ? belief.currentConfidence\n : null,\n status: belief?.status ?? null,\n criticality:\n belief?.criticality ??\n belief?.metadata?.criticality ??\n null,\n }));\n\n const reportQuestions = Array.isArray((qa as any)?.questions)\n ? ((qa as any).questions as any[])\n : Array.isArray(openQuestions)\n ? (openQuestions as any[])\n : [];\n\n return {\n artifactState: thesisHtml || memoHtml ? \"ready\" : \"missing\",\n worktreeId,\n worktreeName:\n typeof args.worktree.name === \"string\"\n ? args.worktree.name\n : typeof args.worktree.title === \"string\"\n ? args.worktree.title\n : \"Untitled worktree\",\n topicId: args.topicId,\n topicName: args.topicName,\n status: args.worktree.status ?? null,\n phase: args.worktree.phase ?? null,\n track: args.worktree.track ?? null,\n executionBand:\n typeof args.worktree.executionBand === \"number\"\n ? args.worktree.executionBand\n : null,\n hypothesis:\n typeof args.worktree.hypothesis === \"string\"\n ? args.worktree.hypothesis\n : null,\n thesisStatus: thesis?.status ?? null,\n generatedAt:\n typeof thesis?.generatedAt === \"number\" ? thesis.generatedAt : null,\n approvedAt:\n typeof thesis?.approvedAt === \"number\" ? thesis.approvedAt : null,\n thesisHtml,\n thesisText,\n memoHtml,\n memoText,\n preferredArtifact:\n memoText && memoText.length > 0\n ? { format: \"text\", text: memoText, source: \"memo\" }\n : thesisText && thesisText.length > 0\n ? { format: \"text\", text: thesisText, source: \"thesis\" }\n : null,\n preview:\n truncateText(memoText) ??\n truncateText(thesisText) ??\n truncateText(\n typeof args.worktree.hypothesis === \"string\"\n ? args.worktree.hypothesis\n : null\n ),\n questionSummary: summarizeQuestionPayload(reportQuestions),\n supportingBeliefs,\n openQuestions: reportQuestions.slice(0, 8).map((question: any) => ({\n questionId: String(question?.questionId ?? question?._id ?? \"\"),\n question: String(question?.question ?? question?.canonicalText ?? \"\"),\n status: question?.status ?? null,\n importance:\n typeof question?.importance === \"number\" ? question.importance : null,\n answer:\n typeof question?.answer === \"string\" && question.answer.trim().length > 0\n ? question.answer\n : null,\n })),\n recentEvidence: (Array.isArray(recentEvidence) ? recentEvidence : [])\n .slice(0, 6)\n .map((evidence: any) => ({\n nodeId: String(evidence?._id ?? evidence?.nodeId ?? \"\"),\n title: String(evidence?.title ?? evidence?.canonicalText ?? \"\"),\n canonicalText: String(evidence?.canonicalText ?? evidence?.text ?? \"\"),\n sourceUrl:\n typeof evidence?.sourceUrl === \"string\" ? evidence.sourceUrl : null,\n })),\n versionHistory: Array.isArray(versionHistory)\n ? versionHistory.map((version: any) => ({\n version:\n typeof version?.version === \"number\" ? version.version : null,\n status: version?.status ?? null,\n changeType: version?.changeType ?? null,\n changeDescription: version?.changeDescription ?? null,\n createdAt:\n typeof version?.createdAt === \"number\" ? version.createdAt : null,\n }))\n : [],\n };\n}\n\nexport const thesisArtifactHandlers: HandlerModule = {\n async get_thesis_artifacts(args, ctx) {\n const defaultTopicId = getDefaultScopeContext().topicId ?? undefined;\n const requestedTopicId = readTopicIdArg(args) || defaultTopicId || undefined;\n const worktreeId =\n typeof args.worktreeId === \"string\" && args.worktreeId.trim().length > 0\n ? args.worktreeId.trim()\n : undefined;\n const includeVersions = args.includeVersions === true;\n const limit =\n typeof args.limit === \"number\" && Number.isFinite(args.limit)\n ? Math.max(1, Math.min(10, Math.floor(args.limit)))\n : 5;\n\n let selectedWorktree: WorktreeDoc | null = null;\n if (worktreeId) {\n selectedWorktree = (await adminQuery(api.worktrees.get, {\n worktreeId: worktreeId as any,\n }).catch(() => null)) as WorktreeDoc | null;\n }\n\n const resolvedTopicId =\n requestedTopicId ||\n normalizeTopicId(selectedWorktree ?? {}) ||\n null;\n let topicName: string | null = null;\n if (resolvedTopicId) {\n const topic = (await adminQuery(api.topics.get, {\n id: resolvedTopicId as any,\n }).catch(() => null)) as { name?: string } | null;\n topicName = typeof topic?.name === \"string\" ? topic.name : null;\n }\n\n const topicWorktrees = resolvedTopicId\n ? ((await adminQuery(api.worktrees.getByTopic, {\n topicId: resolvedTopicId as any,\n }).catch(() => [])) as WorktreeDoc[])\n : [];\n const rankedTopicArtifacts = topicWorktrees\n .filter(hasThesisArtifact)\n .sort(rankWorktreesByArtifact);\n\n const selectedArtifact = selectedWorktree\n ? await buildWorktreeArtifact({\n worktree: selectedWorktree,\n topicId: resolvedTopicId,\n topicName,\n userId: ctx.userId,\n includeVersions,\n })\n : rankedTopicArtifacts.length > 0\n ? await buildWorktreeArtifact({\n worktree: rankedTopicArtifacts[0],\n topicId: resolvedTopicId,\n topicName,\n userId: ctx.userId,\n includeVersions,\n })\n : null;\n\n const topicArtifacts = await Promise.all(\n rankedTopicArtifacts.slice(0, limit).map((worktree) =>\n buildWorktreeArtifact({\n worktree,\n topicId: resolvedTopicId,\n topicName,\n userId: ctx.userId,\n includeVersions: false,\n })\n )\n );\n\n return {\n scope: {\n topicId: resolvedTopicId,\n topicName,\n worktreeId: worktreeId ?? null,\n },\n selectedArtifact,\n topicArtifacts: topicArtifacts.filter(Boolean),\n availableArtifactCount: rankedTopicArtifacts.length,\n recommendedUses: [\n \"Draft a meeting agenda grounded in the latest worktree thesis and open questions.\",\n \"Turn the memo text into a one-pager, partner update, or investment note.\",\n \"Use the thesis plus supporting beliefs as slide-outline raw material for a deck.\",\n \"Seed blog-post or email drafts from the narrative artifact without re-querying the graph.\",\n ],\n };\n },\n};\n","import { thesisArtifactHandlers as thesisArtifactCompatHandlers } from \"../handlers-compat/thesis-artifacts.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const thesisArtifactHandlers: HandlerModule = {\n async get_thesis_artifacts(args, ctx) {\n // DIRECT: orchestration — report assembly composite across worktree, thesis, belief, evidence, and question surfaces.\n return thesisArtifactCompatHandlers.get_thesis_artifacts(args, ctx);\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n asRecord,\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n readStringArray,\n} from \"./sdk.js\";\n\nexport const worktreeHandlers: HandlerModule = {\n async add_worktree(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.add({\n title: readString(args.title) ?? \"\",\n topicId: readString(args.topicId ?? args.projectId) ?? \"\",\n objective: readString(args.objective),\n hypothesis: readString(args.hypothesis),\n beliefIds:\n readStringArray(args.beliefIds) ?? readStringArray(args.beliefs),\n autoShape:\n typeof args.autoShape === \"boolean\" ? args.autoShape : undefined,\n domainPackId: readString(args.domainPackId),\n executionOrder: readNumber(args.executionOrder),\n dependsOn: readStringArray(args.dependsOn),\n blocks: readStringArray(args.blocks),\n gate: readString(args.gate),\n proofArtifacts: Array.isArray(args.proofArtifacts)\n ? args.proofArtifacts\n : undefined,\n staffingHint: readString(args.staffingHint),\n lastReconciledAt: readNumber(args.lastReconciledAt),\n autoFixPolicy:\n args.autoFixPolicy &&\n typeof args.autoFixPolicy === \"object\" &&\n !Array.isArray(args.autoFixPolicy)\n ? (args.autoFixPolicy as any)\n : undefined,\n })\n );\n },\n\n async list_worktrees(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.list({\n topicId: readString(args.topicId ?? args.projectId) ?? \"\",\n status: readString(args.status) as any,\n limit: readNumber(args.limit),\n })\n );\n },\n\n async activate_worktree(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.activate(\n readString(args.worktreeId ?? args.id) ?? \"\"\n )\n );\n },\n\n async update_worktree_metadata(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.updateMetadata({\n worktreeId: readString(args.worktreeId ?? args.id) ?? \"\",\n objective: readString(args.objective),\n hypothesis: readString(args.hypothesis),\n rationale: readString(args.rationale),\n track: readString(args.track),\n trackPosition: readNumber(args.trackPosition),\n executionBand: readNumber(args.executionBand),\n executionOrder: readNumber(args.executionOrder),\n dependsOn: readStringArray(args.dependsOn),\n blocks: readStringArray(args.blocks),\n gate: readString(args.gate),\n status: readString(args.status),\n topicId: readString(args.topicId),\n additionalTopicIds: readStringArray(args.additionalTopicIds),\n proofArtifacts: Array.isArray(args.proofArtifacts)\n ? args.proofArtifacts\n : undefined,\n staffingHint: readString(args.staffingHint),\n lastReconciledAt: readNumber(args.lastReconciledAt),\n autoFixPolicy:\n args.autoFixPolicy &&\n typeof args.autoFixPolicy === \"object\" &&\n !Array.isArray(args.autoFixPolicy)\n ? args.autoFixPolicy\n : undefined,\n } as any)\n );\n },\n\n async merge(args, ctx) {\n const record = asRecord(args);\n const outcomes = Array.isArray(record.outcomes) ? record.outcomes : [];\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.merge(\n readString(record.worktreeId ?? record.id) ?? \"\",\n {\n summary: readString(record.summary),\n outcomes: outcomes.map((entry) => {\n const row = asRecord(entry);\n return {\n beliefId: readString(row.beliefId) ?? \"\",\n confidence: readNumber(row.confidence) ?? Number.NaN,\n rationale: readString(row.rationale) ?? \"\",\n };\n }),\n }\n )\n );\n },\n\n async list_all_worktrees(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.listAll({\n status: readString(args.status) as any,\n track: readString(args.track),\n executionBand: readNumber(args.executionBand),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async pipeline_snapshot(args, ctx) {\n const topicId = readString(args.topicId) ?? \"\";\n if (!topicId) {\n return { error: \"topicId is required\" };\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.pipelineSnapshot(topicId)\n );\n },\n\n async push(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.push(\n readString(args.worktreeId ?? args.id) ?? \"\",\n {\n targetContext: readString(args.targetContext) ?? \"\",\n beliefIds: readStringArray(args.beliefIds),\n }\n )\n );\n },\n\n async open_pull_request(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.openPullRequest(\n readString(args.worktreeId ?? args.id) ?? \"\",\n {\n summary: readString(args.summary) ?? \"\",\n reviewers: readStringArray(args.reviewers),\n }\n )\n );\n },\n\n async update_worktree_targets(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.updateTargets({\n worktreeId: readString(args.worktreeId ?? args.id) ?? \"\",\n addBeliefIds: readStringArray(args.addBeliefIds),\n addQuestionIds: readStringArray(args.addQuestionIds),\n removeBeliefIds: readStringArray(args.removeBeliefIds),\n removeQuestionIds: readStringArray(args.removeQuestionIds),\n })\n );\n },\n};\n","/**\n * Handler Index — barrel file combining all handler modules into a single map.\n *\n * Each handler module exports a HandlerModule (Record<string, ToolHandler>)\n * keyed by MCP tool name. buildHandlerMap() merges them into a single lookup.\n */\n\nimport { answerHandlers } from \"./answers.js\";\nimport { autoBranchingHandlers } from \"./auto-branching.js\";\nimport { beliefHandlers } from \"./beliefs.js\";\nimport { bootstrapHandlers } from \"./bootstrap.js\";\nimport { codingHandlers } from \"./coding.js\";\nimport { contractHandlers } from \"./contracts.js\";\nimport { contradictionHandlers } from \"./contradictions.js\";\nimport { coordinationHandlers } from \"./coordination.js\";\nimport { coverageHandlers } from \"./coverage.js\";\nimport { discoveryHandlers } from \"./discovery.js\";\nimport { edgeHandlers } from \"./edges.js\";\nimport { engineeringVerificationHandlers } from \"./engineering-verification.js\";\nimport { evidenceHandlers } from \"./evidence.js\";\nimport { graphHandlers } from \"./graph.js\";\nimport { identityHandlers } from \"./identity.js\";\nimport { intelligenceHandlers } from \"./intelligence.js\";\nimport { judgmentHandlers } from \"./judgments.js\";\nimport { lensHandlers } from \"./lenses.js\";\nimport { lineageHandlers } from \"./lineage.js\";\nimport { observationHandlers } from \"./observations.js\";\nimport { ontologyHandlers } from \"./ontologies.js\";\nimport { ontologyMatchingHandlers } from \"./ontology-matching.js\";\nimport { policyHandlers } from \"./policy.js\";\nimport { questionHandlers } from \"./questions.js\";\nimport { researchHandlers } from \"./research.js\";\nimport { researchVerificationHandlers } from \"./research-verification.js\";\nimport { scopeContextHandlers } from \"./scope-context.js\";\nimport { searchHandlers } from \"./search.js\";\nimport { taskHandlers } from \"./tasks.js\";\nimport { thesisArtifactHandlers } from \"./thesis-artifacts.js\";\nimport { topicHandlers } from \"./topics.js\";\nimport type { AuthenticatedHandler } from \"./types.js\";\nimport { worktreeHandlers } from \"./worktrees.js\";\n\n/**\n * Build the complete handler map for all MCP tools.\n */\nexport function buildHandlerMap(): Record<string, AuthenticatedHandler> {\n return {\n ...evidenceHandlers,\n ...questionHandlers,\n ...searchHandlers,\n ...answerHandlers,\n ...worktreeHandlers,\n ...lensHandlers,\n ...edgeHandlers,\n ...judgmentHandlers,\n ...graphHandlers,\n ...identityHandlers,\n ...lineageHandlers,\n ...intelligenceHandlers,\n ...researchHandlers,\n ...researchVerificationHandlers,\n ...taskHandlers,\n ...topicHandlers,\n ...contradictionHandlers,\n ...contractHandlers,\n ...engineeringVerificationHandlers,\n ...policyHandlers,\n ...observationHandlers,\n ...scopeContextHandlers,\n ...codingHandlers,\n ...coordinationHandlers,\n ...coverageHandlers,\n ...discoveryHandlers,\n ...thesisArtifactHandlers,\n ...bootstrapHandlers,\n ...autoBranchingHandlers,\n ...ontologyHandlers,\n ...ontologyMatchingHandlers,\n ...beliefHandlers,\n };\n}\n","/**\n * Write Policy — S2-13K Graph Compounding\n *\n * Policy enforcement for MCP mutation tools.\n * Queries Convex write policies and tracks per-session write counts.\n */\n\nimport { api } from \"./kernelApi.js\";\nimport { adminQuery } from \"./convex-client.js\";\nimport type { AuthContext } from \"./handlers/types.js\";\n\n// ── Tool Category Classification ─────────────────────────────────────────────\n\nconst MUTATION_TOOL_NAMES = new Set([\n \"create_belief\",\n \"refine_belief\",\n \"modulate_confidence\",\n \"fork_belief\",\n \"archive_belief\",\n \"create_evidence\",\n \"link_evidence\",\n \"add_evidence\",\n \"link_evidence_to_belief\",\n \"record_scope_learning\",\n \"record_attempt\",\n \"create_question\",\n \"answer_question\",\n \"refine_question\",\n \"update_question_status\",\n \"archive_question\",\n \"link_evidence_to_question\",\n \"create_answer\",\n \"create_edge\",\n \"flag_contradiction\",\n \"add_worktree\",\n \"merge\",\n \"activate_worktree\",\n \"update_worktree_metadata\",\n \"update_worktree_targets\",\n \"create_lens\",\n \"apply_lens_to_topic\",\n \"remove_lens_from_topic\",\n \"create_task\",\n \"complete_task\",\n \"record_judgment\",\n \"register_session\",\n \"heartbeat_session\",\n \"end_session\",\n \"send_agent_message\",\n \"broadcast_message\",\n \"claim_files\",\n \"create_topic\",\n \"open_pull_request\",\n \"apply_auto_branching\",\n \"seed_belief_lattice\",\n \"trigger_belief_review\",\n \"create_epistemic_contract\",\n \"evaluate_contract\",\n \"create_ontology\",\n \"update_ontology\",\n \"archive_ontology\",\n \"create_ontology_version\",\n \"publish_ontology_version\",\n \"deprecate_ontology_version\",\n \"manage_write_policy\",\n]);\n\n/**\n * Check if a tool name is a mutation (write) tool.\n */\nexport function isMutationTool(toolName: string): boolean {\n return MUTATION_TOOL_NAMES.has(toolName);\n}\n\n// ── Per-Session Write Counter ────────────────────────────────────────────────\n\ntype WriteRecord = {\n toolName: string;\n timestamp: number;\n topicId?: string;\n};\n\nconst sessionWrites: WriteRecord[] = [];\nconst sessionWritesBySession = new Map<string, WriteRecord[]>();\n\n/**\n * Record a write operation for the current session.\n */\nexport function recordWrite(\n toolName: string,\n topicId?: string,\n sessionId = \"default\"\n): void {\n const record = {\n toolName,\n timestamp: Date.now(),\n topicId,\n };\n sessionWrites.push(record);\n const existing = sessionWritesBySession.get(sessionId) ?? [];\n existing.push(record);\n sessionWritesBySession.set(sessionId, existing);\n}\n\n/**\n * Get write statistics for the current session.\n */\nexport function getSessionWriteStats(): {\n totalWrites: number;\n byCategory: Record<string, number>;\n byTool: Record<string, number>;\n firstWrite: number | null;\n lastWrite: number | null;\n} {\n return getSessionWriteStatsForSession(\"default\");\n}\n\nexport function getSessionWriteStatsForSession(sessionId: string): {\n totalWrites: number;\n byCategory: Record<string, number>;\n byTool: Record<string, number>;\n firstWrite: number | null;\n lastWrite: number | null;\n} {\n const records = sessionWritesBySession.get(sessionId) ?? [];\n const byCategory: Record<string, number> = {};\n const byTool: Record<string, number> = {};\n const lastWrite = records.at(-1)?.timestamp ?? null;\n\n for (const record of records) {\n byTool[record.toolName] = (byTool[record.toolName] ?? 0) + 1;\n }\n\n return {\n totalWrites: records.length,\n byCategory,\n byTool,\n firstWrite: records.length > 0 ? records[0].timestamp : null,\n lastWrite,\n };\n}\n\n// ── Policy Enforcement ───────────────────────────────────────────────────────\n\ntype PolicyCheckResult = {\n allowed: boolean;\n permission: string;\n rationale?: string;\n maxWritesPerSession?: number;\n toolCategory?: string | null;\n policy?: Record<string, unknown> | null;\n explanation?: {\n summary?: string;\n matchedReasonCode?: string;\n steps?: Array<{\n stage?: string;\n outcome?: string;\n reasonCode?: string;\n detail?: string;\n }>;\n [key: string]: unknown;\n };\n reason: string;\n};\n\nfunction buildRateLimitExplanation(args: {\n toolName: string;\n toolCategory?: string | null;\n authRole: string;\n topicId?: string;\n maxWritesPerSession: number;\n currentCount: number;\n policy?: Record<string, unknown> | null;\n}) {\n const summary = `Denied ${args.toolName}: session write limit ${args.currentCount}/${args.maxWritesPerSession} reached for the matched write policy.`;\n return {\n summary,\n matchedReasonCode: \"RATE_LIMIT_EXCEEDED\",\n toolName: args.toolName,\n toolCategory: args.toolCategory ?? null,\n role: args.authRole,\n topicId: args.topicId ?? null,\n policy: args.policy ?? null,\n steps: [\n {\n stage: \"policy_lookup\",\n outcome: \"passed\",\n reasonCode: \"WRITE_POLICY_MATCHED\",\n detail: \"A matching write policy was found before evaluating the session limit.\",\n },\n {\n stage: \"rate_limit\",\n outcome: \"failed\",\n reasonCode: \"RATE_LIMIT_EXCEEDED\",\n detail: `This session has already recorded ${args.currentCount} writes and the matched rule caps it at ${args.maxWritesPerSession}.`,\n },\n {\n stage: \"decision\",\n outcome: \"failed\",\n reasonCode: \"RATE_LIMIT_EXCEEDED\",\n detail: summary,\n },\n ],\n };\n}\n\n/**\n * Check if a mutation tool call is allowed by write policy.\n *\n * Resolution order:\n * 1. Topic-specific + role match\n * 2. Global (no topic) + role match\n * 3. No matching policy → allow (open by default)\n *\n * Also checks per-session write limits if policy specifies maxWritesPerSession.\n */\nexport async function checkWritePolicy(\n toolName: string,\n topicId: string | undefined,\n authCtx: AuthContext\n): Promise<PolicyCheckResult> {\n // Non-mutation tools always pass\n if (!isMutationTool(toolName)) {\n return { allowed: true, permission: \"allow\", reason: \"read_only_tool\" };\n }\n\n try {\n const result = await adminQuery((api.mcpWritePolicy as any).checkAccess, {\n topicId: topicId ?? undefined,\n role: authCtx.role,\n toolName,\n });\n\n if (!result) {\n return {\n allowed: true,\n permission: \"allow\",\n toolCategory: null,\n policy: null,\n reason: \"no_policy_response\",\n };\n }\n\n // Check rate limit\n if (\n result.allowed &&\n typeof result.maxWritesPerSession === \"number\" &&\n Number.isFinite(result.maxWritesPerSession)\n ) {\n const currentCount =\n sessionWritesBySession.get(authCtx.sessionId)?.length ?? 0;\n if (currentCount >= result.maxWritesPerSession) {\n return {\n allowed: false,\n permission: \"deny\",\n rationale: `Session write limit reached (${currentCount}/${result.maxWritesPerSession})`,\n maxWritesPerSession: result.maxWritesPerSession,\n toolCategory:\n typeof result.toolCategory === \"string\" ? result.toolCategory : null,\n policy:\n result.policy && typeof result.policy === \"object\"\n ? (result.policy as Record<string, unknown>)\n : null,\n explanation: buildRateLimitExplanation({\n toolName,\n toolCategory:\n typeof result.toolCategory === \"string\" ? result.toolCategory : null,\n authRole: authCtx.role,\n topicId,\n maxWritesPerSession: result.maxWritesPerSession,\n currentCount,\n policy:\n result.policy && typeof result.policy === \"object\"\n ? (result.policy as Record<string, unknown>)\n : null,\n }),\n reason: \"rate_limit_exceeded\",\n };\n }\n }\n\n return result as PolicyCheckResult;\n } catch (err) {\n // Policy check failure → allow (fail-open for write policies)\n // This ensures the compounding loop isn't blocked by infrastructure issues.\n console.error(\n `[write-policy] Policy check failed for ${toolName}: ${err instanceof Error ? err.message : err}. Allowing (fail-open).`\n );\n return {\n allowed: true,\n permission: \"allow\",\n toolCategory: null,\n policy: null,\n explanation: {\n summary:\n \"Allowed because write-policy evaluation failed and the runtime fell back to fail-open behavior.\",\n matchedReasonCode: \"WRITE_POLICY_CHECK_ERROR\",\n steps: [\n {\n stage: \"policy_lookup\",\n outcome: \"failed\",\n reasonCode: \"WRITE_POLICY_CHECK_ERROR\",\n detail:\n err instanceof Error ? err.message : \"Unknown policy evaluation error.\",\n },\n {\n stage: \"decision\",\n outcome: \"bypassed\",\n reasonCode: \"WRITE_POLICY_CHECK_ERROR\",\n detail:\n \"Write-policy infrastructure error did not block the mutation because this runtime is fail-open on evaluation errors.\",\n },\n ],\n },\n reason: \"policy_check_error\",\n };\n }\n}\n","/**\n * Credential Resolution — Battle-proof credential loading for the Lucern MCP.\n *\n * Resolution order (first match wins):\n * 1. process.env.LUCERN_API_KEY (set via .mcp.json env, shell, or CI)\n * 2. ~/.lucern/credentials (persistent, git-safe credential store)\n * 3. process.env.LUCERN_CONVEX_URL + LUCERN_DEPLOY_KEY (direct, advanced)\n *\n * NO .env.lucern. That file lives in a git repo and can be destroyed by\n * stash, checkout, or branch operations. Credentials belong in ~/.lucern/.\n *\n * The `lucern init` command writes credentials to ~/.lucern/credentials.\n * After that, the MCP server works with zero repo-level config.\n */\n\nimport { createHash } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { logMcpInfo } from \"./logging.js\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport type EnvCredentials = { url: string; key: string };\nexport type UnifiedPayload = { dev: EnvCredentials; prod?: EnvCredentials };\ntype LegacyPayload = { url: string; key: string };\n\n// ── Constants ────────────────────────────────────────────────────────────────\n\nconst LUCERN_HOME = path.join(os.homedir(), \".lucern\");\nconst CREDENTIALS_FILE = path.join(LUCERN_HOME, \"credentials\");\n\nexport { LUCERN_HOME, CREDENTIALS_FILE };\n\n// ── API Key Decode ───────────────────────────────────────────────────────────\n\nexport function decodeApiKey(\n apiKey: string,\n prefix: string\n): { unified: UnifiedPayload } | { legacy: LegacyPayload } | null {\n if (!apiKey.startsWith(prefix)) {\n return null;\n }\n try {\n const payload = apiKey.slice(prefix.length);\n const b64 = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const json = Buffer.from(b64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n\n // Unified format (v2): { dev: { url, key }, prod?: { url, key } }\n if (\n parsed.dev &&\n typeof parsed.dev.url === \"string\" &&\n typeof parsed.dev.key === \"string\"\n ) {\n const result: UnifiedPayload = { dev: parsed.dev };\n if (\n parsed.prod &&\n typeof parsed.prod.url === \"string\" &&\n typeof parsed.prod.key === \"string\"\n ) {\n result.prod = parsed.prod;\n }\n return { unified: result };\n }\n\n // Legacy format (v1): { url, key }\n if (typeof parsed.url === \"string\" && typeof parsed.key === \"string\") {\n return { legacy: { url: parsed.url, key: parsed.key } };\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Select the right credentials from a unified key based on LUCERN_ENV.\n */\nexport function selectEnvironment(payload: UnifiedPayload): EnvCredentials {\n const env = (process.env.LUCERN_ENV || \"development\").toLowerCase();\n if (env === \"production\" && payload.prod) {\n return payload.prod;\n }\n if (env === \"production\" && !payload.prod) {\n logMcpInfo(\n \"[lucern] LUCERN_ENV=production but key has no prod credentials. Falling back to dev.\"\n );\n }\n return payload.dev;\n}\n\n// ── API Key Encode ───────────────────────────────────────────────────────────\n\nexport function encodeLucernApiKey(\n dev: EnvCredentials,\n prod?: EnvCredentials\n): string {\n const payload: UnifiedPayload = { dev };\n if (prod) {\n payload.prod = prod;\n }\n return `luc_${Buffer.from(JSON.stringify(payload)).toString(\"base64url\")}`;\n}\n\nexport function encodeStackApiKey(\n dev: EnvCredentials,\n prod?: EnvCredentials\n): string {\n const payload: UnifiedPayload = { dev };\n if (prod) {\n payload.prod = prod;\n }\n return `stk_${Buffer.from(JSON.stringify(payload)).toString(\"base64url\")}`;\n}\n\n// ── API Key Hash ────────────────────────────────────────────────────────────\n\n/**\n * Compute SHA-256 hash of a raw API key for MC validation lookup.\n * The MCP server hashes its luc_/stk_ key and sends the hash to MC,\n * which compares against stored hashes (never sees the raw key).\n */\nexport function hashApiKey(apiKey: string): string {\n return createHash(\"sha256\").update(apiKey).digest(\"hex\");\n}\n\n// ── Credential Store ─────────────────────────────────────────────────────────\n\n/**\n * Read KEY=VALUE pairs from a credentials file.\n * Strips quotes, ignores comments and blank lines.\n */\nfunction parseCredentialsFile(filePath: string): Record<string, string> {\n if (!fs.existsSync(filePath)) {\n return {};\n }\n\n const result: Record<string, string> = {};\n const lines = fs.readFileSync(filePath, \"utf-8\").split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) {\n continue;\n }\n const eqIdx = trimmed.indexOf(\"=\");\n if (eqIdx < 1) {\n continue;\n }\n const key = trimmed.slice(0, eqIdx).trim();\n let val = trimmed.slice(eqIdx + 1).trim();\n if (\n (val.startsWith('\"') && val.endsWith('\"')) ||\n (val.startsWith(\"'\") && val.endsWith(\"'\"))\n ) {\n val = val.slice(1, -1);\n }\n result[key] = val;\n }\n return result;\n}\n\n/**\n * Write credentials to ~/.lucern/credentials.\n * Creates ~/.lucern/ if it doesn't exist.\n */\nexport function writeCredentials(creds: Record<string, string>): void {\n if (!fs.existsSync(LUCERN_HOME)) {\n fs.mkdirSync(LUCERN_HOME, { recursive: true, mode: 0o700 });\n }\n\n // Merge with existing credentials (don't overwrite keys we're not setting)\n const existing = parseCredentialsFile(CREDENTIALS_FILE);\n const merged = { ...existing, ...creds };\n\n const lines = [\n \"# Lucern credentials — managed by `lucern init`\",\n \"# This file is outside any git repo. Git operations cannot destroy it.\",\n \"\",\n ];\n\n for (const [key, val] of Object.entries(merged)) {\n lines.push(`${key}=${val}`);\n }\n\n fs.writeFileSync(CREDENTIALS_FILE, `${lines.join(\"\\n\")}\\n`, {\n mode: 0o600, // Owner read/write only\n });\n}\n\n// ── Credential Resolution ────────────────────────────────────────────────────\n\n/**\n * Resolve LUCERN_API_KEY from the credential chain.\n * Sets process.env vars so the rest of the server can use them.\n *\n * Resolution order:\n * 1. process.env.LUCERN_API_KEY (already set via .mcp.json, shell, CI)\n * 2. ~/.lucern/credentials file\n * 3. process.env.LUCERN_CONVEX_URL + LUCERN_DEPLOY_KEY (direct)\n */\nexport function resolveCredentials(): {\n lucernResolved: boolean;\n stackResolved: boolean;\n mcResolved: boolean;\n source: string;\n rawLucernApiKey?: string;\n rawStackApiKey?: string;\n rawUserToken?: string;\n} {\n // Already fully configured — skip\n if (process.env.LUCERN_CONVEX_URL && process.env.LUCERN_DEPLOY_KEY) {\n return {\n lucernResolved: true,\n stackResolved: !!process.env.STACK_CONVEX_URL,\n mcResolved: !!(process.env.MC_CONVEX_URL && process.env.MC_DEPLOY_KEY),\n source: \"env\",\n rawLucernApiKey: process.env.LUCERN_API_KEY,\n rawStackApiKey: process.env.STACK_API_KEY,\n rawUserToken: process.env.LUCERN_USER_TOKEN,\n };\n }\n\n const lucernEnv = process.env.LUCERN_ENV || \"development\";\n let source = \"none\";\n\n // --- Source 1: process.env (already set) ---\n let lucernApiKey = process.env.LUCERN_API_KEY;\n let stackApiKey = process.env.STACK_API_KEY;\n\n if (lucernApiKey) {\n source = \"env\";\n }\n\n // --- Resolve user token (per-user identity for MCP sessions) ---\n let userToken = process.env.LUCERN_USER_TOKEN;\n\n // --- Source 2: ~/.lucern/credentials ---\n if (lucernApiKey) {\n // Source 1 matched — still check credentials file for user token + JWKS\n const creds = parseCredentialsFile(CREDENTIALS_FILE);\n if (creds.LUCERN_USER_TOKEN && !userToken) {\n userToken = creds.LUCERN_USER_TOKEN;\n process.env.LUCERN_USER_TOKEN = userToken;\n }\n const lucernEnvLocal = (\n process.env.LUCERN_ENV || \"development\"\n ).toLowerCase();\n if (\n creds.CLERK_JWKS_URL &&\n !process.env.CLERK_JWKS_URL &&\n lucernEnvLocal === \"development\"\n ) {\n process.env.CLERK_JWKS_URL = creds.CLERK_JWKS_URL;\n }\n } else {\n const creds = parseCredentialsFile(CREDENTIALS_FILE);\n if (creds.LUCERN_API_KEY) {\n lucernApiKey = creds.LUCERN_API_KEY;\n process.env.LUCERN_API_KEY = lucernApiKey;\n source = CREDENTIALS_FILE;\n }\n if (creds.STACK_API_KEY && !stackApiKey) {\n stackApiKey = creds.STACK_API_KEY;\n process.env.STACK_API_KEY = stackApiKey;\n }\n if (creds.LUCERN_ENV && !process.env.LUCERN_ENV) {\n process.env.LUCERN_ENV = creds.LUCERN_ENV;\n }\n if (creds.LUCERN_USER_TOKEN && !userToken) {\n userToken = creds.LUCERN_USER_TOKEN;\n process.env.LUCERN_USER_TOKEN = userToken;\n }\n // CLERK_JWKS_URL override — only allowed in development\n const lucernEnvLocal = (\n process.env.LUCERN_ENV || \"development\"\n ).toLowerCase();\n if (\n creds.CLERK_JWKS_URL &&\n !process.env.CLERK_JWKS_URL &&\n lucernEnvLocal === \"development\"\n ) {\n process.env.CLERK_JWKS_URL = creds.CLERK_JWKS_URL;\n }\n }\n\n if (source !== \"none\") {\n logMcpInfo(`[lucern] Credentials from ${source} (LUCERN_ENV=${lucernEnv})`);\n }\n\n // --- Decode LUCERN_API_KEY ---\n let lucernResolved = false;\n if (lucernApiKey) {\n const decoded = decodeApiKey(lucernApiKey, \"luc_\");\n if (decoded && \"unified\" in decoded) {\n const creds = selectEnvironment(decoded.unified);\n process.env.LUCERN_CONVEX_URL = creds.url;\n process.env.LUCERN_DEPLOY_KEY = creds.key;\n lucernResolved = true;\n logMcpInfo(\n `[lucern] Lucern → ${creds.url} (${lucernEnv})` +\n (decoded.unified.prod ? \" [prod available]\" : \" [dev only]\")\n );\n } else if (decoded && \"legacy\" in decoded) {\n process.env.LUCERN_CONVEX_URL = decoded.legacy.url;\n process.env.LUCERN_DEPLOY_KEY = decoded.legacy.key;\n lucernResolved = true;\n logMcpInfo(`[lucern] Lucern (legacy) → ${decoded.legacy.url}`);\n } else {\n console.error(\n \"[lucern] LUCERN_API_KEY found but failed to decode. Check format (luc_xxxxx).\"\n );\n }\n }\n\n // --- Decode STACK_API_KEY ---\n let stackResolved = false;\n if (stackApiKey) {\n const decoded = decodeApiKey(stackApiKey, \"stk_\");\n if (decoded && \"unified\" in decoded) {\n const creds = selectEnvironment(decoded.unified);\n process.env.STACK_CONVEX_URL = creds.url;\n process.env.STACK_DEPLOY_KEY = creds.key;\n stackResolved = true;\n logMcpInfo(\n `[lucern] Stack → ${creds.url} (${lucernEnv})` +\n (decoded.unified.prod ? \" [prod available]\" : \" [dev only]\")\n );\n } else if (decoded && \"legacy\" in decoded) {\n process.env.STACK_CONVEX_URL = decoded.legacy.url;\n process.env.STACK_DEPLOY_KEY = decoded.legacy.key;\n stackResolved = true;\n logMcpInfo(`[lucern] Stack (legacy) → ${decoded.legacy.url}`);\n }\n }\n\n // --- Resolve Master Control credentials ---\n // MC credentials enable the MCP server to fetch methodology packs,\n // validate API keys, and read tenant config from the control plane.\n // Default: utmost-ox-403 (dev) / successful-clam-833 (prod)\n let mcResolved = false;\n if (!process.env.MC_CONVEX_URL) {\n const creds = parseCredentialsFile(CREDENTIALS_FILE);\n if (creds.MC_CONVEX_URL) {\n process.env.MC_CONVEX_URL = creds.MC_CONVEX_URL;\n }\n if (creds.MC_DEPLOY_KEY) {\n process.env.MC_DEPLOY_KEY = creds.MC_DEPLOY_KEY;\n }\n }\n if (process.env.MC_CONVEX_URL && process.env.MC_DEPLOY_KEY) {\n mcResolved = true;\n logMcpInfo(`[lucern] Master Control → ${process.env.MC_CONVEX_URL}`);\n }\n\n if (!lucernResolved) {\n console.error(\n \"[lucern] No credentials found. Run: lucern init --key luc_xxxxx\"\n );\n }\n\n if (userToken) {\n logMcpInfo(\"[lucern] User token detected — per-user session mode\");\n }\n\n return {\n lucernResolved,\n stackResolved,\n mcResolved,\n source,\n rawLucernApiKey: lucernApiKey,\n rawStackApiKey: stackApiKey,\n rawUserToken: userToken,\n };\n}\n"]}
1
+ {"version":3,"sources":["../../../apps/mcp-server/src/handlers/sdk.ts","../../../apps/mcp-server/src/handlers/answers.ts","../../../apps/mcp-server/src/handlers/auto-branching.ts","../../contracts/src/ids.contract.ts","../../contracts/src/lens-filter.contract.ts","../../contracts/src/v1/topics/v1.ts","../../server-core/src/kernelApi.ts","../../../apps/mcp-server/src/kernelApi.ts","../../../apps/mcp-server/src/logging.ts","../../../apps/mcp-server/src/convex-client.ts","../../../apps/mcp-server/src/scope.ts","../../../apps/mcp-server/src/handlers/beliefs.ts","../../../apps/mcp-server/src/handlers/bootstrap-session.ts","../../../apps/mcp-server/src/handlers/bootstrap.ts","../../../apps/mcp-server/src/handlers/coding.ts","../../../apps/mcp-server/src/handlers/contracts.ts","../../../apps/mcp-server/src/handlers/contradictions.ts","../../../apps/mcp-server/src/handlers/coordination.ts","../../../apps/mcp-server/src/handlers/edges.ts","../../../apps/mcp-server/src/handlers/graph.ts","../../../apps/mcp-server/src/handlers/topics.ts","../../../apps/mcp-server/src/handlers/coverage.ts","../../../apps/mcp-server/src/handlers/discovery.ts","../../../apps/mcp-server/src/handlers/engineering-verification.ts","../../../apps/mcp-server/src/handlers/evidence.ts","../../../apps/mcp-server/src/handlers/identity.ts","../../../apps/mcp-server/src/handlers/intelligence.ts","../../../apps/mcp-server/src/handlers/judgments.ts","../../../apps/mcp-server/src/handlers/lenses.ts","../../../apps/mcp-server/src/handlers/lineage.ts","../../../apps/mcp-server/src/handlers/observations.ts","../../../apps/mcp-server/src/handlers/ontologies.ts","../../../apps/mcp-server/src/handlers/ontology-matching.ts","../../../apps/mcp-server/src/handlers/policy.ts","../../../apps/mcp-server/src/handlers/questions.ts","../../../apps/mcp-server/src/handlers/research.ts","../../../apps/mcp-server/src/handlers/research-verification.ts","../../server-core/src/domain/context/compile.ts","../../../apps/mcp-server/src/handlers/scope-context.ts","../../../apps/mcp-server/src/handlers/search.ts","../../../apps/mcp-server/src/handlers/tasks.ts","../../../apps/mcp-server/src/handlers/thesis-artifacts.ts","../../../apps/mcp-server/src/handlers/worktrees.ts","../../../apps/mcp-server/src/handlers/index.ts","../../../apps/mcp-server/src/write-policy.ts","../../../apps/mcp-server/src/credentials.ts"],"names":["kernelApi","kernelComponents","kernelInternal","api","internal","path","defaultTopicId"],"mappings":"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","file":"runtime.js","sourcesContent":["import type { AuthContext } from \"./types.js\";\n\ntype HandlerSdkClient = Record<string, any>;\n\nconst handlerSdkClientCache = new WeakMap<AuthContext, HandlerSdkClient>();\n\nasync function resolveOntologyFromLookup(\n baseClient: Record<string, any>,\n input: Record<string, unknown>\n) {\n const id = readString(input.id ?? input.ontologyId);\n if (id) {\n return baseClient.ontologies.get(id);\n }\n\n const ontologyKey = readString(input.ontologyKey);\n if (!ontologyKey) {\n return {\n error: \"Either id or ontologyKey is required.\",\n };\n }\n\n const listResult = await baseClient.ontologies.list({\n tenantId: readString(input.tenantId),\n tier: readString(input.tier),\n status: readString(input.status),\n });\n const payload = asRecord(listResult);\n const rows = Array.isArray(payload.ontologies)\n ? payload.ontologies\n : Array.isArray(payload.definitions)\n ? payload.definitions\n : [];\n const tenantId = readString(input.tenantId);\n const match = rows.find((row) => {\n const record = asRecord(row);\n if (readString(record.ontologyKey) !== ontologyKey) {\n return false;\n }\n if (!tenantId) {\n return true;\n }\n return readString(record.tenantId) === tenantId;\n });\n\n return match\n ? asRecord(match)\n : {\n error: `Ontology not found: ${ontologyKey}`,\n };\n}\n\nfunction buildHandlerSdkClient(ctx: AuthContext): HandlerSdkClient {\n const baseClient = ctx.lucernClient as HandlerSdkClient;\n\n return {\n ...baseClient,\n ontologies: {\n ...baseClient.ontologies,\n get(input: string | Record<string, unknown>) {\n return typeof input === \"string\"\n ? baseClient.ontologies.get(input)\n : resolveOntologyFromLookup(baseClient, input ?? {});\n },\n },\n };\n}\n\nexport function getSdkClient(ctx: AuthContext): HandlerSdkClient {\n if (!ctx.lucernClient) {\n throw new Error(\"Lucern SDK client is not available for this MCP runtime.\");\n }\n\n const cached = handlerSdkClientCache.get(ctx);\n if (cached) {\n return cached;\n }\n\n const wrappedClient = buildHandlerSdkClient(ctx);\n handlerSdkClientCache.set(ctx, wrappedClient);\n return wrappedClient;\n}\n\nexport function formatSdkResult<T>(value: T): Record<string, unknown> {\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"data\" in value\n ) {\n const envelope = value as { data?: Record<string, unknown> };\n if (\n envelope.data &&\n typeof envelope.data === \"object\" &&\n !Array.isArray(envelope.data)\n ) {\n return envelope.data;\n }\n }\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n\n return { value } as Record<string, unknown>;\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nexport function asJsonObject(\n value: unknown\n): Record<string, unknown> | undefined {\n const record = asRecord(value);\n return Object.keys(record).length > 0 ? record : undefined;\n}\n\nexport function readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nexport function readNumber(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const parsed = Number(value.trim());\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n}\n\nexport function readBoolean(value: unknown): boolean | undefined {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") {\n return true;\n }\n if (normalized === \"false\") {\n return false;\n }\n }\n return undefined;\n}\n\nexport function readStringArray(value: unknown): string[] | undefined {\n if (Array.isArray(value)) {\n const items = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n\n return items.length > 0 ? items : undefined;\n }\n\n if (typeof value === \"string\") {\n const normalized = value.trim();\n if (normalized.startsWith(\"[\")) {\n try {\n const parsed = JSON.parse(normalized);\n if (Array.isArray(parsed)) {\n return readStringArray(parsed);\n }\n } catch {\n // Ignore malformed JSON and fall through to undefined.\n }\n }\n }\n\n return undefined;\n}\n\nexport function readTimeRange(\n value: unknown\n): { start: number; end: number } | undefined {\n const record = asRecord(value);\n const start = readNumber(record.start);\n const end = readNumber(record.end);\n\n if (start === undefined && end === undefined) {\n return undefined;\n }\n\n return {\n start: start ?? Number.NaN,\n end: end ?? Number.NaN,\n };\n}\n","/**\n * Answer Handlers — create_answer, get_answer\n */\n\nimport type { HandlerModule } from \"./types.js\";\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\n\nexport const answerHandlers: HandlerModule = {\n async create_answer(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).answers.create({\n questionNodeId: args.questionNodeId as string,\n answerText: args.answerText as string,\n confidence: (args.confidence as string) || \"moderate\",\n evidenceNodeIds: (args.evidenceNodeIds as string[]) || [],\n answerSource: (args.answerSource as string) || \"ai_generated\",\n })\n );\n },\n\n async get_answer(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).answers.get({\n questionNodeId: args.questionNodeId as string,\n })\n );\n },\n};\n","/**\n * Auto-Branching Handlers — analyze_topic_density, apply_auto_branching\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const autoBranchingHandlers: HandlerModule = {\n async analyze_topic_density(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.analyzeTopicDensity(args)\n );\n },\n\n async apply_auto_branching(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.applyAutoBranching(args)\n );\n },\n};\n","export type DecodedPrefixedId = {\n prefix: string;\n value: string;\n};\n\nconst PREFIXED_ID_PATTERN = /^([a-z][a-z0-9]*)_(.+)$/;\n\nexport function encodePrefixedId(prefix: string, value: string): string {\n const normalizedPrefix = prefix.trim();\n const normalizedValue = value.trim();\n\n if (!normalizedPrefix || !normalizedValue) {\n throw new Error(\"Both prefix and value are required to encode a prefixed ID.\");\n }\n\n return `${normalizedPrefix}_${normalizedValue}`;\n}\n\nexport function decodePrefixedId(id: string): DecodedPrefixedId {\n const normalized = id.trim();\n const match = PREFIXED_ID_PATTERN.exec(normalized);\n\n if (!match) {\n throw new Error(`Invalid prefixed ID: ${id}`);\n }\n\n return {\n prefix: match[1],\n value: match[2],\n };\n}\n\nexport function hasPrefixedIdPrefix(id: string, prefix: string): boolean {\n const decoded = decodePrefixedId(id);\n return decoded.prefix === prefix.trim();\n}\n","/**\n * Lens Filter Criteria Contract\n *\n * Version-discriminated filter DSL for lenses. Each filter criteria document\n * carries a `version` and `kind` discriminator so future shapes can coexist\n * without schema migrations. The Convex `filterCriteria` field remains v.any()\n * — all type enforcement happens here at the TypeScript contract layer.\n *\n * Forward-compatibility guarantees:\n * - `version` field: new versions add fields, never remove or rename existing ones\n * - `kind` field: new filter kinds (temporal, confidence-range) can be added\n * without touching taxonomy code paths\n * - `entityTypeFilters` array items are open to extension in future versions\n * - Resolution logic switches on `version` + `kind` to select the right resolver\n *\n * @module lucern/contracts/src/lens-filter\n */\n\n// ---------------------------------------------------------------------------\n// V1: Taxonomy Filter — entity type + subtype matching\n// ---------------------------------------------------------------------------\n\n/**\n * A single entity type filter entry. Matches nodes whose `nodeType` equals\n * `entityTypeValue`, optionally further narrowed by subtype membership.\n *\n * V2 will add `propertyMatchers` here for arbitrary JSON Schema facet queries.\n */\nexport type EntityTypeFilterV1 = {\n /** References ontologyVersion.entityTypes[].value, e.g. \"company\" */\n entityTypeValue: string;\n\n /** Optional subtype narrowing. If omitted or empty, all subtypes match. */\n subtypeValues?: string[];\n};\n\n/**\n * Optional scope to restrict which ontology the filter resolves against.\n * If omitted, resolution uses whatever ontology is active in the workspace.\n */\nexport type OntologyScope = {\n /** Restrict to a specific ontology by key, e.g. \"vc-investment\" */\n ontologyKey?: string;\n};\n\n/**\n * Taxonomy filter criteria v1: entity type + subtype matching over ontology.\n */\nexport type TaxonomyFilterCriteriaV1 = {\n version: 1;\n kind: \"taxonomy\";\n entityTypeFilters: EntityTypeFilterV1[];\n ontologyScope?: OntologyScope;\n};\n\n// ---------------------------------------------------------------------------\n// Union: All filter criteria versions and kinds\n// ---------------------------------------------------------------------------\n\n/**\n * Discriminated union of all supported filter criteria.\n * Resolution logic switches on `version` + `kind`.\n *\n * To add a new filter kind:\n * 1. Define a new type (e.g., TemporalFilterCriteriaV1)\n * 2. Add it to this union\n * 3. Add a resolver in taxonomy-filter.ts\n * 4. No schema migration needed — filterCriteria is v.any()\n */\nexport type LensFilterCriteria = TaxonomyFilterCriteriaV1;\n// Future: | TemporalFilterCriteriaV1 | ConfidenceRangeFilterCriteriaV1 | ...\n\n// ---------------------------------------------------------------------------\n// Type guards\n// ---------------------------------------------------------------------------\n\nexport function isLensFilterCriteria(\n value: unknown\n): value is LensFilterCriteria {\n if (!value || typeof value !== \"object\") return false;\n const obj = value as Record<string, unknown>;\n return typeof obj.version === \"number\" && typeof obj.kind === \"string\";\n}\n\nexport function isTaxonomyFilterCriteriaV1(\n value: unknown\n): value is TaxonomyFilterCriteriaV1 {\n if (!isLensFilterCriteria(value)) return false;\n return value.version === 1 && value.kind === \"taxonomy\";\n}\n\n// ---------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------\n\nexport type FilterValidationResult =\n | { valid: true }\n | { valid: false; errors: string[] };\n\n/**\n * Validate a filter criteria document at the contract layer.\n * This runs before persisting to Convex.\n */\nexport function validateFilterCriteria(\n value: unknown\n): FilterValidationResult {\n if (value === undefined || value === null) {\n return { valid: true }; // filterCriteria is optional\n }\n\n if (!isLensFilterCriteria(value)) {\n return {\n valid: false,\n errors: [\n 'filterCriteria must have numeric \"version\" and string \"kind\" fields',\n ],\n };\n }\n\n if (isTaxonomyFilterCriteriaV1(value)) {\n return validateTaxonomyFilterV1(value);\n }\n\n // Cast to access properties — TypeScript narrows to `never` when all union\n // members are exhausted, but at runtime unknown version/kind combos are possible.\n const raw = value as { version: number; kind: string };\n return {\n valid: false,\n errors: [\n `Unsupported filter criteria: version=${raw.version}, kind=${raw.kind}`,\n ],\n };\n}\n\nfunction validateTaxonomyFilterV1(\n criteria: TaxonomyFilterCriteriaV1\n): FilterValidationResult {\n const errors: string[] = [];\n\n if (!Array.isArray(criteria.entityTypeFilters)) {\n errors.push(\"entityTypeFilters must be an array\");\n return { valid: false, errors };\n }\n\n if (criteria.entityTypeFilters.length === 0) {\n errors.push(\"entityTypeFilters must contain at least one entry\");\n return { valid: false, errors };\n }\n\n for (let i = 0; i < criteria.entityTypeFilters.length; i++) {\n const filter = criteria.entityTypeFilters[i];\n if (!filter || typeof filter.entityTypeValue !== \"string\") {\n errors.push(\n `entityTypeFilters[${i}].entityTypeValue must be a non-empty string`\n );\n continue;\n }\n if (filter.entityTypeValue.trim().length === 0) {\n errors.push(\n `entityTypeFilters[${i}].entityTypeValue must be a non-empty string`\n );\n }\n if (\n filter.subtypeValues !== undefined &&\n !Array.isArray(filter.subtypeValues)\n ) {\n errors.push(`entityTypeFilters[${i}].subtypeValues must be an array`);\n }\n }\n\n if (criteria.ontologyScope !== undefined) {\n if (\n typeof criteria.ontologyScope !== \"object\" ||\n criteria.ontologyScope === null\n ) {\n errors.push(\"ontologyScope must be an object\");\n }\n }\n\n return errors.length === 0\n ? { valid: true }\n : { valid: false, errors };\n}\n","/**\n * @lucern/contracts — TopicsV1 namespace (resource contracts)\n *\n * Moved from src/topic-scope.contract.ts in EK-16 T1 PR 2.\n * Compat shim remains at the old path until the Lucern 1.0.0 cut.\n */\n\nexport const ROOT_TOPIC_ID = \"n17tm38rwet7wqgzrmwahyt1z582590y\";\n\nexport type TopicDoc = {\n _id: string;\n name?: string;\n parentTopicId?: string;\n depth?: number;\n type?: string;\n};\n\n/**\n * BFS traversal collecting a topic and its neighborhood:\n * ancestors up to root + descendants down to maxDescendantDepth.\n */\nexport function collectTopicNeighborhood(\n topics: TopicDoc[],\n rootTopicId: string,\n maxDescendantDepth = 2\n): string[] {\n const byId = new Map<string, TopicDoc>();\n const children = new Map<string, string[]>();\n for (const topic of topics) {\n const id = String(topic._id);\n byId.set(id, topic);\n if (!children.has(id)) {\n children.set(id, []);\n }\n }\n for (const topic of topics) {\n if (!topic.parentTopicId) {\n continue;\n }\n const parent = String(topic.parentTopicId);\n const id = String(topic._id);\n const list = children.get(parent) || [];\n list.push(id);\n children.set(parent, list);\n }\n\n const selected = new Set<string>();\n selected.add(rootTopicId);\n\n // Ancestors\n let cursor = byId.get(rootTopicId);\n while (cursor?.parentTopicId) {\n const parentId = String(cursor.parentTopicId);\n if (selected.has(parentId)) {\n break;\n }\n selected.add(parentId);\n cursor = byId.get(parentId);\n }\n\n // Descendants\n const queue: Array<{ id: string; depth: number }> = [\n { id: rootTopicId, depth: 0 },\n ];\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (current.depth >= maxDescendantDepth) {\n continue;\n }\n for (const childId of children.get(current.id) || []) {\n if (!selected.has(childId)) {\n selected.add(childId);\n }\n queue.push({ id: childId, depth: current.depth + 1 });\n }\n }\n\n return Array.from(selected);\n}\n","/**\n * Server-core kernelApi — host-registered Convex API binding.\n *\n * Hosts (Stack gateway, mcp-server, identity-template, etc.) call\n * registerKernelApi({ api, components, internal }) at boot with their\n * deployment's generated bindings. Server-core consumers continue to\n * use `api.xxx`, `components.xxx`, `internal.xxx` unchanged — the\n * exports are Proxies that dispatch to the registered binding at\n * access time.\n */\n\nexport interface KernelApiBinding {\n api: any;\n components: any;\n internal: any;\n}\n\nlet binding: KernelApiBinding | null = null;\n\nexport function registerKernelApi(nextBinding: KernelApiBinding): void {\n binding = nextBinding;\n}\n\nexport function isKernelApiRegistered(): boolean {\n return binding !== null;\n}\n\nfunction getBinding(): KernelApiBinding {\n if (!binding) {\n throw new Error(\n \"Server-core kernelApi not registered. \" +\n \"Call registerKernelApi({api, components, internal}) at host boot.\"\n );\n }\n return binding;\n}\n\nfunction makeProxy(which: keyof KernelApiBinding): any {\n return new Proxy({} as any, {\n get(_target, prop) {\n return getBinding()[which][prop as string];\n },\n });\n}\n\nexport const api: any = makeProxy(\"api\");\nexport const components: any = makeProxy(\"components\");\nexport const internal: any = makeProxy(\"internal\");\n","import {\n api as kernelApi,\n components as kernelComponents,\n internal as kernelInternal,\n} from \"@lucern/reasoning-kernel/_generated/api.js\";\nimport { registerKernelApi } from \"@lucern/server-core/kernelApi\";\n\nregisterKernelApi({\n api: kernelApi,\n components: kernelComponents,\n internal: kernelInternal,\n});\n\nexport const api = kernelApi as any;\nexport const components = kernelComponents as any;\nexport const internal = kernelInternal as any;\n","import { appendFileSync } from \"node:fs\";\n\nexport function isQuietMcpBoot(): boolean {\n return process.env.LUCERN_MCP_QUIET === \"1\";\n}\n\nexport function logMcpInfo(message: string): void {\n if (!isQuietMcpBoot()) {\n console.error(message);\n }\n}\n\nexport function appendMcpDiagnostics(\n event: string,\n fields: Record<string, unknown> = {}\n): void {\n const path = process.env.LUCERN_MCP_DIAGNOSTICS_FILE?.trim();\n if (!path) {\n return;\n }\n\n const payload = {\n ts: new Date().toISOString(),\n pid: process.pid,\n event,\n ...Object.fromEntries(\n Object.entries(fields).filter(([, value]) => value !== undefined)\n ),\n };\n\n try {\n appendFileSync(path, `${JSON.stringify(payload)}\\n`);\n } catch {\n // Diagnostics must never interfere with MCP startup.\n }\n}\n","/**\n * Convex Clients — Lazy-initialized admin-authed ConvexHttpClients for MCP server.\n *\n * LAZY INITIALIZATION: Clients are created on first use, not at import time.\n * This allows index.ts loadLucernEnv() to decode LUCERN_API_KEY and\n * STACK_API_KEY into their respective URL and deploy key env vars before\n * any Convex calls are made.\n *\n * Three clients:\n * - Lucern client → reasoning graph (good-blackbird / precious-dog) [required]\n * - Stack client → StackOS platform (sincere-shepherd / sleek-mink) [optional]\n * - Master Control client → control plane (utmost-ox / successful-clam) [optional]\n *\n * Lucern + Stack are decoded from API keys by index.ts resolveCredentials() at startup.\n * Master Control is resolved from MC_CONVEX_URL + MC_DEPLOY_KEY (set in ~/.lucern/credentials).\n * Uses deploy key auth to call internal mutations/queries directly,\n * bypassing Clerk (standard Convex server-to-server pattern).\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { api } from \"./kernelApi.js\";\nimport { ConvexHttpClient } from \"convex/browser\";\nimport { logMcpInfo } from \"./logging.js\";\n\n// ── Per-request client override (hosted multi-tenant) ─────────────────────\n// On Vercel, the hosted route serves multiple MCP instances (lucern, stack)\n// from the same process. Each instance needs to query a different Convex\n// deployment. AsyncLocalStorage lets handlers transparently use the correct\n// client without changing their call signatures.\n\nconst _requestScopedClient = new AsyncLocalStorage<ConvexHttpClient>();\n\n/**\n * Run a function with a request-scoped Convex client.\n * All `adminQuery`/`adminMutation`/`adminAction` calls within `fn` will\n * use the provided client instead of the process-level singleton.\n */\nexport function runWithScopedClient<T>(\n client: ConvexHttpClient,\n fn: () => T | Promise<T>\n): T | Promise<T> {\n return _requestScopedClient.run(client, fn);\n}\n\n/**\n * Create an admin-authed ConvexHttpClient for a specific deployment.\n * Used by the hosted route to create per-instance clients.\n */\nexport function createAdminClient(url: string, deployKey: string): ConvexHttpClient {\n const client = new ConvexHttpClient(url);\n (client as unknown as { setAdminAuth: (key: string) => void }).setAdminAuth(deployKey);\n return client;\n}\n\n// ── Lucern Client (required, lazy) ──────────────────────────────────────────\n\nlet _lucernClient: ConvexHttpClient | null = null;\n\n/**\n * Get the admin-authed Lucern ConvexHttpClient.\n * Checks AsyncLocalStorage first for per-request override (hosted multi-tenant),\n * then falls back to the process-level singleton.\n * Created on first call — env vars must be set by then (index.ts does this).\n */\nfunction getLucernClient(): ConvexHttpClient {\n const scoped = _requestScopedClient.getStore();\n if (scoped) {\n return scoped;\n }\n\n if (_lucernClient) {\n return _lucernClient;\n }\n\n const url = process.env.LUCERN_CONVEX_URL;\n const key = process.env.LUCERN_DEPLOY_KEY;\n\n if (!url) {\n throw new Error(\n \"LUCERN_CONVEX_URL is required. Ensure LUCERN_API_KEY is set in .env.lucern\"\n );\n }\n\n if (!key) {\n throw new Error(\n \"LUCERN_DEPLOY_KEY is required. Ensure LUCERN_API_KEY is set in .env.lucern\"\n );\n }\n\n _lucernClient = new ConvexHttpClient(url);\n // setAdminAuth exists at runtime but is not in the public type declarations.\n // This is the standard Convex pattern for server-to-server admin access.\n (\n _lucernClient as unknown as { setAdminAuth: (key: string) => void }\n ).setAdminAuth(key);\n\n logMcpInfo(`[lucern-graph] Lucern client initialized → ${url}`);\n return _lucernClient;\n}\n\n// ── Stack Client (optional, lazy) ───────────────────────────────────────────\n\nlet _stackClient: ConvexHttpClient | null = null;\nlet _stackClientChecked = false;\n\n/**\n * Get the admin-authed Stack ConvexHttpClient.\n * Returns null if STACK_API_KEY is not configured.\n * Created on first call — env vars must be set by then (index.ts does this).\n */\nfunction getStackClient(): ConvexHttpClient | null {\n if (_stackClientChecked) {\n return _stackClient;\n }\n\n const url = process.env.STACK_CONVEX_URL;\n const key = process.env.STACK_DEPLOY_KEY;\n\n if (url && key) {\n _stackClient = new ConvexHttpClient(url);\n (\n _stackClient as unknown as { setAdminAuth: (key: string) => void }\n ).setAdminAuth(key);\n logMcpInfo(`[lucern-graph] Stack client initialized → ${url}`);\n } else {\n logMcpInfo(\n \"[lucern-graph] Stack client not configured (no STACK_API_KEY). Stack tools unavailable.\"\n );\n }\n\n _stackClientChecked = true;\n return _stackClient;\n}\n\n// ── Admin helpers (Lucern) ──────────────────────────────────────────────────\n\n/**\n * Admin-authed mutation/query/action helpers for Lucern graph.\n * ConvexHttpClient types restrict .mutation()/.query() to public functions,\n * but admin auth enables internal function calls at runtime.\n * These helpers apply the necessary type assertions.\n */\n\n/**\n * MCP-layer metadata fields that handlers attach for observability but that\n * must NOT be forwarded to Convex mutations (validators reject unknown fields).\n * Some Convex functions accept these as v.optional() (S2-13K), but many don't.\n * Stripping here guarantees safety for all call sites while keeping the\n * observability data available for MCP-side logging.\n */\nconst MCP_META_KEYS = [\n \"mcpSessionId\",\n \"mcpToolName\",\n \"runtimeToolName\",\n \"runtimePackKey\",\n \"runtimePackInstallScope\",\n] as const;\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\ntype MutationRuntimeFields = {\n runtimeToolName: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: RuntimePackInstallScope;\n};\nconst mutationRuntimeCache = new Map<\n string,\n Promise<MutationRuntimeFields | null>\n>();\nconst packInstallScopeCache = new Map<\n string,\n Promise<RuntimePackInstallScope | undefined>\n>();\n\nasync function resolvePackInstallScope(\n packKey: string\n): Promise<RuntimePackInstallScope | undefined> {\n const normalizedPackKey = packKey.trim();\n if (!normalizedPackKey) {\n return;\n }\n\n let cached = packInstallScopeCache.get(normalizedPackKey);\n if (!cached) {\n cached = (async () => {\n const packDefinition = await mcAdminQuery(\n \"packs:getPackDefinition\" as any,\n {\n packKey: normalizedPackKey,\n }\n );\n const installScope = (packDefinition as { installScope?: unknown } | null)\n ?.installScope;\n if (installScope === \"tenant\" || installScope === \"workspace\") {\n return installScope;\n }\n throw new Error(\n `[mcp-runtime] Pack \"${normalizedPackKey}\" is missing a valid installScope`\n );\n })();\n packInstallScopeCache.set(normalizedPackKey, cached);\n }\n\n return await cached;\n}\n\nasync function resolveMutationRuntimeFields(\n toolName: unknown\n): Promise<MutationRuntimeFields | null> {\n if (typeof toolName !== \"string\" || toolName.trim().length === 0) {\n return null;\n }\n const normalizedToolName = toolName.trim();\n\n let cached = mutationRuntimeCache.get(normalizedToolName);\n if (!cached) {\n cached = (async () => {\n const tools = (await (getLucernClient() as any).query(\n api.toolAccess.getExecutableTools,\n {}\n )) as Array<{\n toolName?: string;\n isActive?: boolean;\n status?: string;\n packKey?: string;\n }>;\n const tool = tools.find(\n (candidate) =>\n candidate?.toolName === normalizedToolName &&\n candidate?.isActive !== false &&\n candidate?.status !== \"deprecated\" &&\n candidate?.status !== \"disabled\"\n );\n const packKey =\n typeof tool?.packKey === \"string\" ? tool.packKey.trim() : \"\";\n if (!packKey) {\n return { runtimeToolName: normalizedToolName };\n }\n\n return {\n runtimeToolName: normalizedToolName,\n runtimePackKey: packKey,\n runtimePackInstallScope: await resolvePackInstallScope(packKey),\n };\n })();\n mutationRuntimeCache.set(normalizedToolName, cached);\n }\n\n return await cached;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function adminMutation(fn: any, args: any): Promise<any> {\n // Strip MCP-layer metadata before forwarding to Convex.\n // These fields are used for session tracking / observability in the MCP layer\n // but cause ArgumentValidationError when the Convex validator doesn't expect them.\n const cleanArgs = { ...args };\n if (\n cleanArgs.runtimeToolName === undefined &&\n cleanArgs.runtimePackKey === undefined &&\n cleanArgs.runtimePackInstallScope === undefined\n ) {\n const runtimeFields = await resolveMutationRuntimeFields(args?.mcpToolName);\n if (runtimeFields) {\n Object.assign(cleanArgs, runtimeFields);\n }\n }\n for (const key of MCP_META_KEYS) {\n delete cleanArgs[key];\n }\n return (getLucernClient() as any).mutation(fn, cleanArgs);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function adminQuery(fn: any, args: any): Promise<any> {\n return (getLucernClient() as any).query(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function adminAction(fn: any, args: any): Promise<any> {\n return (getLucernClient() as any).action(fn, args);\n}\n\n// ── Admin helpers (Stack) ───────────────────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function stackAdminMutation(fn: any, args: any): Promise<any> {\n const c = getStackClient();\n if (!c) {\n throw new Error(\n \"Stack client not configured (set STACK_API_KEY in .env.lucern)\"\n );\n }\n return (c as any).mutation(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function stackAdminQuery(fn: any, args: any): Promise<any> {\n const c = getStackClient();\n if (!c) {\n throw new Error(\n \"Stack client not configured (set STACK_API_KEY in .env.lucern)\"\n );\n }\n return (c as any).query(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function stackAdminAction(fn: any, args: any): Promise<any> {\n const c = getStackClient();\n if (!c) {\n throw new Error(\n \"Stack client not configured (set STACK_API_KEY in .env.lucern)\"\n );\n }\n return (c as any).action(fn, args);\n}\n\n// ── Master Control Client (optional, lazy) ───────────────────────────────\n// Control plane (utmost-ox-403 dev / successful-clam-833 prod).\n// Stores: methodology pack definitions, tenant assignments, API key validation.\n// Tenant-custom packs live in the TENANT's deployment (Lucern client), not here.\n// MCP reads from BOTH to compile the full methodology set.\n\nlet _mcClient: ConvexHttpClient | null = null;\nlet _mcClientChecked = false;\n\nfunction getMcClient(): ConvexHttpClient | null {\n if (_mcClientChecked) {\n return _mcClient;\n }\n\n const url = process.env.MC_CONVEX_URL;\n const key = process.env.MC_DEPLOY_KEY;\n\n if (url && key) {\n _mcClient = new ConvexHttpClient(url);\n (\n _mcClient as unknown as { setAdminAuth: (key: string) => void }\n ).setAdminAuth(key);\n logMcpInfo(`[lucern-graph] Master Control client initialized → ${url}`);\n } else {\n logMcpInfo(\n \"[lucern-graph] Master Control client not configured (no MC_CONVEX_URL). \" +\n \"Methodology packs will use hardcoded fallback.\"\n );\n }\n\n _mcClientChecked = true;\n return _mcClient;\n}\n\n// ── Admin helpers (Master Control) ───────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function mcAdminQuery(fn: any, args: any): Promise<any> {\n const c = getMcClient();\n if (!c) {\n throw new Error(\n \"Master Control client not configured (set MC_CONVEX_URL + MC_DEPLOY_KEY)\"\n );\n }\n return (c as any).query(fn, args);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function mcAdminMutation(fn: any, args: any): Promise<any> {\n const c = getMcClient();\n if (!c) {\n throw new Error(\n \"Master Control client not configured (set MC_CONVEX_URL + MC_DEPLOY_KEY)\"\n );\n }\n return (c as any).mutation(fn, args);\n}\n\n/**\n * Check if Master Control client is available.\n * Use this to decide whether to fetch from control plane or use hardcoded fallback.\n */\nexport function isMcClientAvailable(): boolean {\n return !!(process.env.MC_CONVEX_URL && process.env.MC_DEPLOY_KEY);\n}\n\n// ── Tenant Config (MC-validated session context) ────────────────────────────\n// Set at MCP server boot after MC validateMcpSession succeeds.\n// Handlers read this to scope methodology, features, and audit attribution.\n\nexport type TenantConfig = {\n tenantId: string;\n slug: string;\n name: string;\n tier: string;\n methodologyPackIds: string[];\n apiKeyId: string;\n // Block 11B: Per-user session context (optional — omitted for legacy callers)\n sessionType?: \"agent\" | \"user\";\n userId?: string; // Clerk user ID (user sessions) or AGENT_IDENTITY (agent sessions)\n userEmail?: string; // For audit trail (user sessions only)\n userRole?: string; // From MC membership: platform_admin | tenant_admin | editor | viewer | ...\n allowedTools?: string[] | null; // null = all (agents), string[] = filtered (users), [] = deny all\n // Block 11C: Cached permitted tools from tenant Convex getPermittedTools (session-boot)\n permittedTools?: Array<{\n toolName: string;\n requiredRole?: string;\n approvalGateId?: string;\n isCore?: boolean;\n category?: string;\n }>;\n // Block 11D: Topic-level access resolved at session boot from MC resolveTopicAccess.\n // null = unrestricted (agents, admins). string[] = specific topic IDs. [] = no topic access.\n allowedTopics?: string[] | null;\n isTopicAdmin?: boolean; // true for platform_admin/tenant_admin admin bypass\n // Layer 2a: Group-pack binding — resolved at boot from MC resolveUserPackAccess\n groupIds?: string[]; // Groups this user belongs to\n permittedPackKeys?: string[]; // Packs accessible via group assignments\n permittedToolNames?: string[]; // Tool names from permitted packs (for intersection with RBAC)\n principalId?: string;\n principalType?: \"human\" | \"service\" | \"agent\";\n workspaceId?: string;\n scopes?: string[];\n authMode?:\n | \"interactive_user\"\n | \"service_principal\"\n | \"tenant_api_key\"\n | \"session_token\";\n roles?: string[];\n};\n\nlet _tenantConfig: TenantConfig | null = null;\n\n/**\n * Set tenant config — write-once guard. Can only be set once per process lifetime.\n * The config is frozen to prevent mutation by handlers.\n */\nexport function setTenantConfig(config: TenantConfig): void {\n if (_tenantConfig !== null) {\n throw new Error(\n \"[lucern] Tenant config already set — write-once guard prevents overwrite. \" +\n \"Restart the MCP server to change tenant context.\"\n );\n }\n _tenantConfig = Object.freeze({ ...config }) as TenantConfig;\n logMcpInfo(\n `[lucern] Tenant config set: slug=\"${config.slug}\" tier=${config.tier} packs=[${config.methodologyPackIds.join(\",\")}]`\n );\n}\n\n/**\n * Get validated tenant config. Returns a frozen object (immutable).\n */\nexport function getTenantConfig(): Readonly<TenantConfig> | null {\n return _tenantConfig;\n}\n\n// ── Identity & defaults ─────────────────────────────────────────────────────\n\n/**\n * Default agent identity for MCP operations.\n * All graph mutations will be attributed to this identity.\n */\nexport const AGENT_IDENTITY =\n process.env.LUCERN_AGENT_IDENTITY || \"agent:claude-code\";\n\n/**\n * Process-local session identity for inter-agent coordination.\n * Each MCP server process gets a unique UUID, enabling parallel sessions\n * to discover and message each other via agentSessions/agentMessages tables.\n */\nexport const SESSION_ID = crypto.randomUUID();\n\n/**\n * Default topic ID — set after seed script runs.\n * MCP handlers use this if topicId is not explicitly provided.\n *\n * @deprecated DEAD CODE — no importers. Use scope.ts defaultTopicId instead.\n * Will be removed when the legacy scope table is eliminated.\n * See TC-D: Project Overlay Demotion.\n */\nlet defaultTopicId: string | null = null;\n\n/** @deprecated Use scope.ts setDefaultScopeContext instead. No importers. */\nexport function setDefaultTopicId(id: string): void {\n defaultTopicId = id;\n}\n\n/** @deprecated Use scope.ts getDefaultTopicId instead. No importers. */\nexport function getDefaultTopicId(): string | null {\n return defaultTopicId;\n}\n","/**\n * Scope Resolution Helpers\n *\n * `topicId` is the canonical parameter name in MCP tool contracts.\n * `projectId` is accepted as a backward-compatibility alias — callers may\n * still pass it, but new tool schemas expose `topicId`.\n *\n * Use `readTopicIdArg(args)` to read whichever the caller provided:\n * topicId takes precedence; projectId is the fallback.\n *\n * Topic -> legacy scope alias mapping is resolved in this order:\n * 1) topic legacy graph scope field / topic.metadata legacy graph scope field\n * 2) topic.metadata.legacyProjectId\n * 3) topic.metadata.projectId\n * 4) heuristic inference from existing node search results\n *\n * Ambient context: When no explicit topicId/projectId is provided and\n * no in-memory default is set, falls back to .lucern.json in the repo root.\n * This file is written by begin_build_session/compile_context flows and read by hooks + handlers.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { ROOT_TOPIC_ID } from \"@lucern/contracts\";\nimport { api, internal } from \"./kernelApi.js\";\nimport { adminQuery } from \"./convex-client.js\";\nimport { checkTopicScope } from \"./topic-scope.js\";\nimport type { Id } from \"@lucern/reasoning-kernel/_generated/dataModel.js\";\n\ntype AnyRecord = Record<string, unknown>;\n\nexport type ScopeResolution = {\n inputScopeId?: string;\n topicId?: string;\n topicName?: string;\n legacyScopeId?: string;\n source:\n | \"default_topic\"\n | \"direct_topic\"\n | \"topic_metadata\"\n | \"topic_inferred\"\n | \"legacy_project_alias\"\n | \"node_topic\"\n | \"node_project\"\n | \"lucern_json\"\n | \"unresolved\";\n};\n\nlet defaultTopicId: string | null = null;\nconst PUBLIC_TOPIC_PREFIX = \"top_\";\n\nfunction encodePublicTopicId(topicId: string | undefined): string | undefined {\n if (!isNonEmptyString(topicId)) {\n return undefined;\n }\n return topicId.startsWith(PUBLIC_TOPIC_PREFIX)\n ? topicId\n : `${PUBLIC_TOPIC_PREFIX}${topicId}`;\n}\n\nfunction decodePublicTopicId(topicId: string | undefined): string | undefined {\n if (!isNonEmptyString(topicId)) {\n return undefined;\n }\n return topicId.startsWith(PUBLIC_TOPIC_PREFIX)\n ? topicId.slice(PUBLIC_TOPIC_PREFIX.length)\n : topicId;\n}\n\n/**\n * Read the topic scope from MCP tool args.\n * Returns undefined if topicId is not provided — let resolveTopicScopeId handle fallback.\n */\nexport function readTopicIdArg(\n args: Record<string, unknown>\n): string | undefined {\n const topicId = args.topicId as string | undefined;\n const legacyProjectId = args.projectId as string | undefined;\n return topicId || legacyProjectId || undefined;\n}\n\n// --- .lucern.json ambient context ---\n\nexport type LucernContextFile = {\n topicId?: string;\n topicName?: string;\n activeWorktree?: {\n worktreeId: string;\n title: string;\n status: string;\n executionOrder: number | null;\n gate: string | null;\n } | null;\n deployment?: string;\n lastUpdated?: number;\n};\n\nconst LUCERN_JSON_PATH = path.resolve(process.cwd(), \".lucern.json\");\n\n/**\n * Read .lucern.json from the repo root (synchronous).\n * Returns null if the file doesn't exist or is malformed.\n */\nexport function readLucernJson(): LucernContextFile | null {\n try {\n const raw = fs.readFileSync(LUCERN_JSON_PATH, \"utf-8\");\n const parsed = JSON.parse(raw) as LucernContextFile;\n return {\n ...parsed,\n topicId: parsed.topicId,\n topicName: parsed.topicName,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Write .lucern.json to the repo root.\n * Called by session bootstrap flows after successful init.\n */\nexport function writeLucernJson(context: LucernContextFile): void {\n try {\n const normalized: LucernContextFile = {\n ...context,\n topicId: encodePublicTopicId(context.topicId),\n };\n fs.writeFileSync(\n LUCERN_JSON_PATH,\n `${JSON.stringify(normalized, null, 2)}\\n`,\n \"utf-8\"\n );\n } catch {\n // Non-critical — ambient context just won't be available\n }\n}\n\n// The Root \"Lucern\" topic is a container for child topics.\n// Epistemic nodes (beliefs, questions, evidence, answers) should\n// NEVER be scoped to Root — they belong under specific child topics.\nexport { ROOT_TOPIC_ID };\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\n/**\n * Resolve topicId from a linked epistemic node.\n * Used by creation handlers to inherit topic from a parent node\n * (e.g., question inherits from belief, answer inherits from question).\n */\nexport async function resolveTopicFromNode(\n nodeId: string | undefined,\n _toolName: string\n): Promise<string | null> {\n if (!isNonEmptyString(nodeId)) {\n return null;\n }\n const node = await tryGetNodeById(nodeId);\n if (!node) {\n return null;\n }\n const topicId = isNonEmptyString(node.topicId) ? node.topicId : null;\n // Never inherit Root — the linked node itself needs backfill\n if (topicId === ROOT_TOPIC_ID) {\n return null;\n }\n return topicId;\n}\n\nfunction readTopicMappedProjectId(topic: AnyRecord): string | undefined {\n const metadata = (topic.metadata || {}) as AnyRecord;\n const candidate =\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return isNonEmptyString(candidate) ? candidate : undefined;\n}\n\nasync function tryGetTopicById(topicId: string): Promise<AnyRecord | null> {\n const normalizedTopicId = decodePublicTopicId(topicId);\n if (!normalizedTopicId) {\n return null;\n }\n try {\n const topic = (await adminQuery(api.topics.get, {\n id: normalizedTopicId as Id<\"topics\">,\n })) as AnyRecord | null;\n return topic || null;\n } catch {\n return null;\n }\n}\n\nasync function tryGetNodeById(nodeId: string): Promise<AnyRecord | null> {\n try {\n const node = (await adminQuery(internal.epistemicNodes.getInternal, {\n nodeId: nodeId as any,\n })) as AnyRecord | null;\n return node || null;\n } catch {\n return null;\n }\n}\n\nasync function findTopicByMappedProjectId(\n legacyScopeId: string\n): Promise<AnyRecord | null> {\n try {\n const topics = (await adminQuery(api.topics.list, {})) as AnyRecord[];\n return (\n topics.find((topic) => readTopicMappedProjectId(topic) === legacyScopeId) ||\n null\n );\n } catch {\n return null;\n }\n}\n\nexport async function resolveTopicScopeContext(\n scopeId?: string\n): Promise<ScopeResolution> {\n const normalizedScopeId = decodePublicTopicId(scopeId);\n\n if (!isNonEmptyString(scopeId)) {\n if (isNonEmptyString(defaultTopicId)) {\n const defaultTopic = await tryGetTopicById(defaultTopicId);\n const mapped = defaultTopic\n ? readTopicMappedProjectId(defaultTopic)\n : undefined;\n return {\n inputScopeId: undefined,\n legacyScopeId: mapped || undefined,\n topicId: defaultTopicId || undefined,\n topicName: defaultTopic ? String(defaultTopic.name || \"\") : undefined,\n source: \"default_topic\",\n };\n }\n return { inputScopeId: undefined, source: \"unresolved\" };\n }\n\n const topic = normalizedScopeId\n ? await tryGetTopicById(normalizedScopeId)\n : null;\n if (topic) {\n const mapped = readTopicMappedProjectId(topic);\n if (mapped) {\n return {\n inputScopeId: scopeId,\n topicId: String(topic._id),\n topicName: String(topic.name || \"\"),\n legacyScopeId: mapped,\n source: \"topic_metadata\",\n };\n }\n\n return {\n inputScopeId: scopeId,\n topicId: String(topic._id),\n topicName: String(topic.name || \"\"),\n source: \"direct_topic\",\n };\n }\n\n const mappedTopic = normalizedScopeId\n ? await findTopicByMappedProjectId(normalizedScopeId)\n : null;\n if (mappedTopic) {\n return {\n inputScopeId: scopeId,\n topicId: String(mappedTopic._id),\n topicName: String(mappedTopic.name || \"\"),\n legacyScopeId: normalizedScopeId,\n source: \"legacy_project_alias\",\n };\n }\n\n const node = normalizedScopeId ? await tryGetNodeById(normalizedScopeId) : null;\n if (node) {\n const nodeTopicId = node.topicId;\n if (isNonEmptyString(nodeTopicId)) {\n const nodeTopic = await tryGetTopicById(nodeTopicId);\n const mapped = nodeTopic\n ? readTopicMappedProjectId(nodeTopic)\n : undefined;\n return {\n inputScopeId: scopeId,\n topicId: nodeTopicId,\n topicName: nodeTopic ? String(nodeTopic.name || \"\") : undefined,\n legacyScopeId: mapped,\n source: \"node_topic\",\n };\n }\n const nodeProjectId = node.projectId;\n if (isNonEmptyString(nodeProjectId)) {\n const mappedTopic = await findTopicByMappedProjectId(nodeProjectId);\n return {\n inputScopeId: scopeId,\n topicId: mappedTopic ? String(mappedTopic._id) : undefined,\n topicName: mappedTopic ? String(mappedTopic.name || \"\") : undefined,\n legacyScopeId: nodeProjectId,\n source: \"node_project\",\n };\n }\n }\n\n return {\n inputScopeId: scopeId,\n source: \"unresolved\",\n };\n}\n\nexport async function resolveTopicScopeId(\n scopeId: string | undefined,\n toolName: string\n): Promise<string> {\n let resolved: string | undefined;\n const normalizedScopeId = decodePublicTopicId(scopeId);\n\n if (!isNonEmptyString(scopeId)) {\n if (isNonEmptyString(defaultTopicId)) {\n resolved = defaultTopicId;\n } else {\n // Fall back to .lucern.json ambient context\n const lucernContext = readLucernJson();\n const ambientTopicId = decodePublicTopicId(lucernContext?.topicId);\n if (isNonEmptyString(ambientTopicId)) {\n resolved = ambientTopicId;\n }\n }\n if (!resolved) {\n throw new Error(\n `[${toolName}] Missing topic scope. Provide topicId.`\n );\n }\n }\n\n if (!resolved) {\n const topic = normalizedScopeId\n ? await tryGetTopicById(normalizedScopeId)\n : null;\n if (topic) {\n resolved = String(topic._id);\n }\n }\n\n if (!resolved) {\n const mappedTopic = normalizedScopeId\n ? await findTopicByMappedProjectId(normalizedScopeId)\n : null;\n if (mappedTopic) {\n resolved = String(mappedTopic._id);\n }\n }\n\n if (!resolved) {\n const node = normalizedScopeId\n ? await tryGetNodeById(normalizedScopeId)\n : null;\n if (node && isNonEmptyString(node.topicId)) {\n resolved = node.topicId;\n }\n }\n\n if (!resolved) {\n throw new Error(\n `[${toolName}] Scope \"${scopeId}\" is not a topic and has no mapped topic.`\n );\n }\n\n // Block 11D: Enforce topic-level access control.\n // Checks the session-level permitted topics set by setSessionTopicScope() at boot.\n // Agent sessions and admin sessions pass through (allowedTopics = null).\n // User sessions are restricted to their assigned topics via pack assignments.\n checkTopicScope(resolved, toolName);\n\n return resolved;\n}\n\nexport async function setDefaultScopeContext(\n scopeId: string\n): Promise<ScopeResolution> {\n const resolved = await resolveTopicScopeContext(scopeId);\n if (isNonEmptyString(resolved.topicId)) {\n defaultTopicId = decodePublicTopicId(resolved.topicId) || null;\n }\n return resolved;\n}\n\nexport function getDefaultScopeContext(): { topicId: string | null } {\n if (defaultTopicId) {\n return { topicId: defaultTopicId };\n }\n // Fall back to .lucern.json ambient context\n const lucernContext = readLucernJson();\n const ambientTopicId = decodePublicTopicId(lucernContext?.topicId);\n if (ambientTopicId) {\n return { topicId: ambientTopicId };\n }\n return { topicId: null };\n}\n","import type { HandlerModule } from \"./types.js\";\nimport { readTopicIdArg } from \"../scope.js\";\nimport {\n asJsonObject,\n asRecord,\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n readStringArray,\n readTimeRange,\n} from \"./sdk.js\";\n\nconst AMBIGUOUS_SCALAR_SUGGESTION =\n \"Use opinion tuple (b, d, u, a) or an @lucern/sdk opinionFromBaseRate/opinionFromDogmatic/opinionFromProjected helper.\";\n\nfunction readOpinionTuple(args: Record<string, unknown>) {\n const belief = readNumber(args.belief);\n const disbelief = readNumber(args.disbelief);\n const uncertainty = readNumber(args.uncertainty);\n const baseRate = readNumber(args.baseRate);\n const tupleValues = [belief, disbelief, uncertainty, baseRate];\n const providedCount = tupleValues.filter(\n (value) => value !== undefined\n ).length;\n\n if (providedCount === 0 && readNumber(args.confidence ?? args.newConfidence) !== undefined) {\n throw new Error(\n JSON.stringify({\n code: \"AMBIGUOUS_SCALAR\",\n message:\n \"Scalar confidence input is ambiguous without an explicit subjective-logic interpretation.\",\n suggestion: AMBIGUOUS_SCALAR_SUGGESTION,\n })\n );\n }\n\n if (providedCount !== tupleValues.length) {\n throw new Error(\n \"belief, disbelief, uncertainty, and baseRate must all be provided together.\"\n );\n }\n\n return {\n b: belief ?? 0,\n d: disbelief ?? 0,\n u: uncertainty ?? 0,\n a: baseRate ?? 0.5,\n };\n}\n\nexport const beliefHandlers: HandlerModule = {\n async create_belief(args, ctx) {\n const baseRate = readNumber(args.baseRate);\n if (baseRate === undefined) {\n throw new Error(\"baseRate is required for create_belief.\");\n }\n if (baseRate < 0 || baseRate > 1) {\n throw new Error(\"baseRate must be within [0, 1].\");\n }\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.create({\n topicId: readString(readTopicIdArg(args)) ?? \"\",\n text:\n readString(args.text ?? args.canonicalText ?? args.formulation) ?? \"\",\n baseRate,\n rationale: readString(args.rationale),\n worktreeId: readString(args.worktreeId),\n pillar: readString(args.pillar),\n sourceBeliefIds: readStringArray(args.sourceBeliefIds),\n sourceType: readString(args.sourceType),\n beliefType: readString(args.beliefType),\n reversibility: readString(args.reversibility),\n predictionMeta: asJsonObject(args.predictionMeta) as any,\n metadata: asJsonObject(args.metadata) as any,\n })\n );\n },\n\n async get_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.get(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async list_beliefs(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.list({\n topicId: readString(readTopicIdArg(args)),\n status: readString(args.status),\n worktreeId: readString(args.worktreeId),\n minConfidence: readNumber(args.minConfidence),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async refine_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.refine(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n text:\n readString(args.canonicalText ?? args.text ?? args.formulation) ??\n \"\",\n rationale: readString(args.rationale),\n }\n )\n );\n },\n\n async modulate_confidence(args, ctx) {\n const opinion = readOpinionTuple(args);\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.modulateConfidence(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n opinion,\n trigger: readString(args.trigger) as any,\n rationale: readString(args.rationale) ?? \"\",\n maxInlinePropagationTargets: readNumber(\n args.maxInlinePropagationTargets\n ),\n }\n )\n );\n },\n\n async fork_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.fork(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n text:\n readString(args.text ?? args.newFormulation ?? args.formulation) ??\n \"\",\n forkReason: readString(args.forkReason) as any,\n rationale: readString(args.rationale),\n }\n )\n );\n },\n\n async archive_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.archive(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n reason: readString(args.reason ?? args.rationale),\n }\n )\n );\n },\n\n async query_lineage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.lineage(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async get_confidence_history(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.confidenceHistory(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async create_epistemic_contract(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.createContract(\n readString(\n args.id ?? args.nodeId ?? args.beliefId ?? args.beliefNodeId\n ) ?? \"\",\n {\n title: readString(args.title) ?? \"\",\n description: readString(args.description),\n conditionType: readString(args.conditionType) as any,\n direction: readString(args.direction) as any,\n condition: asRecord(args.condition) as any,\n deadline: readNumber(args.deadline),\n compositeOf: readStringArray(args.compositeOf),\n compositeOperator: readString(args.compositeOperator) as any,\n modulation: asRecord(args.modulation) as any,\n evaluationSchedule: readString(\n args.evaluationSchedule ?? args.schedule\n ) as any,\n periodicIntervalMs: readNumber(args.periodicIntervalMs),\n }\n )\n );\n },\n\n async bisect_confidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.bisect(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\",\n {\n expectedDirection: readString(args.expectedDirection) as any,\n timeRange: readTimeRange(args.timeRange),\n }\n )\n );\n },\n};\n","import { api } from \"../kernelApi.js\";\nimport { adminMutation, adminQuery } from \"../convex-client.js\";\n\ntype AnyRecord = Record<string, unknown>;\n\nfunction slugify(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n .slice(0, 40);\n}\n\nasync function resolveBeliefs(\n nodeIds: string[]\n): Promise<Array<{ nodeId: string; text: string; confidence: number | null }>> {\n const results: Array<{\n nodeId: string;\n text: string;\n confidence: number | null;\n }> = [];\n\n for (const nodeId of nodeIds) {\n try {\n const node = (await adminQuery(api.epistemicNodes.get, {\n nodeId: nodeId as any,\n })) as AnyRecord | null;\n if (!node) {\n continue;\n }\n\n results.push({\n nodeId,\n text: String(node.canonicalText || \"\").slice(0, 200),\n confidence:\n typeof node.confidence === \"number\" ? node.confidence : null,\n });\n } catch {\n // Ignore missing graph nodes when assembling the build packet.\n }\n }\n\n return results;\n}\n\nasync function resolveQuestions(\n nodeIds: string[]\n): Promise<\n Array<{ nodeId: string; text: string; status: string; priority: string }>\n> {\n const results: Array<{\n nodeId: string;\n text: string;\n status: string;\n priority: string;\n }> = [];\n\n for (const nodeId of nodeIds) {\n try {\n const node = (await adminQuery(api.epistemicNodes.get, {\n nodeId: nodeId as any,\n })) as AnyRecord | null;\n if (!node) {\n continue;\n }\n\n const metadata = (node.metadata || {}) as AnyRecord;\n results.push({\n nodeId,\n text: String(node.canonicalText || \"\").slice(0, 200),\n status: String(metadata.questionStatus || node.status || \"open\"),\n priority: String(metadata.priority || \"medium\"),\n });\n } catch {\n // Ignore missing graph nodes when assembling the build packet.\n }\n }\n\n return results;\n}\n\nexport async function beginBuildSession(\n args: Record<string, unknown>\n): Promise<Record<string, unknown>> {\n const worktreeId =\n typeof args.worktreeId === \"string\" ? args.worktreeId : undefined;\n if (!worktreeId) {\n throw new Error(\"[begin_build_session] worktreeId is required\");\n }\n\n const branch =\n typeof args.branch === \"string\" && args.branch.trim().length > 0\n ? args.branch.trim()\n : undefined;\n const branchBase =\n typeof args.branchBase === \"string\" && args.branchBase.trim().length > 0\n ? args.branchBase.trim()\n : \"staging\";\n const prBase =\n typeof args.prBase === \"string\" && args.prBase.trim().length > 0\n ? args.prBase.trim()\n : \"staging\";\n const sessionMode =\n typeof args.sessionMode === \"string\" && args.sessionMode.trim().length > 0\n ? args.sessionMode.trim()\n : \"async\";\n const activateIfPlanning = args.activateIfPlanning !== false;\n\n const worktree = (await adminQuery(api.worktrees.get, {\n worktreeId: worktreeId as any,\n })) as AnyRecord | null;\n if (!worktree) {\n throw new Error(`Worktree ${worktreeId} not found`);\n }\n\n const worktreeName = String(worktree.name || \"Untitled\");\n const topicId = String(worktree.topicId || \"\");\n const track = String(worktree.track || \"untracked\");\n const trackPosition = (worktree.trackPosition as number) ?? 0;\n const executionBand = (worktree.executionBand as number) ?? 0;\n const gate = String(worktree.gate || \"\");\n const hypothesis = String(worktree.hypothesis || worktree.beliefFocus || \"\");\n let status = String(worktree.status || \"planning\");\n const dependsOn = (worktree.dependsOn as string[]) || [];\n const blocks = (worktree.blocks as string[]) || [];\n const targetBeliefIds = (worktree.targetBeliefIds as string[]) || [];\n const targetQuestionIds = (worktree.targetQuestionIds as string[]) || [];\n\n if (activateIfPlanning && status === \"planning\") {\n try {\n await adminMutation(api.worktrees.activate, {\n worktreeId: worktreeId as any,\n });\n status = \"active\";\n } catch {\n // Non-fatal: keep the graph status unchanged if activation fails.\n }\n }\n\n let topicName = \"Unknown\";\n try {\n const topic = (await adminQuery(api.topics.get, {\n id: topicId as any,\n })) as AnyRecord | null;\n if (topic) {\n topicName = String(topic.name || \"Unknown\");\n }\n } catch {\n // Non-critical metadata lookup.\n }\n\n const allBeliefs = await resolveBeliefs(targetBeliefIds);\n const topBeliefs = allBeliefs\n .slice()\n .sort((left, right) => (right.confidence ?? -1) - (left.confidence ?? -1))\n .slice(0, 8);\n\n const allQuestions = await resolveQuestions(targetQuestionIds);\n const openQuestions: Array<{\n nodeId: string;\n text: string;\n priority: string;\n }> = [];\n const resolvedDecisions: Array<{ question: string; decision: string }> = [];\n\n for (const question of allQuestions) {\n const questionStatus = question.status.toLowerCase();\n if (questionStatus === \"answered\" || questionStatus === \"resolved\") {\n let decision = \"(decision recorded — call get_answer for details)\";\n try {\n const answer = (await adminQuery(\n api.epistemicAnswers.getLatestForQuestion,\n {\n questionNodeId: question.nodeId as any,\n }\n )) as AnyRecord | null;\n if (answer) {\n decision = String(\n answer.answerText || answer.canonicalText || decision\n ).slice(0, 200);\n }\n } catch {\n try {\n const node = (await adminQuery(api.epistemicNodes.get, {\n nodeId: question.nodeId as any,\n })) as AnyRecord | null;\n if (node?._id) {\n const answer = (await adminQuery(\n api.epistemicAnswers.getLatestForQuestion,\n {\n questionNodeId: node._id as any,\n }\n )) as AnyRecord | null;\n if (answer) {\n decision = String(\n answer.answerText || answer.canonicalText || decision\n ).slice(0, 200);\n }\n }\n } catch {\n // Keep the default summary when answer lookup fails.\n }\n }\n\n resolvedDecisions.push({\n question: question.text.slice(0, 150),\n decision,\n });\n continue;\n }\n\n openQuestions.push({\n nodeId: question.nodeId,\n text: question.text,\n priority: question.priority,\n });\n }\n\n try {\n const topicQuestions = await adminQuery(api.epistemicQuestions.getByTopic, {\n topicId: topicId as any,\n userId: \"system\",\n limit: 20,\n }).catch(() => []);\n\n for (const question of Array.isArray(topicQuestions) ? topicQuestions : []) {\n const metadata = (question.metadata || {}) as AnyRecord;\n const questionStatus = String(\n metadata.questionStatus || question.status || \"open\"\n ).toLowerCase();\n if (\n (questionStatus === \"open\" || questionStatus === \"in_progress\") &&\n !targetQuestionIds.includes(String(question._id))\n ) {\n openQuestions.push({\n nodeId: String(question._id),\n text: String(question.canonicalText || \"\").slice(0, 200),\n priority: String(metadata.priority || \"medium\"),\n });\n }\n }\n } catch {\n // Non-critical metadata lookup.\n }\n\n const dependencies: Array<{\n worktreeId: string;\n title: string;\n status: string;\n }> = [];\n for (const dependencyId of dependsOn.slice(0, 5)) {\n try {\n const dependency = (await adminQuery(api.worktrees.get, {\n worktreeId: dependencyId as any,\n })) as AnyRecord | null;\n dependencies.push({\n worktreeId: dependencyId,\n title: String(dependency?.name || \"Unknown\"),\n status: String(dependency?.status || \"unknown\"),\n });\n } catch {\n dependencies.push({\n worktreeId: dependencyId,\n title: \"Unknown\",\n status: \"unknown\",\n });\n }\n }\n\n const unblocks: Array<{ worktreeId: string; title: string }> = [];\n for (const blockedId of blocks.slice(0, 5)) {\n try {\n const blocked = (await adminQuery(api.worktrees.get, {\n worktreeId: blockedId as any,\n })) as AnyRecord | null;\n unblocks.push({\n worktreeId: blockedId,\n title: String(blocked?.name || \"Unknown\"),\n });\n } catch {\n unblocks.push({\n worktreeId: blockedId,\n title: \"Unknown\",\n });\n }\n }\n\n const effectiveBranch = branch || `codex/${slugify(worktreeName)}`;\n const incompleteDependencies = dependencies.filter(\n (dependency) =>\n dependency.status !== \"completed\" && dependency.status !== \"merged\"\n );\n const mergeOrderNotes =\n incompleteDependencies.length > 0\n ? `Blocked by: ${incompleteDependencies.map((dependency) => dependency.title).join(\", \")}`\n : \"none\";\n\n const requiredDocs = [\n \"docs/api/EK-13-api-sdk-architecture.md\",\n \"docs/api/EK-13.1.5-repo-architecture-blueprint.md\",\n \"docs/api/EK-13.1-contract-authority.md\",\n \"docs/development/handoff-contract.md\",\n ];\n\n const focus = hypothesis\n ? `${hypothesis.split(\".\")[0]}.`\n : `Complete ${worktreeName}`;\n\n const exitCriteria = gate ? [`Gate: ${gate}`] : [];\n exitCriteria.push(\n \"All namespace surfaces end-to-end: contract → domain → HTTP → SDK → MCP → test\",\n \"All code lands in target-state paths under lucern/\",\n \"PR targets staging, not main\"\n );\n\n const keyFiles = [\n \"app/api/platform/v1/_lib/gateway.ts\",\n \"modules/access-control/src/principalContext.ts\",\n \"lucern/packages/sdk/src/coreClient.ts\",\n \"lucern/packages/sdk/src/identityClient.ts\",\n \"lucern/contracts/src/sdk-methods.contract.ts\",\n \"app/api/platform/v1/identity/\",\n ];\n\n const pillarKeywords = [\n \"Pillar 1\",\n \"Pillar 2\",\n \"Pillar 3\",\n \"Pillar 4\",\n \"Pillar 5\",\n \"Pillar 6\",\n \"Pillar 7\",\n \"Pillar 8\",\n \"8 innovation pillars\",\n ];\n const pillarBeliefs: Array<{\n pillar: string;\n text: string;\n nodeId: string;\n }> = [];\n for (const belief of allBeliefs) {\n for (const keyword of pillarKeywords) {\n if (!belief.text.includes(keyword)) {\n continue;\n }\n const pillarMatch = belief.text.match(/Pillar \\d+ \\([^)]+\\)/);\n pillarBeliefs.push({\n pillar: pillarMatch ? pillarMatch[0] : keyword,\n text: belief.text.slice(0, 250),\n nodeId: belief.nodeId,\n });\n break;\n }\n }\n\n const visionDocs = [\n {\n path: \"docs/product/core-value-propositions.md\",\n description:\n \"8 innovation pillars through developer, marketing, and investor lenses\",\n },\n {\n path: \"docs/product/five-domains.md\",\n description:\n \"5 product domains: MC, Tenant, Developer, Reasoning Control, Reasoning\",\n },\n {\n path: \"docs/product/innovation-pillars.md\",\n description: \"The 8 pillars that define what makes Lucern unique\",\n },\n {\n path: \"docs/product/vision-to-roadmap-bridge.md\",\n description:\n \"Where each pillar is today vs. where it goes — the north star trajectory\",\n },\n ];\n\n return {\n topicId,\n topicName,\n worktreeId,\n worktreeName,\n branch: effectiveBranch,\n branchBase,\n prBase,\n track,\n trackPosition,\n executionBand,\n gate,\n hypothesis,\n focus,\n status,\n sessionMode,\n targetBeliefIds,\n targetQuestionIds,\n topBeliefs,\n openQuestions,\n resolvedDecisions,\n exitCriteria,\n requiredDocs,\n keyFiles,\n pillarBeliefs,\n visionDocs,\n dependencies,\n unblocks,\n mergeOrderNotes,\n };\n}\n","/**\n * Bootstrap Handlers — generate_session_handoff, begin_build_session\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport { beginBuildSession } from \"./bootstrap-session.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const bootstrapHandlers: HandlerModule = {\n async generate_session_handoff(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).bootstrap.generateSessionHandoff(args)\n );\n },\n\n async begin_build_session(args, ctx) {\n void ctx;\n return beginBuildSession(args);\n },\n};\n","/**\n * Coding Intelligence Handlers\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const codingHandlers: HandlerModule = {\n async get_code_context(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coding.getCodeContext(args));\n },\n\n async get_change_history(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coding.getChangeHistory(args)\n );\n },\n\n async record_attempt(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coding.recordAttempt(args));\n },\n\n async get_failure_log(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coding.getFailureLog(args));\n },\n};\n","import type { JsonObject } from \"@lucern/sdk/types\";\nimport { formatSdkResult, getSdkClient, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const contractHandlers: HandlerModule = {\n async create_epistemic_contract(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).contracts.create(args as JsonObject)\n );\n },\n\n async evaluate_contract(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).contracts.evaluate({\n contractId: readString(args.contractId),\n trigger: args.trigger as any,\n topicId: readString(args.topicId),\n })\n );\n },\n\n async get_contract_status(args, ctx) {\n if (!args.beliefNodeId && !args.contractId) {\n throw new Error(\n \"get_contract_status requires either beliefNodeId or contractId.\"\n );\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).contracts.getStatus({\n beliefNodeId: readString(args.beliefNodeId),\n contractId: readString(args.contractId),\n status: args.status as any,\n })\n );\n },\n};\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nfunction normalizeBeliefId(value: string): string {\n try {\n const decoded = decodePrefixedId(value);\n return encodePrefixedId(\"bel\", decoded.value);\n } catch {\n return encodePrefixedId(\"bel\", value);\n }\n}\n\nexport const contradictionHandlers: HandlerModule = {\n async flag_contradiction(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"flag_contradiction\"\n );\n\n return formatSdkResult(\n await getSdkClient(ctx).contradictions.flag({\n beliefA: readString(args.beliefA) ?? \"\",\n beliefB: readString(args.beliefB) ?? \"\",\n description: readString(args.description) ?? \"\",\n topicId,\n severity: readString(args.severity),\n defeatType: readString(args.defeatType),\n })\n );\n },\n\n async find_contradictions(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args) ?? readString(args.nodeId),\n \"find_contradictions\"\n );\n const beliefId = readString(args.nodeId);\n const payload = formatSdkResult(\n await getSdkClient(ctx).contradictions.list({\n topicId,\n status: readString(args.status),\n limit: readNumber(args.limit),\n })\n );\n\n if (!beliefId) {\n return payload;\n }\n\n const normalizedBeliefId = normalizeBeliefId(beliefId);\n return {\n ...payload,\n contradictions: (Array.isArray(payload.contradictions)\n ? payload.contradictions\n : []\n ).filter(\n (entry) =>\n entry.beliefA === normalizedBeliefId ||\n entry.beliefB === normalizedBeliefId\n ),\n };\n },\n\n async list_contradictions(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"list_contradictions\"\n );\n\n return formatSdkResult(\n await getSdkClient(ctx).contradictions.list({\n topicId,\n status: readString(args.status),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async get_contradiction(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).contradictions.get(\n readString(args.id ?? args.contradictionId) ?? \"\"\n )\n );\n },\n};\n","/**\n * Coordination Handlers — MCP tool handlers for inter-agent session coordination.\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const coordinationHandlers: HandlerModule = {\n async register_session(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.registerSession(args)\n );\n },\n\n async heartbeat_session(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.heartbeatSession(args)\n );\n },\n\n async end_session(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coordination.endSession(args));\n },\n\n async list_active_sessions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.listActiveSessions(args)\n );\n },\n\n async send_agent_message(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.sendAgentMessage(args)\n );\n },\n\n async broadcast_message(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).coordination.broadcastMessage(args)\n );\n },\n\n async get_agent_inbox(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coordination.getInbox(args));\n },\n\n async claim_files(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).coordination.claimFiles(args));\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const edgeHandlers: HandlerModule = {\n async create_edge(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).edges.create({\n sourceId: readString(args.sourceId) ?? \"\",\n targetId: readString(args.targetId) ?? \"\",\n edgeType: readString(args.edgeType) ?? \"\",\n topicId: readString(args.topicId ?? args.projectId),\n confidence: readNumber(args.confidence),\n weight: readNumber(args.weight),\n context: readString(args.context) ?? readString(args.reasoning),\n })\n );\n },\n\n async list_edges(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).edges.list({\n sourceId: readString(args.sourceId) ?? \"\",\n edgeType: readString(args.edgeType),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async traverse_graph(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).edges.traverse({\n startNode: readString(args.startNode) ?? \"\",\n direction: readString(args.direction),\n maxDepth: readNumber(args.maxDepth),\n topicId: readString(args.topicId ?? args.projectId),\n })\n );\n },\n};\n","/**\n * Graph Handlers — traverse_graph, search_beliefs, find_contradictions,\n * bisect_confidence, trace_entity_impact\n */\n\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport { beliefHandlers } from \"./beliefs.js\";\nimport { contradictionHandlers } from \"./contradictions.js\";\nimport { edgeHandlers } from \"./edges.js\";\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const graphHandlers: HandlerModule = {\n async traverse_graph(args, ctx) {\n return edgeHandlers.traverse_graph(args, ctx);\n },\n\n async search_beliefs(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"search_beliefs\"\n );\n\n return formatSdkResult(\n await getSdkClient(ctx).beliefs.search({\n query: typeof args.query === \"string\" ? args.query : \"\",\n topicId,\n status: typeof args.status === \"string\" ? args.status : undefined,\n minConfidence:\n typeof args.minConfidence === \"number\" ? args.minConfidence : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n })\n );\n },\n\n async find_contradictions(args, ctx) {\n return contradictionHandlers.find_contradictions(args, ctx);\n },\n\n async bisect_confidence(args, ctx) {\n return beliefHandlers.bisect_confidence(args, ctx);\n },\n\n async trace_entity_impact(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"trace_entity_impact\"\n ).catch(() => undefined);\n\n return formatSdkResult(\n await getSdkClient(ctx).graph.traceEntityImpact({\n nodeId: typeof args.nodeId === \"string\" ? args.nodeId : \"\",\n topicId,\n })\n );\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readBoolean,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const topicHandlers: HandlerModule = {\n async create_topic(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.create({\n name: readString(args.name) ?? \"\",\n description: readString(args.description),\n type: readString(args.type),\n parentTopicId: readString(args.parentTopicId),\n ontologyId: readString(args.ontologyId),\n tenantId: readString(args.tenantId),\n workspaceId: readString(args.workspaceId),\n visibility: readString(args.visibility) as any,\n createdBy: readString(args.createdBy),\n })\n );\n },\n\n async list_topics(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.list({\n ontologyId: readString(args.ontologyId),\n parentTopicId: readString(args.parentTopicId),\n status: readString(args.status),\n type: readString(args.type),\n })\n );\n },\n\n async get_topic(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.get(\n readString(args.topicId ?? args.id) ?? \"\"\n )\n );\n },\n\n async update_topic(args, ctx) {\n const topicId = readString(args.topicId ?? args.id) ?? \"\";\n if (!topicId) {\n throw new Error(\"topicId is required.\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).topics.update(topicId, {\n name: readString(args.name),\n description: readString(args.description),\n type: readString(args.type),\n ontologyId: readString(args.ontologyId),\n clearOntologyId: readBoolean(args.clearOntologyId),\n status: readString(args.status) as\n | \"active\"\n | \"archived\"\n | \"watching\"\n | undefined,\n visibility: readString(args.visibility) as\n | \"private\"\n | \"team\"\n | \"firm\"\n | \"external\"\n | \"public\"\n | undefined,\n })\n );\n },\n\n async get_topic_tree(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.getTree({\n rootId: readString(args.rootId ?? args.topicId ?? args.id) ?? \"\",\n maxDepth: readNumber(args.maxDepth),\n })\n );\n },\n\n async get_topic_coverage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).topics.coverage(\n readString(args.topicId ?? args.id) ?? \"\",\n {\n includeDescendants: readBoolean(args.includeDescendants),\n maxDepth: readNumber(args.maxDepth),\n }\n )\n );\n },\n};\n","import { graphHandlers as modernGraphHandlers } from \"./graph.js\";\nimport { topicHandlers } from \"./topics.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const coverageHandlers: HandlerModule = {\n async get_topic_coverage(args, ctx) {\n return topicHandlers.get_topic_coverage(\n {\n topicId: args.topicId ?? args.id,\n includeDescendants: args.includeDescendants,\n maxDepth: args.maxDepth,\n },\n ctx\n );\n },\n\n async get_graph_gaps(args, ctx) {\n return modernGraphHandlers.get_graph_gaps(\n {\n topicId: args.topicId ?? args.projectId,\n minConfidence: args.minConfidence,\n },\n ctx\n );\n },\n};\n","/**\n * Discovery Handler — LLM-friendly topic tree navigation for cross-topic search.\n */\n\nimport { formatSdkResult, getSdkClient, readBoolean, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const discoveryHandlers: HandlerModule = {\n async discover(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.discover({\n query: readString(args.query) ?? \"\",\n topK: readNumber(args.topK),\n includeNeighborhood: readBoolean(args.includeNeighborhood),\n })\n );\n },\n};\n","import { adminMutation } from \"../convex-client.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nfunction hasVerificationPayload(args: Record<string, unknown>): boolean {\n return (\n args.testOutput !== undefined ||\n args.tscOutput !== undefined ||\n args.lintOutput !== undefined ||\n args.sentryData !== undefined\n );\n}\n\nexport const engineeringVerificationHandlers: HandlerModule = {\n async evaluate_engineering_contract(args, ctx) {\n if (!hasVerificationPayload(args)) {\n throw new Error(\n \"evaluate_engineering_contract requires at least one verification payload.\"\n );\n }\n\n const result = await adminMutation(\n \"epistemicContracts:evaluateEngineeringContracts\" as any,\n {\n beliefNodeId: args.beliefNodeId,\n trigger: args.trigger,\n testOutput: args.testOutput,\n tscOutput: args.tscOutput,\n lintOutput: args.lintOutput,\n sentryData: args.sentryData,\n authenticatedUserId: ctx.userId,\n }\n );\n\n return result as Record<string, unknown>;\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport { readTopicIdArg } from \"../scope.js\";\nimport {\n asJsonObject,\n asRecord,\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const evidenceHandlers: HandlerModule = {\n async create_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.create({\n topicId: readString(readTopicIdArg(args)) ?? \"\",\n text: readString(args.text) ?? \"\",\n source: readString(args.source),\n targetId: readString(args.targetId),\n weight: readNumber(args.weight),\n metadata: asJsonObject(args.metadata) as any,\n title: readString(args.title),\n content: readString(args.content),\n contentType: readString(args.contentType),\n kind: readString(args.kind),\n })\n );\n },\n\n async get_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.get(\n readString(args.id ?? args.evidenceId) ?? \"\"\n )\n );\n },\n\n async list_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.list({\n topicId: readString(readTopicIdArg(args)),\n targetId: readString(args.targetId),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async link_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.link({\n evidenceId: readString(args.evidenceId) ?? \"\",\n targetId:\n readString(args.targetId ?? args.beliefId ?? args.questionId) ?? \"\",\n targetType: readString(args.targetType),\n weight: readNumber(args.weight ?? args.relevance),\n rationale: readString(args.rationale),\n })\n );\n },\n\n async search_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.search({\n q: readString(args.q ?? args.query) ?? \"\",\n topicId: readString(readTopicIdArg(args)),\n targetId: readString(args.targetId),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async add_evidence(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.add({\n topicId: readString(readTopicIdArg(args)) ?? \"\",\n text: readString(args.text ?? args.canonicalText) ?? \"\",\n source: readString(args.source ?? args.sourceUrl),\n targetId: readString(args.targetId ?? args.targetNodeId),\n weight: readNumber(args.weight),\n metadata: {\n ...asRecord(args.metadata),\n ...(readString(args.reasoning)\n ? { rationale: readString(args.reasoning) }\n : {}),\n } as any,\n title: readString(args.title),\n content: readString(args.content),\n contentType: readString(args.contentType),\n kind: readString(args.kind),\n })\n );\n },\n\n async link_evidence_to_belief(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).evidence.linkToBelief({\n evidenceId: readString(args.evidenceId) ?? \"\",\n beliefId: readString(args.beliefId) ?? \"\",\n weight: readNumber(args.weight) ?? 1,\n rationale: readString(args.rationale),\n })\n );\n },\n};\n","import { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const identityHandlers: HandlerModule = {\n async identity_whoami(_args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).identity.whoami());\n },\n};\n","import { graphHandlers } from \"./graph.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const intelligenceHandlers: HandlerModule = {\n detect_confirmation_bias: graphHandlers.detect_confirmation_bias,\n get_graph_structure_analysis: graphHandlers.get_graph_structure_analysis,\n get_falsification_questions: graphHandlers.get_falsification_questions,\n};\n","/**\n * Judgment Handlers — record_judgment\n */\n\nimport { readTopicIdArg, ROOT_TOPIC_ID, resolveTopicScopeId } from \"../scope.js\";\nimport { formatSdkResult, getSdkClient, readNumber, readString, readStringArray } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const judgmentHandlers: HandlerModule = {\n async record_judgment(args, ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"record_judgment\"\n );\n\n if (topicId === ROOT_TOPIC_ID) {\n throw new Error(\n \"[record_judgment] Resolved topic is Root — epistemic nodes must belong to a child topic. \" +\n \"Provide a valid topicId for this judgment.\"\n );\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).judgments.record({\n title: readString(args.title) ?? \"\",\n rationale: readString(args.rationale) ?? \"\",\n topicId,\n confidence: readNumber(args.confidence) ?? 0.7,\n beliefIds: readStringArray(args.beliefIds),\n })\n );\n },\n};\n","/**\n * Lens Handlers — create_lens, list_lenses, apply_lens_to_topic, remove_lens_from_topic\n */\n\nimport { validateFilterCriteria } from \"@lucern/contracts/lens-filter.contract\";\nimport { readTopicIdArg } from \"../scope.js\";\nimport { formatSdkResult, getSdkClient, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nfunction readWorkspaceIdArg(args: Record<string, unknown>): string | undefined {\n return readString(args.workspaceId);\n}\n\nexport const lensHandlers: HandlerModule = {\n async create_lens(args, ctx) {\n const filterCriteria =\n args.filterCriteria && typeof args.filterCriteria === \"object\"\n ? (args.filterCriteria as Record<string, unknown>)\n : undefined;\n\n if (filterCriteria !== undefined) {\n const validation = validateFilterCriteria(filterCriteria);\n if (!validation.valid) {\n throw new Error(\n `Invalid filterCriteria: ${validation.errors.join(\"; \")}`\n );\n }\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.createLens({\n name: readString(args.name) ?? \"\",\n topicId: readTopicIdArg(args),\n workspaceId: readWorkspaceIdArg(args),\n description: readString(args.description),\n perspectiveType: readString(args.perspectiveType) as any,\n promptTemplates: Array.isArray(args.promptTemplates)\n ? (args.promptTemplates as any[])\n : undefined,\n workflowTemplates: Array.isArray(args.workflowTemplates)\n ? (args.workflowTemplates as any[])\n : undefined,\n taskTemplates: Array.isArray(args.taskTemplates)\n ? (args.taskTemplates as any[])\n : undefined,\n questionTemplates: Array.isArray(args.questionTemplates)\n ? (args.questionTemplates as any[])\n : undefined,\n filterCriteria,\n })\n );\n },\n\n async list_lenses(args, ctx) {\n try {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.listLenses({\n workspaceId: readWorkspaceIdArg(args),\n topicId: readTopicIdArg(args),\n status: readString(args.status) as any,\n perspectiveType: readString(args.perspectiveType) as any,\n })\n );\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\n \"workspaceId is required unless topicId resolves to a workspace-scoped topic\"\n )\n ) {\n return {\n lenses: [],\n note: \"workspaceId is required unless topicId resolves to a workspace-scoped topic\",\n };\n }\n throw error;\n }\n },\n\n async apply_lens_to_topic(args, ctx) {\n const topicId = readTopicIdArg(args);\n if (!topicId) {\n throw new Error(\"topicId is required\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.applyLensToTopic({\n lensId: readString(args.lensId) ?? \"\",\n topicId,\n metadata:\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : undefined,\n })\n );\n },\n\n async remove_lens_from_topic(args, ctx) {\n const topicId = readTopicIdArg(args);\n if (!topicId) {\n throw new Error(\"topicId is required\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.removeLensFromTopic({\n lensId: readString(args.lensId) ?? \"\",\n topicId,\n })\n );\n },\n};\n","import { formatSdkResult, getSdkClient, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const lineageHandlers: HandlerModule = {\n async query_lineage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).graph.queryLineage(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async get_confidence_history(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).graph.getConfidenceHistory(\n readString(args.id ?? args.nodeId ?? args.beliefId) ?? \"\"\n )\n );\n },\n\n async get_audit_trail(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).graph.getAuditTrail(\n args.nodeId as string,\n (args.limit as number) ?? 50\n )\n );\n },\n};\n","/**\n * Observation Handlers — ingest_observation, get_observation_context\n *\n * Stage-1 implementation is process-local and read-only to graph state.\n * This preserves invariant #14: observations stage candidate updates but do not mutate epistemic nodes.\n */\n\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport type { HandlerModule } from \"./types.js\";\n\ntype ObservationType =\n | \"claim\"\n | \"evidence\"\n | \"question\"\n | \"contradiction\"\n | \"judgment\"\n | \"note\";\n\ntype ObservationRecord = {\n observationId: string;\n topicId: string;\n observationType: ObservationType;\n summary: string;\n source?: string;\n confidence?: number;\n tags: string[];\n metadata?: Record<string, unknown>;\n createdAt: number;\n};\n\nconst observationStore = new Map<string, ObservationRecord[]>();\n\nfunction tokenize(input: string): string[] {\n return input\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .map((token) => token.trim())\n .filter(Boolean);\n}\n\nfunction scoreSemanticMatch(record: ObservationRecord, query: string): number {\n const queryTokens = new Set(tokenize(query));\n if (queryTokens.size === 0) {\n return 0;\n }\n const haystack = [record.summary, record.source || \"\", ...(record.tags || [])]\n .join(\" \")\n .toLowerCase();\n let score = 0;\n for (const token of queryTokens) {\n if (haystack.includes(token)) {\n score += 1;\n }\n }\n return score;\n}\n\nexport const observationHandlers: HandlerModule = {\n async ingest_observation(args, _ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"ingest_observation\"\n );\n const observationType = args.observationType as ObservationType;\n const summary = args.summary as string;\n const source = (args.source as string) || undefined;\n const confidence = (args.confidence as number) || undefined;\n const tags = ((args.tags as string[]) || []).filter(\n (tag) => typeof tag === \"string\" && tag.trim().length > 0\n );\n const metadata = (args.metadata as Record<string, unknown>) || undefined;\n\n const createdAt = Date.now();\n const observationId = (\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : `obs_${createdAt}_${Math.random().toString(36).slice(2)}`\n ) as string;\n\n const record: ObservationRecord = {\n observationId,\n topicId,\n observationType,\n summary,\n source,\n confidence,\n tags,\n metadata,\n createdAt,\n };\n\n const existing = observationStore.get(topicId) || [];\n existing.push(record);\n observationStore.set(topicId, existing.slice(-500));\n\n return {\n observationId,\n topicId,\n observationType,\n createdAt,\n contextResourceUri: `lucern://observations/${topicId}`,\n };\n },\n\n async get_observation_context(args, _ctx) {\n const topicId = await resolveTopicScopeId(\n readTopicIdArg(args),\n \"get_observation_context\"\n );\n const query = (args.query as string) || \"\";\n const limit = Math.max(1, Math.min((args.limit as number) || 25, 200));\n const records = observationStore.get(topicId) || [];\n\n const latest = records.slice(-limit).reverse();\n\n const semanticMatches = query\n ? records\n .map((record) => ({\n record,\n score: scoreSemanticMatch(record, query),\n }))\n .filter((row) => row.score > 0)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit)\n .map((row) => row.record)\n : [];\n\n const byType: Record<string, number> = {};\n for (const row of records) {\n byType[row.observationType] = (byType[row.observationType] || 0) + 1;\n }\n\n return {\n topicId,\n totalObservations: records.length,\n latest,\n semanticMatches,\n byType,\n generatedAt: Date.now(),\n };\n },\n};\n","/**\n * Ontology Handlers — MCP handlers for ontology definition CRUD.\n */\n\nimport { formatSdkResult, getSdkClient, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const ontologyHandlers: HandlerModule = {\n async list_ontologies(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.list({\n tenantId: readString(args.tenantId),\n tier: readString(args.tier),\n status: readString(args.status),\n })\n );\n },\n\n async get_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.get({\n id: readString(args.id ?? args.ontologyId),\n ontologyKey: readString(args.ontologyKey),\n tenantId: readString(args.tenantId),\n tier: readString(args.tier),\n status: readString(args.status),\n } as any)\n );\n },\n\n async apply_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.bind({\n ontologyId: readString(args.ontologyId ?? args.id) ?? \"\",\n topicId: readString(args.topicId) ?? \"\",\n })\n );\n },\n\n async match_entity_type(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.match({\n text: readString(args.text) ?? \"\",\n topicId: readString(args.topicId),\n ontologyId: readString(args.ontologyId),\n minScore: readNumber(args.minScore),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async create_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.create({\n ontologyKey: readString(args.ontologyKey) ?? \"\",\n name: readString(args.name) ?? \"\",\n description: readString(args.description),\n tenantId: readString(args.tenantId),\n tier: readString(args.tier) ?? \"platform\",\n parentOntologyId: readString(args.parentOntologyId),\n })\n );\n },\n\n async update_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.update({\n id: readString(args.id) ?? \"\",\n name: readString(args.name),\n description: readString(args.description),\n status: readString(args.status),\n })\n );\n },\n\n async archive_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.archive({\n id: readString(args.id) ?? \"\",\n })\n );\n },\n\n async create_ontology_version(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.createVersion({\n ontologyId: readString(args.ontologyId) ?? \"\",\n version: readString(args.version) ?? \"\",\n entityTypes: Array.isArray(args.entityTypes) ? (args.entityTypes as any[]) : [],\n edgeTypes: Array.isArray(args.edgeTypes) ? (args.edgeTypes as any[]) : [],\n releaseNotes: readString(args.releaseNotes),\n })\n );\n },\n\n async publish_ontology_version(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.publishVersion({\n id: readString(args.id) ?? \"\",\n })\n );\n },\n\n async deprecate_ontology_version(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.deprecateVersion({\n id: readString(args.id) ?? \"\",\n })\n );\n },\n\n async resolve_effective_ontology(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).ontologies.resolveEffective({\n ontologyId: readString(args.ontologyId) ?? \"\",\n })\n );\n },\n};\n","/**\n * Ontology Matching Handlers — MCP handlers for L0 entity type classification,\n * entity discovery, and change-triggered belief review.\n */\n\nimport { ontologyHandlers } from \"./ontologies.js\";\nimport { formatSdkResult, getSdkClient, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const ontologyMatchingHandlers: HandlerModule = {\n async match_entity_type(args, ctx) {\n return ontologyHandlers.match_entity_type(args, ctx);\n },\n\n async discover_entity_connections(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.discoverEntityConnections({\n nodeId: readString(args.nodeId) ?? \"\",\n topicId: readString(args.topicId),\n minScore: readNumber(args.minScore),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async trigger_belief_review(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.triggerBeliefReview({\n entityNodeId: readString(args.entityNodeId) ?? \"\",\n changeDescription: readString(args.changeDescription),\n maxQuestions: readNumber(args.maxQuestions),\n })\n );\n },\n};\n","/**\n * Policy Handlers — check_permission, filter_by_permission, manage_write_policy\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const policyHandlers: HandlerModule = {\n async check_permission(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).policy.checkPermission(args)\n );\n },\n\n async filter_by_permission(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).policy.filterByPermission(args)\n );\n },\n\n async manage_write_policy(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).policy.manageWritePolicy(args)\n );\n },\n};\n","import { evidenceHandlers } from \"./evidence.js\";\nimport {\n asRecord,\n formatSdkResult,\n getSdkClient,\n readBoolean,\n readNumber,\n readString,\n readStringArray,\n} from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const questionHandlers: HandlerModule = {\n async create_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.create({\n topicId: readString(args.topicId) ?? \"\",\n text: readString(args.text) ?? \"\",\n priority: readString(args.priority),\n linkedBeliefId: readString(args.linkedBeliefId),\n metadata: asRecord(args.metadata) as any,\n })\n );\n },\n\n async get_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.get(\n readString(args.id ?? args.questionId) ?? \"\"\n )\n );\n },\n\n async list_questions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.list({\n topicId: readString(args.topicId),\n status: readString(args.status),\n priority: readString(args.priority),\n worktreeId: readString(args.worktreeId),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n\n async answer_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.answer(\n readString(args.id ?? args.questionId) ?? \"\",\n {\n text: readString(args.text) ?? \"\",\n confidence: readString(args.confidence),\n evidenceIds: readStringArray(args.evidenceIds),\n rationale: readString(args.rationale),\n }\n )\n );\n },\n\n async refine_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.refine(\n readString(args.id ?? args.questionId) ?? \"\",\n readString(args.text) ?? \"\",\n readString(args.rationale ?? args.refinementReason)\n )\n );\n },\n\n async update_question_status(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.updateStatus(\n readString(args.id ?? args.questionId) ?? \"\",\n readString(args.status) ?? \"\",\n readString(args.rationale)\n )\n );\n },\n\n async archive_question(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.archive(\n readString(args.id ?? args.questionId) ?? \"\",\n readString(args.reason ?? args.rationale)\n )\n );\n },\n\n async link_evidence_to_question(args, ctx) {\n const result = await evidenceHandlers.link_evidence(\n {\n evidenceId: readString(args.evidenceId) ?? \"\",\n targetId: readString(args.questionId) ?? \"\",\n weight: readNumber(args.relevance),\n rationale: readString(args.rationale),\n },\n ctx\n );\n\n return {\n ...result,\n questionId: readString(args.questionId) ?? result.targetId,\n relevance: readNumber(args.relevance),\n };\n },\n\n async get_high_priority_questions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.getHighPriority({\n topicId: readString(args.topicId),\n limit: readNumber(args.limit),\n includeAnswered: readBoolean(args.includeAnswered),\n })\n );\n },\n\n async find_missing_questions(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).questions.findMissing({\n topicId: readString(args.topicId) ?? \"\",\n minConfidence: readNumber(args.minConfidence),\n })\n );\n },\n};\n","/**\n * Research Handlers — search_sources, execute_deep_research\n */\n\nimport { formatSdkResult, getSdkClient } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const researchHandlers: HandlerModule = {\n async search_sources(args, ctx) {\n return formatSdkResult(await getSdkClient(ctx).research.searchSources(args));\n },\n\n async execute_deep_research(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).research.executeDeepResearch(args)\n );\n },\n};\n","import { api } from \"../kernelApi.js\";\nimport { adminMutation } from \"../convex-client.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nfunction buildInputData(\n args: Record<string, unknown>\n): Record<string, unknown> | undefined {\n const entries = Object.entries({\n metricData: args.metricData,\n referenceCheckData: args.referenceCheckData,\n marketIndexData: args.marketIndexData,\n temporalData: args.temporalData,\n }).filter(([, value]) => value !== undefined);\n\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport const researchVerificationHandlers: HandlerModule = {\n async evaluate_research_contract(args, ctx) {\n const inputData = buildInputData(args);\n const result = await adminMutation(\n api.epistemicContracts.evaluateContractsForTrigger as any,\n {\n beliefNodeId: args.beliefNodeId,\n trigger:\n typeof args.trigger === \"string\" && args.trigger.length > 0\n ? args.trigger\n : \"event_driven\",\n ...(inputData ? { inputData } : {}),\n authenticatedUserId: ctx.userId,\n }\n );\n\n return result as Record<string, unknown>;\n },\n};\n","import type { ContextPackV1 } from \"@lucern/contracts\";\nimport {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\nimport {\n type CompileContextCommand,\n type CompileContextPorts,\n type CompileContextPortInput,\n} from \"./ports\";\nimport type { PublicCompiledContext } from \"./public-types\";\n\nexport class ContextCompileError extends Error {\n readonly code: string;\n readonly status: number;\n\n constructor(code: string, message: string, status: number) {\n super(message);\n this.name = \"ContextCompileError\";\n this.code = code;\n this.status = status;\n }\n}\n\nexport function isContextCompileError(\n error: unknown\n): error is ContextCompileError {\n return error instanceof ContextCompileError;\n}\n\nfunction cleanString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction cleanNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction cleanBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction cleanStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => cleanString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction prefixId(prefix: string, value: unknown): string {\n const cleaned = cleanString(value);\n if (!cleaned) {\n return `${prefix}_unknown`;\n }\n try {\n const decoded = decodePrefixedId(cleaned);\n if (decoded.prefix === prefix) {\n return cleaned;\n }\n } catch {\n // Fall through and encode raw ids below.\n }\n return encodePrefixedId(prefix, cleaned);\n}\n\nfunction mapSelectedIds(\n value: Record<string, string[]>\n): Record<string, string[]> {\n return {\n invariants: (value.invariants ?? []).map((id) => prefixId(\"bel\", id)),\n activeBeliefs: (value.activeBeliefs ?? []).map((id) => prefixId(\"bel\", id)),\n openQuestions: (value.openQuestions ?? []).map((id) => prefixId(\"que\", id)),\n recentEvidence: (value.recentEvidence ?? []).map((id) => prefixId(\"evi\", id)),\n contradictions: (value.contradictions ?? []).map((id) => prefixId(\"con\", id)),\n };\n}\n\nfunction mapExcludedId(section: string, id: string): string {\n if (section === \"invariants\" || section === \"activeBeliefs\") {\n return prefixId(\"bel\", id);\n }\n if (section === \"openQuestions\") {\n return prefixId(\"que\", id);\n }\n if (section === \"recentEvidence\") {\n return prefixId(\"evi\", id);\n }\n if (section === \"contradictions\") {\n return prefixId(\"con\", id);\n }\n return id;\n}\n\nexport function toPublicCompiledContext(\n pack: ContextPackV1\n): PublicCompiledContext {\n return {\n schemaVersion: pack.schemaVersion,\n topicId: prefixId(\"top\", pack.topicId),\n topicName: pack.topicName,\n scopedTopicIds: (pack.scopedTopicIds ?? []).map((id) => prefixId(\"top\", id)),\n generatedAt: pack.generatedAt,\n ranking: pack.rankingProfile,\n summary: pack.summary as Record<string, unknown>,\n invariants: (pack.invariants ?? []).map((belief) => ({\n beliefId: prefixId(\"bel\", belief.nodeId),\n text: belief.canonicalText,\n confidence: belief.confidence ?? null,\n beliefType: belief.beliefType ?? null,\n score: belief.score,\n ...(belief.justification ? { justification: belief.justification } : {}),\n })),\n activeBeliefs: (pack.activeBeliefs ?? []).map((belief) => ({\n beliefId: prefixId(\"bel\", belief.nodeId),\n text: belief.canonicalText,\n confidence: belief.confidence ?? null,\n beliefType: belief.beliefType ?? null,\n status: belief.status,\n updatedAt: belief.updatedAt ?? null,\n score: belief.score,\n ...(belief.justification ? { justification: belief.justification } : {}),\n })),\n openQuestions: (pack.openQuestions ?? []).map((question) => ({\n questionId: prefixId(\"que\", question.questionId),\n text: question.text,\n status: question.status,\n priority: question.priority,\n updatedAt: question.updatedAt ?? null,\n score: question.score,\n ...(question.justification ? { justification: question.justification } : {}),\n })),\n recentEvidence: (pack.recentEvidence ?? []).map((evidence) => ({\n evidenceId: prefixId(\"evi\", evidence.nodeId),\n text: evidence.canonicalText,\n kind: evidence.kind,\n sourceUrl: evidence.sourceUrl ?? null,\n createdAt: evidence.createdAt ?? null,\n score: evidence.score,\n ...(evidence.justification ? { justification: evidence.justification } : {}),\n })),\n contradictions: (pack.contradictions ?? []).map((contradiction) => ({\n contradictionId: prefixId(\"con\", contradiction.contradictionId),\n severity: contradiction.severity,\n status: contradiction.status,\n description: contradiction.description,\n score: contradiction.score,\n ...(contradiction.justification\n ? { justification: contradiction.justification }\n : {}),\n })),\n ...(pack.relatedEntities\n ? {\n relatedEntities: pack.relatedEntities.map((entity) => ({\n entityId: cleanString(entity.nodeId) ?? \"\",\n entityType: entity.entityType,\n title: entity.title,\n text: cleanString((entity as Record<string, unknown>).canonicalText),\n connectedBeliefCount: entity.connectedBeliefCount,\n connectedEvidenceCount: entity.connectedEvidenceCount,\n score: entity.score,\n ...(entity.metadata ? { metadata: entity.metadata } : {}),\n })),\n }\n : {}),\n contextNarrative: pack.contextNarrative ?? [],\n injectionPolicy: {\n tokenBudget: pack.injectionPolicy.tokenBudget,\n estimatedTokens: pack.injectionPolicy.estimatedTokens,\n sectionBudgets: pack.injectionPolicy.sectionBudgets,\n sectionUsage: pack.injectionPolicy.sectionUsage,\n selected: mapSelectedIds(pack.injectionPolicy.selected),\n ...(pack.injectionPolicy.excludedItems\n ? {\n excludedItems: pack.injectionPolicy.excludedItems.map((item) => ({\n ...item,\n id: mapExcludedId(item.section, item.id),\n })),\n }\n : {}),\n },\n diagnostics: pack.diagnostics as Record<string, unknown>,\n ...(pack.compilationMode ? { compilationMode: pack.compilationMode } : {}),\n ...(pack.failureContext\n ? {\n failureContext: {\n failures: pack.failureContext.failures.map((failure) => ({\n ...failure,\n attemptId: prefixId(\"evi\", failure.attemptId),\n })),\n suppressedIds: pack.failureContext.suppressedIds.map((id) =>\n prefixId(\"evi\", id)\n ),\n },\n }\n : {}),\n ...(pack.deltaReport\n ? {\n deltaReport: {\n changedItems: pack.deltaReport.changedItems.map((item) => ({\n ...item,\n id: mapExcludedId(item.section, item.id),\n })),\n verificationObligations: pack.deltaReport.verificationObligations,\n referencePoint: prefixId(\"wt\", pack.deltaReport.referencePoint),\n },\n }\n : {}),\n ...(pack.appliedWeightOverrides\n ? { appliedWeightOverrides: pack.appliedWeightOverrides }\n : {}),\n };\n}\n\nfunction toCompilePortInput(\n input: CompileContextCommand,\n allowedTopicIds: string[]\n): CompileContextPortInput {\n const topicId = cleanString(input.topicId) ?? cleanString(input.projectId);\n if (!topicId) {\n throw new ContextCompileError(\n \"INVALID_REQUEST\",\n \"topicId is required.\",\n 400\n );\n }\n\n const query = cleanString(input.query);\n const ranking = cleanString(input.ranking) ?? cleanString(input.rankingProfile);\n const worktreeId = cleanString(input.worktreeId);\n const sessionId = cleanString(input.sessionId);\n\n return {\n topicId,\n projectId: topicId,\n ...(query ? { query } : {}),\n ...(cleanNumber(input.budget) !== undefined\n ? { budget: cleanNumber(input.budget) }\n : cleanNumber(input.tokenBudget) !== undefined\n ? { budget: cleanNumber(input.tokenBudget) }\n : {}),\n ...(ranking ? { ranking: ranking as CompileContextPortInput[\"ranking\"] } : {}),\n ...(cleanNumber(input.limit) !== undefined ? { limit: cleanNumber(input.limit) } : {}),\n ...(cleanNumber(input.maxDepth) !== undefined\n ? { maxDepth: cleanNumber(input.maxDepth) }\n : {}),\n ...(cleanBoolean(input.includeEntities) !== undefined\n ? { includeEntities: cleanBoolean(input.includeEntities) }\n : {}),\n ...(cleanString(input.mode) ? { mode: input.mode } : {}),\n ...(cleanBoolean(input.includeFailures) !== undefined\n ? { includeFailures: cleanBoolean(input.includeFailures) }\n : {}),\n ...(worktreeId ? { worktreeId } : {}),\n ...(sessionId ? { sessionId } : {}),\n ...(Array.isArray(input.packWeightOverrides) &&\n input.packWeightOverrides.length > 0\n ? { packWeightOverrides: input.packWeightOverrides }\n : {}),\n allowedTopicIds,\n };\n}\n\nexport async function compileContext(\n ports: CompileContextPorts,\n input: CompileContextCommand\n): Promise<PublicCompiledContext> {\n const topicId = cleanString(input.topicId) ?? cleanString(input.projectId);\n if (!topicId) {\n throw new ContextCompileError(\n \"INVALID_REQUEST\",\n \"topicId is required.\",\n 400\n );\n }\n\n const actorPrincipalId = cleanString(input.actorPrincipalId);\n if (ports.requireAuth !== false && !actorPrincipalId) {\n throw new ContextCompileError(\n \"AUTHENTICATION_REQUIRED\",\n \"Authentication is required to compile context.\",\n 401\n );\n }\n\n let allowedTopicIds = cleanStringArray(input.allowedTopicIds);\n if (ports.policy && actorPrincipalId) {\n const readableRoots = await ports.policy.filterReadableTopicIds({\n topicIds: [topicId],\n actorPrincipalId,\n traceId: input.policyTraceId,\n });\n if (!readableRoots.includes(topicId)) {\n throw new ContextCompileError(\n \"FORBIDDEN\",\n \"Access denied to compile context for this topic.\",\n 403\n );\n }\n const listedTopics = await ports.policy.listReadableTopicIds({\n actorPrincipalId,\n traceId: input.policyTraceId,\n });\n allowedTopicIds = listedTopics.length > 0 ? listedTopics : [topicId];\n }\n\n const compiled = await ports.compiler.compile(\n toCompilePortInput(input, allowedTopicIds.length > 0 ? allowedTopicIds : [topicId])\n );\n return toPublicCompiledContext(compiled);\n}\n","/**\n * Universal scope workflow handlers.\n */\n\nimport { toPublicCompiledContext } from \"@lucern/server-core/domain/context/compile\";\nimport { readTopicIdArg, resolveTopicScopeId } from \"../scope.js\";\nimport { formatSdkResult, getSdkClient, readBoolean, readNumber, readString } from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const scopeContextHandlers: HandlerModule = {\n async compile_context(args, ctx) {\n const requestedScope = readTopicIdArg(args);\n if (!requestedScope) {\n throw new Error(\"[compile_context] topicId is required.\");\n }\n\n const topicId = await resolveTopicScopeId(requestedScope, \"compile_context\");\n if (\n ctx.sessionType === \"user\" &&\n Array.isArray(ctx.allowedTopics) &&\n (!ctx.allowedTopics.includes(topicId) || ctx.allowedTopics.length === 0)\n ) {\n throw new Error(\n `[compile_context] Access denied to compile context for topic ${topicId}.`\n );\n }\n\n const compiled = formatSdkResult(\n await getSdkClient(ctx).context.compile(topicId, {\n query: readString(args.query),\n budget: readNumber(args.budget ?? args.tokenBudget),\n ranking: readString(args.ranking ?? args.rankingProfile),\n limit: readNumber(args.limit),\n maxDepth: readNumber(args.maxDepth),\n includeEntities: readBoolean(args.includeEntities),\n mode: readString(args.mode),\n includeFailures: readBoolean(args.includeFailures),\n worktreeId: readString(args.worktreeId),\n sessionId: readString(args.sessionId),\n packWeightOverrides: Array.isArray(args.packWeightOverrides)\n ? (args.packWeightOverrides as any[])\n : undefined,\n })\n );\n\n return toPublicCompiledContext(compiled as any);\n },\n\n async record_scope_learning(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.recordScopeLearning(args)\n );\n },\n\n async seed_belief_lattice(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.seedBeliefLattice(args)\n );\n },\n\n async get_lattice_coverage(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).context.getLatticeCoverage(args)\n );\n },\n};\n","import {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n readStringArray,\n} from \"./sdk.js\";\nimport type { HandlerModule } from \"./types.js\";\n\nexport const searchHandlers: HandlerModule = {\n async search_resources(args, ctx) {\n const topicId = readString(args.topicId) ?? readString(args.projectId) ?? \"\";\n if (!topicId) {\n throw new Error(\"search_resources requires a topicId parameter\");\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).search(readString(args.q) ?? readString(args.query) ?? \"\", {\n topicId,\n types: readStringArray(args.types) as\n | Array<\"belief\" | \"evidence\" | \"question\">\n | undefined,\n status: readString(args.status),\n minConfidence: readNumber(args.minConfidence),\n limit: readNumber(args.limit),\n cursor: readString(args.cursor),\n })\n );\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n} from \"./sdk.js\";\n\nexport const taskHandlers: HandlerModule = {\n async create_task(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.create({\n topicId: readString(args.topicId ?? args.projectId) ?? \"\",\n title: readString(args.title) ?? \"\",\n description: readString(args.description),\n taskType: readString(args.taskType) as any,\n priority: readString(args.priority) as any,\n linkedBeliefId: readString(args.linkedBeliefId),\n linkedQuestionId: readString(args.linkedQuestionId),\n linkedWorktreeId: readString(args.linkedWorktreeId),\n })\n );\n },\n\n async complete_task(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.complete(\n readString(args.taskId ?? args.id) ?? \"\",\n {\n outputSummary: readString(args.outputSummary) ?? \"\",\n }\n )\n );\n },\n\n async update_task(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.update(\n readString(args.taskId ?? args.id) ?? \"\",\n {\n title: readString(args.title),\n description: readString(args.description),\n priority: readString(args.priority) as any,\n status: readString(args.status) as any,\n linkedBeliefId: readString(args.linkedBeliefId),\n linkedQuestionId: readString(args.linkedQuestionId),\n linkedWorktreeId: readString(args.linkedWorktreeId),\n }\n )\n );\n },\n\n async list_tasks(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).tasks.list({\n topicId: readString(args.topicId ?? args.projectId),\n worktreeId:\n readString(args.worktreeId) ?? readString(args.linkedWorktreeId),\n status: readString(args.status),\n limit: readNumber(args.limit),\n })\n );\n },\n};\n","import { api } from \"../kernelApi.js\";\nimport { adminQuery } from \"../convex-client.js\";\nimport { getDefaultScopeContext, readTopicIdArg } from \"../scope.js\";\nimport type { HandlerModule } from \"./types.js\";\n\ntype ThesisDoc = {\n content?: string;\n memoContent?: string;\n status?: string;\n generatedAt?: number;\n approvedAt?: number;\n};\n\ntype WorktreeDoc = Record<string, unknown> & {\n _id?: string;\n worktreeId?: string;\n name?: string;\n title?: string;\n status?: string;\n phase?: string;\n hypothesis?: string;\n track?: string;\n executionBand?: number;\n topicId?: string;\n branchThesis?: ThesisDoc;\n pillarThesis?: ThesisDoc;\n updatedAt?: number;\n createdAt?: number;\n _creationTime?: number;\n};\n\nfunction stripHtml(value: string): string {\n return value\n .replace(/<[^>]+>/g, \" \")\n .replace(/&nbsp;/g, \" \")\n .replace(/&amp;/g, \"&\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction truncateText(value: string | null, maxChars = 320): string | null {\n if (!value) {\n return null;\n }\n if (value.length <= maxChars) {\n return value;\n }\n return `${value.slice(0, maxChars - 3).trimEnd()}...`;\n}\n\nfunction normalizeThesis(worktree: WorktreeDoc): ThesisDoc | null {\n const thesis =\n worktree.branchThesis && typeof worktree.branchThesis === \"object\"\n ? worktree.branchThesis\n : worktree.pillarThesis && typeof worktree.pillarThesis === \"object\"\n ? worktree.pillarThesis\n : null;\n return thesis ?? null;\n}\n\nfunction hasThesisArtifact(worktree: WorktreeDoc): boolean {\n const thesis = normalizeThesis(worktree);\n return Boolean(\n typeof thesis?.content === \"string\" && thesis.content.trim().length > 0\n );\n}\n\nfunction normalizeWorktreeId(worktree: WorktreeDoc): string | null {\n if (typeof worktree.worktreeId === \"string\") {\n return worktree.worktreeId;\n }\n if (typeof worktree._id === \"string\") {\n return worktree._id;\n }\n return null;\n}\n\nfunction normalizeTopicId(worktree: WorktreeDoc): string | null {\n return typeof worktree.topicId === \"string\" ? worktree.topicId : null;\n}\n\nfunction rankWorktreesByArtifact(left: WorktreeDoc, right: WorktreeDoc): number {\n const leftThesis = normalizeThesis(left);\n const rightThesis = normalizeThesis(right);\n\n const leftRank =\n leftThesis?.status === \"final\" || typeof leftThesis?.approvedAt === \"number\"\n ? 2\n : 1;\n const rightRank =\n rightThesis?.status === \"final\" || typeof rightThesis?.approvedAt === \"number\"\n ? 2\n : 1;\n if (leftRank !== rightRank) {\n return rightRank - leftRank;\n }\n\n const leftTimestamp =\n leftThesis?.approvedAt ??\n leftThesis?.generatedAt ??\n left.updatedAt ??\n left.createdAt ??\n left._creationTime ??\n 0;\n const rightTimestamp =\n rightThesis?.approvedAt ??\n rightThesis?.generatedAt ??\n right.updatedAt ??\n right.createdAt ??\n right._creationTime ??\n 0;\n return rightTimestamp - leftTimestamp;\n}\n\nfunction summarizeQuestionPayload(questions: unknown[]): {\n total: number;\n answered: number;\n open: number;\n} {\n const normalized = Array.isArray(questions) ? questions : [];\n const answered = normalized.filter((question) => {\n const status =\n question && typeof question === \"object\" && \"status\" in question\n ? String((question as Record<string, unknown>).status ?? \"\").toLowerCase()\n : \"\";\n return status === \"answered\" || status === \"final\";\n }).length;\n const open = normalized.filter((question) => {\n const status =\n question && typeof question === \"object\" && \"status\" in question\n ? String((question as Record<string, unknown>).status ?? \"\").toLowerCase()\n : \"\";\n return status === \"open\" || status === \"in_progress\" || status === \"active\";\n }).length;\n\n return {\n total: normalized.length,\n answered,\n open,\n };\n}\n\nasync function buildWorktreeArtifact(args: {\n worktree: WorktreeDoc;\n topicId: string | null;\n topicName: string | null;\n userId: string;\n includeVersions: boolean;\n}) {\n const worktreeId = normalizeWorktreeId(args.worktree);\n if (!worktreeId) {\n return null;\n }\n\n const thesis = normalizeThesis(args.worktree);\n const thesisHtml =\n typeof thesis?.content === \"string\" && thesis.content.trim().length > 0\n ? thesis.content\n : null;\n const memoHtml =\n typeof thesis?.memoContent === \"string\" && thesis.memoContent.trim().length > 0\n ? thesis.memoContent\n : null;\n const thesisText = thesisHtml ? stripHtml(thesisHtml) : null;\n const memoText = memoHtml ? stripHtml(memoHtml) : null;\n\n const [beliefs, qa, recentEvidence, openQuestions, versionHistory] =\n await Promise.all([\n adminQuery(api.epistemicBeliefs.getByWorktree, {\n worktreeId: worktreeId as any,\n }).catch(() => []),\n args.topicId\n ? adminQuery((api as any).worktrees.getWorktreeQAForReport, {\n worktreeId: worktreeId as any,\n topicId: args.topicId as any,\n userId: args.userId,\n }).catch(() => null)\n : Promise.resolve(null),\n args.topicId\n ? adminQuery(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId as any,\n userId: args.userId,\n limit: 8,\n }).catch(() => [])\n : Promise.resolve([]),\n args.topicId\n ? adminQuery(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId as any,\n userId: args.userId,\n limit: 8,\n status: \"open\",\n }).catch(() => [])\n : Promise.resolve([]),\n args.includeVersions\n ? adminQuery((api as any).worktrees.getPillarThesisVersions, {\n worktreeId: worktreeId as any,\n }).catch(() => [])\n : Promise.resolve([]),\n ]);\n\n const supportingBeliefs = (Array.isArray(beliefs) ? beliefs : [])\n .slice()\n .sort((left: any, right: any) => {\n const leftConfidence =\n typeof left?.confidence === \"number\"\n ? left.confidence\n : typeof left?.currentConfidence === \"number\"\n ? left.currentConfidence\n : 0;\n const rightConfidence =\n typeof right?.confidence === \"number\"\n ? right.confidence\n : typeof right?.currentConfidence === \"number\"\n ? right.currentConfidence\n : 0;\n return rightConfidence - leftConfidence;\n })\n .slice(0, 8)\n .map((belief: any) => ({\n nodeId: String(belief?._id ?? belief?.nodeId ?? \"\"),\n canonicalText: String(\n belief?.canonicalText ?? belief?.text ?? belief?.title ?? \"\"\n ),\n confidence:\n typeof belief?.confidence === \"number\"\n ? belief.confidence\n : typeof belief?.currentConfidence === \"number\"\n ? belief.currentConfidence\n : null,\n status: belief?.status ?? null,\n criticality:\n belief?.criticality ?? belief?.metadata?.criticality ?? null,\n }));\n\n const reportQuestions = Array.isArray((qa as any)?.questions)\n ? ((qa as any).questions as any[])\n : Array.isArray(openQuestions)\n ? (openQuestions as any[])\n : [];\n\n return {\n artifactState: thesisHtml || memoHtml ? \"ready\" : \"missing\",\n worktreeId,\n worktreeName:\n typeof args.worktree.name === \"string\"\n ? args.worktree.name\n : typeof args.worktree.title === \"string\"\n ? args.worktree.title\n : \"Untitled worktree\",\n topicId: args.topicId,\n topicName: args.topicName,\n status: args.worktree.status ?? null,\n phase: args.worktree.phase ?? null,\n track: args.worktree.track ?? null,\n executionBand:\n typeof args.worktree.executionBand === \"number\"\n ? args.worktree.executionBand\n : null,\n hypothesis:\n typeof args.worktree.hypothesis === \"string\"\n ? args.worktree.hypothesis\n : null,\n thesisStatus: thesis?.status ?? null,\n generatedAt:\n typeof thesis?.generatedAt === \"number\" ? thesis.generatedAt : null,\n approvedAt:\n typeof thesis?.approvedAt === \"number\" ? thesis.approvedAt : null,\n thesisHtml,\n thesisText,\n memoHtml,\n memoText,\n preferredArtifact:\n memoText && memoText.length > 0\n ? { format: \"text\", text: memoText, source: \"memo\" }\n : thesisText && thesisText.length > 0\n ? { format: \"text\", text: thesisText, source: \"thesis\" }\n : null,\n preview:\n truncateText(memoText) ??\n truncateText(thesisText) ??\n truncateText(\n typeof args.worktree.hypothesis === \"string\"\n ? args.worktree.hypothesis\n : null\n ),\n questionSummary: summarizeQuestionPayload(reportQuestions),\n supportingBeliefs,\n openQuestions: reportQuestions.slice(0, 8).map((question: any) => ({\n questionId: String(question?.questionId ?? question?._id ?? \"\"),\n question: String(question?.question ?? question?.canonicalText ?? \"\"),\n status: question?.status ?? null,\n importance:\n typeof question?.importance === \"number\" ? question.importance : null,\n answer:\n typeof question?.answer === \"string\" && question.answer.trim().length > 0\n ? question.answer\n : null,\n })),\n recentEvidence: (Array.isArray(recentEvidence) ? recentEvidence : [])\n .slice(0, 6)\n .map((evidence: any) => ({\n nodeId: String(evidence?._id ?? evidence?.nodeId ?? \"\"),\n title: String(evidence?.title ?? evidence?.canonicalText ?? \"\"),\n canonicalText: String(evidence?.canonicalText ?? evidence?.text ?? \"\"),\n sourceUrl:\n typeof evidence?.sourceUrl === \"string\" ? evidence.sourceUrl : null,\n })),\n versionHistory: Array.isArray(versionHistory)\n ? versionHistory.map((version: any) => ({\n version:\n typeof version?.version === \"number\" ? version.version : null,\n status: version?.status ?? null,\n changeType: version?.changeType ?? null,\n changeDescription: version?.changeDescription ?? null,\n createdAt:\n typeof version?.createdAt === \"number\" ? version.createdAt : null,\n }))\n : [],\n };\n}\n\nexport const thesisArtifactHandlers: HandlerModule = {\n async get_thesis_artifacts(args, ctx) {\n const defaultTopicId = getDefaultScopeContext().topicId ?? undefined;\n const requestedTopicId = readTopicIdArg(args) || defaultTopicId || undefined;\n const worktreeId =\n typeof args.worktreeId === \"string\" && args.worktreeId.trim().length > 0\n ? args.worktreeId.trim()\n : undefined;\n const includeVersions = args.includeVersions === true;\n const limit =\n typeof args.limit === \"number\" && Number.isFinite(args.limit)\n ? Math.max(1, Math.min(10, Math.floor(args.limit)))\n : 5;\n\n let selectedWorktree: WorktreeDoc | null = null;\n if (worktreeId) {\n selectedWorktree = (await adminQuery(api.worktrees.get, {\n worktreeId: worktreeId as any,\n }).catch(() => null)) as WorktreeDoc | null;\n }\n\n const resolvedTopicId = requestedTopicId || normalizeTopicId(selectedWorktree ?? {}) || null;\n let topicName: string | null = null;\n if (resolvedTopicId) {\n const topic = (await adminQuery(api.topics.get, {\n id: resolvedTopicId as any,\n }).catch(() => null)) as { name?: string } | null;\n topicName = typeof topic?.name === \"string\" ? topic.name : null;\n }\n\n const topicWorktrees = resolvedTopicId\n ? ((await adminQuery(api.worktrees.getByTopic, {\n topicId: resolvedTopicId as any,\n }).catch(() => [])) as WorktreeDoc[])\n : [];\n const rankedTopicArtifacts = topicWorktrees\n .filter(hasThesisArtifact)\n .sort(rankWorktreesByArtifact);\n\n const selectedArtifact = selectedWorktree\n ? await buildWorktreeArtifact({\n worktree: selectedWorktree,\n topicId: resolvedTopicId,\n topicName,\n userId: ctx.userId,\n includeVersions,\n })\n : rankedTopicArtifacts.length > 0\n ? await buildWorktreeArtifact({\n worktree: rankedTopicArtifacts[0],\n topicId: resolvedTopicId,\n topicName,\n userId: ctx.userId,\n includeVersions,\n })\n : null;\n\n const topicArtifacts = await Promise.all(\n rankedTopicArtifacts.slice(0, limit).map((worktree) =>\n buildWorktreeArtifact({\n worktree,\n topicId: resolvedTopicId,\n topicName,\n userId: ctx.userId,\n includeVersions: false,\n })\n )\n );\n\n return {\n scope: {\n topicId: resolvedTopicId,\n topicName,\n worktreeId: worktreeId ?? null,\n },\n selectedArtifact,\n topicArtifacts: topicArtifacts.filter(Boolean),\n availableArtifactCount: rankedTopicArtifacts.length,\n recommendedUses: [\n \"Draft a meeting agenda grounded in the latest worktree thesis and open questions.\",\n \"Turn the memo text into a one-pager, partner update, or investment note.\",\n \"Use the thesis plus supporting beliefs as slide-outline raw material for a deck.\",\n \"Seed blog-post or email drafts from the narrative artifact without re-querying the graph.\",\n ],\n };\n },\n};\n","import type { HandlerModule } from \"./types.js\";\nimport {\n asRecord,\n formatSdkResult,\n getSdkClient,\n readNumber,\n readString,\n readStringArray,\n} from \"./sdk.js\";\n\nexport const worktreeHandlers: HandlerModule = {\n async add_worktree(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.add({\n title: readString(args.title) ?? \"\",\n topicId: readString(args.topicId ?? args.projectId) ?? \"\",\n objective: readString(args.objective),\n hypothesis: readString(args.hypothesis),\n beliefIds:\n readStringArray(args.beliefIds) ?? readStringArray(args.beliefs),\n autoShape:\n typeof args.autoShape === \"boolean\" ? args.autoShape : undefined,\n domainPackId: readString(args.domainPackId),\n executionOrder: readNumber(args.executionOrder),\n dependsOn: readStringArray(args.dependsOn),\n blocks: readStringArray(args.blocks),\n gate: readString(args.gate),\n proofArtifacts: Array.isArray(args.proofArtifacts)\n ? args.proofArtifacts\n : undefined,\n staffingHint: readString(args.staffingHint),\n lastReconciledAt: readNumber(args.lastReconciledAt),\n autoFixPolicy:\n args.autoFixPolicy &&\n typeof args.autoFixPolicy === \"object\" &&\n !Array.isArray(args.autoFixPolicy)\n ? (args.autoFixPolicy as any)\n : undefined,\n })\n );\n },\n\n async list_worktrees(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.list({\n topicId: readString(args.topicId ?? args.projectId) ?? \"\",\n status: readString(args.status) as any,\n limit: readNumber(args.limit),\n })\n );\n },\n\n async activate_worktree(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.activate(\n readString(args.worktreeId ?? args.id) ?? \"\"\n )\n );\n },\n\n async update_worktree_metadata(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.updateMetadata({\n worktreeId: readString(args.worktreeId ?? args.id) ?? \"\",\n objective: readString(args.objective),\n hypothesis: readString(args.hypothesis),\n rationale: readString(args.rationale),\n track: readString(args.track),\n trackPosition: readNumber(args.trackPosition),\n executionBand: readNumber(args.executionBand),\n executionOrder: readNumber(args.executionOrder),\n dependsOn: readStringArray(args.dependsOn),\n blocks: readStringArray(args.blocks),\n gate: readString(args.gate),\n status: readString(args.status),\n topicId: readString(args.topicId),\n additionalTopicIds: readStringArray(args.additionalTopicIds),\n proofArtifacts: Array.isArray(args.proofArtifacts)\n ? args.proofArtifacts\n : undefined,\n staffingHint: readString(args.staffingHint),\n lastReconciledAt: readNumber(args.lastReconciledAt),\n autoFixPolicy:\n args.autoFixPolicy &&\n typeof args.autoFixPolicy === \"object\" &&\n !Array.isArray(args.autoFixPolicy)\n ? args.autoFixPolicy\n : undefined,\n } as any)\n );\n },\n\n async merge(args, ctx) {\n const record = asRecord(args);\n const outcomes = Array.isArray(record.outcomes) ? record.outcomes : [];\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.merge(\n readString(record.worktreeId ?? record.id) ?? \"\",\n {\n summary: readString(record.summary),\n outcomes: outcomes.map((entry) => {\n const row = asRecord(entry);\n return {\n beliefId: readString(row.beliefId) ?? \"\",\n confidence: readNumber(row.confidence) ?? Number.NaN,\n rationale: readString(row.rationale) ?? \"\",\n };\n }),\n }\n )\n );\n },\n\n async list_all_worktrees(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.listAll({\n status: readString(args.status) as any,\n track: readString(args.track),\n executionBand: readNumber(args.executionBand),\n limit: readNumber(args.limit),\n })\n );\n },\n\n async pipeline_snapshot(args, ctx) {\n const topicId = readString(args.topicId) ?? \"\";\n if (!topicId) {\n return { error: \"topicId is required\" };\n }\n\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.pipelineSnapshot(topicId)\n );\n },\n\n async push(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.push(\n readString(args.worktreeId ?? args.id) ?? \"\",\n {\n targetContext: readString(args.targetContext) ?? \"\",\n beliefIds: readStringArray(args.beliefIds),\n }\n )\n );\n },\n\n async open_pull_request(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.openPullRequest(\n readString(args.worktreeId ?? args.id) ?? \"\",\n {\n summary: readString(args.summary) ?? \"\",\n reviewers: readStringArray(args.reviewers),\n }\n )\n );\n },\n\n async update_worktree_targets(args, ctx) {\n return formatSdkResult(\n await getSdkClient(ctx).worktrees.updateTargets({\n worktreeId: readString(args.worktreeId ?? args.id) ?? \"\",\n addBeliefIds: readStringArray(args.addBeliefIds),\n addQuestionIds: readStringArray(args.addQuestionIds),\n removeBeliefIds: readStringArray(args.removeBeliefIds),\n removeQuestionIds: readStringArray(args.removeQuestionIds),\n })\n );\n },\n};\n","/**\n * Handler Index — barrel file combining all handler modules into a single map.\n *\n * Each handler module exports a HandlerModule (Record<string, ToolHandler>)\n * keyed by MCP tool name. buildHandlerMap() merges them into a single lookup.\n */\n\nimport { answerHandlers } from \"./answers.js\";\nimport { autoBranchingHandlers } from \"./auto-branching.js\";\nimport { beliefHandlers } from \"./beliefs.js\";\nimport { bootstrapHandlers } from \"./bootstrap.js\";\nimport { codingHandlers } from \"./coding.js\";\nimport { contractHandlers } from \"./contracts.js\";\nimport { contradictionHandlers } from \"./contradictions.js\";\nimport { coordinationHandlers } from \"./coordination.js\";\nimport { coverageHandlers } from \"./coverage.js\";\nimport { discoveryHandlers } from \"./discovery.js\";\nimport { edgeHandlers } from \"./edges.js\";\nimport { engineeringVerificationHandlers } from \"./engineering-verification.js\";\nimport { evidenceHandlers } from \"./evidence.js\";\nimport { graphHandlers } from \"./graph.js\";\nimport { identityHandlers } from \"./identity.js\";\nimport { intelligenceHandlers } from \"./intelligence.js\";\nimport { judgmentHandlers } from \"./judgments.js\";\nimport { lensHandlers } from \"./lenses.js\";\nimport { lineageHandlers } from \"./lineage.js\";\nimport { observationHandlers } from \"./observations.js\";\nimport { ontologyHandlers } from \"./ontologies.js\";\nimport { ontologyMatchingHandlers } from \"./ontology-matching.js\";\nimport { policyHandlers } from \"./policy.js\";\nimport { questionHandlers } from \"./questions.js\";\nimport { researchHandlers } from \"./research.js\";\nimport { researchVerificationHandlers } from \"./research-verification.js\";\nimport { scopeContextHandlers } from \"./scope-context.js\";\nimport { searchHandlers } from \"./search.js\";\nimport { taskHandlers } from \"./tasks.js\";\nimport { thesisArtifactHandlers } from \"./thesis-artifacts.js\";\nimport { topicHandlers } from \"./topics.js\";\nimport type { AuthenticatedHandler } from \"./types.js\";\nimport { worktreeHandlers } from \"./worktrees.js\";\n\n/**\n * Build the complete handler map for all MCP tools.\n */\nexport function buildHandlerMap(): Record<string, AuthenticatedHandler> {\n return {\n ...evidenceHandlers,\n ...questionHandlers,\n ...searchHandlers,\n ...answerHandlers,\n ...worktreeHandlers,\n ...lensHandlers,\n ...edgeHandlers,\n ...judgmentHandlers,\n ...graphHandlers,\n ...identityHandlers,\n ...lineageHandlers,\n ...intelligenceHandlers,\n ...researchHandlers,\n ...researchVerificationHandlers,\n ...taskHandlers,\n ...topicHandlers,\n ...contradictionHandlers,\n ...contractHandlers,\n ...engineeringVerificationHandlers,\n ...policyHandlers,\n ...observationHandlers,\n ...scopeContextHandlers,\n ...codingHandlers,\n ...coordinationHandlers,\n ...coverageHandlers,\n ...discoveryHandlers,\n ...thesisArtifactHandlers,\n ...bootstrapHandlers,\n ...autoBranchingHandlers,\n ...ontologyHandlers,\n ...ontologyMatchingHandlers,\n ...beliefHandlers,\n };\n}\n","/**\n * Write Policy — S2-13K Graph Compounding\n *\n * Policy enforcement for MCP mutation tools.\n * Queries Convex write policies and tracks per-session write counts.\n */\n\nimport { api } from \"./kernelApi.js\";\nimport { adminQuery } from \"./convex-client.js\";\nimport type { AuthContext } from \"./handlers/types.js\";\n\n// ── Tool Category Classification ─────────────────────────────────────────────\n\nconst MUTATION_TOOL_NAMES = new Set([\n \"create_belief\",\n \"refine_belief\",\n \"modulate_confidence\",\n \"fork_belief\",\n \"archive_belief\",\n \"create_evidence\",\n \"link_evidence\",\n \"add_evidence\",\n \"link_evidence_to_belief\",\n \"record_scope_learning\",\n \"record_attempt\",\n \"create_question\",\n \"answer_question\",\n \"refine_question\",\n \"update_question_status\",\n \"archive_question\",\n \"link_evidence_to_question\",\n \"create_answer\",\n \"create_edge\",\n \"flag_contradiction\",\n \"add_worktree\",\n \"merge\",\n \"activate_worktree\",\n \"update_worktree_metadata\",\n \"update_worktree_targets\",\n \"create_lens\",\n \"apply_lens_to_topic\",\n \"remove_lens_from_topic\",\n \"create_task\",\n \"complete_task\",\n \"record_judgment\",\n \"register_session\",\n \"heartbeat_session\",\n \"end_session\",\n \"send_agent_message\",\n \"broadcast_message\",\n \"claim_files\",\n \"create_topic\",\n \"open_pull_request\",\n \"apply_auto_branching\",\n \"seed_belief_lattice\",\n \"trigger_belief_review\",\n \"create_epistemic_contract\",\n \"evaluate_contract\",\n \"create_ontology\",\n \"update_ontology\",\n \"archive_ontology\",\n \"create_ontology_version\",\n \"publish_ontology_version\",\n \"deprecate_ontology_version\",\n \"manage_write_policy\",\n]);\n\n/**\n * Check if a tool name is a mutation (write) tool.\n */\nexport function isMutationTool(toolName: string): boolean {\n return MUTATION_TOOL_NAMES.has(toolName);\n}\n\n// ── Per-Session Write Counter ────────────────────────────────────────────────\n\ntype WriteRecord = {\n toolName: string;\n timestamp: number;\n topicId?: string;\n};\n\nconst sessionWrites: WriteRecord[] = [];\nconst sessionWritesBySession = new Map<string, WriteRecord[]>();\n\n/**\n * Record a write operation for the current session.\n */\nexport function recordWrite(\n toolName: string,\n topicId?: string,\n sessionId = \"default\"\n): void {\n const record = {\n toolName,\n timestamp: Date.now(),\n topicId,\n };\n sessionWrites.push(record);\n const existing = sessionWritesBySession.get(sessionId) ?? [];\n existing.push(record);\n sessionWritesBySession.set(sessionId, existing);\n}\n\n/**\n * Get write statistics for the current session.\n */\nexport function getSessionWriteStats(): {\n totalWrites: number;\n byCategory: Record<string, number>;\n byTool: Record<string, number>;\n firstWrite: number | null;\n lastWrite: number | null;\n} {\n return getSessionWriteStatsForSession(\"default\");\n}\n\nexport function getSessionWriteStatsForSession(sessionId: string): {\n totalWrites: number;\n byCategory: Record<string, number>;\n byTool: Record<string, number>;\n firstWrite: number | null;\n lastWrite: number | null;\n} {\n const records = sessionWritesBySession.get(sessionId) ?? [];\n const byCategory: Record<string, number> = {};\n const byTool: Record<string, number> = {};\n const lastWrite = records.at(-1)?.timestamp ?? null;\n\n for (const record of records) {\n byTool[record.toolName] = (byTool[record.toolName] ?? 0) + 1;\n }\n\n return {\n totalWrites: records.length,\n byCategory,\n byTool,\n firstWrite: records.length > 0 ? records[0].timestamp : null,\n lastWrite,\n };\n}\n\n// ── Policy Enforcement ───────────────────────────────────────────────────────\n\ntype PolicyCheckResult = {\n allowed: boolean;\n permission: string;\n rationale?: string;\n maxWritesPerSession?: number;\n toolCategory?: string | null;\n policy?: Record<string, unknown> | null;\n explanation?: {\n summary?: string;\n matchedReasonCode?: string;\n steps?: Array<{\n stage?: string;\n outcome?: string;\n reasonCode?: string;\n detail?: string;\n }>;\n [key: string]: unknown;\n };\n reason: string;\n};\n\nfunction buildRateLimitExplanation(args: {\n toolName: string;\n toolCategory?: string | null;\n authRole: string;\n topicId?: string;\n maxWritesPerSession: number;\n currentCount: number;\n policy?: Record<string, unknown> | null;\n}) {\n const summary = `Denied ${args.toolName}: session write limit ${args.currentCount}/${args.maxWritesPerSession} reached for the matched write policy.`;\n return {\n summary,\n matchedReasonCode: \"RATE_LIMIT_EXCEEDED\",\n toolName: args.toolName,\n toolCategory: args.toolCategory ?? null,\n role: args.authRole,\n topicId: args.topicId ?? null,\n policy: args.policy ?? null,\n steps: [\n {\n stage: \"policy_lookup\",\n outcome: \"passed\",\n reasonCode: \"WRITE_POLICY_MATCHED\",\n detail: \"A matching write policy was found before evaluating the session limit.\",\n },\n {\n stage: \"rate_limit\",\n outcome: \"failed\",\n reasonCode: \"RATE_LIMIT_EXCEEDED\",\n detail: `This session has already recorded ${args.currentCount} writes and the matched rule caps it at ${args.maxWritesPerSession}.`,\n },\n {\n stage: \"decision\",\n outcome: \"failed\",\n reasonCode: \"RATE_LIMIT_EXCEEDED\",\n detail: summary,\n },\n ],\n };\n}\n\n/**\n * Check if a mutation tool call is allowed by write policy.\n *\n * Resolution order:\n * 1. Topic-specific + role match\n * 2. Global (no topic) + role match\n * 3. No matching policy → allow (open by default)\n *\n * Also checks per-session write limits if policy specifies maxWritesPerSession.\n */\nexport async function checkWritePolicy(\n toolName: string,\n topicId: string | undefined,\n authCtx: AuthContext\n): Promise<PolicyCheckResult> {\n // Non-mutation tools always pass\n if (!isMutationTool(toolName)) {\n return { allowed: true, permission: \"allow\", reason: \"read_only_tool\" };\n }\n\n try {\n const result = await adminQuery((api.mcpWritePolicy as any).checkAccess, {\n topicId: topicId ?? undefined,\n role: authCtx.role,\n toolName,\n });\n\n if (!result) {\n return {\n allowed: true,\n permission: \"allow\",\n toolCategory: null,\n policy: null,\n reason: \"no_policy_response\",\n };\n }\n\n // Check rate limit\n if (\n result.allowed &&\n typeof result.maxWritesPerSession === \"number\" &&\n Number.isFinite(result.maxWritesPerSession)\n ) {\n const currentCount =\n sessionWritesBySession.get(authCtx.sessionId)?.length ?? 0;\n if (currentCount >= result.maxWritesPerSession) {\n return {\n allowed: false,\n permission: \"deny\",\n rationale: `Session write limit reached (${currentCount}/${result.maxWritesPerSession})`,\n maxWritesPerSession: result.maxWritesPerSession,\n toolCategory:\n typeof result.toolCategory === \"string\" ? result.toolCategory : null,\n policy:\n result.policy && typeof result.policy === \"object\"\n ? (result.policy as Record<string, unknown>)\n : null,\n explanation: buildRateLimitExplanation({\n toolName,\n toolCategory:\n typeof result.toolCategory === \"string\" ? result.toolCategory : null,\n authRole: authCtx.role,\n topicId,\n maxWritesPerSession: result.maxWritesPerSession,\n currentCount,\n policy:\n result.policy && typeof result.policy === \"object\"\n ? (result.policy as Record<string, unknown>)\n : null,\n }),\n reason: \"rate_limit_exceeded\",\n };\n }\n }\n\n return result as PolicyCheckResult;\n } catch (err) {\n // Policy check failure → allow (fail-open for write policies)\n // This ensures the compounding loop isn't blocked by infrastructure issues.\n console.error(\n `[write-policy] Policy check failed for ${toolName}: ${err instanceof Error ? err.message : err}. Allowing (fail-open).`\n );\n return {\n allowed: true,\n permission: \"allow\",\n toolCategory: null,\n policy: null,\n explanation: {\n summary:\n \"Allowed because write-policy evaluation failed and the runtime fell back to fail-open behavior.\",\n matchedReasonCode: \"WRITE_POLICY_CHECK_ERROR\",\n steps: [\n {\n stage: \"policy_lookup\",\n outcome: \"failed\",\n reasonCode: \"WRITE_POLICY_CHECK_ERROR\",\n detail:\n err instanceof Error ? err.message : \"Unknown policy evaluation error.\",\n },\n {\n stage: \"decision\",\n outcome: \"bypassed\",\n reasonCode: \"WRITE_POLICY_CHECK_ERROR\",\n detail:\n \"Write-policy infrastructure error did not block the mutation because this runtime is fail-open on evaluation errors.\",\n },\n ],\n },\n reason: \"policy_check_error\",\n };\n }\n}\n","/**\n * Credential Resolution — Battle-proof credential loading for the Lucern MCP.\n *\n * Resolution order (first match wins):\n * 1. process.env.LUCERN_API_KEY (set via .mcp.json env, shell, or CI)\n * 2. ~/.lucern/credentials (persistent, git-safe credential store)\n * 3. process.env.LUCERN_CONVEX_URL + LUCERN_DEPLOY_KEY (direct, advanced)\n *\n * NO .env.lucern. That file lives in a git repo and can be destroyed by\n * stash, checkout, or branch operations. Credentials belong in ~/.lucern/.\n *\n * The `lucern init` command writes credentials to ~/.lucern/credentials.\n * After that, the MCP server works with zero repo-level config.\n */\n\nimport { createHash } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { logMcpInfo } from \"./logging.js\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport type EnvCredentials = { url: string; key: string };\nexport type UnifiedPayload = { dev: EnvCredentials; prod?: EnvCredentials };\ntype LegacyPayload = { url: string; key: string };\n\n// ── Constants ────────────────────────────────────────────────────────────────\n\nconst LUCERN_HOME = path.join(os.homedir(), \".lucern\");\nconst CREDENTIALS_FILE = path.join(LUCERN_HOME, \"credentials\");\n\nexport { LUCERN_HOME, CREDENTIALS_FILE };\n\n// ── API Key Decode ───────────────────────────────────────────────────────────\n\nexport function decodeApiKey(\n apiKey: string,\n prefix: string\n): { unified: UnifiedPayload } | { legacy: LegacyPayload } | null {\n if (!apiKey.startsWith(prefix)) {\n return null;\n }\n try {\n const payload = apiKey.slice(prefix.length);\n const b64 = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const json = Buffer.from(b64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n\n // Unified format (v2): { dev: { url, key }, prod?: { url, key } }\n if (\n parsed.dev &&\n typeof parsed.dev.url === \"string\" &&\n typeof parsed.dev.key === \"string\"\n ) {\n const result: UnifiedPayload = { dev: parsed.dev };\n if (\n parsed.prod &&\n typeof parsed.prod.url === \"string\" &&\n typeof parsed.prod.key === \"string\"\n ) {\n result.prod = parsed.prod;\n }\n return { unified: result };\n }\n\n // Legacy format (v1): { url, key }\n if (typeof parsed.url === \"string\" && typeof parsed.key === \"string\") {\n return { legacy: { url: parsed.url, key: parsed.key } };\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Select the right credentials from a unified key based on LUCERN_ENV.\n */\nexport function selectEnvironment(payload: UnifiedPayload): EnvCredentials {\n const env = (process.env.LUCERN_ENV || \"development\").toLowerCase();\n if (env === \"production\" && payload.prod) {\n return payload.prod;\n }\n if (env === \"production\" && !payload.prod) {\n logMcpInfo(\n \"[lucern] LUCERN_ENV=production but key has no prod credentials. Falling back to dev.\"\n );\n }\n return payload.dev;\n}\n\n// ── API Key Encode ───────────────────────────────────────────────────────────\n\nexport function encodeLucernApiKey(\n dev: EnvCredentials,\n prod?: EnvCredentials\n): string {\n const payload: UnifiedPayload = { dev };\n if (prod) {\n payload.prod = prod;\n }\n return `luc_${Buffer.from(JSON.stringify(payload)).toString(\"base64url\")}`;\n}\n\nexport function encodeStackApiKey(\n dev: EnvCredentials,\n prod?: EnvCredentials\n): string {\n const payload: UnifiedPayload = { dev };\n if (prod) {\n payload.prod = prod;\n }\n return `stk_${Buffer.from(JSON.stringify(payload)).toString(\"base64url\")}`;\n}\n\n// ── API Key Hash ────────────────────────────────────────────────────────────\n\n/**\n * Compute SHA-256 hash of a raw API key for MC validation lookup.\n * The MCP server hashes its luc_/stk_ key and sends the hash to MC,\n * which compares against stored hashes (never sees the raw key).\n */\nexport function hashApiKey(apiKey: string): string {\n return createHash(\"sha256\").update(apiKey).digest(\"hex\");\n}\n\n// ── Credential Store ─────────────────────────────────────────────────────────\n\n/**\n * Read KEY=VALUE pairs from a credentials file.\n * Strips quotes, ignores comments and blank lines.\n */\nfunction parseCredentialsFile(filePath: string): Record<string, string> {\n if (!fs.existsSync(filePath)) {\n return {};\n }\n\n const result: Record<string, string> = {};\n const lines = fs.readFileSync(filePath, \"utf-8\").split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) {\n continue;\n }\n const eqIdx = trimmed.indexOf(\"=\");\n if (eqIdx < 1) {\n continue;\n }\n const key = trimmed.slice(0, eqIdx).trim();\n let val = trimmed.slice(eqIdx + 1).trim();\n if (\n (val.startsWith('\"') && val.endsWith('\"')) ||\n (val.startsWith(\"'\") && val.endsWith(\"'\"))\n ) {\n val = val.slice(1, -1);\n }\n result[key] = val;\n }\n return result;\n}\n\n/**\n * Write credentials to ~/.lucern/credentials.\n * Creates ~/.lucern/ if it doesn't exist.\n */\nexport function writeCredentials(creds: Record<string, string>): void {\n if (!fs.existsSync(LUCERN_HOME)) {\n fs.mkdirSync(LUCERN_HOME, { recursive: true, mode: 0o700 });\n }\n\n // Merge with existing credentials (don't overwrite keys we're not setting)\n const existing = parseCredentialsFile(CREDENTIALS_FILE);\n const merged = { ...existing, ...creds };\n\n const lines = [\n \"# Lucern credentials — managed by `lucern init`\",\n \"# This file is outside any git repo. Git operations cannot destroy it.\",\n \"\",\n ];\n\n for (const [key, val] of Object.entries(merged)) {\n lines.push(`${key}=${val}`);\n }\n\n fs.writeFileSync(CREDENTIALS_FILE, `${lines.join(\"\\n\")}\\n`, {\n mode: 0o600, // Owner read/write only\n });\n}\n\n// ── Credential Resolution ────────────────────────────────────────────────────\n\n/**\n * Resolve LUCERN_API_KEY from the credential chain.\n * Sets process.env vars so the rest of the server can use them.\n *\n * Resolution order:\n * 1. process.env.LUCERN_API_KEY (already set via .mcp.json, shell, CI)\n * 2. ~/.lucern/credentials file\n * 3. process.env.LUCERN_CONVEX_URL + LUCERN_DEPLOY_KEY (direct)\n */\nexport function resolveCredentials(): {\n lucernResolved: boolean;\n stackResolved: boolean;\n mcResolved: boolean;\n source: string;\n rawLucernApiKey?: string;\n rawStackApiKey?: string;\n rawUserToken?: string;\n} {\n // Already fully configured — skip\n if (process.env.LUCERN_CONVEX_URL && process.env.LUCERN_DEPLOY_KEY) {\n return {\n lucernResolved: true,\n stackResolved: !!process.env.STACK_CONVEX_URL,\n mcResolved: !!(process.env.MC_CONVEX_URL && process.env.MC_DEPLOY_KEY),\n source: \"env\",\n rawLucernApiKey: process.env.LUCERN_API_KEY,\n rawStackApiKey: process.env.STACK_API_KEY,\n rawUserToken: process.env.LUCERN_USER_TOKEN,\n };\n }\n\n const lucernEnv = process.env.LUCERN_ENV || \"development\";\n let source = \"none\";\n\n // --- Source 1: process.env (already set) ---\n let lucernApiKey = process.env.LUCERN_API_KEY;\n let stackApiKey = process.env.STACK_API_KEY;\n\n if (lucernApiKey) {\n source = \"env\";\n }\n\n // --- Resolve user token (per-user identity for MCP sessions) ---\n let userToken = process.env.LUCERN_USER_TOKEN;\n\n // --- Source 2: ~/.lucern/credentials ---\n if (lucernApiKey) {\n // Source 1 matched — still check credentials file for user token + JWKS\n const creds = parseCredentialsFile(CREDENTIALS_FILE);\n if (creds.LUCERN_USER_TOKEN && !userToken) {\n userToken = creds.LUCERN_USER_TOKEN;\n process.env.LUCERN_USER_TOKEN = userToken;\n }\n const lucernEnvLocal = (\n process.env.LUCERN_ENV || \"development\"\n ).toLowerCase();\n if (\n creds.CLERK_JWKS_URL &&\n !process.env.CLERK_JWKS_URL &&\n lucernEnvLocal === \"development\"\n ) {\n process.env.CLERK_JWKS_URL = creds.CLERK_JWKS_URL;\n }\n } else {\n const creds = parseCredentialsFile(CREDENTIALS_FILE);\n if (creds.LUCERN_API_KEY) {\n lucernApiKey = creds.LUCERN_API_KEY;\n process.env.LUCERN_API_KEY = lucernApiKey;\n source = CREDENTIALS_FILE;\n }\n if (creds.STACK_API_KEY && !stackApiKey) {\n stackApiKey = creds.STACK_API_KEY;\n process.env.STACK_API_KEY = stackApiKey;\n }\n if (creds.LUCERN_ENV && !process.env.LUCERN_ENV) {\n process.env.LUCERN_ENV = creds.LUCERN_ENV;\n }\n if (creds.LUCERN_USER_TOKEN && !userToken) {\n userToken = creds.LUCERN_USER_TOKEN;\n process.env.LUCERN_USER_TOKEN = userToken;\n }\n // CLERK_JWKS_URL override — only allowed in development\n const lucernEnvLocal = (\n process.env.LUCERN_ENV || \"development\"\n ).toLowerCase();\n if (\n creds.CLERK_JWKS_URL &&\n !process.env.CLERK_JWKS_URL &&\n lucernEnvLocal === \"development\"\n ) {\n process.env.CLERK_JWKS_URL = creds.CLERK_JWKS_URL;\n }\n }\n\n if (source !== \"none\") {\n logMcpInfo(`[lucern] Credentials from ${source} (LUCERN_ENV=${lucernEnv})`);\n }\n\n // --- Decode LUCERN_API_KEY ---\n let lucernResolved = false;\n if (lucernApiKey) {\n const decoded = decodeApiKey(lucernApiKey, \"luc_\");\n if (decoded && \"unified\" in decoded) {\n const creds = selectEnvironment(decoded.unified);\n process.env.LUCERN_CONVEX_URL = creds.url;\n process.env.LUCERN_DEPLOY_KEY = creds.key;\n lucernResolved = true;\n logMcpInfo(\n `[lucern] Lucern → ${creds.url} (${lucernEnv})` +\n (decoded.unified.prod ? \" [prod available]\" : \" [dev only]\")\n );\n } else if (decoded && \"legacy\" in decoded) {\n process.env.LUCERN_CONVEX_URL = decoded.legacy.url;\n process.env.LUCERN_DEPLOY_KEY = decoded.legacy.key;\n lucernResolved = true;\n logMcpInfo(`[lucern] Lucern (legacy) → ${decoded.legacy.url}`);\n } else {\n console.error(\n \"[lucern] LUCERN_API_KEY found but failed to decode. Check format (luc_xxxxx).\"\n );\n }\n }\n\n // --- Decode STACK_API_KEY ---\n let stackResolved = false;\n if (stackApiKey) {\n const decoded = decodeApiKey(stackApiKey, \"stk_\");\n if (decoded && \"unified\" in decoded) {\n const creds = selectEnvironment(decoded.unified);\n process.env.STACK_CONVEX_URL = creds.url;\n process.env.STACK_DEPLOY_KEY = creds.key;\n stackResolved = true;\n logMcpInfo(\n `[lucern] Stack → ${creds.url} (${lucernEnv})` +\n (decoded.unified.prod ? \" [prod available]\" : \" [dev only]\")\n );\n } else if (decoded && \"legacy\" in decoded) {\n process.env.STACK_CONVEX_URL = decoded.legacy.url;\n process.env.STACK_DEPLOY_KEY = decoded.legacy.key;\n stackResolved = true;\n logMcpInfo(`[lucern] Stack (legacy) → ${decoded.legacy.url}`);\n }\n }\n\n // --- Resolve Master Control credentials ---\n // MC credentials enable the MCP server to fetch methodology packs,\n // validate API keys, and read tenant config from the control plane.\n // Default: utmost-ox-403 (dev) / successful-clam-833 (prod)\n let mcResolved = false;\n if (!process.env.MC_CONVEX_URL) {\n const creds = parseCredentialsFile(CREDENTIALS_FILE);\n if (creds.MC_CONVEX_URL) {\n process.env.MC_CONVEX_URL = creds.MC_CONVEX_URL;\n }\n if (creds.MC_DEPLOY_KEY) {\n process.env.MC_DEPLOY_KEY = creds.MC_DEPLOY_KEY;\n }\n }\n if (process.env.MC_CONVEX_URL && process.env.MC_DEPLOY_KEY) {\n mcResolved = true;\n logMcpInfo(`[lucern] Master Control → ${process.env.MC_CONVEX_URL}`);\n }\n\n if (!lucernResolved) {\n console.error(\n \"[lucern] No credentials found. Run: lucern init --key luc_xxxxx\"\n );\n }\n\n if (userToken) {\n logMcpInfo(\"[lucern] User token detected — per-user session mode\");\n }\n\n return {\n lucernResolved,\n stackResolved,\n mcResolved,\n source,\n rawLucernApiKey: lucernApiKey,\n rawStackApiKey: stackApiKey,\n rawUserToken: userToken,\n };\n}\n"]}