@lucern/mcp 0.2.0-alpha.7 → 0.2.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gateway.d.ts +2 -29
- package/dist/gateway.js +7941 -7919
- package/dist/gateway.js.map +1 -1
- package/dist/index.js +43 -9
- package/dist/index.js.map +1 -1
- package/dist/runtime.js +21 -20
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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(/ /g, \" \")\n .replace(/&/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"]}
|
|
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","components","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\";\nimport { registerKernelApi } from \"@lucern/server-core/adapters\";\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, components } from \"./kernelApi.js\";\nimport { adminQuery } from \"./convex-client.js\";\nimport { checkTopicScope } from \"./topic-scope.js\";\nimport type { Id } from \"@lucern/reasoning-kernel/_generated/dataModel\";\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(components.lucern.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(components.lucern.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(components.lucern.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, components } 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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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, components } 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(/ /g, \" \")\n .replace(/&/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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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(components.lucern.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"]}
|