@lucern/mcp 0.2.0-alpha.3 → 0.2.0-alpha.5
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.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../contracts/src/gateway.contract.ts","../../contracts/src/events.contract.ts","../../contracts/src/ids.contract.ts","../../contracts/src/text-matching.contract.ts","../../contracts/src/v1/ontologies/v1.ts","../../../lucern/apps/gateway/src/gateway-helpers.ts","../../server-core/src/kernelApi.ts","../../server-core/src/domain/beliefs.ts","../../server-core/src/beliefs.ts","../../../lucern/apps/gateway/src/routes/beliefs.ts","../../server-core/src/domain/context/compile.ts","../../server-core/src/context.ts","../../../lucern/apps/gateway/src/routes/context.ts","../../server-core/src/domain/contradictions.ts","../../server-core/src/contradictions.ts","../../../lucern/apps/gateway/src/routes/contradictions.ts","../../server-core/src/domain/edges.ts","../../server-core/src/edges.ts","../../../lucern/apps/gateway/src/routes/edges.ts","../../../lucern/apps/gateway/src/routes/events.ts","../../server-core/src/domain/evidence.ts","../../server-core/src/evidence.ts","../../../lucern/apps/gateway/src/routes/evidence.ts","../../server-core/src/domain/graph.ts","../../server-core/src/domain/questions.ts","../../server-core/src/questions.ts","../../server-core/src/graph.ts","../../../lucern/apps/gateway/src/routes/graph.ts","../../server-core/src/auth/gateway-claims.ts","../../server-core/src/identity.ts","../../../lucern/apps/gateway/src/routes/identity.ts","../../server-core/src/domain/ontologies.ts","../../server-core/src/ontologies.ts","../../../lucern/apps/gateway/src/routes/ontologies.ts","../../../lucern/apps/gateway/src/routes/questions.ts","../../server-core/src/domain/search.ts","../../server-core/src/search.ts","../../../lucern/apps/gateway/src/routes/search.ts","../../server-core/src/domain/tasks.ts","../../server-core/src/tasks.ts","../../../lucern/apps/gateway/src/routes/tasks.ts","../../server-core/src/domain/topics.ts","../../server-core/src/topics.ts","../../../lucern/apps/gateway/src/routes/topics.ts","../../../lucern/apps/gateway/src/routes/webhooks.ts","../../server-core/src/domain/worktrees.ts","../../server-core/src/worktrees.ts","../../../lucern/apps/gateway/src/routes/worktrees.ts"],"names":["asRecord","readString","readNumber","readStringArray","message","normalizeRequiredString","decodeExternalId","encodeId","randomUUID","resolveExternalId","ensureTopicAccessWithQuery","clampNumber","extractCreatedRawId","normalizeWeight","normalizeDirection","normalizeAnswerConfidence","asRecordArray","effective","computeSearchScore","requireString","encodeTopicId","readBoolean","toSubjectiveLogicOpinion"],"mappings":"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","file":"gateway.js","sourcesContent":["/**\n * Gateway contract types — shared between Stack's gateway middleware and\n * Lucern's server-core / gateway route handlers.\n *\n * These types describe the authenticated request context that flows from\n * the gateway into Lucern route handlers. The gateway (Stack-side) creates\n * the context; Lucern consumes it read-only.\n *\n * @module @lucern/contracts/src/gateway\n */\n\nimport type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"./auth-session.contract\";\n\n// ---------------------------------------------------------------------------\n// Error codes\n// ---------------------------------------------------------------------------\n\nexport type PlatformApiErrorCode =\n | \"AUTH_REQUIRED\"\n | \"AUTHENTICATION_REQUIRED\"\n | \"AUTH_TOKEN_MISSING\"\n | \"INVALID_REQUEST\"\n | \"IDEMPOTENCY_KEY_REQUIRED\"\n | \"FORBIDDEN\"\n | \"SCOPE_INSUFFICIENT\"\n | \"ENVIRONMENT_MISMATCH\"\n | \"KEY_EXPIRED\"\n | \"KEY_REVOKED\"\n | \"RATE_LIMIT_EXCEEDED\"\n | \"NOT_FOUND\"\n | \"CONFLICT\"\n | \"UPSTREAM_ERROR\"\n | \"INTERNAL_ERROR\";\n\n// ---------------------------------------------------------------------------\n// Gateway scope and environment\n// ---------------------------------------------------------------------------\n\nexport type GatewayScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type GatewayEnvironment = \"sandbox\" | \"production\";\n\nexport type GatewayAuthMode =\n | \"interactive_user\"\n | \"service_principal\"\n | \"tenant_api_key\"\n | \"session_token\";\n\nexport type KeyLifecycleStatus =\n | \"active\"\n | \"rotating\"\n | \"rotated\"\n | \"expired\"\n | \"revoked\";\n\nexport type CutoverDomain =\n | \"graph\"\n | \"schema\"\n | \"identity\"\n | \"policy\"\n | \"audit\"\n | \"admin\"\n | \"agent\"\n | \"tool\"\n | \"prompt\"\n | \"intelligence\";\n\nexport type CutoverFlagState = \"legacy\" | \"cutover\" | \"disabled\";\n\n// ---------------------------------------------------------------------------\n// Gateway auth context — the canonical authenticated request shape\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticated request context created by the gateway middleware.\n * Lucern route handlers receive this as a read-only parameter.\n *\n * The `convex` field is typed as `unknown` in the contract because Lucern\n * consumers should not use the gateway's Convex client directly — they\n * have their own kernel client. The gateway (Stack-side) narrows this to\n * `ConvexHttpClient` at the construction site.\n */\nexport type GatewayAuthContext = {\n userId: string;\n convexToken?: string;\n /** Opaque in contract — narrowed to ConvexHttpClient at the gateway. */\n convex: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n authMode: GatewayAuthMode;\n principalId?: string;\n principalType?: SessionPrincipalType;\n tenantId?: string;\n workspaceId?: string;\n roles?: string[];\n sessionId?: string;\n sessionAuthMode?: SessionAuthMode;\n sessionExpiresAt?: number;\n delegationChain?: SessionDelegationHop[];\n servicePrincipalId?: string;\n servicePrincipalKeyId?: string;\n servicePrincipalTenantId?: string;\n servicePrincipalWorkspaceId?: string;\n requestEnvironment: GatewayEnvironment;\n keyEnvironment?: GatewayEnvironment;\n keyStatus: KeyLifecycleStatus | \"unknown\";\n grantedScopes: Set<string>;\n cutoverDomain: CutoverDomain;\n cutoverState: CutoverFlagState;\n};\n\n// ---------------------------------------------------------------------------\n// Gateway response helpers — portable (no Next.js dependency)\n// ---------------------------------------------------------------------------\n\nexport type GatewayErrorArgs = {\n code: PlatformApiErrorCode;\n message: string;\n status: number;\n correlationId: string;\n policyTraceId?: string;\n invariant?: string;\n suggestion?: string;\n details?: unknown;\n headers?: HeadersInit;\n};\n\nexport type GatewaySuccessArgs = {\n status?: number;\n correlationId: string;\n policyTraceId?: string;\n idempotentReplay?: boolean;\n};\n\nexport function requireActorPrincipalId(\n authContext: GatewayAuthContext\n): string {\n const principalId =\n typeof authContext.principalId === \"string\"\n ? authContext.principalId.trim()\n : \"\";\n if (principalId.length > 0) {\n return principalId;\n }\n throw new Error(\"Access denied: federated principal context required.\");\n}\n","/**\n * @lucern/contracts — events (canonical support contract)\n *\n * Consolidated flat support surface for Lucern's domain event stream:\n * - Event type definitions, constants, and shared enums\n * - Event construction + cursor helpers\n *\n * Consolidated from the former split type-definition module\n * and the prior src/events.contract.ts (helpers) in EK-16 T1 PR 3b.\n * Compat shim remains at the old events-types path until Lucern 1.0.0 (D12).\n */\n\n// =============================================================================\n// EVENT TYPE DEFINITIONS & CONSTANTS\n// (Formerly the split events type-definition module)\n// =============================================================================\n\nexport const DOMAIN_EVENT_VERSION = \"1.0\" as const;\nexport const EVENT_RETENTION_DEFAULT_DAYS = 30;\nexport const WEBHOOK_MAX_ATTEMPTS = 5;\nexport const WEBHOOK_RETRY_DELAYS_MS = [1_000, 5_000, 30_000, 300_000] as const;\n\nexport const DOMAIN_EVENT_TYPES = [\n \"belief.created\",\n \"belief.forked\",\n \"belief.confidence_updated\",\n \"belief.archived\",\n \"belief.refined\",\n \"belief.contract_created\",\n \"belief.contract_evaluated\",\n \"belief.lineage_queried\",\n \"evidence.created\",\n \"evidence.linked\",\n \"evidence.search_executed\",\n \"question.created\",\n \"question.answered\",\n \"question.refined\",\n \"question.status_updated\",\n \"question.archived\",\n \"edge.created\",\n \"contradiction.flagged\",\n \"worktree.created\",\n \"worktree.activated\",\n \"worktree.merged\",\n \"worktree.targets_updated\",\n \"worktree.metadata_updated\",\n \"topic.created\",\n \"topic.updated\",\n \"topic.archived\",\n \"task.created\",\n \"task.completed\",\n \"task.updated\",\n \"ontology.bound\",\n \"context.compiled\",\n \"identity.key_created\",\n \"identity.key_rotated\",\n \"identity.key_revoked\",\n \"webhook.test\",\n] as const;\n\nexport type DomainEventType = (typeof DOMAIN_EVENT_TYPES)[number];\n\nexport type DomainResourceType =\n | \"belief\"\n | \"evidence\"\n | \"question\"\n | \"edge\"\n | \"contradiction\"\n | \"worktree\"\n | \"topic\"\n | \"task\"\n | \"ontology\"\n | \"context\"\n | \"identity\"\n | \"webhook\";\n\nexport type DomainActorType = \"human\" | \"agent\" | \"service\";\n\nexport type DomainEventData = Record<string, unknown>;\n\nexport type DomainEvent = {\n eventId: string;\n type: DomainEventType | string;\n version: typeof DOMAIN_EVENT_VERSION;\n timestamp: number;\n tenantId?: string;\n workspaceId?: string;\n topicId: string;\n resourceId: string;\n resourceType: DomainResourceType | string;\n actorId: string;\n actorType: DomainActorType;\n data: DomainEventData;\n correlationId?: string;\n expiresAt: number;\n};\n\nexport type CreateDomainEventInput = {\n eventId?: string;\n timestamp?: number;\n tenantId?: string;\n workspaceId?: string;\n topicId: string;\n type: DomainEventType | string;\n resourceId: string;\n resourceType: DomainResourceType | string;\n actorId: string;\n actorType: DomainActorType;\n data?: DomainEventData;\n correlationId?: string;\n retentionDays?: number;\n};\n\nexport type EventCursor = {\n timestamp: number;\n eventId: string;\n};\n\nexport type EventListQuery = {\n topicId?: string;\n after?: string;\n types?: string[];\n startTime?: number;\n endTime?: number;\n limit?: number;\n};\n\nexport type EventListResult = {\n events: DomainEvent[];\n nextCursor: string | null;\n};\n\nexport type WebhookSecretMode = \"configured\";\n\nexport type WebhookRecord = {\n id: string;\n webhookId: string;\n tenantId?: string;\n workspaceId?: string;\n topicId?: string;\n url: string;\n events: string[];\n active: boolean;\n secretConfigured: boolean;\n createdAt: number;\n updatedAt: number;\n createdBy: string;\n updatedBy: string;\n lastDeliveryAt?: number;\n lastSuccessfulDeliveryAt?: number;\n};\n\nexport type WebhookCreateInput = {\n url: string;\n events: string[];\n secret: string;\n topicId?: string;\n active?: boolean;\n};\n\nexport type WebhookUpdateInput = {\n url?: string;\n events?: string[];\n secret?: string;\n topicId?: string | null;\n active?: boolean;\n};\n\nexport type WebhookDeliveryStatus =\n | \"pending\"\n | \"delivering\"\n | \"succeeded\"\n | \"failed\"\n | \"dead_letter\";\n\nexport type WebhookDeliveryRecord = {\n id: string;\n deliveryId: string;\n webhookId: string;\n eventId: string;\n eventType: string;\n topicId: string;\n status: WebhookDeliveryStatus;\n attemptCount: number;\n maxAttempts: number;\n nextAttemptAt?: number;\n lastAttemptAt?: number;\n lastStatusCode?: number;\n lastError?: string;\n deliveredAt?: number;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type WebhookDeliveryAttemptRecord = {\n id: string;\n attemptId: string;\n deliveryId: string;\n webhookId: string;\n eventId: string;\n eventType: string;\n attemptNumber: number;\n status: \"succeeded\" | \"failed\";\n statusCode?: number;\n error?: string;\n responseBody?: string;\n durationMs?: number;\n createdAt: number;\n};\n\nexport type WebhookDeliveriesResult = {\n deliveries: Array<\n WebhookDeliveryRecord & {\n attempts?: WebhookDeliveryAttemptRecord[];\n }\n >;\n};\n\nexport type WebhookHealthResult = {\n webhookId: string;\n totalAttempts: number;\n successfulAttempts: number;\n failedAttempts: number;\n successRate: number;\n pendingDeliveries: number;\n deadLetterDeliveries: number;\n lastDeliveryAt?: number;\n lastSuccessfulDeliveryAt?: number;\n};\n\nexport type WebhookTestResult = {\n webhookId: string;\n deliveryId: string;\n status: WebhookDeliveryStatus;\n attempts: number;\n};\n\nexport type ReplayEventsInput = EventListQuery & {\n webhookId?: string;\n};\n\nexport type ReplayEventsResult = EventListResult & {\n replayedDeliveries?: number;\n replayedWebhookId?: string;\n};\n\n// =============================================================================\n// EVENT HELPERS\n// (Formerly the body of src/events.contract.ts)\n// =============================================================================\n\nfunction toBase64(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"utf8\").toString(\"base64url\");\n }\n return btoa(unescape(encodeURIComponent(value)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/g, \"\");\n}\n\nfunction fromBase64(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"base64url\").toString(\"utf8\");\n }\n const normalized = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n return decodeURIComponent(escape(atob(normalized)));\n}\n\nexport function createEventId(): string {\n const random = crypto.randomUUID().replace(/-/g, \"\");\n return `evt_${random}`;\n}\n\nexport function normalizeRetentionDays(value: number | undefined): number {\n if (!Number.isFinite(value) || typeof value !== \"number\" || value <= 0) {\n return EVENT_RETENTION_DEFAULT_DAYS;\n }\n return Math.max(1, Math.trunc(value));\n}\n\nexport function buildDomainEvent(input: CreateDomainEventInput): DomainEvent {\n const timestamp = input.timestamp ?? Date.now();\n const retentionDays = normalizeRetentionDays(input.retentionDays);\n return {\n eventId: input.eventId?.trim() || createEventId(),\n type: input.type.trim(),\n version: DOMAIN_EVENT_VERSION,\n timestamp,\n tenantId: input.tenantId?.trim() || undefined,\n workspaceId: input.workspaceId?.trim() || undefined,\n topicId: input.topicId.trim(),\n resourceId: input.resourceId.trim(),\n resourceType: input.resourceType.trim(),\n actorId: input.actorId.trim(),\n actorType: input.actorType,\n data: input.data ?? {},\n correlationId: input.correlationId?.trim() || undefined,\n expiresAt: timestamp + retentionDays * 24 * 60 * 60 * 1000,\n };\n}\n\nexport function compareEventCursor(left: EventCursor, right: EventCursor): number {\n if (left.timestamp !== right.timestamp) {\n return left.timestamp - right.timestamp;\n }\n return left.eventId.localeCompare(right.eventId);\n}\n\nexport function encodeEventCursor(cursor: EventCursor): string {\n return toBase64(JSON.stringify(cursor));\n}\n\nexport function decodeEventCursor(cursor: string | undefined): EventCursor | null {\n if (!cursor || cursor.trim().length === 0) {\n return null;\n }\n try {\n const parsed = JSON.parse(fromBase64(cursor.trim())) as Partial<EventCursor>;\n if (\n typeof parsed.timestamp !== \"number\" ||\n !Number.isFinite(parsed.timestamp) ||\n typeof parsed.eventId !== \"string\" ||\n parsed.eventId.trim().length === 0\n ) {\n return null;\n }\n return {\n timestamp: parsed.timestamp,\n eventId: parsed.eventId.trim(),\n };\n } catch {\n return null;\n }\n}\n\nexport function isAfterCursor(\n event: Pick<DomainEvent, \"timestamp\" | \"eventId\">,\n cursor: EventCursor | null\n): boolean {\n if (!cursor) {\n return true;\n }\n return compareEventCursor(event, cursor) > 0;\n}\n\nexport function sortEventsByCursor<T extends Pick<DomainEvent, \"timestamp\" | \"eventId\">>(\n events: readonly T[]\n): T[] {\n return [...events].sort((left, right) => compareEventCursor(left, right));\n}\n\nexport function inferActorType(args: {\n sessionType?: \"agent\" | \"user\";\n authMode?: string;\n principalType?: string;\n}): DomainActorType {\n if (args.sessionType === \"agent\") {\n return \"agent\";\n }\n if (\n args.authMode === \"service_principal\" ||\n args.authMode === \"tenant_api_key\" ||\n args.principalType === \"service\"\n ) {\n return \"service\";\n }\n return \"human\";\n}\n\nexport async function emitDomainEvent(\n invokeMutation: (reference: any, args: CreateDomainEventInput) => Promise<unknown>,\n input: CreateDomainEventInput\n): Promise<unknown> {\n return await invokeMutation(\"events:recordEvent\" as any, input);\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 * Shared lexical matching primitives used across MCP handlers and graph utilities.\n *\n * The goal is not to replace downstream LLM scoring. It provides a fast,\n * deterministic substrate for candidate generation, reranking, and light\n * classification across belief/question/evidence/entity surfaces.\n */\n\nexport type LexicalStrategy = \"tokenOverlap\" | \"bigramJaccard\" | \"wordOverlap\";\n\nexport type PreparedLexicalQuery = {\n raw: string;\n tokens: string[];\n words: string[];\n bigrams: Set<string>;\n};\n\nexport type LexicalSignal = {\n strategy?: LexicalStrategy;\n text: string | null | undefined;\n weight: number;\n};\n\nexport type LexicalRerankOptions = {\n lexicalWeight?: number;\n rankWeight?: number;\n};\n\nconst TOKEN_SPLIT_REGEX = /[^a-z0-9]+/;\nconst NON_ALPHANUMERIC_REGEX = /[^a-z0-9]/g;\n\n/** Stop words that add noise to scoring. */\nconst STOP_WORDS = new Set([\n \"the\",\n \"a\",\n \"an\",\n \"and\",\n \"or\",\n \"but\",\n \"in\",\n \"on\",\n \"at\",\n \"to\",\n \"for\",\n \"of\",\n \"with\",\n \"by\",\n \"from\",\n \"is\",\n \"it\",\n \"as\",\n \"be\",\n \"was\",\n \"are\",\n \"this\",\n \"that\",\n \"has\",\n \"had\",\n \"have\",\n \"not\",\n \"all\",\n \"can\",\n \"do\",\n \"its\",\n \"may\",\n \"will\",\n \"how\",\n \"what\",\n \"which\",\n \"who\",\n \"when\",\n \"where\",\n \"than\",\n \"then\",\n \"each\",\n \"into\",\n \"such\",\n \"any\",\n \"been\",\n \"if\",\n \"would\",\n \"about\",\n \"should\",\n \"these\",\n \"those\",\n \"their\",\n \"we\",\n \"our\",\n \"so\",\n]);\n\n/** Tokenize a string into lowercase words, removing stop words. */\nexport function tokenizeSearchText(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n}\n\n/** Simple stemmer: strip common English suffixes for fuzzy matching. */\nexport function stemToken(word: string): string {\n if (word.length <= 4) {\n return word;\n }\n if (word.endsWith(\"ation\")) {\n return word.slice(0, -5);\n }\n if (word.endsWith(\"ment\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ness\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ical\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"tion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"sion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ing\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ous\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ive\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ity\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ics\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ly\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ed\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"er\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"es\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"al\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ic\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"s\") && !word.endsWith(\"ss\")) {\n return word.slice(0, -1);\n }\n return word;\n}\n\n/** Compute token overlap score between query tokens and text tokens. */\nexport function tokenOverlapScore(\n queryTokens: string[],\n textTokens: string[]\n): number {\n if (queryTokens.length === 0 || textTokens.length === 0) {\n return 0;\n }\n\n const stemmedText = new Set(textTokens.map(stemToken));\n let matchCount = 0;\n\n for (const queryToken of queryTokens) {\n const stemmedQuery = stemToken(queryToken);\n\n if (stemmedText.has(stemmedQuery)) {\n matchCount += 1;\n continue;\n }\n\n for (const textToken of stemmedText) {\n if (\n textToken.startsWith(stemmedQuery) ||\n stemmedQuery.startsWith(textToken)\n ) {\n matchCount += 0.5;\n break;\n }\n }\n }\n\n return matchCount / queryTokens.length;\n}\n\n/**\n * Extract character bigrams from text. Normalizes to lowercase, removes\n * non-alphanumeric characters, and generates overlapping pairs.\n */\nexport function bigramTokenize(text: string): Set<string> {\n const normalized = text.toLowerCase().replace(NON_ALPHANUMERIC_REGEX, \"\");\n const bigrams = new Set<string>();\n for (let i = 0; i < normalized.length - 1; i++) {\n bigrams.add(normalized.slice(i, i + 2));\n }\n return bigrams;\n}\n\n/**\n * Extract word-level tokens from text (for coarser matching).\n * Normalizes to lowercase, splits on non-alphanumeric.\n */\nexport function wordTokenize(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length > 1);\n}\n\n/** Jaccard similarity between two sets: |A ∩ B| / |A ∪ B|. */\nexport function jaccardSimilarity(\n setA: Set<string>,\n setB: Set<string>\n): number {\n if (setA.size === 0 && setB.size === 0) {\n return 0;\n }\n\n let intersectionSize = 0;\n const smaller = setA.size <= setB.size ? setA : setB;\n const larger = setA.size <= setB.size ? setB : setA;\n\n for (const item of smaller) {\n if (larger.has(item)) {\n intersectionSize++;\n }\n }\n\n const unionSize = setA.size + setB.size - intersectionSize;\n return unionSize === 0 ? 0 : intersectionSize / unionSize;\n}\n\n/** Exact word overlap score: fraction of type words found in input text. */\nexport function wordOverlapScore(\n inputWords: string[],\n typeWords: string[]\n): number {\n if (typeWords.length === 0) {\n return 0;\n }\n let matches = 0;\n for (const word of typeWords) {\n if (inputWords.includes(word)) {\n matches++;\n }\n }\n return matches / typeWords.length;\n}\n\n/** Pre-compute reusable lexical structures for a query. */\nexport function prepareLexicalQuery(query: string): PreparedLexicalQuery {\n return {\n raw: query,\n tokens: tokenizeSearchText(query),\n words: wordTokenize(query),\n bigrams: bigramTokenize(query),\n };\n}\n\n/** Score a single lexical signal against a prepared query. */\nexport function scoreLexicalSignal(\n query: PreparedLexicalQuery,\n signal: LexicalSignal\n): number {\n const text = signal.text?.trim();\n if (!text) {\n return 0;\n }\n\n switch (signal.strategy ?? \"tokenOverlap\") {\n case \"bigramJaccard\":\n return jaccardSimilarity(query.bigrams, bigramTokenize(text));\n case \"wordOverlap\":\n return wordOverlapScore(query.words, wordTokenize(text));\n default:\n return tokenOverlapScore(query.tokens, tokenizeSearchText(text));\n }\n}\n\n/** Weighted lexical score across multiple textual signals. */\nexport function scoreLexicalSignals(\n query: PreparedLexicalQuery,\n signals: LexicalSignal[]\n): number {\n let weightedScore = 0;\n let totalWeight = 0;\n\n for (const signal of signals) {\n if (!signal.text?.trim() || signal.weight <= 0) {\n continue;\n }\n weightedScore += scoreLexicalSignal(query, signal) * signal.weight;\n totalWeight += signal.weight;\n }\n\n return totalWeight === 0 ? 0 : weightedScore / totalWeight;\n}\n\n/** Map a candidate's original rank position into a 0..1 prior. */\nexport function rankWindowScore(index: number, total: number): number {\n if (total <= 1) {\n return 1;\n }\n const clampedIndex = Math.max(0, Math.min(index, total - 1));\n return 1 - clampedIndex / (total - 1);\n}\n\n/** Rerank a candidate window by lexical overlap while preserving original-rank prior. */\nexport function rerankLexicalWindow<T>(\n query: string,\n items: T[],\n getText: (item: T) => string | null | undefined,\n options?: LexicalRerankOptions\n): T[] {\n const preparedQuery = prepareLexicalQuery(query);\n if (preparedQuery.tokens.length === 0 || items.length <= 1) {\n return items;\n }\n\n const lexicalWeight = options?.lexicalWeight ?? 0.65;\n const rankWeight = options?.rankWeight ?? 0.35;\n\n return items\n .map((item, index) => {\n const lexicalScore = scoreLexicalSignals(preparedQuery, [\n { text: getText(item) ?? \"\", weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const rankScore = rankWindowScore(index, items.length);\n\n return {\n item,\n combinedScore: lexicalScore * lexicalWeight + rankScore * rankWeight,\n };\n })\n .sort((left, right) => right.combinedScore - left.combinedScore)\n .map(({ item }) => item);\n}\n","/**\n * @lucern/contracts — OntologiesV1 namespace (resource contracts)\n *\n * Ontology Matching Engine — L0 entity type classification and similarity scoring.\n * Provides bigram-based text similarity for matching free text against\n * ontology entity types. Domain-agnostic: works identically for companies,\n * molecules, code modules, or any tenant-defined entity vocabulary.\n *\n * Moved from src/ontology-matching.contract.ts in EK-16 T1 PR 2.\n * Compat shim remains at the old path until the Lucern 1.0.0 cut.\n */\n\nimport {\n bigramTokenize,\n jaccardSimilarity,\n prepareLexicalQuery,\n scoreLexicalSignals,\n wordOverlapScore,\n wordTokenize,\n} from \"../../text-matching.contract\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/** An entity type definition from a resolved ontology version. */\nexport type OntologyEntityType = {\n value: string;\n label: string;\n description?: string;\n subtypes?: Array<{ value: string; label: string; description?: string }>;\n};\n\n/** A scored match between input text and an entity type. */\nexport type EntityTypeMatch = {\n entityType: string;\n label: string;\n score: number;\n reason: string;\n};\n\n/** A candidate entity node that can be matched against a target node. */\nexport type EntityMatchCandidate = {\n nodeId: string;\n entityType: string;\n title: string;\n canonicalText: string;\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n};\n\n/** A scored entity match with suggested bridge edge type. */\nexport type EntityConnectionMatch = {\n entityNodeId: string;\n entityType: string;\n title: string;\n score: number;\n suggestedEdgeType: string;\n reason: string;\n};\n\n// =============================================================================\n// ENTITY TYPE SCORING\n// =============================================================================\n\n/** Weights for combining scoring signals. */\nconst MATCH_WEIGHTS = {\n tokenOverlap: 0.35,\n bigramSimilarity: 0.25,\n wordOverlap: 0.2,\n descriptionBonus: 0.2,\n} as const;\n\n/**\n * Score how well input text matches a single entity type definition.\n * Combines bigram Jaccard similarity, word overlap, and description matching.\n */\nexport function scoreEntityTypeMatch(\n inputText: string,\n entityType: OntologyEntityType\n): EntityTypeMatch {\n const preparedQuery = prepareLexicalQuery(inputText);\n const labelText = `${entityType.label} ${entityType.value}`;\n\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: labelText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n\n // Score against the type label (primary signal)\n const labelBigrams = bigramTokenize(entityType.label);\n const bigramScore = jaccardSimilarity(preparedQuery.bigrams, labelBigrams);\n\n // Word overlap with label + value\n const labelWords = wordTokenize(labelText);\n const wordScore = wordOverlapScore(preparedQuery.words, labelWords);\n\n // Description matching bonus (if description exists)\n let descScore = 0;\n if (entityType.description) {\n descScore = scoreLexicalSignals(preparedQuery, [\n { text: entityType.description, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n }\n\n // Check subtypes for additional matches\n let subtypeBonus = 0;\n if (entityType.subtypes && entityType.subtypes.length > 0) {\n for (const subtype of entityType.subtypes) {\n const subtypeScore = scoreLexicalSignals(preparedQuery, [\n {\n text: `${subtype.label} ${subtype.value} ${subtype.description || \"\"}`,\n weight: 1,\n strategy: \"tokenOverlap\",\n },\n ]);\n subtypeBonus = Math.max(subtypeBonus, subtypeScore * 0.3); // up to 30% subtype bonus\n }\n }\n\n const score = Math.min(\n 1.0,\n tokenScore * MATCH_WEIGHTS.tokenOverlap +\n bigramScore * MATCH_WEIGHTS.bigramSimilarity +\n wordScore * MATCH_WEIGHTS.wordOverlap +\n descScore * MATCH_WEIGHTS.descriptionBonus +\n subtypeBonus\n );\n\n // Generate human-readable reason\n const reasons: string[] = [];\n if (tokenScore > 0.3) {\n reasons.push(`stem match: ${(tokenScore * 100).toFixed(0)}%`);\n }\n if (bigramScore > 0.3) {\n reasons.push(`text similarity: ${(bigramScore * 100).toFixed(0)}%`);\n }\n if (wordScore > 0.3) {\n reasons.push(`word match: ${(wordScore * 100).toFixed(0)}%`);\n }\n if (descScore > 0.2) {\n reasons.push(\"description match\");\n }\n if (subtypeBonus > 0.05) {\n reasons.push(\"subtype match\");\n }\n const reason = reasons.length > 0 ? reasons.join(\", \") : \"low similarity\";\n\n return {\n entityType: entityType.value,\n label: entityType.label,\n score,\n reason,\n };\n}\n\n/**\n * Rank all entity types in an ontology against input text.\n * Returns matches sorted by score (descending), filtered to score > minScore.\n */\nexport function rankEntityTypeMatches(\n inputText: string,\n entityTypes: OntologyEntityType[],\n options?: { minScore?: number; limit?: number }\n): EntityTypeMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n const matches = entityTypes\n .map((et) => scoreEntityTypeMatch(inputText, et))\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n\n return matches;\n}\n\n// =============================================================================\n// ENTITY DISCOVERY SCORING\n// =============================================================================\n\n/**\n * Score how well a node's text matches an entity candidate.\n * Used by discover_entity_connections to suggest missing bridge edges.\n */\nexport function scoreEntityConnection(\n nodeText: string,\n candidate: EntityMatchCandidate,\n options?: { connectivityWeight?: number }\n): EntityConnectionMatch {\n const preparedQuery = prepareLexicalQuery(nodeText);\n const connectivityWeight = options?.connectivityWeight ?? 0.3;\n const textWeight = 1.0 - connectivityWeight;\n const candidateText = `${candidate.title} ${candidate.canonicalText}`;\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const textScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"bigramJaccard\" },\n ]);\n const wordScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"wordOverlap\" },\n ]);\n\n // Connectivity signal (normalized externally by caller)\n const maxConnections = Math.max(\n 1,\n candidate.connectedBeliefCount + candidate.connectedEvidenceCount\n );\n const connectivityScore = Math.min(1.0, maxConnections / 10); // soft-cap at 10\n\n const combinedTextScore =\n tokenScore * 0.45 + textScore * 0.35 + wordScore * 0.2;\n const score =\n combinedTextScore * textWeight + connectivityScore * connectivityWeight;\n\n // Suggest edge type based on entity type\n const suggestedEdgeType = suggestEdgeType(candidate.entityType);\n\n const reason =\n tokenScore > 0.3\n ? `stem match: ${(tokenScore * 100).toFixed(0)}%`\n : textScore > 0.2\n ? `name similarity: ${(textScore * 100).toFixed(0)}%`\n : wordScore > 0.2\n ? `keyword match: ${(wordScore * 100).toFixed(0)}%`\n : `connectivity: ${candidate.connectedBeliefCount} beliefs`;\n\n return {\n entityNodeId: candidate.nodeId,\n entityType: candidate.entityType,\n title: candidate.title,\n score,\n suggestedEdgeType,\n reason,\n };\n}\n\n/**\n * Suggest the most appropriate bridge edge type for an entity type.\n */\nfunction suggestEdgeType(entityType: string): string {\n switch (entityType) {\n case \"company\":\n case \"person\":\n case \"investor\":\n return \"contains\";\n case \"function\":\n case \"value_chain\":\n return \"impacts\";\n default:\n return \"contains\";\n }\n}\n\n/**\n * Rank entity candidates against a node's text.\n * Returns sorted matches above the minimum score threshold.\n */\nexport function rankEntityConnections(\n nodeText: string,\n candidates: EntityMatchCandidate[],\n options?: { minScore?: number; limit?: number; connectivityWeight?: number }\n): EntityConnectionMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n return candidates\n .map((c) =>\n scoreEntityConnection(nodeText, c, {\n connectivityWeight: options?.connectivityWeight,\n })\n )\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n}\n","/**\n * Gateway response helpers — Lucern-owned versions of the functions\n * previously imported from Stack's gateway.ts.\n *\n * These provide the standard JSON envelope for success/error responses\n * across all Lucern gateway route handlers.\n */\n\nimport { NextResponse } from \"next/server\";\nimport type {\n GatewayErrorArgs,\n GatewaySuccessArgs,\n PlatformApiErrorCode,\n} from \"@lucern/contracts\";\n\nexport { requireActorPrincipalId } from \"@lucern/contracts\";\n\n// ---------------------------------------------------------------------------\n// Header builder\n// ---------------------------------------------------------------------------\n\nfunction buildHeaders(args: {\n correlationId: string;\n policyTraceId?: string;\n}): HeadersInit {\n const headers = new Headers();\n headers.set(\"x-lucern-correlation-id\", args.correlationId);\n if (args.policyTraceId) {\n headers.set(\"x-lucern-policy-trace-id\", args.policyTraceId);\n }\n return headers;\n}\n\n// ---------------------------------------------------------------------------\n// Error message sanitization\n// ---------------------------------------------------------------------------\n\nconst SENSITIVE_PATTERNS = [\n /convex/i,\n /internal.*error/i,\n /stack.*trace/i,\n /at\\s+\\w+\\s+\\(/,\n];\n\nfunction sanitizeErrorMessage(args: {\n message: string;\n status: number;\n code: PlatformApiErrorCode;\n}): string {\n if (args.status < 500) return args.message;\n for (const pattern of SENSITIVE_PATTERNS) {\n if (pattern.test(args.message)) {\n return `Request failed with ${args.code}`;\n }\n }\n return args.message;\n}\n\n// ---------------------------------------------------------------------------\n// Error code mapping\n// ---------------------------------------------------------------------------\n\nfunction isPlatformApiErrorCode(code: string): code is PlatformApiErrorCode {\n const VALID_CODES: ReadonlySet<string> = new Set([\n \"AUTH_REQUIRED\",\n \"AUTHENTICATION_REQUIRED\",\n \"AUTH_TOKEN_MISSING\",\n \"INVALID_REQUEST\",\n \"IDEMPOTENCY_KEY_REQUIRED\",\n \"FORBIDDEN\",\n \"SCOPE_INSUFFICIENT\",\n \"ENVIRONMENT_MISMATCH\",\n \"KEY_EXPIRED\",\n \"KEY_REVOKED\",\n \"RATE_LIMIT_EXCEEDED\",\n \"NOT_FOUND\",\n \"CONFLICT\",\n \"UPSTREAM_ERROR\",\n \"INTERNAL_ERROR\",\n ]);\n return VALID_CODES.has(code);\n}\n\nfunction statusToErrorCode(status: number): PlatformApiErrorCode {\n if (status === 400) return \"INVALID_REQUEST\";\n if (status === 401) return \"AUTH_REQUIRED\";\n if (status === 403) return \"FORBIDDEN\";\n if (status === 404) return \"NOT_FOUND\";\n if (status === 409) return \"CONFLICT\";\n if (status === 429) return \"RATE_LIMIT_EXCEEDED\";\n return \"INTERNAL_ERROR\";\n}\n\nfunction normalizeErrorStatus(error: unknown): number {\n if (\n error &&\n typeof error === \"object\" &&\n \"status\" in error &&\n typeof (error as { status: unknown }).status === \"number\"\n ) {\n return (error as { status: number }).status;\n }\n return 500;\n}\n\nfunction defaultInvariantForCode(\n code: PlatformApiErrorCode\n): string | undefined {\n switch (code) {\n case \"AUTH_REQUIRED\":\n case \"AUTHENTICATION_REQUIRED\":\n case \"AUTH_TOKEN_MISSING\":\n return \"auth.required\";\n case \"IDEMPOTENCY_KEY_REQUIRED\":\n return \"mutation.idempotent_required\";\n case \"SCOPE_INSUFFICIENT\":\n return \"policy.scope_required\";\n case \"ENVIRONMENT_MISMATCH\":\n return \"auth.environment_match_required\";\n case \"KEY_EXPIRED\":\n return \"auth.key_not_expired\";\n case \"KEY_REVOKED\":\n return \"auth.key_not_revoked\";\n case \"RATE_LIMIT_EXCEEDED\":\n return \"traffic.rate_limit\";\n case \"INVALID_REQUEST\":\n return \"request.valid_shape\";\n case \"FORBIDDEN\":\n return \"policy.access_denied\";\n default:\n return undefined;\n }\n}\n\nfunction defaultSuggestionForCode(\n code: PlatformApiErrorCode\n): string | undefined {\n switch (code) {\n case \"AUTH_REQUIRED\":\n case \"AUTHENTICATION_REQUIRED\":\n case \"AUTH_TOKEN_MISSING\":\n return \"Include a valid Authorization header.\";\n case \"SCOPE_INSUFFICIENT\":\n return \"Request additional scopes for this operation.\";\n case \"KEY_EXPIRED\":\n return \"Rotate or renew your API key.\";\n case \"KEY_REVOKED\":\n return \"Contact your tenant admin for a new key.\";\n case \"RATE_LIMIT_EXCEEDED\":\n return \"Retry after the Retry-After period.\";\n default:\n return undefined;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public response helpers\n// ---------------------------------------------------------------------------\n\ntype GatewayStructuredError = {\n message?: string;\n status?: number;\n code?: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nfunction isGatewayStructuredError(\n error: unknown\n): error is GatewayStructuredError {\n return (\n typeof error === \"object\" &&\n error !== null &&\n (\"message\" in error || \"status\" in error || \"code\" in error)\n );\n}\n\nexport function resolveGatewayError(\n error: unknown,\n fallbackMessage: string\n): {\n status: number;\n code: PlatformApiErrorCode;\n message: string;\n invariant?: string;\n suggestion?: string;\n details?: unknown;\n} {\n const structured = isGatewayStructuredError(error) ? error : null;\n const structuredStatus =\n typeof structured?.status === \"number\" && Number.isFinite(structured.status)\n ? Math.trunc(structured.status)\n : undefined;\n const status = structuredStatus ?? normalizeErrorStatus(error);\n const structuredCode =\n typeof structured?.code === \"string\" ? structured.code : undefined;\n const code =\n structuredCode && isPlatformApiErrorCode(structuredCode)\n ? structuredCode\n : statusToErrorCode(status);\n\n const structuredMessage =\n typeof structured?.message === \"string\" &&\n structured.message.trim().length > 0\n ? structured.message.trim()\n : undefined;\n const message =\n structuredMessage ??\n (error instanceof Error && error.message ? error.message : fallbackMessage);\n\n return {\n status,\n code,\n message,\n invariant:\n typeof structured?.invariantCode === \"string\"\n ? structured.invariantCode\n : undefined,\n suggestion:\n typeof structured?.suggestion === \"string\"\n ? structured.suggestion\n : undefined,\n details: structured?.details,\n };\n}\n\nexport function successResponse<T>(\n payload: T,\n args: GatewaySuccessArgs\n): NextResponse {\n return NextResponse.json(\n {\n success: true,\n data: payload,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId ?? null,\n idempotentReplay: args.idempotentReplay ?? false,\n },\n {\n status: args.status ?? 200,\n headers: buildHeaders({\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n }),\n }\n );\n}\n\nexport function errorResponse(args: GatewayErrorArgs): NextResponse {\n const headers = new Headers(\n buildHeaders({\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n })\n );\n if (args.headers) {\n for (const [key, value] of Object.entries(args.headers)) {\n if (value === undefined || value === null) {\n continue;\n }\n headers.set(key, String(value));\n }\n }\n\n const safeMessage = sanitizeErrorMessage({\n message: args.message,\n status: args.status,\n code: args.code,\n });\n\n return NextResponse.json(\n {\n success: false,\n error: safeMessage,\n code: args.code,\n invariant: args.invariant ?? defaultInvariantForCode(args.code) ?? null,\n suggestion:\n args.suggestion ?? defaultSuggestionForCode(args.code) ?? null,\n details: args.details,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId ?? null,\n },\n {\n status: args.status,\n headers,\n }\n );\n}\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 decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype BeliefRecordStatus = \"active\" | \"superseded\" | \"archived\";\ntype BeliefScoringState = \"unscored\" | \"scored\";\ntype BeliefForkReason =\n | \"refinement\"\n | \"contradiction_response\"\n | \"scope_change\"\n | \"confidence_collapse\"\n | \"manual\";\ntype BeliefConfidenceTrigger =\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"manual\"\n | \"decay\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\";\ntype ContractConditionType =\n | \"assertion\"\n | \"temporal\"\n | \"evidential\"\n | \"threshold\"\n | \"composite\";\ntype ContractDirection = \"confirms\" | \"falsifies\";\ntype ContractCompositeOperator = \"all\" | \"any\" | \"majority\";\ntype ContractEvaluationSchedule =\n | \"on_demand\"\n | \"on_evidence\"\n | \"periodic\"\n | \"event_driven\";\ntype BisectExpectedDirection = \"overconfident\" | \"underconfident\";\n\ntype StructuredBeliefsError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type BeliefRecord = {\n id: string;\n nodeId: string;\n beliefId: string;\n globalId?: string;\n topicId?: string;\n text: string;\n canonicalText: string;\n formulation: string;\n status: BeliefRecordStatus;\n scoringState: BeliefScoringState;\n confidence?: number;\n beliefStatus?: string;\n title?: string;\n sourceType?: string;\n beliefType?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type BeliefListResult = {\n beliefs: BeliefRecord[];\n nextCursor: null;\n};\n\nexport type BeliefLineageEntry = {\n beliefId: string;\n nodeId: string;\n formulation: string;\n forkReason?: string;\n createdAt?: number;\n};\n\nexport type BeliefLineageResult = {\n beliefId: string;\n lineage: BeliefLineageEntry[];\n};\n\nexport type BeliefConfidenceHistoryEntry = {\n id?: string;\n confidence: number;\n trigger: BeliefConfidenceTrigger | string;\n rationale?: string;\n timestamp?: number;\n userId?: string;\n opinion?: {\n b?: number;\n d?: number;\n u?: number;\n a?: number;\n };\n};\n\nexport type BeliefConfidenceHistoryResult = {\n beliefId: string;\n entries: BeliefConfidenceHistoryEntry[];\n nextCursor: null;\n};\n\nexport type BeliefPropagationTarget = {\n beliefId: string;\n edgeType: \"supports\" | \"depends_on\";\n direction: \"incoming\" | \"outgoing\";\n confidence?: number;\n formulation?: string;\n};\n\nexport type BeliefConfidenceUpdateResult = {\n beliefId: string;\n nodeId: string;\n previousConfidence: number;\n newConfidence: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n requestId: string;\n propagationSummary: {\n mode: \"scheduled\";\n bounded: true;\n totalCandidateTargets: number;\n inlineTargets: BeliefPropagationTarget[];\n remainingTargetCount: number;\n };\n opinion?: {\n b?: number;\n d?: number;\n u?: number;\n a?: number;\n };\n historyEntry?: BeliefConfidenceHistoryEntry;\n};\n\nexport type BeliefArchiveResult = BeliefRecord & {\n previousStatus?: string;\n newStatus: \"archived\";\n};\n\nexport type BeliefRefineInput = {\n id: string;\n text: string;\n rationale?: string;\n};\n\nexport type BeliefContractCreateInput = {\n title: string;\n description?: string;\n conditionType: ContractConditionType;\n direction: ContractDirection;\n condition: {\n expression: string;\n evaluator: string;\n evaluatorConfig?: Record<string, unknown>;\n };\n deadline?: number;\n compositeOf?: string[];\n compositeOperator?: ContractCompositeOperator;\n modulation: {\n onConfirmed: {\n delta: number;\n ceiling?: number;\n };\n onDisconfirmed: {\n delta: number;\n floor?: number;\n };\n onExpired?: {\n delta: number;\n };\n onPartial?: {\n threshold: number;\n delta: number;\n };\n };\n evaluationSchedule: ContractEvaluationSchedule;\n periodicIntervalMs?: number;\n};\n\nexport type BeliefContractCreateResult = {\n id: string;\n contractId: string;\n beliefId: string;\n status: string;\n title: string;\n storageId?: string;\n};\n\nexport type BeliefBisectResult = {\n beliefId: string;\n expectedDirection: BisectExpectedDirection;\n inflectionEntry: BeliefConfidenceHistoryEntry | null;\n triggerEvent: string | null;\n confidenceBefore: number | null;\n confidenceAfter: number | null;\n totalEntries: number;\n inflectionIndex: number | null;\n};\n\nexport type CreateBeliefInput = {\n topicId: string;\n text: string;\n rationale?: string;\n worktreeId?: string;\n pillar?: string;\n sourceBeliefIds?: string[];\n sourceType?: string;\n beliefType?: string;\n reversibility?: string;\n predictionMeta?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\nexport type ListBeliefsQuery = {\n topicId?: string;\n status?: string;\n worktreeId?: string;\n minConfidence?: number;\n limit?: number;\n cursor?: string;\n includeEdgeAssociated?: boolean;\n};\n\nexport type ForkBeliefInput = {\n id: string;\n text: string;\n forkReason?: BeliefForkReason | string;\n rationale?: string;\n};\n\nexport type UpdateBeliefConfidenceInput = {\n id: string;\n confidence: number;\n trigger?: string;\n rationale: string;\n certainty?: number;\n maxInlinePropagationTargets?: number;\n};\n\nexport type ArchiveBeliefInput = {\n id: string;\n reason?: string;\n};\n\nexport type CreateBeliefContractRequest = {\n id: string;\n input: BeliefContractCreateInput;\n};\n\nexport type BisectBeliefConfidenceInput = {\n id: string;\n expectedDirection: BisectExpectedDirection;\n timeRange?: {\n start: number;\n end: number;\n };\n};\n\ntype BeliefCreatePortInput = {\n topicId: string;\n text: string;\n rationale?: string;\n worktreeId?: string;\n pillar?: string;\n sourceBeliefRawIds?: string[];\n sourceType?: string;\n beliefType?: string;\n reversibility?: string;\n predictionMeta?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\ntype BeliefForkPortInput = {\n beliefRawId: string;\n text: string;\n forkReason: BeliefForkReason;\n rationale?: string;\n};\n\ntype BeliefRefinePortInput = {\n beliefRawId: string;\n text: string;\n rationale?: string;\n};\n\ntype BeliefConfidencePortInput = {\n beliefRawId: string;\n confidence: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n certainty?: number;\n};\n\ntype BeliefArchivePortInput = {\n beliefRawId: string;\n reason?: string;\n};\n\ntype BeliefContractPortInput = {\n beliefRawId: string;\n input: BeliefContractCreateInput;\n};\n\nexport type BeliefPort = {\n fetchBelief: (rawId: string) => Promise<unknown | null>;\n listBeliefsByTopic: (args: {\n topicId: string;\n status?: BeliefRecordStatus;\n limit?: number;\n includeEdgeAssociated?: boolean;\n }) => Promise<unknown[]>;\n createBelief: (input: BeliefCreatePortInput) => Promise<unknown>;\n refineBelief: (input: BeliefRefinePortInput) => Promise<unknown>;\n forkBelief: (input: BeliefForkPortInput) => Promise<unknown>;\n modulateConfidence: (input: BeliefConfidencePortInput) => Promise<unknown>;\n archiveBelief: (input: BeliefArchivePortInput) => Promise<unknown>;\n getLineage: (rawId: string) => Promise<unknown[]>;\n getConfidenceHistory: (rawId: string) => Promise<unknown[]>;\n createContract: (input: BeliefContractPortInput) => Promise<unknown>;\n getRelationships: (rawId: string) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asOptionalRecord(\n value: unknown\n): Record<string, unknown> | undefined {\n const record = asRecord(value);\n return Object.keys(record).length > 0 ? record : undefined;\n}\n\nfunction 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throwBeliefsError({\n message: `[beliefs] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction throwBeliefsError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredBeliefsError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throwBeliefsError({\n message: `[beliefs] Expected ${expectedPrefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${expectedPrefix}_ identifier for this operation.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"[beliefs]\")) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeBeliefRecordStatus(value: unknown): BeliefRecordStatus {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"active\" ||\n normalized === \"superseded\" ||\n normalized === \"archived\"\n ) {\n return normalized;\n }\n return \"active\";\n}\n\nfunction normalizeListStatus(\n value: unknown\n): BeliefRecordStatus | \"scored\" | \"unscored\" | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"active\" ||\n normalized === \"superseded\" ||\n normalized === \"archived\" ||\n normalized === \"scored\" ||\n normalized === \"unscored\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeForkReason(value: unknown): BeliefForkReason {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"refinement\" ||\n normalized === \"contradiction_response\" ||\n normalized === \"scope_change\" ||\n normalized === \"confidence_collapse\" ||\n normalized === \"manual\"\n ) {\n return normalized;\n }\n return \"manual\";\n}\n\nfunction normalizeConfidenceTrigger(value: unknown): BeliefConfidenceTrigger {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"merge_outcome\":\n case \"sprint_outcome\":\n return \"worktree_outcome\";\n case \"sprint_completed\":\n return \"worktree_completed\";\n case \"evidence_added\":\n case \"evidence_removed\":\n case \"contradiction_detected\":\n case \"contradiction_resolved\":\n case \"manual\":\n case \"decay\":\n case \"agent_assessment\":\n case \"worktree_outcome\":\n case \"worktree_completed\":\n return normalized;\n default:\n return \"manual\";\n }\n}\n\nfunction normalizeConditionType(value: unknown): ContractConditionType {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"assertion\":\n case \"temporal\":\n case \"evidential\":\n case \"threshold\":\n case \"composite\":\n return normalized;\n default:\n throwBeliefsError({\n message: \"[beliefs] conditionType is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion:\n \"Use one of assertion, temporal, evidential, threshold, or composite.\",\n });\n }\n}\n\nfunction normalizeContractDirection(value: unknown): ContractDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"confirms\" || normalized === \"falsifies\") {\n return normalized;\n }\n throwBeliefsError({\n message: \"[beliefs] direction is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Use confirms or falsifies for contract direction.\",\n });\n}\n\nfunction normalizeCompositeOperator(\n value: unknown\n): ContractCompositeOperator | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"all\" ||\n normalized === \"any\" ||\n normalized === \"majority\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeEvaluationSchedule(\n value: unknown\n): ContractEvaluationSchedule {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"on_demand\":\n case \"on_evidence\":\n case \"periodic\":\n case \"event_driven\":\n return normalized;\n default:\n throwBeliefsError({\n message: \"[beliefs] evaluationSchedule is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion:\n \"Use on_demand, on_evidence, periodic, or event_driven.\",\n });\n }\n}\n\nfunction normalizeExpectedDirection(value: unknown): BisectExpectedDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"overconfident\" || normalized === \"underconfident\") {\n return normalized;\n }\n throwBeliefsError({\n message: \"[beliefs] expectedDirection is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Use overconfident or underconfident for bisect queries.\",\n });\n}\n\nfunction normalizeTimeRange(\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 if (start === undefined || end === undefined || start > end) {\n throwBeliefsError({\n message: \"[beliefs] timeRange must include finite start/end values.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion:\n \"Provide timeRange as { start: <epochMs>, end: <epochMs> } with start <= end.\",\n });\n }\n\n return { start, end };\n}\n\nfunction createRequestId(): string {\n return globalThis.crypto?.randomUUID?.()\n ? globalThis.crypto.randomUUID()\n : `req_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction normalizeBeliefRecord(value: unknown): BeliefRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const rawId = decodeExternalId(\n normalizeRequiredString(\n record._id ?? record.nodeId ?? record.beliefId,\n \"beliefId\"\n ),\n \"bel\"\n );\n const canonicalId = encodeId(\"bel\", rawId);\n const confidence = readNumber(record.confidence);\n const text =\n readString(record.canonicalText) ??\n readString(record.formulation) ??\n readString(record.text) ??\n \"\";\n\n return {\n id: canonicalId,\n nodeId: canonicalId,\n beliefId: canonicalId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n text,\n canonicalText: text,\n formulation: text,\n status: normalizeBeliefRecordStatus(record.status ?? metadata.status),\n scoringState: confidence === undefined ? \"unscored\" : \"scored\",\n ...(confidence !== undefined ? { confidence } : {}),\n ...(readString(record.beliefStatus) ?? readString(metadata.beliefStatus)\n ? {\n beliefStatus:\n readString(record.beliefStatus) ??\n readString(metadata.beliefStatus)!,\n }\n : {}),\n ...(readString(record.title) ? { title: readString(record.title)! } : {}),\n ...(readString(record.sourceType)\n ? { sourceType: readString(record.sourceType)! }\n : {}),\n ...(readString(record.beliefType) ?? readString(metadata.beliefType)\n ? {\n beliefType:\n readString(record.beliefType) ??\n readString(metadata.beliefType)!,\n }\n : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction normalizeLineageEntry(value: unknown): BeliefLineageEntry {\n const record = asRecord(value);\n const rawId = decodeExternalId(\n normalizeRequiredString(record.nodeId ?? record.beliefId, \"nodeId\"),\n \"bel\"\n );\n const canonicalId = encodeId(\"bel\", rawId);\n\n return {\n beliefId: canonicalId,\n nodeId: canonicalId,\n formulation:\n readString(record.formulation) ??\n readString(record.canonicalText) ??\n readString(record.text) ??\n \"\",\n ...(readString(record.forkReason)\n ? { forkReason: readString(record.forkReason)! }\n : {}),\n ...(readNumber(record.createdAt)\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n };\n}\n\nfunction normalizeHistoryEntry(value: unknown): BeliefConfidenceHistoryEntry {\n const record = asRecord(value);\n const opinion: Record<string, number> = {};\n\n const belief = readNumber(record.belief);\n const disbelief = readNumber(record.disbelief);\n const uncertainty = readNumber(record.uncertainty);\n const baseRate = readNumber(record.baseRate);\n\n if (belief !== undefined) {\n opinion.b = belief;\n }\n if (disbelief !== undefined) {\n opinion.d = disbelief;\n }\n if (uncertainty !== undefined) {\n opinion.u = uncertainty;\n }\n if (baseRate !== undefined) {\n opinion.a = baseRate;\n }\n\n return {\n ...(readString(record._id) ? { id: readString(record._id)! } : {}),\n confidence: clampNumber(readNumber(record.confidence) ?? 0, 0, 1),\n trigger: readString(record.trigger) ?? \"manual\",\n ...(readString(record.rationale)\n ? { rationale: readString(record.rationale)! }\n : {}),\n ...(readNumber(record.assessedAt) ?? readNumber(record.timestamp)\n ? {\n timestamp:\n readNumber(record.assessedAt) ?? readNumber(record.timestamp)!,\n }\n : {}),\n ...(readString(record.assessedBy) ?? readString(record.userId)\n ? {\n userId: readString(record.assessedBy) ?? readString(record.userId)!,\n }\n : {}),\n ...(Object.keys(opinion).length > 0 ? { opinion } : {}),\n };\n}\n\nfunction normalizeContractInput(\n input: BeliefContractCreateInput\n): BeliefContractCreateInput {\n return {\n title: normalizeRequiredString(input.title, \"title\"),\n ...(readString(input.description) ? { description: readString(input.description)! } : {}),\n conditionType: normalizeConditionType(input.conditionType),\n direction: normalizeContractDirection(input.direction),\n condition: {\n expression: normalizeRequiredString(input.condition?.expression, \"condition.expression\"),\n evaluator: normalizeRequiredString(input.condition?.evaluator, \"condition.evaluator\"),\n ...(input.condition?.evaluatorConfig\n ? { evaluatorConfig: asRecord(input.condition.evaluatorConfig) }\n : {}),\n },\n ...(readNumber(input.deadline) ? { deadline: readNumber(input.deadline)! } : {}),\n ...(readStringArray(input.compositeOf)\n ? { compositeOf: readStringArray(input.compositeOf)! }\n : {}),\n ...(normalizeCompositeOperator(input.compositeOperator)\n ? { compositeOperator: normalizeCompositeOperator(input.compositeOperator)! }\n : {}),\n modulation: {\n onConfirmed: {\n delta: readNumber(input.modulation?.onConfirmed?.delta) ?? 0,\n ...(readNumber(input.modulation?.onConfirmed?.ceiling) !== undefined\n ? {\n ceiling: readNumber(input.modulation?.onConfirmed?.ceiling)!,\n }\n : {}),\n },\n onDisconfirmed: {\n delta: readNumber(input.modulation?.onDisconfirmed?.delta) ?? 0,\n ...(readNumber(input.modulation?.onDisconfirmed?.floor) !== undefined\n ? {\n floor: readNumber(input.modulation?.onDisconfirmed?.floor)!,\n }\n : {}),\n },\n ...(input.modulation?.onExpired\n ? {\n onExpired: {\n delta: readNumber(input.modulation.onExpired.delta) ?? 0,\n },\n }\n : {}),\n ...(input.modulation?.onPartial\n ? {\n onPartial: {\n threshold: readNumber(input.modulation.onPartial.threshold) ?? 0,\n delta: readNumber(input.modulation.onPartial.delta) ?? 0,\n },\n }\n : {}),\n },\n evaluationSchedule: normalizeEvaluationSchedule(input.evaluationSchedule),\n ...(readNumber(input.periodicIntervalMs) !== undefined\n ? { periodicIntervalMs: readNumber(input.periodicIntervalMs)! }\n : {}),\n };\n}\n\nfunction normalizeContractCreateResult(\n beliefId: string,\n input: BeliefContractCreateInput,\n created: unknown\n): BeliefContractCreateResult {\n const record = asRecord(created);\n const contractId =\n readString(record.contractId) ??\n readString(record.id) ??\n readString(record._id) ??\n createRequestId();\n\n return {\n id: contractId,\n contractId,\n beliefId,\n status: readString(record.status) ?? \"active\",\n title: input.title,\n ...(readString(record.id) && readString(record.id) !== contractId\n ? { storageId: readString(record.id)! }\n : {}),\n };\n}\n\nfunction filterBeliefs(\n beliefs: BeliefRecord[],\n query: ListBeliefsQuery\n): BeliefRecord[] {\n const status = normalizeListStatus(query.status);\n\n return beliefs.filter((belief) => {\n if (status === \"active\" || status === \"superseded\" || status === \"archived\") {\n if (belief.status !== status) {\n return false;\n }\n }\n\n if (status === \"scored\" || status === \"unscored\") {\n if (belief.scoringState !== status) {\n return false;\n }\n }\n\n if (\n typeof query.minConfidence === \"number\" &&\n (belief.confidence === undefined || belief.confidence < query.minConfidence)\n ) {\n return false;\n }\n\n if (query.worktreeId) {\n const linkedWorktreeId =\n readString(belief.metadata?.worktreeId) ??\n readString(belief.metadata?.sprintId);\n if (linkedWorktreeId !== query.worktreeId) {\n return false;\n }\n }\n\n return true;\n });\n}\n\nfunction normalizePortListStatus(\n status: string | undefined\n): BeliefRecordStatus | undefined {\n const normalized = normalizeListStatus(status);\n if (\n normalized === \"active\" ||\n normalized === \"superseded\" ||\n normalized === \"archived\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction extractCreatedRawId(created: unknown): string {\n const record = asRecord(created);\n return decodeExternalId(\n normalizeRequiredString(\n record.nodeId ?? record.newNodeId ?? record.beliefId ?? record._id,\n \"beliefId\"\n ),\n \"bel\"\n );\n}\n\nfunction normalizeRelationships(\n relationships: unknown\n): BeliefPropagationTarget[] {\n const root = asRecord(relationships);\n const candidates: BeliefPropagationTarget[] = [];\n\n const pushCandidate = (\n container: unknown,\n direction: \"incoming\" | \"outgoing\",\n allowedEdgeType: \"supports\" | \"depends_on\"\n ) => {\n if (!Array.isArray(container)) {\n return;\n }\n\n for (const entry of container) {\n const record = asRecord(entry);\n const edge = asRecord(record.edge);\n const node = asRecord(record.node);\n const edgeType = readString(edge.edgeType);\n if (edgeType !== allowedEdgeType) {\n continue;\n }\n if (readString(node.nodeType) !== \"belief\") {\n continue;\n }\n\n const rawId = decodeExternalId(\n normalizeRequiredString(node._id ?? node.nodeId, \"beliefId\"),\n \"bel\"\n );\n candidates.push({\n beliefId: encodeId(\"bel\", rawId),\n edgeType: allowedEdgeType,\n direction,\n ...(readNumber(node.confidence) !== undefined\n ? { confidence: readNumber(node.confidence)! }\n : {}),\n ...(readString(node.canonicalText)\n ? { formulation: readString(node.canonicalText)! }\n : readString(node.text)\n ? { formulation: readString(node.text)! }\n : {}),\n });\n }\n };\n\n pushCandidate(root.outgoing, \"outgoing\", \"supports\");\n pushCandidate(root.incoming, \"incoming\", \"depends_on\");\n\n const deduped = new Map<string, BeliefPropagationTarget>();\n for (const candidate of candidates) {\n deduped.set(\n `${candidate.beliefId}:${candidate.edgeType}:${candidate.direction}`,\n candidate\n );\n }\n\n return [...deduped.values()];\n}\n\nfunction toOpinion(confidence: number, certainty?: number) {\n const boundedConfidence = clampNumber(confidence, 0, 1);\n const boundedCertainty =\n certainty === undefined\n ? boundedConfidence === 0.5\n ? 0.75\n : 1\n : clampNumber(certainty, 0, 1);\n\n const belief = boundedConfidence * boundedCertainty;\n const disbelief = (1 - boundedConfidence) * boundedCertainty;\n const uncertainty = clampNumber(1 - boundedCertainty, 0, 1);\n\n return {\n b: belief,\n d: disbelief,\n u: uncertainty,\n a: 0.5,\n };\n}\n\nexport async function createBelief(\n port: BeliefPort,\n input: CreateBeliefInput\n): Promise<BeliefRecord> {\n const created = await port.createBelief({\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n text: normalizeRequiredString(input.text, \"text\"),\n rationale: readString(input.rationale),\n worktreeId: readString(input.worktreeId),\n pillar: readString(input.pillar),\n sourceBeliefRawIds: readStringArray(input.sourceBeliefIds)?.map((id) =>\n decodeExternalId(id, \"bel\")\n ),\n sourceType: readString(input.sourceType),\n beliefType: readString(input.beliefType),\n reversibility: readString(input.reversibility),\n predictionMeta: asOptionalRecord(input.predictionMeta),\n metadata: asRecord(input.metadata),\n });\n\n const rawId = extractCreatedRawId(created);\n const record = await port.fetchBelief(rawId);\n return normalizeBeliefRecord(record ?? { ...(asRecord(created)), nodeId: rawId });\n}\n\nexport async function getBelief(\n port: BeliefPort,\n args: { id: string }\n): Promise<BeliefRecord> {\n const rawId = decodeExternalId(\n normalizeRequiredString(args.id, \"beliefId\"),\n \"bel\"\n );\n const record = await port.fetchBelief(rawId);\n if (!record) {\n throwBeliefsError({\n message: `Belief not found: ${args.id}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify the belief ID and topic scope, then retry.\",\n details: { beliefId: args.id },\n });\n }\n return normalizeBeliefRecord(record);\n}\n\nexport async function listBeliefs(\n port: BeliefPort,\n query: ListBeliefsQuery\n): Promise<BeliefListResult> {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n const beliefs = await port.listBeliefsByTopic({\n topicId,\n status: normalizePortListStatus(query.status),\n limit: query.limit,\n includeEdgeAssociated: query.includeEdgeAssociated,\n });\n\n const normalized = beliefs.map(normalizeBeliefRecord);\n return {\n beliefs: filterBeliefs(normalized, query),\n nextCursor: null,\n };\n}\n\nexport async function refineBelief(\n port: BeliefPort,\n input: BeliefRefineInput\n): Promise<BeliefRecord> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const existing = await port.fetchBelief(rawId);\n if (!existing) {\n throwBeliefsError({\n message: `Belief not found: ${input.id}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify the belief ID and topic scope, then retry.\",\n details: { beliefId: input.id },\n });\n }\n\n const record = normalizeBeliefRecord(existing);\n if (record.scoringState === \"scored\") {\n throwBeliefsError({\n message: \"[beliefs] Scored beliefs are immutable. Use fork instead.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Create a new version with beliefs.fork() when refining a scored belief.\",\n details: { beliefId: record.id, scoringState: record.scoringState },\n });\n }\n\n await port.refineBelief({\n beliefRawId: rawId,\n text: normalizeRequiredString(input.text, \"text\"),\n rationale: readString(input.rationale),\n });\n\n const refined = await port.fetchBelief(rawId);\n return normalizeBeliefRecord(refined ?? existing);\n}\n\nexport async function forkBelief(\n port: BeliefPort,\n input: ForkBeliefInput\n): Promise<BeliefRecord & { parentBeliefId: string; forkReason: BeliefForkReason }> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const forkReason = normalizeForkReason(input.forkReason);\n const result = await port.forkBelief({\n beliefRawId: rawId,\n text: normalizeRequiredString(input.text, \"text\"),\n forkReason,\n rationale: readString(input.rationale),\n });\n\n const nextRawId = extractCreatedRawId(result);\n const record = await port.fetchBelief(nextRawId);\n return {\n ...normalizeBeliefRecord(record ?? { ...(asRecord(result)), nodeId: nextRawId }),\n parentBeliefId: encodeId(\"bel\", rawId),\n forkReason,\n };\n}\n\nexport async function updateBeliefConfidence(\n port: BeliefPort,\n input: UpdateBeliefConfidenceInput\n): Promise<BeliefConfidenceUpdateResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const confidence = readNumber(input.confidence);\n if (confidence === undefined) {\n throwBeliefsError({\n message: \"[beliefs] confidence is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion: \"Provide a confidence value in [0, 1].\",\n });\n }\n if (confidence < 0 || confidence > 1) {\n throwBeliefsError({\n message: \"[beliefs] confidence must be within [0, 1].\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion: \"Clamp confidence into the inclusive [0, 1] interval.\",\n });\n }\n\n const trigger = normalizeConfidenceTrigger(input.trigger);\n const rationale = normalizeRequiredString(input.rationale, \"rationale\");\n const result = await port.modulateConfidence({\n beliefRawId: rawId,\n confidence,\n trigger,\n rationale,\n certainty: readNumber(input.certainty),\n });\n\n const requestId = createRequestId();\n const relationships = normalizeRelationships(await port.getRelationships(rawId));\n const maxInlineTargets = Math.max(\n 1,\n Math.min(\n Math.floor(readNumber(input.maxInlinePropagationTargets) ?? 10),\n 25\n )\n );\n const inlineTargets = relationships.slice(0, maxInlineTargets);\n const historyEntries = normalizeConfidenceHistory(\n encodeId(\"bel\", rawId),\n await port.getConfidenceHistory(rawId)\n ).entries;\n const latestEntry = historyEntries[0];\n const opinion = toOpinion(confidence, readNumber(input.certainty));\n\n return {\n beliefId: encodeId(\"bel\", rawId),\n nodeId: encodeId(\"bel\", rawId),\n previousConfidence:\n readNumber(asRecord(result).previousConfidence) ??\n latestEntry?.confidence ??\n 0.5,\n newConfidence:\n readNumber(asRecord(result).newConfidence) ??\n readNumber(asRecord(result).confidence) ??\n confidence,\n trigger,\n rationale,\n requestId,\n propagationSummary: {\n mode: \"scheduled\",\n bounded: true,\n totalCandidateTargets: relationships.length,\n inlineTargets,\n remainingTargetCount: Math.max(0, relationships.length - inlineTargets.length),\n },\n ...(asRecord(result).opinion && typeof asRecord(result).opinion === \"object\"\n ? { opinion: asRecord(asRecord(result).opinion) as any }\n : { opinion }),\n ...(latestEntry ? { historyEntry: latestEntry } : {}),\n };\n}\n\nexport async function archiveBelief(\n port: BeliefPort,\n input: ArchiveBeliefInput\n): Promise<BeliefArchiveResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const archived = await port.archiveBelief({\n beliefRawId: rawId,\n reason: readString(input.reason),\n });\n const archivedRecord = await port.fetchBelief(rawId);\n const normalized = normalizeBeliefRecord(\n archivedRecord ?? {\n ...(asRecord(archived)),\n nodeId: rawId,\n status: \"archived\",\n }\n );\n\n return {\n ...normalized,\n previousStatus: readString(asRecord(archived).previousStatus),\n newStatus: \"archived\",\n };\n}\n\nfunction normalizeConfidenceHistory(\n beliefId: string,\n entries: unknown[]\n): BeliefConfidenceHistoryResult {\n return {\n beliefId,\n entries: entries.map(normalizeHistoryEntry),\n nextCursor: null,\n };\n}\n\nexport async function getBeliefLineage(\n port: BeliefPort,\n args: { id: string }\n): Promise<BeliefLineageResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(args.id, \"beliefId\"),\n \"bel\"\n );\n const lineage = await port.getLineage(rawId);\n return {\n beliefId: encodeId(\"bel\", rawId),\n lineage: lineage.map(normalizeLineageEntry),\n };\n}\n\nexport async function getBeliefConfidenceHistory(\n port: BeliefPort,\n args: { id: string }\n): Promise<BeliefConfidenceHistoryResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(args.id, \"beliefId\"),\n \"bel\"\n );\n const history = await port.getConfidenceHistory(rawId);\n return normalizeConfidenceHistory(encodeId(\"bel\", rawId), history);\n}\n\nexport async function createBeliefContract(\n port: BeliefPort,\n request: CreateBeliefContractRequest\n): Promise<BeliefContractCreateResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(request.id, \"beliefId\"),\n \"bel\"\n );\n const input = normalizeContractInput(request.input);\n const created = await port.createContract({\n beliefRawId: rawId,\n input,\n });\n\n return normalizeContractCreateResult(encodeId(\"bel\", rawId), input, created);\n}\n\nexport async function bisectBeliefConfidence(\n port: BeliefPort,\n input: BisectBeliefConfidenceInput\n): Promise<BeliefBisectResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const expectedDirection = normalizeExpectedDirection(input.expectedDirection);\n const timeRange = normalizeTimeRange(input.timeRange);\n const history = normalizeConfidenceHistory(\n encodeId(\"bel\", rawId),\n await port.getConfidenceHistory(rawId)\n ).entries;\n\n const scoped = [...history]\n .filter((entry) => {\n if (!timeRange || entry.timestamp === undefined) {\n return true;\n }\n return entry.timestamp >= timeRange.start && entry.timestamp <= timeRange.end;\n })\n .sort((left, right) => (left.timestamp ?? 0) - (right.timestamp ?? 0));\n\n if (scoped.length === 0) {\n return {\n beliefId: encodeId(\"bel\", rawId),\n expectedDirection,\n inflectionEntry: null,\n triggerEvent: null,\n confidenceBefore: null,\n confidenceAfter: null,\n totalEntries: 0,\n inflectionIndex: null,\n };\n }\n\n let inflectionIndex = 0;\n let maxDelta = 0;\n\n for (let index = 1; index < scoped.length; index += 1) {\n const current = scoped[index];\n const previous = scoped[index - 1];\n const currentConfidence = current.confidence;\n const previousConfidence = previous.confidence;\n const delta = Math.abs(currentConfidence - previousConfidence);\n if (delta > maxDelta) {\n maxDelta = delta;\n inflectionIndex = index;\n }\n }\n\n const inflectionEntry = scoped[inflectionIndex] ?? null;\n const previousEntry = inflectionIndex > 0 ? scoped[inflectionIndex - 1] : null;\n\n return {\n beliefId: encodeId(\"bel\", rawId),\n expectedDirection,\n inflectionEntry,\n triggerEvent: inflectionEntry?.trigger ?? null,\n confidenceBefore: previousEntry?.confidence ?? null,\n confidenceAfter: inflectionEntry?.confidence ?? null,\n totalEntries: scoped.length,\n inflectionIndex,\n };\n}\n","import { api, components, internal } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n archiveBelief,\n bisectBeliefConfidence,\n createBelief,\n createBeliefContract,\n getBelief,\n getBeliefConfidenceHistory,\n getBeliefLineage,\n listBeliefs,\n refineBelief,\n forkBelief,\n updateBeliefConfidence,\n type BeliefPort,\n type BeliefContractCreateInput,\n type BeliefRefineInput,\n type BisectBeliefConfidenceInput,\n type CreateBeliefInput,\n type ListBeliefsQuery,\n type UpdateBeliefConfidenceInput,\n} from \"./domain/beliefs\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction toSubjectiveLogicOpinion(\n confidence: number,\n certainty?: number\n): {\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n} {\n const boundedConfidence = Math.max(0, Math.min(confidence, 1));\n const boundedCertainty =\n typeof certainty === \"number\" && Number.isFinite(certainty)\n ? Math.max(0, Math.min(certainty, 1))\n : boundedConfidence === 0.5\n ? 0.75\n : 1;\n\n return {\n belief: boundedConfidence * boundedCertainty,\n disbelief: (1 - boundedConfidence) * boundedCertainty,\n uncertainty: Math.max(0, 1 - boundedCertainty),\n baseRate: 0.5,\n };\n}\n\nfunction resolveBeliefNodeId(value: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n}): string {\n const normalized = value.id ?? value.nodeId ?? value.beliefId ?? \"\";\n try {\n const decoded = decodePrefixedId(normalized);\n return decoded.prefix === \"bel\" ? decoded.value : normalized;\n } catch {\n return normalized;\n }\n}\n\nfunction resolveExternalId(value: string | undefined): string | undefined {\n if (!value) {\n return value;\n }\n try {\n return decodePrefixedId(value).value;\n } catch {\n return value;\n }\n}\n\nasync function resolveBeliefTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n beliefId: string\n) {\n const normalizedBeliefId = resolveExternalId(beliefId) ?? beliefId;\n const belief = (await authContext.convex.query(\n api.epistemicBeliefs.getById,\n {\n beliefId: normalizedBeliefId as any,\n nodeId: normalizedBeliefId as any,\n }\n )) as Record<string, unknown> | null;\n return typeof belief?.topicId === \"string\" ? belief.topicId : undefined;\n}\n\nasync function resolveBeliefTopicIdWithMcpAuth(\n authContext: AuthContext,\n beliefId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveBeliefTopicIdWithMcpAuth\");\n const normalizedBeliefId = resolveExternalId(beliefId) ?? beliefId;\n const belief = (await convex.query(api.epistemicBeliefs.getById, {\n beliefId: normalizedBeliefId as any,\n nodeId: normalizedBeliefId as any,\n })) as Record<string, unknown> | null;\n return typeof belief?.topicId === \"string\" ? belief.topicId : undefined;\n}\n\nasync function emitBeliefEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"belief\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitBeliefEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitBeliefEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"belief\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayBeliefPort(authContext: GatewayAuthContext): BeliefPort {\n return {\n fetchBelief(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listBeliefsByTopic(args) {\n return authContext.convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n status: args.status,\n limit: args.limit,\n // includeEdgeAssociated is defined in the kernel query but generated\n // types lag until next `npx convex codegen`. Cast to satisfy TS.\n ...(args.includeEdgeAssociated\n ? { includeEdgeAssociated: true }\n : {}),\n } as any) as Promise<unknown[]>;\n },\n createBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.create, {\n topicId: input.topicId,\n formulation: input.text,\n rationale: input.rationale,\n worktreeId: input.worktreeId,\n pillar: input.pillar,\n sourceBeliefIds: input.sourceBeliefRawIds as any,\n sourceType: input.sourceType as any,\n beliefType: input.beliefType,\n reversibility: input.reversibility as any,\n metadata: input.metadata,\n userId: authContext.userId,\n ...(input.predictionMeta\n ? { predictionMeta: input.predictionMeta as any }\n : {}),\n });\n },\n refineBelief(input) {\n return authContext.convex.mutation(\n internal.lucernMcp.internalRefineBelief as any,\n {\n nodeId: input.beliefRawId as any,\n canonicalText: input.text,\n rationale: input.rationale,\n userId: authContext.userId,\n }\n );\n },\n forkBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.forkBelief, {\n parentNodeId: input.beliefRawId as any,\n newFormulation: input.text,\n forkReason: input.forkReason,\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n modulateConfidence(input) {\n const opinion = toSubjectiveLogicOpinion(\n input.confidence,\n input.certainty\n );\n return authContext.convex.mutation(api.epistemicBeliefs.modulateConfidence, {\n nodeId: input.beliefRawId as any,\n trigger: input.trigger,\n rationale: input.rationale,\n userId: authContext.userId,\n ...opinion,\n });\n },\n archiveBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.archive, {\n nodeId: input.beliefRawId as any,\n reason: input.reason,\n userId: authContext.userId,\n });\n },\n getLineage(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getLineage, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n getConfidenceHistory(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getConfidenceHistory, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n createContract(args) {\n return authContext.convex.mutation(\n api.epistemicContracts.createEpistemicContract as any,\n {\n beliefNodeId: args.beliefRawId as any,\n title: args.input.title,\n description: args.input.description,\n conditionType: args.input.conditionType,\n direction: args.input.direction,\n condition: args.input.condition,\n deadline: args.input.deadline,\n compositeOf: args.input.compositeOf,\n compositeOperator: args.input.compositeOperator,\n modulation: args.input.modulation,\n evaluationSchedule: args.input.evaluationSchedule,\n periodicIntervalMs: args.input.periodicIntervalMs,\n authenticatedUserId: authContext.userId,\n }\n );\n },\n getRelationships(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getRelationships, {\n nodeId: rawId as any,\n direction: \"both\",\n });\n },\n };\n}\n\nfunction createMcpBeliefPort(authContext: AuthContext): BeliefPort {\n const convex = requireMcpConvex(authContext, \"createMcpBeliefPort\");\n return {\n fetchBelief(rawId) {\n return convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listBeliefsByTopic(args) {\n return convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n status: args.status,\n limit: args.limit,\n ...(args.includeEdgeAssociated\n ? { includeEdgeAssociated: true }\n : {}),\n } as any) as Promise<unknown[]>;\n },\n createBelief(input) {\n return convex.mutation(api.epistemicBeliefs.create, {\n topicId: input.topicId,\n formulation: input.text,\n rationale: input.rationale,\n worktreeId: input.worktreeId,\n pillar: input.pillar,\n sourceBeliefIds: input.sourceBeliefRawIds as any,\n sourceType: input.sourceType as any,\n beliefType: input.beliefType,\n reversibility: input.reversibility as any,\n metadata: input.metadata,\n userId: authContext.userId,\n ...(input.predictionMeta\n ? { predictionMeta: input.predictionMeta as any }\n : {}),\n });\n },\n refineBelief(input) {\n return convex.mutation(internal.lucernMcp.internalRefineBelief, {\n nodeId: input.beliefRawId as any,\n canonicalText: input.text,\n rationale: input.rationale,\n userId: authContext.userId,\n mcpSessionId: authContext.sessionId,\n mcpToolName: \"refine_belief\",\n });\n },\n forkBelief(input) {\n return convex.mutation(api.epistemicBeliefs.forkBelief, {\n parentNodeId: input.beliefRawId as any,\n newFormulation: input.text,\n forkReason: input.forkReason,\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n modulateConfidence(input) {\n const opinion = toSubjectiveLogicOpinion(\n input.confidence,\n input.certainty\n );\n return convex.mutation(api.epistemicBeliefs.modulateConfidence, {\n nodeId: input.beliefRawId as any,\n trigger: input.trigger,\n rationale: input.rationale,\n userId: authContext.userId,\n ...opinion,\n });\n },\n archiveBelief(input) {\n return convex.mutation(api.epistemicBeliefs.archive, {\n nodeId: input.beliefRawId as any,\n reason: input.reason,\n userId: authContext.userId,\n });\n },\n getLineage(rawId) {\n return convex.query(api.epistemicBeliefs.getLineage, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n getConfidenceHistory(rawId) {\n return convex.query(api.epistemicBeliefs.getConfidenceHistory, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n createContract(args) {\n return convex.mutation(api.epistemicContracts.createEpistemicContract as any, {\n beliefNodeId: args.beliefRawId as any,\n title: args.input.title,\n description: args.input.description,\n conditionType: args.input.conditionType,\n direction: args.input.direction,\n condition: args.input.condition,\n deadline: args.input.deadline,\n compositeOf: args.input.compositeOf,\n compositeOperator: args.input.compositeOperator,\n modulation: args.input.modulation,\n evaluationSchedule: args.input.evaluationSchedule,\n periodicIntervalMs: args.input.periodicIntervalMs,\n authenticatedUserId: authContext.userId,\n });\n },\n getRelationships(rawId) {\n return convex.query(api.epistemicBeliefs.getRelationships, {\n nodeId: rawId as any,\n direction: \"both\",\n });\n },\n };\n}\n\nexport async function createBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateBeliefInput\n) {\n const payload = await createBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"belief.created\",\n resourceId: payload.id,\n data: {\n text: payload.text,\n rationale: input.rationale,\n worktreeId: input.worktreeId,\n pillar: input.pillar,\n sourceBeliefIds: input.sourceBeliefIds ?? [],\n sourceType: input.sourceType,\n beliefType: input.beliefType,\n reversibility: input.reversibility,\n predictionMeta: input.predictionMeta,\n metadata: input.metadata,\n },\n });\n return payload;\n}\n\nexport function getBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getBelief(createGatewayBeliefPort(authContext), { id });\n}\n\nexport function listBeliefsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListBeliefsQuery\n) {\n return listBeliefs(createGatewayBeliefPort(authContext), query);\n}\n\nexport async function refineBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: BeliefRefineInput\n) {\n const payload = await refineBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.refined\",\n resourceId: payload.id,\n data: {\n previousText:\n typeof (payload as Record<string, unknown>).previousText === \"string\"\n ? (payload as Record<string, unknown>).previousText\n : undefined,\n text: payload.text,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function forkBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n text: string;\n forkReason?: string;\n rationale?: string;\n }\n) {\n const payload = await forkBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.forked\",\n resourceId: payload.id,\n data: {\n parentBeliefId: payload.parentBeliefId,\n forkReason: payload.forkReason,\n text: payload.text,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function updateBeliefConfidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateBeliefConfidenceInput\n) {\n const payload = await updateBeliefConfidence(\n createGatewayBeliefPort(authContext),\n input\n );\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.confidence_updated\",\n resourceId: payload.beliefId,\n data: {\n previousConfidence: payload.previousConfidence,\n newConfidence: payload.newConfidence,\n trigger: payload.trigger,\n rationale: payload.rationale,\n requestId: payload.requestId,\n propagationSummary: payload.propagationSummary,\n opinion: payload.opinion,\n },\n });\n return payload;\n}\n\nexport async function archiveBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n reason?: string;\n }\n) {\n const payload = await archiveBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.archived\",\n resourceId: payload.id,\n data: {\n previousStatus: payload.previousStatus,\n newStatus: payload.newStatus,\n reason: input.reason,\n },\n });\n return payload;\n}\n\nexport function getBeliefLineageFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getBeliefLineage(createGatewayBeliefPort(authContext), { id });\n}\n\nexport function getBeliefConfidenceHistoryFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getBeliefConfidenceHistory(createGatewayBeliefPort(authContext), { id });\n}\n\nexport async function getBeliefRelationshipsFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string,\n direction?: string\n) {\n const relationships = (await createGatewayBeliefPort(authContext).getRelationships(\n id\n )) as Record<string, unknown>;\n\n if (direction === \"in\") {\n return {\n ...relationships,\n outgoing: [],\n };\n }\n\n if (direction === \"out\") {\n return {\n ...relationships,\n incoming: [],\n };\n }\n\n return relationships;\n}\n\nexport function updateBeliefStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n status: \"active\" | \"superseded\" | \"archived\";\n reason?: string;\n }\n) {\n const externalNodeId = input.id ?? input.nodeId ?? input.beliefId;\n return authContext.convex.mutation(api.epistemicBeliefs.updateStatus, {\n nodeId: resolveBeliefNodeId(input),\n status: input.status,\n reason: input.reason,\n userId: authContext.userId,\n }).then((payload) => ({\n ...(payload as Record<string, unknown>),\n ...(externalNodeId ? { nodeId: externalNodeId } : {}),\n }));\n}\n\nexport function updateBeliefRationaleFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n rationale?: string;\n }\n) {\n const externalNodeId = input.id ?? input.nodeId ?? input.beliefId;\n return authContext.convex.mutation(api.epistemicBeliefs.updateRationale, {\n nodeId: resolveBeliefNodeId(input),\n rationale: input.rationale,\n userId: authContext.userId,\n }).then((payload) => ({\n ...(payload as Record<string, unknown>),\n ...(externalNodeId ? { nodeId: externalNodeId } : {}),\n }));\n}\n\nexport function linkBeliefsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n fromNodeId: string;\n toNodeId: string;\n edgeType:\n | \"supports\"\n | \"informs\"\n | \"depends_on\"\n | \"derived_from\"\n | \"contains\"\n | \"tests\"\n | \"supersedes\"\n | \"responds_to\"\n | \"belongs_to\"\n | \"relates_to_thesis\";\n weight?: number;\n context?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.linkBeliefs, {\n fromNodeId: resolveExternalId(input.fromNodeId) ?? \"\",\n toNodeId: resolveExternalId(input.toNodeId) ?? \"\",\n edgeType: input.edgeType,\n weight: input.weight,\n context: input.context,\n userId: authContext.userId,\n });\n}\n\nexport function unlinkBeliefEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n beliefNodeId?: string;\n beliefId?: string;\n nodeId?: string;\n insightId?: string;\n evidenceId?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.unlinkEvidence, {\n beliefNodeId:\n input.beliefNodeId ??\n resolveExternalId(input.beliefId) ??\n resolveExternalId(input.nodeId) ??\n \"\",\n insightId: resolveExternalId(input.insightId ?? input.evidenceId) ?? \"\",\n userId: authContext.userId,\n });\n}\n\nexport function updateBeliefCriticalityFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n }\n) {\n const externalNodeId = input.id ?? input.nodeId ?? input.beliefId;\n return authContext.convex.mutation(api.epistemicBeliefs.updateCriticality, {\n nodeId: resolveBeliefNodeId(input),\n criticality: input.criticality,\n userId: authContext.userId,\n }).then((payload) => ({\n ...(payload as Record<string, unknown>),\n ...(externalNodeId ? { nodeId: externalNodeId } : {}),\n }));\n}\n\nexport function batchUpdateBeliefCriticalityFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n updates: Array<{\n beliefId: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n ifFalseImpact?: string;\n triagePriority?: number;\n reasoning?: string;\n dependentBeliefIds?: string[];\n blockedByBeliefIds?: string[];\n }>;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.batchUpdateCriticality, {\n updates: input.updates.map((update) => ({\n ...update,\n beliefId: resolveExternalId(update.beliefId) ?? update.beliefId,\n dependentBeliefIds: update.dependentBeliefIds?.map(\n (id) => resolveExternalId(id) ?? id\n ),\n blockedByBeliefIds: update.blockedByBeliefIds?.map(\n (id) => resolveExternalId(id) ?? id\n ),\n })),\n userId: authContext.userId,\n });\n}\n\nexport function reassignBeliefsTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n beliefNodeIds?: string[];\n beliefIds?: string[];\n targetTopicId: string;\n reason?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.reassignBeliefsTopic, {\n beliefNodeIds: (input.beliefNodeIds ?? input.beliefIds ?? []).map(\n (id) => resolveExternalId(id) ?? id\n ),\n targetTopicId: input.targetTopicId,\n reason: input.reason,\n userId: authContext.userId,\n });\n}\n\nexport async function createBeliefContractFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string,\n input: BeliefContractCreateInput\n) {\n const payload = await createBeliefContract(createGatewayBeliefPort(authContext), {\n id,\n input,\n });\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: (await resolveBeliefTopicIdWithGatewayAuth(authContext, id)) ?? \"\",\n type: \"belief.contract_created\",\n resourceId: payload.beliefId,\n data: {\n contractId: payload.contractId,\n title: payload.title,\n status: payload.status,\n conditionType: input.conditionType,\n direction: input.direction,\n evaluationSchedule: input.evaluationSchedule,\n },\n });\n return payload;\n}\n\nexport function bisectBeliefConfidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: BisectBeliefConfidenceInput\n) {\n return bisectBeliefConfidence(createGatewayBeliefPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n archiveBeliefFromGatewayAuth,\n batchUpdateBeliefCriticalityFromGatewayAuth,\n bisectBeliefConfidenceFromGatewayAuth,\n createBeliefContractFromGatewayAuth,\n createBeliefFromGatewayAuth,\n forkBeliefFromGatewayAuth,\n getBeliefConfidenceHistoryFromGatewayAuth,\n getBeliefFromGatewayAuth,\n getBeliefLineageFromGatewayAuth,\n getBeliefRelationshipsFromGatewayAuth,\n linkBeliefsFromGatewayAuth,\n listBeliefsFromGatewayAuth,\n reassignBeliefsTopicFromGatewayAuth,\n refineBeliefFromGatewayAuth,\n unlinkBeliefEvidenceFromGatewayAuth,\n updateBeliefConfidenceFromGatewayAuth,\n updateBeliefCriticalityFromGatewayAuth,\n updateBeliefRationaleFromGatewayAuth,\n updateBeliefStatusFromGatewayAuth,\n} from \"@lucern/server-core/beliefs\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nfunction 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 if (start === undefined && end === undefined) {\n return undefined;\n }\n return {\n start: start ?? Number.NaN,\n end: end ?? Number.NaN,\n };\n}\n\nfunction handleBeliefsError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleBeliefCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createBeliefFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n text:\n readString(body.text) ??\n readString(body.canonicalText) ??\n readString(body.formulation) ??\n \"\",\n rationale: readString(body.rationale),\n worktreeId: readString(body.worktreeId),\n pillar: readString(body.pillar),\n sourceBeliefIds: readStringArray(body.sourceBeliefIds),\n sourceType: readString(body.sourceType),\n beliefType: readString(body.beliefType),\n reversibility: readString(body.reversibility),\n predictionMeta: asRecord(body.predictionMeta),\n metadata: asRecord(body.metadata),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to create belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n}) {\n try {\n const payload = await getBeliefFromGatewayAuth(args.authContext, args.beliefId);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to read belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n worktreeId?: string;\n minConfidence?: number;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listBeliefsFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to list beliefs.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefRefine(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await refineBeliefFromGatewayAuth(args.authContext, {\n id: args.beliefId,\n text:\n readString(body.text) ??\n readString(body.canonicalText) ??\n readString(body.formulation) ??\n \"\",\n rationale: readString(body.rationale),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to refine belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefFork(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await forkBeliefFromGatewayAuth(args.authContext, {\n id: args.beliefId,\n text:\n readString(body.text) ??\n readString(body.newFormulation) ??\n readString(body.formulation) ??\n \"\",\n forkReason: readString(body.forkReason),\n rationale: readString(body.rationale),\n });\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to fork belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateConfidence(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefConfidenceFromGatewayAuth(\n args.authContext,\n {\n id: args.beliefId,\n confidence: readNumber(body.confidence) ?? Number.NaN,\n trigger: readString(body.trigger),\n rationale: readString(body.rationale) ?? \"\",\n certainty: readNumber(body.certainty),\n maxInlinePropagationTargets: readNumber(body.maxInlinePropagationTargets),\n }\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief confidence.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefStatusFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.beliefId),\n status:\n (readString(body.status) as \"active\" | \"superseded\" | \"archived\") ??\n \"active\",\n reason: readString(body.reason),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief status.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateRationale(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefRationaleFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.beliefId),\n rationale: readString(body.rationale),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief rationale.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefLink(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await linkBeliefsFromGatewayAuth(args.authContext, {\n fromNodeId:\n readString(body.fromNodeId) ?? readString(body.sourceId) ?? \"\",\n toNodeId: readString(body.toNodeId) ?? readString(body.targetId) ?? \"\",\n edgeType:\n (readString(body.edgeType) as\n | \"supports\"\n | \"informs\"\n | \"depends_on\"\n | \"derived_from\"\n | \"contains\"\n | \"tests\"\n | \"supersedes\"\n | \"responds_to\"\n | \"belongs_to\"\n | \"relates_to_thesis\") ?? \"relates_to_thesis\",\n weight: readNumber(body.weight),\n context: readString(body.context),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to link beliefs.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUnlinkEvidence(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await unlinkBeliefEvidenceFromGatewayAuth(\n args.authContext,\n {\n beliefNodeId:\n readString(body.beliefNodeId) ??\n readString(body.beliefId) ??\n readString(body.nodeId),\n insightId: readString(body.insightId) ?? readString(body.evidenceId),\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to unlink evidence from belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateCriticality(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefCriticalityFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.beliefId),\n criticality:\n (readString(body.criticality) as\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\") ?? \"important\",\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief criticality.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefBatchUpdateCriticality(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const updates = Array.isArray(body.updates)\n ? body.updates\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n beliefId: readString(entry.beliefId) ?? \"\",\n criticality:\n (readString(entry.criticality) as\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\") ?? \"important\",\n ifFalseImpact: readString(entry.ifFalseImpact),\n triagePriority: readNumber(entry.triagePriority),\n reasoning: readString(entry.reasoning),\n dependentBeliefIds: readStringArray(entry.dependentBeliefIds),\n blockedByBeliefIds: readStringArray(entry.blockedByBeliefIds),\n }))\n : [];\n const payload = await batchUpdateBeliefCriticalityFromGatewayAuth(\n args.authContext,\n { updates }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to batch update belief criticality.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefReassignTopic(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await reassignBeliefsTopicFromGatewayAuth(args.authContext, {\n beliefNodeIds:\n readStringArray(body.beliefNodeIds) ?? readStringArray(body.beliefIds),\n targetTopicId: readString(body.targetTopicId) ?? \"\",\n reason: readString(body.reason),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to reassign beliefs to topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefArchive(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await archiveBeliefFromGatewayAuth(args.authContext, {\n id: args.beliefId,\n reason: readString(body.reason) ?? readString(body.rationale),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to archive belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefLineage(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n}) {\n try {\n const payload = await getBeliefLineageFromGatewayAuth(\n args.authContext,\n args.beliefId\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to query belief lineage.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefConfidenceHistory(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n}) {\n try {\n const payload = await getBeliefConfidenceHistoryFromGatewayAuth(\n args.authContext,\n args.beliefId\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to read belief confidence history.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefRelationships(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n direction?: string;\n}) {\n try {\n const payload = await getBeliefRelationshipsFromGatewayAuth(\n args.authContext,\n args.beliefId,\n args.direction\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to query belief relationships.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefCreateContract(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createBeliefContractFromGatewayAuth(\n args.authContext,\n args.beliefId,\n {\n title: readString(body.title) ?? \"\",\n description: readString(body.description),\n conditionType: readString(body.conditionType) as any,\n direction: readString(body.direction) as any,\n condition: {\n expression: readString(asRecord(body.condition).expression) ?? \"\",\n evaluator: readString(asRecord(body.condition).evaluator) ?? \"\",\n evaluatorConfig: asRecord(asRecord(body.condition).evaluatorConfig),\n },\n deadline: readNumber(body.deadline),\n compositeOf: readStringArray(body.compositeOf),\n compositeOperator: readString(body.compositeOperator) as any,\n modulation: {\n onConfirmed: {\n delta: readNumber(asRecord(asRecord(body.modulation).onConfirmed).delta) ?? 0,\n ceiling: readNumber(asRecord(asRecord(body.modulation).onConfirmed).ceiling),\n },\n onDisconfirmed: {\n delta:\n readNumber(asRecord(asRecord(body.modulation).onDisconfirmed).delta) ?? 0,\n floor: readNumber(asRecord(asRecord(body.modulation).onDisconfirmed).floor),\n },\n ...(asRecord(body.modulation).onExpired\n ? {\n onExpired: {\n delta:\n readNumber(asRecord(asRecord(body.modulation).onExpired).delta) ?? 0,\n },\n }\n : {}),\n ...(asRecord(body.modulation).onPartial\n ? {\n onPartial: {\n threshold:\n readNumber(asRecord(asRecord(body.modulation).onPartial).threshold) ??\n 0,\n delta:\n readNumber(asRecord(asRecord(body.modulation).onPartial).delta) ?? 0,\n },\n }\n : {}),\n },\n evaluationSchedule: readString(body.evaluationSchedule) as any,\n periodicIntervalMs: readNumber(body.periodicIntervalMs),\n }\n );\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to create belief contract.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefBisect(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await bisectBeliefConfidenceFromGatewayAuth(\n args.authContext,\n {\n id: args.beliefId,\n expectedDirection: readString(body.expectedDirection) as any,\n timeRange: readTimeRange(body.timeRange),\n }\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to bisect belief confidence history.\",\n args.correlationId,\n args.policyTraceId\n );\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","import {\n compileContext,\n isContextCompileError,\n type CompileContextCommand,\n type CompileContextPorts,\n} from \"./domain/context\";\n\nexport type ContextServerCore = {\n compile(input: CompileContextCommand): ReturnType<typeof compileContext>;\n};\n\nexport function createContextServerCore(\n ports: CompileContextPorts\n): ContextServerCore {\n return {\n compile(input) {\n return compileContext(ports, input);\n },\n };\n}\n\nexport { isContextCompileError };\n","import {\n createContextServerCore,\n isContextCompileError,\n} from \"@lucern/server-core/context\";\nimport type {\n CompileContextCommand,\n CompileContextPorts,\n} from \"@lucern/server-core/domain/context/ports\";\n\nexport type GatewayContextAuth = {\n actorPrincipalId: string;\n};\n\nexport type GatewayContextRequest = {\n body: Record<string, unknown>;\n auth: GatewayContextAuth | null;\n correlationId: string;\n policyTraceId: string | null;\n};\n\nexport type GatewayContextRouteDeps = CompileContextPorts & {\n successResponse: (\n data: unknown,\n meta: {\n correlationId: string;\n policyTraceId: string | null;\n status?: number;\n }\n ) => Response;\n errorResponse: (meta: {\n code: string;\n message: string;\n status: number;\n correlationId: string;\n policyTraceId: string | null;\n }) => Response;\n};\n\nexport function createContextGatewayRoute(deps: GatewayContextRouteDeps) {\n const core = createContextServerCore(deps);\n\n return {\n async post(request: GatewayContextRequest): Promise<Response> {\n if (!request.auth?.actorPrincipalId) {\n return deps.errorResponse({\n code: \"AUTHENTICATION_REQUIRED\",\n message: \"Authentication is required to compile context.\",\n status: 401,\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n }\n\n try {\n const command: CompileContextCommand = {\n ...request.body,\n actorPrincipalId: request.auth.actorPrincipalId,\n policyTraceId: request.policyTraceId,\n };\n const payload = await core.compile(command);\n const response = deps.successResponse(payload, {\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n response.headers.set(\"Cache-Control\", \"private, max-age=5\");\n return response;\n } catch (error) {\n if (isContextCompileError(error)) {\n const message = error instanceof Error ? error.message : String(error);\n return deps.errorResponse({\n code: error.code,\n message,\n status: error.status,\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return deps.errorResponse({\n code: \"INTERNAL_ERROR\",\n message: message || \"Failed to compile context.\",\n status: 500,\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n }\n },\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype PublicSeverity = \"low\" | \"medium\" | \"high\" | \"critical\";\ntype DefeatType = \"rebuts\" | \"undercuts\" | \"undermines\";\n\nexport type ContradictionRecord = {\n id: string;\n contradictionId: string;\n topicId?: string;\n beliefA: string;\n beliefB: string;\n description: string;\n severity: PublicSeverity;\n status: string;\n defeatType: DefeatType;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type ContradictionListResult = {\n contradictions: ContradictionRecord[];\n nextCursor: null;\n};\n\nexport type FlagContradictionInput = {\n beliefA: string;\n beliefB: string;\n description: string;\n topicId: string;\n severity?: string;\n defeatType?: string;\n};\n\nexport type ListContradictionsQuery = {\n topicId: string;\n status?: string;\n limit?: number;\n cursor?: string;\n};\n\ntype PortSeverity = \"critical\" | \"significant\" | \"minor\";\n\ntype FlagContradictionPortInput = {\n beliefARawId: string;\n beliefBRawId: string;\n description: string;\n topicId: string;\n severity: PortSeverity;\n publicSeverity: PublicSeverity;\n defeatType: DefeatType;\n};\n\nexport type ContradictionsPort = {\n fetchBelief: (rawId: string) => Promise<unknown | null>;\n flagContradiction: (input: FlagContradictionPortInput) => Promise<unknown>;\n listByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n getById: (id: string) => Promise<unknown | null>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[contradictions] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[contradictions] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeBeliefId(value: unknown): string {\n return encodeId(\"bel\", decodeExternalId(normalizeRequiredString(value, \"beliefId\"), \"bel\"));\n}\n\nfunction normalizeSeverity(value: unknown): PublicSeverity {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"critical\":\n return \"critical\";\n case \"high\":\n return \"high\";\n case \"low\":\n case \"minor\":\n return \"low\";\n case \"significant\":\n case \"medium\":\n default:\n return \"medium\";\n }\n}\n\nfunction normalizePortSeverity(value: PublicSeverity): PortSeverity {\n switch (value) {\n case \"critical\":\n return \"critical\";\n case \"low\":\n return \"minor\";\n case \"medium\":\n case \"high\":\n default:\n return \"significant\";\n }\n}\n\nfunction normalizeDefeatType(value: unknown): DefeatType {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"undercuts\") {\n return \"undercuts\";\n }\n if (normalized === \"undermines\") {\n return \"undermines\";\n }\n return \"rebuts\";\n}\n\nfunction extractBeliefRef(value: unknown): string | undefined {\n const record = asRecord(value);\n const direct =\n readString(record.beliefId) ??\n readString(record.nodeId) ??\n readString(record._id);\n return direct ? normalizeBeliefId(direct) : undefined;\n}\n\nfunction extractBeliefB(record: Record<string, unknown>): string {\n const direct =\n readString(record.beliefB) ??\n readString(asRecord(record.metadata).beliefB) ??\n readString(asRecord(record.aiAnalysis).beliefB);\n if (direct) {\n return normalizeBeliefId(direct);\n }\n\n const contradictingInsights = Array.isArray(record.contradictingInsights)\n ? record.contradictingInsights\n : [];\n const contradictingInsightIds = Array.isArray(record.contradictingInsightIds)\n ? record.contradictingInsightIds\n : [];\n const firstBeliefRecord = contradictingInsights\n .map((entry) => extractBeliefRef(entry))\n .find((entry): entry is string => Boolean(entry));\n if (firstBeliefRecord) {\n return firstBeliefRecord;\n }\n\n const firstBeliefId = contradictingInsightIds\n .map((entry) => readString(entry))\n .find((entry): entry is string => Boolean(entry));\n if (firstBeliefId) {\n return normalizeBeliefId(firstBeliefId);\n }\n\n throw new Error(\"[contradictions] beliefB is required.\");\n}\n\nfunction normalizeContradictionRecord(value: unknown): ContradictionRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const aiAnalysis = asRecord(record.aiAnalysis);\n const contradictionToken =\n readString(record.contradictionId) ??\n readString(record._id) ??\n readString(record.id) ??\n randomUUID();\n const rawContradictionId = contradictionToken.startsWith(\"con_\")\n ? decodeExternalId(contradictionToken, \"con\")\n : contradictionToken;\n const beliefADirect =\n readString(record.beliefA) ??\n readString(metadata.beliefA) ??\n readString(aiAnalysis.beliefA);\n const beliefA =\n extractBeliefRef(record.belief) ??\n extractBeliefRef({ beliefId: record.beliefId }) ??\n (beliefADirect ? normalizeBeliefId(beliefADirect) : undefined);\n if (!beliefA) {\n throw new Error(\"[contradictions] beliefA is required.\");\n }\n const status =\n readString(record.status) ??\n readString(record.resolutionStatus) ??\n readString(metadata.status) ??\n \"unresolved\";\n\n return {\n id: encodeId(\"con\", rawContradictionId),\n contradictionId: encodeId(\"con\", rawContradictionId),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n beliefA,\n beliefB: extractBeliefB(record),\n description:\n readString(record.description) ??\n readString(aiAnalysis.summary) ??\n readString(aiAnalysis.likelyExplanation) ??\n \"\",\n severity: normalizeSeverity(\n metadata.publicSeverity ?? aiAnalysis.publicSeverity ?? record.severity\n ),\n status,\n defeatType: normalizeDefeatType(\n metadata.defeatType ?? aiAnalysis.defeatType ?? record.defeatType\n ),\n ...(readNumber(record.createdAt) !== undefined\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nasync function fetchBeliefOrThrow(\n deps: ContradictionsPort,\n rawId: string,\n field: \"beliefA\" | \"beliefB\"\n) {\n const belief = await deps.fetchBelief(rawId);\n if (!belief) {\n throw new Error(`[contradictions.flag] ${field} must resolve to an existing belief.`);\n }\n return belief;\n}\n\nexport async function flagContradiction(\n deps: ContradictionsPort,\n input: FlagContradictionInput\n): Promise<ContradictionRecord> {\n const publicSeverity = normalizeSeverity(input.severity);\n const defeatType = normalizeDefeatType(input.defeatType);\n const beliefARawId = decodeExternalId(\n normalizeRequiredString(input.beliefA, \"beliefA\"),\n \"bel\"\n );\n const beliefBRawId = decodeExternalId(\n normalizeRequiredString(input.beliefB, \"beliefB\"),\n \"bel\"\n );\n\n if (beliefARawId === beliefBRawId) {\n throw new Error(\n \"[contradictions.flag] beliefA and beliefB must identify different beliefs.\"\n );\n }\n\n await Promise.all([\n fetchBeliefOrThrow(deps, beliefARawId, \"beliefA\"),\n fetchBeliefOrThrow(deps, beliefBRawId, \"beliefB\"),\n ]);\n\n const created = await deps.flagContradiction({\n beliefARawId,\n beliefBRawId,\n description: normalizeRequiredString(input.description, \"description\"),\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n severity: normalizePortSeverity(publicSeverity),\n publicSeverity,\n defeatType,\n });\n\n const record = asRecord(created);\n const primitiveId =\n typeof created === \"string\" && created.trim().length > 0 ? created : undefined;\n const contradictionToken =\n primitiveId ??\n readString(record.contradictionId) ??\n readString(record._id) ??\n readString(record.id) ??\n randomUUID();\n const rawId = contradictionToken.startsWith(\"con_\")\n ? decodeExternalId(contradictionToken, \"con\")\n : contradictionToken;\n\n return {\n id: encodeId(\"con\", rawId),\n contradictionId: encodeId(\"con\", rawId),\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n beliefA: normalizeBeliefId(input.beliefA),\n beliefB: normalizeBeliefId(input.beliefB),\n description: normalizeRequiredString(input.description, \"description\"),\n severity: publicSeverity,\n status: \"unresolved\",\n defeatType,\n ...(readNumber(record.createdAt) !== undefined\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nexport async function listContradictions(\n deps: ContradictionsPort,\n query: ListContradictionsQuery\n): Promise<ContradictionListResult> {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n const requestedStatus = readString(query.status);\n const pageSize =\n readNumber(query.limit) !== undefined\n ? Math.max(1, Math.floor(readNumber(query.limit)!))\n : undefined;\n const rows = await deps.listByTopic({\n topicId,\n limit: pageSize,\n });\n\n return {\n contradictions: rows\n .map(normalizeContradictionRecord)\n .filter((record) => !requestedStatus || record.status === requestedStatus)\n .slice(0, pageSize ?? rows.length),\n nextCursor: null,\n };\n}\n\nexport async function getContradiction(\n deps: ContradictionsPort,\n input: { id: string }\n): Promise<ContradictionRecord> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"id\"),\n \"con\"\n );\n const contradiction = await deps.getById(rawId);\n if (!contradiction) {\n throw new Error(\n `[contradictions.get] Contradiction ${input.id} was not found.`\n );\n }\n return normalizeContradictionRecord(contradiction);\n}\n","import { api } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport {\n flagContradiction,\n getContradiction,\n listContradictions,\n type ContradictionsPort,\n type FlagContradictionInput,\n type ListContradictionsQuery,\n} from \"./domain/contradictions\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nasync function ensureTopicAccessWithQuery(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n topicId: string | undefined,\n userId: string,\n contextLabel: string\n) {\n if (!topicId) {\n return;\n }\n\n const allowed = await runQuery(api.topics.checkAccess, {\n topicId: topicId as any,\n userId,\n });\n if (allowed !== true) {\n throw new Error(\n `[contradictions] ${contextLabel} requires access to topic ${topicId}.`\n );\n }\n}\n\nfunction resolveTopicIdFromContradiction(value: unknown): string | undefined {\n return readString(asRecord(value).topicId);\n}\n\nasync function emitContradictionEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"contradiction.flagged\",\n resourceId: args.resourceId,\n resourceType: \"contradiction\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitContradictionEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitContradictionEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"contradiction.flagged\",\n resourceId: args.resourceId,\n resourceType: \"contradiction\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayContradictionsPort(\n authContext: GatewayAuthContext\n): ContradictionsPort {\n return {\n fetchBelief(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n });\n },\n flagContradiction(input) {\n return authContext.convex.mutation(api.contradictions.create, {\n beliefId: input.beliefARawId as any,\n supportingInsightIds: [],\n contradictingInsightIds: [input.beliefBRawId as any],\n severity: input.severity,\n topicId: input.topicId as any,\n aiAnalysis: {\n summary: input.description,\n likelyExplanation: input.description,\n suggestedResolution:\n `Review the conflicting beliefs before acting. Defeat type: ${input.defeatType}.`,\n confidenceInAnalysis: 0.5,\n analyzedAt: Date.now(),\n },\n createdBy: authContext.userId,\n });\n },\n listByTopic(args) {\n return authContext.convex.query(api.contradictions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n getById(id) {\n return authContext.convex.query(api.contradictions.getById, {\n contradictionId: id as any,\n });\n },\n };\n}\n\nfunction createMcpContradictionsPort(authContext: AuthContext): ContradictionsPort {\n const convex = requireMcpConvex(authContext, \"createMcpContradictionsPort\");\n return {\n fetchBelief(rawId) {\n return convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n });\n },\n flagContradiction(input) {\n return convex.mutation(api.contradictions.create, {\n beliefId: input.beliefARawId as any,\n supportingInsightIds: [],\n contradictingInsightIds: [input.beliefBRawId as any],\n severity: input.severity,\n topicId: input.topicId as any,\n aiAnalysis: {\n summary: input.description,\n likelyExplanation: input.description,\n suggestedResolution:\n `Review the conflicting beliefs before acting. Defeat type: ${input.defeatType}.`,\n confidenceInAnalysis: 0.5,\n analyzedAt: Date.now(),\n },\n createdBy: authContext.userId,\n });\n },\n listByTopic(args) {\n return convex.query(api.contradictions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n getById(id) {\n return convex.query(api.contradictions.getById, {\n contradictionId: id as any,\n });\n },\n };\n}\n\nexport async function flagContradictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: FlagContradictionInput\n) {\n await ensureTopicAccessWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n input.topicId,\n authContext.userId,\n \"flag\"\n );\n const payload = await flagContradiction(\n createGatewayContradictionsPort(authContext),\n input\n );\n await emitContradictionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n resourceId: payload.id,\n data: {\n beliefA: payload.beliefA,\n beliefB: payload.beliefB,\n description: payload.description,\n severity: payload.severity,\n status: payload.status,\n defeatType: payload.defeatType,\n },\n });\n return payload;\n}\n\nexport async function listContradictionsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListContradictionsQuery\n) {\n await ensureTopicAccessWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n query.topicId,\n authContext.userId,\n \"list\"\n );\n return listContradictions(createGatewayContradictionsPort(authContext), query);\n}\n\nexport async function getContradictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n const contradiction = await getContradiction(\n createGatewayContradictionsPort(authContext),\n { id }\n );\n await ensureTopicAccessWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n resolveTopicIdFromContradiction(contradiction),\n authContext.userId,\n \"get\"\n );\n return contradiction;\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n flagContradictionFromGatewayAuth,\n getContradictionFromGatewayAuth,\n listContradictionsFromGatewayAuth,\n} from \"@lucern/server-core/contradictions\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport async function handleContradictionFlag(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await flagContradictionFromGatewayAuth(args.authContext, {\n beliefA: readString(body.beliefA) ?? \"\",\n beliefB: readString(body.beliefB) ?? \"\",\n description: readString(body.description) ?? \"\",\n topicId: readString(body.topicId) ?? \"\",\n severity: readString(body.severity),\n defeatType: readString(body.defeatType),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to flag contradiction.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleContradictionList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listContradictionsFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n status: args.query.status,\n limit: args.query.limit,\n cursor: args.query.cursor,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list contradictions.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleContradictionGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n contradictionId: string;\n}) {\n try {\n const payload = await getContradictionFromGatewayAuth(\n args.authContext,\n args.contradictionId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read contradiction.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype EdgeDirection = \"up\" | \"down\" | \"both\";\n\nexport type EdgeRecord = {\n id: string;\n edgeId: string;\n globalId?: string;\n sourceId: string;\n targetId: string;\n edgeType: string;\n topicId?: string;\n confidence?: number;\n weight?: number;\n context?: string;\n fromLayer?: string;\n toLayer?: string;\n isDuplicate?: boolean;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type EdgeListResult = {\n edges: EdgeRecord[];\n nextCursor: null;\n};\n\nexport type EdgeTraversalNode = {\n id: string;\n nodeId: string;\n globalId?: string;\n nodeType?: string;\n text?: string;\n confidence?: number;\n depth?: number;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type EdgeTraversalResult = {\n startNode: string;\n direction: EdgeDirection;\n maxDepth: number;\n nodes: EdgeTraversalNode[];\n edges: EdgeRecord[];\n depth: number;\n};\n\nexport type CreateEdgeInput = {\n sourceId: string;\n targetId: string;\n edgeType: string;\n topicId?: string;\n confidence?: number;\n weight?: number;\n context?: string;\n};\n\nexport type ListEdgesQuery = {\n sourceId: string;\n edgeType?: string;\n limit?: number;\n cursor?: string;\n};\n\nexport type TraverseEdgesInput = {\n startNode: string;\n direction?: string;\n maxDepth?: number;\n topicId?: string;\n};\n\ntype EdgeCreatePortInput = {\n sourceRawId: string;\n targetRawId: string;\n edgeType: string;\n topicId?: string;\n confidence?: number;\n weight?: number;\n context?: string;\n};\n\ntype EdgeTraversePortInput = {\n startNode: string;\n direction: EdgeDirection;\n maxDepth: number;\n topicId?: string;\n};\n\nexport type EdgePort = {\n createEdge: (input: EdgeCreatePortInput) => Promise<unknown>;\n listEdgesBySource: (args: {\n sourceRawId: string;\n edgeType?: string;\n limit?: number;\n }) => Promise<unknown[]>;\n traverseEdges: (input: EdgeTraversePortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[edges] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[edges] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeNodeReference(value: unknown): string {\n const normalized = normalizeRequiredString(value, \"node reference\");\n try {\n const decoded = decodePrefixedId(normalized);\n return encodePrefixedId(decoded.prefix, decoded.value);\n } catch {\n return normalized;\n }\n}\n\nfunction normalizeDirection(value: unknown): EdgeDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"up\" || normalized === \"down\") {\n return normalized;\n }\n return \"both\";\n}\n\nfunction normalizeTraversalDepth(value: unknown): number {\n const numeric = readNumber(value);\n if (numeric === undefined) {\n return 3;\n }\n return Math.max(1, Math.min(Math.floor(numeric), 10));\n}\n\nfunction normalizeEdgeRecord(value: unknown): EdgeRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const edgeToken =\n readString(record.edgeId) ??\n readString(record.edgeGlobalId) ??\n readString(record.globalId) ??\n readString(record._id) ??\n randomUUID();\n const rawEdgeId = edgeToken.startsWith(\"edg_\")\n ? decodeExternalId(edgeToken, \"edg\")\n : edgeToken;\n const sourceRef =\n readString(record.sourceId) ??\n readString(record.fromNodeId) ??\n readString(record.sourceGlobalId) ??\n readString(record.fromGlobalId) ??\n \"\";\n const targetRef =\n readString(record.targetId) ??\n readString(record.toNodeId) ??\n readString(record.targetGlobalId) ??\n readString(record.toGlobalId) ??\n \"\";\n\n return {\n id: encodeId(\"edg\", rawEdgeId),\n edgeId: encodeId(\"edg\", rawEdgeId),\n ...(edgeToken.startsWith(\"edg_\") ? {} : { globalId: rawEdgeId }),\n sourceId: normalizeNodeReference(sourceRef),\n targetId: normalizeNodeReference(targetRef),\n edgeType: normalizeRequiredString(record.edgeType, \"edgeType\"),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n ...(readNumber(record.confidence) !== undefined\n ? { confidence: readNumber(record.confidence)! }\n : {}),\n ...(readNumber(record.weight) !== undefined\n ? { weight: readNumber(record.weight)! }\n : {}),\n ...(readString(record.context) ? { context: readString(record.context)! } : {}),\n ...(readString(record.fromLayer)\n ? { fromLayer: readString(record.fromLayer)! }\n : {}),\n ...(readString(record.toLayer) ? { toLayer: readString(record.toLayer)! } : {}),\n ...(typeof record.isDuplicate === \"boolean\"\n ? { isDuplicate: record.isDuplicate }\n : {}),\n ...(readNumber(record.createdAt) !== undefined\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction normalizeTraversalNode(value: unknown): EdgeTraversalNode {\n const record = asRecord(value);\n const globalId =\n readString(record.globalId) ?? readString(record.nodeGlobalId) ?? undefined;\n const nodeId =\n readString(record.nodeId) ?? globalId ?? randomUUID();\n\n return {\n id: nodeId,\n nodeId,\n ...(globalId ? { globalId } : {}),\n ...(readString(record.nodeType)\n ? { nodeType: readString(record.nodeType)! }\n : {}),\n ...(readString(record.text) ??\n readString(record.canonicalText)\n ? {\n text:\n readString(record.text) ?? readString(record.canonicalText)!,\n }\n : {}),\n ...(readNumber(record.confidence) !== undefined\n ? { confidence: readNumber(record.confidence)! }\n : {}),\n ...(readNumber(record.depth) !== undefined\n ? { depth: readNumber(record.depth)! }\n : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n ...(Object.keys(asRecord(record.metadata)).length > 0\n ? { metadata: asRecord(record.metadata) }\n : {}),\n };\n}\n\nfunction normalizeTraversalResult(\n value: unknown,\n input: EdgeTraversePortInput\n): EdgeTraversalResult {\n const record = asRecord(value);\n const nodes = Array.isArray(record.nodes)\n ? record.nodes.map(normalizeTraversalNode)\n : [];\n const edges = Array.isArray(record.edges)\n ? record.edges.map(normalizeEdgeRecord)\n : [];\n const derivedDepth =\n readNumber(record.depth) ??\n nodes.reduce((maxDepth, node) => Math.max(maxDepth, node.depth ?? 0), 0);\n\n return {\n startNode: normalizeRequiredString(record.startNode ?? input.startNode, \"startNode\"),\n direction: normalizeDirection(record.direction ?? input.direction),\n maxDepth: normalizeTraversalDepth(record.maxDepth ?? input.maxDepth),\n nodes,\n edges,\n depth: derivedDepth,\n };\n}\n\nexport async function createEdge(\n deps: EdgePort,\n input: CreateEdgeInput\n): Promise<EdgeRecord> {\n const sourceId = normalizeNodeReference(input.sourceId);\n const targetId = normalizeNodeReference(input.targetId);\n const edgeType = normalizeRequiredString(input.edgeType, \"edgeType\");\n const created = await deps.createEdge({\n sourceRawId: decodeExternalId(sourceId),\n targetRawId: decodeExternalId(targetId),\n edgeType,\n topicId: readString(input.topicId),\n confidence: readNumber(input.confidence),\n weight: readNumber(input.weight),\n context: readString(input.context),\n });\n\n return normalizeEdgeRecord({\n ...asRecord(created),\n sourceId,\n targetId,\n edgeType,\n topicId: readString(input.topicId),\n confidence: readNumber(input.confidence),\n weight: readNumber(input.weight),\n context: readString(input.context),\n });\n}\n\nexport async function listEdges(\n deps: EdgePort,\n query: ListEdgesQuery\n): Promise<EdgeListResult> {\n const sourceId = normalizeNodeReference(query.sourceId);\n const rows = await deps.listEdgesBySource({\n sourceRawId: decodeExternalId(sourceId),\n edgeType: readString(query.edgeType),\n limit: readNumber(query.limit),\n });\n\n return {\n edges: rows.map(normalizeEdgeRecord),\n nextCursor: null,\n };\n}\n\nexport async function traverseEdges(\n deps: EdgePort,\n input: TraverseEdgesInput\n): Promise<EdgeTraversalResult> {\n const direction = normalizeDirection(input.direction);\n const maxDepth = normalizeTraversalDepth(input.maxDepth);\n const payload = await deps.traverseEdges({\n startNode: normalizeRequiredString(input.startNode, \"startNode\"),\n direction,\n maxDepth,\n topicId: readString(input.topicId),\n });\n\n return normalizeTraversalResult(payload, {\n startNode: normalizeRequiredString(input.startNode, \"startNode\"),\n direction,\n maxDepth,\n topicId: readString(input.topicId),\n });\n}\n","import { randomUUID } from \"node:crypto\";\nimport { api, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n createEdge,\n listEdges,\n traverseEdges,\n type CreateEdgeInput,\n type EdgePort,\n type ListEdgesQuery,\n type TraverseEdgesInput,\n} from \"./domain/edges\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction resolveExternalId(value: string | undefined): string | undefined {\n if (!value) {\n return value;\n }\n try {\n return decodePrefixedId(value).value;\n } catch {\n return value;\n }\n}\n\nasync function fetchNodeWithQuery(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n id: string\n) {\n if (!id.trim()) {\n return null;\n }\n\n const rawId = (() => {\n try {\n return decodePrefixedId(id).value;\n } catch {\n return id;\n }\n })();\n\n try {\n const byNodeId = await runQuery(api.epistemicNodes.get, {\n nodeId: rawId as any,\n });\n if (byNodeId) {\n return byNodeId;\n }\n } catch {\n // Try the global ID lookup next.\n }\n\n try {\n return await runQuery(api.epistemicNodes.getByGlobalId, {\n globalId: id,\n });\n } catch {\n return null;\n }\n}\n\nfunction resolveTopicIdFromNode(node: unknown): string | undefined {\n const record = asRecord(node);\n return readString(record.topicId) ?? readString(record.projectId);\n}\n\nasync function emitEdgeEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"edge.created\",\n resourceId: args.resourceId,\n resourceType: \"edge\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitEdgeEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitEdgeEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"edge.created\",\n resourceId: args.resourceId,\n resourceType: \"edge\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function ensureTopicAccessWithQuery(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n topicId: string | undefined,\n userId: string,\n contextLabel: string\n) {\n if (!topicId) {\n return;\n }\n\n const allowed = await runQuery(api.topics.checkAccess, {\n topicId: topicId as any,\n userId,\n });\n if (allowed !== true) {\n throw new Error(`[edges] ${contextLabel} requires access to topic ${topicId}.`);\n }\n}\n\nasync function executeTraversal(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n runAction: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n userId: string,\n input: {\n startNode: string;\n direction: \"up\" | \"down\" | \"both\";\n maxDepth: number;\n topicId?: string;\n }\n) {\n const startNodeRecord = await fetchNodeWithQuery(runQuery, input.startNode);\n const startGlobalId =\n readString(asRecord(startNodeRecord).globalId) ?? input.startNode;\n const topicId = input.topicId ?? resolveTopicIdFromNode(startNodeRecord);\n\n await ensureTopicAccessWithQuery(runQuery, topicId, userId, \"traverse\");\n\n const payload = asRecord(\n await runAction(api.neo4jEdgeAPI.getGraphNeighborhood, {\n globalIds: [startGlobalId],\n maxDepth: input.maxDepth,\n })\n );\n\n const rawEdges = Array.isArray(payload.edges) ? payload.edges : [];\n const filteredEdges =\n input.direction === \"both\"\n ? rawEdges\n : rawEdges.filter((edge) => {\n const record = asRecord(edge);\n const fromId =\n readString(record.sourceGlobalId) ??\n readString(record.fromGlobalId) ??\n readString(record.fromNodeId);\n const toId =\n readString(record.targetGlobalId) ??\n readString(record.toGlobalId) ??\n readString(record.toNodeId);\n\n if (input.direction === \"up\") {\n return fromId === startGlobalId;\n }\n return toId === startGlobalId;\n });\n\n return {\n startNode: startGlobalId,\n direction: input.direction,\n maxDepth: input.maxDepth,\n nodes: Array.isArray(payload.nodes) ? payload.nodes : [],\n edges: filteredEdges,\n depth:\n typeof payload.depth === \"number\"\n ? payload.depth\n : Array.isArray(payload.nodes)\n ? payload.nodes.reduce((maxDepth, node) => {\n const depth = asRecord(node).depth;\n return typeof depth === \"number\" && Number.isFinite(depth)\n ? Math.max(maxDepth, depth)\n : maxDepth;\n }, 0)\n : 0,\n };\n}\n\nfunction createGatewayEdgesPort(authContext: GatewayAuthContext): EdgePort {\n return {\n async createEdge(input) {\n const sourceNode = await fetchNodeWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n input.sourceRawId\n );\n const targetNode = await fetchNodeWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n input.targetRawId\n );\n const inferredTopicId =\n input.topicId ??\n resolveTopicIdFromNode(sourceNode) ??\n resolveTopicIdFromNode(targetNode);\n\n return authContext.convex.mutation(api.epistemicEdges.create, {\n fromNodeId: input.sourceRawId as any,\n toNodeId: input.targetRawId as any,\n edgeType: input.edgeType as any,\n globalId: randomUUID(),\n createdBy: authContext.userId,\n topicId: inferredTopicId as any,\n confidence: input.confidence,\n weight: input.weight,\n context: input.context,\n });\n },\n async listEdgesBySource(args) {\n const sourceNode = await fetchNodeWithQuery(\n (fn, input) => authContext.convex.query(fn as any, input),\n args.sourceRawId\n );\n await ensureTopicAccessWithQuery(\n (fn, input) => authContext.convex.query(fn as any, input),\n resolveTopicIdFromNode(sourceNode),\n authContext.userId,\n \"list\"\n );\n\n const rows = await authContext.convex.query(api.epistemicEdges.getBySourceNode, {\n sourceNodeId: args.sourceRawId as any,\n edgeType: args.edgeType,\n });\n\n return Array.isArray(rows)\n ? rows.slice(0, args.limit ?? rows.length)\n : [];\n },\n traverseEdges(input) {\n return executeTraversal(\n (fn, args) => authContext.convex.query(fn as any, args),\n (fn, args) => authContext.convex.action(fn as any, args),\n authContext.userId,\n input\n );\n },\n };\n}\n\nfunction createMcpEdgesPort(authContext: AuthContext): EdgePort {\n const convex = requireMcpConvex(authContext, \"createMcpEdgesPort\");\n return {\n\n async createEdge(input) {\n const sourceNode = await fetchNodeWithQuery((fn, args) => convex.query(fn, args), input.sourceRawId);\n const targetNode = await fetchNodeWithQuery((fn, args) => convex.query(fn, args), input.targetRawId);\n const inferredTopicId =\n input.topicId ??\n resolveTopicIdFromNode(sourceNode) ??\n resolveTopicIdFromNode(targetNode);\n\n return convex.mutation(api.epistemicEdges.create, {\n fromNodeId: input.sourceRawId as any,\n toNodeId: input.targetRawId as any,\n edgeType: input.edgeType as any,\n globalId: randomUUID(),\n createdBy: authContext.userId,\n topicId: inferredTopicId as any,\n confidence: input.confidence,\n weight: input.weight,\n context: input.context,\n });\n },\n async listEdgesBySource(args) {\n const sourceNode = await fetchNodeWithQuery((fn, input) => convex.query(fn, input), args.sourceRawId);\n await ensureTopicAccessWithQuery(\n (fn, input) => convex.query(fn, input),\n resolveTopicIdFromNode(sourceNode),\n authContext.userId,\n \"list\"\n );\n\n const rows = await convex.query(api.epistemicEdges.getBySourceNode, {\n sourceNodeId: args.sourceRawId as any,\n edgeType: args.edgeType,\n });\n\n return Array.isArray(rows)\n ? rows.slice(0, args.limit ?? rows.length)\n : [];\n },\n traverseEdges(input) {\n return executeTraversal((fn, args) => convex.query(fn, args), (fn, args) => convex.action(fn, args), authContext.userId, input);\n },\n };\n}\n\nexport async function createEdgeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateEdgeInput\n) {\n const payload = await createEdge(createGatewayEdgesPort(authContext), input);\n await emitEdgeEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId ?? \"\",\n resourceId: payload.id,\n data: {\n sourceId: payload.sourceId,\n targetId: payload.targetId,\n edgeType: payload.edgeType,\n confidence: payload.confidence,\n weight: payload.weight,\n context: payload.context,\n },\n });\n return payload;\n}\n\nexport function listEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListEdgesQuery\n) {\n return listEdges(createGatewayEdgesPort(authContext), query);\n}\n\nexport function traverseEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: TraverseEdgesInput\n) {\n return traverseEdges(createGatewayEdgesPort(authContext), input);\n}\n\nexport function updateEdgeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edgeId: string;\n weight?: number;\n confidence?: number;\n context?: string;\n derivationType?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicEdges.update, {\n edgeId: resolveExternalId(input.edgeId) ?? input.edgeId,\n weight: input.weight,\n confidence: input.confidence,\n context: input.context,\n derivationType: input.derivationType,\n userId: authContext.userId,\n });\n}\n\nexport function removeEdgeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edgeId: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicEdges.remove, {\n edgeId: resolveExternalId(input.edgeId) ?? input.edgeId,\n userId: authContext.userId,\n });\n}\n\nexport function removeEdgesBetweenFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n fromNodeId: string;\n toNodeId: string;\n edgeType?: string;\n }\n) {\n void authContext;\n return authContext.convex.mutation(api.epistemicEdges.removeBetween, {\n fromNodeId: resolveExternalId(input.fromNodeId) ?? input.fromNodeId,\n toNodeId: resolveExternalId(input.toNodeId) ?? input.toNodeId,\n edgeType: input.edgeType as any,\n userId: authContext.userId,\n });\n}\n\nexport function batchCreateEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edges: Array<{\n globalId?: string;\n fromNodeId?: string;\n sourceId?: string;\n toNodeId?: string;\n targetId?: string;\n edgeType: string;\n weight?: number;\n confidence?: number;\n context?: string;\n derivationType?: string;\n createdBy?: string;\n topicId?: string;\n }>;\n skipLayerValidation?: boolean;\n }\n) {\n return authContext.convex.mutation(api.epistemicEdges.batchCreate, {\n edges: input.edges.map((edge) => ({\n globalId: edge.globalId ?? randomUUID(),\n fromNodeId:\n resolveExternalId(edge.fromNodeId ?? edge.sourceId) ??\n edge.fromNodeId ??\n edge.sourceId ??\n \"\",\n toNodeId:\n resolveExternalId(edge.toNodeId ?? edge.targetId) ??\n edge.toNodeId ??\n edge.targetId ??\n \"\",\n edgeType: edge.edgeType as any,\n weight: edge.weight,\n confidence: edge.confidence,\n context: edge.context,\n derivationType: edge.derivationType,\n createdBy: edge.createdBy ?? authContext.userId,\n topicId: edge.topicId,\n })),\n skipLayerValidation: input.skipLayerValidation,\n userId: authContext.userId,\n });\n}\n\nexport function deleteEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edgeIds: string[];\n }\n) {\n void authContext;\n return authContext.convex.mutation(api.epistemicEdges.deleteEdges, {\n edgeIds: input.edgeIds.map((edgeId) => resolveExternalId(edgeId) ?? edgeId),\n userId: authContext.userId,\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n batchCreateEdgesFromGatewayAuth,\n createEdgeFromGatewayAuth,\n deleteEdgesFromGatewayAuth,\n listEdgesFromGatewayAuth,\n removeEdgeFromGatewayAuth,\n removeEdgesBetweenFromGatewayAuth,\n traverseEdgesFromGatewayAuth,\n updateEdgeFromGatewayAuth,\n} from \"@lucern/server-core/edges\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nexport async function handleEdgeCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createEdgeFromGatewayAuth(args.authContext, {\n sourceId: readString(body.sourceId) ?? \"\",\n targetId: readString(body.targetId) ?? \"\",\n edgeType: readString(body.edgeType) ?? \"\",\n topicId: readString(body.topicId),\n confidence: readNumber(body.confidence),\n weight: readNumber(body.weight),\n context: readString(body.context ?? body.reasoning),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to create edge.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n sourceId?: string;\n edgeType?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listEdgesFromGatewayAuth(args.authContext, {\n sourceId: args.query.sourceId ?? \"\",\n edgeType: args.query.edgeType,\n limit: args.query.limit,\n cursor: args.query.cursor,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeTraverse(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await traverseEdgesFromGatewayAuth(args.authContext, {\n startNode: readString(body.startNode) ?? \"\",\n direction: readString(body.direction),\n maxDepth: readNumber(body.maxDepth),\n topicId: readString(body.topicId),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to traverse edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEdgeFromGatewayAuth(args.authContext, {\n edgeId: readString(body.edgeId) ?? \"\",\n weight: readNumber(body.weight),\n confidence: readNumber(body.confidence),\n context: readString(body.context),\n derivationType: readString(body.derivationType),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to update edge.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeRemove(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeEdgeFromGatewayAuth(args.authContext, {\n edgeId: readString(body.edgeId) ?? \"\",\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to remove edge.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgesRemoveBetween(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeEdgesBetweenFromGatewayAuth(args.authContext, {\n fromNodeId:\n readString(body.fromNodeId) ?? readString(body.sourceId) ?? \"\",\n toNodeId: readString(body.toNodeId) ?? readString(body.targetId) ?? \"\",\n edgeType: readString(body.edgeType),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to remove edges between nodes.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeBatchCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const edges = Array.isArray(body.edges)\n ? body.edges\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n globalId: readString(entry.globalId),\n fromNodeId:\n readString(entry.fromNodeId) ?? readString(entry.sourceId),\n sourceId: readString(entry.sourceId),\n toNodeId: readString(entry.toNodeId) ?? readString(entry.targetId),\n targetId: readString(entry.targetId),\n edgeType: readString(entry.edgeType) ?? \"\",\n weight: readNumber(entry.weight),\n confidence: readNumber(entry.confidence),\n context: readString(entry.context),\n derivationType: readString(entry.derivationType),\n createdBy: readString(entry.createdBy),\n topicId: readString(entry.topicId),\n }))\n : [];\n const payload = await batchCreateEdgesFromGatewayAuth(args.authContext, {\n edges,\n skipLayerValidation:\n typeof body.skipLayerValidation === \"boolean\"\n ? body.skipLayerValidation\n : undefined,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to batch create edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeDelete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await deleteEdgesFromGatewayAuth(args.authContext, {\n edgeIds: readStringArray(body.edgeIds) ?? [],\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to delete edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\n\nfunction handleEventsError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleEventsList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n after?: string;\n types?: string[];\n startTime?: number;\n endTime?: number;\n limit?: number;\n };\n}) {\n try {\n const payload = await args.authContext.convex.query(\"events:listEvents\" as any, {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: args.query.topicId,\n after: args.query.after,\n types: args.query.types,\n startTime: args.query.startTime,\n endTime: args.query.endTime,\n limit: args.query.limit,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleEventsError(\n error,\n \"Failed to list events.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleEventsReplay(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: {\n topicId?: string;\n webhookId?: string;\n after?: string;\n types?: string[];\n startTime?: number;\n endTime?: number;\n limit?: number;\n };\n}) {\n try {\n const payload = await args.authContext.convex.mutation(\n \"events:replayEvents\" as any,\n {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: args.body.topicId,\n webhookId: args.body.webhookId,\n after: args.body.after,\n types: args.body.types,\n startTime: args.body.startTime,\n endTime: args.body.endTime,\n limit: args.body.limit,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleEventsError(\n error,\n \"Failed to replay events.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\nexport type EvidenceTargetType = \"belief\" | \"question\";\ntype EvidenceRelation = \"supports\" | \"contradicts\" | \"neutral\";\n\nexport type EvidenceRecord = {\n id: string;\n nodeId: string;\n evidenceId: string;\n globalId?: string;\n topicId?: string;\n text: string;\n title?: string;\n kind?: string;\n source?: string;\n sourceType?: string;\n externalSourceType?: string;\n status?: string;\n relation?: EvidenceRelation;\n confidence?: number;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type EvidenceListResult = {\n evidence: EvidenceRecord[];\n nextCursor: null;\n};\n\nexport type EvidenceSearchResult = {\n evidenceId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n source?: string;\n kind?: string;\n relevanceScore: number;\n};\n\nexport type EvidenceSearchPage = {\n results: EvidenceSearchResult[];\n nextCursor: null;\n};\n\nexport type LinkEvidenceResult = {\n edgeId: string;\n evidenceId: string;\n targetId: string;\n targetType: EvidenceTargetType;\n weight: number;\n beliefId?: string;\n questionId?: string;\n};\n\nexport type CreateEvidenceInput = {\n topicId: string;\n text: string;\n source?: string;\n targetId?: string;\n targetType?: EvidenceTargetType;\n weight?: number;\n metadata?: Record<string, unknown>;\n title?: string;\n content?: string;\n contentType?: string;\n kind?: string;\n};\n\nexport type ListEvidenceQuery = {\n topicId?: string;\n targetId?: string;\n limit?: number;\n cursor?: string;\n};\n\nexport type SearchEvidenceQuery = {\n q: string;\n topicId?: string;\n targetId?: string;\n limit?: number;\n cursor?: string;\n};\n\ntype TargetRef = {\n type: EvidenceTargetType;\n rawId: string;\n};\n\ntype EvidenceCreatePortInput = Omit<CreateEvidenceInput, \"targetId\"> & {\n target?: TargetRef;\n weight: number;\n};\n\ntype EvidenceLinkPortInput = {\n evidenceRawId: string;\n targetRawId: string;\n weight: number;\n rationale?: string;\n};\n\nexport type EvidencePort = {\n fetchEvidence: (rawId: string) => Promise<unknown | null>;\n listEvidenceByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n listEvidenceForBelief: (rawBeliefId: string) => Promise<unknown[]>;\n listEvidenceForQuestion: (rawQuestionId: string) => Promise<unknown[]>;\n createEvidence: (input: EvidenceCreatePortInput) => Promise<unknown>;\n linkEvidenceToBelief: (input: EvidenceLinkPortInput) => Promise<unknown>;\n linkEvidenceToQuestion: (input: EvidenceLinkPortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[evidence] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction normalizeWeight(value: unknown, fallback = 1): number {\n const numeric = readNumber(value);\n if (numeric === undefined) {\n return fallback;\n }\n return clampNumber(numeric, -1, 1);\n}\n\nfunction normalizeRelation(value: unknown): EvidenceRelation | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"supports\" ||\n normalized === \"contradicts\" ||\n normalized === \"neutral\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[evidence] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction resolveTargetRef(\n targetId: string,\n targetType?: string\n): TargetRef {\n const normalized = normalizeRequiredString(targetId, \"targetId\");\n const explicitType = readString(targetType)?.toLowerCase();\n if (explicitType) {\n if (explicitType !== \"belief\" && explicitType !== \"question\") {\n throw new Error(\"[evidence] targetType must be belief or question.\");\n }\n return {\n type: explicitType,\n rawId:\n explicitType === \"question\"\n ? decodeExternalId(normalized, \"que\")\n : decodeExternalId(normalized, \"bel\"),\n };\n }\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix === \"que\") {\n return { type: \"question\", rawId: decoded.value };\n }\n if (decoded.prefix === \"bel\") {\n return { type: \"belief\", rawId: decoded.value };\n }\n } catch {\n // Fall through — raw Stack callers still use belief node IDs directly.\n }\n\n return { type: \"belief\", rawId: normalized };\n}\n\nfunction computeSearchScore(\n needle: string,\n evidence: EvidenceRecord\n): number | null {\n const normalizedNeedle = needle.toLowerCase();\n const haystacks = [\n evidence.text,\n evidence.title,\n evidence.source,\n evidence.kind,\n ]\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.toLowerCase());\n\n let bestScore = 0;\n for (const haystack of haystacks) {\n if (haystack === normalizedNeedle) {\n bestScore = Math.max(bestScore, 1);\n continue;\n }\n if (haystack.startsWith(normalizedNeedle)) {\n bestScore = Math.max(bestScore, 0.9);\n continue;\n }\n if (haystack.includes(normalizedNeedle)) {\n bestScore = Math.max(bestScore, 0.75);\n }\n }\n\n return bestScore > 0 ? bestScore : null;\n}\n\nfunction maybeNormalizeForeignId(\n value: unknown,\n prefix: \"bel\" | \"que\"\n): string | undefined {\n const rawId = readString(value);\n if (!rawId) {\n return undefined;\n }\n return encodeId(prefix, decodeExternalId(rawId, prefix));\n}\n\nfunction normalizeEvidenceRecord(value: unknown): EvidenceRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const rawId = decodeExternalId(\n normalizeRequiredString(\n record._id ?? record.nodeId ?? record.evidenceId,\n \"evidenceId\"\n ),\n \"evi\"\n );\n const canonicalId = encodeId(\"evi\", rawId);\n const text =\n readString(record.text) ??\n readString(record.canonicalText) ??\n readString(record.insight) ??\n \"\";\n\n const relation =\n normalizeRelation(record.relation) ??\n normalizeRelation(record.impact) ??\n normalizeRelation(metadata.evidenceRelation);\n\n const confidence =\n readNumber(record.confidence) ??\n readNumber(metadata.confidence) ??\n (() => {\n const weight = readNumber(record.weight);\n return weight === undefined ? undefined : Math.abs(weight);\n })();\n\n const linkedBeliefId =\n maybeNormalizeForeignId(\n record.linkedBeliefId ??\n record.linkedBeliefNodeId ??\n metadata.linkedBeliefNodeId ??\n metadata.linkedBeliefId,\n \"bel\"\n );\n const linkedQuestionId =\n maybeNormalizeForeignId(\n record.questionId ??\n record.sourceQuestionId ??\n metadata.sourceQuestionId,\n \"que\"\n );\n\n return {\n id: canonicalId,\n nodeId: canonicalId,\n evidenceId: canonicalId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n text,\n ...(readString(record.title) ? { title: readString(record.title)! } : {}),\n ...(readString(record.kind) ??\n readString(metadata.kind)\n ? { kind: readString(record.kind) ?? readString(metadata.kind)! }\n : {}),\n ...(readString(record.source) ??\n readString(record.sourceUrl) ??\n readString(record.externalSourceUrl) ??\n readString(metadata.source) ??\n readString(metadata.sourceUrl)\n ? {\n source:\n readString(record.source) ??\n readString(record.sourceUrl) ??\n readString(record.externalSourceUrl) ??\n readString(metadata.source) ??\n readString(metadata.sourceUrl)!,\n }\n : {}),\n ...(readString(record.sourceType)\n ? { sourceType: readString(record.sourceType)! }\n : {}),\n ...(readString(record.externalSourceType) ??\n readString(metadata.externalSourceType)\n ? {\n externalSourceType:\n readString(record.externalSourceType) ??\n readString(metadata.externalSourceType)!,\n }\n : {}),\n ...(readString(record.status) ? { status: readString(record.status)! } : {}),\n ...(relation ? { relation } : {}),\n ...(confidence !== undefined ? { confidence } : {}),\n ...(linkedBeliefId ? { linkedBeliefId } : {}),\n ...(linkedQuestionId ? { linkedQuestionId } : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction dedupeEvidence(records: EvidenceRecord[]): EvidenceRecord[] {\n const byId = new Map<string, EvidenceRecord>();\n for (const record of records) {\n byId.set(record.id, record);\n }\n return [...byId.values()];\n}\n\nfunction extractCreatedRawId(value: unknown): string {\n const record = asRecord(value);\n return decodeExternalId(\n normalizeRequiredString(\n record.nodeId ?? record._id ?? record.evidenceId,\n \"created evidence id\"\n ),\n \"evi\"\n );\n}\n\nfunction normalizeLinkResult(args: {\n result: unknown;\n evidenceRawId: string;\n target: TargetRef;\n weight: number;\n}): LinkEvidenceResult {\n const record = asRecord(args.result);\n const edgeSource =\n readString(record.edgeId) ??\n readString(record.edgeGlobalId) ??\n readString(record._id) ??\n crypto.randomUUID();\n const edgeId = edgeSource.startsWith(\"edg_\")\n ? edgeSource\n : encodeId(\"edg\", edgeSource);\n const targetId = encodeId(args.target.type === \"question\" ? \"que\" : \"bel\", args.target.rawId);\n const evidenceId = encodeId(\"evi\", args.evidenceRawId);\n\n return {\n edgeId,\n evidenceId,\n targetId,\n targetType: args.target.type,\n weight: args.weight,\n ...(args.target.type === \"belief\"\n ? { beliefId: targetId }\n : { questionId: targetId }),\n };\n}\n\nexport async function getEvidence(\n deps: EvidencePort,\n input: { id: string }\n): Promise<EvidenceRecord> {\n const rawId = decodeExternalId(input.id, \"evi\");\n const evidence = await deps.fetchEvidence(rawId);\n if (!evidence) {\n throw new Error(`[evidence.get] Evidence ${input.id} was not found.`);\n }\n return normalizeEvidenceRecord(evidence);\n}\n\nexport async function listEvidence(\n deps: EvidencePort,\n query: ListEvidenceQuery\n): Promise<EvidenceListResult> {\n let rows: unknown[] = [];\n\n if (query.targetId) {\n const target = resolveTargetRef(query.targetId);\n rows =\n target.type === \"question\"\n ? await deps.listEvidenceForQuestion(target.rawId)\n : await deps.listEvidenceForBelief(target.rawId);\n } else {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n rows = await deps.listEvidenceByTopic({\n topicId,\n limit: query.limit,\n });\n }\n\n return {\n evidence: dedupeEvidence(rows.map(normalizeEvidenceRecord)),\n nextCursor: null,\n };\n}\n\nexport async function searchEvidence(\n deps: EvidencePort,\n query: SearchEvidenceQuery\n): Promise<EvidenceSearchPage> {\n const needle = normalizeRequiredString(query.q, \"q\");\n const page = await listEvidence(deps, {\n topicId: query.topicId,\n targetId: query.targetId,\n limit: query.limit,\n cursor: query.cursor,\n });\n\n const results = page.evidence\n .map((evidence) => ({\n evidence,\n score: computeSearchScore(needle, evidence),\n }))\n .filter(\n (entry): entry is { evidence: EvidenceRecord; score: number } =>\n entry.score !== null\n )\n .sort((a, b) => b.score - a.score)\n .slice(0, query.limit ?? 25)\n .map(({ evidence, score }) => ({\n evidenceId: evidence.id,\n nodeId: evidence.nodeId,\n ...(evidence.globalId ? { globalId: evidence.globalId } : {}),\n text: evidence.text,\n ...(evidence.source ? { source: evidence.source } : {}),\n ...(evidence.kind ? { kind: evidence.kind } : {}),\n relevanceScore: score,\n }));\n\n return {\n results,\n nextCursor: null,\n };\n}\n\nexport async function createEvidence(\n deps: EvidencePort,\n input: CreateEvidenceInput\n): Promise<EvidenceRecord> {\n const target = input.targetId\n ? resolveTargetRef(input.targetId, input.targetType)\n : undefined;\n const created = await deps.createEvidence({\n ...input,\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n text: normalizeRequiredString(input.text, \"text\"),\n weight: normalizeWeight(input.weight, 1),\n target,\n });\n\n return getEvidence(deps, {\n id: encodeId(\"evi\", extractCreatedRawId(created)),\n });\n}\n\nexport async function linkEvidence(\n deps: EvidencePort,\n input: {\n evidenceId: string;\n targetId: string;\n targetType?: string;\n weight?: number;\n rationale?: string;\n }\n): Promise<LinkEvidenceResult> {\n const evidenceRawId = decodeExternalId(input.evidenceId, \"evi\");\n const target = resolveTargetRef(input.targetId, input.targetType);\n const weight = normalizeWeight(input.weight, 1);\n\n const result =\n target.type === \"question\"\n ? await deps.linkEvidenceToQuestion({\n evidenceRawId,\n targetRawId: target.rawId,\n weight,\n rationale: readString(input.rationale),\n })\n : await deps.linkEvidenceToBelief({\n evidenceRawId,\n targetRawId: target.rawId,\n weight,\n rationale: readString(input.rationale),\n });\n\n return normalizeLinkResult({\n result,\n evidenceRawId,\n target,\n weight,\n });\n}\n","import { api, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n createEvidence,\n getEvidence,\n linkEvidence,\n listEvidence,\n searchEvidence,\n type CreateEvidenceInput,\n type EvidencePort,\n type LinkEvidenceResult,\n type ListEvidenceQuery,\n type SearchEvidenceQuery,\n} from \"./domain/evidence\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeWeight(value: number | undefined): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return 1;\n }\n return Math.max(-1, Math.min(value, 1));\n}\n\nfunction normalizeQuestionLinkArgs(weight: number | undefined) {\n const normalizedWeight = normalizeWeight(weight);\n return {\n relevance: Math.max(0, Math.min(Math.abs(normalizedWeight), 1)),\n impact:\n normalizedWeight > 0\n ? \"supports\"\n : normalizedWeight < 0\n ? \"contradicts\"\n : \"neutral\",\n impactScore: Math.round(normalizedWeight * 10) / 10,\n } as const;\n}\n\nfunction resolveExternalId(value: string | undefined): string | undefined {\n if (!value) {\n return value;\n }\n try {\n return decodePrefixedId(value).value;\n } catch {\n return value;\n }\n}\n\nasync function resolveEvidenceTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n evidenceId: string\n) {\n const evidence = (await authContext.convex.query(api.epistemicEvidence.getById, {\n evidenceId: evidenceId as any,\n nodeId: evidenceId as any,\n })) as Record<string, unknown> | null;\n return readString(evidence?.topicId);\n}\n\nasync function resolveEvidenceNodeIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n evidenceId: string\n) {\n const evidence = (await authContext.convex.query(api.epistemicEvidence.getById, {\n evidenceId: evidenceId as any,\n nodeId: evidenceId as any,\n })) as Record<string, unknown> | null;\n return (\n readString(evidence?._id) ??\n readString(evidence?.nodeId) ??\n readString(evidence?.evidenceId)\n );\n}\n\nasync function resolveEvidenceTopicIdWithMcpAuth(\n authContext: AuthContext,\n evidenceId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveEvidenceTopicIdWithMcpAuth\");\n const evidence = (await convex.query(api.epistemicEvidence.getById, {\n evidenceId: evidenceId as any,\n nodeId: evidenceId as any,\n })) as Record<string, unknown> | null;\n return readString(evidence?.topicId);\n}\n\nasync function emitEvidenceEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"evidence\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitEvidenceEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitEvidenceEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"evidence\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayEvidencePort(\n authContext: GatewayAuthContext\n): EvidencePort {\n return {\n fetchEvidence(rawId) {\n return authContext.convex.query(api.epistemicEvidence.getById, {\n evidenceId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listEvidenceByTopic(args) {\n return authContext.convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceForBelief(rawBeliefId) {\n return authContext.convex.query(api.epistemicEvidence.getForBelief, {\n beliefNodeId: rawBeliefId as any,\n }) as Promise<unknown[]>;\n },\n listEvidenceForQuestion(rawQuestionId) {\n return authContext.convex.query(\n api.questionEvidenceLinks.getEvidenceWithDetails,\n {\n questionId: rawQuestionId as any,\n }\n ) as Promise<unknown[]>;\n },\n async createEvidence(input) {\n const created = await authContext.convex.mutation(api.epistemicEvidence.create, {\n topicId: input.topicId,\n text: input.text,\n title: input.title,\n content: input.content,\n contentType: input.contentType,\n kind: input.kind,\n sourceUrl: input.source,\n metadata: input.metadata,\n userId: authContext.userId,\n });\n\n const createdRecord =\n created && typeof created === \"object\"\n ? (created as Record<string, unknown>)\n : {};\n const rawId = String(\n createdRecord.nodeId ?? createdRecord._id ?? createdRecord.evidenceId ?? \"\"\n );\n\n if (!rawId || !input.target) {\n return created;\n }\n\n if (input.target.type === \"question\") {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n await authContext.convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.target.rawId as any,\n insightId: rawId as any,\n helpsAnswer: true,\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n } else {\n await authContext.convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.target.rawId as any,\n insightId: rawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n userId: authContext.userId,\n });\n }\n\n return created;\n },\n linkEvidenceToBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n linkEvidenceToQuestion(input) {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n return authContext.convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n helpsAnswer: true,\n rationale: input.rationale,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n },\n };\n}\n\nfunction createMcpEvidencePort(authContext: AuthContext): EvidencePort {\n const convex = requireMcpConvex(authContext, \"createMcpEvidencePort\");\n return {\n fetchEvidence(rawId) {\n return convex.query(api.epistemicEvidence.getById, {\n evidenceId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listEvidenceByTopic(args) {\n return convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceForBelief(rawBeliefId) {\n return convex.query(api.epistemicEvidence.getForBelief, {\n beliefNodeId: rawBeliefId as any,\n }) as Promise<unknown[]>;\n },\n listEvidenceForQuestion(rawQuestionId) {\n return convex.query(api.questionEvidenceLinks.getEvidenceWithDetails, {\n questionId: rawQuestionId as any,\n }) as Promise<unknown[]>;\n },\n async createEvidence(input) {\n const created = await convex.mutation(api.epistemicEvidence.create, {\n topicId: input.topicId,\n text: input.text,\n title: input.title,\n content: input.content,\n contentType: input.contentType,\n kind: input.kind,\n sourceUrl: input.source,\n metadata: input.metadata,\n userId: authContext.userId,\n });\n\n const createdRecord =\n created && typeof created === \"object\"\n ? (created as Record<string, unknown>)\n : {};\n const rawId = String(\n createdRecord.nodeId ?? createdRecord._id ?? createdRecord.evidenceId ?? \"\"\n );\n\n if (!rawId || !input.target) {\n return created;\n }\n\n if (input.target.type === \"question\") {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n await convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.target.rawId as any,\n insightId: rawId as any,\n helpsAnswer: true,\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n } else {\n await convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.target.rawId as any,\n insightId: rawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n userId: authContext.userId,\n });\n }\n\n return created;\n },\n linkEvidenceToBelief(input) {\n return convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n linkEvidenceToQuestion(input) {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n return convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n helpsAnswer: true,\n rationale: input.rationale,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n },\n };\n}\n\nexport function listEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListEvidenceQuery\n){\n return listEvidence(createGatewayEvidencePort(authContext), query);\n}\n\nexport function getEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getEvidence(createGatewayEvidencePort(authContext), { id });\n}\n\nexport async function createEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateEvidenceInput\n) {\n const payload = await createEvidence(createGatewayEvidencePort(authContext), input);\n const topicId = payload.topicId ?? input.topicId;\n\n await emitEvidenceEventFromGatewayAuth(authContext, {\n topicId,\n type: \"evidence.created\",\n resourceId: payload.id,\n data: {\n text: payload.text,\n title: payload.title,\n source: payload.source ?? input.source,\n kind: payload.kind ?? input.kind,\n metadata: input.metadata,\n },\n });\n\n if (input.targetId) {\n await emitEvidenceEventFromGatewayAuth(authContext, {\n topicId,\n type: \"evidence.linked\",\n resourceId: payload.id,\n data: {\n targetId: input.targetId,\n targetType: input.targetType ?? (payload.linkedQuestionId ? \"question\" : \"belief\"),\n weight: normalizeWeight(input.weight),\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n beliefId: payload.linkedBeliefId,\n questionId: payload.linkedQuestionId,\n },\n });\n }\n\n return payload;\n}\n\nexport async function linkEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n evidenceId: string;\n targetId: string;\n targetType?: string;\n weight?: number;\n rationale?: string;\n }\n): Promise<LinkEvidenceResult> {\n const payload = await linkEvidence(createGatewayEvidencePort(authContext), input);\n await emitEvidenceEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveEvidenceTopicIdWithGatewayAuth(authContext, payload.evidenceId)) ??\n \"\",\n type: \"evidence.linked\",\n resourceId: payload.evidenceId,\n data: {\n edgeId: payload.edgeId,\n targetId: payload.targetId,\n targetType: payload.targetType,\n weight: payload.weight,\n beliefId: payload.beliefId,\n questionId: payload.questionId,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport function searchEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: SearchEvidenceQuery\n) {\n return searchEvidence(createGatewayEvidencePort(authContext), query);\n}\n\nexport async function updateEvidenceStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n status: \"active\" | \"archived\" | \"acted_on\";\n }\n) {\n const resolvedNodeId = await resolveEvidenceNodeIdWithGatewayAuth(\n authContext,\n resolveExternalId(\n input.id ?? input.nodeId ?? input.evidenceId ?? input.insightId ?? \"\"\n ) ?? \"\"\n );\n\n return authContext.convex.mutation(api.epistemicEvidence.updateStatus, {\n nodeId: (resolvedNodeId ?? input.nodeId ?? input.id) as any,\n status: input.status,\n userId: authContext.userId,\n });\n}\n\nexport function updateEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n text?: string;\n kind?: string;\n tags?: string[];\n externalSourceUrl?: string;\n verificationStatus?: string;\n }\n) {\n const evidenceId =\n resolveExternalId(\n input.id ?? input.evidenceId ?? input.insightId ?? input.nodeId ?? \"\"\n ) ?? \"\";\n\n return authContext.convex.mutation(api.epistemicEvidence.update, {\n insightId: evidenceId,\n text: input.text,\n kind: input.kind,\n tags: input.tags,\n externalSourceUrl: input.externalSourceUrl,\n verificationStatus: input.verificationStatus,\n userId: authContext.userId,\n });\n}\n\nexport function flagEvidenceAsIncorrectFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n reason: string;\n suggestedCorrection?: string;\n }\n) {\n const evidenceId =\n resolveExternalId(\n input.id ?? input.evidenceId ?? input.insightId ?? input.nodeId ?? \"\"\n ) ?? \"\";\n\n return authContext.convex.mutation(api.epistemicEvidence.flagAsIncorrect, {\n insightId: evidenceId as any,\n reason: input.reason,\n suggestedCorrection: input.suggestedCorrection,\n userId: authContext.userId,\n });\n}\n\nexport function removeEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n }\n) {\n const evidenceId =\n resolveExternalId(\n input.id ?? input.evidenceId ?? input.insightId ?? input.nodeId ?? \"\"\n ) ?? \"\";\n\n return authContext.convex.mutation(api.epistemicEvidence.remove, {\n insightId: evidenceId,\n userId: authContext.userId,\n });\n}\n\nexport async function updateEvidenceVerificationStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n verificationHash: string;\n verificationStatus: string;\n lastVerificationId?: string;\n }\n) {\n const resolvedNodeId = await resolveEvidenceNodeIdWithGatewayAuth(\n authContext,\n resolveExternalId(\n input.id ?? input.nodeId ?? input.evidenceId ?? input.insightId ?? \"\"\n ) ?? \"\"\n );\n\n return authContext.convex.mutation(api.epistemicEvidence.updateVerificationStatus, {\n nodeId: (resolvedNodeId ?? input.nodeId ?? input.id) as any,\n verificationHash: input.verificationHash,\n verificationStatus: input.verificationStatus,\n lastVerificationId: input.lastVerificationId as any,\n userId: authContext.userId,\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n createEvidenceFromGatewayAuth,\n flagEvidenceAsIncorrectFromGatewayAuth,\n getEvidenceFromGatewayAuth,\n linkEvidenceFromGatewayAuth,\n listEvidenceFromGatewayAuth,\n removeEvidenceFromGatewayAuth,\n searchEvidenceFromGatewayAuth,\n updateEvidenceFromGatewayAuth,\n updateEvidenceStatusFromGatewayAuth,\n updateEvidenceVerificationStatusFromGatewayAuth,\n} from \"@lucern/server-core/evidence\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nexport async function handleEvidenceCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createEvidenceFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n text: readString(body.text) ?? \"\",\n source: readString(body.source),\n targetId: readString(body.targetId),\n targetType: readString(body.targetType) as \"belief\" | \"question\" | undefined,\n weight: readNumber(body.weight),\n metadata: asRecord(body.metadata),\n title: readString(body.title),\n content: readString(body.content),\n contentType: readString(body.contentType),\n kind: readString(body.kind),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to create evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n evidenceId: string;\n}) {\n try {\n const payload = await getEvidenceFromGatewayAuth(\n args.authContext,\n args.evidenceId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n targetId?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listEvidenceFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceLink(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n evidenceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await linkEvidenceFromGatewayAuth(args.authContext, {\n evidenceId: args.evidenceId,\n targetId: readString(body.targetId) ?? \"\",\n targetType: readString(body.targetType),\n weight: readNumber(body.weight),\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to link evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceSearch(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await searchEvidenceFromGatewayAuth(args.authContext, {\n q: readString(body.q) ?? \"\",\n topicId: readString(body.topicId),\n targetId: readString(body.targetId),\n limit: readNumber(body.limit),\n cursor: readString(body.cursor),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to search evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceUpdateStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEvidenceStatusFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n status:\n (readString(body.status) as \"active\" | \"archived\" | \"acted_on\") ??\n \"active\",\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update evidence status.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEvidenceFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n text: readString(body.text),\n kind: readString(body.kind),\n tags: readStringArray(body.tags),\n externalSourceUrl:\n readString(body.externalSourceUrl) ?? readString(body.sourceUrl),\n verificationStatus: readString(body.verificationStatus),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to update evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceFlagIncorrect(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await flagEvidenceAsIncorrectFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n reason: readString(body.reason) ?? \"\",\n suggestedCorrection: readString(body.suggestedCorrection),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to flag evidence as incorrect.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceRemove(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeEvidenceFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to remove evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceUpdateVerificationStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEvidenceVerificationStatusFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n verificationHash: readString(body.verificationHash) ?? \"\",\n verificationStatus: readString(body.verificationStatus) ?? \"\",\n lastVerificationId: readString(body.lastVerificationId),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update evidence verification status.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import { encodePrefixedId } from \"@lucern/contracts\";\n\ntype GraphDirection = \"up\" | \"down\" | \"both\";\n\ntype GraphNodeRecord = Record<string, unknown>;\ntype GraphEdgeRecord = Record<string, unknown>;\n\ntype GraphBeliefGapRecord = {\n beliefId: string;\n text: string;\n confidence: number | null;\n suggestedQuestions: string[];\n};\n\nexport type GraphNeighborhoodInput = {\n globalId?: string;\n globalIds?: string[];\n maxDepth?: number;\n};\n\nexport type GraphNeighborhoodResult = {\n nodes: GraphNodeRecord[];\n edges: GraphEdgeRecord[];\n depth: number;\n};\n\nexport type GraphTraverseInput = {\n startNode: string;\n direction?: string;\n maxDepth?: number;\n topicId?: string;\n};\n\nexport type GraphTraverseResult = {\n startNode: string;\n direction: GraphDirection;\n maxDepth: number;\n nodes: GraphNodeRecord[];\n edges: GraphEdgeRecord[];\n depth: number;\n topicId?: string;\n};\n\nexport type GraphAnalyzeInput = {\n topicId: string;\n metric?: string;\n limit?: number;\n};\n\nexport type GraphAnalyzeResult = {\n topicId: string;\n metric: string;\n payload: Record<string, unknown>;\n};\n\nexport type GraphBiasInput = {\n topicId: string;\n threshold?: number;\n limit?: number;\n};\n\nexport type GraphBiasBelief = {\n nodeId: string;\n biasScore: number;\n riskLevel: string;\n supportingCount: number;\n challengingCount: number;\n};\n\nexport type GraphBiasResult = {\n topicId: string;\n metric: \"confirmation_bias\";\n threshold: number;\n beliefs: GraphBiasBelief[];\n payload: Record<string, unknown>;\n};\n\nexport type GraphGapsInput = {\n topicId: string;\n minConfidence?: number;\n};\n\nexport type GraphGapsResult = {\n topicId: string;\n gaps: GraphBeliefGapRecord[];\n totalGaps: number;\n};\n\ntype GraphBeliefRecord = {\n beliefId?: string;\n nodeId?: string;\n topicId?: string;\n text?: string;\n canonicalText?: string;\n confidence?: number | null;\n};\n\ntype GraphQuestionRecord = {\n questionId?: string;\n nodeId?: string;\n linkedBeliefId?: string;\n};\n\ntype GraphTestingEdgeRecord = {\n fromNodeId?: string;\n toNodeId?: string;\n edgeType?: string;\n};\n\nexport type GraphFalsifyInput = {\n topicId?: string;\n beliefId?: string;\n beliefIds?: string[];\n minConfidence?: number;\n};\n\nexport type GraphFalsificationQuestion = {\n questionText: string;\n falsificationPotential: number;\n targetBeliefId: string;\n targetBeliefText: string;\n};\n\nexport type GraphFalsifyResult = {\n topicId: string;\n questions: GraphFalsificationQuestion[];\n};\n\nexport type GraphPort = {\n neighborhood: (input: {\n globalIds: string[];\n maxDepth: number;\n }) => Promise<unknown>;\n traverse: (input: {\n startNode: string;\n direction: GraphDirection;\n maxDepth: number;\n topicId?: string;\n }) => Promise<unknown>;\n analyze: (input: {\n topicId: string;\n metric: string;\n limit?: number;\n }) => Promise<unknown>;\n bias: (input: {\n topicId: string;\n threshold: number;\n limit?: number;\n }) => Promise<unknown>;\n listBeliefs: (input: {\n topicId: string;\n minConfidence?: number;\n limit?: number;\n }) => Promise<GraphBeliefRecord[]>;\n fetchBelief: (input: { beliefId: string }) => Promise<GraphBeliefRecord | null>;\n listQuestions: (input: {\n topicId: string;\n limit?: number;\n }) => Promise<GraphQuestionRecord[]>;\n listTestingEdges: (input: { topicId: string }) => Promise<GraphTestingEdgeRecord[]>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asRecordArray(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value)\n ? value.filter(\n (entry): entry is Record<string, unknown> =>\n Boolean(entry) && typeof entry === \"object\" && !Array.isArray(entry)\n )\n : [];\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[graph] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction normalizeDepth(value: unknown, fallback = 2): number {\n const parsed = readNumber(value);\n if (parsed === undefined) {\n return fallback;\n }\n return Math.max(1, Math.min(Math.floor(parsed), 10));\n}\n\nfunction normalizeDirection(value: unknown): GraphDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"up\" || normalized === \"down\") {\n return normalized;\n }\n return \"both\";\n}\n\nfunction normalizeMetric(value: unknown): string {\n return readString(value) ?? \"graph_stats\";\n}\n\nfunction normalizeThreshold(value: unknown): number {\n const parsed = readNumber(value);\n if (parsed === undefined) {\n return 0.7;\n }\n return Math.max(0, Math.min(parsed, 1));\n}\n\nfunction normalizeGlobalIds(input: GraphNeighborhoodInput): string[] {\n const ids = new Set<string>();\n const direct = readString(input.globalId);\n if (direct) {\n ids.add(direct);\n }\n for (const candidate of input.globalIds ?? []) {\n const normalized = readString(candidate);\n if (normalized) {\n ids.add(normalized);\n }\n }\n return [...ids];\n}\n\nfunction normalizeGraphNode(value: unknown): GraphNodeRecord {\n return asRecord(value);\n}\n\nfunction normalizeGraphEdge(value: unknown): GraphEdgeRecord {\n return asRecord(value);\n}\n\nfunction normalizeNeighborhoodResult(\n value: unknown,\n maxDepth: number\n): GraphNeighborhoodResult {\n const payload = asRecord(value);\n return {\n nodes: asRecordArray(payload.nodes).map(normalizeGraphNode),\n edges: asRecordArray(payload.edges).map(normalizeGraphEdge),\n depth: normalizeDepth(payload.depth, maxDepth),\n };\n}\n\nfunction normalizeTraverseResult(\n value: unknown,\n input: {\n startNode: string;\n direction: GraphDirection;\n maxDepth: number;\n topicId?: string;\n }\n): GraphTraverseResult {\n const payload = asRecord(value);\n return {\n startNode: readString(payload.startNode) ?? input.startNode,\n direction: normalizeDirection(payload.direction ?? input.direction),\n maxDepth: normalizeDepth(payload.maxDepth, input.maxDepth),\n nodes: asRecordArray(payload.nodes).map(normalizeGraphNode),\n edges: asRecordArray(payload.edges).map(normalizeGraphEdge),\n depth: normalizeDepth(payload.depth, input.maxDepth),\n ...(readString(payload.topicId) ?? readString(input.topicId)\n ? { topicId: readString(payload.topicId) ?? readString(input.topicId)! }\n : {}),\n };\n}\n\nfunction normalizeAnalyzeResult(\n value: unknown,\n input: { topicId: string; metric: string }\n): GraphAnalyzeResult {\n const payload = asRecord(value);\n return {\n topicId: readString(payload.topicId) ?? input.topicId,\n metric: readString(payload.metric) ?? input.metric,\n payload: asRecord(payload.payload),\n };\n}\n\nfunction normalizeBiasBelief(\n value: unknown,\n threshold: number\n): GraphBiasBelief {\n const record = asRecord(value);\n return {\n nodeId: readString(record.nodeId) ?? \"\",\n biasScore: readNumber(record.biasScore) ?? threshold,\n riskLevel: readString(record.riskLevel) ?? \"moderate\",\n supportingCount: readNumber(record.supportingCount) ?? 0,\n challengingCount: readNumber(record.challengingCount) ?? 0,\n };\n}\n\nfunction normalizeBiasResult(\n value: unknown,\n input: { topicId: string; threshold: number }\n): GraphBiasResult {\n const payload = asRecord(value);\n const nestedPayload = asRecord(payload.payload);\n const beliefsSource =\n asRecordArray(payload.beliefs).length > 0\n ? asRecordArray(payload.beliefs)\n : asRecordArray(nestedPayload.results).length > 0\n ? asRecordArray(nestedPayload.results)\n : asRecordArray(nestedPayload.beliefs);\n\n return {\n topicId: readString(payload.topicId) ?? input.topicId,\n metric: \"confirmation_bias\",\n threshold:\n readNumber(payload.threshold) ?? readNumber(nestedPayload.threshold) ?? input.threshold,\n beliefs: beliefsSource.map((belief) => normalizeBiasBelief(belief, input.threshold)),\n payload: nestedPayload,\n };\n}\n\nfunction canonicalBeliefId(value: unknown): string | undefined {\n const id = readString(value);\n if (!id) {\n return undefined;\n }\n return id.startsWith(\"bel_\") ? id : encodePrefixedId(\"bel\", id);\n}\n\nfunction canonicalQuestionId(value: unknown): string | undefined {\n const id = readString(value);\n if (!id) {\n return undefined;\n }\n return id.startsWith(\"que_\") ? id : encodePrefixedId(\"que\", id);\n}\n\nexport async function graphNeighborhood(\n deps: GraphPort,\n input: GraphNeighborhoodInput\n): Promise<GraphNeighborhoodResult> {\n const globalIds = normalizeGlobalIds(input);\n if (globalIds.length === 0) {\n throw new Error(\"[graph.neighborhood] globalId or globalIds is required.\");\n }\n const maxDepth = normalizeDepth(input.maxDepth, 2);\n const payload = await deps.neighborhood({ globalIds, maxDepth });\n return normalizeNeighborhoodResult(payload, maxDepth);\n}\n\nexport async function graphTraverse(\n deps: GraphPort,\n input: GraphTraverseInput\n): Promise<GraphTraverseResult> {\n const startNode = normalizeRequiredString(input.startNode, \"startNode\");\n const direction = normalizeDirection(input.direction);\n const maxDepth = normalizeDepth(input.maxDepth, 3);\n const topicId = readString(input.topicId);\n const payload = await deps.traverse({\n startNode,\n direction,\n maxDepth,\n topicId,\n });\n\n return normalizeTraverseResult(payload, {\n startNode,\n direction,\n maxDepth,\n topicId,\n });\n}\n\nexport async function graphAnalyze(\n deps: GraphPort,\n input: GraphAnalyzeInput\n): Promise<GraphAnalyzeResult> {\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const metric = normalizeMetric(input.metric);\n const payload = await deps.analyze({\n topicId,\n metric,\n limit: readNumber(input.limit),\n });\n return normalizeAnalyzeResult(payload, { topicId, metric });\n}\n\nexport async function graphBias(\n deps: GraphPort,\n input: GraphBiasInput\n): Promise<GraphBiasResult> {\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const threshold = normalizeThreshold(input.threshold);\n const payload = await deps.bias({\n topicId,\n threshold,\n limit: readNumber(input.limit),\n });\n return normalizeBiasResult(payload, { topicId, threshold });\n}\n\nexport async function graphGaps(\n deps: GraphPort,\n input: GraphGapsInput\n): Promise<GraphGapsResult> {\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const minConfidence = readNumber(input.minConfidence);\n const [beliefs, questions, edges] = await Promise.all([\n deps.listBeliefs({\n topicId,\n minConfidence,\n limit: 500,\n }),\n deps.listQuestions({\n topicId,\n limit: 500,\n }),\n deps.listTestingEdges({ topicId }),\n ]);\n\n const questionIds = new Set(\n questions\n .map((question) => canonicalQuestionId(question.questionId ?? question.nodeId))\n .filter((value): value is string => Boolean(value))\n );\n const testedBeliefIds = new Set(\n questions\n .map((question) => canonicalBeliefId(question.linkedBeliefId))\n .filter((value): value is string => Boolean(value))\n );\n\n for (const edge of edges) {\n if (readString(edge.edgeType) !== \"tests\") {\n continue;\n }\n\n const fromQuestionId = canonicalQuestionId(edge.fromNodeId);\n const toQuestionId = canonicalQuestionId(edge.toNodeId);\n const toBeliefId = canonicalBeliefId(edge.toNodeId);\n const fromBeliefId = canonicalBeliefId(edge.fromNodeId);\n\n if (fromQuestionId && questionIds.has(fromQuestionId) && toBeliefId) {\n testedBeliefIds.add(toBeliefId);\n }\n if (toQuestionId && questionIds.has(toQuestionId) && fromBeliefId) {\n testedBeliefIds.add(fromBeliefId);\n }\n }\n\n const gaps = beliefs\n .map((belief) => {\n const beliefId = canonicalBeliefId(belief.beliefId ?? belief.nodeId);\n if (!beliefId || testedBeliefIds.has(beliefId)) {\n return null;\n }\n const text =\n readString(belief.text) ??\n readString(belief.canonicalText) ??\n \"\";\n return {\n beliefId,\n text,\n confidence: readNumber(belief.confidence) ?? null,\n suggestedQuestions: [`What evidence would falsify: ${text}?`],\n };\n })\n .filter((gap): gap is GraphBeliefGapRecord => Boolean(gap));\n\n return {\n topicId,\n gaps,\n totalGaps: gaps.length,\n };\n}\n\nexport async function graphFalsify(\n deps: GraphPort,\n input: GraphFalsifyInput\n): Promise<GraphFalsifyResult> {\n const explicitBeliefIds = [\n readString(input.beliefId),\n ...(Array.isArray(input.beliefIds) ? input.beliefIds : []),\n ].filter((value): value is string => Boolean(value));\n\n let topicId = readString(input.topicId);\n if (!topicId) {\n const firstBeliefId = explicitBeliefIds[0];\n if (!firstBeliefId) {\n throw new Error(\"[graph] topicId or beliefId is required.\");\n }\n\n const belief = await deps.fetchBelief({\n beliefId: canonicalBeliefId(firstBeliefId) ?? firstBeliefId,\n });\n topicId = readString(belief?.topicId);\n if (!topicId) {\n throw new Error(\n \"[graph] Unable to resolve topicId from belief. Pass topicId explicitly.\"\n );\n }\n }\n\n const beliefFilter = new Set(\n explicitBeliefIds\n .map((beliefId) => canonicalBeliefId(beliefId))\n .filter((beliefId): beliefId is string => Boolean(beliefId))\n );\n const gaps = await graphGaps(deps, {\n topicId,\n minConfidence: input.minConfidence,\n });\n\n return {\n topicId,\n questions: gaps.gaps\n .filter((gap) => beliefFilter.size === 0 || beliefFilter.has(gap.beliefId))\n .flatMap((gap) =>\n gap.suggestedQuestions.map((questionText) => ({\n questionText,\n falsificationPotential: 0.5,\n targetBeliefId: gap.beliefId,\n targetBeliefText: gap.text,\n }))\n ),\n };\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype QuestionStatus = \"open\" | \"researching\" | \"answered\" | \"parked\" | \"closed\";\ntype QuestionPriority = \"low\" | \"medium\" | \"high\" | \"urgent\";\ntype AnswerConfidence = \"weak\" | \"medium\" | \"strong\";\n\nexport type QuestionRecord = {\n id: string;\n nodeId: string;\n questionId: string;\n globalId?: string;\n topicId?: string;\n text: string;\n status: QuestionStatus;\n priority: QuestionPriority;\n category?: string;\n linkedBeliefId?: string;\n linkedWorktreeId?: string;\n answer?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type QuestionListResult = {\n questions: QuestionRecord[];\n nextCursor: null;\n};\n\nexport type QuestionAnswerResult = {\n questionId: string;\n answerId: string;\n status: \"answered\";\n};\n\nexport type QuestionArchiveResult = QuestionRecord & {\n previousStatus: string;\n newStatus: \"archived\";\n};\n\nexport type CreateQuestionInput = {\n topicId: string;\n text: string;\n priority?: string;\n linkedBeliefId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type ListQuestionsQuery = {\n topicId?: string;\n status?: string;\n priority?: string;\n worktreeId?: string;\n limit?: number;\n cursor?: string;\n};\n\ntype QuestionCreatePortInput = {\n topicId: string;\n text: string;\n priority?: QuestionPriority;\n linkedBeliefRawId?: string;\n metadata?: Record<string, unknown>;\n};\n\ntype QuestionRefinePortInput = {\n questionRawId: string;\n text: string;\n rationale?: string;\n};\n\ntype QuestionStatusPortInput = {\n questionRawId: string;\n status: QuestionStatus;\n rationale?: string;\n};\n\ntype QuestionAnswerPortInput = {\n questionRawId: string;\n topicId: string;\n text: string;\n confidence?: AnswerConfidence;\n evidenceRawIds?: string[];\n rationale?: string;\n};\n\nexport type QuestionsPort = {\n fetchQuestion: (rawId: string) => Promise<unknown | null>;\n listQuestionsByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n createQuestion: (input: QuestionCreatePortInput) => Promise<unknown>;\n refineQuestion: (input: QuestionRefinePortInput) => Promise<unknown>;\n updateQuestionStatus: (input: QuestionStatusPortInput) => Promise<unknown>;\n createAnswer: (input: QuestionAnswerPortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[questions] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[questions] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeQuestionStatus(value: unknown): QuestionStatus {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"open\":\n case \"active\":\n return \"open\";\n case \"researching\":\n case \"in_progress\":\n return \"researching\";\n case \"answered\":\n return \"answered\";\n case \"parked\":\n return \"parked\";\n case \"archived\":\n case \"closed\":\n return \"closed\";\n default:\n return \"open\";\n }\n}\n\nfunction normalizeQuestionPriority(value: unknown): QuestionPriority {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"critical\":\n case \"urgent\":\n return \"urgent\";\n case \"high\":\n return \"high\";\n case \"low\":\n return \"low\";\n default:\n return \"medium\";\n }\n}\n\nfunction normalizeAnswerConfidence(value: unknown): AnswerConfidence | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"weak\" || normalized === \"medium\" || normalized === \"strong\") {\n return normalized;\n }\n return undefined;\n}\n\nfunction maybeNormalizeBeliefId(value: unknown): string | undefined {\n const rawId = readString(value);\n if (!rawId) {\n return undefined;\n }\n return encodeId(\"bel\", decodeExternalId(rawId, \"bel\"));\n}\n\nfunction normalizeQuestionRecord(value: unknown): QuestionRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const rawId = decodeExternalId(\n normalizeRequiredString(\n record._id ?? record.nodeId ?? record.questionId,\n \"questionId\"\n ),\n \"que\"\n );\n const canonicalId = encodeId(\"que\", rawId);\n const linkedBeliefId = maybeNormalizeBeliefId(\n record.linkedBeliefId ??\n record.linkedBeliefNodeId ??\n record.beliefId ??\n metadata.linkedBeliefId ??\n metadata.linkedBeliefNodeId ??\n metadata.beliefId\n );\n\n return {\n id: canonicalId,\n nodeId: canonicalId,\n questionId: canonicalId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n text:\n readString(record.text) ??\n readString(record.question) ??\n readString(record.canonicalText) ??\n \"\",\n status: normalizeQuestionStatus(\n record.status ?? metadata.questionStatus ?? metadata.status\n ),\n priority: normalizeQuestionPriority(record.priority ?? metadata.priority),\n ...(readString(record.category) ?? readString(metadata.category)\n ? {\n category:\n readString(record.category) ?? readString(metadata.category)!,\n }\n : {}),\n ...(linkedBeliefId ? { linkedBeliefId } : {}),\n ...(readString(record.linkedWorktreeId) ??\n readString(metadata.linkedWorktreeId)\n ? {\n linkedWorktreeId:\n readString(record.linkedWorktreeId) ??\n readString(metadata.linkedWorktreeId)!,\n }\n : {}),\n ...(readString(record.answer) ?? readString(metadata.answer)\n ? {\n answer: readString(record.answer) ?? readString(metadata.answer)!,\n }\n : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction dedupeQuestions(records: QuestionRecord[]): QuestionRecord[] {\n const byId = new Map<string, QuestionRecord>();\n for (const record of records) {\n byId.set(record.id, record);\n }\n return [...byId.values()];\n}\n\nfunction extractQuestionRawId(value: unknown): string {\n const record = asRecord(value);\n return decodeExternalId(\n normalizeRequiredString(\n record.nodeId ?? record._id ?? record.questionId,\n \"created question id\"\n ),\n \"que\"\n );\n}\n\nfunction extractAnswerId(value: unknown): string {\n const record = asRecord(value);\n return (\n readString(record.answerId) ??\n readString(record.nodeId) ??\n readString(record.globalId) ??\n crypto.randomUUID()\n );\n}\n\nasync function fetchNormalizedQuestion(\n deps: QuestionsPort,\n rawId: string\n): Promise<QuestionRecord> {\n const question = await deps.fetchQuestion(rawId);\n if (!question) {\n throw new Error(`[questions.get] Question ${rawId} was not found.`);\n }\n return normalizeQuestionRecord(question);\n}\n\nexport async function createQuestion(\n deps: QuestionsPort,\n input: CreateQuestionInput\n): Promise<QuestionRecord> {\n const created = await deps.createQuestion({\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n text: normalizeRequiredString(input.text, \"text\"),\n priority:\n input.priority !== undefined\n ? normalizeQuestionPriority(input.priority)\n : undefined,\n linkedBeliefRawId: input.linkedBeliefId\n ? decodeExternalId(input.linkedBeliefId, \"bel\")\n : undefined,\n metadata: input.metadata,\n });\n\n return fetchNormalizedQuestion(deps, extractQuestionRawId(created));\n}\n\nexport async function getQuestion(\n deps: QuestionsPort,\n input: { id: string }\n): Promise<QuestionRecord> {\n return fetchNormalizedQuestion(deps, decodeExternalId(input.id, \"que\"));\n}\n\nexport async function listQuestions(\n deps: QuestionsPort,\n query: ListQuestionsQuery\n): Promise<QuestionListResult> {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n const requestedStatus =\n query.status !== undefined ? normalizeQuestionStatus(query.status) : undefined;\n const requestedPriority =\n query.priority !== undefined\n ? normalizeQuestionPriority(query.priority)\n : undefined;\n const worktreeId = readString(query.worktreeId);\n const rows = await deps.listQuestionsByTopic({\n topicId,\n limit: query.limit,\n });\n\n return {\n questions: dedupeQuestions(rows.map(normalizeQuestionRecord)).filter(\n (question) => {\n if (requestedStatus && question.status !== requestedStatus) {\n return false;\n }\n if (requestedPriority && question.priority !== requestedPriority) {\n return false;\n }\n if (worktreeId && question.linkedWorktreeId !== worktreeId) {\n return false;\n }\n return true;\n }\n ),\n nextCursor: null,\n };\n}\n\nexport async function refineQuestion(\n deps: QuestionsPort,\n input: {\n id: string;\n text: string;\n rationale?: string;\n }\n) {\n const rawId = decodeExternalId(input.id, \"que\");\n const before = await fetchNormalizedQuestion(deps, rawId);\n await deps.refineQuestion({\n questionRawId: rawId,\n text: normalizeRequiredString(input.text, \"text\"),\n rationale: readString(input.rationale),\n });\n const after = await fetchNormalizedQuestion(deps, rawId);\n return {\n ...after,\n previousText: before.text,\n updatedText: after.text,\n };\n}\n\nexport async function updateQuestionStatus(\n deps: QuestionsPort,\n input: {\n id: string;\n status: string;\n rationale?: string;\n }\n) {\n const rawId = decodeExternalId(input.id, \"que\");\n const before = await fetchNormalizedQuestion(deps, rawId);\n const status = normalizeQuestionStatus(input.status);\n await deps.updateQuestionStatus({\n questionRawId: rawId,\n status,\n rationale: readString(input.rationale),\n });\n const after = await fetchNormalizedQuestion(deps, rawId);\n return {\n ...after,\n previousStatus: before.status,\n newStatus: after.status,\n };\n}\n\nexport async function archiveQuestion(\n deps: QuestionsPort,\n input: {\n id: string;\n rationale?: string;\n }\n): Promise<QuestionArchiveResult> {\n const result = await updateQuestionStatus(deps, {\n id: input.id,\n status: \"archived\",\n rationale: input.rationale,\n });\n\n return {\n ...result,\n newStatus: \"archived\",\n };\n}\n\nexport async function answerQuestion(\n deps: QuestionsPort,\n input: {\n id: string;\n text: string;\n confidence?: string;\n evidenceIds?: string[];\n rationale?: string;\n }\n): Promise<QuestionAnswerResult> {\n const rawId = decodeExternalId(input.id, \"que\");\n const question = await fetchNormalizedQuestion(deps, rawId);\n if (!question.topicId) {\n throw new Error(\n `[questions.answer] Unable to resolve topic scope for question ${input.id}.`\n );\n }\n\n const answer = await deps.createAnswer({\n questionRawId: rawId,\n topicId: question.topicId,\n text: normalizeRequiredString(input.text, \"text\"),\n confidence: normalizeAnswerConfidence(input.confidence),\n evidenceRawIds: Array.isArray(input.evidenceIds)\n ? input.evidenceIds.map((evidenceId) => decodeExternalId(evidenceId, \"evi\"))\n : undefined,\n rationale: readString(input.rationale),\n });\n\n await deps.updateQuestionStatus({\n questionRawId: rawId,\n status: \"answered\",\n rationale: readString(input.rationale),\n });\n\n return {\n questionId: encodeId(\"que\", rawId),\n answerId: extractAnswerId(answer),\n status: \"answered\",\n };\n}\n","import { api, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n answerQuestion,\n archiveQuestion,\n createQuestion,\n getQuestion,\n listQuestions,\n refineQuestion,\n updateQuestionStatus,\n type CreateQuestionInput,\n type ListQuestionsQuery,\n type QuestionsPort,\n} from \"./domain/questions\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction normalizeAnswerConfidence(\n value: \"weak\" | \"medium\" | \"strong\" | undefined\n): \"weak\" | \"moderate\" | \"strong\" | undefined {\n if (value === \"medium\") {\n return \"moderate\";\n }\n return value;\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction resolveExternalId(value: string | undefined, prefix?: string): string | undefined {\n if (!value) {\n return value;\n }\n try {\n const decoded = decodePrefixedId(value);\n if (prefix && decoded.prefix !== prefix) {\n return value;\n }\n return decoded.value;\n } catch {\n return value;\n }\n}\n\nasync function resolveQuestionTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n questionId: string\n) {\n const question = (await authContext.convex.query(api.epistemicQuestions.getById, {\n questionId: questionId as any,\n nodeId: questionId as any,\n })) as Record<string, unknown> | null;\n return readString(question?.topicId);\n}\n\nasync function resolveQuestionTopicIdWithMcpAuth(\n authContext: AuthContext,\n questionId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveQuestionTopicIdWithMcpAuth\");\n const question = (await convex.query(api.epistemicQuestions.getById, {\n questionId: questionId as any,\n nodeId: questionId as any,\n })) as Record<string, unknown> | null;\n return readString(question?.topicId);\n}\n\nasync function emitQuestionEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"question\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitQuestionEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitQuestionEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"question\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction normalizeLatestAnswerRecord(\n questionId: string,\n answer: unknown | null\n): Record<string, unknown> {\n if (!answer || typeof answer !== \"object\" || Array.isArray(answer)) {\n return {\n nodeId: null,\n answerText: null,\n versionNumber: 0,\n isLatest: false,\n evidenceCount: 0,\n questionNodeId: questionId,\n };\n }\n\n const record = answer as Record<string, unknown>;\n const metadata =\n record.metadata &&\n typeof record.metadata === \"object\" &&\n !Array.isArray(record.metadata)\n ? (record.metadata as Record<string, unknown>)\n : {};\n\n return {\n nodeId: typeof record._id === \"string\" ? record._id : null,\n globalId: typeof record.globalId === \"string\" ? record.globalId : null,\n answerText:\n typeof record.canonicalText === \"string\" ? record.canonicalText : null,\n versionNumber:\n typeof metadata.versionNumber === \"number\" ? metadata.versionNumber : 1,\n isLatest:\n typeof metadata.isLatest === \"boolean\" ? metadata.isLatest : true,\n evidenceCount:\n typeof metadata.evidenceCount === \"number\" ? metadata.evidenceCount : 0,\n confidence:\n typeof record.answerQuality === \"string\"\n ? record.answerQuality\n : typeof metadata.confidence === \"string\"\n ? metadata.confidence\n : \"moderate\",\n answeredBy:\n typeof metadata.answeredBy === \"string\" ? metadata.answeredBy : \"\",\n answerSource:\n typeof metadata.answerSource === \"string\" ? metadata.answerSource : \"\",\n questionNodeId: questionId,\n };\n}\n\nfunction createGatewayQuestionsPort(\n authContext: GatewayAuthContext\n): QuestionsPort {\n return {\n fetchQuestion(rawId) {\n return authContext.convex.query(api.epistemicQuestions.getById, {\n questionId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listQuestionsByTopic(args) {\n return authContext.convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n createQuestion(input) {\n return authContext.convex.mutation(api.epistemicQuestions.create, {\n topicId: input.topicId,\n question: input.text,\n priority: input.priority,\n linkedBeliefNodeId: input.linkedBeliefRawId as any,\n userId: authContext.userId,\n });\n },\n refineQuestion(input) {\n return authContext.convex.mutation(api.epistemicQuestions.updateQuestion, {\n questionId: input.questionRawId as any,\n question: input.text,\n });\n },\n updateQuestionStatus(input) {\n return authContext.convex.mutation(api.epistemicQuestions.updateStatus, {\n questionId: input.questionRawId as any,\n status: input.status,\n userId: authContext.userId,\n });\n },\n createAnswer(input) {\n return authContext.convex.mutation(api.epistemicAnswers.create, {\n questionNodeId: input.questionRawId as any,\n topicId: input.topicId,\n answerText: input.text,\n confidence: normalizeAnswerConfidence(input.confidence),\n evidenceNodeIds: input.evidenceRawIds as any,\n answerSource: \"human\",\n userId: authContext.userId,\n });\n },\n };\n}\n\nfunction createMcpQuestionsPort(authContext: AuthContext): QuestionsPort {\n const convex = requireMcpConvex(authContext, \"createMcpQuestionsPort\");\n return {\n fetchQuestion(rawId) {\n return convex.query(api.epistemicQuestions.getById, {\n questionId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listQuestionsByTopic(args) {\n return convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n createQuestion(input) {\n return convex.mutation(api.epistemicQuestions.create, {\n topicId: input.topicId,\n question: input.text,\n priority: input.priority,\n linkedBeliefNodeId: input.linkedBeliefRawId as any,\n userId: authContext.userId,\n });\n },\n refineQuestion(input) {\n return convex.mutation(api.epistemicQuestions.updateQuestion, {\n questionId: input.questionRawId as any,\n question: input.text,\n });\n },\n updateQuestionStatus(input) {\n return convex.mutation(api.epistemicQuestions.updateStatus, {\n questionId: input.questionRawId as any,\n status: input.status,\n userId: authContext.userId,\n });\n },\n createAnswer(input) {\n return convex.mutation(api.epistemicAnswers.create, {\n questionNodeId: input.questionRawId as any,\n topicId: input.topicId,\n answerText: input.text,\n confidence: normalizeAnswerConfidence(input.confidence),\n evidenceNodeIds: input.evidenceRawIds as any,\n answerSource: \"human\",\n userId: authContext.userId,\n });\n },\n };\n}\n\nexport async function createQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateQuestionInput\n) {\n const payload = await createQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"question.created\",\n resourceId: payload.id,\n data: {\n text: payload.text,\n priority: payload.priority,\n status: payload.status,\n linkedBeliefId: payload.linkedBeliefId ?? input.linkedBeliefId,\n metadata: input.metadata,\n },\n });\n return payload;\n}\n\nexport function getQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getQuestion(createGatewayQuestionsPort(authContext), { id });\n}\n\nexport function listQuestionsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListQuestionsQuery\n) {\n return listQuestions(createGatewayQuestionsPort(authContext), query);\n}\n\nexport async function answerQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n text: string;\n confidence?: string;\n evidenceIds?: string[];\n rationale?: string;\n }\n) {\n const payload = await answerQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveQuestionTopicIdWithGatewayAuth(authContext, payload.questionId)) ??\n \"\",\n type: \"question.answered\",\n resourceId: payload.questionId,\n data: {\n answerId: payload.answerId,\n status: payload.status,\n text: input.text,\n confidence: input.confidence,\n evidenceIds: input.evidenceIds ?? [],\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function getQuestionAnswerFromGatewayAuth(\n authContext: GatewayAuthContext,\n questionId: string\n) {\n const answer = await authContext.convex.query(\n api.epistemicAnswers.getLatestForQuestion,\n {\n questionNodeId: questionId as any,\n }\n );\n\n return normalizeLatestAnswerRecord(questionId, answer);\n}\n\nexport async function refineQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n text: string;\n rationale?: string;\n }\n) {\n const payload = await refineQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"question.refined\",\n resourceId: payload.id,\n data: {\n previousText:\n typeof (payload as Record<string, unknown>).previousText === \"string\"\n ? (payload as Record<string, unknown>).previousText\n : undefined,\n text: payload.text,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function archiveQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n rationale?: string;\n }\n) {\n const payload = await archiveQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"question.archived\",\n resourceId: payload.id,\n data: {\n previousStatus: payload.previousStatus,\n newStatus: payload.newStatus,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function updateQuestionStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n status: string;\n rationale?: string;\n }\n) {\n const payload = await updateQuestionStatus(\n createGatewayQuestionsPort(authContext),\n input\n );\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"question.status_updated\",\n resourceId: payload.id,\n data: {\n previousStatus:\n typeof (payload as Record<string, unknown>).previousStatus === \"string\"\n ? (payload as Record<string, unknown>).previousStatus\n : undefined,\n newStatus:\n typeof (payload as Record<string, unknown>).newStatus === \"string\"\n ? (payload as Record<string, unknown>).newStatus\n : payload.status,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport function createQuestionsBatchFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n topicId: string;\n questions: Array<{\n question: string;\n category?: string;\n priority?: \"high\" | \"medium\" | \"low\";\n linkedBeliefNodeId?: string;\n linkedWorktreeId?: string;\n testType?: \"validates\" | \"invalidates\" | \"clarifies\";\n }>;\n source?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.createBatch, {\n topicId: input.topicId,\n questions: input.questions.map((question) => ({\n ...question,\n linkedBeliefNodeId: resolveExternalId(\n question.linkedBeliefNodeId,\n \"bel\"\n ),\n linkedWorktreeId: resolveExternalId(question.linkedWorktreeId, \"wt\"),\n })),\n source: input.source,\n userId: authContext.userId,\n });\n}\n\nexport async function addQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n topicId: string;\n question?: string;\n text?: string;\n category?: string;\n priority?: string;\n source?: string;\n beliefId?: string;\n linkedBeliefId?: string;\n linkedWorktreeId?: string;\n chatId?: string;\n importance?: number;\n epistemicUnlock?: string;\n metadata?: Record<string, unknown>;\n questionType?: string;\n }\n) {\n const questionId = await authContext.convex.mutation(api.epistemicQuestions.addQuestion, {\n topicId: input.topicId,\n question: input.question ?? input.text ?? \"\",\n category: input.category,\n priority: input.priority,\n source: input.source,\n beliefId: resolveExternalId(input.beliefId ?? input.linkedBeliefId, \"bel\"),\n linkedWorktreeId: input.linkedWorktreeId,\n chatId: input.chatId,\n importance: input.importance,\n epistemicUnlock: input.epistemicUnlock,\n metadata: input.metadata,\n questionType: input.questionType,\n userId: authContext.userId,\n });\n\n return getQuestionFromGatewayAuth(authContext, String(questionId));\n}\n\nexport async function updateQuestionPriorityFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n questionId?: string;\n priority: \"high\" | \"medium\" | \"low\";\n }\n) {\n await authContext.convex.mutation(api.epistemicQuestions.updatePriority, {\n nodeId:\n (resolveExternalId(input.id ?? input.nodeId ?? input.questionId, \"que\") ??\n \"\") as any,\n priority: input.priority,\n userId: authContext.userId,\n });\n\n return getQuestionFromGatewayAuth(\n authContext,\n input.id ?? input.nodeId ?? input.questionId ?? \"\"\n );\n}\n\nexport function advanceQuestionToConvictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n worktreeId?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.advanceToConviction, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n worktreeId: input.worktreeId,\n userId: authContext.userId,\n });\n}\n\nexport function updateQuestionConvictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n conviction?: number;\n answerCompleteness?:\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\";\n convictionRationale?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.updateConviction, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n conviction: input.conviction,\n answerCompleteness: input.answerCompleteness,\n convictionRationale: input.convictionRationale,\n userId: authContext.userId,\n });\n}\n\nexport function finalizeQuestionConvictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n conviction: number;\n answer: string;\n convictionRationale?: string;\n answerCompleteness?:\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | \"unanswerable\";\n whatWeNeed?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.finalizeConviction, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n conviction: input.conviction,\n answer: input.answer,\n convictionRationale: input.convictionRationale,\n answerCompleteness: input.answerCompleteness,\n whatWeNeed: input.whatWeNeed,\n userId: authContext.userId,\n });\n}\n\nexport async function updateQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n question?: string;\n text?: string;\n category?:\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"financial\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"other\";\n priority?: \"high\" | \"medium\" | \"low\";\n }\n) {\n const questionId =\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ?? \"\";\n\n await authContext.convex.mutation(api.epistemicQuestions.updateQuestion, {\n questionId,\n question: input.question ?? input.text,\n category: input.category,\n priority: input.priority,\n });\n\n return getQuestionFromGatewayAuth(authContext, questionId);\n}\n\nexport function deleteQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.deleteQuestion, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n userId: authContext.userId,\n });\n}\n","import { api } from \"./kernelApi\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport { requireActorPrincipalId } from \"@lucern/contracts\";\n/** Extract topicId from a graph record, trimmed and validated. */\nfunction resolveGraphRecordTopicId(\n record: Record<string, unknown>\n): string | undefined {\n const raw = record.topicId;\n return typeof raw === \"string\" && raw.trim().length > 0\n ? raw.trim()\n : undefined;\n}\nimport {\n graphAnalyze,\n graphBias,\n graphFalsify,\n graphGaps,\n graphNeighborhood,\n graphTraverse,\n type GraphAnalyzeInput,\n type GraphBiasInput,\n type GraphFalsifyInput,\n type GraphGapsInput,\n type GraphNeighborhoodInput,\n type GraphPort,\n type GraphTraverseInput,\n} from \"./domain/graph\";\nimport { listBeliefsFromGatewayAuth } from \"./beliefs\";\nimport { traverseEdgesFromGatewayAuth } from \"./edges\";\nimport { listQuestionsFromGatewayAuth } from \"./questions\";\n\ntype GraphPayload = Record<string, unknown>;\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asRecordArray(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value)\n ? value.filter(\n (entry): entry is Record<string, unknown> =>\n Boolean(entry) && typeof entry === \"object\" && !Array.isArray(entry)\n )\n : [];\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction inferRiskLevel(score: number, threshold: number): string {\n if (score >= Math.max(threshold + 0.2, 0.9)) {\n return \"critical\";\n }\n if (score >= threshold) {\n return \"high\";\n }\n if (score >= Math.max(threshold - 0.15, 0.5)) {\n return \"moderate\";\n }\n return \"healthy\";\n}\n\nasync function filterNeighborhoodForGateway(\n authContext: GatewayAuthContext,\n payload: unknown\n): Promise<GraphPayload> {\n const record = asRecord(payload);\n const nodes = asRecordArray(record.nodes);\n const edges = asRecordArray(record.edges);\n\n if (nodes.some((node) => !resolveGraphRecordTopicId(node))) {\n throw new Error(\n \"Graph neighborhood results must include canonical topicId on every node. Refresh the graph projection before retrying.\"\n );\n }\n\n const topicIds = [\n ...new Set(\n nodes\n .map((node) => resolveGraphRecordTopicId(node))\n .filter((topicId): topicId is string => Boolean(topicId))\n ),\n ];\n\n if (topicIds.length === 0) {\n return {\n ...record,\n nodes,\n edges,\n };\n }\n\n const actorPrincipalId = requireActorPrincipalId(authContext);\n const permissionFilter = (await authContext.convex.query(\n api.policy.filterByPermission,\n {\n topicIds: topicIds.map((topicId) => topicId as any),\n permission: \"read\",\n traceId: `graph-neighborhood:${Date.now()}`,\n actorPrincipalId,\n grantedScopes: authContext.grantedScopes\n ? Array.from(authContext.grantedScopes)\n : undefined,\n }\n )) as {\n allowedTopicIds?: unknown[];\n deniedTopics?: Array<Record<string, unknown>>;\n };\n\n const allowedTopicIds = new Set(\n Array.isArray(permissionFilter.allowedTopicIds)\n ? permissionFilter.allowedTopicIds.map((topicId) => String(topicId))\n : []\n );\n const deniedTopics = Array.isArray(permissionFilter.deniedTopics)\n ? permissionFilter.deniedTopics\n : [];\n\n const filteredNodes = nodes\n .map((node) => {\n const topicId = resolveGraphRecordTopicId(node);\n if (!topicId || !allowedTopicIds.has(topicId)) {\n return null;\n }\n return typeof node.topicId === \"string\" ? node : { ...node, topicId };\n })\n .filter((node): node is Record<string, unknown> => Boolean(node));\n const allowedNodeIds = new Set(\n filteredNodes\n .map((node) =>\n readString(node.globalId) ??\n readString(node.nodeId) ??\n readString(node.id)\n )\n .filter((nodeId): nodeId is string => Boolean(nodeId))\n );\n const filteredEdges = edges.filter((edge) => {\n const fromId =\n readString(edge.sourceGlobalId) ??\n readString(edge.fromGlobalId) ??\n readString(edge.fromNodeId) ??\n readString(edge.sourceId);\n const toId =\n readString(edge.targetGlobalId) ??\n readString(edge.toGlobalId) ??\n readString(edge.toNodeId) ??\n readString(edge.targetId);\n return Boolean(fromId && toId && allowedNodeIds.has(fromId) && allowedNodeIds.has(toId));\n });\n\n await authContext.convex.mutation((api.policy as any).logAuthorizationAuditEntries, {\n entries: [\n ...Array.from(allowedTopicIds).map((topicId) => ({\n principalId: actorPrincipalId,\n projectId: undefined,\n decision: \"allow\" as const,\n reasonCode: \"ALLOW_ACTION\",\n action: \"read\" as const,\n resourceType: \"graph_neighborhood\",\n resourceId: topicId,\n traceId: `graph-neighborhood:${Date.now()}`,\n metadata: { source: \"server-core.graph.neighborhood\" },\n })),\n ...deniedTopics.map((denied) => ({\n principalId: actorPrincipalId,\n projectId: undefined,\n decision: \"deny\" as const,\n reasonCode:\n typeof denied.reasonCode === \"string\"\n ? denied.reasonCode\n : \"ACCESS_NOT_GRANTED\",\n action: \"read\" as const,\n resourceType: \"graph_neighborhood\",\n resourceId: String(denied.topicId ?? \"\"),\n traceId: `graph-neighborhood:${Date.now()}`,\n metadata: { source: \"server-core.graph.neighborhood\" },\n })),\n ],\n });\n\n return {\n ...record,\n nodes: filteredNodes,\n edges: filteredEdges,\n };\n}\n\nfunction normalizeAnalysisPayload(topicId: string, payload: unknown): GraphPayload {\n const analysis = asRecord(payload);\n return {\n topicId,\n metric: \"structure_analysis\",\n payload: analysis,\n };\n}\n\nfunction normalizeBiasPayload(\n topicId: string,\n threshold: number,\n payload: unknown\n): GraphPayload {\n const analysis = asRecord(payload);\n const rawBeliefs =\n asRecordArray(analysis.results).length > 0\n ? asRecordArray(analysis.results)\n : asRecordArray(analysis.beliefs);\n const beliefs = rawBeliefs.map((belief) => {\n const biasScore = readNumber(belief.biasScore) ?? threshold;\n return {\n nodeId: readString(belief.nodeId) ?? \"\",\n biasScore,\n riskLevel: readString(belief.riskLevel) ?? inferRiskLevel(biasScore, threshold),\n supportingCount:\n readNumber(belief.supportingCount) ?? readNumber(belief.supportingEvidenceCount) ?? 0,\n challengingCount:\n readNumber(belief.challengingCount) ?? readNumber(belief.contradictingEvidenceCount) ?? 0,\n };\n });\n\n return {\n topicId,\n metric: \"confirmation_bias\",\n threshold,\n beliefs,\n payload: {\n ...analysis,\n beliefs,\n },\n };\n}\n\nfunction createGatewayGraphPort(authContext: GatewayAuthContext): GraphPort {\n return {\n async neighborhood(input) {\n const payload = await authContext.convex.action(api.neo4jEdgeAPI.getGraphNeighborhood, {\n globalIds: input.globalIds,\n maxDepth: input.maxDepth,\n });\n return filterNeighborhoodForGateway(authContext, payload);\n },\n traverse(input) {\n return traverseEdgesFromGatewayAuth(authContext, input);\n },\n async analyze(input) {\n const cached = await authContext.convex.query(api.graphAnalysisCache.getCachedAnalysis, {\n topicId: input.topicId,\n userId: authContext.userId,\n });\n if (cached) {\n return normalizeAnalysisPayload(input.topicId, cached);\n }\n const fresh = await authContext.convex.query(api.graphIntelligence.analyzeProject, {\n topicId: input.topicId,\n userId: authContext.userId,\n });\n return normalizeAnalysisPayload(input.topicId, fresh);\n },\n async bias(input) {\n const payload = await authContext.convex.action(api.neo4jQueries.getConfirmationBiasScore, {\n topicId: input.topicId,\n limit: input.limit,\n });\n return normalizeBiasPayload(input.topicId, input.threshold, payload);\n },\n async listBeliefs(input) {\n const page = await listBeliefsFromGatewayAuth(authContext, {\n topicId: input.topicId,\n minConfidence: input.minConfidence,\n limit: input.limit,\n });\n return page.beliefs;\n },\n async fetchBelief(input) {\n const belief = await authContext.convex.query(api.epistemicBeliefs.getById, {\n beliefId: input.beliefId as any,\n nodeId: input.beliefId as any,\n });\n return (belief as any) ?? null;\n },\n async listQuestions(input) {\n const page = await listQuestionsFromGatewayAuth(authContext, {\n topicId: input.topicId,\n limit: input.limit,\n });\n return page.questions;\n },\n async listTestingEdges(input) {\n const rows = await authContext.convex.query(api.epistemicEdges.getByTopicAndType, {\n topicId: input.topicId as any,\n edgeType: \"tests\" as any,\n });\n return Array.isArray(rows) ? rows : [];\n },\n };\n}\n\nexport function graphNeighborhoodFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphNeighborhoodInput\n) {\n return graphNeighborhood(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphTraverseFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphTraverseInput\n) {\n return graphTraverse(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphAnalyzeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphAnalyzeInput\n) {\n return graphAnalyze(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphBiasFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphBiasInput\n) {\n return graphBias(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphGapsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphGapsInput\n) {\n return graphGaps(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphFalsifyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphFalsifyInput\n) {\n return graphFalsify(createGatewayGraphPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n graphAnalyzeFromGatewayAuth,\n graphBiasFromGatewayAuth,\n graphFalsifyFromGatewayAuth,\n graphGapsFromGatewayAuth,\n graphNeighborhoodFromGatewayAuth,\n graphTraverseFromGatewayAuth,\n} from \"@lucern/server-core/graph\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction handleGraphError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleGraphNeighborhood(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n globalId?: string;\n globalIds?: string[];\n maxDepth?: number;\n };\n}) {\n if (!args.query.globalId && (!args.query.globalIds || args.query.globalIds.length === 0)) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"globalId or globalIds is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphNeighborhoodFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to query graph neighborhood.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphTraverse(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n const body = asRecord(args.body);\n if (!readString(body.startNode)) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"startNode is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphTraverseFromGatewayAuth(args.authContext, {\n startNode: readString(body.startNode) ?? \"\",\n direction: readString(body.direction),\n maxDepth: readNumber(body.maxDepth),\n topicId:\n readString(body.topicId) ??\n readString(body.projectId),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to traverse graph.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphAnalyze(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n metric?: string;\n limit?: number;\n };\n}) {\n if (!args.query.topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphAnalyzeFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n metric: args.query.metric,\n limit: args.query.limit,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to analyze graph structure.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphBias(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n threshold?: number;\n limit?: number;\n };\n}) {\n if (!args.query.topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphBiasFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n threshold: args.query.threshold,\n limit: args.query.limit,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to detect graph bias.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphGaps(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n minConfidence?: number;\n };\n}) {\n if (!args.query.topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphGapsFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n minConfidence: args.query.minConfidence,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to analyze graph gaps.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphFalsify(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const rawBeliefIds = Array.isArray(body.beliefIds) ? body.beliefIds : [];\n const payload = await graphFalsifyFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? readString(body.projectId),\n beliefId: readString(body.beliefId),\n beliefIds: rawBeliefIds\n .map((value) => readString(value))\n .filter((value): value is string => Boolean(value)),\n minConfidence: readNumber(body.minConfidence),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to generate falsification questions.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","/**\n * Gateway Claims Resolution — Lucern-owned copy.\n *\n * Maps GatewayAuthContext (from the platform API gateway) to the canonical\n * Claims envelope. Copied from lib/platform/auth/gateway-claims.ts to\n * eliminate the Lucern→Stack reverse import.\n *\n * @module @lucern/server-core/auth\n */\n\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"@lucern/contracts\";\n\nexport type PrincipalType = SessionPrincipalType;\n\nexport interface Claims {\n principalId: string;\n principalType: PrincipalType;\n tenantId: string;\n workspaceId?: string;\n roles: string[];\n scopes: string[];\n authMode?: SessionAuthMode;\n sessionId?: string;\n delegationChain?: SessionDelegationHop[];\n delegatedBy?: string;\n expiresAt?: number;\n}\n\nfunction lastDelegator(\n delegationChain?: readonly SessionDelegationHop[]\n): string | undefined {\n if (!delegationChain || delegationChain.length === 0) {\n return;\n }\n return delegationChain[delegationChain.length - 1]?.principalId;\n}\n\nfunction requireGatewayPrincipalId(authContext: GatewayAuthContext): string {\n const principalId =\n typeof authContext.principalId === \"string\"\n ? authContext.principalId.trim()\n : \"\";\n if (principalId.length > 0) {\n return principalId;\n }\n throw new Error(\"Access denied: federated principal context required.\");\n}\n\nexport function resolveGatewayClaims(authContext: GatewayAuthContext): Claims {\n switch (authContext.authMode) {\n case \"interactive_user\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: \"human\",\n tenantId: authContext.tenantId ?? authContext.servicePrincipalTenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId ?? authContext.servicePrincipalWorkspaceId,\n roles: [],\n scopes: [...authContext.grantedScopes],\n authMode: \"interactive_user\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n\n case \"service_principal\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: \"service\",\n tenantId: authContext.tenantId ?? authContext.servicePrincipalTenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId ?? authContext.servicePrincipalWorkspaceId,\n roles: [\"service_agent\"],\n scopes: [...authContext.grantedScopes],\n authMode: \"service_principal\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n\n case \"tenant_api_key\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: \"service\",\n tenantId: authContext.tenantId ?? authContext.servicePrincipalTenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId ?? authContext.servicePrincipalWorkspaceId,\n roles: [\"service_agent\"],\n scopes: [...authContext.grantedScopes],\n authMode: \"tenant_api_key\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n\n case \"session_token\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: authContext.principalType ?? \"agent\",\n tenantId: authContext.tenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId,\n roles: authContext.roles ?? [],\n scopes: [...authContext.grantedScopes],\n authMode: \"session_token\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n }\n}\n\nexport function hasScope(claims: Claims, scope: string): boolean {\n if (claims.scopes.includes(\"*\")) return true;\n return claims.scopes.includes(scope);\n}\n\nexport function requireScope(claims: Claims, scope: string): void {\n if (!hasScope(claims, scope)) {\n throw new Error(\n `Scope \"${scope}\" required but not present in claims for ${claims.principalId}`\n );\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport { resolveGatewayClaims } from \"./auth/gateway-claims\";\nimport { inferSessionPrincipalType } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport type { SdkPrincipalContext } from \"@lucern/sdk\";\n\nfunction normalizePrincipalType(\n principalType: string | undefined\n): SdkPrincipalContext[\"principalType\"] {\n switch (principalType) {\n case \"human\":\n return \"user\";\n case \"service\":\n case \"group\":\n case \"external_viewer\":\n case \"agent\":\n case \"user\":\n return principalType;\n default:\n return \"service\";\n }\n}\n\nfunction deriveAdminFlags(roles: string[]) {\n const normalized = roles.map((role) => role.trim().toLowerCase());\n const isPlatformAdmin = normalized.includes(\"platform_admin\");\n const isTenantAdmin =\n isPlatformAdmin || normalized.includes(\"tenant_admin\");\n const isWorkspaceAdmin =\n isTenantAdmin || normalized.includes(\"workspace_admin\");\n\n return {\n isPlatformAdmin,\n isTenantAdmin,\n isWorkspaceAdmin,\n };\n}\n\nfunction buildPrincipalContext(input: {\n principalId: string;\n principalType?: string;\n tenantId?: string;\n workspaceId?: string;\n scopes?: string[];\n roles?: string[];\n authMode?: string;\n sessionId?: string;\n delegatedBy?: string;\n expiresAt?: number;\n}): SdkPrincipalContext {\n const roles = Array.isArray(input.roles) ? input.roles : [];\n\n return {\n principalId: input.principalId,\n principalType: normalizePrincipalType(input.principalType),\n tenantId: input.tenantId ?? null,\n workspaceId: input.workspaceId ?? null,\n scopes: Array.isArray(input.scopes) ? input.scopes : [],\n roles,\n ...deriveAdminFlags(roles),\n authMode: input.authMode,\n sessionId: input.sessionId,\n delegatedBy: input.delegatedBy,\n expiresAt: input.expiresAt,\n };\n}\n\nexport async function identitySummaryFromGatewayAuth(\n authContext: GatewayAuthContext\n): Promise<SdkPrincipalContext> {\n const claims = resolveGatewayClaims(authContext);\n return buildPrincipalContext(claims);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport { identitySummaryFromGatewayAuth } from \"@lucern/server-core/identity\";\n\nexport async function handleIdentityWhoami(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n}) {\n try {\n const summary = await identitySummaryFromGatewayAuth(args.authContext);\n return successResponse(summary, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to resolve current identity.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n rankEntityTypeMatches,\n} from \"@lucern/contracts\";\n\ntype OntologyTier = \"platform\" | \"pack\" | \"tenant\";\ntype OntologyStatus = \"draft\" | \"active\" | \"deprecated\" | \"archived\";\ntype OntologyVersionStatus = \"draft\" | \"published\" | \"deprecated\";\n\ntype OntologiesError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type OntologyEntitySubtype = {\n value: string;\n label: string;\n description?: string;\n};\n\nexport type OntologyEntityType = {\n value: string;\n label: string;\n description?: string;\n schema?: unknown;\n subtypes?: OntologyEntitySubtype[];\n};\n\nexport type OntologyEdgeType = {\n value: string;\n label: string;\n description?: string;\n sourceTypes?: string[];\n targetTypes?: string[];\n constraintSeverity?: \"warn\" | \"info\";\n};\n\nexport type OntologyPublishedVersion = {\n id: string;\n version: string;\n status: OntologyVersionStatus;\n entityTypes: OntologyEntityType[];\n edgeTypes: OntologyEdgeType[];\n releaseNotes?: string;\n publishedAt?: number;\n publishedBy?: string;\n};\n\nexport type OntologyRecord = {\n id: string;\n ontologyId: string;\n ontologyKey: string;\n name: string;\n description?: string;\n tier?: OntologyTier;\n status?: OntologyStatus;\n tenantId?: string;\n parentOntologyId?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n publishedVersion: OntologyPublishedVersion | null;\n};\n\nexport type OntologyListQuery = {\n tenantId?: string;\n tier?: OntologyTier | string;\n status?: OntologyStatus | string;\n};\n\nexport type OntologyListResult = {\n ontologies: OntologyRecord[];\n total: number;\n};\n\nexport type GetOntologyInput = {\n id?: string;\n ontologyKey?: string;\n tenantId?: string;\n};\n\nexport type BindOntologyInput = {\n ontologyId: string;\n topicId: string;\n};\n\nexport type OntologyBindingResult = {\n applied: true;\n source: \"direct\";\n ontologyId: string;\n ontologyKey: string;\n ontologyName: string;\n topicId: string;\n topicName?: string;\n updatedAt?: number;\n};\n\nexport type OntologyTypeMatch = {\n entityType: string;\n label: string;\n score: number;\n reason: string;\n};\n\nexport type OntologyMatchInput = {\n text: string;\n topicId?: string;\n ontologyId?: string;\n minScore?: number;\n limit?: number;\n};\n\nexport type OntologyMatchResult = {\n text: string;\n matchCount: number;\n matches: OntologyTypeMatch[];\n ontologyId?: string;\n message?: string;\n};\n\nexport type OntologiesPort = {\n fetchOntology: (rawId: string) => Promise<unknown | null>;\n fetchOntologyByKey?: (\n ontologyKey: string,\n tenantId?: string\n ) => Promise<unknown | null>;\n listOntologies: (query: {\n tenantId?: string;\n tier?: OntologyTier;\n status?: OntologyStatus;\n }) => Promise<unknown[]>;\n fetchPublishedVersion: (ontologyRawId: string) => Promise<unknown | null>;\n bindOntologyToTopic: (args: {\n ontologyRawId: string;\n topicRawId: string;\n }) => Promise<unknown>;\n fetchTopic: (topicRawId: string) => Promise<unknown | null>;\n resolveMatchVocabulary: (input: {\n ontologyRawId?: string;\n topicRawId?: string;\n }) => Promise<{\n ontologyRawId?: string;\n entityTypes: OntologyEntityType[];\n } | null>;\n};\n\nfunction createOntologiesError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): OntologiesError {\n const error = new Error(args.message) as OntologiesError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n return error;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction requireString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw createOntologiesError({\n message: `[ontologies] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n\n return normalized;\n}\n\nfunction normalizeTier(value: unknown): OntologyTier | undefined {\n const normalized = readString(value);\n if (\n normalized === \"platform\" ||\n normalized === \"pack\" ||\n normalized === \"tenant\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeStatus(value: unknown): OntologyStatus | undefined {\n const normalized = readString(value);\n if (\n normalized === \"draft\" ||\n normalized === \"active\" ||\n normalized === \"deprecated\" ||\n normalized === \"archived\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizePublishedVersionStatus(\n value: unknown\n): OntologyVersionStatus | undefined {\n const normalized = readString(value);\n if (\n normalized === \"draft\" ||\n normalized === \"published\" ||\n normalized === \"deprecated\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction decodeExternalId(id: string, prefix: string, field: string): string {\n const normalized = requireString(id, field);\n\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix !== prefix) {\n throw createOntologiesError({\n message: `[ontologies] Expected ${prefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${prefix}_ prefixed identifier for ${field}.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (\n error instanceof Error &&\n \"status\" in error &&\n typeof (error as OntologiesError).status === \"number\"\n ) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeOntologyId(rawId: string): string {\n return encodePrefixedId(\"ont\", requireString(rawId, \"ontologyId\"));\n}\n\nfunction encodeTopicId(rawId: string): string {\n return encodePrefixedId(\"top\", requireString(rawId, \"topicId\"));\n}\n\nfunction normalizeEntitySubtype(value: unknown): OntologyEntitySubtype {\n const record = asRecord(value);\n return {\n value: requireString(record.value, \"entitySubtype.value\"),\n label: requireString(record.label, \"entitySubtype.label\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n };\n}\n\nfunction normalizeEntityType(value: unknown): OntologyEntityType {\n const record = asRecord(value);\n return {\n value: requireString(record.value, \"entityType.value\"),\n label: requireString(record.label, \"entityType.label\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(record.schema !== undefined ? { schema: record.schema } : {}),\n ...(Array.isArray(record.subtypes)\n ? {\n subtypes: record.subtypes.map((entry) => normalizeEntitySubtype(entry)),\n }\n : {}),\n };\n}\n\nfunction normalizeEdgeType(value: unknown): OntologyEdgeType {\n const record = asRecord(value);\n return {\n value: requireString(record.value, \"edgeType.value\"),\n label: requireString(record.label, \"edgeType.label\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(readStringArray(record.sourceTypes)\n ? { sourceTypes: readStringArray(record.sourceTypes)! }\n : {}),\n ...(readStringArray(record.targetTypes)\n ? { targetTypes: readStringArray(record.targetTypes)! }\n : {}),\n ...(readString(record.constraintSeverity) === \"warn\" ||\n readString(record.constraintSeverity) === \"info\"\n ? {\n constraintSeverity: readString(record.constraintSeverity) as\n | \"warn\"\n | \"info\",\n }\n : {}),\n };\n}\n\nfunction normalizePublishedVersion(\n value: unknown\n): OntologyPublishedVersion | null {\n if (!value) {\n return null;\n }\n\n const record = asRecord(value);\n const id = readString(record.id ?? record._id);\n const version = readString(record.version);\n const status = normalizePublishedVersionStatus(record.status);\n if (!id || !version || !status) {\n return null;\n }\n\n return {\n id,\n version,\n status,\n entityTypes: Array.isArray(record.entityTypes)\n ? record.entityTypes.map((entry) => normalizeEntityType(entry))\n : [],\n edgeTypes: Array.isArray(record.edgeTypes)\n ? record.edgeTypes.map((entry) => normalizeEdgeType(entry))\n : [],\n ...(readString(record.releaseNotes)\n ? { releaseNotes: readString(record.releaseNotes)! }\n : {}),\n ...(readNumber(record.publishedAt) !== undefined\n ? { publishedAt: readNumber(record.publishedAt)! }\n : {}),\n ...(readString(record.publishedBy)\n ? { publishedBy: readString(record.publishedBy)! }\n : {}),\n };\n}\n\nfunction normalizeOntologyRecord(\n value: unknown,\n publishedVersionInput?: unknown\n): OntologyRecord {\n const record = asRecord(value);\n const rawId =\n readString(record.id) ??\n readString(record.ontologyId) ??\n readString(record._id);\n\n if (!rawId) {\n throw createOntologiesError({\n message: \"[ontologies] ontologyId is required in upstream ontology payload.\",\n status: 500,\n code: \"INTERNAL_ERROR\",\n invariantCode: \"resource.exists\",\n });\n }\n\n const ontologyId = encodeOntologyId(rawId);\n const publishedVersion =\n publishedVersionInput !== undefined\n ? normalizePublishedVersion(publishedVersionInput)\n : normalizePublishedVersion(record.publishedVersion);\n\n return {\n id: ontologyId,\n ontologyId,\n ontologyKey: requireString(record.ontologyKey, \"ontologyKey\"),\n name: requireString(record.name, \"name\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(normalizeTier(record.tier) ? { tier: normalizeTier(record.tier)! } : {}),\n ...(normalizeStatus(record.status)\n ? { status: normalizeStatus(record.status)! }\n : {}),\n ...(readString(record.tenantId) ? { tenantId: readString(record.tenantId)! } : {}),\n ...(readString(record.parentOntologyId)\n ? {\n parentOntologyId: encodeOntologyId(\n readString(record.parentOntologyId)!\n ),\n }\n : {}),\n ...(readString(record.createdBy)\n ? { createdBy: readString(record.createdBy)! }\n : {}),\n ...(readNumber(record.createdAt ?? record._creationTime) !== undefined\n ? { createdAt: readNumber(record.createdAt ?? record._creationTime)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n publishedVersion,\n };\n}\n\nfunction normalizeBoundTopic(value: unknown): {\n topicId: string;\n topicName?: string;\n updatedAt?: number;\n} {\n const record = asRecord(value);\n const rawId =\n readString(record.id) ??\n readString(record.topicId) ??\n readString(record._id) ??\n null;\n\n return {\n topicId: rawId ? encodeTopicId(rawId) : \"\",\n ...(readString(record.name) ? { topicName: readString(record.name)! } : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nexport async function listOntologies(\n deps: OntologiesPort,\n query: OntologyListQuery = {}\n): Promise<OntologyListResult> {\n const ontologies = await deps.listOntologies({\n tenantId: readString(query.tenantId),\n tier: normalizeTier(query.tier),\n status: normalizeStatus(query.status),\n });\n\n const normalized = await Promise.all(\n (Array.isArray(ontologies) ? ontologies : []).map(async (ontology) => {\n const record = asRecord(ontology);\n const rawId =\n readString(record.id) ??\n readString(record.ontologyId) ??\n readString(record._id);\n const publishedVersion = rawId\n ? await deps.fetchPublishedVersion(rawId)\n : null;\n return normalizeOntologyRecord(ontology, publishedVersion);\n })\n );\n\n return {\n ontologies: normalized,\n total: normalized.length,\n };\n}\n\nexport async function getOntology(\n deps: OntologiesPort,\n input: GetOntologyInput\n): Promise<OntologyRecord> {\n const rawId = readString(input.id);\n const ontologyKey = readString(input.ontologyKey);\n\n let ontology: unknown | null = null;\n let resolvedRawId: string | null = null;\n\n if (rawId) {\n resolvedRawId = decodeExternalId(rawId, \"ont\", \"id\");\n ontology = await deps.fetchOntology(resolvedRawId);\n } else if (ontologyKey && deps.fetchOntologyByKey) {\n ontology = await deps.fetchOntologyByKey(\n ontologyKey,\n readString(input.tenantId)\n );\n const ontologyRecord = asRecord(ontology);\n resolvedRawId =\n readString(ontologyRecord.id) ??\n readString(ontologyRecord.ontologyId) ??\n readString(ontologyRecord._id) ??\n null;\n } else {\n throw createOntologiesError({\n message: \"[ontologies] id is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Provide a canonical ontology identifier.\",\n });\n }\n\n if (!ontology || !resolvedRawId) {\n throw createOntologiesError({\n message: `Ontology not found: ${rawId ?? ontologyKey ?? \"\"}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"resource.exists\",\n suggestion: \"Check the ontologyId and scope, then retry.\",\n });\n }\n\n const publishedVersion = await deps.fetchPublishedVersion(resolvedRawId);\n return normalizeOntologyRecord(ontology, publishedVersion);\n}\n\nexport async function bindOntology(\n deps: OntologiesPort,\n input: BindOntologyInput\n): Promise<OntologyBindingResult> {\n const ontology = await getOntology(deps, { id: input.ontologyId });\n const rawOntologyId = decodeExternalId(input.ontologyId, \"ont\", \"ontologyId\");\n const rawTopicId = decodeExternalId(input.topicId, \"top\", \"topicId\");\n\n await deps.bindOntologyToTopic({\n ontologyRawId: rawOntologyId,\n topicRawId: rawTopicId,\n });\n\n const topic = await deps.fetchTopic(rawTopicId);\n const normalizedTopic = normalizeBoundTopic(topic);\n\n return {\n applied: true,\n source: \"direct\",\n ontologyId: ontology.id,\n ontologyKey: ontology.ontologyKey,\n ontologyName: ontology.name,\n topicId: normalizedTopic.topicId || encodeTopicId(rawTopicId),\n ...(normalizedTopic.topicName ? { topicName: normalizedTopic.topicName } : {}),\n ...(normalizedTopic.updatedAt !== undefined\n ? { updatedAt: normalizedTopic.updatedAt }\n : {}),\n };\n}\n\nexport async function matchOntology(\n deps: OntologiesPort,\n input: OntologyMatchInput\n): Promise<OntologyMatchResult> {\n const text = requireString(input.text, \"text\");\n const topicRawId = input.topicId\n ? decodeExternalId(input.topicId, \"top\", \"topicId\")\n : undefined;\n const ontologyRawId = input.ontologyId\n ? decodeExternalId(input.ontologyId, \"ont\", \"ontologyId\")\n : undefined;\n\n if (!topicRawId && !ontologyRawId) {\n throw createOntologiesError({\n message: \"[ontologies] topicId or ontologyId is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Provide topicId or ontologyId to resolve ontology vocabulary.\",\n });\n }\n\n const resolved = await deps.resolveMatchVocabulary({\n ontologyRawId,\n topicRawId,\n });\n\n if (!resolved) {\n return {\n text,\n matchCount: 0,\n matches: [],\n ...(ontologyRawId ? { ontologyId: encodeOntologyId(ontologyRawId) } : {}),\n message: \"No ontology vocabulary could be resolved for the requested scope.\",\n };\n }\n\n const matches = rankEntityTypeMatches(text, resolved.entityTypes, {\n minScore:\n typeof input.minScore === \"number\" && Number.isFinite(input.minScore)\n ? input.minScore\n : undefined,\n limit:\n typeof input.limit === \"number\" && Number.isFinite(input.limit)\n ? input.limit\n : undefined,\n });\n\n return {\n text,\n matchCount: matches.length,\n matches,\n ...(resolved.ontologyRawId\n ? { ontologyId: encodeOntologyId(resolved.ontologyRawId) }\n : {}),\n ...(resolved.entityTypes.length === 0\n ? { message: \"Ontology has no entity types defined.\" }\n : {}),\n };\n}\n","import { api } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport {\n bindOntology,\n getOntology,\n listOntologies,\n matchOntology,\n type BindOntologyInput,\n type GetOntologyInput,\n type OntologyEntityType,\n type OntologiesPort,\n type OntologyListQuery,\n type OntologyMatchInput,\n} from \"./domain/ontologies\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nasync function emitOntologyEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"ontology.bound\",\n resourceId: args.resourceId,\n resourceType: \"ontology\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitOntologyEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitOntologyEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"ontology.bound\",\n resourceId: args.resourceId,\n resourceType: \"ontology\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayOntologiesPort(\n authContext: GatewayAuthContext\n): OntologiesPort {\n return {\n async fetchOntology(rawId) {\n const result = await authContext.convex.query(\n api.ontologyDefinitions.getOntologyDefinition,\n {\n id: rawId as any,\n }\n );\n return result ?? null;\n },\n async fetchOntologyByKey(ontologyKey, tenantId) {\n const result = await authContext.convex.query(\n api.ontologyDefinitions.getOntologyDefinitionByKey,\n {\n ontologyKey,\n tenantId,\n }\n );\n return result ?? null;\n },\n listOntologies(query) {\n return authContext.convex.query(\n api.ontologyDefinitions.listOntologyDefinitions,\n {\n tenantId: query.tenantId,\n tier: query.tier as any,\n status: query.status as any,\n }\n ) as Promise<unknown[]>;\n },\n async fetchPublishedVersion(ontologyRawId) {\n const result = await authContext.convex.query(\n api.ontologyDefinitions.getPublishedVersion,\n {\n ontologyId: ontologyRawId as any,\n }\n );\n return result ?? null;\n },\n bindOntologyToTopic(args) {\n return authContext.convex.mutation(api.topics.update, {\n id: args.topicRawId as any,\n ontologyId: args.ontologyRawId as any,\n });\n },\n async fetchTopic(topicRawId) {\n const result = await authContext.convex.query(api.topics.get, {\n id: topicRawId as any,\n });\n return result ?? null;\n },\n async resolveMatchVocabulary(input) {\n if (input.ontologyRawId) {\n const effective = await authContext.convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: input.ontologyRawId as any,\n }\n );\n return {\n ontologyRawId: input.ontologyRawId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n }\n\n if (!input.topicRawId) {\n return null;\n }\n\n const resolved = await authContext.convex.query(api.topics.resolveTopicOntology, {\n topicId: input.topicRawId as any,\n });\n const resolvedOntologyId =\n resolved && typeof resolved === \"object\"\n ? ((resolved as Record<string, unknown>).ontologyId as string | undefined)\n : undefined;\n if (!resolvedOntologyId) {\n return null;\n }\n\n const effective = await authContext.convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: resolvedOntologyId as any,\n }\n );\n return {\n ontologyRawId: resolvedOntologyId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n },\n };\n}\n\nfunction createMcpOntologiesPort(authContext: AuthContext): OntologiesPort {\n const convex = requireMcpConvex(authContext, \"createMcpOntologiesPort\");\n return {\n async fetchOntology(rawId) {\n const result = await convex.query(api.ontologyDefinitions.getOntologyDefinition, {\n id: rawId as any,\n });\n return result ?? null;\n },\n async fetchOntologyByKey(ontologyKey, tenantId) {\n const result = await convex.query(api.ontologyDefinitions.getOntologyDefinitionByKey, {\n ontologyKey,\n tenantId,\n });\n return result ?? null;\n },\n listOntologies(query) {\n return convex.query(api.ontologyDefinitions.listOntologyDefinitions, {\n tenantId: query.tenantId,\n tier: query.tier as any,\n status: query.status as any,\n }) as Promise<unknown[]>;\n },\n async fetchPublishedVersion(ontologyRawId) {\n const result = await convex.query(api.ontologyDefinitions.getPublishedVersion, {\n ontologyId: ontologyRawId as any,\n });\n return result ?? null;\n },\n bindOntologyToTopic(args) {\n return convex.mutation(api.topics.update, {\n id: args.topicRawId as any,\n ontologyId: args.ontologyRawId as any,\n });\n },\n async fetchTopic(topicRawId) {\n const result = await convex.query(api.topics.get, { id: topicRawId as any });\n return result ?? null;\n },\n async resolveMatchVocabulary(input) {\n if (input.ontologyRawId) {\n const effective = await convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: input.ontologyRawId as any,\n }\n );\n return {\n ontologyRawId: input.ontologyRawId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n }\n\n if (!input.topicRawId) {\n return null;\n }\n\n const resolved = await convex.query(api.topics.resolveTopicOntology, {\n topicId: input.topicRawId as any,\n });\n const resolvedOntologyId =\n resolved && typeof resolved === \"object\"\n ? ((resolved as Record<string, unknown>).ontologyId as string | undefined)\n : undefined;\n if (!resolvedOntologyId) {\n return null;\n }\n\n const effective = await convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: resolvedOntologyId as any,\n }\n );\n return {\n ontologyRawId: resolvedOntologyId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n },\n };\n}\n\nexport function listOntologiesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: OntologyListQuery\n) {\n return listOntologies(createGatewayOntologiesPort(authContext), query);\n}\n\nexport function getOntologyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GetOntologyInput | string\n) {\n return getOntology(\n createGatewayOntologiesPort(authContext),\n typeof input === \"string\" ? { id: input } : input\n );\n}\n\nexport async function bindOntologyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: BindOntologyInput\n) {\n const payload = await bindOntology(createGatewayOntologiesPort(authContext), input);\n await emitOntologyEventFromGatewayAuth(authContext, {\n topicId: payload.topicId,\n resourceId: payload.ontologyId,\n data: {\n ontologyKey: payload.ontologyKey,\n ontologyName: payload.ontologyName,\n topicId: payload.topicId,\n topicName: payload.topicName,\n applied: payload.applied,\n source: payload.source,\n updatedAt: payload.updatedAt,\n },\n });\n return payload;\n}\n\nexport function matchOntologyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: OntologyMatchInput\n) {\n return matchOntology(createGatewayOntologiesPort(authContext), input);\n}\n\nexport function listOntologiesFromMcpAuth(\n authContext: AuthContext,\n query: OntologyListQuery\n) {\n return listOntologies(createMcpOntologiesPort(authContext), query);\n}\n\nexport function getOntologyFromMcpAuth(\n authContext: AuthContext,\n input: GetOntologyInput | string\n) {\n return getOntology(\n createMcpOntologiesPort(authContext),\n typeof input === \"string\" ? { id: input } : input\n );\n}\n\nexport async function bindOntologyFromMcpAuth(\n authContext: AuthContext,\n input: BindOntologyInput\n) {\n const payload = await bindOntology(createMcpOntologiesPort(authContext), input);\n await emitOntologyEventFromMcpAuth(authContext, {\n topicId: payload.topicId,\n resourceId: payload.ontologyId,\n data: {\n ontologyKey: payload.ontologyKey,\n ontologyName: payload.ontologyName,\n topicId: payload.topicId,\n topicName: payload.topicName,\n applied: payload.applied,\n source: payload.source,\n updatedAt: payload.updatedAt,\n },\n });\n return payload;\n}\n\nexport function matchOntologyFromMcpAuth(\n authContext: AuthContext,\n input: OntologyMatchInput\n) {\n return matchOntology(createMcpOntologiesPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n bindOntologyFromGatewayAuth,\n getOntologyFromGatewayAuth,\n listOntologiesFromGatewayAuth,\n matchOntologyFromGatewayAuth,\n} from \"@lucern/server-core/ontologies\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction handleOntologiesError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleOntologyList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n tenantId?: string;\n tier?: string;\n status?: string;\n };\n}) {\n try {\n const payload = await listOntologiesFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to list ontologies.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleOntologyGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n ontologyId: string;\n}) {\n try {\n const payload = await getOntologyFromGatewayAuth(\n args.authContext,\n args.ontologyId\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to read ontology.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleOntologyBind(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n ontologyId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await bindOntologyFromGatewayAuth(args.authContext, {\n ontologyId: args.ontologyId,\n topicId: readString(body.topicId) ?? \"\",\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to bind ontology.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleOntologyMatch(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await matchOntologyFromGatewayAuth(args.authContext, {\n text: readString(body.text) ?? \"\",\n topicId: readString(body.topicId),\n ontologyId: readString(body.ontologyId),\n minScore:\n typeof body.minScore === \"number\" && Number.isFinite(body.minScore)\n ? body.minScore\n : undefined,\n limit:\n typeof body.limit === \"number\" && Number.isFinite(body.limit)\n ? body.limit\n : undefined,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to match ontology vocabulary.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n addQuestionFromGatewayAuth,\n advanceQuestionToConvictionFromGatewayAuth,\n answerQuestionFromGatewayAuth,\n archiveQuestionFromGatewayAuth,\n createQuestionsBatchFromGatewayAuth,\n createQuestionFromGatewayAuth,\n deleteQuestionFromGatewayAuth,\n finalizeQuestionConvictionFromGatewayAuth,\n getQuestionAnswerFromGatewayAuth,\n getQuestionFromGatewayAuth,\n listQuestionsFromGatewayAuth,\n refineQuestionFromGatewayAuth,\n updateQuestionConvictionFromGatewayAuth,\n updateQuestionFromGatewayAuth,\n updateQuestionPriorityFromGatewayAuth,\n updateQuestionStatusFromGatewayAuth,\n} from \"@lucern/server-core/questions\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nexport async function handleQuestionCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createQuestionFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n text: readString(body.text) ?? \"\",\n priority: readString(body.priority),\n linkedBeliefId: readString(body.linkedBeliefId),\n metadata: asRecord(body.metadata),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to create question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n}) {\n try {\n const payload = await getQuestionFromGatewayAuth(\n args.authContext,\n args.questionId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionArchive(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await archiveQuestionFromGatewayAuth(args.authContext, {\n id: args.questionId,\n rationale: readString(body.reason) ?? readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to archive question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n priority?: string;\n worktreeId?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listQuestionsFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list questions.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionAnswer(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await answerQuestionFromGatewayAuth(args.authContext, {\n id: args.questionId,\n text: readString(body.text) ?? \"\",\n confidence: readString(body.confidence),\n evidenceIds: readStringArray(body.evidenceIds),\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to answer question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionGetAnswer(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n}) {\n try {\n const payload = await getQuestionAnswerFromGatewayAuth(\n args.authContext,\n args.questionId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read answer.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionRefine(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await refineQuestionFromGatewayAuth(args.authContext, {\n id: args.questionId,\n text: readString(body.text) ?? \"\",\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to refine question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdateStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionStatusFromGatewayAuth(args.authContext, {\n id: args.questionId,\n status: readString(body.status) ?? \"\",\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update question status.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionBatchCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const questions = Array.isArray(body.questions)\n ? body.questions\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n question:\n readString(entry.question) ?? readString(entry.text) ?? \"\",\n category: readString(entry.category),\n priority: readString(entry.priority) as\n | \"high\"\n | \"medium\"\n | \"low\"\n | undefined,\n linkedBeliefNodeId:\n readString(entry.linkedBeliefNodeId) ??\n readString(entry.linkedBeliefId),\n linkedWorktreeId: readString(entry.linkedWorktreeId),\n testType: readString(entry.testType) as\n | \"validates\"\n | \"invalidates\"\n | \"clarifies\"\n | undefined,\n }))\n : [];\n const payload = await createQuestionsBatchFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n questions,\n source: readString(body.source),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to batch create questions.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionAdd(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await addQuestionFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n question: readString(body.question) ?? readString(body.text),\n category: readString(body.category),\n priority: readString(body.priority),\n source: readString(body.source),\n beliefId: readString(body.beliefId) ?? readString(body.linkedBeliefId),\n linkedWorktreeId: readString(body.linkedWorktreeId),\n chatId: readString(body.chatId),\n importance: readNumber(body.importance),\n epistemicUnlock: readString(body.epistemicUnlock),\n metadata: asRecord(body.metadata),\n questionType: readString(body.questionType),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to add question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdatePriority(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionPriorityFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.questionId),\n priority:\n (readString(body.priority) as \"high\" | \"medium\" | \"low\") ?? \"medium\",\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update question priority.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionAdvanceToConviction(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await advanceQuestionToConvictionFromGatewayAuth(\n args.authContext,\n {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n worktreeId: readString(body.worktreeId),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to advance question to conviction.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdateConviction(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionConvictionFromGatewayAuth(\n args.authContext,\n {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n conviction: readNumber(body.conviction),\n answerCompleteness: readString(body.answerCompleteness) as\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | undefined,\n convictionRationale: readString(body.convictionRationale),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update question conviction.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionFinalizeConviction(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await finalizeQuestionConvictionFromGatewayAuth(\n args.authContext,\n {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n conviction: readNumber(body.conviction) ?? Number.NaN,\n answer: readString(body.answer) ?? \"\",\n convictionRationale: readString(body.convictionRationale),\n answerCompleteness: readString(body.answerCompleteness) as\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | \"unanswerable\"\n | undefined,\n whatWeNeed: readString(body.whatWeNeed),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to finalize question conviction.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionFromGatewayAuth(args.authContext, {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n question: readString(body.question) ?? readString(body.text),\n category: readString(body.category) as\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"financial\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"other\"\n | undefined,\n priority: readString(body.priority) as\n | \"high\"\n | \"medium\"\n | \"low\"\n | undefined,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to update question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionDelete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await deleteQuestionFromGatewayAuth(args.authContext, {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to delete question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","type SearchResourceType = \"belief\" | \"evidence\" | \"question\";\n\ntype SearchBeliefRecord = {\n beliefId?: string;\n nodeId?: string;\n globalId?: string;\n text?: string;\n canonicalText?: string;\n confidence?: number | null;\n status?: string;\n};\n\ntype SearchEvidenceRecord = {\n evidenceId?: string;\n nodeId?: string;\n globalId?: string;\n text?: string;\n source?: string;\n kind?: string;\n relevanceScore?: number;\n};\n\ntype SearchQuestionRecord = {\n questionId?: string;\n nodeId?: string;\n globalId?: string;\n text?: string;\n status?: string;\n priority?: string;\n linkedBeliefId?: string;\n};\n\nexport type SearchInput = {\n q: string;\n topicId: string;\n types?: SearchResourceType[];\n status?: string;\n minConfidence?: number;\n limit?: number;\n cursor?: string;\n};\n\nexport type SearchBeliefHit = {\n type: \"belief\";\n beliefId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n confidence: number | null;\n status?: string;\n relevanceScore: number;\n};\n\nexport type SearchEvidenceHit = {\n type: \"evidence\";\n evidenceId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n source?: string;\n kind?: string;\n relevanceScore: number;\n};\n\nexport type SearchQuestionHit = {\n type: \"question\";\n questionId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n status?: string;\n priority?: string;\n linkedBeliefId?: string;\n relevanceScore: number;\n};\n\nexport type SearchResult =\n | SearchBeliefHit\n | SearchEvidenceHit\n | SearchQuestionHit;\n\nexport type SearchResponse = {\n q: string;\n topicId: string;\n types: SearchResourceType[];\n results: SearchResult[];\n beliefs: SearchBeliefHit[];\n evidence: SearchEvidenceHit[];\n questions: SearchQuestionHit[];\n};\n\nexport type SearchPort = {\n listBeliefs: (input: {\n topicId: string;\n status?: string;\n minConfidence?: number;\n limit?: number;\n }) => Promise<SearchBeliefRecord[]>;\n searchEvidence: (input: {\n q: string;\n topicId: string;\n limit?: number;\n }) => Promise<SearchEvidenceRecord[]>;\n listQuestions: (input: {\n topicId: string;\n limit?: number;\n }) => Promise<SearchQuestionRecord[]>;\n};\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[search] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction normalizeTypes(value: unknown): SearchResourceType[] {\n const requested = Array.isArray(value)\n ? value\n .map((entry) => readString(entry)?.toLowerCase())\n .filter(\n (entry): entry is SearchResourceType =>\n entry === \"belief\" || entry === \"evidence\" || entry === \"question\"\n )\n : [];\n return requested.length > 0 ? requested : [\"belief\", \"evidence\", \"question\"];\n}\n\nfunction computeSearchScore(query: string, text: string): number | null {\n const needle = query.trim().toLowerCase();\n const haystack = text.trim().toLowerCase();\n if (!needle || !haystack) {\n return null;\n }\n\n if (haystack.includes(needle)) {\n return needle.length + 5;\n }\n\n const tokens = needle.split(/\\s+/).filter(Boolean);\n let score = 0;\n for (const token of tokens) {\n if (haystack.includes(token)) {\n score += token.length;\n }\n }\n\n return score > 0 ? score : null;\n}\n\nexport async function searchResources(\n deps: SearchPort,\n input: SearchInput\n): Promise<SearchResponse> {\n const q = normalizeRequiredString(input.q, \"q\");\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const limit = Math.max(1, readNumber(input.limit) ?? 25);\n const searchWindow = Math.max(limit * 4, 25);\n const types = normalizeTypes(input.types);\n\n const [beliefsPage, evidencePage, questionsPage] = await Promise.all([\n types.includes(\"belief\")\n ? deps.listBeliefs({\n topicId,\n status: readString(input.status),\n minConfidence: readNumber(input.minConfidence),\n limit: searchWindow,\n })\n : Promise.resolve([]),\n types.includes(\"evidence\")\n ? deps.searchEvidence({\n q,\n topicId,\n limit: searchWindow,\n })\n : Promise.resolve([]),\n types.includes(\"question\")\n ? deps.listQuestions({\n topicId,\n limit: searchWindow,\n })\n : Promise.resolve([]),\n ]);\n\n const beliefs = beliefsPage\n .map((belief) => {\n const text =\n readString(belief.text) ??\n readString(belief.canonicalText) ??\n \"\";\n const relevanceScore = computeSearchScore(q, text);\n if (relevanceScore === null) {\n return null;\n }\n const beliefId =\n readString(belief.beliefId) ?? readString(belief.nodeId) ?? \"\";\n return {\n type: \"belief\" as const,\n beliefId,\n nodeId: readString(belief.nodeId) ?? beliefId,\n ...(readString(belief.globalId)\n ? { globalId: readString(belief.globalId)! }\n : {}),\n text,\n confidence: readNumber(belief.confidence) ?? null,\n ...(readString(belief.status) ? { status: readString(belief.status)! } : {}),\n relevanceScore,\n };\n })\n .filter((entry): entry is SearchBeliefHit => Boolean(entry))\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n .slice(0, limit);\n\n const evidence = evidencePage\n .map((entry) => {\n const evidenceId =\n readString(entry.evidenceId) ?? readString(entry.nodeId) ?? \"\";\n return {\n type: \"evidence\" as const,\n evidenceId,\n nodeId: readString(entry.nodeId) ?? evidenceId,\n ...(readString(entry.globalId)\n ? { globalId: readString(entry.globalId)! }\n : {}),\n text: readString(entry.text) ?? \"\",\n ...(readString(entry.source) ? { source: readString(entry.source)! } : {}),\n ...(readString(entry.kind) ? { kind: readString(entry.kind)! } : {}),\n relevanceScore: readNumber(entry.relevanceScore) ?? 0,\n };\n })\n .slice(0, limit);\n\n const questions = questionsPage\n .map((question) => {\n const text = readString(question.text) ?? \"\";\n const relevanceScore = computeSearchScore(q, text);\n if (relevanceScore === null) {\n return null;\n }\n const questionId =\n readString(question.questionId) ?? readString(question.nodeId) ?? \"\";\n return {\n type: \"question\" as const,\n questionId,\n nodeId: readString(question.nodeId) ?? questionId,\n ...(readString(question.globalId)\n ? { globalId: readString(question.globalId)! }\n : {}),\n text,\n ...(readString(question.status)\n ? { status: readString(question.status)! }\n : {}),\n ...(readString(question.priority)\n ? { priority: readString(question.priority)! }\n : {}),\n ...(readString(question.linkedBeliefId)\n ? { linkedBeliefId: readString(question.linkedBeliefId)! }\n : {}),\n relevanceScore,\n };\n })\n .filter((entry): entry is SearchQuestionHit => Boolean(entry))\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n .slice(0, limit);\n\n const results = [...beliefs, ...evidence, ...questions]\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n .slice(0, limit);\n\n return {\n q,\n topicId,\n types,\n results,\n beliefs,\n evidence,\n questions,\n };\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n searchResources,\n type SearchInput,\n type SearchPort,\n} from \"./domain/search\";\nimport { listBeliefsFromGatewayAuth } from \"./beliefs\";\nimport { searchEvidenceFromGatewayAuth } from \"./evidence\";\nimport { listQuestionsFromGatewayAuth } from \"./questions\";\n\nfunction createGatewaySearchPort(authContext: GatewayAuthContext): SearchPort {\n return {\n async listBeliefs(input) {\n const page = await listBeliefsFromGatewayAuth(authContext, input);\n return page.beliefs;\n },\n async searchEvidence(input) {\n const page = await searchEvidenceFromGatewayAuth(authContext, input);\n return page.results;\n },\n async listQuestions(input) {\n const page = await listQuestionsFromGatewayAuth(authContext, input);\n return page.questions;\n },\n };\n}\n\nexport function searchResourcesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: SearchInput\n) {\n return searchResources(createGatewaySearchPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport { searchResourcesFromGatewayAuth } from \"@lucern/server-core/search\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const items = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return items.length > 0 ? items : undefined;\n}\n\nexport async function handleSearchResources(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n const body = asRecord(args.body);\n const q = readString(body.q) ?? readString(body.query);\n const topicId = readString(body.topicId) ?? readString(body.projectId);\n if (!q) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"q is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n if (!topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required for cross-resource search.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await searchResourcesFromGatewayAuth(args.authContext, {\n q,\n topicId,\n types: readStringArray(body.types) as\n | Array<\"belief\" | \"evidence\" | \"question\">\n | undefined,\n status: readString(body.status),\n minConfidence: readNumber(body.minConfidence),\n limit: readNumber(body.limit),\n cursor: readString(body.cursor),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to search.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","type TaskStatus = \"todo\" | \"in_progress\" | \"blocked\" | \"done\";\ntype TaskPriority = \"low\" | \"medium\" | \"high\" | \"urgent\";\ntype TaskType =\n | \"research\"\n | \"interview\"\n | \"analysis\"\n | \"data_collection\"\n | \"general\";\n\ntype StructuredTasksError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type TaskRecord = {\n id: string;\n taskId: string;\n topicId?: string;\n title: string;\n description?: string;\n status: TaskStatus;\n priority: TaskPriority;\n taskType: TaskType;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n outputSummary?: string;\n createdAt?: number;\n updatedAt?: number;\n completedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TaskListResult = {\n tasks: TaskRecord[];\n count: number;\n};\n\nexport type CreateTaskInput = {\n topicId: string;\n title: string;\n description?: string;\n taskType?: string;\n priority?: string;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type UpdateTaskInput = {\n id: string;\n title?: string;\n description?: string;\n priority?: string;\n status?: string;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type CompleteTaskInput = {\n id: string;\n outputSummary?: string;\n};\n\nexport type ListTasksQuery = {\n topicId?: string;\n worktreeId?: string;\n status?: string;\n limit?: number;\n};\n\ntype TaskCreatePortInput = {\n topicId: string;\n title: string;\n description?: string;\n taskType: TaskType;\n priority: TaskPriority;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\ntype TaskUpdatePortInput = {\n taskRawId: string;\n title?: string;\n description?: string;\n priority?: TaskPriority;\n status?: TaskStatus;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\ntype TaskCompletePortInput = {\n taskRawId: string;\n outputSummary?: string;\n};\n\nexport type TasksPort = {\n fetchTask: (rawId: string) => Promise<unknown | null>;\n listTasksByTopic: (args: {\n topicId: string;\n status?: TaskStatus;\n limit?: number;\n }) => Promise<unknown[]>;\n listTasksByWorktree: (args: { worktreeId: string }) => Promise<unknown[]>;\n createTask: (input: TaskCreatePortInput) => Promise<unknown>;\n updateTask: (input: TaskUpdatePortInput) => Promise<unknown>;\n completeTask: (input: TaskCompletePortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throwTasksError({\n message: `[tasks] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction throwTasksError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredTasksError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction normalizeTaskStatus(value: unknown): TaskStatus {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"in_progress\":\n return \"in_progress\";\n case \"blocked\":\n return \"blocked\";\n case \"done\":\n return \"done\";\n case \"todo\":\n case \"pending\":\n default:\n return \"todo\";\n }\n}\n\nfunction normalizeTaskPriority(value: unknown): TaskPriority {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"urgent\":\n case \"critical\":\n return \"urgent\";\n case \"high\":\n return \"high\";\n case \"low\":\n return \"low\";\n default:\n return \"medium\";\n }\n}\n\nfunction normalizeTaskType(value: unknown): TaskType {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"research\":\n case \"interview\":\n case \"analysis\":\n case \"data_collection\":\n case \"general\":\n return normalized;\n default:\n return \"general\";\n }\n}\n\nfunction extractTaskRawId(value: unknown, field = \"taskId\"): string {\n const record = asRecord(value);\n const rawId = readString(record.taskId ?? record._id ?? record.id);\n return normalizeRequiredString(rawId, field);\n}\n\nfunction normalizeTaskRecord(value: unknown): TaskRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const taskId = extractTaskRawId(record);\n\n return {\n id: taskId,\n taskId,\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n title: normalizeRequiredString(record.title, \"title\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n status: normalizeTaskStatus(record.status ?? metadata.status),\n priority: normalizeTaskPriority(record.priority ?? metadata.priority),\n taskType: normalizeTaskType(record.taskType ?? metadata.taskType),\n ...(readString(record.linkedBeliefId)\n ? { linkedBeliefId: readString(record.linkedBeliefId)! }\n : {}),\n ...(readString(record.linkedQuestionId)\n ? { linkedQuestionId: readString(record.linkedQuestionId)! }\n : {}),\n ...(readString(record.linkedWorktreeId)\n ? { linkedWorktreeId: readString(record.linkedWorktreeId)! }\n : {}),\n ...(readString(record.outputSummary)\n ? { outputSummary: readString(record.outputSummary)! }\n : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(readNumber(record.completedAt)\n ? { completedAt: readNumber(record.completedAt)! }\n : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nasync function fetchNormalizedTask(\n deps: TasksPort,\n rawId: string\n): Promise<TaskRecord> {\n const task = await deps.fetchTask(rawId);\n if (!task) {\n throwTasksError({\n message: `[tasks.get] Task ${rawId} was not found.`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"entity.exists\",\n suggestion: \"Verify the task identifier and try again.\",\n });\n }\n return normalizeTaskRecord(task);\n}\n\nexport async function createTask(\n deps: TasksPort,\n input: CreateTaskInput\n): Promise<TaskRecord> {\n const created = await deps.createTask({\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n title: normalizeRequiredString(input.title, \"title\"),\n description: readString(input.description),\n taskType: normalizeTaskType(input.taskType),\n priority: normalizeTaskPriority(input.priority),\n linkedBeliefId: readString(input.linkedBeliefId),\n linkedQuestionId: readString(input.linkedQuestionId),\n linkedWorktreeId: readString(input.linkedWorktreeId),\n metadata:\n input.metadata &&\n typeof input.metadata === \"object\" &&\n !Array.isArray(input.metadata)\n ? input.metadata\n : undefined,\n });\n\n return fetchNormalizedTask(deps, extractTaskRawId(created, \"created task id\"));\n}\n\nexport async function updateTask(\n deps: TasksPort,\n input: UpdateTaskInput\n): Promise<TaskRecord> {\n const taskRawId = normalizeRequiredString(input.id, \"id\");\n const hasPatchField =\n input.title !== undefined ||\n input.description !== undefined ||\n input.priority !== undefined ||\n input.status !== undefined ||\n input.linkedBeliefId !== undefined ||\n input.linkedQuestionId !== undefined ||\n input.linkedWorktreeId !== undefined ||\n input.metadata !== undefined;\n\n if (hasPatchField) {\n await deps.updateTask({\n taskRawId,\n ...(input.title !== undefined ? { title: readString(input.title) } : {}),\n ...(input.description !== undefined\n ? { description: readString(input.description) }\n : {}),\n ...(input.priority !== undefined\n ? { priority: normalizeTaskPriority(input.priority) }\n : {}),\n ...(input.status !== undefined\n ? { status: normalizeTaskStatus(input.status) }\n : {}),\n ...(input.linkedBeliefId !== undefined\n ? { linkedBeliefId: readString(input.linkedBeliefId) }\n : {}),\n ...(input.linkedQuestionId !== undefined\n ? { linkedQuestionId: readString(input.linkedQuestionId) }\n : {}),\n ...(input.linkedWorktreeId !== undefined\n ? { linkedWorktreeId: readString(input.linkedWorktreeId) }\n : {}),\n ...(input.metadata &&\n typeof input.metadata === \"object\" &&\n !Array.isArray(input.metadata)\n ? { metadata: input.metadata }\n : {}),\n });\n }\n\n return fetchNormalizedTask(deps, taskRawId);\n}\n\nexport async function completeTask(\n deps: TasksPort,\n input: CompleteTaskInput\n): Promise<TaskRecord> {\n const taskRawId = normalizeRequiredString(input.id, \"id\");\n await deps.completeTask({\n taskRawId,\n outputSummary: readString(input.outputSummary),\n });\n return fetchNormalizedTask(deps, taskRawId);\n}\n\nexport async function listTasks(\n deps: TasksPort,\n query: ListTasksQuery\n): Promise<TaskListResult> {\n const topicId = readString(query.topicId);\n const worktreeId = readString(query.worktreeId);\n\n if (!topicId && !worktreeId) {\n throwTasksError({\n message: \"[tasks] topicId or worktreeId is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Provide topicId or worktreeId when listing tasks.\",\n });\n }\n\n const limit =\n typeof query.limit === \"number\" && Number.isFinite(query.limit)\n ? Math.max(1, Math.floor(query.limit))\n : undefined;\n const status =\n query.status !== undefined ? normalizeTaskStatus(query.status) : undefined;\n\n const tasks = worktreeId\n ? await deps.listTasksByWorktree({ worktreeId })\n : await deps.listTasksByTopic({\n topicId: topicId ?? \"\",\n status,\n limit,\n });\n\n const normalized = (Array.isArray(tasks) ? tasks : [])\n .map((task) => normalizeTaskRecord(task))\n .filter((task) => {\n if (topicId && task.topicId && task.topicId !== topicId) {\n return false;\n }\n if (worktreeId && task.linkedWorktreeId && task.linkedWorktreeId !== worktreeId) {\n return false;\n }\n if (status && task.status !== status) {\n return false;\n }\n return true;\n });\n\n const limited = limit ? normalized.slice(0, limit) : normalized;\n return {\n tasks: limited,\n count: normalized.length,\n };\n}\n","import { api } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport {\n completeTask,\n createTask,\n listTasks,\n updateTask,\n type CompleteTaskInput,\n type CreateTaskInput,\n type ListTasksQuery,\n type TasksPort,\n type UpdateTaskInput,\n} from \"./domain/tasks\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nasync function emitTaskEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"task\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitTaskEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitTaskEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"task\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayTasksPort(authContext: GatewayAuthContext): TasksPort {\n return {\n fetchTask(rawId) {\n return authContext.convex.query(api.tasks.get as any, {\n taskId: rawId as any,\n userId: authContext.userId,\n });\n },\n listTasksByTopic(args) {\n return authContext.convex.query(api.tasks.getByTopic as any, {\n topicId: args.topicId as any,\n ...(args.status ? { status: args.status } : {}),\n ...(typeof args.limit === \"number\" ? { limit: args.limit } : {}),\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n listTasksByWorktree(args) {\n return authContext.convex.query(api.tasks.getByWorktree as any, {\n worktreeId: args.worktreeId as any,\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n createTask(input) {\n return authContext.convex.mutation(api.tasks.create as any, {\n topicId: input.topicId as any,\n title: input.title,\n ...(input.description ? { description: input.description } : {}),\n taskType: input.taskType as any,\n priority: input.priority as any,\n ...(input.linkedBeliefId\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n updateTask(input) {\n return authContext.convex.mutation(api.tasks.update as any, {\n taskId: input.taskRawId as any,\n ...(input.title !== undefined ? { title: input.title } : {}),\n ...(input.description !== undefined\n ? { description: input.description }\n : {}),\n ...(input.priority !== undefined ? { priority: input.priority as any } : {}),\n ...(input.status !== undefined ? { status: input.status as any } : {}),\n ...(input.linkedBeliefId !== undefined\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId !== undefined\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId !== undefined\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n completeTask(input) {\n return authContext.convex.mutation(api.tasks.complete as any, {\n taskId: input.taskRawId as any,\n ...(input.outputSummary ? { outputSummary: input.outputSummary } : {}),\n userId: authContext.userId,\n });\n },\n };\n}\n\nfunction createMcpTasksPort(authContext: AuthContext): TasksPort {\n const convex = requireMcpConvex(authContext, \"createMcpTasksPort\");\n return {\n fetchTask(rawId) {\n return convex.query(api.tasks.get as any, {\n taskId: rawId as any,\n userId: authContext.userId,\n });\n },\n listTasksByTopic(args) {\n return convex.query(api.tasks.getByTopic as any, {\n topicId: args.topicId as any,\n ...(args.status ? { status: args.status } : {}),\n ...(typeof args.limit === \"number\" ? { limit: args.limit } : {}),\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n listTasksByWorktree(args) {\n return convex.query(api.tasks.getByWorktree as any, {\n worktreeId: args.worktreeId as any,\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n createTask(input) {\n return convex.mutation(api.tasks.create as any, {\n topicId: input.topicId as any,\n title: input.title,\n ...(input.description ? { description: input.description } : {}),\n taskType: input.taskType as any,\n priority: input.priority as any,\n ...(input.linkedBeliefId\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n updateTask(input) {\n return convex.mutation(api.tasks.update as any, {\n taskId: input.taskRawId as any,\n ...(input.title !== undefined ? { title: input.title } : {}),\n ...(input.description !== undefined\n ? { description: input.description }\n : {}),\n ...(input.priority !== undefined ? { priority: input.priority as any } : {}),\n ...(input.status !== undefined ? { status: input.status as any } : {}),\n ...(input.linkedBeliefId !== undefined\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId !== undefined\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId !== undefined\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n completeTask(input) {\n return convex.mutation(api.tasks.complete as any, {\n taskId: input.taskRawId as any,\n ...(input.outputSummary ? { outputSummary: input.outputSummary } : {}),\n userId: authContext.userId,\n });\n },\n };\n}\n\nexport async function createTaskFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateTaskInput\n) {\n const payload = await createTask(createGatewayTasksPort(authContext), input);\n await emitTaskEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"task.created\",\n resourceId: payload.id,\n data: {\n title: payload.title,\n description: payload.description,\n status: payload.status,\n priority: payload.priority,\n taskType: payload.taskType,\n linkedBeliefId: payload.linkedBeliefId,\n linkedQuestionId: payload.linkedQuestionId,\n linkedWorktreeId: payload.linkedWorktreeId,\n metadata: payload.metadata,\n },\n });\n return payload;\n}\n\nexport async function updateTaskFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateTaskInput\n) {\n const payload = await updateTask(createGatewayTasksPort(authContext), input);\n await emitTaskEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"task.updated\",\n resourceId: payload.id,\n data: {\n title: payload.title,\n description: payload.description,\n status: payload.status,\n priority: payload.priority,\n linkedBeliefId: payload.linkedBeliefId,\n linkedQuestionId: payload.linkedQuestionId,\n linkedWorktreeId: payload.linkedWorktreeId,\n metadata: payload.metadata,\n },\n });\n return payload;\n}\n\nexport async function completeTaskFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CompleteTaskInput\n) {\n const payload = await completeTask(createGatewayTasksPort(authContext), input);\n await emitTaskEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"task.completed\",\n resourceId: payload.id,\n data: {\n status: payload.status,\n outputSummary: payload.outputSummary,\n completedAt: payload.completedAt,\n },\n });\n return payload;\n}\n\nexport function listTasksFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListTasksQuery\n) {\n return listTasks(createGatewayTasksPort(authContext), query);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n completeTaskFromGatewayAuth,\n createTaskFromGatewayAuth,\n listTasksFromGatewayAuth,\n updateTaskFromGatewayAuth,\n} from \"@lucern/server-core/tasks\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction handleTasksError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleTaskCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createTaskFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n title: readString(body.title) ?? \"\",\n description: readString(body.description),\n taskType: readString(body.taskType),\n priority: readString(body.priority),\n linkedBeliefId: readString(body.linkedBeliefId),\n linkedQuestionId: readString(body.linkedQuestionId),\n linkedWorktreeId: readString(body.linkedWorktreeId),\n metadata:\n body.metadata &&\n typeof body.metadata === \"object\" &&\n !Array.isArray(body.metadata)\n ? (body.metadata as Record<string, unknown>)\n : undefined,\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to create task.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTaskList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n worktreeId?: string;\n status?: string;\n limit?: number;\n };\n}) {\n try {\n const payload = await listTasksFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to list tasks.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTaskUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n taskId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateTaskFromGatewayAuth(args.authContext, {\n id: args.taskId,\n title: readString(body.title),\n description: readString(body.description),\n priority: readString(body.priority),\n status: readString(body.status),\n linkedBeliefId: readString(body.linkedBeliefId),\n linkedQuestionId: readString(body.linkedQuestionId),\n linkedWorktreeId: readString(body.linkedWorktreeId),\n metadata:\n body.metadata &&\n typeof body.metadata === \"object\" &&\n !Array.isArray(body.metadata)\n ? (body.metadata as Record<string, unknown>)\n : undefined,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to update task.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTaskComplete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n taskId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await completeTaskFromGatewayAuth(args.authContext, {\n id: args.taskId,\n outputSummary: readString(body.outputSummary),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to complete task.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype TopicStatus = \"active\" | \"archived\" | \"watching\";\ntype TopicVisibility = \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\ntype TopicCoverageState = \"full\" | \"partial\" | \"empty\";\n\ntype TopicsError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type TopicRecord = {\n id: string;\n topicId: string;\n globalId?: string;\n name: string;\n description?: string;\n type: string;\n depth?: number;\n status?: TopicStatus;\n parentTopicId?: string | null;\n tenantId?: string;\n workspaceId?: string;\n visibility?: TopicVisibility;\n createdAt?: number;\n updatedAt?: number;\n};\n\nexport type TopicListResult = {\n topics: TopicRecord[];\n total: number;\n};\n\nexport type TopicTreeNode = TopicRecord & {\n path?: string[];\n};\n\nexport type TopicTreeResult = {\n tree: TopicTreeNode[];\n};\n\nexport type TopicCoverageRecord = {\n topicId: string;\n name: string;\n type: string;\n depth: number;\n beliefs: number;\n questions: number;\n evidence: number;\n coverage: TopicCoverageState;\n};\n\nexport type TopicCoverageSummary = {\n totalTopics: number;\n coveredTopics: number;\n emptyTopics: number;\n coveragePercent: number;\n totalBeliefs: number;\n totalQuestions: number;\n totalEvidence: number;\n};\n\nexport type TopicCoverageResult = {\n topics: TopicCoverageRecord[];\n summary: TopicCoverageSummary;\n scopeTopicId?: string | null;\n};\n\nexport type CreateTopicInput = {\n name: string;\n description?: string;\n type?: string;\n parentTopicId?: string;\n ontologyId?: string;\n tenantId?: string;\n workspaceId?: string;\n visibility?: TopicVisibility;\n createdBy?: string;\n};\n\nexport type UpdateTopicInput = {\n id: string;\n name?: string;\n description?: string;\n type?: string;\n ontologyId?: string;\n clearOntologyId?: boolean;\n status?: TopicStatus;\n visibility?: TopicVisibility;\n};\n\nexport type GetTopicInput = {\n id: string;\n};\n\nexport type ListTopicsQuery = {\n ontologyId?: string;\n parentTopicId?: string;\n status?: TopicStatus | string;\n type?: string;\n};\n\nexport type GetTopicTreeInput = {\n id: string;\n maxDepth?: number;\n};\n\nexport type GetTopicCoverageInput = {\n id: string;\n includeDescendants?: boolean;\n maxDepth?: number;\n};\n\ntype CreateTopicPortInput = {\n name: string;\n description?: string;\n type: string;\n parentTopicRawId?: string;\n ontologyId?: string;\n tenantId?: string;\n workspaceId?: string;\n visibility?: TopicVisibility;\n createdBy?: string;\n};\n\ntype UpdateTopicPortInput = {\n topicRawId: string;\n name?: string;\n description?: string;\n type?: string;\n ontologyId?: string;\n clearOntologyId?: boolean;\n status?: TopicStatus;\n visibility?: TopicVisibility;\n};\n\nexport type TopicsPort = {\n fetchTopic: (rawId: string) => Promise<unknown | null>;\n listTopics: (query: {\n ontologyId?: string;\n parentTopicRawId?: string;\n status?: string;\n type?: string;\n }) => Promise<unknown[]>;\n createTopic: (input: CreateTopicPortInput) => Promise<unknown>;\n updateTopic?: (input: UpdateTopicPortInput) => Promise<unknown>;\n fetchTopicTree: (args: {\n rootRawId: string;\n maxDepth?: number;\n }) => Promise<unknown>;\n listBeliefsByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n listQuestionsByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n listEvidenceByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n};\n\nfunction createTopicsError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): TopicsError {\n const error = new Error(args.message) as TopicsError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n return error;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction requireString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw createTopicsError({\n message: `[topics] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, prefix: string, field: string): string {\n const normalized = requireString(id, field);\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix !== prefix) {\n throw createTopicsError({\n message: `[topics] Expected ${prefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${prefix}_ prefixed identifier for ${field}.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (\n error instanceof Error &&\n \"status\" in error &&\n typeof (error as TopicsError).status === \"number\"\n ) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeTopicId(rawId: string): string {\n return encodePrefixedId(\"top\", requireString(rawId, \"topicId\"));\n}\n\nfunction normalizeTopicStatus(value: unknown): TopicStatus | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"active\" ||\n normalized === \"archived\" ||\n normalized === \"watching\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeTopicVisibility(value: unknown): TopicVisibility | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"private\" ||\n normalized === \"team\" ||\n normalized === \"firm\" ||\n normalized === \"external\" ||\n normalized === \"public\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeTopicRecord(value: unknown): TopicRecord {\n const record = asRecord(value);\n const rawId =\n readString(record.topicId) ??\n readString(record.id) ??\n readString(record._id) ??\n readString(record.projectId);\n\n if (!rawId) {\n throw createTopicsError({\n message: \"[topics] topicId is required in upstream topic payload.\",\n status: 500,\n code: \"INTERNAL_ERROR\",\n invariantCode: \"resource.exists\",\n });\n }\n\n const topicId = encodeTopicId(rawId);\n const parentTopicRawId = readString(record.parentTopicId);\n\n return {\n id: topicId,\n topicId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n name: requireString(record.name, \"name\"),\n type: readString(record.type) ?? \"theme\",\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(readNumber(record.depth) !== undefined\n ? { depth: readNumber(record.depth)! }\n : {}),\n ...(normalizeTopicStatus(record.status)\n ? { status: normalizeTopicStatus(record.status)! }\n : {}),\n ...(parentTopicRawId\n ? { parentTopicId: encodeTopicId(parentTopicRawId) }\n : record.parentTopicId === null\n ? { parentTopicId: null }\n : {}),\n ...(readString(record.tenantId) ? { tenantId: readString(record.tenantId)! } : {}),\n ...(readString(record.workspaceId)\n ? { workspaceId: readString(record.workspaceId)! }\n : {}),\n ...(normalizeTopicVisibility(record.visibility)\n ? { visibility: normalizeTopicVisibility(record.visibility)! }\n : {}),\n ...(readNumber(record.createdAt ?? record._creationTime) !== undefined\n ? { createdAt: readNumber(record.createdAt ?? record._creationTime)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nfunction normalizeTopicTreeResults(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n\n const record = asRecord(value);\n if (Array.isArray(record.tree)) {\n return record.tree;\n }\n\n return [];\n}\n\nfunction normalizeTopicTreeNode(value: unknown): TopicTreeNode {\n const record = asRecord(value);\n return {\n ...normalizeTopicRecord(record),\n ...(readStringArray(record.path) ? { path: readStringArray(record.path)! } : {}),\n };\n}\n\nfunction dedupeTopics(records: TopicRecord[]): TopicRecord[] {\n const byId = new Map<string, TopicRecord>();\n for (const record of records) {\n byId.set(record.topicId, record);\n }\n return [...byId.values()];\n}\n\nfunction classifyCoverage(\n beliefs: number,\n questions: number,\n evidence: number\n): TopicCoverageState {\n if (beliefs === 0) {\n return \"empty\";\n }\n if (questions > 0 || evidence > 0) {\n return \"full\";\n }\n return \"partial\";\n}\n\nexport async function createTopic(\n deps: TopicsPort,\n input: CreateTopicInput\n): Promise<TopicRecord> {\n const created = await deps.createTopic({\n name: requireString(input.name, \"name\"),\n description: readString(input.description),\n type: readString(input.type) ?? \"theme\",\n parentTopicRawId: input.parentTopicId\n ? decodeExternalId(input.parentTopicId, \"top\", \"parentTopicId\")\n : undefined,\n ontologyId: readString(input.ontologyId),\n tenantId: readString(input.tenantId),\n workspaceId: readString(input.workspaceId),\n visibility: normalizeTopicVisibility(input.visibility),\n createdBy: readString(input.createdBy),\n });\n\n const createdRecord = asRecord(created);\n const createdRawId =\n readString(createdRecord.topicId) ??\n readString(createdRecord.id) ??\n readString(createdRecord._id) ??\n readString(createdRecord.projectId);\n\n if (createdRawId && !readString(createdRecord.name)) {\n const hydrated = await deps.fetchTopic(createdRawId);\n if (hydrated) {\n return normalizeTopicRecord({\n ...asRecord(hydrated),\n ...createdRecord,\n topicId:\n readString(asRecord(hydrated).topicId) ??\n readString(asRecord(hydrated).id) ??\n readString(asRecord(hydrated)._id) ??\n readString(asRecord(hydrated).projectId) ??\n createdRawId,\n });\n }\n }\n\n return normalizeTopicRecord(created);\n}\n\nexport async function updateTopic(\n deps: TopicsPort,\n input: UpdateTopicInput\n): Promise<TopicRecord> {\n if (!deps.updateTopic) {\n throw createTopicsError({\n message: \"Topic update is not supported by this surface.\",\n status: 501,\n code: \"UPSTREAM_ERROR\",\n invariantCode: \"platform.internal_stability\",\n });\n }\n\n const updated = await deps.updateTopic({\n topicRawId: decodeExternalId(input.id, \"top\", \"id\"),\n name: readString(input.name),\n description: readString(input.description),\n type: readString(input.type),\n ontologyId: readString(input.ontologyId),\n clearOntologyId:\n typeof input.clearOntologyId === \"boolean\" ? input.clearOntologyId : undefined,\n status: normalizeTopicStatus(input.status),\n visibility: normalizeTopicVisibility(input.visibility),\n });\n\n const updatedRecord = asRecord(updated);\n const updatedRawId =\n readString(updatedRecord.topicId) ??\n readString(updatedRecord.id) ??\n readString(updatedRecord._id) ??\n readString(updatedRecord.projectId) ??\n decodeExternalId(input.id, \"top\", \"id\");\n\n if (!readString(updatedRecord.name) || !readString(updatedRecord.topicId)) {\n const hydrated = await deps.fetchTopic(updatedRawId);\n if (hydrated) {\n return normalizeTopicRecord({\n ...asRecord(hydrated),\n ...updatedRecord,\n topicId:\n readString(asRecord(hydrated).topicId) ??\n readString(asRecord(hydrated).id) ??\n readString(asRecord(hydrated)._id) ??\n readString(asRecord(hydrated).projectId) ??\n updatedRawId,\n });\n }\n }\n\n return normalizeTopicRecord(updated);\n}\n\nexport async function getTopic(\n deps: TopicsPort,\n input: GetTopicInput\n): Promise<TopicRecord> {\n const rawId = decodeExternalId(input.id, \"top\", \"id\");\n const topic = await deps.fetchTopic(rawId);\n\n if (!topic) {\n throw createTopicsError({\n message: `Topic not found: ${input.id}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"resource.exists\",\n suggestion: \"Check the topicId and scope, then retry.\",\n });\n }\n\n return normalizeTopicRecord(topic);\n}\n\nexport async function listTopics(\n deps: TopicsPort,\n query: ListTopicsQuery = {}\n): Promise<TopicListResult> {\n const topics = await deps.listTopics({\n ontologyId: readString(query.ontologyId),\n parentTopicRawId: query.parentTopicId\n ? decodeExternalId(query.parentTopicId, \"top\", \"parentTopicId\")\n : undefined,\n status: readString(query.status),\n type: readString(query.type),\n });\n\n const normalized = dedupeTopics(\n (Array.isArray(topics) ? topics : []).map((topic) =>\n normalizeTopicRecord(topic)\n )\n );\n\n return {\n topics: normalized,\n total: normalized.length,\n };\n}\n\nexport async function getTopicTree(\n deps: TopicsPort,\n input: GetTopicTreeInput\n): Promise<TopicTreeResult> {\n const root = await getTopic(deps, { id: input.id });\n const tree = await deps.fetchTopicTree({\n rootRawId: decodeExternalId(input.id, \"top\", \"id\"),\n maxDepth:\n typeof input.maxDepth === \"number\" && Number.isFinite(input.maxDepth)\n ? input.maxDepth\n : undefined,\n });\n\n const nodes = normalizeTopicTreeResults(tree).map((entry) =>\n normalizeTopicTreeNode(entry)\n );\n const deduped = dedupeTopics(nodes).map((entry) =>\n entry.topicId === root.topicId ? { ...entry, ...root } : entry\n );\n\n return { tree: deduped };\n}\n\nexport async function getTopicCoverage(\n deps: TopicsPort,\n input: GetTopicCoverageInput\n): Promise<TopicCoverageResult> {\n const root = await getTopic(deps, { id: input.id });\n const includeDescendants = input.includeDescendants ?? true;\n\n const scopedTopics = includeDescendants\n ? (await getTopicTree(deps, {\n id: input.id,\n maxDepth: input.maxDepth,\n })).tree\n : [root];\n\n const topics = await Promise.all(\n scopedTopics.map(async (topic) => {\n const [beliefs, questions, evidence] = await Promise.all([\n deps.listBeliefsByTopic({ topicId: decodeExternalId(topic.topicId, \"top\", \"topicId\"), limit: 500 }),\n deps.listQuestionsByTopic({ topicId: decodeExternalId(topic.topicId, \"top\", \"topicId\"), limit: 500 }),\n deps.listEvidenceByTopic({ topicId: decodeExternalId(topic.topicId, \"top\", \"topicId\"), limit: 500 }),\n ]);\n\n const beliefCount = Array.isArray(beliefs) ? beliefs.length : 0;\n const questionCount = Array.isArray(questions) ? questions.length : 0;\n const evidenceCount = Array.isArray(evidence) ? evidence.length : 0;\n\n return {\n topicId: topic.topicId,\n name: topic.name,\n type: topic.type,\n depth: topic.depth ?? 0,\n beliefs: beliefCount,\n questions: questionCount,\n evidence: evidenceCount,\n coverage: classifyCoverage(\n beliefCount,\n questionCount,\n evidenceCount\n ),\n } satisfies TopicCoverageRecord;\n })\n );\n\n const summary = topics.reduce<TopicCoverageSummary>(\n (accumulator, topic) => {\n accumulator.totalTopics += 1;\n accumulator.coveredTopics += topic.coverage === \"empty\" ? 0 : 1;\n accumulator.emptyTopics += topic.coverage === \"empty\" ? 1 : 0;\n accumulator.totalBeliefs += topic.beliefs;\n accumulator.totalQuestions += topic.questions;\n accumulator.totalEvidence += topic.evidence;\n return accumulator;\n },\n {\n totalTopics: 0,\n coveredTopics: 0,\n emptyTopics: 0,\n coveragePercent: 0,\n totalBeliefs: 0,\n totalQuestions: 0,\n totalEvidence: 0,\n }\n );\n\n summary.coveragePercent =\n summary.totalTopics > 0\n ? Number(\n (\n (summary.coveredTopics / summary.totalTopics) *\n 100\n ).toFixed(2)\n )\n : 0;\n\n return {\n topics,\n summary,\n scopeTopicId: root.topicId,\n };\n}\n","import { api, internal, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n createTopic,\n getTopic,\n getTopicCoverage,\n getTopicTree,\n listTopics,\n updateTopic,\n type CreateTopicInput,\n type GetTopicCoverageInput,\n type GetTopicTreeInput,\n type ListTopicsQuery,\n type TopicsPort,\n type UpdateTopicInput,\n} from \"./domain/topics\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nasync function emitTopicEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.topicId,\n resourceType: \"topic\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitTopicEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitTopicEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.topicId,\n resourceType: \"topic\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction normalizeTopicEventId(topicId: string): string {\n const normalized = topicId.trim();\n if (!normalized) {\n return normalized;\n }\n try {\n const decoded = decodePrefixedId(normalized);\n return decoded.prefix === \"top\" ? decoded.value : normalized;\n } catch {\n return normalized;\n }\n}\n\nfunction readCanonicalTopicRawId(value: unknown): string | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n for (const candidate of [record._id, record.id, record.topicId, record.projectId]) {\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n return normalizeTopicEventId(candidate);\n }\n }\n\n return undefined;\n}\n\nfunction createGatewayTopicsPort(authContext: GatewayAuthContext): TopicsPort {\n return {\n fetchTopic(rawId) {\n return authContext.convex.query(api.topics.get, { id: rawId as any });\n },\n listTopics(query) {\n if (query.ontologyId) {\n return authContext.convex.query(api.topics.listByOntology, {\n ontologyId: query.ontologyId as any,\n }) as Promise<unknown[]>;\n }\n\n return authContext.convex.query(api.topics.list, {\n type: query.type,\n parentTopicId: query.parentTopicRawId as any,\n status: query.status as any,\n }) as Promise<unknown[]>;\n },\n createTopic(input) {\n return authContext.convex.mutation(api.topics.create, {\n name: input.name,\n description: input.description,\n type: input.type,\n parentTopicId: input.parentTopicRawId as any,\n ontologyId: input.ontologyId as any,\n tenantId: input.tenantId,\n workspaceId: input.workspaceId,\n visibility: input.visibility,\n createdBy: input.createdBy ?? authContext.userId,\n });\n },\n updateTopic(input) {\n return authContext.convex.mutation(api.topics.update, {\n id: input.topicRawId as any,\n name: input.name,\n description: input.description,\n type: input.type,\n ontologyId: input.ontologyId as any,\n clearOntologyId: input.clearOntologyId,\n status: input.status,\n visibility: input.visibility,\n });\n },\n fetchTopicTree(args) {\n return authContext.convex.query(api.topics.getTree, {\n rootId: args.rootRawId as any,\n ...(typeof args.maxDepth === \"number\" ? { maxDepth: args.maxDepth } : {}),\n });\n },\n listBeliefsByTopic(args) {\n return authContext.convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listQuestionsByTopic(args) {\n return authContext.convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceByTopic(args) {\n return authContext.convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n };\n}\n\nfunction createMcpTopicsPort(authContext: AuthContext): TopicsPort {\n const convex = requireMcpConvex(authContext, \"createMcpTopicsPort\");\n return {\n fetchTopic(rawId) {\n return convex.query(api.topics.get, { id: rawId as any });\n },\n listTopics(query) {\n if (query.ontologyId) {\n return convex.query(api.topics.listByOntology, {\n ontologyId: query.ontologyId as any,\n }) as Promise<unknown[]>;\n }\n\n return convex.query(api.topics.list, {\n type: query.type,\n parentTopicId: query.parentTopicRawId as any,\n status: query.status as any,\n }) as Promise<unknown[]>;\n },\n createTopic(input) {\n return convex.mutation(api.topics.create, {\n name: input.name,\n description: input.description,\n type: input.type,\n parentTopicId: input.parentTopicRawId as any,\n ontologyId: input.ontologyId as any,\n tenantId: input.tenantId,\n workspaceId: input.workspaceId,\n visibility: input.visibility,\n createdBy: input.createdBy ?? authContext.userId,\n });\n },\n updateTopic(input) {\n return convex.mutation(api.topics.update, {\n id: input.topicRawId as any,\n name: input.name,\n description: input.description,\n type: input.type,\n ontologyId: input.ontologyId as any,\n clearOntologyId: input.clearOntologyId,\n status: input.status,\n visibility: input.visibility,\n });\n },\n fetchTopicTree(args) {\n return convex.query(api.topics.getTree, {\n rootId: args.rootRawId as any,\n ...(typeof args.maxDepth === \"number\" ? { maxDepth: args.maxDepth } : {}),\n });\n },\n listBeliefsByTopic(args) {\n return convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listQuestionsByTopic(args) {\n return convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceByTopic(args) {\n return convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n };\n}\n\nexport async function createTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateTopicInput\n) {\n const payload = await createTopic(createGatewayTopicsPort(authContext), input);\n await emitTopicEventFromGatewayAuth(authContext, {\n topicId: normalizeTopicEventId(payload.topicId),\n type: \"topic.created\",\n data: {\n name: payload.name,\n description: payload.description,\n type: payload.type,\n status: payload.status,\n visibility: payload.visibility,\n parentTopicId: payload.parentTopicId,\n ontologyId: input.ontologyId,\n },\n });\n return payload;\n}\n\nexport async function updateTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateTopicInput\n) {\n const payload = await updateTopic(createGatewayTopicsPort(authContext), input);\n await emitTopicEventFromGatewayAuth(authContext, {\n topicId: normalizeTopicEventId(payload.topicId),\n type: payload.status === \"archived\" ? \"topic.archived\" : \"topic.updated\",\n data: {\n name: payload.name,\n description: payload.description,\n type: payload.type,\n status: payload.status,\n visibility: payload.visibility,\n ontologyId: input.clearOntologyId ? null : input.ontologyId,\n },\n });\n return payload;\n}\n\nexport function getTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getTopic(createGatewayTopicsPort(authContext), { id });\n}\n\nexport function listTopicsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListTopicsQuery\n) {\n return listTopics(createGatewayTopicsPort(authContext), query);\n}\n\nexport function getTopicTreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GetTopicTreeInput\n) {\n return getTopicTree(createGatewayTopicsPort(authContext), input);\n}\n\nexport function getTopicCoverageFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GetTopicCoverageInput\n) {\n return getTopicCoverage(createGatewayTopicsPort(authContext), input);\n}\n\nexport async function removeTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n }\n) {\n const requestedId = normalizeTopicEventId(input.id);\n const existingTopic = await authContext.convex.query(api.topics.get, {\n id: requestedId,\n });\n const normalizedId = readCanonicalTopicRawId(existingTopic) ?? requestedId;\n const payload = await authContext.convex.mutation(api.topics.remove, {\n id: normalizedId,\n });\n return {\n ...(payload as Record<string, unknown>),\n id: input.id,\n };\n}\n\nexport function bulkCreateTopicsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n topics: Array<{\n globalId: string;\n name: string;\n description?: string;\n type: string;\n parentTopicId?: string;\n depth: number;\n path: string[];\n tenantId?: string;\n workspaceId?: string;\n graphScopeProjectId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n visibility?: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n metadata?: unknown;\n createdBy?: string;\n }>;\n }\n) {\n return authContext.convex.mutation(internal.topics.bulkCreate, {\n topics: input.topics.map((topic) => ({\n ...topic,\n createdBy: topic.createdBy ?? authContext.userId,\n })),\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n bulkCreateTopicsFromGatewayAuth,\n createTopicFromGatewayAuth,\n getTopicCoverageFromGatewayAuth,\n getTopicFromGatewayAuth,\n getTopicTreeFromGatewayAuth,\n listTopicsFromGatewayAuth,\n removeTopicFromGatewayAuth,\n updateTopicFromGatewayAuth,\n} from \"@lucern/server-core/topics\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nfunction handleTopicsError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleTopicCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createTopicFromGatewayAuth(args.authContext, {\n name: readString(body.name) ?? \"\",\n description: readString(body.description),\n type: readString(body.type),\n parentTopicId: readString(body.parentTopicId),\n ontologyId: readString(body.ontologyId),\n tenantId: readString(body.tenantId),\n workspaceId: readString(body.workspaceId),\n visibility: readString(body.visibility) as any,\n createdBy: readString(body.createdBy),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to create topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateTopicFromGatewayAuth(args.authContext, {\n id: args.topicId,\n name: readString(body.name),\n description: readString(body.description),\n type: readString(body.type),\n ontologyId: readString(body.ontologyId),\n clearOntologyId: readBoolean(body.clearOntologyId),\n status: readString(body.status) as any,\n visibility: readString(body.visibility) as any,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to update topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n}) {\n try {\n const payload = await getTopicFromGatewayAuth(args.authContext, args.topicId);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to read topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n ontologyId?: string;\n parentTopicId?: string;\n status?: string;\n type?: string;\n };\n}) {\n try {\n const payload = await listTopicsFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to list topics.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicTree(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n query: {\n maxDepth?: number;\n };\n}) {\n try {\n const payload = await getTopicTreeFromGatewayAuth(args.authContext, {\n id: args.topicId,\n maxDepth: readNumber(args.query.maxDepth),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to load topic tree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicCoverage(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n query: {\n includeDescendants?: boolean;\n maxDepth?: number;\n };\n}) {\n try {\n const payload = await getTopicCoverageFromGatewayAuth(args.authContext, {\n id: args.topicId,\n includeDescendants:\n typeof args.query.includeDescendants === \"boolean\"\n ? args.query.includeDescendants\n : undefined,\n maxDepth: readNumber(args.query.maxDepth),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to load topic coverage.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicRemove(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeTopicFromGatewayAuth(args.authContext, {\n id: readString(body.id) ?? readString(body.topicId) ?? \"\",\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to remove topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicBulkCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const topics = Array.isArray(body.topics)\n ? body.topics\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n globalId: readString(entry.globalId) ?? \"\",\n name: readString(entry.name) ?? \"\",\n description: readString(entry.description),\n type: readString(entry.type) ?? \"theme\",\n parentTopicId: readString(entry.parentTopicId),\n depth: readNumber(entry.depth) ?? 0,\n path: readStringArray(entry.path) ?? [],\n tenantId: readString(entry.tenantId),\n workspaceId: readString(entry.workspaceId),\n graphScopeProjectId: readString(entry.graphScopeProjectId),\n status:\n (readString(entry.status) as\n | \"active\"\n | \"archived\"\n | \"watching\") ?? \"active\",\n visibility: readString(entry.visibility) as\n | \"private\"\n | \"team\"\n | \"firm\"\n | \"external\"\n | \"public\"\n | undefined,\n metadata: asRecord(entry.metadata),\n createdBy: readString(entry.createdBy),\n }))\n : [];\n const payload = await bulkCreateTopicsFromGatewayAuth(args.authContext, {\n topics,\n });\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to bulk create topics.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport { inferActorType } from \"../../../../packages/events/src/outbox\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction handleWebhooksError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleWebhookCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await args.authContext.convex.mutation(\n \"events:createWebhook\" as any,\n {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: readString(body.topicId),\n url: readString(body.url) ?? \"\",\n events: readStringArray(body.events) ?? [],\n secret: readString(body.secret) ?? \"\",\n active: readBoolean(body.active),\n createdBy: args.authContext.principalId ?? args.authContext.userId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to create webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n };\n}) {\n try {\n const payload = await args.authContext.convex.query(\"events:listWebhooks\" as any, {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: args.query.topicId,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to list webhooks.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n}) {\n try {\n const payload = await args.authContext.convex.query(\"events:getWebhook\" as any, {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to read webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await args.authContext.convex.mutation(\n \"events:updateWebhook\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n url: readString(body.url),\n events: readStringArray(body.events),\n secret: readString(body.secret),\n topicId: readString(body.topicId),\n clearTopicId:\n body.topicId === null ? true : readBoolean(body.clearTopicId),\n active: readBoolean(body.active),\n updatedBy: args.authContext.principalId ?? args.authContext.userId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to update webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookDelete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n}) {\n try {\n const payload = await args.authContext.convex.mutation(\n \"events:deleteWebhook\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to delete webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookTest(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await args.authContext.convex.action(\"events:testWebhook\" as any, {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: readString(body.topicId),\n actorId: args.authContext.principalId ?? args.authContext.userId,\n actorType: inferActorType({\n authMode: args.authContext.authMode,\n principalType: args.authContext.principalType,\n }),\n correlationId: args.correlationId,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to test webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookDeliveries(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n query: {\n limit?: number;\n };\n}) {\n try {\n const payload = await args.authContext.convex.query(\n \"events:listWebhookDeliveries\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n limit: args.query.limit,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to list webhook deliveries.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookHealth(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n}) {\n try {\n const payload = await args.authContext.convex.query(\n \"events:getWebhookHealth\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to read webhook health.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype WorktreeStatus =\n | \"planning\"\n | \"active\"\n | \"paused\"\n | \"completed\"\n | \"merged\"\n | \"failed\"\n | \"archived\";\n\ntype WorktreesError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type WorktreeRecord = {\n worktreeId: string;\n id: string;\n topicId?: string;\n title: string;\n status?: WorktreeStatus | string;\n phase?: string;\n branchId?: string | null;\n objective?: string;\n hypothesis?: string;\n gate?: string;\n track?: string;\n trackPosition?: number;\n executionBand?: number;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n targetBeliefIds?: string[];\n targetQuestionIds?: string[];\n questionCount?: number;\n taskCount?: number;\n frameworkSuggestions?: unknown[];\n dependencySuggestions?: unknown[];\n autoShapeApplied?: boolean;\n proofArtifacts?: unknown[] | null;\n staffingHint?: string | null;\n lastReconciledAt?: number | null;\n autoFixPolicy?: Record<string, unknown> | null;\n lensId?: string | null;\n createdAt?: number;\n updatedAt?: number;\n};\n\nexport type WorktreeListResult = {\n worktrees: WorktreeRecord[];\n total: number;\n};\n\nexport type CreateWorktreeInput = {\n title: string;\n topicId: string;\n objective?: string;\n hypothesis?: string;\n beliefIds?: string[];\n autoShape?: boolean;\n domainPackId?: string;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: Record<string, unknown>;\n lensId?: string;\n};\n\nexport type ListWorktreesQuery = {\n topicId: string;\n status?: string;\n limit?: number;\n};\n\nexport type ActivateWorktreeInput = {\n id: string;\n};\n\nexport type MergeWorktreeInput = {\n id: string;\n summary?: string;\n outcomes: Array<{\n beliefId: string;\n confidence: number;\n rationale: string;\n }>;\n};\n\nexport type MergeWorktreeResult = {\n worktreeId: string;\n status: \"merged\";\n beliefsScored: number;\n failedBeliefs: Array<{\n beliefId: string;\n reason: string;\n }>;\n summary?: string;\n mergedAt: number;\n};\n\nexport type UpdateWorktreeTargetsInput = {\n id: string;\n addBeliefIds?: string[];\n addQuestionIds?: string[];\n removeBeliefIds?: string[];\n removeQuestionIds?: string[];\n};\n\nexport type UpdateWorktreeInput = {\n id: string;\n objective?: string;\n hypothesis?: string;\n rationale?: string;\n track?: string;\n trackPosition?: number;\n executionBand?: number;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n status?: string;\n topicId?: string;\n additionalTopicIds?: string[];\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: unknown;\n lensId?: string;\n};\n\ntype CreateWorktreePortInput = {\n title: string;\n topicRawId: string;\n objective?: string;\n hypothesis?: string;\n beliefRawIds?: string[];\n autoShape?: boolean;\n domainPackId?: string;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: Record<string, unknown>;\n lensId?: string;\n};\n\ntype UpdateWorktreeTargetsPortInput = {\n worktreeRawId: string;\n addBeliefRawIds?: string[];\n addQuestionRawIds?: string[];\n removeBeliefRawIds?: string[];\n removeQuestionRawIds?: string[];\n};\n\ntype UpdateWorktreeMetadataPortInput = {\n worktreeRawId: string;\n objective?: string;\n hypothesis?: string;\n rationale?: string;\n track?: string;\n trackPosition?: number;\n executionBand?: number;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n status?: string;\n topicId?: string;\n additionalTopicIds?: string[];\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: unknown;\n lensId?: string;\n};\n\nexport type WorktreesPort = {\n fetchWorktree: (rawId: string) => Promise<unknown | null>;\n listWorktreesByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n createWorktree: (input: CreateWorktreePortInput) => Promise<unknown>;\n activateWorktree: (args: { worktreeRawId: string }) => Promise<unknown>;\n completeWorktree: (args: {\n worktreeRawId: string;\n summary: string;\n }) => Promise<unknown>;\n scoreBeliefOutcome: (args: {\n beliefRawId: string;\n confidence: number;\n rationale: string;\n }) => Promise<unknown>;\n updateWorktreeMetadata: (\n input: UpdateWorktreeMetadataPortInput\n ) => Promise<unknown>;\n updateWorktreeTargets: (\n input: UpdateWorktreeTargetsPortInput\n ) => Promise<unknown>;\n};\n\nfunction createWorktreesError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): WorktreesError {\n const error = new Error(args.message) as WorktreesError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n return error;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction requireString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw createWorktreesError({\n message: `[worktrees] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, prefix: string, field: string): string {\n const normalized = requireString(id, field);\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix !== prefix) {\n throw createWorktreesError({\n message: `[worktrees] Expected ${prefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${prefix}_ prefixed identifier for ${field}.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (\n error instanceof Error &&\n \"status\" in error &&\n typeof (error as WorktreesError).status === \"number\"\n ) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeTopicId(rawId: string): string {\n return encodePrefixedId(\"top\", requireString(rawId, \"topicId\"));\n}\n\nfunction encodeWorktreeId(rawId: string): string {\n return encodePrefixedId(\"wt\", requireString(rawId, \"worktreeId\"));\n}\n\nfunction encodeBeliefId(rawId: string): string {\n return encodePrefixedId(\"bel\", requireString(rawId, \"beliefId\"));\n}\n\nfunction encodeQuestionId(rawId: string): string {\n return encodePrefixedId(\"que\", requireString(rawId, \"questionId\"));\n}\n\nfunction normalizeWorktreeRecord(value: unknown): WorktreeRecord {\n const record = asRecord(value);\n const rawId =\n readString(record.worktreeId) ??\n readString(record.id) ??\n readString(record._id);\n\n if (!rawId) {\n throw createWorktreesError({\n message: \"[worktrees] worktreeId is required in upstream worktree payload.\",\n status: 500,\n code: \"INTERNAL_ERROR\",\n invariantCode: \"resource.exists\",\n });\n }\n\n const worktreeId = encodeWorktreeId(rawId);\n const topicRawId = readString(record.topicId);\n\n return {\n worktreeId,\n id: worktreeId,\n ...(topicRawId ? { topicId: encodeTopicId(topicRawId) } : {}),\n title: readString(record.title) ?? readString(record.name) ?? \"Untitled\",\n ...(readString(record.status) ? { status: readString(record.status)! } : {}),\n ...(readString(record.phase) ? { phase: readString(record.phase)! } : {}),\n ...(readString(record.branchId) !== undefined\n ? { branchId: readString(record.branchId) ?? null }\n : {}),\n ...(readString(record.objective) ? { objective: readString(record.objective)! } : {}),\n ...(readString(record.hypothesis)\n ? { hypothesis: readString(record.hypothesis)! }\n : {}),\n ...(readString(record.gate) ? { gate: readString(record.gate)! } : {}),\n ...(readString(record.track) ? { track: readString(record.track)! } : {}),\n ...(readNumber(record.trackPosition) !== undefined\n ? { trackPosition: readNumber(record.trackPosition)! }\n : {}),\n ...(readNumber(record.executionBand) !== undefined\n ? { executionBand: readNumber(record.executionBand)! }\n : {}),\n ...(readNumber(record.executionOrder) !== undefined\n ? { executionOrder: readNumber(record.executionOrder)! }\n : {}),\n ...(readStringArray(record.dependsOn)\n ? {\n dependsOn: readStringArray(record.dependsOn)!.map((id) =>\n encodeWorktreeId(id)\n ),\n }\n : {}),\n ...(readStringArray(record.blocks)\n ? {\n blocks: readStringArray(record.blocks)!.map((id) =>\n encodeWorktreeId(id)\n ),\n }\n : {}),\n ...(readStringArray(record.targetBeliefIds)\n ? {\n targetBeliefIds: readStringArray(record.targetBeliefIds)!.map((id) =>\n encodeBeliefId(id)\n ),\n }\n : {}),\n ...(readStringArray(record.targetQuestionIds)\n ? {\n targetQuestionIds: readStringArray(record.targetQuestionIds)!.map((id) =>\n encodeQuestionId(id)\n ),\n }\n : {}),\n ...(readNumber(record.questionCount) !== undefined\n ? { questionCount: readNumber(record.questionCount)! }\n : {}),\n ...(readNumber(record.taskCount) !== undefined\n ? { taskCount: readNumber(record.taskCount)! }\n : {}),\n ...(Array.isArray(record.frameworkSuggestions)\n ? { frameworkSuggestions: record.frameworkSuggestions }\n : {}),\n ...(Array.isArray(record.dependencySuggestions)\n ? { dependencySuggestions: record.dependencySuggestions }\n : {}),\n ...(typeof record.autoShapeApplied === \"boolean\"\n ? { autoShapeApplied: record.autoShapeApplied }\n : {}),\n ...(Array.isArray(record.proofArtifacts)\n ? { proofArtifacts: record.proofArtifacts }\n : record.proofArtifacts === null\n ? { proofArtifacts: null }\n : {}),\n ...(readString(record.staffingHint) !== undefined\n ? { staffingHint: readString(record.staffingHint) ?? null }\n : {}),\n ...(readNumber(record.lastReconciledAt) !== undefined\n ? { lastReconciledAt: readNumber(record.lastReconciledAt)! }\n : record.lastReconciledAt === null\n ? { lastReconciledAt: null }\n : {}),\n ...(record.autoFixPolicy && typeof record.autoFixPolicy === \"object\"\n ? {\n autoFixPolicy: record.autoFixPolicy as Record<string, unknown>,\n }\n : record.autoFixPolicy === null\n ? { autoFixPolicy: null }\n : {}),\n ...(readString(record.lensId) !== undefined\n ? { lensId: readString(record.lensId) ?? null }\n : {}),\n ...(readNumber(record.createdAt ?? record._creationTime) !== undefined\n ? { createdAt: readNumber(record.createdAt ?? record._creationTime)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nfunction dedupeWorktrees(records: WorktreeRecord[]): WorktreeRecord[] {\n const byId = new Map<string, WorktreeRecord>();\n for (const record of records) {\n byId.set(record.worktreeId, record);\n }\n return [...byId.values()];\n}\n\nexport async function createWorktree(\n deps: WorktreesPort,\n input: CreateWorktreeInput\n): Promise<WorktreeRecord> {\n const topicRawId = decodeExternalId(input.topicId, \"top\", \"topicId\");\n const created = await deps.createWorktree({\n title: requireString(input.title, \"title\"),\n topicRawId,\n objective: readString(input.objective),\n hypothesis: readString(input.hypothesis),\n beliefRawIds: input.beliefIds?.map((id) =>\n decodeExternalId(id, \"bel\", \"beliefIds\")\n ),\n autoShape: typeof input.autoShape === \"boolean\" ? input.autoShape : undefined,\n domainPackId: readString(input.domainPackId),\n executionOrder:\n typeof input.executionOrder === \"number\" &&\n Number.isFinite(input.executionOrder)\n ? input.executionOrder\n : undefined,\n dependsOn: input.dependsOn?.map((id) =>\n decodeExternalId(id, \"wt\", \"dependsOn\")\n ),\n blocks: input.blocks?.map((id) => decodeExternalId(id, \"wt\", \"blocks\")),\n gate: readString(input.gate),\n proofArtifacts: Array.isArray(input.proofArtifacts)\n ? input.proofArtifacts\n : undefined,\n staffingHint: readString(input.staffingHint),\n lastReconciledAt:\n typeof input.lastReconciledAt === \"number\" &&\n Number.isFinite(input.lastReconciledAt)\n ? input.lastReconciledAt\n : undefined,\n autoFixPolicy:\n input.autoFixPolicy && typeof input.autoFixPolicy === \"object\"\n ? input.autoFixPolicy\n : undefined,\n lensId: readString(input.lensId),\n });\n\n const createdRecord =\n typeof created === \"string\"\n ? { worktreeId: created }\n : asRecord(created);\n\n return normalizeWorktreeRecord({\n topicId: topicRawId,\n title: input.title,\n ...createdRecord,\n });\n}\n\nexport async function listWorktrees(\n deps: WorktreesPort,\n query: ListWorktreesQuery\n): Promise<WorktreeListResult> {\n const worktrees = await deps.listWorktreesByTopic({\n topicId: decodeExternalId(query.topicId, \"top\", \"topicId\"),\n limit:\n typeof query.limit === \"number\" && Number.isFinite(query.limit)\n ? query.limit\n : undefined,\n });\n\n const statusFilter = readString(query.status)?.toLowerCase();\n const normalized = dedupeWorktrees(\n (Array.isArray(worktrees) ? worktrees : [])\n .map((worktree) => normalizeWorktreeRecord(worktree))\n .filter((worktree) =>\n statusFilter\n ? String(worktree.status ?? \"\").toLowerCase() === statusFilter\n : true\n )\n );\n\n return {\n worktrees: normalized,\n total: normalized.length,\n };\n}\n\nexport async function activateWorktree(\n deps: WorktreesPort,\n input: ActivateWorktreeInput\n): Promise<WorktreeRecord> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const activated = await deps.activateWorktree({ worktreeRawId: rawId });\n return normalizeWorktreeRecord({\n worktreeId: rawId,\n status: \"active\",\n ...asRecord(activated),\n });\n}\n\nexport async function updateWorktree(\n deps: WorktreesPort,\n input: UpdateWorktreeInput\n): Promise<WorktreeRecord> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const updated = await deps.updateWorktreeMetadata({\n worktreeRawId: rawId,\n objective: readString(input.objective),\n hypothesis: readString(input.hypothesis),\n rationale: readString(input.rationale),\n track: readString(input.track),\n trackPosition:\n typeof input.trackPosition === \"number\" &&\n Number.isFinite(input.trackPosition)\n ? input.trackPosition\n : undefined,\n executionBand:\n typeof input.executionBand === \"number\" &&\n Number.isFinite(input.executionBand)\n ? input.executionBand\n : undefined,\n executionOrder:\n typeof input.executionOrder === \"number\" &&\n Number.isFinite(input.executionOrder)\n ? input.executionOrder\n : undefined,\n dependsOn: input.dependsOn?.map((id) =>\n decodeExternalId(id, \"wt\", \"dependsOn\")\n ),\n blocks: input.blocks?.map((id) => decodeExternalId(id, \"wt\", \"blocks\")),\n gate: readString(input.gate),\n status: readString(input.status),\n topicId: readString(input.topicId),\n additionalTopicIds: input.additionalTopicIds,\n proofArtifacts: input.proofArtifacts,\n staffingHint: readString(input.staffingHint),\n lastReconciledAt:\n typeof input.lastReconciledAt === \"number\" &&\n Number.isFinite(input.lastReconciledAt)\n ? input.lastReconciledAt\n : undefined,\n autoFixPolicy: input.autoFixPolicy,\n lensId: readString(input.lensId),\n });\n\n return normalizeWorktreeRecord({\n worktreeId: rawId,\n ...asRecord(updated),\n });\n}\n\nexport async function updateWorktreeTargets(\n deps: WorktreesPort,\n input: UpdateWorktreeTargetsInput\n): Promise<WorktreeRecord> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const updated = await deps.updateWorktreeTargets({\n worktreeRawId: rawId,\n addBeliefRawIds: input.addBeliefIds?.map((id) =>\n decodeExternalId(id, \"bel\", \"addBeliefIds\")\n ),\n addQuestionRawIds: input.addQuestionIds?.map((id) =>\n decodeExternalId(id, \"que\", \"addQuestionIds\")\n ),\n removeBeliefRawIds: input.removeBeliefIds?.map((id) =>\n decodeExternalId(id, \"bel\", \"removeBeliefIds\")\n ),\n removeQuestionRawIds: input.removeQuestionIds?.map((id) =>\n decodeExternalId(id, \"que\", \"removeQuestionIds\")\n ),\n });\n\n return normalizeWorktreeRecord({\n worktreeId: rawId,\n ...asRecord(updated),\n });\n}\n\nexport async function mergeWorktree(\n deps: WorktreesPort,\n input: MergeWorktreeInput\n): Promise<MergeWorktreeResult> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const summary = readString(input.summary) ?? \"Worktree merged.\";\n await deps.completeWorktree({ worktreeRawId: rawId, summary });\n\n const failedBeliefs: MergeWorktreeResult[\"failedBeliefs\"] = [];\n let beliefsScored = 0;\n\n for (const outcome of input.outcomes) {\n try {\n await deps.scoreBeliefOutcome({\n beliefRawId: decodeExternalId(outcome.beliefId, \"bel\", \"beliefId\"),\n confidence: outcome.confidence,\n rationale: requireString(outcome.rationale, \"rationale\"),\n });\n beliefsScored += 1;\n } catch (error) {\n failedBeliefs.push({\n beliefId: encodeBeliefId(\n decodeExternalId(outcome.beliefId, \"bel\", \"beliefId\")\n ),\n reason: error instanceof Error ? error.message : \"Scoring failed\",\n });\n }\n }\n\n return {\n worktreeId: encodeWorktreeId(rawId),\n status: \"merged\",\n beliefsScored,\n failedBeliefs,\n summary,\n mergedAt: Date.now(),\n };\n}\n","import { api, internal, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n activateWorktree,\n createWorktree,\n listWorktrees,\n mergeWorktree,\n updateWorktree,\n updateWorktreeTargets,\n type ActivateWorktreeInput,\n type CreateWorktreeInput,\n type ListWorktreesQuery,\n type MergeWorktreeInput,\n type UpdateWorktreeInput,\n type UpdateWorktreeTargetsInput,\n type WorktreesPort,\n} from \"./domain/worktrees\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction toSubjectiveLogicOpinion(\n confidence: number\n): {\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n} {\n const boundedConfidence = Math.max(0, Math.min(confidence, 1));\n return {\n belief: boundedConfidence,\n disbelief: 1 - boundedConfidence,\n uncertainty: 0,\n baseRate: 0.5,\n };\n}\n\nfunction resolveExternalId(value: string | undefined, prefix?: string): string | undefined {\n if (!value) {\n return value;\n }\n try {\n const decoded = decodePrefixedId(value);\n if (prefix && decoded.prefix !== prefix) {\n return value;\n }\n return decoded.value;\n } catch {\n return value;\n }\n}\n\nexport type ListAllWorktreesQuery = {\n status?: string;\n track?: string;\n executionBand?: number;\n limit?: number;\n};\n\ntype WorktreeSummaryMap = Record<string, number>;\n\nfunction summarizeWorktreeCollection(rows: unknown[]) {\n const worktrees = Array.isArray(rows) ? rows : [];\n const tracks: WorktreeSummaryMap = {};\n const bands: WorktreeSummaryMap = {};\n\n for (const row of worktrees) {\n if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n continue;\n }\n const record = row as Record<string, unknown>;\n const track =\n typeof record.track === \"string\" && record.track.trim().length > 0\n ? record.track.trim()\n : \"untracked\";\n tracks[track] = (tracks[track] ?? 0) + 1;\n\n const bandValue =\n typeof record.executionBand === \"number\"\n ? String(record.executionBand)\n : \"unbanded\";\n bands[bandValue] = (bands[bandValue] ?? 0) + 1;\n }\n\n return {\n worktrees: worktrees as Array<Record<string, unknown>>,\n total: worktrees.length,\n tracks,\n bands,\n };\n}\n\nfunction buildCreateMutationArgs(\n input: CreateWorktreeInput,\n userId: string\n): Record<string, unknown> {\n const objective = input.objective?.trim();\n const hypothesis = input.hypothesis?.trim();\n const gate = input.gate?.trim();\n const lensId = input.lensId?.trim();\n\n return {\n name: input.title,\n topicId: input.topicId as any,\n createdBy: userId,\n ...(objective ? { objective } : {}),\n ...(hypothesis ? { hypothesis } : {}),\n ...(objective || hypothesis ? { beliefFocus: hypothesis ?? objective } : {}),\n ...(typeof input.executionOrder === \"number\"\n ? { executionOrder: input.executionOrder }\n : {}),\n ...(Array.isArray(input.dependsOn) && input.dependsOn.length > 0\n ? { dependsOn: input.dependsOn.map((id) => id as any) }\n : {}),\n ...(Array.isArray(input.blocks) && input.blocks.length > 0\n ? { blocks: input.blocks.map((id) => id as any) }\n : {}),\n ...(gate ? { gate } : {}),\n ...(lensId ? { lensId: lensId as any } : {}),\n ...(Array.isArray(input.beliefIds) && input.beliefIds.length > 0\n ? { targetBeliefIds: input.beliefIds.map((id) => id as any) }\n : {}),\n };\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction withRequestedWorktreeId<T>(\n payload: T,\n worktreeId: string\n): T extends Record<string, unknown> ? T & { worktreeId: string } : T {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return payload as T extends Record<string, unknown>\n ? T & { worktreeId: string }\n : T;\n }\n return {\n ...(payload as Record<string, unknown>),\n worktreeId,\n } as T extends Record<string, unknown> ? T & { worktreeId: string } : T;\n}\n\nasync function resolveWorktreeTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n worktreeId: string\n) {\n const worktree = (await authContext.convex.query(api.worktrees.get, {\n worktreeId: worktreeId as any,\n })) as Record<string, unknown> | null;\n return readString(worktree?.topicId);\n}\n\nasync function resolveWorktreeTopicIdWithMcpAuth(\n authContext: AuthContext,\n worktreeId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveWorktreeTopicIdWithMcpAuth\");\n const worktree = (await convex.query(api.worktrees.get, {\n worktreeId: worktreeId as any,\n })) as Record<string, unknown> | null;\n return readString(worktree?.topicId);\n}\n\nasync function emitWorktreeEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"worktree\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitWorktreeEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitWorktreeEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"worktree\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayWorktreesPort(\n authContext: GatewayAuthContext\n): WorktreesPort {\n return {\n fetchWorktree(rawId) {\n return authContext.convex.query(api.worktrees.get, {\n worktreeId: rawId as any,\n });\n },\n listWorktreesByTopic(args) {\n return authContext.convex.query(api.worktrees.list, {\n topicId: args.topicId as any,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n async createWorktree(input) {\n const shouldAutoShape =\n input.autoShape === true || Boolean(input.domainPackId?.trim());\n\n const created = shouldAutoShape\n ? await authContext.convex.mutation((internal.worktrees as any).createShaped, {\n ...buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ),\n ...(input.domainPackId?.trim()\n ? { domainPackId: input.domainPackId.trim() }\n : {}),\n ...(typeof input.autoShape === \"boolean\"\n ? { autoShape: input.autoShape }\n : {}),\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n })\n : await authContext.convex.mutation(api.worktrees.create, buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ) as any);\n\n if (\n !shouldAutoShape &&\n (Array.isArray(input.proofArtifacts) ||\n input.staffingHint ||\n typeof input.lastReconciledAt === \"number\" ||\n input.autoFixPolicy)\n ) {\n const createdRecord =\n created && typeof created === \"object\"\n ? (created as Record<string, unknown>)\n : {};\n const worktreeId =\n typeof created === \"string\"\n ? created\n : typeof createdRecord.worktreeId === \"string\"\n ? createdRecord.worktreeId\n : \"\";\n if (worktreeId) {\n await authContext.convex.mutation(api.worktrees.updateMetadata, {\n worktreeId: worktreeId as any,\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n });\n }\n }\n\n return created;\n },\n activateWorktree(args) {\n return authContext.convex.mutation(api.worktrees.activate, {\n worktreeId: args.worktreeRawId as any,\n userId: authContext.userId,\n });\n },\n completeWorktree(args) {\n return authContext.convex.mutation(api.worktrees.complete, {\n worktreeId: args.worktreeRawId as any,\n keyFindings: [args.summary],\n decisionsReached: [],\n nextSteps: [],\n userId: authContext.userId,\n });\n },\n scoreBeliefOutcome(args) {\n const opinion = toSubjectiveLogicOpinion(args.confidence);\n return authContext.convex.mutation(api.epistemicBeliefs.modulateConfidence, {\n nodeId: args.beliefRawId as any,\n trigger: \"worktree_outcome\",\n rationale: args.rationale,\n userId: authContext.userId,\n ...opinion,\n });\n },\n updateWorktreeMetadata(input) {\n return authContext.convex.mutation(api.worktrees.updateMetadata, {\n worktreeId: input.worktreeRawId as any,\n ...(input.objective ? { objective: input.objective } : {}),\n ...(input.hypothesis ? { hypothesis: input.hypothesis } : {}),\n ...(input.rationale ? { rationale: input.rationale } : {}),\n ...(input.track ? { track: input.track } : {}),\n ...(typeof input.trackPosition === \"number\"\n ? { trackPosition: input.trackPosition }\n : {}),\n ...(typeof input.executionBand === \"number\"\n ? { executionBand: input.executionBand }\n : {}),\n ...(typeof input.executionOrder === \"number\"\n ? { executionOrder: input.executionOrder }\n : {}),\n ...(input.dependsOn ? { dependsOn: input.dependsOn.map((id) => id as any) } : {}),\n ...(input.blocks ? { blocks: input.blocks.map((id) => id as any) } : {}),\n ...(input.gate ? { gate: input.gate } : {}),\n ...(input.status ? { status: input.status } : {}),\n ...(input.topicId ? { topicId: input.topicId } : {}),\n ...(input.additionalTopicIds ? { additionalTopicIds: input.additionalTopicIds } : {}),\n ...(input.proofArtifacts ? { proofArtifacts: input.proofArtifacts } : {}),\n ...(input.staffingHint ? { staffingHint: input.staffingHint } : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n ...(input.lensId ? { lensId: input.lensId } : {}),\n });\n },\n updateWorktreeTargets(input) {\n return authContext.convex.mutation(api.worktrees.updateTargets, {\n worktreeId: input.worktreeRawId as any,\n ...(input.addBeliefRawIds?.length\n ? { addBeliefIds: input.addBeliefRawIds.map((id) => id as any) }\n : {}),\n ...(input.addQuestionRawIds?.length\n ? { addQuestionIds: input.addQuestionRawIds.map((id) => id as any) }\n : {}),\n ...(input.removeBeliefRawIds?.length\n ? {\n removeBeliefIds: input.removeBeliefRawIds.map((id) => id as any),\n }\n : {}),\n ...(input.removeQuestionRawIds?.length\n ? {\n removeQuestionIds: input.removeQuestionRawIds.map((id) => id as any),\n }\n : {}),\n });\n },\n };\n}\n\nfunction createMcpWorktreesPort(authContext: AuthContext): WorktreesPort {\n const convex = requireMcpConvex(authContext, \"createMcpWorktreesPort\");\n return {\n fetchWorktree(rawId) {\n return convex.query(api.worktrees.get, {\n worktreeId: rawId as any,\n });\n },\n listWorktreesByTopic(args) {\n return convex.query(api.worktrees.list, {\n topicId: args.topicId as any,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n createWorktree(input) {\n const shouldAutoShape =\n input.autoShape === true || Boolean(input.domainPackId?.trim());\n\n if (shouldAutoShape) {\n return convex.mutation((internal.worktrees as any).createShaped, {\n ...buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ),\n ...(input.domainPackId?.trim()\n ? { domainPackId: input.domainPackId.trim() }\n : {}),\n ...(typeof input.autoShape === \"boolean\"\n ? { autoShape: input.autoShape }\n : {}),\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n });\n }\n\n return convex.mutation(api.worktrees.create, {\n ...buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ),\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n });\n },\n activateWorktree(args) {\n return convex.mutation(api.worktrees.activate, {\n worktreeId: args.worktreeRawId as any,\n userId: authContext.userId,\n });\n },\n completeWorktree(args) {\n return convex.mutation(api.worktrees.complete, {\n worktreeId: args.worktreeRawId as any,\n keyFindings: [args.summary],\n decisionsReached: [],\n nextSteps: [],\n userId: authContext.userId,\n });\n },\n scoreBeliefOutcome(args) {\n return convex.mutation((internal.lucernMcp as any).internalModulateConfidence, {\n nodeId: args.beliefRawId,\n confidence: args.confidence,\n trigger: \"worktree_outcome\",\n rationale: args.rationale,\n userId: authContext.userId,\n mcpSessionId: authContext.sessionId,\n mcpToolName: \"merge\",\n });\n },\n updateWorktreeMetadata(input) {\n return convex.mutation(api.worktrees.updateMetadata, {\n worktreeId: input.worktreeRawId as any,\n ...(input.objective ? { objective: input.objective } : {}),\n ...(input.hypothesis ? { hypothesis: input.hypothesis } : {}),\n ...(input.rationale ? { rationale: input.rationale } : {}),\n ...(input.track ? { track: input.track } : {}),\n ...(typeof input.trackPosition === \"number\"\n ? { trackPosition: input.trackPosition }\n : {}),\n ...(typeof input.executionBand === \"number\"\n ? { executionBand: input.executionBand }\n : {}),\n ...(typeof input.executionOrder === \"number\"\n ? { executionOrder: input.executionOrder }\n : {}),\n ...(input.dependsOn ? { dependsOn: input.dependsOn.map((id) => id as any) } : {}),\n ...(input.blocks ? { blocks: input.blocks.map((id) => id as any) } : {}),\n ...(input.gate ? { gate: input.gate } : {}),\n ...(input.status ? { status: input.status } : {}),\n ...(input.topicId ? { topicId: input.topicId } : {}),\n ...(input.additionalTopicIds ? { additionalTopicIds: input.additionalTopicIds } : {}),\n ...(input.proofArtifacts ? { proofArtifacts: input.proofArtifacts } : {}),\n ...(input.staffingHint ? { staffingHint: input.staffingHint } : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n ...(input.lensId ? { lensId: input.lensId } : {}),\n });\n },\n updateWorktreeTargets(input) {\n return convex.mutation(api.worktrees.updateTargets, {\n worktreeId: input.worktreeRawId as any,\n ...(input.addBeliefRawIds?.length\n ? { addBeliefIds: input.addBeliefRawIds.map((id) => id as any) }\n : {}),\n ...(input.addQuestionRawIds?.length\n ? { addQuestionIds: input.addQuestionRawIds.map((id) => id as any) }\n : {}),\n ...(input.removeBeliefRawIds?.length\n ? {\n removeBeliefIds: input.removeBeliefRawIds.map((id) => id as any),\n }\n : {}),\n ...(input.removeQuestionRawIds?.length\n ? {\n removeQuestionIds: input.removeQuestionRawIds.map((id) => id as any),\n }\n : {}),\n });\n },\n };\n}\n\nexport async function createWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateWorktreeInput\n) {\n const payload = await createWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"worktree.created\",\n resourceId: payload.worktreeId,\n data: {\n title: payload.title,\n status: payload.status,\n objective: payload.objective,\n hypothesis: payload.hypothesis,\n gate: payload.gate,\n executionOrder: payload.executionOrder,\n dependsOn: payload.dependsOn ?? [],\n blocks: payload.blocks ?? [],\n targetBeliefIds: payload.targetBeliefIds ?? [],\n proofArtifacts: payload.proofArtifacts,\n staffingHint: payload.staffingHint,\n lastReconciledAt: payload.lastReconciledAt,\n autoFixPolicy: payload.autoFixPolicy,\n },\n });\n return payload;\n}\n\nexport function listWorktreesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListWorktreesQuery\n) {\n return listWorktrees(createGatewayWorktreesPort(authContext), query);\n}\n\nexport async function listAllWorktreesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListAllWorktreesQuery = {}\n) {\n const rows = await authContext.convex.query(api.worktrees.listAll, {\n ...(query.status ? { status: query.status } : {}),\n ...(query.track ? { track: query.track } : {}),\n ...(typeof query.executionBand === \"number\"\n ? { executionBand: query.executionBand }\n : {}),\n ...(typeof query.limit === \"number\" ? { limit: query.limit } : {}),\n });\n\n return summarizeWorktreeCollection(rows as unknown[]);\n}\n\nexport async function activateWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: ActivateWorktreeInput\n) {\n const payload = await activateWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n payload.topicId ??\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.activated\",\n resourceId: payload.worktreeId,\n data: {\n status: payload.status,\n branchId: payload.branchId,\n updatedAt: payload.updatedAt,\n },\n });\n return payload;\n}\n\nexport async function updateWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateWorktreeInput\n) {\n const payload = await updateWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n payload.topicId ??\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.metadata_updated\",\n resourceId: payload.worktreeId,\n data: {\n hypothesis: payload.hypothesis,\n track: payload.track,\n trackPosition: payload.trackPosition,\n executionBand: payload.executionBand,\n executionOrder: payload.executionOrder,\n dependsOn: payload.dependsOn ?? [],\n blocks: payload.blocks ?? [],\n gate: payload.gate,\n },\n });\n return payload;\n}\n\nexport async function mergeWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: MergeWorktreeInput\n) {\n const payload = await mergeWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.merged\",\n resourceId: payload.worktreeId,\n data: {\n status: payload.status,\n beliefsScored: payload.beliefsScored,\n failedBeliefs: payload.failedBeliefs,\n summary: payload.summary,\n mergedAt: payload.mergedAt,\n outcomes: input.outcomes,\n },\n });\n return payload;\n}\n\nexport async function updateWorktreeTargetsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateWorktreeTargetsInput\n) {\n const payload = await updateWorktreeTargets(\n createGatewayWorktreesPort(authContext),\n input\n );\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n payload.topicId ??\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.targets_updated\",\n resourceId: payload.worktreeId,\n data: {\n targetBeliefIds: payload.targetBeliefIds ?? [],\n targetQuestionIds: payload.targetQuestionIds ?? [],\n addBeliefIds: input.addBeliefIds ?? [],\n addQuestionIds: input.addQuestionIds ?? [],\n removeBeliefIds: input.removeBeliefIds ?? [],\n removeQuestionIds: input.removeQuestionIds ?? [],\n },\n });\n return payload;\n}\n\nexport function completeWorktreeRecordFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n keyFindings?: string[];\n decisionsReached?: string[];\n nextSteps?: string[];\n }\n) {\n return authContext.convex\n .mutation(api.worktrees.complete, {\n worktreeId:\n (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n keyFindings: input.keyFindings ?? [],\n decisionsReached: input.decisionsReached ?? [],\n nextSteps: input.nextSteps ?? [],\n userId: authContext.userId,\n })\n .then((payload) => withRequestedWorktreeId(payload, input.worktreeId));\n}\n\nexport function advanceWorktreePhaseFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n }\n) {\n return authContext.convex.mutation(api.worktrees.advancePhase, {\n worktreeId: (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n userId: authContext.userId,\n });\n}\n\nexport function setWorktreePhaseFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n phase: string;\n }\n) {\n return authContext.convex.mutation(api.worktrees.setPhase, {\n worktreeId: (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n phase: input.phase,\n userId: authContext.userId,\n });\n}\n\nexport function patchWorktreeStateFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n patch: Record<string, unknown>;\n }\n) {\n return authContext.convex\n .mutation(components.lucern.worktrees.patchState, {\n worktreeId:\n (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n patch: input.patch,\n userId: authContext.userId,\n })\n .then((payload) => withRequestedWorktreeId(payload, input.worktreeId));\n}\n\nexport function bulkCreateWorktreesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktrees: unknown[];\n }\n) {\n void authContext;\n return authContext.convex.mutation(internal.worktrees.bulkCreate, {\n worktrees: input.worktrees,\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n advanceWorktreePhaseFromGatewayAuth,\n bulkCreateWorktreesFromGatewayAuth,\n activateWorktreeFromGatewayAuth,\n completeWorktreeRecordFromGatewayAuth,\n createWorktreeFromGatewayAuth,\n listAllWorktreesFromGatewayAuth,\n listWorktreesFromGatewayAuth,\n mergeWorktreeFromGatewayAuth,\n patchWorktreeStateFromGatewayAuth,\n setWorktreePhaseFromGatewayAuth,\n updateWorktreeFromGatewayAuth,\n updateWorktreeTargetsFromGatewayAuth,\n} from \"@lucern/server-core/worktrees\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction handleWorktreesError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleWorktreeCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createWorktreeFromGatewayAuth(args.authContext, {\n title: readString(body.title) ?? \"\",\n topicId: readString(body.topicId ?? body.projectId) ?? \"\",\n objective: readString(body.objective),\n hypothesis: readString(body.hypothesis),\n beliefIds:\n readStringArray(body.beliefIds) ?? readStringArray(body.beliefs),\n autoShape:\n typeof body.autoShape === \"boolean\" ? body.autoShape : undefined,\n domainPackId: readString(body.domainPackId),\n executionOrder: readNumber(body.executionOrder),\n dependsOn: readStringArray(body.dependsOn),\n blocks: readStringArray(body.blocks),\n gate: readString(body.gate),\n proofArtifacts: Array.isArray(body.proofArtifacts)\n ? body.proofArtifacts\n : undefined,\n staffingHint: readString(body.staffingHint),\n lastReconciledAt: readNumber(body.lastReconciledAt),\n autoFixPolicy:\n body.autoFixPolicy &&\n typeof body.autoFixPolicy === \"object\" &&\n !Array.isArray(body.autoFixPolicy)\n ? (body.autoFixPolicy as Record<string, unknown>)\n : undefined,\n lensId: readString(body.lensId),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to create worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n limit?: number;\n };\n}) {\n try {\n const payload = await listWorktreesFromGatewayAuth(args.authContext, {\n topicId: readString(args.query.topicId) ?? \"\",\n status: readString(args.query.status),\n limit: readNumber(args.query.limit),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to list worktrees.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeListAll(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n status?: string;\n track?: string;\n executionBand?: number;\n limit?: number;\n };\n}) {\n try {\n const payload = await listAllWorktreesFromGatewayAuth(args.authContext, {\n status: readString(args.query.status),\n track: readString(args.query.track),\n executionBand: readNumber(args.query.executionBand),\n limit: readNumber(args.query.limit),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to list worktrees.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeActivate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n}) {\n try {\n const payload = await activateWorktreeFromGatewayAuth(args.authContext, {\n id: args.worktreeId,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to activate worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateWorktreeFromGatewayAuth(args.authContext, {\n id: args.worktreeId,\n objective: readString(body.objective),\n hypothesis: readString(body.hypothesis),\n rationale: readString(body.rationale),\n track: readString(body.track),\n trackPosition: readNumber(body.trackPosition),\n executionBand: readNumber(body.executionBand),\n executionOrder: readNumber(body.executionOrder),\n dependsOn: readStringArray(body.dependsOn),\n blocks: readStringArray(body.blocks),\n gate: readString(body.gate),\n status: readString(body.status),\n topicId: readString(body.topicId),\n additionalTopicIds: readStringArray(body.additionalTopicIds),\n proofArtifacts: Array.isArray(body.proofArtifacts) ? (body.proofArtifacts as unknown[]) : undefined,\n staffingHint: readString(body.staffingHint),\n lastReconciledAt: readNumber(body.lastReconciledAt),\n autoFixPolicy: body.autoFixPolicy && typeof body.autoFixPolicy === \"object\" ? body.autoFixPolicy : undefined,\n lensId: readString(body.lensId),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to update worktree metadata.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeMerge(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const rawOutcomes = Array.isArray(body.outcomes) ? body.outcomes : [];\n const outcomes = rawOutcomes\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n beliefId: readString(entry.beliefId) ?? \"\",\n confidence: readNumber(entry.confidence) ?? Number.NaN,\n rationale: readString(entry.rationale) ?? \"\",\n }));\n\n const payload = await mergeWorktreeFromGatewayAuth(args.authContext, {\n id: args.worktreeId,\n summary: readString(body.summary),\n outcomes,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to merge worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeUpdateTargets(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateWorktreeTargetsFromGatewayAuth(\n args.authContext,\n {\n id: args.worktreeId,\n addBeliefIds: readStringArray(body.addBeliefIds),\n addQuestionIds: readStringArray(body.addQuestionIds),\n removeBeliefIds: readStringArray(body.removeBeliefIds),\n removeQuestionIds: readStringArray(body.removeQuestionIds),\n }\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to update worktree targets.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeComplete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await completeWorktreeRecordFromGatewayAuth(\n args.authContext,\n {\n worktreeId: readString(body.worktreeId) ?? \"\",\n keyFindings: readStringArray(body.keyFindings),\n decisionsReached: readStringArray(body.decisionsReached),\n nextSteps: readStringArray(body.nextSteps),\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to complete worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeAdvancePhase(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await advanceWorktreePhaseFromGatewayAuth(args.authContext, {\n worktreeId: readString(body.worktreeId) ?? \"\",\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to advance worktree phase.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeSetPhase(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await setWorktreePhaseFromGatewayAuth(args.authContext, {\n worktreeId: readString(body.worktreeId) ?? \"\",\n phase: readString(body.phase) ?? \"\",\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to set worktree phase.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreePatchState(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await patchWorktreeStateFromGatewayAuth(\n args.authContext,\n {\n worktreeId: readString(body.worktreeId) ?? \"\",\n patch: asRecord(body.patch),\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to patch worktree state.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeBulkCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await bulkCreateWorktreesFromGatewayAuth(args.authContext, {\n worktrees: Array.isArray(body.worktrees) ? body.worktrees : [],\n });\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to bulk create worktrees.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../contracts/src/gateway.contract.ts","../../contracts/src/events.contract.ts","../../contracts/src/ids.contract.ts","../../contracts/src/text-matching.contract.ts","../../contracts/src/v1/ontologies/v1.ts","../../../lucern/apps/gateway/src/gateway-helpers.ts","../../server-core/src/kernelApi.ts","../../server-core/src/domain/beliefs.ts","../../server-core/src/beliefs.ts","../../../lucern/apps/gateway/src/routes/beliefs.ts","../../server-core/src/domain/context/compile.ts","../../server-core/src/context.ts","../../../lucern/apps/gateway/src/routes/context.ts","../../server-core/src/domain/contradictions.ts","../../server-core/src/contradictions.ts","../../../lucern/apps/gateway/src/routes/contradictions.ts","../../server-core/src/domain/edges.ts","../../server-core/src/edges.ts","../../../lucern/apps/gateway/src/routes/edges.ts","../../../lucern/apps/gateway/src/routes/events.ts","../../server-core/src/domain/evidence.ts","../../server-core/src/evidence.ts","../../../lucern/apps/gateway/src/routes/evidence.ts","../../server-core/src/domain/graph.ts","../../server-core/src/domain/questions.ts","../../server-core/src/questions.ts","../../server-core/src/graph.ts","../../../lucern/apps/gateway/src/routes/graph.ts","../../server-core/src/auth/gateway-claims.ts","../../server-core/src/identity.ts","../../../lucern/apps/gateway/src/routes/identity.ts","../../server-core/src/domain/ontologies.ts","../../server-core/src/ontologies.ts","../../../lucern/apps/gateway/src/routes/ontologies.ts","../../../lucern/apps/gateway/src/routes/questions.ts","../../server-core/src/domain/search.ts","../../server-core/src/search.ts","../../../lucern/apps/gateway/src/routes/search.ts","../../server-core/src/domain/tasks.ts","../../server-core/src/tasks.ts","../../../lucern/apps/gateway/src/routes/tasks.ts","../../server-core/src/domain/topics.ts","../../server-core/src/topics.ts","../../../lucern/apps/gateway/src/routes/topics.ts","../../../lucern/apps/gateway/src/routes/webhooks.ts","../../server-core/src/domain/worktrees.ts","../../server-core/src/worktrees.ts","../../../lucern/apps/gateway/src/routes/worktrees.ts"],"names":["asRecord","readString","readNumber","readStringArray","message","normalizeRequiredString","decodeExternalId","encodeId","randomUUID","resolveExternalId","ensureTopicAccessWithQuery","clampNumber","extractCreatedRawId","normalizeWeight","normalizeDirection","normalizeAnswerConfidence","asRecordArray","effective","computeSearchScore","requireString","encodeTopicId","readBoolean","toSubjectiveLogicOpinion"],"mappings":"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","file":"gateway.js","sourcesContent":["/**\n * Gateway contract types — shared between Stack's gateway middleware and\n * Lucern's server-core / gateway route handlers.\n *\n * These types describe the authenticated request context that flows from\n * the gateway into Lucern route handlers. The gateway (Stack-side) creates\n * the context; Lucern consumes it read-only.\n *\n * @module @lucern/contracts/src/gateway\n */\n\nimport type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"./auth-session.contract\";\n\n// ---------------------------------------------------------------------------\n// Error codes\n// ---------------------------------------------------------------------------\n\nexport type PlatformApiErrorCode =\n | \"AUTH_REQUIRED\"\n | \"AUTHENTICATION_REQUIRED\"\n | \"AUTH_TOKEN_MISSING\"\n | \"INVALID_REQUEST\"\n | \"IDEMPOTENCY_KEY_REQUIRED\"\n | \"FORBIDDEN\"\n | \"SCOPE_INSUFFICIENT\"\n | \"ENVIRONMENT_MISMATCH\"\n | \"KEY_EXPIRED\"\n | \"KEY_REVOKED\"\n | \"RATE_LIMIT_EXCEEDED\"\n | \"NOT_FOUND\"\n | \"CONFLICT\"\n | \"UPSTREAM_ERROR\"\n | \"INTERNAL_ERROR\";\n\n// ---------------------------------------------------------------------------\n// Gateway scope and environment\n// ---------------------------------------------------------------------------\n\nexport type GatewayScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type GatewayEnvironment = \"sandbox\" | \"production\";\n\nexport type GatewayAuthMode =\n | \"interactive_user\"\n | \"service_principal\"\n | \"tenant_api_key\"\n | \"session_token\";\n\nexport type KeyLifecycleStatus =\n | \"active\"\n | \"rotating\"\n | \"rotated\"\n | \"expired\"\n | \"revoked\";\n\nexport type CutoverDomain =\n | \"graph\"\n | \"schema\"\n | \"identity\"\n | \"policy\"\n | \"audit\"\n | \"admin\"\n | \"agent\"\n | \"tool\"\n | \"prompt\"\n | \"intelligence\";\n\nexport type CutoverFlagState = \"legacy\" | \"cutover\" | \"disabled\";\n\n// ---------------------------------------------------------------------------\n// Gateway auth context — the canonical authenticated request shape\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticated request context created by the gateway middleware.\n * Lucern route handlers receive this as a read-only parameter.\n *\n * The `convex` field is typed as `unknown` in the contract because Lucern\n * consumers should not use the gateway's Convex client directly — they\n * have their own kernel client. The gateway (Stack-side) narrows this to\n * `ConvexHttpClient` at the construction site.\n */\nexport type GatewayAuthContext = {\n userId: string;\n convexToken?: string;\n /** Opaque in contract — narrowed to ConvexHttpClient at the gateway. */\n convex: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n authMode: GatewayAuthMode;\n principalId?: string;\n principalType?: SessionPrincipalType;\n tenantId?: string;\n workspaceId?: string;\n roles?: string[];\n sessionId?: string;\n sessionAuthMode?: SessionAuthMode;\n sessionExpiresAt?: number;\n delegationChain?: SessionDelegationHop[];\n servicePrincipalId?: string;\n servicePrincipalKeyId?: string;\n servicePrincipalTenantId?: string;\n servicePrincipalWorkspaceId?: string;\n requestEnvironment: GatewayEnvironment;\n keyEnvironment?: GatewayEnvironment;\n keyStatus: KeyLifecycleStatus | \"unknown\";\n grantedScopes: Set<string>;\n cutoverDomain: CutoverDomain;\n cutoverState: CutoverFlagState;\n};\n\n// ---------------------------------------------------------------------------\n// Gateway response helpers — portable (no Next.js dependency)\n// ---------------------------------------------------------------------------\n\nexport type GatewayErrorArgs = {\n code: PlatformApiErrorCode;\n message: string;\n status: number;\n correlationId: string;\n policyTraceId?: string;\n invariant?: string;\n suggestion?: string;\n details?: unknown;\n headers?: HeadersInit;\n};\n\nexport type GatewaySuccessArgs = {\n status?: number;\n correlationId: string;\n policyTraceId?: string;\n idempotentReplay?: boolean;\n};\n\nexport function requireActorPrincipalId(\n authContext: GatewayAuthContext\n): string {\n const principalId =\n typeof authContext.principalId === \"string\"\n ? authContext.principalId.trim()\n : \"\";\n if (principalId.length > 0) {\n return principalId;\n }\n throw new Error(\"Access denied: federated principal context required.\");\n}\n","/**\n * @lucern/contracts — events (canonical support contract)\n *\n * Consolidated flat support surface for Lucern's domain event stream:\n * - Event type definitions, constants, and shared enums\n * - Event construction + cursor helpers\n *\n * Consolidated from the former split type-definition module\n * and the prior src/events.contract.ts (helpers) in EK-16 T1 PR 3b.\n * Compat shim remains at the old events-types path until Lucern 1.0.0 (D12).\n */\n\n// =============================================================================\n// EVENT TYPE DEFINITIONS & CONSTANTS\n// (Formerly the split events type-definition module)\n// =============================================================================\n\nexport const DOMAIN_EVENT_VERSION = \"1.0\" as const;\nexport const EVENT_RETENTION_DEFAULT_DAYS = 30;\nexport const WEBHOOK_MAX_ATTEMPTS = 5;\nexport const WEBHOOK_RETRY_DELAYS_MS = [1_000, 5_000, 30_000, 300_000] as const;\n\nexport const DOMAIN_EVENT_TYPES = [\n \"belief.created\",\n \"belief.forked\",\n \"belief.confidence_updated\",\n \"belief.archived\",\n \"belief.refined\",\n \"belief.contract_created\",\n \"belief.contract_evaluated\",\n \"belief.lineage_queried\",\n \"evidence.created\",\n \"evidence.linked\",\n \"evidence.search_executed\",\n \"question.created\",\n \"question.answered\",\n \"question.refined\",\n \"question.status_updated\",\n \"question.archived\",\n \"edge.created\",\n \"contradiction.flagged\",\n \"worktree.created\",\n \"worktree.activated\",\n \"worktree.merged\",\n \"worktree.targets_updated\",\n \"worktree.metadata_updated\",\n \"topic.created\",\n \"topic.updated\",\n \"topic.archived\",\n \"task.created\",\n \"task.completed\",\n \"task.updated\",\n \"ontology.bound\",\n \"context.compiled\",\n \"identity.key_created\",\n \"identity.key_rotated\",\n \"identity.key_revoked\",\n \"webhook.test\",\n] as const;\n\nexport type DomainEventType = (typeof DOMAIN_EVENT_TYPES)[number];\n\nexport type DomainResourceType =\n | \"belief\"\n | \"evidence\"\n | \"question\"\n | \"edge\"\n | \"contradiction\"\n | \"worktree\"\n | \"topic\"\n | \"task\"\n | \"ontology\"\n | \"context\"\n | \"identity\"\n | \"webhook\";\n\nexport type DomainActorType = \"human\" | \"agent\" | \"service\";\n\nexport type DomainEventData = Record<string, unknown>;\n\nexport type DomainEvent = {\n eventId: string;\n type: DomainEventType | string;\n version: typeof DOMAIN_EVENT_VERSION;\n timestamp: number;\n tenantId?: string;\n workspaceId?: string;\n topicId: string;\n resourceId: string;\n resourceType: DomainResourceType | string;\n actorId: string;\n actorType: DomainActorType;\n data: DomainEventData;\n correlationId?: string;\n expiresAt: number;\n};\n\nexport type CreateDomainEventInput = {\n eventId?: string;\n timestamp?: number;\n tenantId?: string;\n workspaceId?: string;\n topicId: string;\n type: DomainEventType | string;\n resourceId: string;\n resourceType: DomainResourceType | string;\n actorId: string;\n actorType: DomainActorType;\n data?: DomainEventData;\n correlationId?: string;\n retentionDays?: number;\n};\n\nexport type EventCursor = {\n timestamp: number;\n eventId: string;\n};\n\nexport type EventListQuery = {\n topicId?: string;\n after?: string;\n types?: string[];\n startTime?: number;\n endTime?: number;\n limit?: number;\n};\n\nexport type EventListResult = {\n events: DomainEvent[];\n nextCursor: string | null;\n};\n\nexport type WebhookSecretMode = \"configured\";\n\nexport type WebhookRecord = {\n id: string;\n webhookId: string;\n tenantId?: string;\n workspaceId?: string;\n topicId?: string;\n url: string;\n events: string[];\n active: boolean;\n secretConfigured: boolean;\n createdAt: number;\n updatedAt: number;\n createdBy: string;\n updatedBy: string;\n lastDeliveryAt?: number;\n lastSuccessfulDeliveryAt?: number;\n};\n\nexport type WebhookCreateInput = {\n url: string;\n events: string[];\n secret: string;\n topicId?: string;\n active?: boolean;\n};\n\nexport type WebhookUpdateInput = {\n url?: string;\n events?: string[];\n secret?: string;\n topicId?: string | null;\n active?: boolean;\n};\n\nexport type WebhookDeliveryStatus =\n | \"pending\"\n | \"delivering\"\n | \"succeeded\"\n | \"failed\"\n | \"dead_letter\";\n\nexport type WebhookDeliveryRecord = {\n id: string;\n deliveryId: string;\n webhookId: string;\n eventId: string;\n eventType: string;\n topicId: string;\n status: WebhookDeliveryStatus;\n attemptCount: number;\n maxAttempts: number;\n nextAttemptAt?: number;\n lastAttemptAt?: number;\n lastStatusCode?: number;\n lastError?: string;\n deliveredAt?: number;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type WebhookDeliveryAttemptRecord = {\n id: string;\n attemptId: string;\n deliveryId: string;\n webhookId: string;\n eventId: string;\n eventType: string;\n attemptNumber: number;\n status: \"succeeded\" | \"failed\";\n statusCode?: number;\n error?: string;\n responseBody?: string;\n durationMs?: number;\n createdAt: number;\n};\n\nexport type WebhookDeliveriesResult = {\n deliveries: Array<\n WebhookDeliveryRecord & {\n attempts?: WebhookDeliveryAttemptRecord[];\n }\n >;\n};\n\nexport type WebhookHealthResult = {\n webhookId: string;\n totalAttempts: number;\n successfulAttempts: number;\n failedAttempts: number;\n successRate: number;\n pendingDeliveries: number;\n deadLetterDeliveries: number;\n lastDeliveryAt?: number;\n lastSuccessfulDeliveryAt?: number;\n};\n\nexport type WebhookTestResult = {\n webhookId: string;\n deliveryId: string;\n status: WebhookDeliveryStatus;\n attempts: number;\n};\n\nexport type ReplayEventsInput = EventListQuery & {\n webhookId?: string;\n};\n\nexport type ReplayEventsResult = EventListResult & {\n replayedDeliveries?: number;\n replayedWebhookId?: string;\n};\n\n// =============================================================================\n// EVENT HELPERS\n// (Formerly the body of src/events.contract.ts)\n// =============================================================================\n\nfunction toBase64(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"utf8\").toString(\"base64url\");\n }\n return btoa(unescape(encodeURIComponent(value)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/g, \"\");\n}\n\nfunction fromBase64(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"base64url\").toString(\"utf8\");\n }\n const normalized = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n return decodeURIComponent(escape(atob(normalized)));\n}\n\nexport function createEventId(): string {\n const random = crypto.randomUUID().replace(/-/g, \"\");\n return `evt_${random}`;\n}\n\nexport function normalizeRetentionDays(value: number | undefined): number {\n if (!Number.isFinite(value) || typeof value !== \"number\" || value <= 0) {\n return EVENT_RETENTION_DEFAULT_DAYS;\n }\n return Math.max(1, Math.trunc(value));\n}\n\nexport function buildDomainEvent(input: CreateDomainEventInput): DomainEvent {\n const timestamp = input.timestamp ?? Date.now();\n const retentionDays = normalizeRetentionDays(input.retentionDays);\n return {\n eventId: input.eventId?.trim() || createEventId(),\n type: input.type.trim(),\n version: DOMAIN_EVENT_VERSION,\n timestamp,\n tenantId: input.tenantId?.trim() || undefined,\n workspaceId: input.workspaceId?.trim() || undefined,\n topicId: input.topicId.trim(),\n resourceId: input.resourceId.trim(),\n resourceType: input.resourceType.trim(),\n actorId: input.actorId.trim(),\n actorType: input.actorType,\n data: input.data ?? {},\n correlationId: input.correlationId?.trim() || undefined,\n expiresAt: timestamp + retentionDays * 24 * 60 * 60 * 1000,\n };\n}\n\nexport function compareEventCursor(left: EventCursor, right: EventCursor): number {\n if (left.timestamp !== right.timestamp) {\n return left.timestamp - right.timestamp;\n }\n return left.eventId.localeCompare(right.eventId);\n}\n\nexport function encodeEventCursor(cursor: EventCursor): string {\n return toBase64(JSON.stringify(cursor));\n}\n\nexport function decodeEventCursor(cursor: string | undefined): EventCursor | null {\n if (!cursor || cursor.trim().length === 0) {\n return null;\n }\n try {\n const parsed = JSON.parse(fromBase64(cursor.trim())) as Partial<EventCursor>;\n if (\n typeof parsed.timestamp !== \"number\" ||\n !Number.isFinite(parsed.timestamp) ||\n typeof parsed.eventId !== \"string\" ||\n parsed.eventId.trim().length === 0\n ) {\n return null;\n }\n return {\n timestamp: parsed.timestamp,\n eventId: parsed.eventId.trim(),\n };\n } catch {\n return null;\n }\n}\n\nexport function isAfterCursor(\n event: Pick<DomainEvent, \"timestamp\" | \"eventId\">,\n cursor: EventCursor | null\n): boolean {\n if (!cursor) {\n return true;\n }\n return compareEventCursor(event, cursor) > 0;\n}\n\nexport function sortEventsByCursor<T extends Pick<DomainEvent, \"timestamp\" | \"eventId\">>(\n events: readonly T[]\n): T[] {\n return [...events].sort((left, right) => compareEventCursor(left, right));\n}\n\nexport function inferActorType(args: {\n sessionType?: \"agent\" | \"user\";\n authMode?: string;\n principalType?: string;\n}): DomainActorType {\n if (args.sessionType === \"agent\") {\n return \"agent\";\n }\n if (\n args.authMode === \"service_principal\" ||\n args.authMode === \"tenant_api_key\" ||\n args.principalType === \"service\"\n ) {\n return \"service\";\n }\n return \"human\";\n}\n\nexport async function emitDomainEvent(\n invokeMutation: (reference: any, args: CreateDomainEventInput) => Promise<unknown>,\n input: CreateDomainEventInput\n): Promise<unknown> {\n return await invokeMutation(\"events:recordEvent\" as any, input);\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 * Shared lexical matching primitives used across MCP handlers and graph utilities.\n *\n * The goal is not to replace downstream LLM scoring. It provides a fast,\n * deterministic substrate for candidate generation, reranking, and light\n * classification across belief/question/evidence/entity surfaces.\n */\n\nexport type LexicalStrategy = \"tokenOverlap\" | \"bigramJaccard\" | \"wordOverlap\";\n\nexport type PreparedLexicalQuery = {\n raw: string;\n tokens: string[];\n words: string[];\n bigrams: Set<string>;\n};\n\nexport type LexicalSignal = {\n strategy?: LexicalStrategy;\n text: string | null | undefined;\n weight: number;\n};\n\nexport type LexicalRerankOptions = {\n lexicalWeight?: number;\n rankWeight?: number;\n};\n\nconst TOKEN_SPLIT_REGEX = /[^a-z0-9]+/;\nconst NON_ALPHANUMERIC_REGEX = /[^a-z0-9]/g;\n\n/** Stop words that add noise to scoring. */\nconst STOP_WORDS = new Set([\n \"the\",\n \"a\",\n \"an\",\n \"and\",\n \"or\",\n \"but\",\n \"in\",\n \"on\",\n \"at\",\n \"to\",\n \"for\",\n \"of\",\n \"with\",\n \"by\",\n \"from\",\n \"is\",\n \"it\",\n \"as\",\n \"be\",\n \"was\",\n \"are\",\n \"this\",\n \"that\",\n \"has\",\n \"had\",\n \"have\",\n \"not\",\n \"all\",\n \"can\",\n \"do\",\n \"its\",\n \"may\",\n \"will\",\n \"how\",\n \"what\",\n \"which\",\n \"who\",\n \"when\",\n \"where\",\n \"than\",\n \"then\",\n \"each\",\n \"into\",\n \"such\",\n \"any\",\n \"been\",\n \"if\",\n \"would\",\n \"about\",\n \"should\",\n \"these\",\n \"those\",\n \"their\",\n \"we\",\n \"our\",\n \"so\",\n]);\n\n/** Tokenize a string into lowercase words, removing stop words. */\nexport function tokenizeSearchText(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n}\n\n/** Simple stemmer: strip common English suffixes for fuzzy matching. */\nexport function stemToken(word: string): string {\n if (word.length <= 4) {\n return word;\n }\n if (word.endsWith(\"ation\")) {\n return word.slice(0, -5);\n }\n if (word.endsWith(\"ment\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ness\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ical\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"tion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"sion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ing\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ous\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ive\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ity\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ics\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ly\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ed\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"er\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"es\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"al\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ic\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"s\") && !word.endsWith(\"ss\")) {\n return word.slice(0, -1);\n }\n return word;\n}\n\n/** Compute token overlap score between query tokens and text tokens. */\nexport function tokenOverlapScore(\n queryTokens: string[],\n textTokens: string[]\n): number {\n if (queryTokens.length === 0 || textTokens.length === 0) {\n return 0;\n }\n\n const stemmedText = new Set(textTokens.map(stemToken));\n let matchCount = 0;\n\n for (const queryToken of queryTokens) {\n const stemmedQuery = stemToken(queryToken);\n\n if (stemmedText.has(stemmedQuery)) {\n matchCount += 1;\n continue;\n }\n\n for (const textToken of stemmedText) {\n if (\n textToken.startsWith(stemmedQuery) ||\n stemmedQuery.startsWith(textToken)\n ) {\n matchCount += 0.5;\n break;\n }\n }\n }\n\n return matchCount / queryTokens.length;\n}\n\n/**\n * Extract character bigrams from text. Normalizes to lowercase, removes\n * non-alphanumeric characters, and generates overlapping pairs.\n */\nexport function bigramTokenize(text: string): Set<string> {\n const normalized = text.toLowerCase().replace(NON_ALPHANUMERIC_REGEX, \"\");\n const bigrams = new Set<string>();\n for (let i = 0; i < normalized.length - 1; i++) {\n bigrams.add(normalized.slice(i, i + 2));\n }\n return bigrams;\n}\n\n/**\n * Extract word-level tokens from text (for coarser matching).\n * Normalizes to lowercase, splits on non-alphanumeric.\n */\nexport function wordTokenize(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length > 1);\n}\n\n/** Jaccard similarity between two sets: |A ∩ B| / |A ∪ B|. */\nexport function jaccardSimilarity(\n setA: Set<string>,\n setB: Set<string>\n): number {\n if (setA.size === 0 && setB.size === 0) {\n return 0;\n }\n\n let intersectionSize = 0;\n const smaller = setA.size <= setB.size ? setA : setB;\n const larger = setA.size <= setB.size ? setB : setA;\n\n for (const item of smaller) {\n if (larger.has(item)) {\n intersectionSize++;\n }\n }\n\n const unionSize = setA.size + setB.size - intersectionSize;\n return unionSize === 0 ? 0 : intersectionSize / unionSize;\n}\n\n/** Exact word overlap score: fraction of type words found in input text. */\nexport function wordOverlapScore(\n inputWords: string[],\n typeWords: string[]\n): number {\n if (typeWords.length === 0) {\n return 0;\n }\n let matches = 0;\n for (const word of typeWords) {\n if (inputWords.includes(word)) {\n matches++;\n }\n }\n return matches / typeWords.length;\n}\n\n/** Pre-compute reusable lexical structures for a query. */\nexport function prepareLexicalQuery(query: string): PreparedLexicalQuery {\n return {\n raw: query,\n tokens: tokenizeSearchText(query),\n words: wordTokenize(query),\n bigrams: bigramTokenize(query),\n };\n}\n\n/** Score a single lexical signal against a prepared query. */\nexport function scoreLexicalSignal(\n query: PreparedLexicalQuery,\n signal: LexicalSignal\n): number {\n const text = signal.text?.trim();\n if (!text) {\n return 0;\n }\n\n switch (signal.strategy ?? \"tokenOverlap\") {\n case \"bigramJaccard\":\n return jaccardSimilarity(query.bigrams, bigramTokenize(text));\n case \"wordOverlap\":\n return wordOverlapScore(query.words, wordTokenize(text));\n default:\n return tokenOverlapScore(query.tokens, tokenizeSearchText(text));\n }\n}\n\n/** Weighted lexical score across multiple textual signals. */\nexport function scoreLexicalSignals(\n query: PreparedLexicalQuery,\n signals: LexicalSignal[]\n): number {\n let weightedScore = 0;\n let totalWeight = 0;\n\n for (const signal of signals) {\n if (!signal.text?.trim() || signal.weight <= 0) {\n continue;\n }\n weightedScore += scoreLexicalSignal(query, signal) * signal.weight;\n totalWeight += signal.weight;\n }\n\n return totalWeight === 0 ? 0 : weightedScore / totalWeight;\n}\n\n/** Map a candidate's original rank position into a 0..1 prior. */\nexport function rankWindowScore(index: number, total: number): number {\n if (total <= 1) {\n return 1;\n }\n const clampedIndex = Math.max(0, Math.min(index, total - 1));\n return 1 - clampedIndex / (total - 1);\n}\n\n/** Rerank a candidate window by lexical overlap while preserving original-rank prior. */\nexport function rerankLexicalWindow<T>(\n query: string,\n items: T[],\n getText: (item: T) => string | null | undefined,\n options?: LexicalRerankOptions\n): T[] {\n const preparedQuery = prepareLexicalQuery(query);\n if (preparedQuery.tokens.length === 0 || items.length <= 1) {\n return items;\n }\n\n const lexicalWeight = options?.lexicalWeight ?? 0.65;\n const rankWeight = options?.rankWeight ?? 0.35;\n\n return items\n .map((item, index) => {\n const lexicalScore = scoreLexicalSignals(preparedQuery, [\n { text: getText(item) ?? \"\", weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const rankScore = rankWindowScore(index, items.length);\n\n return {\n item,\n combinedScore: lexicalScore * lexicalWeight + rankScore * rankWeight,\n };\n })\n .sort((left, right) => right.combinedScore - left.combinedScore)\n .map(({ item }) => item);\n}\n","/**\n * @lucern/contracts — OntologiesV1 namespace (resource contracts)\n *\n * Ontology Matching Engine — L0 entity type classification and similarity scoring.\n * Provides bigram-based text similarity for matching free text against\n * ontology entity types. Domain-agnostic: works identically for companies,\n * molecules, code modules, or any tenant-defined entity vocabulary.\n *\n * Moved from src/ontology-matching.contract.ts in EK-16 T1 PR 2.\n * Compat shim remains at the old path until the Lucern 1.0.0 cut.\n */\n\nimport {\n bigramTokenize,\n jaccardSimilarity,\n prepareLexicalQuery,\n scoreLexicalSignals,\n wordOverlapScore,\n wordTokenize,\n} from \"../../text-matching.contract\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/** An entity type definition from a resolved ontology version. */\nexport type OntologyEntityType = {\n value: string;\n label: string;\n description?: string;\n subtypes?: Array<{ value: string; label: string; description?: string }>;\n};\n\n/** A scored match between input text and an entity type. */\nexport type EntityTypeMatch = {\n entityType: string;\n label: string;\n score: number;\n reason: string;\n};\n\n/** A candidate entity node that can be matched against a target node. */\nexport type EntityMatchCandidate = {\n nodeId: string;\n entityType: string;\n title: string;\n canonicalText: string;\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n};\n\n/** A scored entity match with suggested bridge edge type. */\nexport type EntityConnectionMatch = {\n entityNodeId: string;\n entityType: string;\n title: string;\n score: number;\n suggestedEdgeType: string;\n reason: string;\n};\n\n// =============================================================================\n// ENTITY TYPE SCORING\n// =============================================================================\n\n/** Weights for combining scoring signals. */\nconst MATCH_WEIGHTS = {\n tokenOverlap: 0.35,\n bigramSimilarity: 0.25,\n wordOverlap: 0.2,\n descriptionBonus: 0.2,\n} as const;\n\n/**\n * Score how well input text matches a single entity type definition.\n * Combines bigram Jaccard similarity, word overlap, and description matching.\n */\nexport function scoreEntityTypeMatch(\n inputText: string,\n entityType: OntologyEntityType\n): EntityTypeMatch {\n const preparedQuery = prepareLexicalQuery(inputText);\n const labelText = `${entityType.label} ${entityType.value}`;\n\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: labelText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n\n // Score against the type label (primary signal)\n const labelBigrams = bigramTokenize(entityType.label);\n const bigramScore = jaccardSimilarity(preparedQuery.bigrams, labelBigrams);\n\n // Word overlap with label + value\n const labelWords = wordTokenize(labelText);\n const wordScore = wordOverlapScore(preparedQuery.words, labelWords);\n\n // Description matching bonus (if description exists)\n let descScore = 0;\n if (entityType.description) {\n descScore = scoreLexicalSignals(preparedQuery, [\n { text: entityType.description, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n }\n\n // Check subtypes for additional matches\n let subtypeBonus = 0;\n if (entityType.subtypes && entityType.subtypes.length > 0) {\n for (const subtype of entityType.subtypes) {\n const subtypeScore = scoreLexicalSignals(preparedQuery, [\n {\n text: `${subtype.label} ${subtype.value} ${subtype.description || \"\"}`,\n weight: 1,\n strategy: \"tokenOverlap\",\n },\n ]);\n subtypeBonus = Math.max(subtypeBonus, subtypeScore * 0.3); // up to 30% subtype bonus\n }\n }\n\n const score = Math.min(\n 1.0,\n tokenScore * MATCH_WEIGHTS.tokenOverlap +\n bigramScore * MATCH_WEIGHTS.bigramSimilarity +\n wordScore * MATCH_WEIGHTS.wordOverlap +\n descScore * MATCH_WEIGHTS.descriptionBonus +\n subtypeBonus\n );\n\n // Generate human-readable reason\n const reasons: string[] = [];\n if (tokenScore > 0.3) {\n reasons.push(`stem match: ${(tokenScore * 100).toFixed(0)}%`);\n }\n if (bigramScore > 0.3) {\n reasons.push(`text similarity: ${(bigramScore * 100).toFixed(0)}%`);\n }\n if (wordScore > 0.3) {\n reasons.push(`word match: ${(wordScore * 100).toFixed(0)}%`);\n }\n if (descScore > 0.2) {\n reasons.push(\"description match\");\n }\n if (subtypeBonus > 0.05) {\n reasons.push(\"subtype match\");\n }\n const reason = reasons.length > 0 ? reasons.join(\", \") : \"low similarity\";\n\n return {\n entityType: entityType.value,\n label: entityType.label,\n score,\n reason,\n };\n}\n\n/**\n * Rank all entity types in an ontology against input text.\n * Returns matches sorted by score (descending), filtered to score > minScore.\n */\nexport function rankEntityTypeMatches(\n inputText: string,\n entityTypes: OntologyEntityType[],\n options?: { minScore?: number; limit?: number }\n): EntityTypeMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n const matches = entityTypes\n .map((et) => scoreEntityTypeMatch(inputText, et))\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n\n return matches;\n}\n\n// =============================================================================\n// ENTITY DISCOVERY SCORING\n// =============================================================================\n\n/**\n * Score how well a node's text matches an entity candidate.\n * Used by discover_entity_connections to suggest missing bridge edges.\n */\nexport function scoreEntityConnection(\n nodeText: string,\n candidate: EntityMatchCandidate,\n options?: { connectivityWeight?: number }\n): EntityConnectionMatch {\n const preparedQuery = prepareLexicalQuery(nodeText);\n const connectivityWeight = options?.connectivityWeight ?? 0.3;\n const textWeight = 1.0 - connectivityWeight;\n const candidateText = `${candidate.title} ${candidate.canonicalText}`;\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const textScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"bigramJaccard\" },\n ]);\n const wordScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"wordOverlap\" },\n ]);\n\n // Connectivity signal (normalized externally by caller)\n const maxConnections = Math.max(\n 1,\n candidate.connectedBeliefCount + candidate.connectedEvidenceCount\n );\n const connectivityScore = Math.min(1.0, maxConnections / 10); // soft-cap at 10\n\n const combinedTextScore =\n tokenScore * 0.45 + textScore * 0.35 + wordScore * 0.2;\n const score =\n combinedTextScore * textWeight + connectivityScore * connectivityWeight;\n\n // Suggest edge type based on entity type\n const suggestedEdgeType = suggestEdgeType(candidate.entityType);\n\n const reason =\n tokenScore > 0.3\n ? `stem match: ${(tokenScore * 100).toFixed(0)}%`\n : textScore > 0.2\n ? `name similarity: ${(textScore * 100).toFixed(0)}%`\n : wordScore > 0.2\n ? `keyword match: ${(wordScore * 100).toFixed(0)}%`\n : `connectivity: ${candidate.connectedBeliefCount} beliefs`;\n\n return {\n entityNodeId: candidate.nodeId,\n entityType: candidate.entityType,\n title: candidate.title,\n score,\n suggestedEdgeType,\n reason,\n };\n}\n\n/**\n * Suggest the most appropriate bridge edge type for an entity type.\n */\nfunction suggestEdgeType(entityType: string): string {\n switch (entityType) {\n case \"company\":\n case \"person\":\n case \"investor\":\n return \"contains\";\n case \"function\":\n case \"value_chain\":\n return \"impacts\";\n default:\n return \"contains\";\n }\n}\n\n/**\n * Rank entity candidates against a node's text.\n * Returns sorted matches above the minimum score threshold.\n */\nexport function rankEntityConnections(\n nodeText: string,\n candidates: EntityMatchCandidate[],\n options?: { minScore?: number; limit?: number; connectivityWeight?: number }\n): EntityConnectionMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n return candidates\n .map((c) =>\n scoreEntityConnection(nodeText, c, {\n connectivityWeight: options?.connectivityWeight,\n })\n )\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n}\n","/**\n * Gateway response helpers — Lucern-owned versions of the functions\n * previously imported from Stack's gateway.ts.\n *\n * These provide the standard JSON envelope for success/error responses\n * across all Lucern gateway route handlers.\n */\n\nimport { NextResponse } from \"next/server\";\nimport type {\n GatewayErrorArgs,\n GatewaySuccessArgs,\n PlatformApiErrorCode,\n} from \"@lucern/contracts\";\n\nexport { requireActorPrincipalId } from \"@lucern/contracts\";\n\n// ---------------------------------------------------------------------------\n// Header builder\n// ---------------------------------------------------------------------------\n\nfunction buildHeaders(args: {\n correlationId: string;\n policyTraceId?: string;\n}): HeadersInit {\n const headers = new Headers();\n headers.set(\"x-lucern-correlation-id\", args.correlationId);\n if (args.policyTraceId) {\n headers.set(\"x-lucern-policy-trace-id\", args.policyTraceId);\n }\n return headers;\n}\n\n// ---------------------------------------------------------------------------\n// Error message sanitization\n// ---------------------------------------------------------------------------\n\nconst SENSITIVE_PATTERNS = [\n /convex/i,\n /internal.*error/i,\n /stack.*trace/i,\n /at\\s+\\w+\\s+\\(/,\n];\n\nfunction sanitizeErrorMessage(args: {\n message: string;\n status: number;\n code: PlatformApiErrorCode;\n}): string {\n if (args.status < 500) return args.message;\n for (const pattern of SENSITIVE_PATTERNS) {\n if (pattern.test(args.message)) {\n return `Request failed with ${args.code}`;\n }\n }\n return args.message;\n}\n\n// ---------------------------------------------------------------------------\n// Error code mapping\n// ---------------------------------------------------------------------------\n\nfunction isPlatformApiErrorCode(code: string): code is PlatformApiErrorCode {\n const VALID_CODES: ReadonlySet<string> = new Set([\n \"AUTH_REQUIRED\",\n \"AUTHENTICATION_REQUIRED\",\n \"AUTH_TOKEN_MISSING\",\n \"INVALID_REQUEST\",\n \"IDEMPOTENCY_KEY_REQUIRED\",\n \"FORBIDDEN\",\n \"SCOPE_INSUFFICIENT\",\n \"ENVIRONMENT_MISMATCH\",\n \"KEY_EXPIRED\",\n \"KEY_REVOKED\",\n \"RATE_LIMIT_EXCEEDED\",\n \"NOT_FOUND\",\n \"CONFLICT\",\n \"UPSTREAM_ERROR\",\n \"INTERNAL_ERROR\",\n ]);\n return VALID_CODES.has(code);\n}\n\nfunction statusToErrorCode(status: number): PlatformApiErrorCode {\n if (status === 400) return \"INVALID_REQUEST\";\n if (status === 401) return \"AUTH_REQUIRED\";\n if (status === 403) return \"FORBIDDEN\";\n if (status === 404) return \"NOT_FOUND\";\n if (status === 409) return \"CONFLICT\";\n if (status === 429) return \"RATE_LIMIT_EXCEEDED\";\n return \"INTERNAL_ERROR\";\n}\n\nfunction normalizeErrorStatus(error: unknown): number {\n if (\n error &&\n typeof error === \"object\" &&\n \"status\" in error &&\n typeof (error as { status: unknown }).status === \"number\"\n ) {\n return (error as { status: number }).status;\n }\n return 500;\n}\n\nfunction defaultInvariantForCode(\n code: PlatformApiErrorCode\n): string | undefined {\n switch (code) {\n case \"AUTH_REQUIRED\":\n case \"AUTHENTICATION_REQUIRED\":\n case \"AUTH_TOKEN_MISSING\":\n return \"auth.required\";\n case \"IDEMPOTENCY_KEY_REQUIRED\":\n return \"mutation.idempotent_required\";\n case \"SCOPE_INSUFFICIENT\":\n return \"policy.scope_required\";\n case \"ENVIRONMENT_MISMATCH\":\n return \"auth.environment_match_required\";\n case \"KEY_EXPIRED\":\n return \"auth.key_not_expired\";\n case \"KEY_REVOKED\":\n return \"auth.key_not_revoked\";\n case \"RATE_LIMIT_EXCEEDED\":\n return \"traffic.rate_limit\";\n case \"INVALID_REQUEST\":\n return \"request.valid_shape\";\n case \"FORBIDDEN\":\n return \"policy.access_denied\";\n default:\n return undefined;\n }\n}\n\nfunction defaultSuggestionForCode(\n code: PlatformApiErrorCode\n): string | undefined {\n switch (code) {\n case \"AUTH_REQUIRED\":\n case \"AUTHENTICATION_REQUIRED\":\n case \"AUTH_TOKEN_MISSING\":\n return \"Include a valid Authorization header.\";\n case \"SCOPE_INSUFFICIENT\":\n return \"Request additional scopes for this operation.\";\n case \"KEY_EXPIRED\":\n return \"Rotate or renew your API key.\";\n case \"KEY_REVOKED\":\n return \"Contact your tenant admin for a new key.\";\n case \"RATE_LIMIT_EXCEEDED\":\n return \"Retry after the Retry-After period.\";\n default:\n return undefined;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public response helpers\n// ---------------------------------------------------------------------------\n\ntype GatewayStructuredError = {\n message?: string;\n status?: number;\n code?: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nfunction isGatewayStructuredError(\n error: unknown\n): error is GatewayStructuredError {\n return (\n typeof error === \"object\" &&\n error !== null &&\n (\"message\" in error || \"status\" in error || \"code\" in error)\n );\n}\n\nexport function resolveGatewayError(\n error: unknown,\n fallbackMessage: string\n): {\n status: number;\n code: PlatformApiErrorCode;\n message: string;\n invariant?: string;\n suggestion?: string;\n details?: unknown;\n} {\n const structured = isGatewayStructuredError(error) ? error : null;\n const structuredStatus =\n typeof structured?.status === \"number\" && Number.isFinite(structured.status)\n ? Math.trunc(structured.status)\n : undefined;\n const status = structuredStatus ?? normalizeErrorStatus(error);\n const structuredCode =\n typeof structured?.code === \"string\" ? structured.code : undefined;\n const code =\n structuredCode && isPlatformApiErrorCode(structuredCode)\n ? structuredCode\n : statusToErrorCode(status);\n\n const structuredMessage =\n typeof structured?.message === \"string\" &&\n structured.message.trim().length > 0\n ? structured.message.trim()\n : undefined;\n const message =\n structuredMessage ??\n (error instanceof Error && error.message ? error.message : fallbackMessage);\n\n return {\n status,\n code,\n message,\n invariant:\n typeof structured?.invariantCode === \"string\"\n ? structured.invariantCode\n : undefined,\n suggestion:\n typeof structured?.suggestion === \"string\"\n ? structured.suggestion\n : undefined,\n details: structured?.details,\n };\n}\n\nexport function successResponse<T>(\n payload: T,\n args: GatewaySuccessArgs\n): NextResponse {\n return NextResponse.json(\n {\n success: true,\n data: payload,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId ?? null,\n idempotentReplay: args.idempotentReplay ?? false,\n },\n {\n status: args.status ?? 200,\n headers: buildHeaders({\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n }),\n }\n );\n}\n\nexport function errorResponse(args: GatewayErrorArgs): NextResponse {\n const headers = new Headers(\n buildHeaders({\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n })\n );\n if (args.headers) {\n for (const [key, value] of Object.entries(args.headers)) {\n if (value === undefined || value === null) {\n continue;\n }\n headers.set(key, String(value));\n }\n }\n\n const safeMessage = sanitizeErrorMessage({\n message: args.message,\n status: args.status,\n code: args.code,\n });\n\n return NextResponse.json(\n {\n success: false,\n error: safeMessage,\n code: args.code,\n invariant: args.invariant ?? defaultInvariantForCode(args.code) ?? null,\n suggestion:\n args.suggestion ?? defaultSuggestionForCode(args.code) ?? null,\n details: args.details,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId ?? null,\n },\n {\n status: args.status,\n headers,\n }\n );\n}\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 decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype BeliefRecordStatus = \"active\" | \"superseded\" | \"archived\";\ntype BeliefScoringState = \"unscored\" | \"scored\";\ntype BeliefForkReason =\n | \"refinement\"\n | \"contradiction_response\"\n | \"scope_change\"\n | \"confidence_collapse\"\n | \"manual\";\ntype BeliefConfidenceTrigger =\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"manual\"\n | \"decay\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\";\ntype ContractConditionType =\n | \"assertion\"\n | \"temporal\"\n | \"evidential\"\n | \"threshold\"\n | \"composite\";\ntype ContractDirection = \"confirms\" | \"falsifies\";\ntype ContractCompositeOperator = \"all\" | \"any\" | \"majority\";\ntype ContractEvaluationSchedule =\n | \"on_demand\"\n | \"on_evidence\"\n | \"periodic\"\n | \"event_driven\";\ntype BisectExpectedDirection = \"overconfident\" | \"underconfident\";\n\ntype StructuredBeliefsError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type BeliefRecord = {\n id: string;\n nodeId: string;\n beliefId: string;\n globalId?: string;\n topicId?: string;\n text: string;\n canonicalText: string;\n formulation: string;\n status: BeliefRecordStatus;\n scoringState: BeliefScoringState;\n confidence?: number;\n beliefStatus?: string;\n title?: string;\n sourceType?: string;\n beliefType?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type BeliefListResult = {\n beliefs: BeliefRecord[];\n nextCursor: null;\n};\n\nexport type BeliefLineageEntry = {\n beliefId: string;\n nodeId: string;\n formulation: string;\n forkReason?: string;\n createdAt?: number;\n};\n\nexport type BeliefLineageResult = {\n beliefId: string;\n lineage: BeliefLineageEntry[];\n};\n\nexport type BeliefConfidenceHistoryEntry = {\n id?: string;\n confidence: number;\n trigger: BeliefConfidenceTrigger | string;\n rationale?: string;\n timestamp?: number;\n userId?: string;\n opinion?: {\n b?: number;\n d?: number;\n u?: number;\n a?: number;\n };\n};\n\nexport type BeliefConfidenceHistoryResult = {\n beliefId: string;\n entries: BeliefConfidenceHistoryEntry[];\n nextCursor: null;\n};\n\nexport type BeliefPropagationTarget = {\n beliefId: string;\n edgeType: \"supports\" | \"depends_on\";\n direction: \"incoming\" | \"outgoing\";\n confidence?: number;\n formulation?: string;\n};\n\nexport type BeliefConfidenceUpdateResult = {\n beliefId: string;\n nodeId: string;\n previousConfidence: number;\n newConfidence: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n requestId: string;\n propagationSummary: {\n mode: \"scheduled\";\n bounded: true;\n totalCandidateTargets: number;\n inlineTargets: BeliefPropagationTarget[];\n remainingTargetCount: number;\n };\n opinion?: {\n b?: number;\n d?: number;\n u?: number;\n a?: number;\n };\n historyEntry?: BeliefConfidenceHistoryEntry;\n};\n\nexport type BeliefArchiveResult = BeliefRecord & {\n previousStatus?: string;\n newStatus: \"archived\";\n};\n\nexport type BeliefRefineInput = {\n id: string;\n text: string;\n rationale?: string;\n};\n\nexport type BeliefContractCreateInput = {\n title: string;\n description?: string;\n conditionType: ContractConditionType;\n direction: ContractDirection;\n condition: {\n expression: string;\n evaluator: string;\n evaluatorConfig?: Record<string, unknown>;\n };\n deadline?: number;\n compositeOf?: string[];\n compositeOperator?: ContractCompositeOperator;\n modulation: {\n onConfirmed: {\n delta: number;\n ceiling?: number;\n };\n onDisconfirmed: {\n delta: number;\n floor?: number;\n };\n onExpired?: {\n delta: number;\n };\n onPartial?: {\n threshold: number;\n delta: number;\n };\n };\n evaluationSchedule: ContractEvaluationSchedule;\n periodicIntervalMs?: number;\n};\n\nexport type BeliefContractCreateResult = {\n id: string;\n contractId: string;\n beliefId: string;\n status: string;\n title: string;\n storageId?: string;\n};\n\nexport type BeliefBisectResult = {\n beliefId: string;\n expectedDirection: BisectExpectedDirection;\n inflectionEntry: BeliefConfidenceHistoryEntry | null;\n triggerEvent: string | null;\n confidenceBefore: number | null;\n confidenceAfter: number | null;\n totalEntries: number;\n inflectionIndex: number | null;\n};\n\nexport type CreateBeliefInput = {\n topicId: string;\n text: string;\n rationale?: string;\n worktreeId?: string;\n pillar?: string;\n sourceBeliefIds?: string[];\n sourceType?: string;\n beliefType?: string;\n reversibility?: string;\n predictionMeta?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\nexport type ListBeliefsQuery = {\n topicId?: string;\n status?: string;\n worktreeId?: string;\n minConfidence?: number;\n limit?: number;\n cursor?: string;\n includeEdgeAssociated?: boolean;\n};\n\nexport type ForkBeliefInput = {\n id: string;\n text: string;\n forkReason?: BeliefForkReason | string;\n rationale?: string;\n};\n\nexport type UpdateBeliefConfidenceInput = {\n id: string;\n confidence: number;\n trigger?: string;\n rationale: string;\n certainty?: number;\n maxInlinePropagationTargets?: number;\n};\n\nexport type ArchiveBeliefInput = {\n id: string;\n reason?: string;\n};\n\nexport type CreateBeliefContractRequest = {\n id: string;\n input: BeliefContractCreateInput;\n};\n\nexport type BisectBeliefConfidenceInput = {\n id: string;\n expectedDirection: BisectExpectedDirection;\n timeRange?: {\n start: number;\n end: number;\n };\n};\n\ntype BeliefCreatePortInput = {\n topicId: string;\n text: string;\n rationale?: string;\n worktreeId?: string;\n pillar?: string;\n sourceBeliefRawIds?: string[];\n sourceType?: string;\n beliefType?: string;\n reversibility?: string;\n predictionMeta?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\ntype BeliefForkPortInput = {\n beliefRawId: string;\n text: string;\n forkReason: BeliefForkReason;\n rationale?: string;\n};\n\ntype BeliefRefinePortInput = {\n beliefRawId: string;\n text: string;\n rationale?: string;\n};\n\ntype BeliefConfidencePortInput = {\n beliefRawId: string;\n confidence: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n certainty?: number;\n};\n\ntype BeliefArchivePortInput = {\n beliefRawId: string;\n reason?: string;\n};\n\ntype BeliefContractPortInput = {\n beliefRawId: string;\n input: BeliefContractCreateInput;\n};\n\nexport type BeliefPort = {\n fetchBelief: (rawId: string) => Promise<unknown | null>;\n listBeliefsByTopic: (args: {\n topicId: string;\n status?: BeliefRecordStatus;\n limit?: number;\n includeEdgeAssociated?: boolean;\n }) => Promise<unknown[]>;\n createBelief: (input: BeliefCreatePortInput) => Promise<unknown>;\n refineBelief: (input: BeliefRefinePortInput) => Promise<unknown>;\n forkBelief: (input: BeliefForkPortInput) => Promise<unknown>;\n modulateConfidence: (input: BeliefConfidencePortInput) => Promise<unknown>;\n archiveBelief: (input: BeliefArchivePortInput) => Promise<unknown>;\n getLineage: (rawId: string) => Promise<unknown[]>;\n getConfidenceHistory: (rawId: string) => Promise<unknown[]>;\n createContract: (input: BeliefContractPortInput) => Promise<unknown>;\n getRelationships: (rawId: string) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asOptionalRecord(\n value: unknown\n): Record<string, unknown> | undefined {\n const record = asRecord(value);\n return Object.keys(record).length > 0 ? record : undefined;\n}\n\nfunction 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throwBeliefsError({\n message: `[beliefs] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction throwBeliefsError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredBeliefsError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throwBeliefsError({\n message: `[beliefs] Expected ${expectedPrefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${expectedPrefix}_ identifier for this operation.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"[beliefs]\")) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeBeliefRecordStatus(value: unknown): BeliefRecordStatus {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"active\" ||\n normalized === \"superseded\" ||\n normalized === \"archived\"\n ) {\n return normalized;\n }\n return \"active\";\n}\n\nfunction normalizeListStatus(\n value: unknown\n): BeliefRecordStatus | \"scored\" | \"unscored\" | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"active\" ||\n normalized === \"superseded\" ||\n normalized === \"archived\" ||\n normalized === \"scored\" ||\n normalized === \"unscored\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeForkReason(value: unknown): BeliefForkReason {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"refinement\" ||\n normalized === \"contradiction_response\" ||\n normalized === \"scope_change\" ||\n normalized === \"confidence_collapse\" ||\n normalized === \"manual\"\n ) {\n return normalized;\n }\n return \"manual\";\n}\n\nfunction normalizeConfidenceTrigger(value: unknown): BeliefConfidenceTrigger {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"merge_outcome\":\n case \"sprint_outcome\":\n return \"worktree_outcome\";\n case \"sprint_completed\":\n return \"worktree_completed\";\n case \"evidence_added\":\n case \"evidence_removed\":\n case \"contradiction_detected\":\n case \"contradiction_resolved\":\n case \"manual\":\n case \"decay\":\n case \"agent_assessment\":\n case \"worktree_outcome\":\n case \"worktree_completed\":\n return normalized;\n default:\n return \"manual\";\n }\n}\n\nfunction normalizeConditionType(value: unknown): ContractConditionType {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"assertion\":\n case \"temporal\":\n case \"evidential\":\n case \"threshold\":\n case \"composite\":\n return normalized;\n default:\n throwBeliefsError({\n message: \"[beliefs] conditionType is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion:\n \"Use one of assertion, temporal, evidential, threshold, or composite.\",\n });\n }\n}\n\nfunction normalizeContractDirection(value: unknown): ContractDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"confirms\" || normalized === \"falsifies\") {\n return normalized;\n }\n throwBeliefsError({\n message: \"[beliefs] direction is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Use confirms or falsifies for contract direction.\",\n });\n}\n\nfunction normalizeCompositeOperator(\n value: unknown\n): ContractCompositeOperator | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"all\" ||\n normalized === \"any\" ||\n normalized === \"majority\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeEvaluationSchedule(\n value: unknown\n): ContractEvaluationSchedule {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"on_demand\":\n case \"on_evidence\":\n case \"periodic\":\n case \"event_driven\":\n return normalized;\n default:\n throwBeliefsError({\n message: \"[beliefs] evaluationSchedule is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion:\n \"Use on_demand, on_evidence, periodic, or event_driven.\",\n });\n }\n}\n\nfunction normalizeExpectedDirection(value: unknown): BisectExpectedDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"overconfident\" || normalized === \"underconfident\") {\n return normalized;\n }\n throwBeliefsError({\n message: \"[beliefs] expectedDirection is invalid.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Use overconfident or underconfident for bisect queries.\",\n });\n}\n\nfunction normalizeTimeRange(\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 if (start === undefined || end === undefined || start > end) {\n throwBeliefsError({\n message: \"[beliefs] timeRange must include finite start/end values.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion:\n \"Provide timeRange as { start: <epochMs>, end: <epochMs> } with start <= end.\",\n });\n }\n\n return { start, end };\n}\n\nfunction createRequestId(): string {\n return globalThis.crypto?.randomUUID?.()\n ? globalThis.crypto.randomUUID()\n : `req_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction normalizeBeliefRecord(value: unknown): BeliefRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const rawId = decodeExternalId(\n normalizeRequiredString(\n record._id ?? record.nodeId ?? record.beliefId,\n \"beliefId\"\n ),\n \"bel\"\n );\n const canonicalId = encodeId(\"bel\", rawId);\n const confidence = readNumber(record.confidence);\n const text =\n readString(record.canonicalText) ??\n readString(record.formulation) ??\n readString(record.text) ??\n \"\";\n\n return {\n id: canonicalId,\n nodeId: canonicalId,\n beliefId: canonicalId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n text,\n canonicalText: text,\n formulation: text,\n status: normalizeBeliefRecordStatus(record.status ?? metadata.status),\n scoringState: confidence === undefined ? \"unscored\" : \"scored\",\n ...(confidence !== undefined ? { confidence } : {}),\n ...(readString(record.beliefStatus) ?? readString(metadata.beliefStatus)\n ? {\n beliefStatus:\n readString(record.beliefStatus) ??\n readString(metadata.beliefStatus)!,\n }\n : {}),\n ...(readString(record.title) ? { title: readString(record.title)! } : {}),\n ...(readString(record.sourceType)\n ? { sourceType: readString(record.sourceType)! }\n : {}),\n ...(readString(record.beliefType) ?? readString(metadata.beliefType)\n ? {\n beliefType:\n readString(record.beliefType) ??\n readString(metadata.beliefType)!,\n }\n : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction normalizeLineageEntry(value: unknown): BeliefLineageEntry {\n const record = asRecord(value);\n const rawId = decodeExternalId(\n normalizeRequiredString(record.nodeId ?? record.beliefId, \"nodeId\"),\n \"bel\"\n );\n const canonicalId = encodeId(\"bel\", rawId);\n\n return {\n beliefId: canonicalId,\n nodeId: canonicalId,\n formulation:\n readString(record.formulation) ??\n readString(record.canonicalText) ??\n readString(record.text) ??\n \"\",\n ...(readString(record.forkReason)\n ? { forkReason: readString(record.forkReason)! }\n : {}),\n ...(readNumber(record.createdAt)\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n };\n}\n\nfunction normalizeHistoryEntry(value: unknown): BeliefConfidenceHistoryEntry {\n const record = asRecord(value);\n const opinion: Record<string, number> = {};\n\n const belief = readNumber(record.belief);\n const disbelief = readNumber(record.disbelief);\n const uncertainty = readNumber(record.uncertainty);\n const baseRate = readNumber(record.baseRate);\n\n if (belief !== undefined) {\n opinion.b = belief;\n }\n if (disbelief !== undefined) {\n opinion.d = disbelief;\n }\n if (uncertainty !== undefined) {\n opinion.u = uncertainty;\n }\n if (baseRate !== undefined) {\n opinion.a = baseRate;\n }\n\n return {\n ...(readString(record._id) ? { id: readString(record._id)! } : {}),\n confidence: clampNumber(readNumber(record.confidence) ?? 0, 0, 1),\n trigger: readString(record.trigger) ?? \"manual\",\n ...(readString(record.rationale)\n ? { rationale: readString(record.rationale)! }\n : {}),\n ...(readNumber(record.assessedAt) ?? readNumber(record.timestamp)\n ? {\n timestamp:\n readNumber(record.assessedAt) ?? readNumber(record.timestamp)!,\n }\n : {}),\n ...(readString(record.assessedBy) ?? readString(record.userId)\n ? {\n userId: readString(record.assessedBy) ?? readString(record.userId)!,\n }\n : {}),\n ...(Object.keys(opinion).length > 0 ? { opinion } : {}),\n };\n}\n\nfunction normalizeContractInput(\n input: BeliefContractCreateInput\n): BeliefContractCreateInput {\n return {\n title: normalizeRequiredString(input.title, \"title\"),\n ...(readString(input.description) ? { description: readString(input.description)! } : {}),\n conditionType: normalizeConditionType(input.conditionType),\n direction: normalizeContractDirection(input.direction),\n condition: {\n expression: normalizeRequiredString(input.condition?.expression, \"condition.expression\"),\n evaluator: normalizeRequiredString(input.condition?.evaluator, \"condition.evaluator\"),\n ...(input.condition?.evaluatorConfig\n ? { evaluatorConfig: asRecord(input.condition.evaluatorConfig) }\n : {}),\n },\n ...(readNumber(input.deadline) ? { deadline: readNumber(input.deadline)! } : {}),\n ...(readStringArray(input.compositeOf)\n ? { compositeOf: readStringArray(input.compositeOf)! }\n : {}),\n ...(normalizeCompositeOperator(input.compositeOperator)\n ? { compositeOperator: normalizeCompositeOperator(input.compositeOperator)! }\n : {}),\n modulation: {\n onConfirmed: {\n delta: readNumber(input.modulation?.onConfirmed?.delta) ?? 0,\n ...(readNumber(input.modulation?.onConfirmed?.ceiling) !== undefined\n ? {\n ceiling: readNumber(input.modulation?.onConfirmed?.ceiling)!,\n }\n : {}),\n },\n onDisconfirmed: {\n delta: readNumber(input.modulation?.onDisconfirmed?.delta) ?? 0,\n ...(readNumber(input.modulation?.onDisconfirmed?.floor) !== undefined\n ? {\n floor: readNumber(input.modulation?.onDisconfirmed?.floor)!,\n }\n : {}),\n },\n ...(input.modulation?.onExpired\n ? {\n onExpired: {\n delta: readNumber(input.modulation.onExpired.delta) ?? 0,\n },\n }\n : {}),\n ...(input.modulation?.onPartial\n ? {\n onPartial: {\n threshold: readNumber(input.modulation.onPartial.threshold) ?? 0,\n delta: readNumber(input.modulation.onPartial.delta) ?? 0,\n },\n }\n : {}),\n },\n evaluationSchedule: normalizeEvaluationSchedule(input.evaluationSchedule),\n ...(readNumber(input.periodicIntervalMs) !== undefined\n ? { periodicIntervalMs: readNumber(input.periodicIntervalMs)! }\n : {}),\n };\n}\n\nfunction normalizeContractCreateResult(\n beliefId: string,\n input: BeliefContractCreateInput,\n created: unknown\n): BeliefContractCreateResult {\n const record = asRecord(created);\n const contractId =\n readString(record.contractId) ??\n readString(record.id) ??\n readString(record._id) ??\n createRequestId();\n\n return {\n id: contractId,\n contractId,\n beliefId,\n status: readString(record.status) ?? \"active\",\n title: input.title,\n ...(readString(record.id) && readString(record.id) !== contractId\n ? { storageId: readString(record.id)! }\n : {}),\n };\n}\n\nfunction filterBeliefs(\n beliefs: BeliefRecord[],\n query: ListBeliefsQuery\n): BeliefRecord[] {\n const status = normalizeListStatus(query.status);\n\n return beliefs.filter((belief) => {\n if (status === \"active\" || status === \"superseded\" || status === \"archived\") {\n if (belief.status !== status) {\n return false;\n }\n }\n\n if (status === \"scored\" || status === \"unscored\") {\n if (belief.scoringState !== status) {\n return false;\n }\n }\n\n if (\n typeof query.minConfidence === \"number\" &&\n (belief.confidence === undefined || belief.confidence < query.minConfidence)\n ) {\n return false;\n }\n\n if (query.worktreeId) {\n const linkedWorktreeId =\n readString(belief.metadata?.worktreeId) ??\n readString(belief.metadata?.sprintId);\n if (linkedWorktreeId !== query.worktreeId) {\n return false;\n }\n }\n\n return true;\n });\n}\n\nfunction normalizePortListStatus(\n status: string | undefined\n): BeliefRecordStatus | undefined {\n const normalized = normalizeListStatus(status);\n if (\n normalized === \"active\" ||\n normalized === \"superseded\" ||\n normalized === \"archived\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction extractCreatedRawId(created: unknown): string {\n const record = asRecord(created);\n return decodeExternalId(\n normalizeRequiredString(\n record.nodeId ?? record.newNodeId ?? record.beliefId ?? record._id,\n \"beliefId\"\n ),\n \"bel\"\n );\n}\n\nfunction normalizeRelationships(\n relationships: unknown\n): BeliefPropagationTarget[] {\n const root = asRecord(relationships);\n const candidates: BeliefPropagationTarget[] = [];\n\n const pushCandidate = (\n container: unknown,\n direction: \"incoming\" | \"outgoing\",\n allowedEdgeType: \"supports\" | \"depends_on\"\n ) => {\n if (!Array.isArray(container)) {\n return;\n }\n\n for (const entry of container) {\n const record = asRecord(entry);\n const edge = asRecord(record.edge);\n const node = asRecord(record.node);\n const edgeType = readString(edge.edgeType);\n if (edgeType !== allowedEdgeType) {\n continue;\n }\n if (readString(node.nodeType) !== \"belief\") {\n continue;\n }\n\n const rawId = decodeExternalId(\n normalizeRequiredString(node._id ?? node.nodeId, \"beliefId\"),\n \"bel\"\n );\n candidates.push({\n beliefId: encodeId(\"bel\", rawId),\n edgeType: allowedEdgeType,\n direction,\n ...(readNumber(node.confidence) !== undefined\n ? { confidence: readNumber(node.confidence)! }\n : {}),\n ...(readString(node.canonicalText)\n ? { formulation: readString(node.canonicalText)! }\n : readString(node.text)\n ? { formulation: readString(node.text)! }\n : {}),\n });\n }\n };\n\n pushCandidate(root.outgoing, \"outgoing\", \"supports\");\n pushCandidate(root.incoming, \"incoming\", \"depends_on\");\n\n const deduped = new Map<string, BeliefPropagationTarget>();\n for (const candidate of candidates) {\n deduped.set(\n `${candidate.beliefId}:${candidate.edgeType}:${candidate.direction}`,\n candidate\n );\n }\n\n return [...deduped.values()];\n}\n\nfunction toOpinion(confidence: number, certainty?: number) {\n const boundedConfidence = clampNumber(confidence, 0, 1);\n const boundedCertainty =\n certainty === undefined\n ? boundedConfidence === 0.5\n ? 0.75\n : 1\n : clampNumber(certainty, 0, 1);\n\n const belief = boundedConfidence * boundedCertainty;\n const disbelief = (1 - boundedConfidence) * boundedCertainty;\n const uncertainty = clampNumber(1 - boundedCertainty, 0, 1);\n\n return {\n b: belief,\n d: disbelief,\n u: uncertainty,\n a: 0.5,\n };\n}\n\nexport async function createBelief(\n port: BeliefPort,\n input: CreateBeliefInput\n): Promise<BeliefRecord> {\n const created = await port.createBelief({\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n text: normalizeRequiredString(input.text, \"text\"),\n rationale: readString(input.rationale),\n worktreeId: readString(input.worktreeId),\n pillar: readString(input.pillar),\n sourceBeliefRawIds: readStringArray(input.sourceBeliefIds)?.map((id) =>\n decodeExternalId(id, \"bel\")\n ),\n sourceType: readString(input.sourceType),\n beliefType: readString(input.beliefType),\n reversibility: readString(input.reversibility),\n predictionMeta: asOptionalRecord(input.predictionMeta),\n metadata: asRecord(input.metadata),\n });\n\n const rawId = extractCreatedRawId(created);\n const record = await port.fetchBelief(rawId);\n return normalizeBeliefRecord(record ?? { ...(asRecord(created)), nodeId: rawId });\n}\n\nexport async function getBelief(\n port: BeliefPort,\n args: { id: string }\n): Promise<BeliefRecord> {\n const rawId = decodeExternalId(\n normalizeRequiredString(args.id, \"beliefId\"),\n \"bel\"\n );\n const record = await port.fetchBelief(rawId);\n if (!record) {\n throwBeliefsError({\n message: `Belief not found: ${args.id}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify the belief ID and topic scope, then retry.\",\n details: { beliefId: args.id },\n });\n }\n return normalizeBeliefRecord(record);\n}\n\nexport async function listBeliefs(\n port: BeliefPort,\n query: ListBeliefsQuery\n): Promise<BeliefListResult> {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n const beliefs = await port.listBeliefsByTopic({\n topicId,\n status: normalizePortListStatus(query.status),\n limit: query.limit,\n includeEdgeAssociated: query.includeEdgeAssociated,\n });\n\n const normalized = beliefs.map(normalizeBeliefRecord);\n return {\n beliefs: filterBeliefs(normalized, query),\n nextCursor: null,\n };\n}\n\nexport async function refineBelief(\n port: BeliefPort,\n input: BeliefRefineInput\n): Promise<BeliefRecord> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const existing = await port.fetchBelief(rawId);\n if (!existing) {\n throwBeliefsError({\n message: `Belief not found: ${input.id}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify the belief ID and topic scope, then retry.\",\n details: { beliefId: input.id },\n });\n }\n\n const record = normalizeBeliefRecord(existing);\n if (record.scoringState === \"scored\") {\n throwBeliefsError({\n message: \"[beliefs] Scored beliefs are immutable. Use fork instead.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Create a new version with beliefs.fork() when refining a scored belief.\",\n details: { beliefId: record.id, scoringState: record.scoringState },\n });\n }\n\n await port.refineBelief({\n beliefRawId: rawId,\n text: normalizeRequiredString(input.text, \"text\"),\n rationale: readString(input.rationale),\n });\n\n const refined = await port.fetchBelief(rawId);\n return normalizeBeliefRecord(refined ?? existing);\n}\n\nexport async function forkBelief(\n port: BeliefPort,\n input: ForkBeliefInput\n): Promise<BeliefRecord & { parentBeliefId: string; forkReason: BeliefForkReason }> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const forkReason = normalizeForkReason(input.forkReason);\n const result = await port.forkBelief({\n beliefRawId: rawId,\n text: normalizeRequiredString(input.text, \"text\"),\n forkReason,\n rationale: readString(input.rationale),\n });\n\n const nextRawId = extractCreatedRawId(result);\n const record = await port.fetchBelief(nextRawId);\n return {\n ...normalizeBeliefRecord(record ?? { ...(asRecord(result)), nodeId: nextRawId }),\n parentBeliefId: encodeId(\"bel\", rawId),\n forkReason,\n };\n}\n\nexport async function updateBeliefConfidence(\n port: BeliefPort,\n input: UpdateBeliefConfidenceInput\n): Promise<BeliefConfidenceUpdateResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const confidence = readNumber(input.confidence);\n if (confidence === undefined) {\n throwBeliefsError({\n message: \"[beliefs] confidence is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion: \"Provide a confidence value in [0, 1].\",\n });\n }\n if (confidence < 0 || confidence > 1) {\n throwBeliefsError({\n message: \"[beliefs] confidence must be within [0, 1].\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion: \"Clamp confidence into the inclusive [0, 1] interval.\",\n });\n }\n\n const trigger = normalizeConfidenceTrigger(input.trigger);\n const rationale = normalizeRequiredString(input.rationale, \"rationale\");\n const result = await port.modulateConfidence({\n beliefRawId: rawId,\n confidence,\n trigger,\n rationale,\n certainty: readNumber(input.certainty),\n });\n\n const requestId = createRequestId();\n const relationships = normalizeRelationships(await port.getRelationships(rawId));\n const maxInlineTargets = Math.max(\n 1,\n Math.min(\n Math.floor(readNumber(input.maxInlinePropagationTargets) ?? 10),\n 25\n )\n );\n const inlineTargets = relationships.slice(0, maxInlineTargets);\n const historyEntries = normalizeConfidenceHistory(\n encodeId(\"bel\", rawId),\n await port.getConfidenceHistory(rawId)\n ).entries;\n const latestEntry = historyEntries[0];\n const opinion = toOpinion(confidence, readNumber(input.certainty));\n\n return {\n beliefId: encodeId(\"bel\", rawId),\n nodeId: encodeId(\"bel\", rawId),\n previousConfidence:\n readNumber(asRecord(result).previousConfidence) ??\n latestEntry?.confidence ??\n 0.5,\n newConfidence:\n readNumber(asRecord(result).newConfidence) ??\n readNumber(asRecord(result).confidence) ??\n confidence,\n trigger,\n rationale,\n requestId,\n propagationSummary: {\n mode: \"scheduled\",\n bounded: true,\n totalCandidateTargets: relationships.length,\n inlineTargets,\n remainingTargetCount: Math.max(0, relationships.length - inlineTargets.length),\n },\n ...(asRecord(result).opinion && typeof asRecord(result).opinion === \"object\"\n ? { opinion: asRecord(asRecord(result).opinion) as any }\n : { opinion }),\n ...(latestEntry ? { historyEntry: latestEntry } : {}),\n };\n}\n\nexport async function archiveBelief(\n port: BeliefPort,\n input: ArchiveBeliefInput\n): Promise<BeliefArchiveResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const archived = await port.archiveBelief({\n beliefRawId: rawId,\n reason: readString(input.reason),\n });\n const archivedRecord = await port.fetchBelief(rawId);\n const normalized = normalizeBeliefRecord(\n archivedRecord ?? {\n ...(asRecord(archived)),\n nodeId: rawId,\n status: \"archived\",\n }\n );\n\n return {\n ...normalized,\n previousStatus: readString(asRecord(archived).previousStatus),\n newStatus: \"archived\",\n };\n}\n\nfunction normalizeConfidenceHistory(\n beliefId: string,\n entries: unknown[]\n): BeliefConfidenceHistoryResult {\n return {\n beliefId,\n entries: entries.map(normalizeHistoryEntry),\n nextCursor: null,\n };\n}\n\nexport async function getBeliefLineage(\n port: BeliefPort,\n args: { id: string }\n): Promise<BeliefLineageResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(args.id, \"beliefId\"),\n \"bel\"\n );\n const lineage = await port.getLineage(rawId);\n return {\n beliefId: encodeId(\"bel\", rawId),\n lineage: lineage.map(normalizeLineageEntry),\n };\n}\n\nexport async function getBeliefConfidenceHistory(\n port: BeliefPort,\n args: { id: string }\n): Promise<BeliefConfidenceHistoryResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(args.id, \"beliefId\"),\n \"bel\"\n );\n const history = await port.getConfidenceHistory(rawId);\n return normalizeConfidenceHistory(encodeId(\"bel\", rawId), history);\n}\n\nexport async function createBeliefContract(\n port: BeliefPort,\n request: CreateBeliefContractRequest\n): Promise<BeliefContractCreateResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(request.id, \"beliefId\"),\n \"bel\"\n );\n const input = normalizeContractInput(request.input);\n const created = await port.createContract({\n beliefRawId: rawId,\n input,\n });\n\n return normalizeContractCreateResult(encodeId(\"bel\", rawId), input, created);\n}\n\nexport async function bisectBeliefConfidence(\n port: BeliefPort,\n input: BisectBeliefConfidenceInput\n): Promise<BeliefBisectResult> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"beliefId\"),\n \"bel\"\n );\n const expectedDirection = normalizeExpectedDirection(input.expectedDirection);\n const timeRange = normalizeTimeRange(input.timeRange);\n const history = normalizeConfidenceHistory(\n encodeId(\"bel\", rawId),\n await port.getConfidenceHistory(rawId)\n ).entries;\n\n const scoped = [...history]\n .filter((entry) => {\n if (!timeRange || entry.timestamp === undefined) {\n return true;\n }\n return entry.timestamp >= timeRange.start && entry.timestamp <= timeRange.end;\n })\n .sort((left, right) => (left.timestamp ?? 0) - (right.timestamp ?? 0));\n\n if (scoped.length === 0) {\n return {\n beliefId: encodeId(\"bel\", rawId),\n expectedDirection,\n inflectionEntry: null,\n triggerEvent: null,\n confidenceBefore: null,\n confidenceAfter: null,\n totalEntries: 0,\n inflectionIndex: null,\n };\n }\n\n let inflectionIndex = 0;\n let maxDelta = 0;\n\n for (let index = 1; index < scoped.length; index += 1) {\n const current = scoped[index];\n const previous = scoped[index - 1];\n const currentConfidence = current.confidence;\n const previousConfidence = previous.confidence;\n const delta = Math.abs(currentConfidence - previousConfidence);\n if (delta > maxDelta) {\n maxDelta = delta;\n inflectionIndex = index;\n }\n }\n\n const inflectionEntry = scoped[inflectionIndex] ?? null;\n const previousEntry = inflectionIndex > 0 ? scoped[inflectionIndex - 1] : null;\n\n return {\n beliefId: encodeId(\"bel\", rawId),\n expectedDirection,\n inflectionEntry,\n triggerEvent: inflectionEntry?.trigger ?? null,\n confidenceBefore: previousEntry?.confidence ?? null,\n confidenceAfter: inflectionEntry?.confidence ?? null,\n totalEntries: scoped.length,\n inflectionIndex,\n };\n}\n","import { api, components, internal } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n archiveBelief,\n bisectBeliefConfidence,\n createBelief,\n createBeliefContract,\n getBelief,\n getBeliefConfidenceHistory,\n getBeliefLineage,\n listBeliefs,\n refineBelief,\n forkBelief,\n updateBeliefConfidence,\n type BeliefPort,\n type BeliefContractCreateInput,\n type BeliefRefineInput,\n type BisectBeliefConfidenceInput,\n type CreateBeliefInput,\n type ListBeliefsQuery,\n type UpdateBeliefConfidenceInput,\n} from \"./domain/beliefs\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction toSubjectiveLogicOpinion(\n confidence: number,\n certainty?: number\n): {\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n} {\n const boundedConfidence = Math.max(0, Math.min(confidence, 1));\n const boundedCertainty =\n typeof certainty === \"number\" && Number.isFinite(certainty)\n ? Math.max(0, Math.min(certainty, 1))\n : boundedConfidence === 0.5\n ? 0.75\n : 1;\n\n return {\n belief: boundedConfidence * boundedCertainty,\n disbelief: (1 - boundedConfidence) * boundedCertainty,\n uncertainty: Math.max(0, 1 - boundedCertainty),\n baseRate: 0.5,\n };\n}\n\nfunction resolveBeliefNodeId(value: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n}): string {\n const normalized = value.id ?? value.nodeId ?? value.beliefId ?? \"\";\n try {\n const decoded = decodePrefixedId(normalized);\n return decoded.prefix === \"bel\" ? decoded.value : normalized;\n } catch {\n return normalized;\n }\n}\n\nfunction resolveExternalId(value: string | undefined): string | undefined {\n if (!value) {\n return value;\n }\n try {\n return decodePrefixedId(value).value;\n } catch {\n return value;\n }\n}\n\nasync function resolveBeliefTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n beliefId: string\n) {\n const normalizedBeliefId = resolveExternalId(beliefId) ?? beliefId;\n const belief = (await authContext.convex.query(\n api.epistemicBeliefs.getById,\n {\n beliefId: normalizedBeliefId as any,\n nodeId: normalizedBeliefId as any,\n }\n )) as Record<string, unknown> | null;\n return typeof belief?.topicId === \"string\" ? belief.topicId : undefined;\n}\n\nasync function resolveBeliefTopicIdWithMcpAuth(\n authContext: AuthContext,\n beliefId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveBeliefTopicIdWithMcpAuth\");\n const normalizedBeliefId = resolveExternalId(beliefId) ?? beliefId;\n const belief = (await convex.query(api.epistemicBeliefs.getById, {\n beliefId: normalizedBeliefId as any,\n nodeId: normalizedBeliefId as any,\n })) as Record<string, unknown> | null;\n return typeof belief?.topicId === \"string\" ? belief.topicId : undefined;\n}\n\nasync function emitBeliefEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"belief\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitBeliefEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitBeliefEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"belief\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayBeliefPort(authContext: GatewayAuthContext): BeliefPort {\n return {\n fetchBelief(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listBeliefsByTopic(args) {\n return authContext.convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n status: args.status,\n limit: args.limit,\n // includeEdgeAssociated is defined in the kernel query but generated\n // types lag until next `npx convex codegen`. Cast to satisfy TS.\n ...(args.includeEdgeAssociated\n ? { includeEdgeAssociated: true }\n : {}),\n } as any) as Promise<unknown[]>;\n },\n createBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.create, {\n topicId: input.topicId,\n formulation: input.text,\n rationale: input.rationale,\n worktreeId: input.worktreeId,\n pillar: input.pillar,\n sourceBeliefIds: input.sourceBeliefRawIds as any,\n sourceType: input.sourceType as any,\n beliefType: input.beliefType,\n reversibility: input.reversibility as any,\n metadata: input.metadata,\n userId: authContext.userId,\n ...(input.predictionMeta\n ? { predictionMeta: input.predictionMeta as any }\n : {}),\n });\n },\n refineBelief(input) {\n return authContext.convex.mutation(\n internal.lucernMcp.internalRefineBelief as any,\n {\n nodeId: input.beliefRawId as any,\n canonicalText: input.text,\n rationale: input.rationale,\n userId: authContext.userId,\n }\n );\n },\n forkBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.forkBelief, {\n parentNodeId: input.beliefRawId as any,\n newFormulation: input.text,\n forkReason: input.forkReason,\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n modulateConfidence(input) {\n const opinion = toSubjectiveLogicOpinion(\n input.confidence,\n input.certainty\n );\n return authContext.convex.mutation(api.epistemicBeliefs.modulateConfidence, {\n nodeId: input.beliefRawId as any,\n trigger: input.trigger,\n rationale: input.rationale,\n userId: authContext.userId,\n ...opinion,\n });\n },\n archiveBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.archive, {\n nodeId: input.beliefRawId as any,\n reason: input.reason,\n userId: authContext.userId,\n });\n },\n getLineage(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getLineage, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n getConfidenceHistory(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getConfidenceHistory, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n createContract(args) {\n return authContext.convex.mutation(\n api.epistemicContracts.createEpistemicContract as any,\n {\n beliefNodeId: args.beliefRawId as any,\n title: args.input.title,\n description: args.input.description,\n conditionType: args.input.conditionType,\n direction: args.input.direction,\n condition: args.input.condition,\n deadline: args.input.deadline,\n compositeOf: args.input.compositeOf,\n compositeOperator: args.input.compositeOperator,\n modulation: args.input.modulation,\n evaluationSchedule: args.input.evaluationSchedule,\n periodicIntervalMs: args.input.periodicIntervalMs,\n authenticatedUserId: authContext.userId,\n }\n );\n },\n getRelationships(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getRelationships, {\n nodeId: rawId as any,\n direction: \"both\",\n });\n },\n };\n}\n\nfunction createMcpBeliefPort(authContext: AuthContext): BeliefPort {\n const convex = requireMcpConvex(authContext, \"createMcpBeliefPort\");\n return {\n fetchBelief(rawId) {\n return convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listBeliefsByTopic(args) {\n return convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n status: args.status,\n limit: args.limit,\n ...(args.includeEdgeAssociated\n ? { includeEdgeAssociated: true }\n : {}),\n } as any) as Promise<unknown[]>;\n },\n createBelief(input) {\n return convex.mutation(api.epistemicBeliefs.create, {\n topicId: input.topicId,\n formulation: input.text,\n rationale: input.rationale,\n worktreeId: input.worktreeId,\n pillar: input.pillar,\n sourceBeliefIds: input.sourceBeliefRawIds as any,\n sourceType: input.sourceType as any,\n beliefType: input.beliefType,\n reversibility: input.reversibility as any,\n metadata: input.metadata,\n userId: authContext.userId,\n ...(input.predictionMeta\n ? { predictionMeta: input.predictionMeta as any }\n : {}),\n });\n },\n refineBelief(input) {\n return convex.mutation(internal.lucernMcp.internalRefineBelief, {\n nodeId: input.beliefRawId as any,\n canonicalText: input.text,\n rationale: input.rationale,\n userId: authContext.userId,\n mcpSessionId: authContext.sessionId,\n mcpToolName: \"refine_belief\",\n });\n },\n forkBelief(input) {\n return convex.mutation(api.epistemicBeliefs.forkBelief, {\n parentNodeId: input.beliefRawId as any,\n newFormulation: input.text,\n forkReason: input.forkReason,\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n modulateConfidence(input) {\n const opinion = toSubjectiveLogicOpinion(\n input.confidence,\n input.certainty\n );\n return convex.mutation(api.epistemicBeliefs.modulateConfidence, {\n nodeId: input.beliefRawId as any,\n trigger: input.trigger,\n rationale: input.rationale,\n userId: authContext.userId,\n ...opinion,\n });\n },\n archiveBelief(input) {\n return convex.mutation(api.epistemicBeliefs.archive, {\n nodeId: input.beliefRawId as any,\n reason: input.reason,\n userId: authContext.userId,\n });\n },\n getLineage(rawId) {\n return convex.query(api.epistemicBeliefs.getLineage, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n getConfidenceHistory(rawId) {\n return convex.query(api.epistemicBeliefs.getConfidenceHistory, {\n nodeId: rawId as any,\n }) as Promise<unknown[]>;\n },\n createContract(args) {\n return convex.mutation(api.epistemicContracts.createEpistemicContract as any, {\n beliefNodeId: args.beliefRawId as any,\n title: args.input.title,\n description: args.input.description,\n conditionType: args.input.conditionType,\n direction: args.input.direction,\n condition: args.input.condition,\n deadline: args.input.deadline,\n compositeOf: args.input.compositeOf,\n compositeOperator: args.input.compositeOperator,\n modulation: args.input.modulation,\n evaluationSchedule: args.input.evaluationSchedule,\n periodicIntervalMs: args.input.periodicIntervalMs,\n authenticatedUserId: authContext.userId,\n });\n },\n getRelationships(rawId) {\n return convex.query(api.epistemicBeliefs.getRelationships, {\n nodeId: rawId as any,\n direction: \"both\",\n });\n },\n };\n}\n\nexport async function createBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateBeliefInput\n) {\n const payload = await createBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"belief.created\",\n resourceId: payload.id,\n data: {\n text: payload.text,\n rationale: input.rationale,\n worktreeId: input.worktreeId,\n pillar: input.pillar,\n sourceBeliefIds: input.sourceBeliefIds ?? [],\n sourceType: input.sourceType,\n beliefType: input.beliefType,\n reversibility: input.reversibility,\n predictionMeta: input.predictionMeta,\n metadata: input.metadata,\n },\n });\n return payload;\n}\n\nexport function getBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getBelief(createGatewayBeliefPort(authContext), { id });\n}\n\nexport function listBeliefsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListBeliefsQuery\n) {\n return listBeliefs(createGatewayBeliefPort(authContext), query);\n}\n\nexport async function refineBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: BeliefRefineInput\n) {\n const payload = await refineBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.refined\",\n resourceId: payload.id,\n data: {\n previousText:\n typeof (payload as Record<string, unknown>).previousText === \"string\"\n ? (payload as Record<string, unknown>).previousText\n : undefined,\n text: payload.text,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function forkBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n text: string;\n forkReason?: string;\n rationale?: string;\n }\n) {\n const payload = await forkBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.forked\",\n resourceId: payload.id,\n data: {\n parentBeliefId: payload.parentBeliefId,\n forkReason: payload.forkReason,\n text: payload.text,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function updateBeliefConfidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateBeliefConfidenceInput\n) {\n const payload = await updateBeliefConfidence(\n createGatewayBeliefPort(authContext),\n input\n );\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.confidence_updated\",\n resourceId: payload.beliefId,\n data: {\n previousConfidence: payload.previousConfidence,\n newConfidence: payload.newConfidence,\n trigger: payload.trigger,\n rationale: payload.rationale,\n requestId: payload.requestId,\n propagationSummary: payload.propagationSummary,\n opinion: payload.opinion,\n },\n });\n return payload;\n}\n\nexport async function archiveBeliefFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n reason?: string;\n }\n) {\n const payload = await archiveBelief(createGatewayBeliefPort(authContext), input);\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? (await resolveBeliefTopicIdWithGatewayAuth(authContext, input.id)) ?? \"\",\n type: \"belief.archived\",\n resourceId: payload.id,\n data: {\n previousStatus: payload.previousStatus,\n newStatus: payload.newStatus,\n reason: input.reason,\n },\n });\n return payload;\n}\n\nexport function getBeliefLineageFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getBeliefLineage(createGatewayBeliefPort(authContext), { id });\n}\n\nexport function getBeliefConfidenceHistoryFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getBeliefConfidenceHistory(createGatewayBeliefPort(authContext), { id });\n}\n\nexport async function getBeliefRelationshipsFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string,\n direction?: string\n) {\n const relationships = (await createGatewayBeliefPort(authContext).getRelationships(\n id\n )) as Record<string, unknown>;\n\n if (direction === \"in\") {\n return {\n ...relationships,\n outgoing: [],\n };\n }\n\n if (direction === \"out\") {\n return {\n ...relationships,\n incoming: [],\n };\n }\n\n return relationships;\n}\n\nexport function updateBeliefStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n status: \"active\" | \"superseded\" | \"archived\";\n reason?: string;\n }\n) {\n const externalNodeId = input.id ?? input.nodeId ?? input.beliefId;\n return authContext.convex.mutation(api.epistemicBeliefs.updateStatus, {\n nodeId: resolveBeliefNodeId(input),\n status: input.status,\n reason: input.reason,\n userId: authContext.userId,\n }).then((payload: unknown) => ({\n ...(payload as Record<string, unknown>),\n ...(externalNodeId ? { nodeId: externalNodeId } : {}),\n }));\n}\n\nexport function updateBeliefRationaleFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n rationale?: string;\n }\n) {\n const externalNodeId = input.id ?? input.nodeId ?? input.beliefId;\n return authContext.convex.mutation(api.epistemicBeliefs.updateRationale, {\n nodeId: resolveBeliefNodeId(input),\n rationale: input.rationale,\n userId: authContext.userId,\n }).then((payload: unknown) => ({\n ...(payload as Record<string, unknown>),\n ...(externalNodeId ? { nodeId: externalNodeId } : {}),\n }));\n}\n\nexport function linkBeliefsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n fromNodeId: string;\n toNodeId: string;\n edgeType:\n | \"supports\"\n | \"informs\"\n | \"depends_on\"\n | \"derived_from\"\n | \"contains\"\n | \"tests\"\n | \"supersedes\"\n | \"responds_to\"\n | \"belongs_to\"\n | \"relates_to_thesis\";\n weight?: number;\n context?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.linkBeliefs, {\n fromNodeId: resolveExternalId(input.fromNodeId) ?? \"\",\n toNodeId: resolveExternalId(input.toNodeId) ?? \"\",\n edgeType: input.edgeType,\n weight: input.weight,\n context: input.context,\n userId: authContext.userId,\n });\n}\n\nexport function unlinkBeliefEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n beliefNodeId?: string;\n beliefId?: string;\n nodeId?: string;\n insightId?: string;\n evidenceId?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.unlinkEvidence, {\n beliefNodeId:\n input.beliefNodeId ??\n resolveExternalId(input.beliefId) ??\n resolveExternalId(input.nodeId) ??\n \"\",\n insightId: resolveExternalId(input.insightId ?? input.evidenceId) ?? \"\",\n userId: authContext.userId,\n });\n}\n\nexport function updateBeliefCriticalityFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n }\n) {\n const externalNodeId = input.id ?? input.nodeId ?? input.beliefId;\n return authContext.convex.mutation(api.epistemicBeliefs.updateCriticality, {\n nodeId: resolveBeliefNodeId(input),\n criticality: input.criticality,\n userId: authContext.userId,\n }).then((payload: unknown) => ({\n ...(payload as Record<string, unknown>),\n ...(externalNodeId ? { nodeId: externalNodeId } : {}),\n }));\n}\n\nexport function batchUpdateBeliefCriticalityFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n updates: Array<{\n beliefId: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n ifFalseImpact?: string;\n triagePriority?: number;\n reasoning?: string;\n dependentBeliefIds?: string[];\n blockedByBeliefIds?: string[];\n }>;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.batchUpdateCriticality, {\n updates: input.updates.map((update) => ({\n ...update,\n beliefId: resolveExternalId(update.beliefId) ?? update.beliefId,\n dependentBeliefIds: update.dependentBeliefIds?.map(\n (id) => resolveExternalId(id) ?? id\n ),\n blockedByBeliefIds: update.blockedByBeliefIds?.map(\n (id) => resolveExternalId(id) ?? id\n ),\n })),\n userId: authContext.userId,\n });\n}\n\nexport function reassignBeliefsTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n beliefNodeIds?: string[];\n beliefIds?: string[];\n targetTopicId: string;\n reason?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicBeliefs.reassignBeliefsTopic, {\n beliefNodeIds: (input.beliefNodeIds ?? input.beliefIds ?? []).map(\n (id) => resolveExternalId(id) ?? id\n ),\n targetTopicId: input.targetTopicId,\n reason: input.reason,\n userId: authContext.userId,\n });\n}\n\nexport async function createBeliefContractFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string,\n input: BeliefContractCreateInput\n) {\n const payload = await createBeliefContract(createGatewayBeliefPort(authContext), {\n id,\n input,\n });\n await emitBeliefEventFromGatewayAuth(authContext, {\n topicId: (await resolveBeliefTopicIdWithGatewayAuth(authContext, id)) ?? \"\",\n type: \"belief.contract_created\",\n resourceId: payload.beliefId,\n data: {\n contractId: payload.contractId,\n title: payload.title,\n status: payload.status,\n conditionType: input.conditionType,\n direction: input.direction,\n evaluationSchedule: input.evaluationSchedule,\n },\n });\n return payload;\n}\n\nexport function bisectBeliefConfidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: BisectBeliefConfidenceInput\n) {\n return bisectBeliefConfidence(createGatewayBeliefPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n archiveBeliefFromGatewayAuth,\n batchUpdateBeliefCriticalityFromGatewayAuth,\n bisectBeliefConfidenceFromGatewayAuth,\n createBeliefContractFromGatewayAuth,\n createBeliefFromGatewayAuth,\n forkBeliefFromGatewayAuth,\n getBeliefConfidenceHistoryFromGatewayAuth,\n getBeliefFromGatewayAuth,\n getBeliefLineageFromGatewayAuth,\n getBeliefRelationshipsFromGatewayAuth,\n linkBeliefsFromGatewayAuth,\n listBeliefsFromGatewayAuth,\n reassignBeliefsTopicFromGatewayAuth,\n refineBeliefFromGatewayAuth,\n unlinkBeliefEvidenceFromGatewayAuth,\n updateBeliefConfidenceFromGatewayAuth,\n updateBeliefCriticalityFromGatewayAuth,\n updateBeliefRationaleFromGatewayAuth,\n updateBeliefStatusFromGatewayAuth,\n} from \"@lucern/server-core/beliefs\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nfunction 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 if (start === undefined && end === undefined) {\n return undefined;\n }\n return {\n start: start ?? Number.NaN,\n end: end ?? Number.NaN,\n };\n}\n\nfunction handleBeliefsError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleBeliefCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createBeliefFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n text:\n readString(body.text) ??\n readString(body.canonicalText) ??\n readString(body.formulation) ??\n \"\",\n rationale: readString(body.rationale),\n worktreeId: readString(body.worktreeId),\n pillar: readString(body.pillar),\n sourceBeliefIds: readStringArray(body.sourceBeliefIds),\n sourceType: readString(body.sourceType),\n beliefType: readString(body.beliefType),\n reversibility: readString(body.reversibility),\n predictionMeta: asRecord(body.predictionMeta),\n metadata: asRecord(body.metadata),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to create belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n}) {\n try {\n const payload = await getBeliefFromGatewayAuth(args.authContext, args.beliefId);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to read belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n worktreeId?: string;\n minConfidence?: number;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listBeliefsFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to list beliefs.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefRefine(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await refineBeliefFromGatewayAuth(args.authContext, {\n id: args.beliefId,\n text:\n readString(body.text) ??\n readString(body.canonicalText) ??\n readString(body.formulation) ??\n \"\",\n rationale: readString(body.rationale),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to refine belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefFork(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await forkBeliefFromGatewayAuth(args.authContext, {\n id: args.beliefId,\n text:\n readString(body.text) ??\n readString(body.newFormulation) ??\n readString(body.formulation) ??\n \"\",\n forkReason: readString(body.forkReason),\n rationale: readString(body.rationale),\n });\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to fork belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateConfidence(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefConfidenceFromGatewayAuth(\n args.authContext,\n {\n id: args.beliefId,\n confidence: readNumber(body.confidence) ?? Number.NaN,\n trigger: readString(body.trigger),\n rationale: readString(body.rationale) ?? \"\",\n certainty: readNumber(body.certainty),\n maxInlinePropagationTargets: readNumber(body.maxInlinePropagationTargets),\n }\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief confidence.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefStatusFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.beliefId),\n status:\n (readString(body.status) as \"active\" | \"superseded\" | \"archived\") ??\n \"active\",\n reason: readString(body.reason),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief status.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateRationale(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefRationaleFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.beliefId),\n rationale: readString(body.rationale),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief rationale.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefLink(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await linkBeliefsFromGatewayAuth(args.authContext, {\n fromNodeId:\n readString(body.fromNodeId) ?? readString(body.sourceId) ?? \"\",\n toNodeId: readString(body.toNodeId) ?? readString(body.targetId) ?? \"\",\n edgeType:\n (readString(body.edgeType) as\n | \"supports\"\n | \"informs\"\n | \"depends_on\"\n | \"derived_from\"\n | \"contains\"\n | \"tests\"\n | \"supersedes\"\n | \"responds_to\"\n | \"belongs_to\"\n | \"relates_to_thesis\") ?? \"relates_to_thesis\",\n weight: readNumber(body.weight),\n context: readString(body.context),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to link beliefs.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUnlinkEvidence(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await unlinkBeliefEvidenceFromGatewayAuth(\n args.authContext,\n {\n beliefNodeId:\n readString(body.beliefNodeId) ??\n readString(body.beliefId) ??\n readString(body.nodeId),\n insightId: readString(body.insightId) ?? readString(body.evidenceId),\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to unlink evidence from belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefUpdateCriticality(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateBeliefCriticalityFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.beliefId),\n criticality:\n (readString(body.criticality) as\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\") ?? \"important\",\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to update belief criticality.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefBatchUpdateCriticality(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const updates = Array.isArray(body.updates)\n ? body.updates\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n beliefId: readString(entry.beliefId) ?? \"\",\n criticality:\n (readString(entry.criticality) as\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\") ?? \"important\",\n ifFalseImpact: readString(entry.ifFalseImpact),\n triagePriority: readNumber(entry.triagePriority),\n reasoning: readString(entry.reasoning),\n dependentBeliefIds: readStringArray(entry.dependentBeliefIds),\n blockedByBeliefIds: readStringArray(entry.blockedByBeliefIds),\n }))\n : [];\n const payload = await batchUpdateBeliefCriticalityFromGatewayAuth(\n args.authContext,\n { updates }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to batch update belief criticality.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefReassignTopic(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await reassignBeliefsTopicFromGatewayAuth(args.authContext, {\n beliefNodeIds:\n readStringArray(body.beliefNodeIds) ?? readStringArray(body.beliefIds),\n targetTopicId: readString(body.targetTopicId) ?? \"\",\n reason: readString(body.reason),\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to reassign beliefs to topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefArchive(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await archiveBeliefFromGatewayAuth(args.authContext, {\n id: args.beliefId,\n reason: readString(body.reason) ?? readString(body.rationale),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to archive belief.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefLineage(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n}) {\n try {\n const payload = await getBeliefLineageFromGatewayAuth(\n args.authContext,\n args.beliefId\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to query belief lineage.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefConfidenceHistory(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n}) {\n try {\n const payload = await getBeliefConfidenceHistoryFromGatewayAuth(\n args.authContext,\n args.beliefId\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to read belief confidence history.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefRelationships(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n direction?: string;\n}) {\n try {\n const payload = await getBeliefRelationshipsFromGatewayAuth(\n args.authContext,\n args.beliefId,\n args.direction\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to query belief relationships.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefCreateContract(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createBeliefContractFromGatewayAuth(\n args.authContext,\n args.beliefId,\n {\n title: readString(body.title) ?? \"\",\n description: readString(body.description),\n conditionType: readString(body.conditionType) as any,\n direction: readString(body.direction) as any,\n condition: {\n expression: readString(asRecord(body.condition).expression) ?? \"\",\n evaluator: readString(asRecord(body.condition).evaluator) ?? \"\",\n evaluatorConfig: asRecord(asRecord(body.condition).evaluatorConfig),\n },\n deadline: readNumber(body.deadline),\n compositeOf: readStringArray(body.compositeOf),\n compositeOperator: readString(body.compositeOperator) as any,\n modulation: {\n onConfirmed: {\n delta: readNumber(asRecord(asRecord(body.modulation).onConfirmed).delta) ?? 0,\n ceiling: readNumber(asRecord(asRecord(body.modulation).onConfirmed).ceiling),\n },\n onDisconfirmed: {\n delta:\n readNumber(asRecord(asRecord(body.modulation).onDisconfirmed).delta) ?? 0,\n floor: readNumber(asRecord(asRecord(body.modulation).onDisconfirmed).floor),\n },\n ...(asRecord(body.modulation).onExpired\n ? {\n onExpired: {\n delta:\n readNumber(asRecord(asRecord(body.modulation).onExpired).delta) ?? 0,\n },\n }\n : {}),\n ...(asRecord(body.modulation).onPartial\n ? {\n onPartial: {\n threshold:\n readNumber(asRecord(asRecord(body.modulation).onPartial).threshold) ??\n 0,\n delta:\n readNumber(asRecord(asRecord(body.modulation).onPartial).delta) ?? 0,\n },\n }\n : {}),\n },\n evaluationSchedule: readString(body.evaluationSchedule) as any,\n periodicIntervalMs: readNumber(body.periodicIntervalMs),\n }\n );\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to create belief contract.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleBeliefBisect(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n beliefId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await bisectBeliefConfidenceFromGatewayAuth(\n args.authContext,\n {\n id: args.beliefId,\n expectedDirection: readString(body.expectedDirection) as any,\n timeRange: readTimeRange(body.timeRange),\n }\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleBeliefsError(\n error,\n \"Failed to bisect belief confidence history.\",\n args.correlationId,\n args.policyTraceId\n );\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","import {\n compileContext,\n isContextCompileError,\n type CompileContextCommand,\n type CompileContextPorts,\n} from \"./domain/context\";\n\nexport type ContextServerCore = {\n compile(input: CompileContextCommand): ReturnType<typeof compileContext>;\n};\n\nexport function createContextServerCore(\n ports: CompileContextPorts\n): ContextServerCore {\n return {\n compile(input) {\n return compileContext(ports, input);\n },\n };\n}\n\nexport { isContextCompileError };\n","import {\n createContextServerCore,\n isContextCompileError,\n} from \"@lucern/server-core/context\";\nimport type {\n CompileContextCommand,\n CompileContextPorts,\n} from \"@lucern/server-core/domain/context/ports\";\n\nexport type GatewayContextAuth = {\n actorPrincipalId: string;\n};\n\nexport type GatewayContextRequest = {\n body: Record<string, unknown>;\n auth: GatewayContextAuth | null;\n correlationId: string;\n policyTraceId: string | null;\n};\n\nexport type GatewayContextRouteDeps = CompileContextPorts & {\n successResponse: (\n data: unknown,\n meta: {\n correlationId: string;\n policyTraceId: string | null;\n status?: number;\n }\n ) => Response;\n errorResponse: (meta: {\n code: string;\n message: string;\n status: number;\n correlationId: string;\n policyTraceId: string | null;\n }) => Response;\n};\n\nexport function createContextGatewayRoute(deps: GatewayContextRouteDeps) {\n const core = createContextServerCore(deps);\n\n return {\n async post(request: GatewayContextRequest): Promise<Response> {\n if (!request.auth?.actorPrincipalId) {\n return deps.errorResponse({\n code: \"AUTHENTICATION_REQUIRED\",\n message: \"Authentication is required to compile context.\",\n status: 401,\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n }\n\n try {\n const command: CompileContextCommand = {\n ...request.body,\n actorPrincipalId: request.auth.actorPrincipalId,\n policyTraceId: request.policyTraceId,\n };\n const payload = await core.compile(command);\n const response = deps.successResponse(payload, {\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n response.headers.set(\"Cache-Control\", \"private, max-age=5\");\n return response;\n } catch (error) {\n if (isContextCompileError(error)) {\n const message = error instanceof Error ? error.message : String(error);\n return deps.errorResponse({\n code: error.code,\n message,\n status: error.status,\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return deps.errorResponse({\n code: \"INTERNAL_ERROR\",\n message: message || \"Failed to compile context.\",\n status: 500,\n correlationId: request.correlationId,\n policyTraceId: request.policyTraceId,\n });\n }\n },\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype PublicSeverity = \"low\" | \"medium\" | \"high\" | \"critical\";\ntype DefeatType = \"rebuts\" | \"undercuts\" | \"undermines\";\n\nexport type ContradictionRecord = {\n id: string;\n contradictionId: string;\n topicId?: string;\n beliefA: string;\n beliefB: string;\n description: string;\n severity: PublicSeverity;\n status: string;\n defeatType: DefeatType;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type ContradictionListResult = {\n contradictions: ContradictionRecord[];\n nextCursor: null;\n};\n\nexport type FlagContradictionInput = {\n beliefA: string;\n beliefB: string;\n description: string;\n topicId: string;\n severity?: string;\n defeatType?: string;\n};\n\nexport type ListContradictionsQuery = {\n topicId: string;\n status?: string;\n limit?: number;\n cursor?: string;\n};\n\ntype PortSeverity = \"critical\" | \"significant\" | \"minor\";\n\ntype FlagContradictionPortInput = {\n beliefARawId: string;\n beliefBRawId: string;\n description: string;\n topicId: string;\n severity: PortSeverity;\n publicSeverity: PublicSeverity;\n defeatType: DefeatType;\n};\n\nexport type ContradictionsPort = {\n fetchBelief: (rawId: string) => Promise<unknown | null>;\n flagContradiction: (input: FlagContradictionPortInput) => Promise<unknown>;\n listByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n getById: (id: string) => Promise<unknown | null>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[contradictions] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[contradictions] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeBeliefId(value: unknown): string {\n return encodeId(\"bel\", decodeExternalId(normalizeRequiredString(value, \"beliefId\"), \"bel\"));\n}\n\nfunction normalizeSeverity(value: unknown): PublicSeverity {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"critical\":\n return \"critical\";\n case \"high\":\n return \"high\";\n case \"low\":\n case \"minor\":\n return \"low\";\n case \"significant\":\n case \"medium\":\n default:\n return \"medium\";\n }\n}\n\nfunction normalizePortSeverity(value: PublicSeverity): PortSeverity {\n switch (value) {\n case \"critical\":\n return \"critical\";\n case \"low\":\n return \"minor\";\n case \"medium\":\n case \"high\":\n default:\n return \"significant\";\n }\n}\n\nfunction normalizeDefeatType(value: unknown): DefeatType {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"undercuts\") {\n return \"undercuts\";\n }\n if (normalized === \"undermines\") {\n return \"undermines\";\n }\n return \"rebuts\";\n}\n\nfunction extractBeliefRef(value: unknown): string | undefined {\n const record = asRecord(value);\n const direct =\n readString(record.beliefId) ??\n readString(record.nodeId) ??\n readString(record._id);\n return direct ? normalizeBeliefId(direct) : undefined;\n}\n\nfunction extractBeliefB(record: Record<string, unknown>): string {\n const direct =\n readString(record.beliefB) ??\n readString(asRecord(record.metadata).beliefB) ??\n readString(asRecord(record.aiAnalysis).beliefB);\n if (direct) {\n return normalizeBeliefId(direct);\n }\n\n const contradictingInsights = Array.isArray(record.contradictingInsights)\n ? record.contradictingInsights\n : [];\n const contradictingInsightIds = Array.isArray(record.contradictingInsightIds)\n ? record.contradictingInsightIds\n : [];\n const firstBeliefRecord = contradictingInsights\n .map((entry) => extractBeliefRef(entry))\n .find((entry): entry is string => Boolean(entry));\n if (firstBeliefRecord) {\n return firstBeliefRecord;\n }\n\n const firstBeliefId = contradictingInsightIds\n .map((entry) => readString(entry))\n .find((entry): entry is string => Boolean(entry));\n if (firstBeliefId) {\n return normalizeBeliefId(firstBeliefId);\n }\n\n throw new Error(\"[contradictions] beliefB is required.\");\n}\n\nfunction normalizeContradictionRecord(value: unknown): ContradictionRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const aiAnalysis = asRecord(record.aiAnalysis);\n const contradictionToken =\n readString(record.contradictionId) ??\n readString(record._id) ??\n readString(record.id) ??\n randomUUID();\n const rawContradictionId = contradictionToken.startsWith(\"con_\")\n ? decodeExternalId(contradictionToken, \"con\")\n : contradictionToken;\n const beliefADirect =\n readString(record.beliefA) ??\n readString(metadata.beliefA) ??\n readString(aiAnalysis.beliefA);\n const beliefA =\n extractBeliefRef(record.belief) ??\n extractBeliefRef({ beliefId: record.beliefId }) ??\n (beliefADirect ? normalizeBeliefId(beliefADirect) : undefined);\n if (!beliefA) {\n throw new Error(\"[contradictions] beliefA is required.\");\n }\n const status =\n readString(record.status) ??\n readString(record.resolutionStatus) ??\n readString(metadata.status) ??\n \"unresolved\";\n\n return {\n id: encodeId(\"con\", rawContradictionId),\n contradictionId: encodeId(\"con\", rawContradictionId),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n beliefA,\n beliefB: extractBeliefB(record),\n description:\n readString(record.description) ??\n readString(aiAnalysis.summary) ??\n readString(aiAnalysis.likelyExplanation) ??\n \"\",\n severity: normalizeSeverity(\n metadata.publicSeverity ?? aiAnalysis.publicSeverity ?? record.severity\n ),\n status,\n defeatType: normalizeDefeatType(\n metadata.defeatType ?? aiAnalysis.defeatType ?? record.defeatType\n ),\n ...(readNumber(record.createdAt) !== undefined\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nasync function fetchBeliefOrThrow(\n deps: ContradictionsPort,\n rawId: string,\n field: \"beliefA\" | \"beliefB\"\n) {\n const belief = await deps.fetchBelief(rawId);\n if (!belief) {\n throw new Error(`[contradictions.flag] ${field} must resolve to an existing belief.`);\n }\n return belief;\n}\n\nexport async function flagContradiction(\n deps: ContradictionsPort,\n input: FlagContradictionInput\n): Promise<ContradictionRecord> {\n const publicSeverity = normalizeSeverity(input.severity);\n const defeatType = normalizeDefeatType(input.defeatType);\n const beliefARawId = decodeExternalId(\n normalizeRequiredString(input.beliefA, \"beliefA\"),\n \"bel\"\n );\n const beliefBRawId = decodeExternalId(\n normalizeRequiredString(input.beliefB, \"beliefB\"),\n \"bel\"\n );\n\n if (beliefARawId === beliefBRawId) {\n throw new Error(\n \"[contradictions.flag] beliefA and beliefB must identify different beliefs.\"\n );\n }\n\n await Promise.all([\n fetchBeliefOrThrow(deps, beliefARawId, \"beliefA\"),\n fetchBeliefOrThrow(deps, beliefBRawId, \"beliefB\"),\n ]);\n\n const created = await deps.flagContradiction({\n beliefARawId,\n beliefBRawId,\n description: normalizeRequiredString(input.description, \"description\"),\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n severity: normalizePortSeverity(publicSeverity),\n publicSeverity,\n defeatType,\n });\n\n const record = asRecord(created);\n const primitiveId =\n typeof created === \"string\" && created.trim().length > 0 ? created : undefined;\n const contradictionToken =\n primitiveId ??\n readString(record.contradictionId) ??\n readString(record._id) ??\n readString(record.id) ??\n randomUUID();\n const rawId = contradictionToken.startsWith(\"con_\")\n ? decodeExternalId(contradictionToken, \"con\")\n : contradictionToken;\n\n return {\n id: encodeId(\"con\", rawId),\n contradictionId: encodeId(\"con\", rawId),\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n beliefA: normalizeBeliefId(input.beliefA),\n beliefB: normalizeBeliefId(input.beliefB),\n description: normalizeRequiredString(input.description, \"description\"),\n severity: publicSeverity,\n status: \"unresolved\",\n defeatType,\n ...(readNumber(record.createdAt) !== undefined\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nexport async function listContradictions(\n deps: ContradictionsPort,\n query: ListContradictionsQuery\n): Promise<ContradictionListResult> {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n const requestedStatus = readString(query.status);\n const pageSize =\n readNumber(query.limit) !== undefined\n ? Math.max(1, Math.floor(readNumber(query.limit)!))\n : undefined;\n const rows = await deps.listByTopic({\n topicId,\n limit: pageSize,\n });\n\n return {\n contradictions: rows\n .map(normalizeContradictionRecord)\n .filter((record) => !requestedStatus || record.status === requestedStatus)\n .slice(0, pageSize ?? rows.length),\n nextCursor: null,\n };\n}\n\nexport async function getContradiction(\n deps: ContradictionsPort,\n input: { id: string }\n): Promise<ContradictionRecord> {\n const rawId = decodeExternalId(\n normalizeRequiredString(input.id, \"id\"),\n \"con\"\n );\n const contradiction = await deps.getById(rawId);\n if (!contradiction) {\n throw new Error(\n `[contradictions.get] Contradiction ${input.id} was not found.`\n );\n }\n return normalizeContradictionRecord(contradiction);\n}\n","import { api } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport {\n flagContradiction,\n getContradiction,\n listContradictions,\n type ContradictionsPort,\n type FlagContradictionInput,\n type ListContradictionsQuery,\n} from \"./domain/contradictions\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nasync function ensureTopicAccessWithQuery(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n topicId: string | undefined,\n userId: string,\n contextLabel: string\n) {\n if (!topicId) {\n return;\n }\n\n const allowed = await runQuery(api.topics.checkAccess, {\n topicId: topicId as any,\n userId,\n });\n if (allowed !== true) {\n throw new Error(\n `[contradictions] ${contextLabel} requires access to topic ${topicId}.`\n );\n }\n}\n\nfunction resolveTopicIdFromContradiction(value: unknown): string | undefined {\n return readString(asRecord(value).topicId);\n}\n\nasync function emitContradictionEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"contradiction.flagged\",\n resourceId: args.resourceId,\n resourceType: \"contradiction\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitContradictionEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitContradictionEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"contradiction.flagged\",\n resourceId: args.resourceId,\n resourceType: \"contradiction\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayContradictionsPort(\n authContext: GatewayAuthContext\n): ContradictionsPort {\n return {\n fetchBelief(rawId) {\n return authContext.convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n });\n },\n flagContradiction(input) {\n return authContext.convex.mutation(api.contradictions.create, {\n beliefId: input.beliefARawId as any,\n supportingInsightIds: [],\n contradictingInsightIds: [input.beliefBRawId as any],\n severity: input.severity,\n topicId: input.topicId as any,\n aiAnalysis: {\n summary: input.description,\n likelyExplanation: input.description,\n suggestedResolution:\n `Review the conflicting beliefs before acting. Defeat type: ${input.defeatType}.`,\n confidenceInAnalysis: 0.5,\n analyzedAt: Date.now(),\n },\n createdBy: authContext.userId,\n });\n },\n listByTopic(args) {\n return authContext.convex.query(api.contradictions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n getById(id) {\n return authContext.convex.query(api.contradictions.getById, {\n contradictionId: id as any,\n });\n },\n };\n}\n\nfunction createMcpContradictionsPort(authContext: AuthContext): ContradictionsPort {\n const convex = requireMcpConvex(authContext, \"createMcpContradictionsPort\");\n return {\n fetchBelief(rawId) {\n return convex.query(api.epistemicBeliefs.getById, {\n beliefId: rawId as any,\n });\n },\n flagContradiction(input) {\n return convex.mutation(api.contradictions.create, {\n beliefId: input.beliefARawId as any,\n supportingInsightIds: [],\n contradictingInsightIds: [input.beliefBRawId as any],\n severity: input.severity,\n topicId: input.topicId as any,\n aiAnalysis: {\n summary: input.description,\n likelyExplanation: input.description,\n suggestedResolution:\n `Review the conflicting beliefs before acting. Defeat type: ${input.defeatType}.`,\n confidenceInAnalysis: 0.5,\n analyzedAt: Date.now(),\n },\n createdBy: authContext.userId,\n });\n },\n listByTopic(args) {\n return convex.query(api.contradictions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n getById(id) {\n return convex.query(api.contradictions.getById, {\n contradictionId: id as any,\n });\n },\n };\n}\n\nexport async function flagContradictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: FlagContradictionInput\n) {\n await ensureTopicAccessWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n input.topicId,\n authContext.userId,\n \"flag\"\n );\n const payload = await flagContradiction(\n createGatewayContradictionsPort(authContext),\n input\n );\n await emitContradictionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n resourceId: payload.id,\n data: {\n beliefA: payload.beliefA,\n beliefB: payload.beliefB,\n description: payload.description,\n severity: payload.severity,\n status: payload.status,\n defeatType: payload.defeatType,\n },\n });\n return payload;\n}\n\nexport async function listContradictionsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListContradictionsQuery\n) {\n await ensureTopicAccessWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n query.topicId,\n authContext.userId,\n \"list\"\n );\n return listContradictions(createGatewayContradictionsPort(authContext), query);\n}\n\nexport async function getContradictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n const contradiction = await getContradiction(\n createGatewayContradictionsPort(authContext),\n { id }\n );\n await ensureTopicAccessWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n resolveTopicIdFromContradiction(contradiction),\n authContext.userId,\n \"get\"\n );\n return contradiction;\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n flagContradictionFromGatewayAuth,\n getContradictionFromGatewayAuth,\n listContradictionsFromGatewayAuth,\n} from \"@lucern/server-core/contradictions\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport async function handleContradictionFlag(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await flagContradictionFromGatewayAuth(args.authContext, {\n beliefA: readString(body.beliefA) ?? \"\",\n beliefB: readString(body.beliefB) ?? \"\",\n description: readString(body.description) ?? \"\",\n topicId: readString(body.topicId) ?? \"\",\n severity: readString(body.severity),\n defeatType: readString(body.defeatType),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to flag contradiction.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleContradictionList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listContradictionsFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n status: args.query.status,\n limit: args.query.limit,\n cursor: args.query.cursor,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list contradictions.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleContradictionGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n contradictionId: string;\n}) {\n try {\n const payload = await getContradictionFromGatewayAuth(\n args.authContext,\n args.contradictionId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read contradiction.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype EdgeDirection = \"up\" | \"down\" | \"both\";\n\nexport type EdgeRecord = {\n id: string;\n edgeId: string;\n globalId?: string;\n sourceId: string;\n targetId: string;\n edgeType: string;\n topicId?: string;\n confidence?: number;\n weight?: number;\n context?: string;\n fromLayer?: string;\n toLayer?: string;\n isDuplicate?: boolean;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type EdgeListResult = {\n edges: EdgeRecord[];\n nextCursor: null;\n};\n\nexport type EdgeTraversalNode = {\n id: string;\n nodeId: string;\n globalId?: string;\n nodeType?: string;\n text?: string;\n confidence?: number;\n depth?: number;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type EdgeTraversalResult = {\n startNode: string;\n direction: EdgeDirection;\n maxDepth: number;\n nodes: EdgeTraversalNode[];\n edges: EdgeRecord[];\n depth: number;\n};\n\nexport type CreateEdgeInput = {\n sourceId: string;\n targetId: string;\n edgeType: string;\n topicId?: string;\n confidence?: number;\n weight?: number;\n context?: string;\n};\n\nexport type ListEdgesQuery = {\n sourceId: string;\n edgeType?: string;\n limit?: number;\n cursor?: string;\n};\n\nexport type TraverseEdgesInput = {\n startNode: string;\n direction?: string;\n maxDepth?: number;\n topicId?: string;\n};\n\ntype EdgeCreatePortInput = {\n sourceRawId: string;\n targetRawId: string;\n edgeType: string;\n topicId?: string;\n confidence?: number;\n weight?: number;\n context?: string;\n};\n\ntype EdgeTraversePortInput = {\n startNode: string;\n direction: EdgeDirection;\n maxDepth: number;\n topicId?: string;\n};\n\nexport type EdgePort = {\n createEdge: (input: EdgeCreatePortInput) => Promise<unknown>;\n listEdgesBySource: (args: {\n sourceRawId: string;\n edgeType?: string;\n limit?: number;\n }) => Promise<unknown[]>;\n traverseEdges: (input: EdgeTraversePortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[edges] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[edges] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeNodeReference(value: unknown): string {\n const normalized = normalizeRequiredString(value, \"node reference\");\n try {\n const decoded = decodePrefixedId(normalized);\n return encodePrefixedId(decoded.prefix, decoded.value);\n } catch {\n return normalized;\n }\n}\n\nfunction normalizeDirection(value: unknown): EdgeDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"up\" || normalized === \"down\") {\n return normalized;\n }\n return \"both\";\n}\n\nfunction normalizeTraversalDepth(value: unknown): number {\n const numeric = readNumber(value);\n if (numeric === undefined) {\n return 3;\n }\n return Math.max(1, Math.min(Math.floor(numeric), 10));\n}\n\nfunction normalizeEdgeRecord(value: unknown): EdgeRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const edgeToken =\n readString(record.edgeId) ??\n readString(record.edgeGlobalId) ??\n readString(record.globalId) ??\n readString(record._id) ??\n randomUUID();\n const rawEdgeId = edgeToken.startsWith(\"edg_\")\n ? decodeExternalId(edgeToken, \"edg\")\n : edgeToken;\n const sourceRef =\n readString(record.sourceId) ??\n readString(record.fromNodeId) ??\n readString(record.sourceGlobalId) ??\n readString(record.fromGlobalId) ??\n \"\";\n const targetRef =\n readString(record.targetId) ??\n readString(record.toNodeId) ??\n readString(record.targetGlobalId) ??\n readString(record.toGlobalId) ??\n \"\";\n\n return {\n id: encodeId(\"edg\", rawEdgeId),\n edgeId: encodeId(\"edg\", rawEdgeId),\n ...(edgeToken.startsWith(\"edg_\") ? {} : { globalId: rawEdgeId }),\n sourceId: normalizeNodeReference(sourceRef),\n targetId: normalizeNodeReference(targetRef),\n edgeType: normalizeRequiredString(record.edgeType, \"edgeType\"),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n ...(readNumber(record.confidence) !== undefined\n ? { confidence: readNumber(record.confidence)! }\n : {}),\n ...(readNumber(record.weight) !== undefined\n ? { weight: readNumber(record.weight)! }\n : {}),\n ...(readString(record.context) ? { context: readString(record.context)! } : {}),\n ...(readString(record.fromLayer)\n ? { fromLayer: readString(record.fromLayer)! }\n : {}),\n ...(readString(record.toLayer) ? { toLayer: readString(record.toLayer)! } : {}),\n ...(typeof record.isDuplicate === \"boolean\"\n ? { isDuplicate: record.isDuplicate }\n : {}),\n ...(readNumber(record.createdAt) !== undefined\n ? { createdAt: readNumber(record.createdAt)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction normalizeTraversalNode(value: unknown): EdgeTraversalNode {\n const record = asRecord(value);\n const globalId =\n readString(record.globalId) ?? readString(record.nodeGlobalId) ?? undefined;\n const nodeId =\n readString(record.nodeId) ?? globalId ?? randomUUID();\n\n return {\n id: nodeId,\n nodeId,\n ...(globalId ? { globalId } : {}),\n ...(readString(record.nodeType)\n ? { nodeType: readString(record.nodeType)! }\n : {}),\n ...(readString(record.text) ??\n readString(record.canonicalText)\n ? {\n text:\n readString(record.text) ?? readString(record.canonicalText)!,\n }\n : {}),\n ...(readNumber(record.confidence) !== undefined\n ? { confidence: readNumber(record.confidence)! }\n : {}),\n ...(readNumber(record.depth) !== undefined\n ? { depth: readNumber(record.depth)! }\n : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n ...(Object.keys(asRecord(record.metadata)).length > 0\n ? { metadata: asRecord(record.metadata) }\n : {}),\n };\n}\n\nfunction normalizeTraversalResult(\n value: unknown,\n input: EdgeTraversePortInput\n): EdgeTraversalResult {\n const record = asRecord(value);\n const nodes = Array.isArray(record.nodes)\n ? record.nodes.map(normalizeTraversalNode)\n : [];\n const edges = Array.isArray(record.edges)\n ? record.edges.map(normalizeEdgeRecord)\n : [];\n const derivedDepth =\n readNumber(record.depth) ??\n nodes.reduce((maxDepth, node) => Math.max(maxDepth, node.depth ?? 0), 0);\n\n return {\n startNode: normalizeRequiredString(record.startNode ?? input.startNode, \"startNode\"),\n direction: normalizeDirection(record.direction ?? input.direction),\n maxDepth: normalizeTraversalDepth(record.maxDepth ?? input.maxDepth),\n nodes,\n edges,\n depth: derivedDepth,\n };\n}\n\nexport async function createEdge(\n deps: EdgePort,\n input: CreateEdgeInput\n): Promise<EdgeRecord> {\n const sourceId = normalizeNodeReference(input.sourceId);\n const targetId = normalizeNodeReference(input.targetId);\n const edgeType = normalizeRequiredString(input.edgeType, \"edgeType\");\n const created = await deps.createEdge({\n sourceRawId: decodeExternalId(sourceId),\n targetRawId: decodeExternalId(targetId),\n edgeType,\n topicId: readString(input.topicId),\n confidence: readNumber(input.confidence),\n weight: readNumber(input.weight),\n context: readString(input.context),\n });\n\n return normalizeEdgeRecord({\n ...asRecord(created),\n sourceId,\n targetId,\n edgeType,\n topicId: readString(input.topicId),\n confidence: readNumber(input.confidence),\n weight: readNumber(input.weight),\n context: readString(input.context),\n });\n}\n\nexport async function listEdges(\n deps: EdgePort,\n query: ListEdgesQuery\n): Promise<EdgeListResult> {\n const sourceId = normalizeNodeReference(query.sourceId);\n const rows = await deps.listEdgesBySource({\n sourceRawId: decodeExternalId(sourceId),\n edgeType: readString(query.edgeType),\n limit: readNumber(query.limit),\n });\n\n return {\n edges: rows.map(normalizeEdgeRecord),\n nextCursor: null,\n };\n}\n\nexport async function traverseEdges(\n deps: EdgePort,\n input: TraverseEdgesInput\n): Promise<EdgeTraversalResult> {\n const direction = normalizeDirection(input.direction);\n const maxDepth = normalizeTraversalDepth(input.maxDepth);\n const payload = await deps.traverseEdges({\n startNode: normalizeRequiredString(input.startNode, \"startNode\"),\n direction,\n maxDepth,\n topicId: readString(input.topicId),\n });\n\n return normalizeTraversalResult(payload, {\n startNode: normalizeRequiredString(input.startNode, \"startNode\"),\n direction,\n maxDepth,\n topicId: readString(input.topicId),\n });\n}\n","import { randomUUID } from \"node:crypto\";\nimport { api, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n createEdge,\n listEdges,\n traverseEdges,\n type CreateEdgeInput,\n type EdgePort,\n type ListEdgesQuery,\n type TraverseEdgesInput,\n} from \"./domain/edges\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction resolveExternalId(value: string | undefined): string | undefined {\n if (!value) {\n return value;\n }\n try {\n return decodePrefixedId(value).value;\n } catch {\n return value;\n }\n}\n\nasync function fetchNodeWithQuery(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n id: string\n) {\n if (!id.trim()) {\n return null;\n }\n\n const rawId = (() => {\n try {\n return decodePrefixedId(id).value;\n } catch {\n return id;\n }\n })();\n\n try {\n const byNodeId = await runQuery(api.epistemicNodes.get, {\n nodeId: rawId as any,\n });\n if (byNodeId) {\n return byNodeId;\n }\n } catch {\n // Try the global ID lookup next.\n }\n\n try {\n return await runQuery(api.epistemicNodes.getByGlobalId, {\n globalId: id,\n });\n } catch {\n return null;\n }\n}\n\nfunction resolveTopicIdFromNode(node: unknown): string | undefined {\n const record = asRecord(node);\n return readString(record.topicId) ?? readString(record.projectId);\n}\n\nasync function emitEdgeEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"edge.created\",\n resourceId: args.resourceId,\n resourceType: \"edge\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitEdgeEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitEdgeEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"edge.created\",\n resourceId: args.resourceId,\n resourceType: \"edge\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function ensureTopicAccessWithQuery(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n topicId: string | undefined,\n userId: string,\n contextLabel: string\n) {\n if (!topicId) {\n return;\n }\n\n const allowed = await runQuery(api.topics.checkAccess, {\n topicId: topicId as any,\n userId,\n });\n if (allowed !== true) {\n throw new Error(`[edges] ${contextLabel} requires access to topic ${topicId}.`);\n }\n}\n\nasync function executeTraversal(\n runQuery: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n runAction: (fn: unknown, args: Record<string, unknown>) => Promise<unknown>,\n userId: string,\n input: {\n startNode: string;\n direction: \"up\" | \"down\" | \"both\";\n maxDepth: number;\n topicId?: string;\n }\n) {\n const startNodeRecord = await fetchNodeWithQuery(runQuery, input.startNode);\n const startGlobalId =\n readString(asRecord(startNodeRecord).globalId) ?? input.startNode;\n const topicId = input.topicId ?? resolveTopicIdFromNode(startNodeRecord);\n\n await ensureTopicAccessWithQuery(runQuery, topicId, userId, \"traverse\");\n\n const payload = asRecord(\n await runAction(api.neo4jEdgeAPI.getGraphNeighborhood, {\n globalIds: [startGlobalId],\n maxDepth: input.maxDepth,\n })\n );\n\n const rawEdges = Array.isArray(payload.edges) ? payload.edges : [];\n const filteredEdges =\n input.direction === \"both\"\n ? rawEdges\n : rawEdges.filter((edge) => {\n const record = asRecord(edge);\n const fromId =\n readString(record.sourceGlobalId) ??\n readString(record.fromGlobalId) ??\n readString(record.fromNodeId);\n const toId =\n readString(record.targetGlobalId) ??\n readString(record.toGlobalId) ??\n readString(record.toNodeId);\n\n if (input.direction === \"up\") {\n return fromId === startGlobalId;\n }\n return toId === startGlobalId;\n });\n\n return {\n startNode: startGlobalId,\n direction: input.direction,\n maxDepth: input.maxDepth,\n nodes: Array.isArray(payload.nodes) ? payload.nodes : [],\n edges: filteredEdges,\n depth:\n typeof payload.depth === \"number\"\n ? payload.depth\n : Array.isArray(payload.nodes)\n ? payload.nodes.reduce((maxDepth, node) => {\n const depth = asRecord(node).depth;\n return typeof depth === \"number\" && Number.isFinite(depth)\n ? Math.max(maxDepth, depth)\n : maxDepth;\n }, 0)\n : 0,\n };\n}\n\nfunction createGatewayEdgesPort(authContext: GatewayAuthContext): EdgePort {\n return {\n async createEdge(input) {\n const sourceNode = await fetchNodeWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n input.sourceRawId\n );\n const targetNode = await fetchNodeWithQuery(\n (fn, args) => authContext.convex.query(fn as any, args),\n input.targetRawId\n );\n const inferredTopicId =\n input.topicId ??\n resolveTopicIdFromNode(sourceNode) ??\n resolveTopicIdFromNode(targetNode);\n\n return authContext.convex.mutation(api.epistemicEdges.create, {\n fromNodeId: input.sourceRawId as any,\n toNodeId: input.targetRawId as any,\n edgeType: input.edgeType as any,\n globalId: randomUUID(),\n createdBy: authContext.userId,\n topicId: inferredTopicId as any,\n confidence: input.confidence,\n weight: input.weight,\n context: input.context,\n });\n },\n async listEdgesBySource(args) {\n const sourceNode = await fetchNodeWithQuery(\n (fn, input) => authContext.convex.query(fn as any, input),\n args.sourceRawId\n );\n await ensureTopicAccessWithQuery(\n (fn, input) => authContext.convex.query(fn as any, input),\n resolveTopicIdFromNode(sourceNode),\n authContext.userId,\n \"list\"\n );\n\n const rows = await authContext.convex.query(api.epistemicEdges.getBySourceNode, {\n sourceNodeId: args.sourceRawId as any,\n edgeType: args.edgeType,\n });\n\n return Array.isArray(rows)\n ? rows.slice(0, args.limit ?? rows.length)\n : [];\n },\n traverseEdges(input) {\n return executeTraversal(\n (fn, args) => authContext.convex.query(fn as any, args),\n (fn, args) => authContext.convex.action(fn as any, args),\n authContext.userId,\n input\n );\n },\n };\n}\n\nfunction createMcpEdgesPort(authContext: AuthContext): EdgePort {\n const convex = requireMcpConvex(authContext, \"createMcpEdgesPort\");\n return {\n\n async createEdge(input) {\n const sourceNode = await fetchNodeWithQuery((fn, args) => convex.query(fn, args), input.sourceRawId);\n const targetNode = await fetchNodeWithQuery((fn, args) => convex.query(fn, args), input.targetRawId);\n const inferredTopicId =\n input.topicId ??\n resolveTopicIdFromNode(sourceNode) ??\n resolveTopicIdFromNode(targetNode);\n\n return convex.mutation(api.epistemicEdges.create, {\n fromNodeId: input.sourceRawId as any,\n toNodeId: input.targetRawId as any,\n edgeType: input.edgeType as any,\n globalId: randomUUID(),\n createdBy: authContext.userId,\n topicId: inferredTopicId as any,\n confidence: input.confidence,\n weight: input.weight,\n context: input.context,\n });\n },\n async listEdgesBySource(args) {\n const sourceNode = await fetchNodeWithQuery((fn, input) => convex.query(fn, input), args.sourceRawId);\n await ensureTopicAccessWithQuery(\n (fn, input) => convex.query(fn, input),\n resolveTopicIdFromNode(sourceNode),\n authContext.userId,\n \"list\"\n );\n\n const rows = await convex.query(api.epistemicEdges.getBySourceNode, {\n sourceNodeId: args.sourceRawId as any,\n edgeType: args.edgeType,\n });\n\n return Array.isArray(rows)\n ? rows.slice(0, args.limit ?? rows.length)\n : [];\n },\n traverseEdges(input) {\n return executeTraversal((fn, args) => convex.query(fn, args), (fn, args) => convex.action(fn, args), authContext.userId, input);\n },\n };\n}\n\nexport async function createEdgeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateEdgeInput\n) {\n const payload = await createEdge(createGatewayEdgesPort(authContext), input);\n await emitEdgeEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId ?? \"\",\n resourceId: payload.id,\n data: {\n sourceId: payload.sourceId,\n targetId: payload.targetId,\n edgeType: payload.edgeType,\n confidence: payload.confidence,\n weight: payload.weight,\n context: payload.context,\n },\n });\n return payload;\n}\n\nexport function listEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListEdgesQuery\n) {\n return listEdges(createGatewayEdgesPort(authContext), query);\n}\n\nexport function traverseEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: TraverseEdgesInput\n) {\n return traverseEdges(createGatewayEdgesPort(authContext), input);\n}\n\nexport function updateEdgeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edgeId: string;\n weight?: number;\n confidence?: number;\n context?: string;\n derivationType?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicEdges.update, {\n edgeId: resolveExternalId(input.edgeId) ?? input.edgeId,\n weight: input.weight,\n confidence: input.confidence,\n context: input.context,\n derivationType: input.derivationType,\n userId: authContext.userId,\n });\n}\n\nexport function removeEdgeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edgeId: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicEdges.remove, {\n edgeId: resolveExternalId(input.edgeId) ?? input.edgeId,\n userId: authContext.userId,\n });\n}\n\nexport function removeEdgesBetweenFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n fromNodeId: string;\n toNodeId: string;\n edgeType?: string;\n }\n) {\n void authContext;\n return authContext.convex.mutation(api.epistemicEdges.removeBetween, {\n fromNodeId: resolveExternalId(input.fromNodeId) ?? input.fromNodeId,\n toNodeId: resolveExternalId(input.toNodeId) ?? input.toNodeId,\n edgeType: input.edgeType as any,\n userId: authContext.userId,\n });\n}\n\nexport function batchCreateEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edges: Array<{\n globalId?: string;\n fromNodeId?: string;\n sourceId?: string;\n toNodeId?: string;\n targetId?: string;\n edgeType: string;\n weight?: number;\n confidence?: number;\n context?: string;\n derivationType?: string;\n createdBy?: string;\n topicId?: string;\n }>;\n skipLayerValidation?: boolean;\n }\n) {\n return authContext.convex.mutation(api.epistemicEdges.batchCreate, {\n edges: input.edges.map((edge) => ({\n globalId: edge.globalId ?? randomUUID(),\n fromNodeId:\n resolveExternalId(edge.fromNodeId ?? edge.sourceId) ??\n edge.fromNodeId ??\n edge.sourceId ??\n \"\",\n toNodeId:\n resolveExternalId(edge.toNodeId ?? edge.targetId) ??\n edge.toNodeId ??\n edge.targetId ??\n \"\",\n edgeType: edge.edgeType as any,\n weight: edge.weight,\n confidence: edge.confidence,\n context: edge.context,\n derivationType: edge.derivationType,\n createdBy: edge.createdBy ?? authContext.userId,\n topicId: edge.topicId,\n })),\n skipLayerValidation: input.skipLayerValidation,\n userId: authContext.userId,\n });\n}\n\nexport function deleteEdgesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n edgeIds: string[];\n }\n) {\n void authContext;\n return authContext.convex.mutation(api.epistemicEdges.deleteEdges, {\n edgeIds: input.edgeIds.map((edgeId) => resolveExternalId(edgeId) ?? edgeId),\n userId: authContext.userId,\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n batchCreateEdgesFromGatewayAuth,\n createEdgeFromGatewayAuth,\n deleteEdgesFromGatewayAuth,\n listEdgesFromGatewayAuth,\n removeEdgeFromGatewayAuth,\n removeEdgesBetweenFromGatewayAuth,\n traverseEdgesFromGatewayAuth,\n updateEdgeFromGatewayAuth,\n} from \"@lucern/server-core/edges\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nexport async function handleEdgeCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createEdgeFromGatewayAuth(args.authContext, {\n sourceId: readString(body.sourceId) ?? \"\",\n targetId: readString(body.targetId) ?? \"\",\n edgeType: readString(body.edgeType) ?? \"\",\n topicId: readString(body.topicId),\n confidence: readNumber(body.confidence),\n weight: readNumber(body.weight),\n context: readString(body.context ?? body.reasoning),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to create edge.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n sourceId?: string;\n edgeType?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listEdgesFromGatewayAuth(args.authContext, {\n sourceId: args.query.sourceId ?? \"\",\n edgeType: args.query.edgeType,\n limit: args.query.limit,\n cursor: args.query.cursor,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeTraverse(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await traverseEdgesFromGatewayAuth(args.authContext, {\n startNode: readString(body.startNode) ?? \"\",\n direction: readString(body.direction),\n maxDepth: readNumber(body.maxDepth),\n topicId: readString(body.topicId),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to traverse edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEdgeFromGatewayAuth(args.authContext, {\n edgeId: readString(body.edgeId) ?? \"\",\n weight: readNumber(body.weight),\n confidence: readNumber(body.confidence),\n context: readString(body.context),\n derivationType: readString(body.derivationType),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to update edge.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeRemove(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeEdgeFromGatewayAuth(args.authContext, {\n edgeId: readString(body.edgeId) ?? \"\",\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to remove edge.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgesRemoveBetween(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeEdgesBetweenFromGatewayAuth(args.authContext, {\n fromNodeId:\n readString(body.fromNodeId) ?? readString(body.sourceId) ?? \"\",\n toNodeId: readString(body.toNodeId) ?? readString(body.targetId) ?? \"\",\n edgeType: readString(body.edgeType),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to remove edges between nodes.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeBatchCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const edges = Array.isArray(body.edges)\n ? body.edges\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n globalId: readString(entry.globalId),\n fromNodeId:\n readString(entry.fromNodeId) ?? readString(entry.sourceId),\n sourceId: readString(entry.sourceId),\n toNodeId: readString(entry.toNodeId) ?? readString(entry.targetId),\n targetId: readString(entry.targetId),\n edgeType: readString(entry.edgeType) ?? \"\",\n weight: readNumber(entry.weight),\n confidence: readNumber(entry.confidence),\n context: readString(entry.context),\n derivationType: readString(entry.derivationType),\n createdBy: readString(entry.createdBy),\n topicId: readString(entry.topicId),\n }))\n : [];\n const payload = await batchCreateEdgesFromGatewayAuth(args.authContext, {\n edges,\n skipLayerValidation:\n typeof body.skipLayerValidation === \"boolean\"\n ? body.skipLayerValidation\n : undefined,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to batch create edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEdgeDelete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await deleteEdgesFromGatewayAuth(args.authContext, {\n edgeIds: readStringArray(body.edgeIds) ?? [],\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to delete edges.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\n\nfunction handleEventsError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleEventsList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n after?: string;\n types?: string[];\n startTime?: number;\n endTime?: number;\n limit?: number;\n };\n}) {\n try {\n const payload = await args.authContext.convex.query(\"events:listEvents\" as any, {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: args.query.topicId,\n after: args.query.after,\n types: args.query.types,\n startTime: args.query.startTime,\n endTime: args.query.endTime,\n limit: args.query.limit,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleEventsError(\n error,\n \"Failed to list events.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleEventsReplay(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: {\n topicId?: string;\n webhookId?: string;\n after?: string;\n types?: string[];\n startTime?: number;\n endTime?: number;\n limit?: number;\n };\n}) {\n try {\n const payload = await args.authContext.convex.mutation(\n \"events:replayEvents\" as any,\n {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: args.body.topicId,\n webhookId: args.body.webhookId,\n after: args.body.after,\n types: args.body.types,\n startTime: args.body.startTime,\n endTime: args.body.endTime,\n limit: args.body.limit,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleEventsError(\n error,\n \"Failed to replay events.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\nexport type EvidenceTargetType = \"belief\" | \"question\";\ntype EvidenceRelation = \"supports\" | \"contradicts\" | \"neutral\";\n\nexport type EvidenceRecord = {\n id: string;\n nodeId: string;\n evidenceId: string;\n globalId?: string;\n topicId?: string;\n text: string;\n title?: string;\n kind?: string;\n source?: string;\n sourceType?: string;\n externalSourceType?: string;\n status?: string;\n relation?: EvidenceRelation;\n confidence?: number;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type EvidenceListResult = {\n evidence: EvidenceRecord[];\n nextCursor: null;\n};\n\nexport type EvidenceSearchResult = {\n evidenceId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n source?: string;\n kind?: string;\n relevanceScore: number;\n};\n\nexport type EvidenceSearchPage = {\n results: EvidenceSearchResult[];\n nextCursor: null;\n};\n\nexport type LinkEvidenceResult = {\n edgeId: string;\n evidenceId: string;\n targetId: string;\n targetType: EvidenceTargetType;\n weight: number;\n beliefId?: string;\n questionId?: string;\n};\n\nexport type CreateEvidenceInput = {\n topicId: string;\n text: string;\n source?: string;\n targetId?: string;\n targetType?: EvidenceTargetType;\n weight?: number;\n metadata?: Record<string, unknown>;\n title?: string;\n content?: string;\n contentType?: string;\n kind?: string;\n};\n\nexport type ListEvidenceQuery = {\n topicId?: string;\n targetId?: string;\n limit?: number;\n cursor?: string;\n};\n\nexport type SearchEvidenceQuery = {\n q: string;\n topicId?: string;\n targetId?: string;\n limit?: number;\n cursor?: string;\n};\n\ntype TargetRef = {\n type: EvidenceTargetType;\n rawId: string;\n};\n\ntype EvidenceCreatePortInput = Omit<CreateEvidenceInput, \"targetId\"> & {\n target?: TargetRef;\n weight: number;\n};\n\ntype EvidenceLinkPortInput = {\n evidenceRawId: string;\n targetRawId: string;\n weight: number;\n rationale?: string;\n};\n\nexport type EvidencePort = {\n fetchEvidence: (rawId: string) => Promise<unknown | null>;\n listEvidenceByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n listEvidenceForBelief: (rawBeliefId: string) => Promise<unknown[]>;\n listEvidenceForQuestion: (rawQuestionId: string) => Promise<unknown[]>;\n createEvidence: (input: EvidenceCreatePortInput) => Promise<unknown>;\n linkEvidenceToBelief: (input: EvidenceLinkPortInput) => Promise<unknown>;\n linkEvidenceToQuestion: (input: EvidenceLinkPortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[evidence] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction normalizeWeight(value: unknown, fallback = 1): number {\n const numeric = readNumber(value);\n if (numeric === undefined) {\n return fallback;\n }\n return clampNumber(numeric, -1, 1);\n}\n\nfunction normalizeRelation(value: unknown): EvidenceRelation | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"supports\" ||\n normalized === \"contradicts\" ||\n normalized === \"neutral\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[evidence] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction resolveTargetRef(\n targetId: string,\n targetType?: string\n): TargetRef {\n const normalized = normalizeRequiredString(targetId, \"targetId\");\n const explicitType = readString(targetType)?.toLowerCase();\n if (explicitType) {\n if (explicitType !== \"belief\" && explicitType !== \"question\") {\n throw new Error(\"[evidence] targetType must be belief or question.\");\n }\n return {\n type: explicitType,\n rawId:\n explicitType === \"question\"\n ? decodeExternalId(normalized, \"que\")\n : decodeExternalId(normalized, \"bel\"),\n };\n }\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix === \"que\") {\n return { type: \"question\", rawId: decoded.value };\n }\n if (decoded.prefix === \"bel\") {\n return { type: \"belief\", rawId: decoded.value };\n }\n } catch {\n // Fall through — raw Stack callers still use belief node IDs directly.\n }\n\n return { type: \"belief\", rawId: normalized };\n}\n\nfunction computeSearchScore(\n needle: string,\n evidence: EvidenceRecord\n): number | null {\n const normalizedNeedle = needle.toLowerCase();\n const haystacks = [\n evidence.text,\n evidence.title,\n evidence.source,\n evidence.kind,\n ]\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.toLowerCase());\n\n let bestScore = 0;\n for (const haystack of haystacks) {\n if (haystack === normalizedNeedle) {\n bestScore = Math.max(bestScore, 1);\n continue;\n }\n if (haystack.startsWith(normalizedNeedle)) {\n bestScore = Math.max(bestScore, 0.9);\n continue;\n }\n if (haystack.includes(normalizedNeedle)) {\n bestScore = Math.max(bestScore, 0.75);\n }\n }\n\n return bestScore > 0 ? bestScore : null;\n}\n\nfunction maybeNormalizeForeignId(\n value: unknown,\n prefix: \"bel\" | \"que\"\n): string | undefined {\n const rawId = readString(value);\n if (!rawId) {\n return undefined;\n }\n return encodeId(prefix, decodeExternalId(rawId, prefix));\n}\n\nfunction normalizeEvidenceRecord(value: unknown): EvidenceRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const rawId = decodeExternalId(\n normalizeRequiredString(\n record._id ?? record.nodeId ?? record.evidenceId,\n \"evidenceId\"\n ),\n \"evi\"\n );\n const canonicalId = encodeId(\"evi\", rawId);\n const text =\n readString(record.text) ??\n readString(record.canonicalText) ??\n readString(record.insight) ??\n \"\";\n\n const relation =\n normalizeRelation(record.relation) ??\n normalizeRelation(record.impact) ??\n normalizeRelation(metadata.evidenceRelation);\n\n const confidence =\n readNumber(record.confidence) ??\n readNumber(metadata.confidence) ??\n (() => {\n const weight = readNumber(record.weight);\n return weight === undefined ? undefined : Math.abs(weight);\n })();\n\n const linkedBeliefId =\n maybeNormalizeForeignId(\n record.linkedBeliefId ??\n record.linkedBeliefNodeId ??\n metadata.linkedBeliefNodeId ??\n metadata.linkedBeliefId,\n \"bel\"\n );\n const linkedQuestionId =\n maybeNormalizeForeignId(\n record.questionId ??\n record.sourceQuestionId ??\n metadata.sourceQuestionId,\n \"que\"\n );\n\n return {\n id: canonicalId,\n nodeId: canonicalId,\n evidenceId: canonicalId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n text,\n ...(readString(record.title) ? { title: readString(record.title)! } : {}),\n ...(readString(record.kind) ??\n readString(metadata.kind)\n ? { kind: readString(record.kind) ?? readString(metadata.kind)! }\n : {}),\n ...(readString(record.source) ??\n readString(record.sourceUrl) ??\n readString(record.externalSourceUrl) ??\n readString(metadata.source) ??\n readString(metadata.sourceUrl)\n ? {\n source:\n readString(record.source) ??\n readString(record.sourceUrl) ??\n readString(record.externalSourceUrl) ??\n readString(metadata.source) ??\n readString(metadata.sourceUrl)!,\n }\n : {}),\n ...(readString(record.sourceType)\n ? { sourceType: readString(record.sourceType)! }\n : {}),\n ...(readString(record.externalSourceType) ??\n readString(metadata.externalSourceType)\n ? {\n externalSourceType:\n readString(record.externalSourceType) ??\n readString(metadata.externalSourceType)!,\n }\n : {}),\n ...(readString(record.status) ? { status: readString(record.status)! } : {}),\n ...(relation ? { relation } : {}),\n ...(confidence !== undefined ? { confidence } : {}),\n ...(linkedBeliefId ? { linkedBeliefId } : {}),\n ...(linkedQuestionId ? { linkedQuestionId } : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction dedupeEvidence(records: EvidenceRecord[]): EvidenceRecord[] {\n const byId = new Map<string, EvidenceRecord>();\n for (const record of records) {\n byId.set(record.id, record);\n }\n return [...byId.values()];\n}\n\nfunction extractCreatedRawId(value: unknown): string {\n const record = asRecord(value);\n return decodeExternalId(\n normalizeRequiredString(\n record.nodeId ?? record._id ?? record.evidenceId,\n \"created evidence id\"\n ),\n \"evi\"\n );\n}\n\nfunction normalizeLinkResult(args: {\n result: unknown;\n evidenceRawId: string;\n target: TargetRef;\n weight: number;\n}): LinkEvidenceResult {\n const record = asRecord(args.result);\n const edgeSource =\n readString(record.edgeId) ??\n readString(record.edgeGlobalId) ??\n readString(record._id) ??\n crypto.randomUUID();\n const edgeId = edgeSource.startsWith(\"edg_\")\n ? edgeSource\n : encodeId(\"edg\", edgeSource);\n const targetId = encodeId(args.target.type === \"question\" ? \"que\" : \"bel\", args.target.rawId);\n const evidenceId = encodeId(\"evi\", args.evidenceRawId);\n\n return {\n edgeId,\n evidenceId,\n targetId,\n targetType: args.target.type,\n weight: args.weight,\n ...(args.target.type === \"belief\"\n ? { beliefId: targetId }\n : { questionId: targetId }),\n };\n}\n\nexport async function getEvidence(\n deps: EvidencePort,\n input: { id: string }\n): Promise<EvidenceRecord> {\n const rawId = decodeExternalId(input.id, \"evi\");\n const evidence = await deps.fetchEvidence(rawId);\n if (!evidence) {\n throw new Error(`[evidence.get] Evidence ${input.id} was not found.`);\n }\n return normalizeEvidenceRecord(evidence);\n}\n\nexport async function listEvidence(\n deps: EvidencePort,\n query: ListEvidenceQuery\n): Promise<EvidenceListResult> {\n let rows: unknown[] = [];\n\n if (query.targetId) {\n const target = resolveTargetRef(query.targetId);\n rows =\n target.type === \"question\"\n ? await deps.listEvidenceForQuestion(target.rawId)\n : await deps.listEvidenceForBelief(target.rawId);\n } else {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n rows = await deps.listEvidenceByTopic({\n topicId,\n limit: query.limit,\n });\n }\n\n return {\n evidence: dedupeEvidence(rows.map(normalizeEvidenceRecord)),\n nextCursor: null,\n };\n}\n\nexport async function searchEvidence(\n deps: EvidencePort,\n query: SearchEvidenceQuery\n): Promise<EvidenceSearchPage> {\n const needle = normalizeRequiredString(query.q, \"q\");\n const page = await listEvidence(deps, {\n topicId: query.topicId,\n targetId: query.targetId,\n limit: query.limit,\n cursor: query.cursor,\n });\n\n const results = page.evidence\n .map((evidence) => ({\n evidence,\n score: computeSearchScore(needle, evidence),\n }))\n .filter(\n (entry): entry is { evidence: EvidenceRecord; score: number } =>\n entry.score !== null\n )\n .sort((a, b) => b.score - a.score)\n .slice(0, query.limit ?? 25)\n .map(({ evidence, score }) => ({\n evidenceId: evidence.id,\n nodeId: evidence.nodeId,\n ...(evidence.globalId ? { globalId: evidence.globalId } : {}),\n text: evidence.text,\n ...(evidence.source ? { source: evidence.source } : {}),\n ...(evidence.kind ? { kind: evidence.kind } : {}),\n relevanceScore: score,\n }));\n\n return {\n results,\n nextCursor: null,\n };\n}\n\nexport async function createEvidence(\n deps: EvidencePort,\n input: CreateEvidenceInput\n): Promise<EvidenceRecord> {\n const target = input.targetId\n ? resolveTargetRef(input.targetId, input.targetType)\n : undefined;\n const created = await deps.createEvidence({\n ...input,\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n text: normalizeRequiredString(input.text, \"text\"),\n weight: normalizeWeight(input.weight, 1),\n target,\n });\n\n return getEvidence(deps, {\n id: encodeId(\"evi\", extractCreatedRawId(created)),\n });\n}\n\nexport async function linkEvidence(\n deps: EvidencePort,\n input: {\n evidenceId: string;\n targetId: string;\n targetType?: string;\n weight?: number;\n rationale?: string;\n }\n): Promise<LinkEvidenceResult> {\n const evidenceRawId = decodeExternalId(input.evidenceId, \"evi\");\n const target = resolveTargetRef(input.targetId, input.targetType);\n const weight = normalizeWeight(input.weight, 1);\n\n const result =\n target.type === \"question\"\n ? await deps.linkEvidenceToQuestion({\n evidenceRawId,\n targetRawId: target.rawId,\n weight,\n rationale: readString(input.rationale),\n })\n : await deps.linkEvidenceToBelief({\n evidenceRawId,\n targetRawId: target.rawId,\n weight,\n rationale: readString(input.rationale),\n });\n\n return normalizeLinkResult({\n result,\n evidenceRawId,\n target,\n weight,\n });\n}\n","import { api, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n createEvidence,\n getEvidence,\n linkEvidence,\n listEvidence,\n searchEvidence,\n type CreateEvidenceInput,\n type EvidencePort,\n type LinkEvidenceResult,\n type ListEvidenceQuery,\n type SearchEvidenceQuery,\n} from \"./domain/evidence\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeWeight(value: number | undefined): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return 1;\n }\n return Math.max(-1, Math.min(value, 1));\n}\n\nfunction normalizeQuestionLinkArgs(weight: number | undefined) {\n const normalizedWeight = normalizeWeight(weight);\n return {\n relevance: Math.max(0, Math.min(Math.abs(normalizedWeight), 1)),\n impact:\n normalizedWeight > 0\n ? \"supports\"\n : normalizedWeight < 0\n ? \"contradicts\"\n : \"neutral\",\n impactScore: Math.round(normalizedWeight * 10) / 10,\n } as const;\n}\n\nfunction resolveExternalId(value: string | undefined): string | undefined {\n if (!value) {\n return value;\n }\n try {\n return decodePrefixedId(value).value;\n } catch {\n return value;\n }\n}\n\nasync function resolveEvidenceTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n evidenceId: string\n) {\n const evidence = (await authContext.convex.query(api.epistemicEvidence.getById, {\n evidenceId: evidenceId as any,\n nodeId: evidenceId as any,\n })) as Record<string, unknown> | null;\n return readString(evidence?.topicId);\n}\n\nasync function resolveEvidenceNodeIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n evidenceId: string\n) {\n const evidence = (await authContext.convex.query(api.epistemicEvidence.getById, {\n evidenceId: evidenceId as any,\n nodeId: evidenceId as any,\n })) as Record<string, unknown> | null;\n return (\n readString(evidence?._id) ??\n readString(evidence?.nodeId) ??\n readString(evidence?.evidenceId)\n );\n}\n\nasync function resolveEvidenceTopicIdWithMcpAuth(\n authContext: AuthContext,\n evidenceId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveEvidenceTopicIdWithMcpAuth\");\n const evidence = (await convex.query(api.epistemicEvidence.getById, {\n evidenceId: evidenceId as any,\n nodeId: evidenceId as any,\n })) as Record<string, unknown> | null;\n return readString(evidence?.topicId);\n}\n\nasync function emitEvidenceEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"evidence\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitEvidenceEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitEvidenceEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"evidence\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayEvidencePort(\n authContext: GatewayAuthContext\n): EvidencePort {\n return {\n fetchEvidence(rawId) {\n return authContext.convex.query(api.epistemicEvidence.getById, {\n evidenceId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listEvidenceByTopic(args) {\n return authContext.convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceForBelief(rawBeliefId) {\n return authContext.convex.query(api.epistemicEvidence.getForBelief, {\n beliefNodeId: rawBeliefId as any,\n }) as Promise<unknown[]>;\n },\n listEvidenceForQuestion(rawQuestionId) {\n return authContext.convex.query(\n api.questionEvidenceLinks.getEvidenceWithDetails,\n {\n questionId: rawQuestionId as any,\n }\n ) as Promise<unknown[]>;\n },\n async createEvidence(input) {\n const created = await authContext.convex.mutation(api.epistemicEvidence.create, {\n topicId: input.topicId,\n text: input.text,\n title: input.title,\n content: input.content,\n contentType: input.contentType,\n kind: input.kind,\n sourceUrl: input.source,\n metadata: input.metadata,\n userId: authContext.userId,\n });\n\n const createdRecord =\n created && typeof created === \"object\"\n ? (created as Record<string, unknown>)\n : {};\n const rawId = String(\n createdRecord.nodeId ?? createdRecord._id ?? createdRecord.evidenceId ?? \"\"\n );\n\n if (!rawId || !input.target) {\n return created;\n }\n\n if (input.target.type === \"question\") {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n await authContext.convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.target.rawId as any,\n insightId: rawId as any,\n helpsAnswer: true,\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n } else {\n await authContext.convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.target.rawId as any,\n insightId: rawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n userId: authContext.userId,\n });\n }\n\n return created;\n },\n linkEvidenceToBelief(input) {\n return authContext.convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n linkEvidenceToQuestion(input) {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n return authContext.convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n helpsAnswer: true,\n rationale: input.rationale,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n },\n };\n}\n\nfunction createMcpEvidencePort(authContext: AuthContext): EvidencePort {\n const convex = requireMcpConvex(authContext, \"createMcpEvidencePort\");\n return {\n fetchEvidence(rawId) {\n return convex.query(api.epistemicEvidence.getById, {\n evidenceId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listEvidenceByTopic(args) {\n return convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceForBelief(rawBeliefId) {\n return convex.query(api.epistemicEvidence.getForBelief, {\n beliefNodeId: rawBeliefId as any,\n }) as Promise<unknown[]>;\n },\n listEvidenceForQuestion(rawQuestionId) {\n return convex.query(api.questionEvidenceLinks.getEvidenceWithDetails, {\n questionId: rawQuestionId as any,\n }) as Promise<unknown[]>;\n },\n async createEvidence(input) {\n const created = await convex.mutation(api.epistemicEvidence.create, {\n topicId: input.topicId,\n text: input.text,\n title: input.title,\n content: input.content,\n contentType: input.contentType,\n kind: input.kind,\n sourceUrl: input.source,\n metadata: input.metadata,\n userId: authContext.userId,\n });\n\n const createdRecord =\n created && typeof created === \"object\"\n ? (created as Record<string, unknown>)\n : {};\n const rawId = String(\n createdRecord.nodeId ?? createdRecord._id ?? createdRecord.evidenceId ?? \"\"\n );\n\n if (!rawId || !input.target) {\n return created;\n }\n\n if (input.target.type === \"question\") {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n await convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.target.rawId as any,\n insightId: rawId as any,\n helpsAnswer: true,\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n } else {\n await convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.target.rawId as any,\n insightId: rawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n userId: authContext.userId,\n });\n }\n\n return created;\n },\n linkEvidenceToBelief(input) {\n return convex.mutation(api.epistemicBeliefs.linkEvidence, {\n beliefNodeId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n type: input.weight < 0 ? \"contradicting\" : \"supporting\",\n rationale: input.rationale,\n userId: authContext.userId,\n });\n },\n linkEvidenceToQuestion(input) {\n const linkArgs = normalizeQuestionLinkArgs(input.weight);\n return convex.mutation(api.questionEvidenceLinks.create, {\n questionId: input.targetRawId as any,\n insightId: input.evidenceRawId as any,\n helpsAnswer: true,\n rationale: input.rationale,\n createdBy: authContext.userId,\n ...linkArgs,\n });\n },\n };\n}\n\nexport function listEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListEvidenceQuery\n){\n return listEvidence(createGatewayEvidencePort(authContext), query);\n}\n\nexport function getEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getEvidence(createGatewayEvidencePort(authContext), { id });\n}\n\nexport async function createEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateEvidenceInput\n) {\n const payload = await createEvidence(createGatewayEvidencePort(authContext), input);\n const topicId = payload.topicId ?? input.topicId;\n\n await emitEvidenceEventFromGatewayAuth(authContext, {\n topicId,\n type: \"evidence.created\",\n resourceId: payload.id,\n data: {\n text: payload.text,\n title: payload.title,\n source: payload.source ?? input.source,\n kind: payload.kind ?? input.kind,\n metadata: input.metadata,\n },\n });\n\n if (input.targetId) {\n await emitEvidenceEventFromGatewayAuth(authContext, {\n topicId,\n type: \"evidence.linked\",\n resourceId: payload.id,\n data: {\n targetId: input.targetId,\n targetType: input.targetType ?? (payload.linkedQuestionId ? \"question\" : \"belief\"),\n weight: normalizeWeight(input.weight),\n rationale:\n typeof input.metadata?.rationale === \"string\"\n ? input.metadata.rationale\n : undefined,\n beliefId: payload.linkedBeliefId,\n questionId: payload.linkedQuestionId,\n },\n });\n }\n\n return payload;\n}\n\nexport async function linkEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n evidenceId: string;\n targetId: string;\n targetType?: string;\n weight?: number;\n rationale?: string;\n }\n): Promise<LinkEvidenceResult> {\n const payload = await linkEvidence(createGatewayEvidencePort(authContext), input);\n await emitEvidenceEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveEvidenceTopicIdWithGatewayAuth(authContext, payload.evidenceId)) ??\n \"\",\n type: \"evidence.linked\",\n resourceId: payload.evidenceId,\n data: {\n edgeId: payload.edgeId,\n targetId: payload.targetId,\n targetType: payload.targetType,\n weight: payload.weight,\n beliefId: payload.beliefId,\n questionId: payload.questionId,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport function searchEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: SearchEvidenceQuery\n) {\n return searchEvidence(createGatewayEvidencePort(authContext), query);\n}\n\nexport async function updateEvidenceStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n status: \"active\" | \"archived\" | \"acted_on\";\n }\n) {\n const resolvedNodeId = await resolveEvidenceNodeIdWithGatewayAuth(\n authContext,\n resolveExternalId(\n input.id ?? input.nodeId ?? input.evidenceId ?? input.insightId ?? \"\"\n ) ?? \"\"\n );\n\n return authContext.convex.mutation(api.epistemicEvidence.updateStatus, {\n nodeId: (resolvedNodeId ?? input.nodeId ?? input.id) as any,\n status: input.status,\n userId: authContext.userId,\n });\n}\n\nexport function updateEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n text?: string;\n kind?: string;\n tags?: string[];\n externalSourceUrl?: string;\n verificationStatus?: string;\n }\n) {\n const evidenceId =\n resolveExternalId(\n input.id ?? input.evidenceId ?? input.insightId ?? input.nodeId ?? \"\"\n ) ?? \"\";\n\n return authContext.convex.mutation(api.epistemicEvidence.update, {\n insightId: evidenceId,\n text: input.text,\n kind: input.kind,\n tags: input.tags,\n externalSourceUrl: input.externalSourceUrl,\n verificationStatus: input.verificationStatus,\n userId: authContext.userId,\n });\n}\n\nexport function flagEvidenceAsIncorrectFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n reason: string;\n suggestedCorrection?: string;\n }\n) {\n const evidenceId =\n resolveExternalId(\n input.id ?? input.evidenceId ?? input.insightId ?? input.nodeId ?? \"\"\n ) ?? \"\";\n\n return authContext.convex.mutation(api.epistemicEvidence.flagAsIncorrect, {\n insightId: evidenceId as any,\n reason: input.reason,\n suggestedCorrection: input.suggestedCorrection,\n userId: authContext.userId,\n });\n}\n\nexport function removeEvidenceFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n }\n) {\n const evidenceId =\n resolveExternalId(\n input.id ?? input.evidenceId ?? input.insightId ?? input.nodeId ?? \"\"\n ) ?? \"\";\n\n return authContext.convex.mutation(api.epistemicEvidence.remove, {\n insightId: evidenceId,\n userId: authContext.userId,\n });\n}\n\nexport async function updateEvidenceVerificationStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n evidenceId?: string;\n insightId?: string;\n verificationHash: string;\n verificationStatus: string;\n lastVerificationId?: string;\n }\n) {\n const resolvedNodeId = await resolveEvidenceNodeIdWithGatewayAuth(\n authContext,\n resolveExternalId(\n input.id ?? input.nodeId ?? input.evidenceId ?? input.insightId ?? \"\"\n ) ?? \"\"\n );\n\n return authContext.convex.mutation(api.epistemicEvidence.updateVerificationStatus, {\n nodeId: (resolvedNodeId ?? input.nodeId ?? input.id) as any,\n verificationHash: input.verificationHash,\n verificationStatus: input.verificationStatus,\n lastVerificationId: input.lastVerificationId as any,\n userId: authContext.userId,\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n createEvidenceFromGatewayAuth,\n flagEvidenceAsIncorrectFromGatewayAuth,\n getEvidenceFromGatewayAuth,\n linkEvidenceFromGatewayAuth,\n listEvidenceFromGatewayAuth,\n removeEvidenceFromGatewayAuth,\n searchEvidenceFromGatewayAuth,\n updateEvidenceFromGatewayAuth,\n updateEvidenceStatusFromGatewayAuth,\n updateEvidenceVerificationStatusFromGatewayAuth,\n} from \"@lucern/server-core/evidence\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nexport async function handleEvidenceCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createEvidenceFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n text: readString(body.text) ?? \"\",\n source: readString(body.source),\n targetId: readString(body.targetId),\n targetType: readString(body.targetType) as \"belief\" | \"question\" | undefined,\n weight: readNumber(body.weight),\n metadata: asRecord(body.metadata),\n title: readString(body.title),\n content: readString(body.content),\n contentType: readString(body.contentType),\n kind: readString(body.kind),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to create evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n evidenceId: string;\n}) {\n try {\n const payload = await getEvidenceFromGatewayAuth(\n args.authContext,\n args.evidenceId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n targetId?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listEvidenceFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceLink(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n evidenceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await linkEvidenceFromGatewayAuth(args.authContext, {\n evidenceId: args.evidenceId,\n targetId: readString(body.targetId) ?? \"\",\n targetType: readString(body.targetType),\n weight: readNumber(body.weight),\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to link evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceSearch(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await searchEvidenceFromGatewayAuth(args.authContext, {\n q: readString(body.q) ?? \"\",\n topicId: readString(body.topicId),\n targetId: readString(body.targetId),\n limit: readNumber(body.limit),\n cursor: readString(body.cursor),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to search evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceUpdateStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEvidenceStatusFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n status:\n (readString(body.status) as \"active\" | \"archived\" | \"acted_on\") ??\n \"active\",\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update evidence status.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEvidenceFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n text: readString(body.text),\n kind: readString(body.kind),\n tags: readStringArray(body.tags),\n externalSourceUrl:\n readString(body.externalSourceUrl) ?? readString(body.sourceUrl),\n verificationStatus: readString(body.verificationStatus),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to update evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceFlagIncorrect(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await flagEvidenceAsIncorrectFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n reason: readString(body.reason) ?? \"\",\n suggestedCorrection: readString(body.suggestedCorrection),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to flag evidence as incorrect.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceRemove(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeEvidenceFromGatewayAuth(args.authContext, {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to remove evidence.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleEvidenceUpdateVerificationStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateEvidenceVerificationStatusFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.evidenceId) ??\n readString(body.insightId),\n verificationHash: readString(body.verificationHash) ?? \"\",\n verificationStatus: readString(body.verificationStatus) ?? \"\",\n lastVerificationId: readString(body.lastVerificationId),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update evidence verification status.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import { encodePrefixedId } from \"@lucern/contracts\";\n\ntype GraphDirection = \"up\" | \"down\" | \"both\";\n\ntype GraphNodeRecord = Record<string, unknown>;\ntype GraphEdgeRecord = Record<string, unknown>;\n\ntype GraphBeliefGapRecord = {\n beliefId: string;\n text: string;\n confidence: number | null;\n suggestedQuestions: string[];\n};\n\nexport type GraphNeighborhoodInput = {\n globalId?: string;\n globalIds?: string[];\n maxDepth?: number;\n};\n\nexport type GraphNeighborhoodResult = {\n nodes: GraphNodeRecord[];\n edges: GraphEdgeRecord[];\n depth: number;\n};\n\nexport type GraphTraverseInput = {\n startNode: string;\n direction?: string;\n maxDepth?: number;\n topicId?: string;\n};\n\nexport type GraphTraverseResult = {\n startNode: string;\n direction: GraphDirection;\n maxDepth: number;\n nodes: GraphNodeRecord[];\n edges: GraphEdgeRecord[];\n depth: number;\n topicId?: string;\n};\n\nexport type GraphAnalyzeInput = {\n topicId: string;\n metric?: string;\n limit?: number;\n};\n\nexport type GraphAnalyzeResult = {\n topicId: string;\n metric: string;\n payload: Record<string, unknown>;\n};\n\nexport type GraphBiasInput = {\n topicId: string;\n threshold?: number;\n limit?: number;\n};\n\nexport type GraphBiasBelief = {\n nodeId: string;\n biasScore: number;\n riskLevel: string;\n supportingCount: number;\n challengingCount: number;\n};\n\nexport type GraphBiasResult = {\n topicId: string;\n metric: \"confirmation_bias\";\n threshold: number;\n beliefs: GraphBiasBelief[];\n payload: Record<string, unknown>;\n};\n\nexport type GraphGapsInput = {\n topicId: string;\n minConfidence?: number;\n};\n\nexport type GraphGapsResult = {\n topicId: string;\n gaps: GraphBeliefGapRecord[];\n totalGaps: number;\n};\n\ntype GraphBeliefRecord = {\n beliefId?: string;\n nodeId?: string;\n topicId?: string;\n text?: string;\n canonicalText?: string;\n confidence?: number | null;\n};\n\ntype GraphQuestionRecord = {\n questionId?: string;\n nodeId?: string;\n linkedBeliefId?: string;\n};\n\ntype GraphTestingEdgeRecord = {\n fromNodeId?: string;\n toNodeId?: string;\n edgeType?: string;\n};\n\nexport type GraphFalsifyInput = {\n topicId?: string;\n beliefId?: string;\n beliefIds?: string[];\n minConfidence?: number;\n};\n\nexport type GraphFalsificationQuestion = {\n questionText: string;\n falsificationPotential: number;\n targetBeliefId: string;\n targetBeliefText: string;\n};\n\nexport type GraphFalsifyResult = {\n topicId: string;\n questions: GraphFalsificationQuestion[];\n};\n\nexport type GraphPort = {\n neighborhood: (input: {\n globalIds: string[];\n maxDepth: number;\n }) => Promise<unknown>;\n traverse: (input: {\n startNode: string;\n direction: GraphDirection;\n maxDepth: number;\n topicId?: string;\n }) => Promise<unknown>;\n analyze: (input: {\n topicId: string;\n metric: string;\n limit?: number;\n }) => Promise<unknown>;\n bias: (input: {\n topicId: string;\n threshold: number;\n limit?: number;\n }) => Promise<unknown>;\n listBeliefs: (input: {\n topicId: string;\n minConfidence?: number;\n limit?: number;\n }) => Promise<GraphBeliefRecord[]>;\n fetchBelief: (input: { beliefId: string }) => Promise<GraphBeliefRecord | null>;\n listQuestions: (input: {\n topicId: string;\n limit?: number;\n }) => Promise<GraphQuestionRecord[]>;\n listTestingEdges: (input: { topicId: string }) => Promise<GraphTestingEdgeRecord[]>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asRecordArray(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value)\n ? value.filter(\n (entry): entry is Record<string, unknown> =>\n Boolean(entry) && typeof entry === \"object\" && !Array.isArray(entry)\n )\n : [];\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[graph] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction normalizeDepth(value: unknown, fallback = 2): number {\n const parsed = readNumber(value);\n if (parsed === undefined) {\n return fallback;\n }\n return Math.max(1, Math.min(Math.floor(parsed), 10));\n}\n\nfunction normalizeDirection(value: unknown): GraphDirection {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"up\" || normalized === \"down\") {\n return normalized;\n }\n return \"both\";\n}\n\nfunction normalizeMetric(value: unknown): string {\n return readString(value) ?? \"graph_stats\";\n}\n\nfunction normalizeThreshold(value: unknown): number {\n const parsed = readNumber(value);\n if (parsed === undefined) {\n return 0.7;\n }\n return Math.max(0, Math.min(parsed, 1));\n}\n\nfunction normalizeGlobalIds(input: GraphNeighborhoodInput): string[] {\n const ids = new Set<string>();\n const direct = readString(input.globalId);\n if (direct) {\n ids.add(direct);\n }\n for (const candidate of input.globalIds ?? []) {\n const normalized = readString(candidate);\n if (normalized) {\n ids.add(normalized);\n }\n }\n return [...ids];\n}\n\nfunction normalizeGraphNode(value: unknown): GraphNodeRecord {\n return asRecord(value);\n}\n\nfunction normalizeGraphEdge(value: unknown): GraphEdgeRecord {\n return asRecord(value);\n}\n\nfunction normalizeNeighborhoodResult(\n value: unknown,\n maxDepth: number\n): GraphNeighborhoodResult {\n const payload = asRecord(value);\n return {\n nodes: asRecordArray(payload.nodes).map(normalizeGraphNode),\n edges: asRecordArray(payload.edges).map(normalizeGraphEdge),\n depth: normalizeDepth(payload.depth, maxDepth),\n };\n}\n\nfunction normalizeTraverseResult(\n value: unknown,\n input: {\n startNode: string;\n direction: GraphDirection;\n maxDepth: number;\n topicId?: string;\n }\n): GraphTraverseResult {\n const payload = asRecord(value);\n return {\n startNode: readString(payload.startNode) ?? input.startNode,\n direction: normalizeDirection(payload.direction ?? input.direction),\n maxDepth: normalizeDepth(payload.maxDepth, input.maxDepth),\n nodes: asRecordArray(payload.nodes).map(normalizeGraphNode),\n edges: asRecordArray(payload.edges).map(normalizeGraphEdge),\n depth: normalizeDepth(payload.depth, input.maxDepth),\n ...(readString(payload.topicId) ?? readString(input.topicId)\n ? { topicId: readString(payload.topicId) ?? readString(input.topicId)! }\n : {}),\n };\n}\n\nfunction normalizeAnalyzeResult(\n value: unknown,\n input: { topicId: string; metric: string }\n): GraphAnalyzeResult {\n const payload = asRecord(value);\n return {\n topicId: readString(payload.topicId) ?? input.topicId,\n metric: readString(payload.metric) ?? input.metric,\n payload: asRecord(payload.payload),\n };\n}\n\nfunction normalizeBiasBelief(\n value: unknown,\n threshold: number\n): GraphBiasBelief {\n const record = asRecord(value);\n return {\n nodeId: readString(record.nodeId) ?? \"\",\n biasScore: readNumber(record.biasScore) ?? threshold,\n riskLevel: readString(record.riskLevel) ?? \"moderate\",\n supportingCount: readNumber(record.supportingCount) ?? 0,\n challengingCount: readNumber(record.challengingCount) ?? 0,\n };\n}\n\nfunction normalizeBiasResult(\n value: unknown,\n input: { topicId: string; threshold: number }\n): GraphBiasResult {\n const payload = asRecord(value);\n const nestedPayload = asRecord(payload.payload);\n const beliefsSource =\n asRecordArray(payload.beliefs).length > 0\n ? asRecordArray(payload.beliefs)\n : asRecordArray(nestedPayload.results).length > 0\n ? asRecordArray(nestedPayload.results)\n : asRecordArray(nestedPayload.beliefs);\n\n return {\n topicId: readString(payload.topicId) ?? input.topicId,\n metric: \"confirmation_bias\",\n threshold:\n readNumber(payload.threshold) ?? readNumber(nestedPayload.threshold) ?? input.threshold,\n beliefs: beliefsSource.map((belief) => normalizeBiasBelief(belief, input.threshold)),\n payload: nestedPayload,\n };\n}\n\nfunction canonicalBeliefId(value: unknown): string | undefined {\n const id = readString(value);\n if (!id) {\n return undefined;\n }\n return id.startsWith(\"bel_\") ? id : encodePrefixedId(\"bel\", id);\n}\n\nfunction canonicalQuestionId(value: unknown): string | undefined {\n const id = readString(value);\n if (!id) {\n return undefined;\n }\n return id.startsWith(\"que_\") ? id : encodePrefixedId(\"que\", id);\n}\n\nexport async function graphNeighborhood(\n deps: GraphPort,\n input: GraphNeighborhoodInput\n): Promise<GraphNeighborhoodResult> {\n const globalIds = normalizeGlobalIds(input);\n if (globalIds.length === 0) {\n throw new Error(\"[graph.neighborhood] globalId or globalIds is required.\");\n }\n const maxDepth = normalizeDepth(input.maxDepth, 2);\n const payload = await deps.neighborhood({ globalIds, maxDepth });\n return normalizeNeighborhoodResult(payload, maxDepth);\n}\n\nexport async function graphTraverse(\n deps: GraphPort,\n input: GraphTraverseInput\n): Promise<GraphTraverseResult> {\n const startNode = normalizeRequiredString(input.startNode, \"startNode\");\n const direction = normalizeDirection(input.direction);\n const maxDepth = normalizeDepth(input.maxDepth, 3);\n const topicId = readString(input.topicId);\n const payload = await deps.traverse({\n startNode,\n direction,\n maxDepth,\n topicId,\n });\n\n return normalizeTraverseResult(payload, {\n startNode,\n direction,\n maxDepth,\n topicId,\n });\n}\n\nexport async function graphAnalyze(\n deps: GraphPort,\n input: GraphAnalyzeInput\n): Promise<GraphAnalyzeResult> {\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const metric = normalizeMetric(input.metric);\n const payload = await deps.analyze({\n topicId,\n metric,\n limit: readNumber(input.limit),\n });\n return normalizeAnalyzeResult(payload, { topicId, metric });\n}\n\nexport async function graphBias(\n deps: GraphPort,\n input: GraphBiasInput\n): Promise<GraphBiasResult> {\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const threshold = normalizeThreshold(input.threshold);\n const payload = await deps.bias({\n topicId,\n threshold,\n limit: readNumber(input.limit),\n });\n return normalizeBiasResult(payload, { topicId, threshold });\n}\n\nexport async function graphGaps(\n deps: GraphPort,\n input: GraphGapsInput\n): Promise<GraphGapsResult> {\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const minConfidence = readNumber(input.minConfidence);\n const [beliefs, questions, edges] = await Promise.all([\n deps.listBeliefs({\n topicId,\n minConfidence,\n limit: 500,\n }),\n deps.listQuestions({\n topicId,\n limit: 500,\n }),\n deps.listTestingEdges({ topicId }),\n ]);\n\n const questionIds = new Set(\n questions\n .map((question) => canonicalQuestionId(question.questionId ?? question.nodeId))\n .filter((value): value is string => Boolean(value))\n );\n const testedBeliefIds = new Set(\n questions\n .map((question) => canonicalBeliefId(question.linkedBeliefId))\n .filter((value): value is string => Boolean(value))\n );\n\n for (const edge of edges) {\n if (readString(edge.edgeType) !== \"tests\") {\n continue;\n }\n\n const fromQuestionId = canonicalQuestionId(edge.fromNodeId);\n const toQuestionId = canonicalQuestionId(edge.toNodeId);\n const toBeliefId = canonicalBeliefId(edge.toNodeId);\n const fromBeliefId = canonicalBeliefId(edge.fromNodeId);\n\n if (fromQuestionId && questionIds.has(fromQuestionId) && toBeliefId) {\n testedBeliefIds.add(toBeliefId);\n }\n if (toQuestionId && questionIds.has(toQuestionId) && fromBeliefId) {\n testedBeliefIds.add(fromBeliefId);\n }\n }\n\n const gaps = beliefs\n .map((belief) => {\n const beliefId = canonicalBeliefId(belief.beliefId ?? belief.nodeId);\n if (!beliefId || testedBeliefIds.has(beliefId)) {\n return null;\n }\n const text =\n readString(belief.text) ??\n readString(belief.canonicalText) ??\n \"\";\n return {\n beliefId,\n text,\n confidence: readNumber(belief.confidence) ?? null,\n suggestedQuestions: [`What evidence would falsify: ${text}?`],\n };\n })\n .filter((gap): gap is GraphBeliefGapRecord => Boolean(gap));\n\n return {\n topicId,\n gaps,\n totalGaps: gaps.length,\n };\n}\n\nexport async function graphFalsify(\n deps: GraphPort,\n input: GraphFalsifyInput\n): Promise<GraphFalsifyResult> {\n const explicitBeliefIds = [\n readString(input.beliefId),\n ...(Array.isArray(input.beliefIds) ? input.beliefIds : []),\n ].filter((value): value is string => Boolean(value));\n\n let topicId = readString(input.topicId);\n if (!topicId) {\n const firstBeliefId = explicitBeliefIds[0];\n if (!firstBeliefId) {\n throw new Error(\"[graph] topicId or beliefId is required.\");\n }\n\n const belief = await deps.fetchBelief({\n beliefId: canonicalBeliefId(firstBeliefId) ?? firstBeliefId,\n });\n topicId = readString(belief?.topicId);\n if (!topicId) {\n throw new Error(\n \"[graph] Unable to resolve topicId from belief. Pass topicId explicitly.\"\n );\n }\n }\n\n const beliefFilter = new Set(\n explicitBeliefIds\n .map((beliefId) => canonicalBeliefId(beliefId))\n .filter((beliefId): beliefId is string => Boolean(beliefId))\n );\n const gaps = await graphGaps(deps, {\n topicId,\n minConfidence: input.minConfidence,\n });\n\n return {\n topicId,\n questions: gaps.gaps\n .filter((gap) => beliefFilter.size === 0 || beliefFilter.has(gap.beliefId))\n .flatMap((gap) =>\n gap.suggestedQuestions.map((questionText) => ({\n questionText,\n falsificationPotential: 0.5,\n targetBeliefId: gap.beliefId,\n targetBeliefText: gap.text,\n }))\n ),\n };\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype QuestionStatus = \"open\" | \"researching\" | \"answered\" | \"parked\" | \"closed\";\ntype QuestionPriority = \"low\" | \"medium\" | \"high\" | \"urgent\";\ntype AnswerConfidence = \"weak\" | \"medium\" | \"strong\";\n\nexport type QuestionRecord = {\n id: string;\n nodeId: string;\n questionId: string;\n globalId?: string;\n topicId?: string;\n text: string;\n status: QuestionStatus;\n priority: QuestionPriority;\n category?: string;\n linkedBeliefId?: string;\n linkedWorktreeId?: string;\n answer?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type QuestionListResult = {\n questions: QuestionRecord[];\n nextCursor: null;\n};\n\nexport type QuestionAnswerResult = {\n questionId: string;\n answerId: string;\n status: \"answered\";\n};\n\nexport type QuestionArchiveResult = QuestionRecord & {\n previousStatus: string;\n newStatus: \"archived\";\n};\n\nexport type CreateQuestionInput = {\n topicId: string;\n text: string;\n priority?: string;\n linkedBeliefId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type ListQuestionsQuery = {\n topicId?: string;\n status?: string;\n priority?: string;\n worktreeId?: string;\n limit?: number;\n cursor?: string;\n};\n\ntype QuestionCreatePortInput = {\n topicId: string;\n text: string;\n priority?: QuestionPriority;\n linkedBeliefRawId?: string;\n metadata?: Record<string, unknown>;\n};\n\ntype QuestionRefinePortInput = {\n questionRawId: string;\n text: string;\n rationale?: string;\n};\n\ntype QuestionStatusPortInput = {\n questionRawId: string;\n status: QuestionStatus;\n rationale?: string;\n};\n\ntype QuestionAnswerPortInput = {\n questionRawId: string;\n topicId: string;\n text: string;\n confidence?: AnswerConfidence;\n evidenceRawIds?: string[];\n rationale?: string;\n};\n\nexport type QuestionsPort = {\n fetchQuestion: (rawId: string) => Promise<unknown | null>;\n listQuestionsByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n createQuestion: (input: QuestionCreatePortInput) => Promise<unknown>;\n refineQuestion: (input: QuestionRefinePortInput) => Promise<unknown>;\n updateQuestionStatus: (input: QuestionStatusPortInput) => Promise<unknown>;\n createAnswer: (input: QuestionAnswerPortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[questions] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, expectedPrefix?: string): string {\n const normalized = normalizeRequiredString(id, \"id\");\n try {\n const decoded = decodePrefixedId(normalized);\n if (expectedPrefix && decoded.prefix !== expectedPrefix) {\n throw new Error(\n `[questions] Expected ${expectedPrefix}_ identifier, received ${normalized}.`\n );\n }\n return decoded.value;\n } catch {\n return normalized;\n }\n}\n\nfunction encodeId(prefix: string, rawId: string): string {\n return encodePrefixedId(prefix, normalizeRequiredString(rawId, \"rawId\"));\n}\n\nfunction normalizeQuestionStatus(value: unknown): QuestionStatus {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"open\":\n case \"active\":\n return \"open\";\n case \"researching\":\n case \"in_progress\":\n return \"researching\";\n case \"answered\":\n return \"answered\";\n case \"parked\":\n return \"parked\";\n case \"archived\":\n case \"closed\":\n return \"closed\";\n default:\n return \"open\";\n }\n}\n\nfunction normalizeQuestionPriority(value: unknown): QuestionPriority {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"critical\":\n case \"urgent\":\n return \"urgent\";\n case \"high\":\n return \"high\";\n case \"low\":\n return \"low\";\n default:\n return \"medium\";\n }\n}\n\nfunction normalizeAnswerConfidence(value: unknown): AnswerConfidence | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"weak\" || normalized === \"medium\" || normalized === \"strong\") {\n return normalized;\n }\n return undefined;\n}\n\nfunction maybeNormalizeBeliefId(value: unknown): string | undefined {\n const rawId = readString(value);\n if (!rawId) {\n return undefined;\n }\n return encodeId(\"bel\", decodeExternalId(rawId, \"bel\"));\n}\n\nfunction normalizeQuestionRecord(value: unknown): QuestionRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const rawId = decodeExternalId(\n normalizeRequiredString(\n record._id ?? record.nodeId ?? record.questionId,\n \"questionId\"\n ),\n \"que\"\n );\n const canonicalId = encodeId(\"que\", rawId);\n const linkedBeliefId = maybeNormalizeBeliefId(\n record.linkedBeliefId ??\n record.linkedBeliefNodeId ??\n record.beliefId ??\n metadata.linkedBeliefId ??\n metadata.linkedBeliefNodeId ??\n metadata.beliefId\n );\n\n return {\n id: canonicalId,\n nodeId: canonicalId,\n questionId: canonicalId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n text:\n readString(record.text) ??\n readString(record.question) ??\n readString(record.canonicalText) ??\n \"\",\n status: normalizeQuestionStatus(\n record.status ?? metadata.questionStatus ?? metadata.status\n ),\n priority: normalizeQuestionPriority(record.priority ?? metadata.priority),\n ...(readString(record.category) ?? readString(metadata.category)\n ? {\n category:\n readString(record.category) ?? readString(metadata.category)!,\n }\n : {}),\n ...(linkedBeliefId ? { linkedBeliefId } : {}),\n ...(readString(record.linkedWorktreeId) ??\n readString(metadata.linkedWorktreeId)\n ? {\n linkedWorktreeId:\n readString(record.linkedWorktreeId) ??\n readString(metadata.linkedWorktreeId)!,\n }\n : {}),\n ...(readString(record.answer) ?? readString(metadata.answer)\n ? {\n answer: readString(record.answer) ?? readString(metadata.answer)!,\n }\n : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nfunction dedupeQuestions(records: QuestionRecord[]): QuestionRecord[] {\n const byId = new Map<string, QuestionRecord>();\n for (const record of records) {\n byId.set(record.id, record);\n }\n return [...byId.values()];\n}\n\nfunction extractQuestionRawId(value: unknown): string {\n const record = asRecord(value);\n return decodeExternalId(\n normalizeRequiredString(\n record.nodeId ?? record._id ?? record.questionId,\n \"created question id\"\n ),\n \"que\"\n );\n}\n\nfunction extractAnswerId(value: unknown): string {\n const record = asRecord(value);\n return (\n readString(record.answerId) ??\n readString(record.nodeId) ??\n readString(record.globalId) ??\n crypto.randomUUID()\n );\n}\n\nasync function fetchNormalizedQuestion(\n deps: QuestionsPort,\n rawId: string\n): Promise<QuestionRecord> {\n const question = await deps.fetchQuestion(rawId);\n if (!question) {\n throw new Error(`[questions.get] Question ${rawId} was not found.`);\n }\n return normalizeQuestionRecord(question);\n}\n\nexport async function createQuestion(\n deps: QuestionsPort,\n input: CreateQuestionInput\n): Promise<QuestionRecord> {\n const created = await deps.createQuestion({\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n text: normalizeRequiredString(input.text, \"text\"),\n priority:\n input.priority !== undefined\n ? normalizeQuestionPriority(input.priority)\n : undefined,\n linkedBeliefRawId: input.linkedBeliefId\n ? decodeExternalId(input.linkedBeliefId, \"bel\")\n : undefined,\n metadata: input.metadata,\n });\n\n return fetchNormalizedQuestion(deps, extractQuestionRawId(created));\n}\n\nexport async function getQuestion(\n deps: QuestionsPort,\n input: { id: string }\n): Promise<QuestionRecord> {\n return fetchNormalizedQuestion(deps, decodeExternalId(input.id, \"que\"));\n}\n\nexport async function listQuestions(\n deps: QuestionsPort,\n query: ListQuestionsQuery\n): Promise<QuestionListResult> {\n const topicId = normalizeRequiredString(query.topicId, \"topicId\");\n const requestedStatus =\n query.status !== undefined ? normalizeQuestionStatus(query.status) : undefined;\n const requestedPriority =\n query.priority !== undefined\n ? normalizeQuestionPriority(query.priority)\n : undefined;\n const worktreeId = readString(query.worktreeId);\n const rows = await deps.listQuestionsByTopic({\n topicId,\n limit: query.limit,\n });\n\n return {\n questions: dedupeQuestions(rows.map(normalizeQuestionRecord)).filter(\n (question) => {\n if (requestedStatus && question.status !== requestedStatus) {\n return false;\n }\n if (requestedPriority && question.priority !== requestedPriority) {\n return false;\n }\n if (worktreeId && question.linkedWorktreeId !== worktreeId) {\n return false;\n }\n return true;\n }\n ),\n nextCursor: null,\n };\n}\n\nexport async function refineQuestion(\n deps: QuestionsPort,\n input: {\n id: string;\n text: string;\n rationale?: string;\n }\n) {\n const rawId = decodeExternalId(input.id, \"que\");\n const before = await fetchNormalizedQuestion(deps, rawId);\n await deps.refineQuestion({\n questionRawId: rawId,\n text: normalizeRequiredString(input.text, \"text\"),\n rationale: readString(input.rationale),\n });\n const after = await fetchNormalizedQuestion(deps, rawId);\n return {\n ...after,\n previousText: before.text,\n updatedText: after.text,\n };\n}\n\nexport async function updateQuestionStatus(\n deps: QuestionsPort,\n input: {\n id: string;\n status: string;\n rationale?: string;\n }\n) {\n const rawId = decodeExternalId(input.id, \"que\");\n const before = await fetchNormalizedQuestion(deps, rawId);\n const status = normalizeQuestionStatus(input.status);\n await deps.updateQuestionStatus({\n questionRawId: rawId,\n status,\n rationale: readString(input.rationale),\n });\n const after = await fetchNormalizedQuestion(deps, rawId);\n return {\n ...after,\n previousStatus: before.status,\n newStatus: after.status,\n };\n}\n\nexport async function archiveQuestion(\n deps: QuestionsPort,\n input: {\n id: string;\n rationale?: string;\n }\n): Promise<QuestionArchiveResult> {\n const result = await updateQuestionStatus(deps, {\n id: input.id,\n status: \"archived\",\n rationale: input.rationale,\n });\n\n return {\n ...result,\n newStatus: \"archived\",\n };\n}\n\nexport async function answerQuestion(\n deps: QuestionsPort,\n input: {\n id: string;\n text: string;\n confidence?: string;\n evidenceIds?: string[];\n rationale?: string;\n }\n): Promise<QuestionAnswerResult> {\n const rawId = decodeExternalId(input.id, \"que\");\n const question = await fetchNormalizedQuestion(deps, rawId);\n if (!question.topicId) {\n throw new Error(\n `[questions.answer] Unable to resolve topic scope for question ${input.id}.`\n );\n }\n\n const answer = await deps.createAnswer({\n questionRawId: rawId,\n topicId: question.topicId,\n text: normalizeRequiredString(input.text, \"text\"),\n confidence: normalizeAnswerConfidence(input.confidence),\n evidenceRawIds: Array.isArray(input.evidenceIds)\n ? input.evidenceIds.map((evidenceId) => decodeExternalId(evidenceId, \"evi\"))\n : undefined,\n rationale: readString(input.rationale),\n });\n\n await deps.updateQuestionStatus({\n questionRawId: rawId,\n status: \"answered\",\n rationale: readString(input.rationale),\n });\n\n return {\n questionId: encodeId(\"que\", rawId),\n answerId: extractAnswerId(answer),\n status: \"answered\",\n };\n}\n","import { api, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n answerQuestion,\n archiveQuestion,\n createQuestion,\n getQuestion,\n listQuestions,\n refineQuestion,\n updateQuestionStatus,\n type CreateQuestionInput,\n type ListQuestionsQuery,\n type QuestionsPort,\n} from \"./domain/questions\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction normalizeAnswerConfidence(\n value: \"weak\" | \"medium\" | \"strong\" | undefined\n): \"weak\" | \"moderate\" | \"strong\" | undefined {\n if (value === \"medium\") {\n return \"moderate\";\n }\n return value;\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction resolveExternalId(value: string | undefined, prefix?: string): string | undefined {\n if (!value) {\n return value;\n }\n try {\n const decoded = decodePrefixedId(value);\n if (prefix && decoded.prefix !== prefix) {\n return value;\n }\n return decoded.value;\n } catch {\n return value;\n }\n}\n\nasync function resolveQuestionTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n questionId: string\n) {\n const question = (await authContext.convex.query(api.epistemicQuestions.getById, {\n questionId: questionId as any,\n nodeId: questionId as any,\n })) as Record<string, unknown> | null;\n return readString(question?.topicId);\n}\n\nasync function resolveQuestionTopicIdWithMcpAuth(\n authContext: AuthContext,\n questionId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveQuestionTopicIdWithMcpAuth\");\n const question = (await convex.query(api.epistemicQuestions.getById, {\n questionId: questionId as any,\n nodeId: questionId as any,\n })) as Record<string, unknown> | null;\n return readString(question?.topicId);\n}\n\nasync function emitQuestionEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"question\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitQuestionEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitQuestionEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"question\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction normalizeLatestAnswerRecord(\n questionId: string,\n answer: unknown | null\n): Record<string, unknown> {\n if (!answer || typeof answer !== \"object\" || Array.isArray(answer)) {\n return {\n nodeId: null,\n answerText: null,\n versionNumber: 0,\n isLatest: false,\n evidenceCount: 0,\n questionNodeId: questionId,\n };\n }\n\n const record = answer as Record<string, unknown>;\n const metadata =\n record.metadata &&\n typeof record.metadata === \"object\" &&\n !Array.isArray(record.metadata)\n ? (record.metadata as Record<string, unknown>)\n : {};\n\n return {\n nodeId: typeof record._id === \"string\" ? record._id : null,\n globalId: typeof record.globalId === \"string\" ? record.globalId : null,\n answerText:\n typeof record.canonicalText === \"string\" ? record.canonicalText : null,\n versionNumber:\n typeof metadata.versionNumber === \"number\" ? metadata.versionNumber : 1,\n isLatest:\n typeof metadata.isLatest === \"boolean\" ? metadata.isLatest : true,\n evidenceCount:\n typeof metadata.evidenceCount === \"number\" ? metadata.evidenceCount : 0,\n confidence:\n typeof record.answerQuality === \"string\"\n ? record.answerQuality\n : typeof metadata.confidence === \"string\"\n ? metadata.confidence\n : \"moderate\",\n answeredBy:\n typeof metadata.answeredBy === \"string\" ? metadata.answeredBy : \"\",\n answerSource:\n typeof metadata.answerSource === \"string\" ? metadata.answerSource : \"\",\n questionNodeId: questionId,\n };\n}\n\nfunction createGatewayQuestionsPort(\n authContext: GatewayAuthContext\n): QuestionsPort {\n return {\n fetchQuestion(rawId) {\n return authContext.convex.query(api.epistemicQuestions.getById, {\n questionId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listQuestionsByTopic(args) {\n return authContext.convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n createQuestion(input) {\n return authContext.convex.mutation(api.epistemicQuestions.create, {\n topicId: input.topicId,\n question: input.text,\n priority: input.priority,\n linkedBeliefNodeId: input.linkedBeliefRawId as any,\n userId: authContext.userId,\n });\n },\n refineQuestion(input) {\n return authContext.convex.mutation(api.epistemicQuestions.updateQuestion, {\n questionId: input.questionRawId as any,\n question: input.text,\n });\n },\n updateQuestionStatus(input) {\n return authContext.convex.mutation(api.epistemicQuestions.updateStatus, {\n questionId: input.questionRawId as any,\n status: input.status,\n userId: authContext.userId,\n });\n },\n createAnswer(input) {\n return authContext.convex.mutation(api.epistemicAnswers.create, {\n questionNodeId: input.questionRawId as any,\n topicId: input.topicId,\n answerText: input.text,\n confidence: normalizeAnswerConfidence(input.confidence),\n evidenceNodeIds: input.evidenceRawIds as any,\n answerSource: \"human\",\n userId: authContext.userId,\n });\n },\n };\n}\n\nfunction createMcpQuestionsPort(authContext: AuthContext): QuestionsPort {\n const convex = requireMcpConvex(authContext, \"createMcpQuestionsPort\");\n return {\n fetchQuestion(rawId) {\n return convex.query(api.epistemicQuestions.getById, {\n questionId: rawId as any,\n nodeId: rawId as any,\n });\n },\n listQuestionsByTopic(args) {\n return convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n createQuestion(input) {\n return convex.mutation(api.epistemicQuestions.create, {\n topicId: input.topicId,\n question: input.text,\n priority: input.priority,\n linkedBeliefNodeId: input.linkedBeliefRawId as any,\n userId: authContext.userId,\n });\n },\n refineQuestion(input) {\n return convex.mutation(api.epistemicQuestions.updateQuestion, {\n questionId: input.questionRawId as any,\n question: input.text,\n });\n },\n updateQuestionStatus(input) {\n return convex.mutation(api.epistemicQuestions.updateStatus, {\n questionId: input.questionRawId as any,\n status: input.status,\n userId: authContext.userId,\n });\n },\n createAnswer(input) {\n return convex.mutation(api.epistemicAnswers.create, {\n questionNodeId: input.questionRawId as any,\n topicId: input.topicId,\n answerText: input.text,\n confidence: normalizeAnswerConfidence(input.confidence),\n evidenceNodeIds: input.evidenceRawIds as any,\n answerSource: \"human\",\n userId: authContext.userId,\n });\n },\n };\n}\n\nexport async function createQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateQuestionInput\n) {\n const payload = await createQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"question.created\",\n resourceId: payload.id,\n data: {\n text: payload.text,\n priority: payload.priority,\n status: payload.status,\n linkedBeliefId: payload.linkedBeliefId ?? input.linkedBeliefId,\n metadata: input.metadata,\n },\n });\n return payload;\n}\n\nexport function getQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getQuestion(createGatewayQuestionsPort(authContext), { id });\n}\n\nexport function listQuestionsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListQuestionsQuery\n) {\n return listQuestions(createGatewayQuestionsPort(authContext), query);\n}\n\nexport async function answerQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n text: string;\n confidence?: string;\n evidenceIds?: string[];\n rationale?: string;\n }\n) {\n const payload = await answerQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveQuestionTopicIdWithGatewayAuth(authContext, payload.questionId)) ??\n \"\",\n type: \"question.answered\",\n resourceId: payload.questionId,\n data: {\n answerId: payload.answerId,\n status: payload.status,\n text: input.text,\n confidence: input.confidence,\n evidenceIds: input.evidenceIds ?? [],\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function getQuestionAnswerFromGatewayAuth(\n authContext: GatewayAuthContext,\n questionId: string\n) {\n const answer = await authContext.convex.query(\n api.epistemicAnswers.getLatestForQuestion,\n {\n questionNodeId: questionId as any,\n }\n );\n\n return normalizeLatestAnswerRecord(questionId, answer);\n}\n\nexport async function refineQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n text: string;\n rationale?: string;\n }\n) {\n const payload = await refineQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"question.refined\",\n resourceId: payload.id,\n data: {\n previousText:\n typeof (payload as Record<string, unknown>).previousText === \"string\"\n ? (payload as Record<string, unknown>).previousText\n : undefined,\n text: payload.text,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function archiveQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n rationale?: string;\n }\n) {\n const payload = await archiveQuestion(createGatewayQuestionsPort(authContext), input);\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"question.archived\",\n resourceId: payload.id,\n data: {\n previousStatus: payload.previousStatus,\n newStatus: payload.newStatus,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport async function updateQuestionStatusFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n status: string;\n rationale?: string;\n }\n) {\n const payload = await updateQuestionStatus(\n createGatewayQuestionsPort(authContext),\n input\n );\n await emitQuestionEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"question.status_updated\",\n resourceId: payload.id,\n data: {\n previousStatus:\n typeof (payload as Record<string, unknown>).previousStatus === \"string\"\n ? (payload as Record<string, unknown>).previousStatus\n : undefined,\n newStatus:\n typeof (payload as Record<string, unknown>).newStatus === \"string\"\n ? (payload as Record<string, unknown>).newStatus\n : payload.status,\n rationale: input.rationale,\n },\n });\n return payload;\n}\n\nexport function createQuestionsBatchFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n topicId: string;\n questions: Array<{\n question: string;\n category?: string;\n priority?: \"high\" | \"medium\" | \"low\";\n linkedBeliefNodeId?: string;\n linkedWorktreeId?: string;\n testType?: \"validates\" | \"invalidates\" | \"clarifies\";\n }>;\n source?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.createBatch, {\n topicId: input.topicId,\n questions: input.questions.map((question) => ({\n ...question,\n linkedBeliefNodeId: resolveExternalId(\n question.linkedBeliefNodeId,\n \"bel\"\n ),\n linkedWorktreeId: resolveExternalId(question.linkedWorktreeId, \"wt\"),\n })),\n source: input.source,\n userId: authContext.userId,\n });\n}\n\nexport async function addQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n topicId: string;\n question?: string;\n text?: string;\n category?: string;\n priority?: string;\n source?: string;\n beliefId?: string;\n linkedBeliefId?: string;\n linkedWorktreeId?: string;\n chatId?: string;\n importance?: number;\n epistemicUnlock?: string;\n metadata?: Record<string, unknown>;\n questionType?: string;\n }\n) {\n const questionId = await authContext.convex.mutation(api.epistemicQuestions.addQuestion, {\n topicId: input.topicId,\n question: input.question ?? input.text ?? \"\",\n category: input.category,\n priority: input.priority,\n source: input.source,\n beliefId: resolveExternalId(input.beliefId ?? input.linkedBeliefId, \"bel\"),\n linkedWorktreeId: input.linkedWorktreeId,\n chatId: input.chatId,\n importance: input.importance,\n epistemicUnlock: input.epistemicUnlock,\n metadata: input.metadata,\n questionType: input.questionType,\n userId: authContext.userId,\n });\n\n return getQuestionFromGatewayAuth(authContext, String(questionId));\n}\n\nexport async function updateQuestionPriorityFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id?: string;\n nodeId?: string;\n questionId?: string;\n priority: \"high\" | \"medium\" | \"low\";\n }\n) {\n await authContext.convex.mutation(api.epistemicQuestions.updatePriority, {\n nodeId:\n (resolveExternalId(input.id ?? input.nodeId ?? input.questionId, \"que\") ??\n \"\") as any,\n priority: input.priority,\n userId: authContext.userId,\n });\n\n return getQuestionFromGatewayAuth(\n authContext,\n input.id ?? input.nodeId ?? input.questionId ?? \"\"\n );\n}\n\nexport function advanceQuestionToConvictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n worktreeId?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.advanceToConviction, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n worktreeId: input.worktreeId,\n userId: authContext.userId,\n });\n}\n\nexport function updateQuestionConvictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n conviction?: number;\n answerCompleteness?:\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\";\n convictionRationale?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.updateConviction, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n conviction: input.conviction,\n answerCompleteness: input.answerCompleteness,\n convictionRationale: input.convictionRationale,\n userId: authContext.userId,\n });\n}\n\nexport function finalizeQuestionConvictionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n conviction: number;\n answer: string;\n convictionRationale?: string;\n answerCompleteness?:\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | \"unanswerable\";\n whatWeNeed?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.finalizeConviction, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n conviction: input.conviction,\n answer: input.answer,\n convictionRationale: input.convictionRationale,\n answerCompleteness: input.answerCompleteness,\n whatWeNeed: input.whatWeNeed,\n userId: authContext.userId,\n });\n}\n\nexport async function updateQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n question?: string;\n text?: string;\n category?:\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"financial\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"other\";\n priority?: \"high\" | \"medium\" | \"low\";\n }\n) {\n const questionId =\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ?? \"\";\n\n await authContext.convex.mutation(api.epistemicQuestions.updateQuestion, {\n questionId,\n question: input.question ?? input.text,\n category: input.category,\n priority: input.priority,\n });\n\n return getQuestionFromGatewayAuth(authContext, questionId);\n}\n\nexport function deleteQuestionFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n questionId?: string;\n id?: string;\n nodeId?: string;\n }\n) {\n return authContext.convex.mutation(api.epistemicQuestions.deleteQuestion, {\n questionId:\n resolveExternalId(input.questionId ?? input.id ?? input.nodeId, \"que\") ??\n \"\",\n userId: authContext.userId,\n });\n}\n","import { api } from \"./kernelApi\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport { requireActorPrincipalId } from \"@lucern/contracts\";\n/** Extract topicId from a graph record, trimmed and validated. */\nfunction resolveGraphRecordTopicId(\n record: Record<string, unknown>\n): string | undefined {\n const raw = record.topicId;\n return typeof raw === \"string\" && raw.trim().length > 0\n ? raw.trim()\n : undefined;\n}\nimport {\n graphAnalyze,\n graphBias,\n graphFalsify,\n graphGaps,\n graphNeighborhood,\n graphTraverse,\n type GraphAnalyzeInput,\n type GraphBiasInput,\n type GraphFalsifyInput,\n type GraphGapsInput,\n type GraphNeighborhoodInput,\n type GraphPort,\n type GraphTraverseInput,\n} from \"./domain/graph\";\nimport { listBeliefsFromGatewayAuth } from \"./beliefs\";\nimport { traverseEdgesFromGatewayAuth } from \"./edges\";\nimport { listQuestionsFromGatewayAuth } from \"./questions\";\n\ntype GraphPayload = Record<string, unknown>;\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asRecordArray(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value)\n ? value.filter(\n (entry): entry is Record<string, unknown> =>\n Boolean(entry) && typeof entry === \"object\" && !Array.isArray(entry)\n )\n : [];\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction inferRiskLevel(score: number, threshold: number): string {\n if (score >= Math.max(threshold + 0.2, 0.9)) {\n return \"critical\";\n }\n if (score >= threshold) {\n return \"high\";\n }\n if (score >= Math.max(threshold - 0.15, 0.5)) {\n return \"moderate\";\n }\n return \"healthy\";\n}\n\nasync function filterNeighborhoodForGateway(\n authContext: GatewayAuthContext,\n payload: unknown\n): Promise<GraphPayload> {\n const record = asRecord(payload);\n const nodes = asRecordArray(record.nodes);\n const edges = asRecordArray(record.edges);\n\n if (nodes.some((node) => !resolveGraphRecordTopicId(node))) {\n throw new Error(\n \"Graph neighborhood results must include canonical topicId on every node. Refresh the graph projection before retrying.\"\n );\n }\n\n const topicIds = [\n ...new Set(\n nodes\n .map((node) => resolveGraphRecordTopicId(node))\n .filter((topicId): topicId is string => Boolean(topicId))\n ),\n ];\n\n if (topicIds.length === 0) {\n return {\n ...record,\n nodes,\n edges,\n };\n }\n\n const actorPrincipalId = requireActorPrincipalId(authContext);\n const permissionFilter = (await authContext.convex.query(\n api.policy.filterByPermission,\n {\n topicIds: topicIds.map((topicId) => topicId as any),\n permission: \"read\",\n traceId: `graph-neighborhood:${Date.now()}`,\n actorPrincipalId,\n grantedScopes: authContext.grantedScopes\n ? Array.from(authContext.grantedScopes)\n : undefined,\n }\n )) as {\n allowedTopicIds?: unknown[];\n deniedTopics?: Array<Record<string, unknown>>;\n };\n\n const allowedTopicIds = new Set(\n Array.isArray(permissionFilter.allowedTopicIds)\n ? permissionFilter.allowedTopicIds.map((topicId) => String(topicId))\n : []\n );\n const deniedTopics = Array.isArray(permissionFilter.deniedTopics)\n ? permissionFilter.deniedTopics\n : [];\n\n const filteredNodes = nodes\n .map((node) => {\n const topicId = resolveGraphRecordTopicId(node);\n if (!topicId || !allowedTopicIds.has(topicId)) {\n return null;\n }\n return typeof node.topicId === \"string\" ? node : { ...node, topicId };\n })\n .filter((node): node is Record<string, unknown> => Boolean(node));\n const allowedNodeIds = new Set(\n filteredNodes\n .map((node) =>\n readString(node.globalId) ??\n readString(node.nodeId) ??\n readString(node.id)\n )\n .filter((nodeId): nodeId is string => Boolean(nodeId))\n );\n const filteredEdges = edges.filter((edge) => {\n const fromId =\n readString(edge.sourceGlobalId) ??\n readString(edge.fromGlobalId) ??\n readString(edge.fromNodeId) ??\n readString(edge.sourceId);\n const toId =\n readString(edge.targetGlobalId) ??\n readString(edge.toGlobalId) ??\n readString(edge.toNodeId) ??\n readString(edge.targetId);\n return Boolean(fromId && toId && allowedNodeIds.has(fromId) && allowedNodeIds.has(toId));\n });\n\n await authContext.convex.mutation((api.policy as any).logAuthorizationAuditEntries, {\n entries: [\n ...Array.from(allowedTopicIds).map((topicId) => ({\n principalId: actorPrincipalId,\n projectId: undefined,\n decision: \"allow\" as const,\n reasonCode: \"ALLOW_ACTION\",\n action: \"read\" as const,\n resourceType: \"graph_neighborhood\",\n resourceId: topicId,\n traceId: `graph-neighborhood:${Date.now()}`,\n metadata: { source: \"server-core.graph.neighborhood\" },\n })),\n ...deniedTopics.map((denied) => ({\n principalId: actorPrincipalId,\n projectId: undefined,\n decision: \"deny\" as const,\n reasonCode:\n typeof denied.reasonCode === \"string\"\n ? denied.reasonCode\n : \"ACCESS_NOT_GRANTED\",\n action: \"read\" as const,\n resourceType: \"graph_neighborhood\",\n resourceId: String(denied.topicId ?? \"\"),\n traceId: `graph-neighborhood:${Date.now()}`,\n metadata: { source: \"server-core.graph.neighborhood\" },\n })),\n ],\n });\n\n return {\n ...record,\n nodes: filteredNodes,\n edges: filteredEdges,\n };\n}\n\nfunction normalizeAnalysisPayload(topicId: string, payload: unknown): GraphPayload {\n const analysis = asRecord(payload);\n return {\n topicId,\n metric: \"structure_analysis\",\n payload: analysis,\n };\n}\n\nfunction normalizeBiasPayload(\n topicId: string,\n threshold: number,\n payload: unknown\n): GraphPayload {\n const analysis = asRecord(payload);\n const rawBeliefs =\n asRecordArray(analysis.results).length > 0\n ? asRecordArray(analysis.results)\n : asRecordArray(analysis.beliefs);\n const beliefs = rawBeliefs.map((belief) => {\n const biasScore = readNumber(belief.biasScore) ?? threshold;\n return {\n nodeId: readString(belief.nodeId) ?? \"\",\n biasScore,\n riskLevel: readString(belief.riskLevel) ?? inferRiskLevel(biasScore, threshold),\n supportingCount:\n readNumber(belief.supportingCount) ?? readNumber(belief.supportingEvidenceCount) ?? 0,\n challengingCount:\n readNumber(belief.challengingCount) ?? readNumber(belief.contradictingEvidenceCount) ?? 0,\n };\n });\n\n return {\n topicId,\n metric: \"confirmation_bias\",\n threshold,\n beliefs,\n payload: {\n ...analysis,\n beliefs,\n },\n };\n}\n\nfunction createGatewayGraphPort(authContext: GatewayAuthContext): GraphPort {\n return {\n async neighborhood(input) {\n const payload = await authContext.convex.action(api.neo4jEdgeAPI.getGraphNeighborhood, {\n globalIds: input.globalIds,\n maxDepth: input.maxDepth,\n });\n return filterNeighborhoodForGateway(authContext, payload);\n },\n traverse(input) {\n return traverseEdgesFromGatewayAuth(authContext, input);\n },\n async analyze(input) {\n const cached = await authContext.convex.query(api.graphAnalysisCache.getCachedAnalysis, {\n topicId: input.topicId,\n userId: authContext.userId,\n });\n if (cached) {\n return normalizeAnalysisPayload(input.topicId, cached);\n }\n const fresh = await authContext.convex.query(api.graphIntelligence.analyzeProject, {\n topicId: input.topicId,\n userId: authContext.userId,\n });\n return normalizeAnalysisPayload(input.topicId, fresh);\n },\n async bias(input) {\n const payload = await authContext.convex.action(api.neo4jQueries.getConfirmationBiasScore, {\n topicId: input.topicId,\n limit: input.limit,\n });\n return normalizeBiasPayload(input.topicId, input.threshold, payload);\n },\n async listBeliefs(input) {\n const page = await listBeliefsFromGatewayAuth(authContext, {\n topicId: input.topicId,\n minConfidence: input.minConfidence,\n limit: input.limit,\n });\n return page.beliefs;\n },\n async fetchBelief(input) {\n const belief = await authContext.convex.query(api.epistemicBeliefs.getById, {\n beliefId: input.beliefId as any,\n nodeId: input.beliefId as any,\n });\n return (belief as any) ?? null;\n },\n async listQuestions(input) {\n const page = await listQuestionsFromGatewayAuth(authContext, {\n topicId: input.topicId,\n limit: input.limit,\n });\n return page.questions;\n },\n async listTestingEdges(input) {\n const rows = await authContext.convex.query(api.epistemicEdges.getByTopicAndType, {\n topicId: input.topicId as any,\n edgeType: \"tests\" as any,\n });\n return Array.isArray(rows) ? rows : [];\n },\n };\n}\n\nexport function graphNeighborhoodFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphNeighborhoodInput\n) {\n return graphNeighborhood(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphTraverseFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphTraverseInput\n) {\n return graphTraverse(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphAnalyzeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphAnalyzeInput\n) {\n return graphAnalyze(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphBiasFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphBiasInput\n) {\n return graphBias(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphGapsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphGapsInput\n) {\n return graphGaps(createGatewayGraphPort(authContext), input);\n}\n\nexport function graphFalsifyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GraphFalsifyInput\n) {\n return graphFalsify(createGatewayGraphPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n graphAnalyzeFromGatewayAuth,\n graphBiasFromGatewayAuth,\n graphFalsifyFromGatewayAuth,\n graphGapsFromGatewayAuth,\n graphNeighborhoodFromGatewayAuth,\n graphTraverseFromGatewayAuth,\n} from \"@lucern/server-core/graph\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction handleGraphError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleGraphNeighborhood(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n globalId?: string;\n globalIds?: string[];\n maxDepth?: number;\n };\n}) {\n if (!args.query.globalId && (!args.query.globalIds || args.query.globalIds.length === 0)) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"globalId or globalIds is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphNeighborhoodFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to query graph neighborhood.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphTraverse(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n const body = asRecord(args.body);\n if (!readString(body.startNode)) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"startNode is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphTraverseFromGatewayAuth(args.authContext, {\n startNode: readString(body.startNode) ?? \"\",\n direction: readString(body.direction),\n maxDepth: readNumber(body.maxDepth),\n topicId:\n readString(body.topicId) ??\n readString(body.projectId),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to traverse graph.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphAnalyze(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n metric?: string;\n limit?: number;\n };\n}) {\n if (!args.query.topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphAnalyzeFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n metric: args.query.metric,\n limit: args.query.limit,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to analyze graph structure.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphBias(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n threshold?: number;\n limit?: number;\n };\n}) {\n if (!args.query.topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphBiasFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n threshold: args.query.threshold,\n limit: args.query.limit,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to detect graph bias.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphGaps(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n minConfidence?: number;\n };\n}) {\n if (!args.query.topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await graphGapsFromGatewayAuth(args.authContext, {\n topicId: args.query.topicId ?? \"\",\n minConfidence: args.query.minConfidence,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to analyze graph gaps.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleGraphFalsify(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const rawBeliefIds = Array.isArray(body.beliefIds) ? body.beliefIds : [];\n const payload = await graphFalsifyFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? readString(body.projectId),\n beliefId: readString(body.beliefId),\n beliefIds: rawBeliefIds\n .map((value) => readString(value))\n .filter((value): value is string => Boolean(value)),\n minConfidence: readNumber(body.minConfidence),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleGraphError(\n error,\n \"Failed to generate falsification questions.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","/**\n * Gateway Claims Resolution — Lucern-owned copy.\n *\n * Maps GatewayAuthContext (from the platform API gateway) to the canonical\n * Claims envelope. Copied from lib/platform/auth/gateway-claims.ts to\n * eliminate the Lucern→Stack reverse import.\n *\n * @module @lucern/server-core/auth\n */\n\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"@lucern/contracts\";\n\nexport type PrincipalType = SessionPrincipalType;\n\nexport interface Claims {\n principalId: string;\n principalType: PrincipalType;\n tenantId: string;\n workspaceId?: string;\n roles: string[];\n scopes: string[];\n authMode?: SessionAuthMode;\n sessionId?: string;\n delegationChain?: SessionDelegationHop[];\n delegatedBy?: string;\n expiresAt?: number;\n}\n\nfunction lastDelegator(\n delegationChain?: readonly SessionDelegationHop[]\n): string | undefined {\n if (!delegationChain || delegationChain.length === 0) {\n return;\n }\n return delegationChain[delegationChain.length - 1]?.principalId;\n}\n\nfunction requireGatewayPrincipalId(authContext: GatewayAuthContext): string {\n const principalId =\n typeof authContext.principalId === \"string\"\n ? authContext.principalId.trim()\n : \"\";\n if (principalId.length > 0) {\n return principalId;\n }\n throw new Error(\"Access denied: federated principal context required.\");\n}\n\nexport function resolveGatewayClaims(authContext: GatewayAuthContext): Claims {\n switch (authContext.authMode) {\n case \"interactive_user\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: \"human\",\n tenantId: authContext.tenantId ?? authContext.servicePrincipalTenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId ?? authContext.servicePrincipalWorkspaceId,\n roles: [],\n scopes: [...authContext.grantedScopes],\n authMode: \"interactive_user\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n\n case \"service_principal\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: \"service\",\n tenantId: authContext.tenantId ?? authContext.servicePrincipalTenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId ?? authContext.servicePrincipalWorkspaceId,\n roles: [\"service_agent\"],\n scopes: [...authContext.grantedScopes],\n authMode: \"service_principal\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n\n case \"tenant_api_key\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: \"service\",\n tenantId: authContext.tenantId ?? authContext.servicePrincipalTenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId ?? authContext.servicePrincipalWorkspaceId,\n roles: [\"service_agent\"],\n scopes: [...authContext.grantedScopes],\n authMode: \"tenant_api_key\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n\n case \"session_token\":\n return {\n principalId: requireGatewayPrincipalId(authContext),\n principalType: authContext.principalType ?? \"agent\",\n tenantId: authContext.tenantId ?? \"unknown\",\n workspaceId: authContext.workspaceId,\n roles: authContext.roles ?? [],\n scopes: [...authContext.grantedScopes],\n authMode: \"session_token\",\n sessionId: authContext.sessionId,\n delegationChain: authContext.delegationChain,\n delegatedBy: lastDelegator(authContext.delegationChain),\n expiresAt: authContext.sessionExpiresAt,\n };\n }\n}\n\nexport function hasScope(claims: Claims, scope: string): boolean {\n if (claims.scopes.includes(\"*\")) return true;\n return claims.scopes.includes(scope);\n}\n\nexport function requireScope(claims: Claims, scope: string): void {\n if (!hasScope(claims, scope)) {\n throw new Error(\n `Scope \"${scope}\" required but not present in claims for ${claims.principalId}`\n );\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport { resolveGatewayClaims } from \"./auth/gateway-claims\";\nimport { inferSessionPrincipalType } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport type { SdkPrincipalContext } from \"@lucern/sdk\";\n\nfunction normalizePrincipalType(\n principalType: string | undefined\n): SdkPrincipalContext[\"principalType\"] {\n switch (principalType) {\n case \"human\":\n return \"user\";\n case \"service\":\n case \"group\":\n case \"external_viewer\":\n case \"agent\":\n case \"user\":\n return principalType;\n default:\n return \"service\";\n }\n}\n\nfunction deriveAdminFlags(roles: string[]) {\n const normalized = roles.map((role) => role.trim().toLowerCase());\n const isPlatformAdmin = normalized.includes(\"platform_admin\");\n const isTenantAdmin =\n isPlatformAdmin || normalized.includes(\"tenant_admin\");\n const isWorkspaceAdmin =\n isTenantAdmin || normalized.includes(\"workspace_admin\");\n\n return {\n isPlatformAdmin,\n isTenantAdmin,\n isWorkspaceAdmin,\n };\n}\n\nfunction buildPrincipalContext(input: {\n principalId: string;\n principalType?: string;\n tenantId?: string;\n workspaceId?: string;\n scopes?: string[];\n roles?: string[];\n authMode?: string;\n sessionId?: string;\n delegatedBy?: string;\n expiresAt?: number;\n}): SdkPrincipalContext {\n const roles = Array.isArray(input.roles) ? input.roles : [];\n\n return {\n principalId: input.principalId,\n principalType: normalizePrincipalType(input.principalType),\n tenantId: input.tenantId ?? null,\n workspaceId: input.workspaceId ?? null,\n scopes: Array.isArray(input.scopes) ? input.scopes : [],\n roles,\n ...deriveAdminFlags(roles),\n authMode: input.authMode,\n sessionId: input.sessionId,\n delegatedBy: input.delegatedBy,\n expiresAt: input.expiresAt,\n };\n}\n\nexport async function identitySummaryFromGatewayAuth(\n authContext: GatewayAuthContext\n): Promise<SdkPrincipalContext> {\n const claims = resolveGatewayClaims(authContext);\n return buildPrincipalContext(claims);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport { identitySummaryFromGatewayAuth } from \"@lucern/server-core/identity\";\n\nexport async function handleIdentityWhoami(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n}) {\n try {\n const summary = await identitySummaryFromGatewayAuth(args.authContext);\n return successResponse(summary, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to resolve current identity.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n rankEntityTypeMatches,\n} from \"@lucern/contracts\";\n\ntype OntologyTier = \"platform\" | \"pack\" | \"tenant\";\ntype OntologyStatus = \"draft\" | \"active\" | \"deprecated\" | \"archived\";\ntype OntologyVersionStatus = \"draft\" | \"published\" | \"deprecated\";\n\ntype OntologiesError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type OntologyEntitySubtype = {\n value: string;\n label: string;\n description?: string;\n};\n\nexport type OntologyEntityType = {\n value: string;\n label: string;\n description?: string;\n schema?: unknown;\n subtypes?: OntologyEntitySubtype[];\n};\n\nexport type OntologyEdgeType = {\n value: string;\n label: string;\n description?: string;\n sourceTypes?: string[];\n targetTypes?: string[];\n constraintSeverity?: \"warn\" | \"info\";\n};\n\nexport type OntologyPublishedVersion = {\n id: string;\n version: string;\n status: OntologyVersionStatus;\n entityTypes: OntologyEntityType[];\n edgeTypes: OntologyEdgeType[];\n releaseNotes?: string;\n publishedAt?: number;\n publishedBy?: string;\n};\n\nexport type OntologyRecord = {\n id: string;\n ontologyId: string;\n ontologyKey: string;\n name: string;\n description?: string;\n tier?: OntologyTier;\n status?: OntologyStatus;\n tenantId?: string;\n parentOntologyId?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n publishedVersion: OntologyPublishedVersion | null;\n};\n\nexport type OntologyListQuery = {\n tenantId?: string;\n tier?: OntologyTier | string;\n status?: OntologyStatus | string;\n};\n\nexport type OntologyListResult = {\n ontologies: OntologyRecord[];\n total: number;\n};\n\nexport type GetOntologyInput = {\n id?: string;\n ontologyKey?: string;\n tenantId?: string;\n};\n\nexport type BindOntologyInput = {\n ontologyId: string;\n topicId: string;\n};\n\nexport type OntologyBindingResult = {\n applied: true;\n source: \"direct\";\n ontologyId: string;\n ontologyKey: string;\n ontologyName: string;\n topicId: string;\n topicName?: string;\n updatedAt?: number;\n};\n\nexport type OntologyTypeMatch = {\n entityType: string;\n label: string;\n score: number;\n reason: string;\n};\n\nexport type OntologyMatchInput = {\n text: string;\n topicId?: string;\n ontologyId?: string;\n minScore?: number;\n limit?: number;\n};\n\nexport type OntologyMatchResult = {\n text: string;\n matchCount: number;\n matches: OntologyTypeMatch[];\n ontologyId?: string;\n message?: string;\n};\n\nexport type OntologiesPort = {\n fetchOntology: (rawId: string) => Promise<unknown | null>;\n fetchOntologyByKey?: (\n ontologyKey: string,\n tenantId?: string\n ) => Promise<unknown | null>;\n listOntologies: (query: {\n tenantId?: string;\n tier?: OntologyTier;\n status?: OntologyStatus;\n }) => Promise<unknown[]>;\n fetchPublishedVersion: (ontologyRawId: string) => Promise<unknown | null>;\n bindOntologyToTopic: (args: {\n ontologyRawId: string;\n topicRawId: string;\n }) => Promise<unknown>;\n fetchTopic: (topicRawId: string) => Promise<unknown | null>;\n resolveMatchVocabulary: (input: {\n ontologyRawId?: string;\n topicRawId?: string;\n }) => Promise<{\n ontologyRawId?: string;\n entityTypes: OntologyEntityType[];\n } | null>;\n};\n\nfunction createOntologiesError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): OntologiesError {\n const error = new Error(args.message) as OntologiesError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n return error;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction requireString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw createOntologiesError({\n message: `[ontologies] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n\n return normalized;\n}\n\nfunction normalizeTier(value: unknown): OntologyTier | undefined {\n const normalized = readString(value);\n if (\n normalized === \"platform\" ||\n normalized === \"pack\" ||\n normalized === \"tenant\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeStatus(value: unknown): OntologyStatus | undefined {\n const normalized = readString(value);\n if (\n normalized === \"draft\" ||\n normalized === \"active\" ||\n normalized === \"deprecated\" ||\n normalized === \"archived\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizePublishedVersionStatus(\n value: unknown\n): OntologyVersionStatus | undefined {\n const normalized = readString(value);\n if (\n normalized === \"draft\" ||\n normalized === \"published\" ||\n normalized === \"deprecated\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction decodeExternalId(id: string, prefix: string, field: string): string {\n const normalized = requireString(id, field);\n\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix !== prefix) {\n throw createOntologiesError({\n message: `[ontologies] Expected ${prefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${prefix}_ prefixed identifier for ${field}.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (\n error instanceof Error &&\n \"status\" in error &&\n typeof (error as OntologiesError).status === \"number\"\n ) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeOntologyId(rawId: string): string {\n return encodePrefixedId(\"ont\", requireString(rawId, \"ontologyId\"));\n}\n\nfunction encodeTopicId(rawId: string): string {\n return encodePrefixedId(\"top\", requireString(rawId, \"topicId\"));\n}\n\nfunction normalizeEntitySubtype(value: unknown): OntologyEntitySubtype {\n const record = asRecord(value);\n return {\n value: requireString(record.value, \"entitySubtype.value\"),\n label: requireString(record.label, \"entitySubtype.label\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n };\n}\n\nfunction normalizeEntityType(value: unknown): OntologyEntityType {\n const record = asRecord(value);\n return {\n value: requireString(record.value, \"entityType.value\"),\n label: requireString(record.label, \"entityType.label\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(record.schema !== undefined ? { schema: record.schema } : {}),\n ...(Array.isArray(record.subtypes)\n ? {\n subtypes: record.subtypes.map((entry) => normalizeEntitySubtype(entry)),\n }\n : {}),\n };\n}\n\nfunction normalizeEdgeType(value: unknown): OntologyEdgeType {\n const record = asRecord(value);\n return {\n value: requireString(record.value, \"edgeType.value\"),\n label: requireString(record.label, \"edgeType.label\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(readStringArray(record.sourceTypes)\n ? { sourceTypes: readStringArray(record.sourceTypes)! }\n : {}),\n ...(readStringArray(record.targetTypes)\n ? { targetTypes: readStringArray(record.targetTypes)! }\n : {}),\n ...(readString(record.constraintSeverity) === \"warn\" ||\n readString(record.constraintSeverity) === \"info\"\n ? {\n constraintSeverity: readString(record.constraintSeverity) as\n | \"warn\"\n | \"info\",\n }\n : {}),\n };\n}\n\nfunction normalizePublishedVersion(\n value: unknown\n): OntologyPublishedVersion | null {\n if (!value) {\n return null;\n }\n\n const record = asRecord(value);\n const id = readString(record.id ?? record._id);\n const version = readString(record.version);\n const status = normalizePublishedVersionStatus(record.status);\n if (!id || !version || !status) {\n return null;\n }\n\n return {\n id,\n version,\n status,\n entityTypes: Array.isArray(record.entityTypes)\n ? record.entityTypes.map((entry) => normalizeEntityType(entry))\n : [],\n edgeTypes: Array.isArray(record.edgeTypes)\n ? record.edgeTypes.map((entry) => normalizeEdgeType(entry))\n : [],\n ...(readString(record.releaseNotes)\n ? { releaseNotes: readString(record.releaseNotes)! }\n : {}),\n ...(readNumber(record.publishedAt) !== undefined\n ? { publishedAt: readNumber(record.publishedAt)! }\n : {}),\n ...(readString(record.publishedBy)\n ? { publishedBy: readString(record.publishedBy)! }\n : {}),\n };\n}\n\nfunction normalizeOntologyRecord(\n value: unknown,\n publishedVersionInput?: unknown\n): OntologyRecord {\n const record = asRecord(value);\n const rawId =\n readString(record.id) ??\n readString(record.ontologyId) ??\n readString(record._id);\n\n if (!rawId) {\n throw createOntologiesError({\n message: \"[ontologies] ontologyId is required in upstream ontology payload.\",\n status: 500,\n code: \"INTERNAL_ERROR\",\n invariantCode: \"resource.exists\",\n });\n }\n\n const ontologyId = encodeOntologyId(rawId);\n const publishedVersion =\n publishedVersionInput !== undefined\n ? normalizePublishedVersion(publishedVersionInput)\n : normalizePublishedVersion(record.publishedVersion);\n\n return {\n id: ontologyId,\n ontologyId,\n ontologyKey: requireString(record.ontologyKey, \"ontologyKey\"),\n name: requireString(record.name, \"name\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(normalizeTier(record.tier) ? { tier: normalizeTier(record.tier)! } : {}),\n ...(normalizeStatus(record.status)\n ? { status: normalizeStatus(record.status)! }\n : {}),\n ...(readString(record.tenantId) ? { tenantId: readString(record.tenantId)! } : {}),\n ...(readString(record.parentOntologyId)\n ? {\n parentOntologyId: encodeOntologyId(\n readString(record.parentOntologyId)!\n ),\n }\n : {}),\n ...(readString(record.createdBy)\n ? { createdBy: readString(record.createdBy)! }\n : {}),\n ...(readNumber(record.createdAt ?? record._creationTime) !== undefined\n ? { createdAt: readNumber(record.createdAt ?? record._creationTime)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n publishedVersion,\n };\n}\n\nfunction normalizeBoundTopic(value: unknown): {\n topicId: string;\n topicName?: string;\n updatedAt?: number;\n} {\n const record = asRecord(value);\n const rawId =\n readString(record.id) ??\n readString(record.topicId) ??\n readString(record._id) ??\n null;\n\n return {\n topicId: rawId ? encodeTopicId(rawId) : \"\",\n ...(readString(record.name) ? { topicName: readString(record.name)! } : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nexport async function listOntologies(\n deps: OntologiesPort,\n query: OntologyListQuery = {}\n): Promise<OntologyListResult> {\n const ontologies = await deps.listOntologies({\n tenantId: readString(query.tenantId),\n tier: normalizeTier(query.tier),\n status: normalizeStatus(query.status),\n });\n\n const normalized = await Promise.all(\n (Array.isArray(ontologies) ? ontologies : []).map(async (ontology) => {\n const record = asRecord(ontology);\n const rawId =\n readString(record.id) ??\n readString(record.ontologyId) ??\n readString(record._id);\n const publishedVersion = rawId\n ? await deps.fetchPublishedVersion(rawId)\n : null;\n return normalizeOntologyRecord(ontology, publishedVersion);\n })\n );\n\n return {\n ontologies: normalized,\n total: normalized.length,\n };\n}\n\nexport async function getOntology(\n deps: OntologiesPort,\n input: GetOntologyInput\n): Promise<OntologyRecord> {\n const rawId = readString(input.id);\n const ontologyKey = readString(input.ontologyKey);\n\n let ontology: unknown | null = null;\n let resolvedRawId: string | null = null;\n\n if (rawId) {\n resolvedRawId = decodeExternalId(rawId, \"ont\", \"id\");\n ontology = await deps.fetchOntology(resolvedRawId);\n } else if (ontologyKey && deps.fetchOntologyByKey) {\n ontology = await deps.fetchOntologyByKey(\n ontologyKey,\n readString(input.tenantId)\n );\n const ontologyRecord = asRecord(ontology);\n resolvedRawId =\n readString(ontologyRecord.id) ??\n readString(ontologyRecord.ontologyId) ??\n readString(ontologyRecord._id) ??\n null;\n } else {\n throw createOntologiesError({\n message: \"[ontologies] id is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Provide a canonical ontology identifier.\",\n });\n }\n\n if (!ontology || !resolvedRawId) {\n throw createOntologiesError({\n message: `Ontology not found: ${rawId ?? ontologyKey ?? \"\"}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"resource.exists\",\n suggestion: \"Check the ontologyId and scope, then retry.\",\n });\n }\n\n const publishedVersion = await deps.fetchPublishedVersion(resolvedRawId);\n return normalizeOntologyRecord(ontology, publishedVersion);\n}\n\nexport async function bindOntology(\n deps: OntologiesPort,\n input: BindOntologyInput\n): Promise<OntologyBindingResult> {\n const ontology = await getOntology(deps, { id: input.ontologyId });\n const rawOntologyId = decodeExternalId(input.ontologyId, \"ont\", \"ontologyId\");\n const rawTopicId = decodeExternalId(input.topicId, \"top\", \"topicId\");\n\n await deps.bindOntologyToTopic({\n ontologyRawId: rawOntologyId,\n topicRawId: rawTopicId,\n });\n\n const topic = await deps.fetchTopic(rawTopicId);\n const normalizedTopic = normalizeBoundTopic(topic);\n\n return {\n applied: true,\n source: \"direct\",\n ontologyId: ontology.id,\n ontologyKey: ontology.ontologyKey,\n ontologyName: ontology.name,\n topicId: normalizedTopic.topicId || encodeTopicId(rawTopicId),\n ...(normalizedTopic.topicName ? { topicName: normalizedTopic.topicName } : {}),\n ...(normalizedTopic.updatedAt !== undefined\n ? { updatedAt: normalizedTopic.updatedAt }\n : {}),\n };\n}\n\nexport async function matchOntology(\n deps: OntologiesPort,\n input: OntologyMatchInput\n): Promise<OntologyMatchResult> {\n const text = requireString(input.text, \"text\");\n const topicRawId = input.topicId\n ? decodeExternalId(input.topicId, \"top\", \"topicId\")\n : undefined;\n const ontologyRawId = input.ontologyId\n ? decodeExternalId(input.ontologyId, \"ont\", \"ontologyId\")\n : undefined;\n\n if (!topicRawId && !ontologyRawId) {\n throw createOntologiesError({\n message: \"[ontologies] topicId or ontologyId is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Provide topicId or ontologyId to resolve ontology vocabulary.\",\n });\n }\n\n const resolved = await deps.resolveMatchVocabulary({\n ontologyRawId,\n topicRawId,\n });\n\n if (!resolved) {\n return {\n text,\n matchCount: 0,\n matches: [],\n ...(ontologyRawId ? { ontologyId: encodeOntologyId(ontologyRawId) } : {}),\n message: \"No ontology vocabulary could be resolved for the requested scope.\",\n };\n }\n\n const matches = rankEntityTypeMatches(text, resolved.entityTypes, {\n minScore:\n typeof input.minScore === \"number\" && Number.isFinite(input.minScore)\n ? input.minScore\n : undefined,\n limit:\n typeof input.limit === \"number\" && Number.isFinite(input.limit)\n ? input.limit\n : undefined,\n });\n\n return {\n text,\n matchCount: matches.length,\n matches,\n ...(resolved.ontologyRawId\n ? { ontologyId: encodeOntologyId(resolved.ontologyRawId) }\n : {}),\n ...(resolved.entityTypes.length === 0\n ? { message: \"Ontology has no entity types defined.\" }\n : {}),\n };\n}\n","import { api } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport {\n bindOntology,\n getOntology,\n listOntologies,\n matchOntology,\n type BindOntologyInput,\n type GetOntologyInput,\n type OntologyEntityType,\n type OntologiesPort,\n type OntologyListQuery,\n type OntologyMatchInput,\n} from \"./domain/ontologies\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nasync function emitOntologyEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"ontology.bound\",\n resourceId: args.resourceId,\n resourceType: \"ontology\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitOntologyEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitOntologyEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: \"ontology.bound\",\n resourceId: args.resourceId,\n resourceType: \"ontology\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayOntologiesPort(\n authContext: GatewayAuthContext\n): OntologiesPort {\n return {\n async fetchOntology(rawId) {\n const result = await authContext.convex.query(\n api.ontologyDefinitions.getOntologyDefinition,\n {\n id: rawId as any,\n }\n );\n return result ?? null;\n },\n async fetchOntologyByKey(ontologyKey, tenantId) {\n const result = await authContext.convex.query(\n api.ontologyDefinitions.getOntologyDefinitionByKey,\n {\n ontologyKey,\n tenantId,\n }\n );\n return result ?? null;\n },\n listOntologies(query) {\n return authContext.convex.query(\n api.ontologyDefinitions.listOntologyDefinitions,\n {\n tenantId: query.tenantId,\n tier: query.tier as any,\n status: query.status as any,\n }\n ) as Promise<unknown[]>;\n },\n async fetchPublishedVersion(ontologyRawId) {\n const result = await authContext.convex.query(\n api.ontologyDefinitions.getPublishedVersion,\n {\n ontologyId: ontologyRawId as any,\n }\n );\n return result ?? null;\n },\n bindOntologyToTopic(args) {\n return authContext.convex.mutation(api.topics.update, {\n id: args.topicRawId as any,\n ontologyId: args.ontologyRawId as any,\n });\n },\n async fetchTopic(topicRawId) {\n const result = await authContext.convex.query(api.topics.get, {\n id: topicRawId as any,\n });\n return result ?? null;\n },\n async resolveMatchVocabulary(input) {\n if (input.ontologyRawId) {\n const effective = await authContext.convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: input.ontologyRawId as any,\n }\n );\n return {\n ontologyRawId: input.ontologyRawId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n }\n\n if (!input.topicRawId) {\n return null;\n }\n\n const resolved = await authContext.convex.query(api.topics.resolveTopicOntology, {\n topicId: input.topicRawId as any,\n });\n const resolvedOntologyId =\n resolved && typeof resolved === \"object\"\n ? ((resolved as Record<string, unknown>).ontologyId as string | undefined)\n : undefined;\n if (!resolvedOntologyId) {\n return null;\n }\n\n const effective = await authContext.convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: resolvedOntologyId as any,\n }\n );\n return {\n ontologyRawId: resolvedOntologyId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n },\n };\n}\n\nfunction createMcpOntologiesPort(authContext: AuthContext): OntologiesPort {\n const convex = requireMcpConvex(authContext, \"createMcpOntologiesPort\");\n return {\n async fetchOntology(rawId) {\n const result = await convex.query(api.ontologyDefinitions.getOntologyDefinition, {\n id: rawId as any,\n });\n return result ?? null;\n },\n async fetchOntologyByKey(ontologyKey, tenantId) {\n const result = await convex.query(api.ontologyDefinitions.getOntologyDefinitionByKey, {\n ontologyKey,\n tenantId,\n });\n return result ?? null;\n },\n listOntologies(query) {\n return convex.query(api.ontologyDefinitions.listOntologyDefinitions, {\n tenantId: query.tenantId,\n tier: query.tier as any,\n status: query.status as any,\n }) as Promise<unknown[]>;\n },\n async fetchPublishedVersion(ontologyRawId) {\n const result = await convex.query(api.ontologyDefinitions.getPublishedVersion, {\n ontologyId: ontologyRawId as any,\n });\n return result ?? null;\n },\n bindOntologyToTopic(args) {\n return convex.mutation(api.topics.update, {\n id: args.topicRawId as any,\n ontologyId: args.ontologyRawId as any,\n });\n },\n async fetchTopic(topicRawId) {\n const result = await convex.query(api.topics.get, { id: topicRawId as any });\n return result ?? null;\n },\n async resolveMatchVocabulary(input) {\n if (input.ontologyRawId) {\n const effective = await convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: input.ontologyRawId as any,\n }\n );\n return {\n ontologyRawId: input.ontologyRawId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n }\n\n if (!input.topicRawId) {\n return null;\n }\n\n const resolved = await convex.query(api.topics.resolveTopicOntology, {\n topicId: input.topicRawId as any,\n });\n const resolvedOntologyId =\n resolved && typeof resolved === \"object\"\n ? ((resolved as Record<string, unknown>).ontologyId as string | undefined)\n : undefined;\n if (!resolvedOntologyId) {\n return null;\n }\n\n const effective = await convex.query(\n api.ontologyDefinitions.resolveEffectiveOntology,\n {\n ontologyId: resolvedOntologyId as any,\n }\n );\n return {\n ontologyRawId: resolvedOntologyId,\n entityTypes: Array.isArray((effective as any)?.entityTypes)\n ? (((effective as any).entityTypes as OntologyEntityType[]) ?? [])\n : [],\n };\n },\n };\n}\n\nexport function listOntologiesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: OntologyListQuery\n) {\n return listOntologies(createGatewayOntologiesPort(authContext), query);\n}\n\nexport function getOntologyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GetOntologyInput | string\n) {\n return getOntology(\n createGatewayOntologiesPort(authContext),\n typeof input === \"string\" ? { id: input } : input\n );\n}\n\nexport async function bindOntologyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: BindOntologyInput\n) {\n const payload = await bindOntology(createGatewayOntologiesPort(authContext), input);\n await emitOntologyEventFromGatewayAuth(authContext, {\n topicId: payload.topicId,\n resourceId: payload.ontologyId,\n data: {\n ontologyKey: payload.ontologyKey,\n ontologyName: payload.ontologyName,\n topicId: payload.topicId,\n topicName: payload.topicName,\n applied: payload.applied,\n source: payload.source,\n updatedAt: payload.updatedAt,\n },\n });\n return payload;\n}\n\nexport function matchOntologyFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: OntologyMatchInput\n) {\n return matchOntology(createGatewayOntologiesPort(authContext), input);\n}\n\nexport function listOntologiesFromMcpAuth(\n authContext: AuthContext,\n query: OntologyListQuery\n) {\n return listOntologies(createMcpOntologiesPort(authContext), query);\n}\n\nexport function getOntologyFromMcpAuth(\n authContext: AuthContext,\n input: GetOntologyInput | string\n) {\n return getOntology(\n createMcpOntologiesPort(authContext),\n typeof input === \"string\" ? { id: input } : input\n );\n}\n\nexport async function bindOntologyFromMcpAuth(\n authContext: AuthContext,\n input: BindOntologyInput\n) {\n const payload = await bindOntology(createMcpOntologiesPort(authContext), input);\n await emitOntologyEventFromMcpAuth(authContext, {\n topicId: payload.topicId,\n resourceId: payload.ontologyId,\n data: {\n ontologyKey: payload.ontologyKey,\n ontologyName: payload.ontologyName,\n topicId: payload.topicId,\n topicName: payload.topicName,\n applied: payload.applied,\n source: payload.source,\n updatedAt: payload.updatedAt,\n },\n });\n return payload;\n}\n\nexport function matchOntologyFromMcpAuth(\n authContext: AuthContext,\n input: OntologyMatchInput\n) {\n return matchOntology(createMcpOntologiesPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n bindOntologyFromGatewayAuth,\n getOntologyFromGatewayAuth,\n listOntologiesFromGatewayAuth,\n matchOntologyFromGatewayAuth,\n} from \"@lucern/server-core/ontologies\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction handleOntologiesError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleOntologyList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n tenantId?: string;\n tier?: string;\n status?: string;\n };\n}) {\n try {\n const payload = await listOntologiesFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to list ontologies.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleOntologyGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n ontologyId: string;\n}) {\n try {\n const payload = await getOntologyFromGatewayAuth(\n args.authContext,\n args.ontologyId\n );\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to read ontology.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleOntologyBind(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n ontologyId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await bindOntologyFromGatewayAuth(args.authContext, {\n ontologyId: args.ontologyId,\n topicId: readString(body.topicId) ?? \"\",\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to bind ontology.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleOntologyMatch(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await matchOntologyFromGatewayAuth(args.authContext, {\n text: readString(body.text) ?? \"\",\n topicId: readString(body.topicId),\n ontologyId: readString(body.ontologyId),\n minScore:\n typeof body.minScore === \"number\" && Number.isFinite(body.minScore)\n ? body.minScore\n : undefined,\n limit:\n typeof body.limit === \"number\" && Number.isFinite(body.limit)\n ? body.limit\n : undefined,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleOntologiesError(\n error,\n \"Failed to match ontology vocabulary.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n addQuestionFromGatewayAuth,\n advanceQuestionToConvictionFromGatewayAuth,\n answerQuestionFromGatewayAuth,\n archiveQuestionFromGatewayAuth,\n createQuestionsBatchFromGatewayAuth,\n createQuestionFromGatewayAuth,\n deleteQuestionFromGatewayAuth,\n finalizeQuestionConvictionFromGatewayAuth,\n getQuestionAnswerFromGatewayAuth,\n getQuestionFromGatewayAuth,\n listQuestionsFromGatewayAuth,\n refineQuestionFromGatewayAuth,\n updateQuestionConvictionFromGatewayAuth,\n updateQuestionFromGatewayAuth,\n updateQuestionPriorityFromGatewayAuth,\n updateQuestionStatusFromGatewayAuth,\n} from \"@lucern/server-core/questions\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nexport async function handleQuestionCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createQuestionFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n text: readString(body.text) ?? \"\",\n priority: readString(body.priority),\n linkedBeliefId: readString(body.linkedBeliefId),\n metadata: asRecord(body.metadata),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to create question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n}) {\n try {\n const payload = await getQuestionFromGatewayAuth(\n args.authContext,\n args.questionId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionArchive(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await archiveQuestionFromGatewayAuth(args.authContext, {\n id: args.questionId,\n rationale: readString(body.reason) ?? readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to archive question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n priority?: string;\n worktreeId?: string;\n limit?: number;\n cursor?: string;\n };\n}) {\n try {\n const payload = await listQuestionsFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to list questions.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionAnswer(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await answerQuestionFromGatewayAuth(args.authContext, {\n id: args.questionId,\n text: readString(body.text) ?? \"\",\n confidence: readString(body.confidence),\n evidenceIds: readStringArray(body.evidenceIds),\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to answer question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionGetAnswer(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n}) {\n try {\n const payload = await getQuestionAnswerFromGatewayAuth(\n args.authContext,\n args.questionId\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to read answer.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionRefine(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await refineQuestionFromGatewayAuth(args.authContext, {\n id: args.questionId,\n text: readString(body.text) ?? \"\",\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to refine question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdateStatus(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n questionId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionStatusFromGatewayAuth(args.authContext, {\n id: args.questionId,\n status: readString(body.status) ?? \"\",\n rationale: readString(body.rationale),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update question status.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionBatchCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const questions = Array.isArray(body.questions)\n ? body.questions\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n question:\n readString(entry.question) ?? readString(entry.text) ?? \"\",\n category: readString(entry.category),\n priority: readString(entry.priority) as\n | \"high\"\n | \"medium\"\n | \"low\"\n | undefined,\n linkedBeliefNodeId:\n readString(entry.linkedBeliefNodeId) ??\n readString(entry.linkedBeliefId),\n linkedWorktreeId: readString(entry.linkedWorktreeId),\n testType: readString(entry.testType) as\n | \"validates\"\n | \"invalidates\"\n | \"clarifies\"\n | undefined,\n }))\n : [];\n const payload = await createQuestionsBatchFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n questions,\n source: readString(body.source),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to batch create questions.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionAdd(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await addQuestionFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n question: readString(body.question) ?? readString(body.text),\n category: readString(body.category),\n priority: readString(body.priority),\n source: readString(body.source),\n beliefId: readString(body.beliefId) ?? readString(body.linkedBeliefId),\n linkedWorktreeId: readString(body.linkedWorktreeId),\n chatId: readString(body.chatId),\n importance: readNumber(body.importance),\n epistemicUnlock: readString(body.epistemicUnlock),\n metadata: asRecord(body.metadata),\n questionType: readString(body.questionType),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to add question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdatePriority(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionPriorityFromGatewayAuth(\n args.authContext,\n {\n id:\n readString(body.id) ??\n readString(body.nodeId) ??\n readString(body.questionId),\n priority:\n (readString(body.priority) as \"high\" | \"medium\" | \"low\") ?? \"medium\",\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update question priority.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionAdvanceToConviction(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await advanceQuestionToConvictionFromGatewayAuth(\n args.authContext,\n {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n worktreeId: readString(body.worktreeId),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to advance question to conviction.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdateConviction(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionConvictionFromGatewayAuth(\n args.authContext,\n {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n conviction: readNumber(body.conviction),\n answerCompleteness: readString(body.answerCompleteness) as\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | undefined,\n convictionRationale: readString(body.convictionRationale),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to update question conviction.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionFinalizeConviction(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await finalizeQuestionConvictionFromGatewayAuth(\n args.authContext,\n {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n conviction: readNumber(body.conviction) ?? Number.NaN,\n answer: readString(body.answer) ?? \"\",\n convictionRationale: readString(body.convictionRationale),\n answerCompleteness: readString(body.answerCompleteness) as\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | \"unanswerable\"\n | undefined,\n whatWeNeed: readString(body.whatWeNeed),\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(\n error,\n \"Failed to finalize question conviction.\"\n );\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateQuestionFromGatewayAuth(args.authContext, {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n question: readString(body.question) ?? readString(body.text),\n category: readString(body.category) as\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"financial\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"other\"\n | undefined,\n priority: readString(body.priority) as\n | \"high\"\n | \"medium\"\n | \"low\"\n | undefined,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to update question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n\nexport async function handleQuestionDelete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await deleteQuestionFromGatewayAuth(args.authContext, {\n questionId:\n readString(body.questionId) ??\n readString(body.id) ??\n readString(body.nodeId),\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to delete question.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","type SearchResourceType = \"belief\" | \"evidence\" | \"question\";\n\ntype SearchBeliefRecord = {\n beliefId?: string;\n nodeId?: string;\n globalId?: string;\n text?: string;\n canonicalText?: string;\n confidence?: number | null;\n status?: string;\n};\n\ntype SearchEvidenceRecord = {\n evidenceId?: string;\n nodeId?: string;\n globalId?: string;\n text?: string;\n source?: string;\n kind?: string;\n relevanceScore?: number;\n};\n\ntype SearchQuestionRecord = {\n questionId?: string;\n nodeId?: string;\n globalId?: string;\n text?: string;\n status?: string;\n priority?: string;\n linkedBeliefId?: string;\n};\n\nexport type SearchInput = {\n q: string;\n topicId: string;\n types?: SearchResourceType[];\n status?: string;\n minConfidence?: number;\n limit?: number;\n cursor?: string;\n};\n\nexport type SearchBeliefHit = {\n type: \"belief\";\n beliefId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n confidence: number | null;\n status?: string;\n relevanceScore: number;\n};\n\nexport type SearchEvidenceHit = {\n type: \"evidence\";\n evidenceId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n source?: string;\n kind?: string;\n relevanceScore: number;\n};\n\nexport type SearchQuestionHit = {\n type: \"question\";\n questionId: string;\n nodeId: string;\n globalId?: string;\n text: string;\n status?: string;\n priority?: string;\n linkedBeliefId?: string;\n relevanceScore: number;\n};\n\nexport type SearchResult =\n | SearchBeliefHit\n | SearchEvidenceHit\n | SearchQuestionHit;\n\nexport type SearchResponse = {\n q: string;\n topicId: string;\n types: SearchResourceType[];\n results: SearchResult[];\n beliefs: SearchBeliefHit[];\n evidence: SearchEvidenceHit[];\n questions: SearchQuestionHit[];\n};\n\nexport type SearchPort = {\n listBeliefs: (input: {\n topicId: string;\n status?: string;\n minConfidence?: number;\n limit?: number;\n }) => Promise<SearchBeliefRecord[]>;\n searchEvidence: (input: {\n q: string;\n topicId: string;\n limit?: number;\n }) => Promise<SearchEvidenceRecord[]>;\n listQuestions: (input: {\n topicId: string;\n limit?: number;\n }) => Promise<SearchQuestionRecord[]>;\n};\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw new Error(`[search] ${field} is required.`);\n }\n return normalized;\n}\n\nfunction normalizeTypes(value: unknown): SearchResourceType[] {\n const requested = Array.isArray(value)\n ? value\n .map((entry) => readString(entry)?.toLowerCase())\n .filter(\n (entry): entry is SearchResourceType =>\n entry === \"belief\" || entry === \"evidence\" || entry === \"question\"\n )\n : [];\n return requested.length > 0 ? requested : [\"belief\", \"evidence\", \"question\"];\n}\n\nfunction computeSearchScore(query: string, text: string): number | null {\n const needle = query.trim().toLowerCase();\n const haystack = text.trim().toLowerCase();\n if (!needle || !haystack) {\n return null;\n }\n\n if (haystack.includes(needle)) {\n return needle.length + 5;\n }\n\n const tokens = needle.split(/\\s+/).filter(Boolean);\n let score = 0;\n for (const token of tokens) {\n if (haystack.includes(token)) {\n score += token.length;\n }\n }\n\n return score > 0 ? score : null;\n}\n\nexport async function searchResources(\n deps: SearchPort,\n input: SearchInput\n): Promise<SearchResponse> {\n const q = normalizeRequiredString(input.q, \"q\");\n const topicId = normalizeRequiredString(input.topicId, \"topicId\");\n const limit = Math.max(1, readNumber(input.limit) ?? 25);\n const searchWindow = Math.max(limit * 4, 25);\n const types = normalizeTypes(input.types);\n\n const [beliefsPage, evidencePage, questionsPage] = await Promise.all([\n types.includes(\"belief\")\n ? deps.listBeliefs({\n topicId,\n status: readString(input.status),\n minConfidence: readNumber(input.minConfidence),\n limit: searchWindow,\n })\n : Promise.resolve([]),\n types.includes(\"evidence\")\n ? deps.searchEvidence({\n q,\n topicId,\n limit: searchWindow,\n })\n : Promise.resolve([]),\n types.includes(\"question\")\n ? deps.listQuestions({\n topicId,\n limit: searchWindow,\n })\n : Promise.resolve([]),\n ]);\n\n const beliefs = beliefsPage\n .map((belief) => {\n const text =\n readString(belief.text) ??\n readString(belief.canonicalText) ??\n \"\";\n const relevanceScore = computeSearchScore(q, text);\n if (relevanceScore === null) {\n return null;\n }\n const beliefId =\n readString(belief.beliefId) ?? readString(belief.nodeId) ?? \"\";\n return {\n type: \"belief\" as const,\n beliefId,\n nodeId: readString(belief.nodeId) ?? beliefId,\n ...(readString(belief.globalId)\n ? { globalId: readString(belief.globalId)! }\n : {}),\n text,\n confidence: readNumber(belief.confidence) ?? null,\n ...(readString(belief.status) ? { status: readString(belief.status)! } : {}),\n relevanceScore,\n };\n })\n .filter((entry): entry is SearchBeliefHit => Boolean(entry))\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n .slice(0, limit);\n\n const evidence = evidencePage\n .map((entry) => {\n const evidenceId =\n readString(entry.evidenceId) ?? readString(entry.nodeId) ?? \"\";\n return {\n type: \"evidence\" as const,\n evidenceId,\n nodeId: readString(entry.nodeId) ?? evidenceId,\n ...(readString(entry.globalId)\n ? { globalId: readString(entry.globalId)! }\n : {}),\n text: readString(entry.text) ?? \"\",\n ...(readString(entry.source) ? { source: readString(entry.source)! } : {}),\n ...(readString(entry.kind) ? { kind: readString(entry.kind)! } : {}),\n relevanceScore: readNumber(entry.relevanceScore) ?? 0,\n };\n })\n .slice(0, limit);\n\n const questions = questionsPage\n .map((question) => {\n const text = readString(question.text) ?? \"\";\n const relevanceScore = computeSearchScore(q, text);\n if (relevanceScore === null) {\n return null;\n }\n const questionId =\n readString(question.questionId) ?? readString(question.nodeId) ?? \"\";\n return {\n type: \"question\" as const,\n questionId,\n nodeId: readString(question.nodeId) ?? questionId,\n ...(readString(question.globalId)\n ? { globalId: readString(question.globalId)! }\n : {}),\n text,\n ...(readString(question.status)\n ? { status: readString(question.status)! }\n : {}),\n ...(readString(question.priority)\n ? { priority: readString(question.priority)! }\n : {}),\n ...(readString(question.linkedBeliefId)\n ? { linkedBeliefId: readString(question.linkedBeliefId)! }\n : {}),\n relevanceScore,\n };\n })\n .filter((entry): entry is SearchQuestionHit => Boolean(entry))\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n .slice(0, limit);\n\n const results = [...beliefs, ...evidence, ...questions]\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n .slice(0, limit);\n\n return {\n q,\n topicId,\n types,\n results,\n beliefs,\n evidence,\n questions,\n };\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n searchResources,\n type SearchInput,\n type SearchPort,\n} from \"./domain/search\";\nimport { listBeliefsFromGatewayAuth } from \"./beliefs\";\nimport { searchEvidenceFromGatewayAuth } from \"./evidence\";\nimport { listQuestionsFromGatewayAuth } from \"./questions\";\n\nfunction createGatewaySearchPort(authContext: GatewayAuthContext): SearchPort {\n return {\n async listBeliefs(input) {\n const page = await listBeliefsFromGatewayAuth(authContext, input);\n return page.beliefs;\n },\n async searchEvidence(input) {\n const page = await searchEvidenceFromGatewayAuth(authContext, input);\n return page.results;\n },\n async listQuestions(input) {\n const page = await listQuestionsFromGatewayAuth(authContext, input);\n return page.questions;\n },\n };\n}\n\nexport function searchResourcesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: SearchInput\n) {\n return searchResources(createGatewaySearchPort(authContext), input);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport { searchResourcesFromGatewayAuth } from \"@lucern/server-core/search\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const items = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return items.length > 0 ? items : undefined;\n}\n\nexport async function handleSearchResources(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n const body = asRecord(args.body);\n const q = readString(body.q) ?? readString(body.query);\n const topicId = readString(body.topicId) ?? readString(body.projectId);\n if (!q) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"q is required.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n if (!topicId) {\n return errorResponse({\n code: \"INVALID_REQUEST\",\n message: \"topicId is required for cross-resource search.\",\n status: 400,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n }\n try {\n const payload = await searchResourcesFromGatewayAuth(args.authContext, {\n q,\n topicId,\n types: readStringArray(body.types) as\n | Array<\"belief\" | \"evidence\" | \"question\">\n | undefined,\n status: readString(body.status),\n minConfidence: readNumber(body.minConfidence),\n limit: readNumber(body.limit),\n cursor: readString(body.cursor),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n const resolved = resolveGatewayError(error, \"Failed to search.\");\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n }\n}\n","type TaskStatus = \"todo\" | \"in_progress\" | \"blocked\" | \"done\";\ntype TaskPriority = \"low\" | \"medium\" | \"high\" | \"urgent\";\ntype TaskType =\n | \"research\"\n | \"interview\"\n | \"analysis\"\n | \"data_collection\"\n | \"general\";\n\ntype StructuredTasksError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type TaskRecord = {\n id: string;\n taskId: string;\n topicId?: string;\n title: string;\n description?: string;\n status: TaskStatus;\n priority: TaskPriority;\n taskType: TaskType;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n outputSummary?: string;\n createdAt?: number;\n updatedAt?: number;\n completedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TaskListResult = {\n tasks: TaskRecord[];\n count: number;\n};\n\nexport type CreateTaskInput = {\n topicId: string;\n title: string;\n description?: string;\n taskType?: string;\n priority?: string;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type UpdateTaskInput = {\n id: string;\n title?: string;\n description?: string;\n priority?: string;\n status?: string;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type CompleteTaskInput = {\n id: string;\n outputSummary?: string;\n};\n\nexport type ListTasksQuery = {\n topicId?: string;\n worktreeId?: string;\n status?: string;\n limit?: number;\n};\n\ntype TaskCreatePortInput = {\n topicId: string;\n title: string;\n description?: string;\n taskType: TaskType;\n priority: TaskPriority;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\ntype TaskUpdatePortInput = {\n taskRawId: string;\n title?: string;\n description?: string;\n priority?: TaskPriority;\n status?: TaskStatus;\n linkedBeliefId?: string;\n linkedQuestionId?: string;\n linkedWorktreeId?: string;\n metadata?: Record<string, unknown>;\n};\n\ntype TaskCompletePortInput = {\n taskRawId: string;\n outputSummary?: string;\n};\n\nexport type TasksPort = {\n fetchTask: (rawId: string) => Promise<unknown | null>;\n listTasksByTopic: (args: {\n topicId: string;\n status?: TaskStatus;\n limit?: number;\n }) => Promise<unknown[]>;\n listTasksByWorktree: (args: { worktreeId: string }) => Promise<unknown[]>;\n createTask: (input: TaskCreatePortInput) => Promise<unknown>;\n updateTask: (input: TaskUpdatePortInput) => Promise<unknown>;\n completeTask: (input: TaskCompletePortInput) => Promise<unknown>;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throwTasksError({\n message: `[tasks] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction throwTasksError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredTasksError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction normalizeTaskStatus(value: unknown): TaskStatus {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"in_progress\":\n return \"in_progress\";\n case \"blocked\":\n return \"blocked\";\n case \"done\":\n return \"done\";\n case \"todo\":\n case \"pending\":\n default:\n return \"todo\";\n }\n}\n\nfunction normalizeTaskPriority(value: unknown): TaskPriority {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"urgent\":\n case \"critical\":\n return \"urgent\";\n case \"high\":\n return \"high\";\n case \"low\":\n return \"low\";\n default:\n return \"medium\";\n }\n}\n\nfunction normalizeTaskType(value: unknown): TaskType {\n const normalized = readString(value)?.toLowerCase();\n switch (normalized) {\n case \"research\":\n case \"interview\":\n case \"analysis\":\n case \"data_collection\":\n case \"general\":\n return normalized;\n default:\n return \"general\";\n }\n}\n\nfunction extractTaskRawId(value: unknown, field = \"taskId\"): string {\n const record = asRecord(value);\n const rawId = readString(record.taskId ?? record._id ?? record.id);\n return normalizeRequiredString(rawId, field);\n}\n\nfunction normalizeTaskRecord(value: unknown): TaskRecord {\n const record = asRecord(value);\n const metadata = asRecord(record.metadata);\n const taskId = extractTaskRawId(record);\n\n return {\n id: taskId,\n taskId,\n ...(readString(record.topicId) ? { topicId: readString(record.topicId)! } : {}),\n title: normalizeRequiredString(record.title, \"title\"),\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n status: normalizeTaskStatus(record.status ?? metadata.status),\n priority: normalizeTaskPriority(record.priority ?? metadata.priority),\n taskType: normalizeTaskType(record.taskType ?? metadata.taskType),\n ...(readString(record.linkedBeliefId)\n ? { linkedBeliefId: readString(record.linkedBeliefId)! }\n : {}),\n ...(readString(record.linkedQuestionId)\n ? { linkedQuestionId: readString(record.linkedQuestionId)! }\n : {}),\n ...(readString(record.linkedWorktreeId)\n ? { linkedWorktreeId: readString(record.linkedWorktreeId)! }\n : {}),\n ...(readString(record.outputSummary)\n ? { outputSummary: readString(record.outputSummary)! }\n : {}),\n ...(readNumber(record.createdAt) ? { createdAt: readNumber(record.createdAt)! } : {}),\n ...(readNumber(record.updatedAt) ? { updatedAt: readNumber(record.updatedAt)! } : {}),\n ...(readNumber(record.completedAt)\n ? { completedAt: readNumber(record.completedAt)! }\n : {}),\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n}\n\nasync function fetchNormalizedTask(\n deps: TasksPort,\n rawId: string\n): Promise<TaskRecord> {\n const task = await deps.fetchTask(rawId);\n if (!task) {\n throwTasksError({\n message: `[tasks.get] Task ${rawId} was not found.`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"entity.exists\",\n suggestion: \"Verify the task identifier and try again.\",\n });\n }\n return normalizeTaskRecord(task);\n}\n\nexport async function createTask(\n deps: TasksPort,\n input: CreateTaskInput\n): Promise<TaskRecord> {\n const created = await deps.createTask({\n topicId: normalizeRequiredString(input.topicId, \"topicId\"),\n title: normalizeRequiredString(input.title, \"title\"),\n description: readString(input.description),\n taskType: normalizeTaskType(input.taskType),\n priority: normalizeTaskPriority(input.priority),\n linkedBeliefId: readString(input.linkedBeliefId),\n linkedQuestionId: readString(input.linkedQuestionId),\n linkedWorktreeId: readString(input.linkedWorktreeId),\n metadata:\n input.metadata &&\n typeof input.metadata === \"object\" &&\n !Array.isArray(input.metadata)\n ? input.metadata\n : undefined,\n });\n\n return fetchNormalizedTask(deps, extractTaskRawId(created, \"created task id\"));\n}\n\nexport async function updateTask(\n deps: TasksPort,\n input: UpdateTaskInput\n): Promise<TaskRecord> {\n const taskRawId = normalizeRequiredString(input.id, \"id\");\n const hasPatchField =\n input.title !== undefined ||\n input.description !== undefined ||\n input.priority !== undefined ||\n input.status !== undefined ||\n input.linkedBeliefId !== undefined ||\n input.linkedQuestionId !== undefined ||\n input.linkedWorktreeId !== undefined ||\n input.metadata !== undefined;\n\n if (hasPatchField) {\n await deps.updateTask({\n taskRawId,\n ...(input.title !== undefined ? { title: readString(input.title) } : {}),\n ...(input.description !== undefined\n ? { description: readString(input.description) }\n : {}),\n ...(input.priority !== undefined\n ? { priority: normalizeTaskPriority(input.priority) }\n : {}),\n ...(input.status !== undefined\n ? { status: normalizeTaskStatus(input.status) }\n : {}),\n ...(input.linkedBeliefId !== undefined\n ? { linkedBeliefId: readString(input.linkedBeliefId) }\n : {}),\n ...(input.linkedQuestionId !== undefined\n ? { linkedQuestionId: readString(input.linkedQuestionId) }\n : {}),\n ...(input.linkedWorktreeId !== undefined\n ? { linkedWorktreeId: readString(input.linkedWorktreeId) }\n : {}),\n ...(input.metadata &&\n typeof input.metadata === \"object\" &&\n !Array.isArray(input.metadata)\n ? { metadata: input.metadata }\n : {}),\n });\n }\n\n return fetchNormalizedTask(deps, taskRawId);\n}\n\nexport async function completeTask(\n deps: TasksPort,\n input: CompleteTaskInput\n): Promise<TaskRecord> {\n const taskRawId = normalizeRequiredString(input.id, \"id\");\n await deps.completeTask({\n taskRawId,\n outputSummary: readString(input.outputSummary),\n });\n return fetchNormalizedTask(deps, taskRawId);\n}\n\nexport async function listTasks(\n deps: TasksPort,\n query: ListTasksQuery\n): Promise<TaskListResult> {\n const topicId = readString(query.topicId);\n const worktreeId = readString(query.worktreeId);\n\n if (!topicId && !worktreeId) {\n throwTasksError({\n message: \"[tasks] topicId or worktreeId is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: \"Provide topicId or worktreeId when listing tasks.\",\n });\n }\n\n const limit =\n typeof query.limit === \"number\" && Number.isFinite(query.limit)\n ? Math.max(1, Math.floor(query.limit))\n : undefined;\n const status =\n query.status !== undefined ? normalizeTaskStatus(query.status) : undefined;\n\n const tasks = worktreeId\n ? await deps.listTasksByWorktree({ worktreeId })\n : await deps.listTasksByTopic({\n topicId: topicId ?? \"\",\n status,\n limit,\n });\n\n const normalized = (Array.isArray(tasks) ? tasks : [])\n .map((task) => normalizeTaskRecord(task))\n .filter((task) => {\n if (topicId && task.topicId && task.topicId !== topicId) {\n return false;\n }\n if (worktreeId && task.linkedWorktreeId && task.linkedWorktreeId !== worktreeId) {\n return false;\n }\n if (status && task.status !== status) {\n return false;\n }\n return true;\n });\n\n const limited = limit ? normalized.slice(0, limit) : normalized;\n return {\n tasks: limited,\n count: normalized.length,\n };\n}\n","import { api } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport {\n completeTask,\n createTask,\n listTasks,\n updateTask,\n type CompleteTaskInput,\n type CreateTaskInput,\n type ListTasksQuery,\n type TasksPort,\n type UpdateTaskInput,\n} from \"./domain/tasks\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nasync function emitTaskEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"task\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitTaskEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitTaskEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"task\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayTasksPort(authContext: GatewayAuthContext): TasksPort {\n return {\n fetchTask(rawId) {\n return authContext.convex.query(api.tasks.get as any, {\n taskId: rawId as any,\n userId: authContext.userId,\n });\n },\n listTasksByTopic(args) {\n return authContext.convex.query(api.tasks.getByTopic as any, {\n topicId: args.topicId as any,\n ...(args.status ? { status: args.status } : {}),\n ...(typeof args.limit === \"number\" ? { limit: args.limit } : {}),\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n listTasksByWorktree(args) {\n return authContext.convex.query(api.tasks.getByWorktree as any, {\n worktreeId: args.worktreeId as any,\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n createTask(input) {\n return authContext.convex.mutation(api.tasks.create as any, {\n topicId: input.topicId as any,\n title: input.title,\n ...(input.description ? { description: input.description } : {}),\n taskType: input.taskType as any,\n priority: input.priority as any,\n ...(input.linkedBeliefId\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n updateTask(input) {\n return authContext.convex.mutation(api.tasks.update as any, {\n taskId: input.taskRawId as any,\n ...(input.title !== undefined ? { title: input.title } : {}),\n ...(input.description !== undefined\n ? { description: input.description }\n : {}),\n ...(input.priority !== undefined ? { priority: input.priority as any } : {}),\n ...(input.status !== undefined ? { status: input.status as any } : {}),\n ...(input.linkedBeliefId !== undefined\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId !== undefined\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId !== undefined\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n completeTask(input) {\n return authContext.convex.mutation(api.tasks.complete as any, {\n taskId: input.taskRawId as any,\n ...(input.outputSummary ? { outputSummary: input.outputSummary } : {}),\n userId: authContext.userId,\n });\n },\n };\n}\n\nfunction createMcpTasksPort(authContext: AuthContext): TasksPort {\n const convex = requireMcpConvex(authContext, \"createMcpTasksPort\");\n return {\n fetchTask(rawId) {\n return convex.query(api.tasks.get as any, {\n taskId: rawId as any,\n userId: authContext.userId,\n });\n },\n listTasksByTopic(args) {\n return convex.query(api.tasks.getByTopic as any, {\n topicId: args.topicId as any,\n ...(args.status ? { status: args.status } : {}),\n ...(typeof args.limit === \"number\" ? { limit: args.limit } : {}),\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n listTasksByWorktree(args) {\n return convex.query(api.tasks.getByWorktree as any, {\n worktreeId: args.worktreeId as any,\n userId: authContext.userId,\n }) as Promise<unknown[]>;\n },\n createTask(input) {\n return convex.mutation(api.tasks.create as any, {\n topicId: input.topicId as any,\n title: input.title,\n ...(input.description ? { description: input.description } : {}),\n taskType: input.taskType as any,\n priority: input.priority as any,\n ...(input.linkedBeliefId\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n updateTask(input) {\n return convex.mutation(api.tasks.update as any, {\n taskId: input.taskRawId as any,\n ...(input.title !== undefined ? { title: input.title } : {}),\n ...(input.description !== undefined\n ? { description: input.description }\n : {}),\n ...(input.priority !== undefined ? { priority: input.priority as any } : {}),\n ...(input.status !== undefined ? { status: input.status as any } : {}),\n ...(input.linkedBeliefId !== undefined\n ? { linkedBeliefId: input.linkedBeliefId as any }\n : {}),\n ...(input.linkedQuestionId !== undefined\n ? { linkedQuestionId: input.linkedQuestionId as any }\n : {}),\n ...(input.linkedWorktreeId !== undefined\n ? { linkedWorktreeId: input.linkedWorktreeId as any }\n : {}),\n ...(input.metadata ? { metadata: input.metadata } : {}),\n userId: authContext.userId,\n });\n },\n completeTask(input) {\n return convex.mutation(api.tasks.complete as any, {\n taskId: input.taskRawId as any,\n ...(input.outputSummary ? { outputSummary: input.outputSummary } : {}),\n userId: authContext.userId,\n });\n },\n };\n}\n\nexport async function createTaskFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateTaskInput\n) {\n const payload = await createTask(createGatewayTasksPort(authContext), input);\n await emitTaskEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"task.created\",\n resourceId: payload.id,\n data: {\n title: payload.title,\n description: payload.description,\n status: payload.status,\n priority: payload.priority,\n taskType: payload.taskType,\n linkedBeliefId: payload.linkedBeliefId,\n linkedQuestionId: payload.linkedQuestionId,\n linkedWorktreeId: payload.linkedWorktreeId,\n metadata: payload.metadata,\n },\n });\n return payload;\n}\n\nexport async function updateTaskFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateTaskInput\n) {\n const payload = await updateTask(createGatewayTasksPort(authContext), input);\n await emitTaskEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"task.updated\",\n resourceId: payload.id,\n data: {\n title: payload.title,\n description: payload.description,\n status: payload.status,\n priority: payload.priority,\n linkedBeliefId: payload.linkedBeliefId,\n linkedQuestionId: payload.linkedQuestionId,\n linkedWorktreeId: payload.linkedWorktreeId,\n metadata: payload.metadata,\n },\n });\n return payload;\n}\n\nexport async function completeTaskFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CompleteTaskInput\n) {\n const payload = await completeTask(createGatewayTasksPort(authContext), input);\n await emitTaskEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? \"\",\n type: \"task.completed\",\n resourceId: payload.id,\n data: {\n status: payload.status,\n outputSummary: payload.outputSummary,\n completedAt: payload.completedAt,\n },\n });\n return payload;\n}\n\nexport function listTasksFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListTasksQuery\n) {\n return listTasks(createGatewayTasksPort(authContext), query);\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n completeTaskFromGatewayAuth,\n createTaskFromGatewayAuth,\n listTasksFromGatewayAuth,\n updateTaskFromGatewayAuth,\n} from \"@lucern/server-core/tasks\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction handleTasksError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleTaskCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createTaskFromGatewayAuth(args.authContext, {\n topicId: readString(body.topicId) ?? \"\",\n title: readString(body.title) ?? \"\",\n description: readString(body.description),\n taskType: readString(body.taskType),\n priority: readString(body.priority),\n linkedBeliefId: readString(body.linkedBeliefId),\n linkedQuestionId: readString(body.linkedQuestionId),\n linkedWorktreeId: readString(body.linkedWorktreeId),\n metadata:\n body.metadata &&\n typeof body.metadata === \"object\" &&\n !Array.isArray(body.metadata)\n ? (body.metadata as Record<string, unknown>)\n : undefined,\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to create task.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTaskList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n worktreeId?: string;\n status?: string;\n limit?: number;\n };\n}) {\n try {\n const payload = await listTasksFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to list tasks.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTaskUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n taskId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateTaskFromGatewayAuth(args.authContext, {\n id: args.taskId,\n title: readString(body.title),\n description: readString(body.description),\n priority: readString(body.priority),\n status: readString(body.status),\n linkedBeliefId: readString(body.linkedBeliefId),\n linkedQuestionId: readString(body.linkedQuestionId),\n linkedWorktreeId: readString(body.linkedWorktreeId),\n metadata:\n body.metadata &&\n typeof body.metadata === \"object\" &&\n !Array.isArray(body.metadata)\n ? (body.metadata as Record<string, unknown>)\n : undefined,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to update task.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTaskComplete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n taskId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await completeTaskFromGatewayAuth(args.authContext, {\n id: args.taskId,\n outputSummary: readString(body.outputSummary),\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTasksError(\n error,\n \"Failed to complete task.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype TopicStatus = \"active\" | \"archived\" | \"watching\";\ntype TopicVisibility = \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\ntype TopicCoverageState = \"full\" | \"partial\" | \"empty\";\n\ntype TopicsError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type TopicRecord = {\n id: string;\n topicId: string;\n globalId?: string;\n name: string;\n description?: string;\n type: string;\n depth?: number;\n status?: TopicStatus;\n parentTopicId?: string | null;\n tenantId?: string;\n workspaceId?: string;\n visibility?: TopicVisibility;\n createdAt?: number;\n updatedAt?: number;\n};\n\nexport type TopicListResult = {\n topics: TopicRecord[];\n total: number;\n};\n\nexport type TopicTreeNode = TopicRecord & {\n path?: string[];\n};\n\nexport type TopicTreeResult = {\n tree: TopicTreeNode[];\n};\n\nexport type TopicCoverageRecord = {\n topicId: string;\n name: string;\n type: string;\n depth: number;\n beliefs: number;\n questions: number;\n evidence: number;\n coverage: TopicCoverageState;\n};\n\nexport type TopicCoverageSummary = {\n totalTopics: number;\n coveredTopics: number;\n emptyTopics: number;\n coveragePercent: number;\n totalBeliefs: number;\n totalQuestions: number;\n totalEvidence: number;\n};\n\nexport type TopicCoverageResult = {\n topics: TopicCoverageRecord[];\n summary: TopicCoverageSummary;\n scopeTopicId?: string | null;\n};\n\nexport type CreateTopicInput = {\n name: string;\n description?: string;\n type?: string;\n parentTopicId?: string;\n ontologyId?: string;\n tenantId?: string;\n workspaceId?: string;\n visibility?: TopicVisibility;\n createdBy?: string;\n};\n\nexport type UpdateTopicInput = {\n id: string;\n name?: string;\n description?: string;\n type?: string;\n ontologyId?: string;\n clearOntologyId?: boolean;\n status?: TopicStatus;\n visibility?: TopicVisibility;\n};\n\nexport type GetTopicInput = {\n id: string;\n};\n\nexport type ListTopicsQuery = {\n ontologyId?: string;\n parentTopicId?: string;\n status?: TopicStatus | string;\n type?: string;\n};\n\nexport type GetTopicTreeInput = {\n id: string;\n maxDepth?: number;\n};\n\nexport type GetTopicCoverageInput = {\n id: string;\n includeDescendants?: boolean;\n maxDepth?: number;\n};\n\ntype CreateTopicPortInput = {\n name: string;\n description?: string;\n type: string;\n parentTopicRawId?: string;\n ontologyId?: string;\n tenantId?: string;\n workspaceId?: string;\n visibility?: TopicVisibility;\n createdBy?: string;\n};\n\ntype UpdateTopicPortInput = {\n topicRawId: string;\n name?: string;\n description?: string;\n type?: string;\n ontologyId?: string;\n clearOntologyId?: boolean;\n status?: TopicStatus;\n visibility?: TopicVisibility;\n};\n\nexport type TopicsPort = {\n fetchTopic: (rawId: string) => Promise<unknown | null>;\n listTopics: (query: {\n ontologyId?: string;\n parentTopicRawId?: string;\n status?: string;\n type?: string;\n }) => Promise<unknown[]>;\n createTopic: (input: CreateTopicPortInput) => Promise<unknown>;\n updateTopic?: (input: UpdateTopicPortInput) => Promise<unknown>;\n fetchTopicTree: (args: {\n rootRawId: string;\n maxDepth?: number;\n }) => Promise<unknown>;\n listBeliefsByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n listQuestionsByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n listEvidenceByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n};\n\nfunction createTopicsError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): TopicsError {\n const error = new Error(args.message) as TopicsError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n return error;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | 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\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction requireString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw createTopicsError({\n message: `[topics] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, prefix: string, field: string): string {\n const normalized = requireString(id, field);\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix !== prefix) {\n throw createTopicsError({\n message: `[topics] Expected ${prefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${prefix}_ prefixed identifier for ${field}.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (\n error instanceof Error &&\n \"status\" in error &&\n typeof (error as TopicsError).status === \"number\"\n ) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeTopicId(rawId: string): string {\n return encodePrefixedId(\"top\", requireString(rawId, \"topicId\"));\n}\n\nfunction normalizeTopicStatus(value: unknown): TopicStatus | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"active\" ||\n normalized === \"archived\" ||\n normalized === \"watching\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeTopicVisibility(value: unknown): TopicVisibility | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (\n normalized === \"private\" ||\n normalized === \"team\" ||\n normalized === \"firm\" ||\n normalized === \"external\" ||\n normalized === \"public\"\n ) {\n return normalized;\n }\n return undefined;\n}\n\nfunction normalizeTopicRecord(value: unknown): TopicRecord {\n const record = asRecord(value);\n const rawId =\n readString(record.topicId) ??\n readString(record.id) ??\n readString(record._id) ??\n readString(record.projectId);\n\n if (!rawId) {\n throw createTopicsError({\n message: \"[topics] topicId is required in upstream topic payload.\",\n status: 500,\n code: \"INTERNAL_ERROR\",\n invariantCode: \"resource.exists\",\n });\n }\n\n const topicId = encodeTopicId(rawId);\n const parentTopicRawId = readString(record.parentTopicId);\n\n return {\n id: topicId,\n topicId,\n ...(readString(record.globalId) ? { globalId: readString(record.globalId)! } : {}),\n name: requireString(record.name, \"name\"),\n type: readString(record.type) ?? \"theme\",\n ...(readString(record.description)\n ? { description: readString(record.description)! }\n : {}),\n ...(readNumber(record.depth) !== undefined\n ? { depth: readNumber(record.depth)! }\n : {}),\n ...(normalizeTopicStatus(record.status)\n ? { status: normalizeTopicStatus(record.status)! }\n : {}),\n ...(parentTopicRawId\n ? { parentTopicId: encodeTopicId(parentTopicRawId) }\n : record.parentTopicId === null\n ? { parentTopicId: null }\n : {}),\n ...(readString(record.tenantId) ? { tenantId: readString(record.tenantId)! } : {}),\n ...(readString(record.workspaceId)\n ? { workspaceId: readString(record.workspaceId)! }\n : {}),\n ...(normalizeTopicVisibility(record.visibility)\n ? { visibility: normalizeTopicVisibility(record.visibility)! }\n : {}),\n ...(readNumber(record.createdAt ?? record._creationTime) !== undefined\n ? { createdAt: readNumber(record.createdAt ?? record._creationTime)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nfunction normalizeTopicTreeResults(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n\n const record = asRecord(value);\n if (Array.isArray(record.tree)) {\n return record.tree;\n }\n\n return [];\n}\n\nfunction normalizeTopicTreeNode(value: unknown): TopicTreeNode {\n const record = asRecord(value);\n return {\n ...normalizeTopicRecord(record),\n ...(readStringArray(record.path) ? { path: readStringArray(record.path)! } : {}),\n };\n}\n\nfunction dedupeTopics(records: TopicRecord[]): TopicRecord[] {\n const byId = new Map<string, TopicRecord>();\n for (const record of records) {\n byId.set(record.topicId, record);\n }\n return [...byId.values()];\n}\n\nfunction classifyCoverage(\n beliefs: number,\n questions: number,\n evidence: number\n): TopicCoverageState {\n if (beliefs === 0) {\n return \"empty\";\n }\n if (questions > 0 || evidence > 0) {\n return \"full\";\n }\n return \"partial\";\n}\n\nexport async function createTopic(\n deps: TopicsPort,\n input: CreateTopicInput\n): Promise<TopicRecord> {\n const created = await deps.createTopic({\n name: requireString(input.name, \"name\"),\n description: readString(input.description),\n type: readString(input.type) ?? \"theme\",\n parentTopicRawId: input.parentTopicId\n ? decodeExternalId(input.parentTopicId, \"top\", \"parentTopicId\")\n : undefined,\n ontologyId: readString(input.ontologyId),\n tenantId: readString(input.tenantId),\n workspaceId: readString(input.workspaceId),\n visibility: normalizeTopicVisibility(input.visibility),\n createdBy: readString(input.createdBy),\n });\n\n const createdRecord = asRecord(created);\n const createdRawId =\n readString(createdRecord.topicId) ??\n readString(createdRecord.id) ??\n readString(createdRecord._id) ??\n readString(createdRecord.projectId);\n\n if (createdRawId && !readString(createdRecord.name)) {\n const hydrated = await deps.fetchTopic(createdRawId);\n if (hydrated) {\n return normalizeTopicRecord({\n ...asRecord(hydrated),\n ...createdRecord,\n topicId:\n readString(asRecord(hydrated).topicId) ??\n readString(asRecord(hydrated).id) ??\n readString(asRecord(hydrated)._id) ??\n readString(asRecord(hydrated).projectId) ??\n createdRawId,\n });\n }\n }\n\n return normalizeTopicRecord(created);\n}\n\nexport async function updateTopic(\n deps: TopicsPort,\n input: UpdateTopicInput\n): Promise<TopicRecord> {\n if (!deps.updateTopic) {\n throw createTopicsError({\n message: \"Topic update is not supported by this surface.\",\n status: 501,\n code: \"UPSTREAM_ERROR\",\n invariantCode: \"platform.internal_stability\",\n });\n }\n\n const updated = await deps.updateTopic({\n topicRawId: decodeExternalId(input.id, \"top\", \"id\"),\n name: readString(input.name),\n description: readString(input.description),\n type: readString(input.type),\n ontologyId: readString(input.ontologyId),\n clearOntologyId:\n typeof input.clearOntologyId === \"boolean\" ? input.clearOntologyId : undefined,\n status: normalizeTopicStatus(input.status),\n visibility: normalizeTopicVisibility(input.visibility),\n });\n\n const updatedRecord = asRecord(updated);\n const updatedRawId =\n readString(updatedRecord.topicId) ??\n readString(updatedRecord.id) ??\n readString(updatedRecord._id) ??\n readString(updatedRecord.projectId) ??\n decodeExternalId(input.id, \"top\", \"id\");\n\n if (!readString(updatedRecord.name) || !readString(updatedRecord.topicId)) {\n const hydrated = await deps.fetchTopic(updatedRawId);\n if (hydrated) {\n return normalizeTopicRecord({\n ...asRecord(hydrated),\n ...updatedRecord,\n topicId:\n readString(asRecord(hydrated).topicId) ??\n readString(asRecord(hydrated).id) ??\n readString(asRecord(hydrated)._id) ??\n readString(asRecord(hydrated).projectId) ??\n updatedRawId,\n });\n }\n }\n\n return normalizeTopicRecord(updated);\n}\n\nexport async function getTopic(\n deps: TopicsPort,\n input: GetTopicInput\n): Promise<TopicRecord> {\n const rawId = decodeExternalId(input.id, \"top\", \"id\");\n const topic = await deps.fetchTopic(rawId);\n\n if (!topic) {\n throw createTopicsError({\n message: `Topic not found: ${input.id}`,\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"resource.exists\",\n suggestion: \"Check the topicId and scope, then retry.\",\n });\n }\n\n return normalizeTopicRecord(topic);\n}\n\nexport async function listTopics(\n deps: TopicsPort,\n query: ListTopicsQuery = {}\n): Promise<TopicListResult> {\n const topics = await deps.listTopics({\n ontologyId: readString(query.ontologyId),\n parentTopicRawId: query.parentTopicId\n ? decodeExternalId(query.parentTopicId, \"top\", \"parentTopicId\")\n : undefined,\n status: readString(query.status),\n type: readString(query.type),\n });\n\n const normalized = dedupeTopics(\n (Array.isArray(topics) ? topics : []).map((topic) =>\n normalizeTopicRecord(topic)\n )\n );\n\n return {\n topics: normalized,\n total: normalized.length,\n };\n}\n\nexport async function getTopicTree(\n deps: TopicsPort,\n input: GetTopicTreeInput\n): Promise<TopicTreeResult> {\n const root = await getTopic(deps, { id: input.id });\n const tree = await deps.fetchTopicTree({\n rootRawId: decodeExternalId(input.id, \"top\", \"id\"),\n maxDepth:\n typeof input.maxDepth === \"number\" && Number.isFinite(input.maxDepth)\n ? input.maxDepth\n : undefined,\n });\n\n const nodes = normalizeTopicTreeResults(tree).map((entry) =>\n normalizeTopicTreeNode(entry)\n );\n const deduped = dedupeTopics(nodes).map((entry) =>\n entry.topicId === root.topicId ? { ...entry, ...root } : entry\n );\n\n return { tree: deduped };\n}\n\nexport async function getTopicCoverage(\n deps: TopicsPort,\n input: GetTopicCoverageInput\n): Promise<TopicCoverageResult> {\n const root = await getTopic(deps, { id: input.id });\n const includeDescendants = input.includeDescendants ?? true;\n\n const scopedTopics = includeDescendants\n ? (await getTopicTree(deps, {\n id: input.id,\n maxDepth: input.maxDepth,\n })).tree\n : [root];\n\n const topics = await Promise.all(\n scopedTopics.map(async (topic) => {\n const [beliefs, questions, evidence] = await Promise.all([\n deps.listBeliefsByTopic({ topicId: decodeExternalId(topic.topicId, \"top\", \"topicId\"), limit: 500 }),\n deps.listQuestionsByTopic({ topicId: decodeExternalId(topic.topicId, \"top\", \"topicId\"), limit: 500 }),\n deps.listEvidenceByTopic({ topicId: decodeExternalId(topic.topicId, \"top\", \"topicId\"), limit: 500 }),\n ]);\n\n const beliefCount = Array.isArray(beliefs) ? beliefs.length : 0;\n const questionCount = Array.isArray(questions) ? questions.length : 0;\n const evidenceCount = Array.isArray(evidence) ? evidence.length : 0;\n\n return {\n topicId: topic.topicId,\n name: topic.name,\n type: topic.type,\n depth: topic.depth ?? 0,\n beliefs: beliefCount,\n questions: questionCount,\n evidence: evidenceCount,\n coverage: classifyCoverage(\n beliefCount,\n questionCount,\n evidenceCount\n ),\n } satisfies TopicCoverageRecord;\n })\n );\n\n const summary = topics.reduce<TopicCoverageSummary>(\n (accumulator, topic) => {\n accumulator.totalTopics += 1;\n accumulator.coveredTopics += topic.coverage === \"empty\" ? 0 : 1;\n accumulator.emptyTopics += topic.coverage === \"empty\" ? 1 : 0;\n accumulator.totalBeliefs += topic.beliefs;\n accumulator.totalQuestions += topic.questions;\n accumulator.totalEvidence += topic.evidence;\n return accumulator;\n },\n {\n totalTopics: 0,\n coveredTopics: 0,\n emptyTopics: 0,\n coveragePercent: 0,\n totalBeliefs: 0,\n totalQuestions: 0,\n totalEvidence: 0,\n }\n );\n\n summary.coveragePercent =\n summary.totalTopics > 0\n ? Number(\n (\n (summary.coveredTopics / summary.totalTopics) *\n 100\n ).toFixed(2)\n )\n : 0;\n\n return {\n topics,\n summary,\n scopeTopicId: root.topicId,\n };\n}\n","import { api, internal, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n createTopic,\n getTopic,\n getTopicCoverage,\n getTopicTree,\n listTopics,\n updateTopic,\n type CreateTopicInput,\n type GetTopicCoverageInput,\n type GetTopicTreeInput,\n type ListTopicsQuery,\n type TopicsPort,\n type UpdateTopicInput,\n} from \"./domain/topics\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nasync function emitTopicEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.topicId,\n resourceType: \"topic\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitTopicEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitTopicEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.topicId,\n resourceType: \"topic\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction normalizeTopicEventId(topicId: string): string {\n const normalized = topicId.trim();\n if (!normalized) {\n return normalized;\n }\n try {\n const decoded = decodePrefixedId(normalized);\n return decoded.prefix === \"top\" ? decoded.value : normalized;\n } catch {\n return normalized;\n }\n}\n\nfunction readCanonicalTopicRawId(value: unknown): string | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n for (const candidate of [record._id, record.id, record.topicId, record.projectId]) {\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n return normalizeTopicEventId(candidate);\n }\n }\n\n return undefined;\n}\n\nfunction createGatewayTopicsPort(authContext: GatewayAuthContext): TopicsPort {\n return {\n fetchTopic(rawId) {\n return authContext.convex.query(api.topics.get, { id: rawId as any });\n },\n listTopics(query) {\n if (query.ontologyId) {\n return authContext.convex.query(api.topics.listByOntology, {\n ontologyId: query.ontologyId as any,\n }) as Promise<unknown[]>;\n }\n\n return authContext.convex.query(api.topics.list, {\n type: query.type,\n parentTopicId: query.parentTopicRawId as any,\n status: query.status as any,\n }) as Promise<unknown[]>;\n },\n createTopic(input) {\n return authContext.convex.mutation(api.topics.create, {\n name: input.name,\n description: input.description,\n type: input.type,\n parentTopicId: input.parentTopicRawId as any,\n ontologyId: input.ontologyId as any,\n tenantId: input.tenantId,\n workspaceId: input.workspaceId,\n visibility: input.visibility,\n createdBy: input.createdBy ?? authContext.userId,\n });\n },\n updateTopic(input) {\n return authContext.convex.mutation(api.topics.update, {\n id: input.topicRawId as any,\n name: input.name,\n description: input.description,\n type: input.type,\n ontologyId: input.ontologyId as any,\n clearOntologyId: input.clearOntologyId,\n status: input.status,\n visibility: input.visibility,\n });\n },\n fetchTopicTree(args) {\n return authContext.convex.query(api.topics.getTree, {\n rootId: args.rootRawId as any,\n ...(typeof args.maxDepth === \"number\" ? { maxDepth: args.maxDepth } : {}),\n });\n },\n listBeliefsByTopic(args) {\n return authContext.convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listQuestionsByTopic(args) {\n return authContext.convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceByTopic(args) {\n return authContext.convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n };\n}\n\nfunction createMcpTopicsPort(authContext: AuthContext): TopicsPort {\n const convex = requireMcpConvex(authContext, \"createMcpTopicsPort\");\n return {\n fetchTopic(rawId) {\n return convex.query(api.topics.get, { id: rawId as any });\n },\n listTopics(query) {\n if (query.ontologyId) {\n return convex.query(api.topics.listByOntology, {\n ontologyId: query.ontologyId as any,\n }) as Promise<unknown[]>;\n }\n\n return convex.query(api.topics.list, {\n type: query.type,\n parentTopicId: query.parentTopicRawId as any,\n status: query.status as any,\n }) as Promise<unknown[]>;\n },\n createTopic(input) {\n return convex.mutation(api.topics.create, {\n name: input.name,\n description: input.description,\n type: input.type,\n parentTopicId: input.parentTopicRawId as any,\n ontologyId: input.ontologyId as any,\n tenantId: input.tenantId,\n workspaceId: input.workspaceId,\n visibility: input.visibility,\n createdBy: input.createdBy ?? authContext.userId,\n });\n },\n updateTopic(input) {\n return convex.mutation(api.topics.update, {\n id: input.topicRawId as any,\n name: input.name,\n description: input.description,\n type: input.type,\n ontologyId: input.ontologyId as any,\n clearOntologyId: input.clearOntologyId,\n status: input.status,\n visibility: input.visibility,\n });\n },\n fetchTopicTree(args) {\n return convex.query(api.topics.getTree, {\n rootId: args.rootRawId as any,\n ...(typeof args.maxDepth === \"number\" ? { maxDepth: args.maxDepth } : {}),\n });\n },\n listBeliefsByTopic(args) {\n return convex.query(api.epistemicBeliefs.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listQuestionsByTopic(args) {\n return convex.query(api.epistemicQuestions.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n listEvidenceByTopic(args) {\n return convex.query(api.epistemicEvidence.getByTopic, {\n topicId: args.topicId as any,\n userId: authContext.userId,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n };\n}\n\nexport async function createTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateTopicInput\n) {\n const payload = await createTopic(createGatewayTopicsPort(authContext), input);\n await emitTopicEventFromGatewayAuth(authContext, {\n topicId: normalizeTopicEventId(payload.topicId),\n type: \"topic.created\",\n data: {\n name: payload.name,\n description: payload.description,\n type: payload.type,\n status: payload.status,\n visibility: payload.visibility,\n parentTopicId: payload.parentTopicId,\n ontologyId: input.ontologyId,\n },\n });\n return payload;\n}\n\nexport async function updateTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateTopicInput\n) {\n const payload = await updateTopic(createGatewayTopicsPort(authContext), input);\n await emitTopicEventFromGatewayAuth(authContext, {\n topicId: normalizeTopicEventId(payload.topicId),\n type: payload.status === \"archived\" ? \"topic.archived\" : \"topic.updated\",\n data: {\n name: payload.name,\n description: payload.description,\n type: payload.type,\n status: payload.status,\n visibility: payload.visibility,\n ontologyId: input.clearOntologyId ? null : input.ontologyId,\n },\n });\n return payload;\n}\n\nexport function getTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n id: string\n) {\n return getTopic(createGatewayTopicsPort(authContext), { id });\n}\n\nexport function listTopicsFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListTopicsQuery\n) {\n return listTopics(createGatewayTopicsPort(authContext), query);\n}\n\nexport function getTopicTreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GetTopicTreeInput\n) {\n return getTopicTree(createGatewayTopicsPort(authContext), input);\n}\n\nexport function getTopicCoverageFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: GetTopicCoverageInput\n) {\n return getTopicCoverage(createGatewayTopicsPort(authContext), input);\n}\n\nexport async function removeTopicFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n id: string;\n }\n) {\n const requestedId = normalizeTopicEventId(input.id);\n const existingTopic = await authContext.convex.query(api.topics.get, {\n id: requestedId,\n });\n const normalizedId = readCanonicalTopicRawId(existingTopic) ?? requestedId;\n const payload = await authContext.convex.mutation(api.topics.remove, {\n id: normalizedId,\n });\n return {\n ...(payload as Record<string, unknown>),\n id: input.id,\n };\n}\n\nexport function bulkCreateTopicsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n topics: Array<{\n globalId: string;\n name: string;\n description?: string;\n type: string;\n parentTopicId?: string;\n depth: number;\n path: string[];\n tenantId?: string;\n workspaceId?: string;\n graphScopeProjectId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n visibility?: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n metadata?: unknown;\n createdBy?: string;\n }>;\n }\n) {\n return authContext.convex.mutation(internal.topics.bulkCreate, {\n topics: input.topics.map((topic) => ({\n ...topic,\n createdBy: topic.createdBy ?? authContext.userId,\n })),\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n bulkCreateTopicsFromGatewayAuth,\n createTopicFromGatewayAuth,\n getTopicCoverageFromGatewayAuth,\n getTopicFromGatewayAuth,\n getTopicTreeFromGatewayAuth,\n listTopicsFromGatewayAuth,\n removeTopicFromGatewayAuth,\n updateTopicFromGatewayAuth,\n} from \"@lucern/server-core/topics\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\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\nfunction handleTopicsError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleTopicCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createTopicFromGatewayAuth(args.authContext, {\n name: readString(body.name) ?? \"\",\n description: readString(body.description),\n type: readString(body.type),\n parentTopicId: readString(body.parentTopicId),\n ontologyId: readString(body.ontologyId),\n tenantId: readString(body.tenantId),\n workspaceId: readString(body.workspaceId),\n visibility: readString(body.visibility) as any,\n createdBy: readString(body.createdBy),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to create topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateTopicFromGatewayAuth(args.authContext, {\n id: args.topicId,\n name: readString(body.name),\n description: readString(body.description),\n type: readString(body.type),\n ontologyId: readString(body.ontologyId),\n clearOntologyId: readBoolean(body.clearOntologyId),\n status: readString(body.status) as any,\n visibility: readString(body.visibility) as any,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to update topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n}) {\n try {\n const payload = await getTopicFromGatewayAuth(args.authContext, args.topicId);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to read topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n ontologyId?: string;\n parentTopicId?: string;\n status?: string;\n type?: string;\n };\n}) {\n try {\n const payload = await listTopicsFromGatewayAuth(args.authContext, args.query);\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to list topics.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicTree(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n query: {\n maxDepth?: number;\n };\n}) {\n try {\n const payload = await getTopicTreeFromGatewayAuth(args.authContext, {\n id: args.topicId,\n maxDepth: readNumber(args.query.maxDepth),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to load topic tree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicCoverage(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n topicId: string;\n query: {\n includeDescendants?: boolean;\n maxDepth?: number;\n };\n}) {\n try {\n const payload = await getTopicCoverageFromGatewayAuth(args.authContext, {\n id: args.topicId,\n includeDescendants:\n typeof args.query.includeDescendants === \"boolean\"\n ? args.query.includeDescendants\n : undefined,\n maxDepth: readNumber(args.query.maxDepth),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to load topic coverage.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicRemove(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await removeTopicFromGatewayAuth(args.authContext, {\n id: readString(body.id) ?? readString(body.topicId) ?? \"\",\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to remove topic.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleTopicBulkCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const topics = Array.isArray(body.topics)\n ? body.topics\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n globalId: readString(entry.globalId) ?? \"\",\n name: readString(entry.name) ?? \"\",\n description: readString(entry.description),\n type: readString(entry.type) ?? \"theme\",\n parentTopicId: readString(entry.parentTopicId),\n depth: readNumber(entry.depth) ?? 0,\n path: readStringArray(entry.path) ?? [],\n tenantId: readString(entry.tenantId),\n workspaceId: readString(entry.workspaceId),\n graphScopeProjectId: readString(entry.graphScopeProjectId),\n status:\n (readString(entry.status) as\n | \"active\"\n | \"archived\"\n | \"watching\") ?? \"active\",\n visibility: readString(entry.visibility) as\n | \"private\"\n | \"team\"\n | \"firm\"\n | \"external\"\n | \"public\"\n | undefined,\n metadata: asRecord(entry.metadata),\n createdBy: readString(entry.createdBy),\n }))\n : [];\n const payload = await bulkCreateTopicsFromGatewayAuth(args.authContext, {\n topics,\n });\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleTopicsError(\n error,\n \"Failed to bulk create topics.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport { inferActorType } from \"../../../../packages/events/src/outbox\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction handleWebhooksError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleWebhookCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await args.authContext.convex.mutation(\n \"events:createWebhook\" as any,\n {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: readString(body.topicId),\n url: readString(body.url) ?? \"\",\n events: readStringArray(body.events) ?? [],\n secret: readString(body.secret) ?? \"\",\n active: readBoolean(body.active),\n createdBy: args.authContext.principalId ?? args.authContext.userId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to create webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n };\n}) {\n try {\n const payload = await args.authContext.convex.query(\"events:listWebhooks\" as any, {\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: args.query.topicId,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to list webhooks.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookGet(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n}) {\n try {\n const payload = await args.authContext.convex.query(\"events:getWebhook\" as any, {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to read webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await args.authContext.convex.mutation(\n \"events:updateWebhook\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n url: readString(body.url),\n events: readStringArray(body.events),\n secret: readString(body.secret),\n topicId: readString(body.topicId),\n clearTopicId:\n body.topicId === null ? true : readBoolean(body.clearTopicId),\n active: readBoolean(body.active),\n updatedBy: args.authContext.principalId ?? args.authContext.userId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to update webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookDelete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n}) {\n try {\n const payload = await args.authContext.convex.mutation(\n \"events:deleteWebhook\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to delete webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookTest(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await args.authContext.convex.action(\"events:testWebhook\" as any, {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n topicId: readString(body.topicId),\n actorId: args.authContext.principalId ?? args.authContext.userId,\n actorType: inferActorType({\n authMode: args.authContext.authMode,\n principalType: args.authContext.principalType,\n }),\n correlationId: args.correlationId,\n });\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to test webhook.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookDeliveries(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n query: {\n limit?: number;\n };\n}) {\n try {\n const payload = await args.authContext.convex.query(\n \"events:listWebhookDeliveries\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n limit: args.query.limit,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to list webhook deliveries.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWebhookHealth(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n webhookId: string;\n}) {\n try {\n const payload = await args.authContext.convex.query(\n \"events:getWebhookHealth\" as any,\n {\n webhookId: args.webhookId,\n tenantId: args.authContext.tenantId,\n workspaceId: args.authContext.workspaceId,\n }\n );\n\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWebhooksError(\n error,\n \"Failed to read webhook health.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n","import {\n decodePrefixedId,\n encodePrefixedId,\n} from \"@lucern/contracts\";\n\ntype WorktreeStatus =\n | \"planning\"\n | \"active\"\n | \"paused\"\n | \"completed\"\n | \"merged\"\n | \"failed\"\n | \"archived\";\n\ntype WorktreesError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nexport type WorktreeRecord = {\n worktreeId: string;\n id: string;\n topicId?: string;\n title: string;\n status?: WorktreeStatus | string;\n phase?: string;\n branchId?: string | null;\n objective?: string;\n hypothesis?: string;\n gate?: string;\n track?: string;\n trackPosition?: number;\n executionBand?: number;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n targetBeliefIds?: string[];\n targetQuestionIds?: string[];\n questionCount?: number;\n taskCount?: number;\n frameworkSuggestions?: unknown[];\n dependencySuggestions?: unknown[];\n autoShapeApplied?: boolean;\n proofArtifacts?: unknown[] | null;\n staffingHint?: string | null;\n lastReconciledAt?: number | null;\n autoFixPolicy?: Record<string, unknown> | null;\n lensId?: string | null;\n createdAt?: number;\n updatedAt?: number;\n};\n\nexport type WorktreeListResult = {\n worktrees: WorktreeRecord[];\n total: number;\n};\n\nexport type CreateWorktreeInput = {\n title: string;\n topicId: string;\n objective?: string;\n hypothesis?: string;\n beliefIds?: string[];\n autoShape?: boolean;\n domainPackId?: string;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: Record<string, unknown>;\n lensId?: string;\n};\n\nexport type ListWorktreesQuery = {\n topicId: string;\n status?: string;\n limit?: number;\n};\n\nexport type ActivateWorktreeInput = {\n id: string;\n};\n\nexport type MergeWorktreeInput = {\n id: string;\n summary?: string;\n outcomes: Array<{\n beliefId: string;\n confidence: number;\n rationale: string;\n }>;\n};\n\nexport type MergeWorktreeResult = {\n worktreeId: string;\n status: \"merged\";\n beliefsScored: number;\n failedBeliefs: Array<{\n beliefId: string;\n reason: string;\n }>;\n summary?: string;\n mergedAt: number;\n};\n\nexport type UpdateWorktreeTargetsInput = {\n id: string;\n addBeliefIds?: string[];\n addQuestionIds?: string[];\n removeBeliefIds?: string[];\n removeQuestionIds?: string[];\n};\n\nexport type UpdateWorktreeInput = {\n id: string;\n objective?: string;\n hypothesis?: string;\n rationale?: string;\n track?: string;\n trackPosition?: number;\n executionBand?: number;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n status?: string;\n topicId?: string;\n additionalTopicIds?: string[];\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: unknown;\n lensId?: string;\n};\n\ntype CreateWorktreePortInput = {\n title: string;\n topicRawId: string;\n objective?: string;\n hypothesis?: string;\n beliefRawIds?: string[];\n autoShape?: boolean;\n domainPackId?: string;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: Record<string, unknown>;\n lensId?: string;\n};\n\ntype UpdateWorktreeTargetsPortInput = {\n worktreeRawId: string;\n addBeliefRawIds?: string[];\n addQuestionRawIds?: string[];\n removeBeliefRawIds?: string[];\n removeQuestionRawIds?: string[];\n};\n\ntype UpdateWorktreeMetadataPortInput = {\n worktreeRawId: string;\n objective?: string;\n hypothesis?: string;\n rationale?: string;\n track?: string;\n trackPosition?: number;\n executionBand?: number;\n executionOrder?: number;\n dependsOn?: string[];\n blocks?: string[];\n gate?: string;\n status?: string;\n topicId?: string;\n additionalTopicIds?: string[];\n proofArtifacts?: unknown[];\n staffingHint?: string;\n lastReconciledAt?: number;\n autoFixPolicy?: unknown;\n lensId?: string;\n};\n\nexport type WorktreesPort = {\n fetchWorktree: (rawId: string) => Promise<unknown | null>;\n listWorktreesByTopic: (args: {\n topicId: string;\n limit?: number;\n }) => Promise<unknown[]>;\n createWorktree: (input: CreateWorktreePortInput) => Promise<unknown>;\n activateWorktree: (args: { worktreeRawId: string }) => Promise<unknown>;\n completeWorktree: (args: {\n worktreeRawId: string;\n summary: string;\n }) => Promise<unknown>;\n scoreBeliefOutcome: (args: {\n beliefRawId: string;\n confidence: number;\n rationale: string;\n }) => Promise<unknown>;\n updateWorktreeMetadata: (\n input: UpdateWorktreeMetadataPortInput\n ) => Promise<unknown>;\n updateWorktreeTargets: (\n input: UpdateWorktreeTargetsPortInput\n ) => Promise<unknown>;\n};\n\nfunction createWorktreesError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): WorktreesError {\n const error = new Error(args.message) as WorktreesError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n return error;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction requireString(value: unknown, field: string): string {\n const normalized = readString(value);\n if (!normalized) {\n throw createWorktreesError({\n message: `[worktrees] ${field} is required.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Provide ${field} in the request payload.`,\n });\n }\n return normalized;\n}\n\nfunction decodeExternalId(id: string, prefix: string, field: string): string {\n const normalized = requireString(id, field);\n try {\n const decoded = decodePrefixedId(normalized);\n if (decoded.prefix !== prefix) {\n throw createWorktreesError({\n message: `[worktrees] Expected ${prefix}_ identifier, received ${normalized}.`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Use a ${prefix}_ prefixed identifier for ${field}.`,\n });\n }\n return decoded.value;\n } catch (error) {\n if (\n error instanceof Error &&\n \"status\" in error &&\n typeof (error as WorktreesError).status === \"number\"\n ) {\n throw error;\n }\n return normalized;\n }\n}\n\nfunction encodeTopicId(rawId: string): string {\n return encodePrefixedId(\"top\", requireString(rawId, \"topicId\"));\n}\n\nfunction encodeWorktreeId(rawId: string): string {\n return encodePrefixedId(\"wt\", requireString(rawId, \"worktreeId\"));\n}\n\nfunction encodeBeliefId(rawId: string): string {\n return encodePrefixedId(\"bel\", requireString(rawId, \"beliefId\"));\n}\n\nfunction encodeQuestionId(rawId: string): string {\n return encodePrefixedId(\"que\", requireString(rawId, \"questionId\"));\n}\n\nfunction normalizeWorktreeRecord(value: unknown): WorktreeRecord {\n const record = asRecord(value);\n const rawId =\n readString(record.worktreeId) ??\n readString(record.id) ??\n readString(record._id);\n\n if (!rawId) {\n throw createWorktreesError({\n message: \"[worktrees] worktreeId is required in upstream worktree payload.\",\n status: 500,\n code: \"INTERNAL_ERROR\",\n invariantCode: \"resource.exists\",\n });\n }\n\n const worktreeId = encodeWorktreeId(rawId);\n const topicRawId = readString(record.topicId);\n\n return {\n worktreeId,\n id: worktreeId,\n ...(topicRawId ? { topicId: encodeTopicId(topicRawId) } : {}),\n title: readString(record.title) ?? readString(record.name) ?? \"Untitled\",\n ...(readString(record.status) ? { status: readString(record.status)! } : {}),\n ...(readString(record.phase) ? { phase: readString(record.phase)! } : {}),\n ...(readString(record.branchId) !== undefined\n ? { branchId: readString(record.branchId) ?? null }\n : {}),\n ...(readString(record.objective) ? { objective: readString(record.objective)! } : {}),\n ...(readString(record.hypothesis)\n ? { hypothesis: readString(record.hypothesis)! }\n : {}),\n ...(readString(record.gate) ? { gate: readString(record.gate)! } : {}),\n ...(readString(record.track) ? { track: readString(record.track)! } : {}),\n ...(readNumber(record.trackPosition) !== undefined\n ? { trackPosition: readNumber(record.trackPosition)! }\n : {}),\n ...(readNumber(record.executionBand) !== undefined\n ? { executionBand: readNumber(record.executionBand)! }\n : {}),\n ...(readNumber(record.executionOrder) !== undefined\n ? { executionOrder: readNumber(record.executionOrder)! }\n : {}),\n ...(readStringArray(record.dependsOn)\n ? {\n dependsOn: readStringArray(record.dependsOn)!.map((id) =>\n encodeWorktreeId(id)\n ),\n }\n : {}),\n ...(readStringArray(record.blocks)\n ? {\n blocks: readStringArray(record.blocks)!.map((id) =>\n encodeWorktreeId(id)\n ),\n }\n : {}),\n ...(readStringArray(record.targetBeliefIds)\n ? {\n targetBeliefIds: readStringArray(record.targetBeliefIds)!.map((id) =>\n encodeBeliefId(id)\n ),\n }\n : {}),\n ...(readStringArray(record.targetQuestionIds)\n ? {\n targetQuestionIds: readStringArray(record.targetQuestionIds)!.map((id) =>\n encodeQuestionId(id)\n ),\n }\n : {}),\n ...(readNumber(record.questionCount) !== undefined\n ? { questionCount: readNumber(record.questionCount)! }\n : {}),\n ...(readNumber(record.taskCount) !== undefined\n ? { taskCount: readNumber(record.taskCount)! }\n : {}),\n ...(Array.isArray(record.frameworkSuggestions)\n ? { frameworkSuggestions: record.frameworkSuggestions }\n : {}),\n ...(Array.isArray(record.dependencySuggestions)\n ? { dependencySuggestions: record.dependencySuggestions }\n : {}),\n ...(typeof record.autoShapeApplied === \"boolean\"\n ? { autoShapeApplied: record.autoShapeApplied }\n : {}),\n ...(Array.isArray(record.proofArtifacts)\n ? { proofArtifacts: record.proofArtifacts }\n : record.proofArtifacts === null\n ? { proofArtifacts: null }\n : {}),\n ...(readString(record.staffingHint) !== undefined\n ? { staffingHint: readString(record.staffingHint) ?? null }\n : {}),\n ...(readNumber(record.lastReconciledAt) !== undefined\n ? { lastReconciledAt: readNumber(record.lastReconciledAt)! }\n : record.lastReconciledAt === null\n ? { lastReconciledAt: null }\n : {}),\n ...(record.autoFixPolicy && typeof record.autoFixPolicy === \"object\"\n ? {\n autoFixPolicy: record.autoFixPolicy as Record<string, unknown>,\n }\n : record.autoFixPolicy === null\n ? { autoFixPolicy: null }\n : {}),\n ...(readString(record.lensId) !== undefined\n ? { lensId: readString(record.lensId) ?? null }\n : {}),\n ...(readNumber(record.createdAt ?? record._creationTime) !== undefined\n ? { createdAt: readNumber(record.createdAt ?? record._creationTime)! }\n : {}),\n ...(readNumber(record.updatedAt) !== undefined\n ? { updatedAt: readNumber(record.updatedAt)! }\n : {}),\n };\n}\n\nfunction dedupeWorktrees(records: WorktreeRecord[]): WorktreeRecord[] {\n const byId = new Map<string, WorktreeRecord>();\n for (const record of records) {\n byId.set(record.worktreeId, record);\n }\n return [...byId.values()];\n}\n\nexport async function createWorktree(\n deps: WorktreesPort,\n input: CreateWorktreeInput\n): Promise<WorktreeRecord> {\n const topicRawId = decodeExternalId(input.topicId, \"top\", \"topicId\");\n const created = await deps.createWorktree({\n title: requireString(input.title, \"title\"),\n topicRawId,\n objective: readString(input.objective),\n hypothesis: readString(input.hypothesis),\n beliefRawIds: input.beliefIds?.map((id) =>\n decodeExternalId(id, \"bel\", \"beliefIds\")\n ),\n autoShape: typeof input.autoShape === \"boolean\" ? input.autoShape : undefined,\n domainPackId: readString(input.domainPackId),\n executionOrder:\n typeof input.executionOrder === \"number\" &&\n Number.isFinite(input.executionOrder)\n ? input.executionOrder\n : undefined,\n dependsOn: input.dependsOn?.map((id) =>\n decodeExternalId(id, \"wt\", \"dependsOn\")\n ),\n blocks: input.blocks?.map((id) => decodeExternalId(id, \"wt\", \"blocks\")),\n gate: readString(input.gate),\n proofArtifacts: Array.isArray(input.proofArtifacts)\n ? input.proofArtifacts\n : undefined,\n staffingHint: readString(input.staffingHint),\n lastReconciledAt:\n typeof input.lastReconciledAt === \"number\" &&\n Number.isFinite(input.lastReconciledAt)\n ? input.lastReconciledAt\n : undefined,\n autoFixPolicy:\n input.autoFixPolicy && typeof input.autoFixPolicy === \"object\"\n ? input.autoFixPolicy\n : undefined,\n lensId: readString(input.lensId),\n });\n\n const createdRecord =\n typeof created === \"string\"\n ? { worktreeId: created }\n : asRecord(created);\n\n return normalizeWorktreeRecord({\n topicId: topicRawId,\n title: input.title,\n ...createdRecord,\n });\n}\n\nexport async function listWorktrees(\n deps: WorktreesPort,\n query: ListWorktreesQuery\n): Promise<WorktreeListResult> {\n const worktrees = await deps.listWorktreesByTopic({\n topicId: decodeExternalId(query.topicId, \"top\", \"topicId\"),\n limit:\n typeof query.limit === \"number\" && Number.isFinite(query.limit)\n ? query.limit\n : undefined,\n });\n\n const statusFilter = readString(query.status)?.toLowerCase();\n const normalized = dedupeWorktrees(\n (Array.isArray(worktrees) ? worktrees : [])\n .map((worktree) => normalizeWorktreeRecord(worktree))\n .filter((worktree) =>\n statusFilter\n ? String(worktree.status ?? \"\").toLowerCase() === statusFilter\n : true\n )\n );\n\n return {\n worktrees: normalized,\n total: normalized.length,\n };\n}\n\nexport async function activateWorktree(\n deps: WorktreesPort,\n input: ActivateWorktreeInput\n): Promise<WorktreeRecord> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const activated = await deps.activateWorktree({ worktreeRawId: rawId });\n return normalizeWorktreeRecord({\n worktreeId: rawId,\n status: \"active\",\n ...asRecord(activated),\n });\n}\n\nexport async function updateWorktree(\n deps: WorktreesPort,\n input: UpdateWorktreeInput\n): Promise<WorktreeRecord> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const updated = await deps.updateWorktreeMetadata({\n worktreeRawId: rawId,\n objective: readString(input.objective),\n hypothesis: readString(input.hypothesis),\n rationale: readString(input.rationale),\n track: readString(input.track),\n trackPosition:\n typeof input.trackPosition === \"number\" &&\n Number.isFinite(input.trackPosition)\n ? input.trackPosition\n : undefined,\n executionBand:\n typeof input.executionBand === \"number\" &&\n Number.isFinite(input.executionBand)\n ? input.executionBand\n : undefined,\n executionOrder:\n typeof input.executionOrder === \"number\" &&\n Number.isFinite(input.executionOrder)\n ? input.executionOrder\n : undefined,\n dependsOn: input.dependsOn?.map((id) =>\n decodeExternalId(id, \"wt\", \"dependsOn\")\n ),\n blocks: input.blocks?.map((id) => decodeExternalId(id, \"wt\", \"blocks\")),\n gate: readString(input.gate),\n status: readString(input.status),\n topicId: readString(input.topicId),\n additionalTopicIds: input.additionalTopicIds,\n proofArtifacts: input.proofArtifacts,\n staffingHint: readString(input.staffingHint),\n lastReconciledAt:\n typeof input.lastReconciledAt === \"number\" &&\n Number.isFinite(input.lastReconciledAt)\n ? input.lastReconciledAt\n : undefined,\n autoFixPolicy: input.autoFixPolicy,\n lensId: readString(input.lensId),\n });\n\n return normalizeWorktreeRecord({\n worktreeId: rawId,\n ...asRecord(updated),\n });\n}\n\nexport async function updateWorktreeTargets(\n deps: WorktreesPort,\n input: UpdateWorktreeTargetsInput\n): Promise<WorktreeRecord> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const updated = await deps.updateWorktreeTargets({\n worktreeRawId: rawId,\n addBeliefRawIds: input.addBeliefIds?.map((id) =>\n decodeExternalId(id, \"bel\", \"addBeliefIds\")\n ),\n addQuestionRawIds: input.addQuestionIds?.map((id) =>\n decodeExternalId(id, \"que\", \"addQuestionIds\")\n ),\n removeBeliefRawIds: input.removeBeliefIds?.map((id) =>\n decodeExternalId(id, \"bel\", \"removeBeliefIds\")\n ),\n removeQuestionRawIds: input.removeQuestionIds?.map((id) =>\n decodeExternalId(id, \"que\", \"removeQuestionIds\")\n ),\n });\n\n return normalizeWorktreeRecord({\n worktreeId: rawId,\n ...asRecord(updated),\n });\n}\n\nexport async function mergeWorktree(\n deps: WorktreesPort,\n input: MergeWorktreeInput\n): Promise<MergeWorktreeResult> {\n const rawId = decodeExternalId(input.id, \"wt\", \"id\");\n const summary = readString(input.summary) ?? \"Worktree merged.\";\n await deps.completeWorktree({ worktreeRawId: rawId, summary });\n\n const failedBeliefs: MergeWorktreeResult[\"failedBeliefs\"] = [];\n let beliefsScored = 0;\n\n for (const outcome of input.outcomes) {\n try {\n await deps.scoreBeliefOutcome({\n beliefRawId: decodeExternalId(outcome.beliefId, \"bel\", \"beliefId\"),\n confidence: outcome.confidence,\n rationale: requireString(outcome.rationale, \"rationale\"),\n });\n beliefsScored += 1;\n } catch (error) {\n failedBeliefs.push({\n beliefId: encodeBeliefId(\n decodeExternalId(outcome.beliefId, \"bel\", \"beliefId\")\n ),\n reason: error instanceof Error ? error.message : \"Scoring failed\",\n });\n }\n }\n\n return {\n worktreeId: encodeWorktreeId(rawId),\n status: \"merged\",\n beliefsScored,\n failedBeliefs,\n summary,\n mergedAt: Date.now(),\n };\n}\n","import { api, internal, components } from \"./kernelApi\";\nimport { requireMcpConvex } from \"./mcp-context-tools\";\nimport type { GatewayAuthContext } from \"@lucern/contracts\";\nimport type { AuthContext } from \"@lucern/contracts\";\nimport { decodePrefixedId } from \"@lucern/contracts\";\nimport {\n activateWorktree,\n createWorktree,\n listWorktrees,\n mergeWorktree,\n updateWorktree,\n updateWorktreeTargets,\n type ActivateWorktreeInput,\n type CreateWorktreeInput,\n type ListWorktreesQuery,\n type MergeWorktreeInput,\n type UpdateWorktreeInput,\n type UpdateWorktreeTargetsInput,\n type WorktreesPort,\n} from \"./domain/worktrees\";\nimport {\n emitDomainEvent,\n inferActorType,\n} from \"@lucern/contracts\";\n\nfunction toSubjectiveLogicOpinion(\n confidence: number\n): {\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n} {\n const boundedConfidence = Math.max(0, Math.min(confidence, 1));\n return {\n belief: boundedConfidence,\n disbelief: 1 - boundedConfidence,\n uncertainty: 0,\n baseRate: 0.5,\n };\n}\n\nfunction resolveExternalId(value: string | undefined, prefix?: string): string | undefined {\n if (!value) {\n return value;\n }\n try {\n const decoded = decodePrefixedId(value);\n if (prefix && decoded.prefix !== prefix) {\n return value;\n }\n return decoded.value;\n } catch {\n return value;\n }\n}\n\nexport type ListAllWorktreesQuery = {\n status?: string;\n track?: string;\n executionBand?: number;\n limit?: number;\n};\n\ntype WorktreeSummaryMap = Record<string, number>;\n\nfunction summarizeWorktreeCollection(rows: unknown[]) {\n const worktrees = Array.isArray(rows) ? rows : [];\n const tracks: WorktreeSummaryMap = {};\n const bands: WorktreeSummaryMap = {};\n\n for (const row of worktrees) {\n if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n continue;\n }\n const record = row as Record<string, unknown>;\n const track =\n typeof record.track === \"string\" && record.track.trim().length > 0\n ? record.track.trim()\n : \"untracked\";\n tracks[track] = (tracks[track] ?? 0) + 1;\n\n const bandValue =\n typeof record.executionBand === \"number\"\n ? String(record.executionBand)\n : \"unbanded\";\n bands[bandValue] = (bands[bandValue] ?? 0) + 1;\n }\n\n return {\n worktrees: worktrees as Array<Record<string, unknown>>,\n total: worktrees.length,\n tracks,\n bands,\n };\n}\n\nfunction buildCreateMutationArgs(\n input: CreateWorktreeInput,\n userId: string\n): Record<string, unknown> {\n const objective = input.objective?.trim();\n const hypothesis = input.hypothesis?.trim();\n const gate = input.gate?.trim();\n const lensId = input.lensId?.trim();\n\n return {\n name: input.title,\n topicId: input.topicId as any,\n createdBy: userId,\n ...(objective ? { objective } : {}),\n ...(hypothesis ? { hypothesis } : {}),\n ...(objective || hypothesis ? { beliefFocus: hypothesis ?? objective } : {}),\n ...(typeof input.executionOrder === \"number\"\n ? { executionOrder: input.executionOrder }\n : {}),\n ...(Array.isArray(input.dependsOn) && input.dependsOn.length > 0\n ? { dependsOn: input.dependsOn.map((id) => id as any) }\n : {}),\n ...(Array.isArray(input.blocks) && input.blocks.length > 0\n ? { blocks: input.blocks.map((id) => id as any) }\n : {}),\n ...(gate ? { gate } : {}),\n ...(lensId ? { lensId: lensId as any } : {}),\n ...(Array.isArray(input.beliefIds) && input.beliefIds.length > 0\n ? { targetBeliefIds: input.beliefIds.map((id) => id as any) }\n : {}),\n };\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction withRequestedWorktreeId<T>(\n payload: T,\n worktreeId: string\n): T extends Record<string, unknown> ? T & { worktreeId: string } : T {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return payload as T extends Record<string, unknown>\n ? T & { worktreeId: string }\n : T;\n }\n return {\n ...(payload as Record<string, unknown>),\n worktreeId,\n } as T extends Record<string, unknown> ? T & { worktreeId: string } : T;\n}\n\nasync function resolveWorktreeTopicIdWithGatewayAuth(\n authContext: GatewayAuthContext,\n worktreeId: string\n) {\n const worktree = (await authContext.convex.query(api.worktrees.get, {\n worktreeId: worktreeId as any,\n })) as Record<string, unknown> | null;\n return readString(worktree?.topicId);\n}\n\nasync function resolveWorktreeTopicIdWithMcpAuth(\n authContext: AuthContext,\n worktreeId: string\n) {\n const convex = requireMcpConvex(authContext, \"resolveWorktreeTopicIdWithMcpAuth\");\n const worktree = (await convex.query(api.worktrees.get, {\n worktreeId: worktreeId as any,\n })) as Record<string, unknown> | null;\n return readString(worktree?.topicId);\n}\n\nasync function emitWorktreeEventFromGatewayAuth(\n authContext: GatewayAuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n return emitDomainEvent(\n (reference, input) => authContext.convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"worktree\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nasync function emitWorktreeEventFromMcpAuth(\n authContext: AuthContext,\n args: {\n topicId: string;\n type: string;\n resourceId: string;\n data?: Record<string, unknown>;\n }\n) {\n const convex = requireMcpConvex(authContext, \"emitWorktreeEventFromMcpAuth\");\n return emitDomainEvent(\n (reference, input) => convex.mutation(reference, input as any),\n {\n tenantId: authContext.tenantId,\n workspaceId: authContext.workspaceId,\n topicId: args.topicId,\n type: args.type,\n resourceId: args.resourceId,\n resourceType: \"worktree\",\n actorId: authContext.principalId ?? authContext.userId,\n actorType: inferActorType({\n sessionType: authContext.sessionType,\n authMode: authContext.authMode,\n principalType: authContext.principalType,\n }),\n data: args.data,\n }\n );\n}\n\nfunction createGatewayWorktreesPort(\n authContext: GatewayAuthContext\n): WorktreesPort {\n return {\n fetchWorktree(rawId) {\n return authContext.convex.query(api.worktrees.get, {\n worktreeId: rawId as any,\n });\n },\n listWorktreesByTopic(args) {\n return authContext.convex.query(api.worktrees.list, {\n topicId: args.topicId as any,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n async createWorktree(input) {\n const shouldAutoShape =\n input.autoShape === true || Boolean(input.domainPackId?.trim());\n\n const created = shouldAutoShape\n ? await authContext.convex.mutation((internal.worktrees as any).createShaped, {\n ...buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ),\n ...(input.domainPackId?.trim()\n ? { domainPackId: input.domainPackId.trim() }\n : {}),\n ...(typeof input.autoShape === \"boolean\"\n ? { autoShape: input.autoShape }\n : {}),\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n })\n : await authContext.convex.mutation(api.worktrees.create, buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ) as any);\n\n if (\n !shouldAutoShape &&\n (Array.isArray(input.proofArtifacts) ||\n input.staffingHint ||\n typeof input.lastReconciledAt === \"number\" ||\n input.autoFixPolicy)\n ) {\n const createdRecord =\n created && typeof created === \"object\"\n ? (created as Record<string, unknown>)\n : {};\n const worktreeId =\n typeof created === \"string\"\n ? created\n : typeof createdRecord.worktreeId === \"string\"\n ? createdRecord.worktreeId\n : \"\";\n if (worktreeId) {\n await authContext.convex.mutation(api.worktrees.updateMetadata, {\n worktreeId: worktreeId as any,\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n });\n }\n }\n\n return created;\n },\n activateWorktree(args) {\n return authContext.convex.mutation(api.worktrees.activate, {\n worktreeId: args.worktreeRawId as any,\n userId: authContext.userId,\n });\n },\n completeWorktree(args) {\n return authContext.convex.mutation(api.worktrees.complete, {\n worktreeId: args.worktreeRawId as any,\n keyFindings: [args.summary],\n decisionsReached: [],\n nextSteps: [],\n userId: authContext.userId,\n });\n },\n scoreBeliefOutcome(args) {\n const opinion = toSubjectiveLogicOpinion(args.confidence);\n return authContext.convex.mutation(api.epistemicBeliefs.modulateConfidence, {\n nodeId: args.beliefRawId as any,\n trigger: \"worktree_outcome\",\n rationale: args.rationale,\n userId: authContext.userId,\n ...opinion,\n });\n },\n updateWorktreeMetadata(input) {\n return authContext.convex.mutation(api.worktrees.updateMetadata, {\n worktreeId: input.worktreeRawId as any,\n ...(input.objective ? { objective: input.objective } : {}),\n ...(input.hypothesis ? { hypothesis: input.hypothesis } : {}),\n ...(input.rationale ? { rationale: input.rationale } : {}),\n ...(input.track ? { track: input.track } : {}),\n ...(typeof input.trackPosition === \"number\"\n ? { trackPosition: input.trackPosition }\n : {}),\n ...(typeof input.executionBand === \"number\"\n ? { executionBand: input.executionBand }\n : {}),\n ...(typeof input.executionOrder === \"number\"\n ? { executionOrder: input.executionOrder }\n : {}),\n ...(input.dependsOn ? { dependsOn: input.dependsOn.map((id) => id as any) } : {}),\n ...(input.blocks ? { blocks: input.blocks.map((id) => id as any) } : {}),\n ...(input.gate ? { gate: input.gate } : {}),\n ...(input.status ? { status: input.status } : {}),\n ...(input.topicId ? { topicId: input.topicId } : {}),\n ...(input.additionalTopicIds ? { additionalTopicIds: input.additionalTopicIds } : {}),\n ...(input.proofArtifacts ? { proofArtifacts: input.proofArtifacts } : {}),\n ...(input.staffingHint ? { staffingHint: input.staffingHint } : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n ...(input.lensId ? { lensId: input.lensId } : {}),\n });\n },\n updateWorktreeTargets(input) {\n return authContext.convex.mutation(api.worktrees.updateTargets, {\n worktreeId: input.worktreeRawId as any,\n ...(input.addBeliefRawIds?.length\n ? { addBeliefIds: input.addBeliefRawIds.map((id) => id as any) }\n : {}),\n ...(input.addQuestionRawIds?.length\n ? { addQuestionIds: input.addQuestionRawIds.map((id) => id as any) }\n : {}),\n ...(input.removeBeliefRawIds?.length\n ? {\n removeBeliefIds: input.removeBeliefRawIds.map((id) => id as any),\n }\n : {}),\n ...(input.removeQuestionRawIds?.length\n ? {\n removeQuestionIds: input.removeQuestionRawIds.map((id) => id as any),\n }\n : {}),\n });\n },\n };\n}\n\nfunction createMcpWorktreesPort(authContext: AuthContext): WorktreesPort {\n const convex = requireMcpConvex(authContext, \"createMcpWorktreesPort\");\n return {\n fetchWorktree(rawId) {\n return convex.query(api.worktrees.get, {\n worktreeId: rawId as any,\n });\n },\n listWorktreesByTopic(args) {\n return convex.query(api.worktrees.list, {\n topicId: args.topicId as any,\n limit: args.limit,\n }) as Promise<unknown[]>;\n },\n createWorktree(input) {\n const shouldAutoShape =\n input.autoShape === true || Boolean(input.domainPackId?.trim());\n\n if (shouldAutoShape) {\n return convex.mutation((internal.worktrees as any).createShaped, {\n ...buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ),\n ...(input.domainPackId?.trim()\n ? { domainPackId: input.domainPackId.trim() }\n : {}),\n ...(typeof input.autoShape === \"boolean\"\n ? { autoShape: input.autoShape }\n : {}),\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n });\n }\n\n return convex.mutation(api.worktrees.create, {\n ...buildCreateMutationArgs(\n {\n ...input,\n topicId: input.topicRawId,\n title: input.title,\n beliefIds: input.beliefRawIds,\n },\n authContext.userId\n ),\n ...(Array.isArray(input.proofArtifacts)\n ? { proofArtifacts: input.proofArtifacts }\n : {}),\n ...(input.staffingHint?.trim()\n ? { staffingHint: input.staffingHint.trim() }\n : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n });\n },\n activateWorktree(args) {\n return convex.mutation(api.worktrees.activate, {\n worktreeId: args.worktreeRawId as any,\n userId: authContext.userId,\n });\n },\n completeWorktree(args) {\n return convex.mutation(api.worktrees.complete, {\n worktreeId: args.worktreeRawId as any,\n keyFindings: [args.summary],\n decisionsReached: [],\n nextSteps: [],\n userId: authContext.userId,\n });\n },\n scoreBeliefOutcome(args) {\n return convex.mutation((internal.lucernMcp as any).internalModulateConfidence, {\n nodeId: args.beliefRawId,\n confidence: args.confidence,\n trigger: \"worktree_outcome\",\n rationale: args.rationale,\n userId: authContext.userId,\n mcpSessionId: authContext.sessionId,\n mcpToolName: \"merge\",\n });\n },\n updateWorktreeMetadata(input) {\n return convex.mutation(api.worktrees.updateMetadata, {\n worktreeId: input.worktreeRawId as any,\n ...(input.objective ? { objective: input.objective } : {}),\n ...(input.hypothesis ? { hypothesis: input.hypothesis } : {}),\n ...(input.rationale ? { rationale: input.rationale } : {}),\n ...(input.track ? { track: input.track } : {}),\n ...(typeof input.trackPosition === \"number\"\n ? { trackPosition: input.trackPosition }\n : {}),\n ...(typeof input.executionBand === \"number\"\n ? { executionBand: input.executionBand }\n : {}),\n ...(typeof input.executionOrder === \"number\"\n ? { executionOrder: input.executionOrder }\n : {}),\n ...(input.dependsOn ? { dependsOn: input.dependsOn.map((id) => id as any) } : {}),\n ...(input.blocks ? { blocks: input.blocks.map((id) => id as any) } : {}),\n ...(input.gate ? { gate: input.gate } : {}),\n ...(input.status ? { status: input.status } : {}),\n ...(input.topicId ? { topicId: input.topicId } : {}),\n ...(input.additionalTopicIds ? { additionalTopicIds: input.additionalTopicIds } : {}),\n ...(input.proofArtifacts ? { proofArtifacts: input.proofArtifacts } : {}),\n ...(input.staffingHint ? { staffingHint: input.staffingHint } : {}),\n ...(typeof input.lastReconciledAt === \"number\"\n ? { lastReconciledAt: input.lastReconciledAt }\n : {}),\n ...(input.autoFixPolicy ? { autoFixPolicy: input.autoFixPolicy } : {}),\n ...(input.lensId ? { lensId: input.lensId } : {}),\n });\n },\n updateWorktreeTargets(input) {\n return convex.mutation(api.worktrees.updateTargets, {\n worktreeId: input.worktreeRawId as any,\n ...(input.addBeliefRawIds?.length\n ? { addBeliefIds: input.addBeliefRawIds.map((id) => id as any) }\n : {}),\n ...(input.addQuestionRawIds?.length\n ? { addQuestionIds: input.addQuestionRawIds.map((id) => id as any) }\n : {}),\n ...(input.removeBeliefRawIds?.length\n ? {\n removeBeliefIds: input.removeBeliefRawIds.map((id) => id as any),\n }\n : {}),\n ...(input.removeQuestionRawIds?.length\n ? {\n removeQuestionIds: input.removeQuestionRawIds.map((id) => id as any),\n }\n : {}),\n });\n },\n };\n}\n\nexport async function createWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: CreateWorktreeInput\n) {\n const payload = await createWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId: payload.topicId ?? input.topicId,\n type: \"worktree.created\",\n resourceId: payload.worktreeId,\n data: {\n title: payload.title,\n status: payload.status,\n objective: payload.objective,\n hypothesis: payload.hypothesis,\n gate: payload.gate,\n executionOrder: payload.executionOrder,\n dependsOn: payload.dependsOn ?? [],\n blocks: payload.blocks ?? [],\n targetBeliefIds: payload.targetBeliefIds ?? [],\n proofArtifacts: payload.proofArtifacts,\n staffingHint: payload.staffingHint,\n lastReconciledAt: payload.lastReconciledAt,\n autoFixPolicy: payload.autoFixPolicy,\n },\n });\n return payload;\n}\n\nexport function listWorktreesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListWorktreesQuery\n) {\n return listWorktrees(createGatewayWorktreesPort(authContext), query);\n}\n\nexport async function listAllWorktreesFromGatewayAuth(\n authContext: GatewayAuthContext,\n query: ListAllWorktreesQuery = {}\n) {\n const rows = await authContext.convex.query(api.worktrees.listAll, {\n ...(query.status ? { status: query.status } : {}),\n ...(query.track ? { track: query.track } : {}),\n ...(typeof query.executionBand === \"number\"\n ? { executionBand: query.executionBand }\n : {}),\n ...(typeof query.limit === \"number\" ? { limit: query.limit } : {}),\n });\n\n return summarizeWorktreeCollection(rows as unknown[]);\n}\n\nexport async function activateWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: ActivateWorktreeInput\n) {\n const payload = await activateWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n payload.topicId ??\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.activated\",\n resourceId: payload.worktreeId,\n data: {\n status: payload.status,\n branchId: payload.branchId,\n updatedAt: payload.updatedAt,\n },\n });\n return payload;\n}\n\nexport async function updateWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateWorktreeInput\n) {\n const payload = await updateWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n payload.topicId ??\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.metadata_updated\",\n resourceId: payload.worktreeId,\n data: {\n hypothesis: payload.hypothesis,\n track: payload.track,\n trackPosition: payload.trackPosition,\n executionBand: payload.executionBand,\n executionOrder: payload.executionOrder,\n dependsOn: payload.dependsOn ?? [],\n blocks: payload.blocks ?? [],\n gate: payload.gate,\n },\n });\n return payload;\n}\n\nexport async function mergeWorktreeFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: MergeWorktreeInput\n) {\n const payload = await mergeWorktree(createGatewayWorktreesPort(authContext), input);\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.merged\",\n resourceId: payload.worktreeId,\n data: {\n status: payload.status,\n beliefsScored: payload.beliefsScored,\n failedBeliefs: payload.failedBeliefs,\n summary: payload.summary,\n mergedAt: payload.mergedAt,\n outcomes: input.outcomes,\n },\n });\n return payload;\n}\n\nexport async function updateWorktreeTargetsFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: UpdateWorktreeTargetsInput\n) {\n const payload = await updateWorktreeTargets(\n createGatewayWorktreesPort(authContext),\n input\n );\n await emitWorktreeEventFromGatewayAuth(authContext, {\n topicId:\n payload.topicId ??\n (await resolveWorktreeTopicIdWithGatewayAuth(authContext, payload.worktreeId)) ??\n \"\",\n type: \"worktree.targets_updated\",\n resourceId: payload.worktreeId,\n data: {\n targetBeliefIds: payload.targetBeliefIds ?? [],\n targetQuestionIds: payload.targetQuestionIds ?? [],\n addBeliefIds: input.addBeliefIds ?? [],\n addQuestionIds: input.addQuestionIds ?? [],\n removeBeliefIds: input.removeBeliefIds ?? [],\n removeQuestionIds: input.removeQuestionIds ?? [],\n },\n });\n return payload;\n}\n\nexport function completeWorktreeRecordFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n keyFindings?: string[];\n decisionsReached?: string[];\n nextSteps?: string[];\n }\n) {\n return authContext.convex\n .mutation(api.worktrees.complete, {\n worktreeId:\n (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n keyFindings: input.keyFindings ?? [],\n decisionsReached: input.decisionsReached ?? [],\n nextSteps: input.nextSteps ?? [],\n userId: authContext.userId,\n })\n .then((payload: unknown) => withRequestedWorktreeId(payload, input.worktreeId));\n}\n\nexport function advanceWorktreePhaseFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n }\n) {\n return authContext.convex.mutation(api.worktrees.advancePhase, {\n worktreeId: (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n userId: authContext.userId,\n });\n}\n\nexport function setWorktreePhaseFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n phase: string;\n }\n) {\n return authContext.convex.mutation(api.worktrees.setPhase, {\n worktreeId: (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n phase: input.phase,\n userId: authContext.userId,\n });\n}\n\nexport function patchWorktreeStateFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktreeId: string;\n patch: Record<string, unknown>;\n }\n) {\n return authContext.convex\n .mutation(components.lucern.worktrees.patchState, {\n worktreeId:\n (resolveExternalId(input.worktreeId, \"wt\") ?? input.worktreeId) as any,\n patch: input.patch,\n userId: authContext.userId,\n })\n .then((payload: unknown) => withRequestedWorktreeId(payload, input.worktreeId));\n}\n\nexport function bulkCreateWorktreesFromGatewayAuth(\n authContext: GatewayAuthContext,\n input: {\n worktrees: unknown[];\n }\n) {\n void authContext;\n return authContext.convex.mutation(internal.worktrees.bulkCreate, {\n worktrees: input.worktrees,\n });\n}\n","import type { GatewayAuthContext } from \"@lucern/contracts\";\nimport {\n errorResponse,\n resolveGatewayError,\n successResponse,\n} from \"../gateway-helpers\";\nimport {\n advanceWorktreePhaseFromGatewayAuth,\n bulkCreateWorktreesFromGatewayAuth,\n activateWorktreeFromGatewayAuth,\n completeWorktreeRecordFromGatewayAuth,\n createWorktreeFromGatewayAuth,\n listAllWorktreesFromGatewayAuth,\n listWorktreesFromGatewayAuth,\n mergeWorktreeFromGatewayAuth,\n patchWorktreeStateFromGatewayAuth,\n setWorktreePhaseFromGatewayAuth,\n updateWorktreeFromGatewayAuth,\n updateWorktreeTargetsFromGatewayAuth,\n} from \"@lucern/server-core/worktrees\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const normalized = value\n .map((entry) => readString(entry))\n .filter((entry): entry is string => Boolean(entry));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction handleWorktreesError(\n error: unknown,\n fallbackMessage: string,\n correlationId: string,\n policyTraceId: string\n) {\n const resolved = resolveGatewayError(error, fallbackMessage);\n return errorResponse({\n code: resolved.code,\n message: resolved.message,\n status: resolved.status,\n correlationId,\n policyTraceId,\n invariant: resolved.invariant,\n suggestion: resolved.suggestion,\n details: resolved.details,\n });\n}\n\nexport async function handleWorktreeCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await createWorktreeFromGatewayAuth(args.authContext, {\n title: readString(body.title) ?? \"\",\n topicId: readString(body.topicId ?? body.projectId) ?? \"\",\n objective: readString(body.objective),\n hypothesis: readString(body.hypothesis),\n beliefIds:\n readStringArray(body.beliefIds) ?? readStringArray(body.beliefs),\n autoShape:\n typeof body.autoShape === \"boolean\" ? body.autoShape : undefined,\n domainPackId: readString(body.domainPackId),\n executionOrder: readNumber(body.executionOrder),\n dependsOn: readStringArray(body.dependsOn),\n blocks: readStringArray(body.blocks),\n gate: readString(body.gate),\n proofArtifacts: Array.isArray(body.proofArtifacts)\n ? body.proofArtifacts\n : undefined,\n staffingHint: readString(body.staffingHint),\n lastReconciledAt: readNumber(body.lastReconciledAt),\n autoFixPolicy:\n body.autoFixPolicy &&\n typeof body.autoFixPolicy === \"object\" &&\n !Array.isArray(body.autoFixPolicy)\n ? (body.autoFixPolicy as Record<string, unknown>)\n : undefined,\n lensId: readString(body.lensId),\n });\n\n return successResponse(payload, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to create worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeList(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n topicId?: string;\n status?: string;\n limit?: number;\n };\n}) {\n try {\n const payload = await listWorktreesFromGatewayAuth(args.authContext, {\n topicId: readString(args.query.topicId) ?? \"\",\n status: readString(args.query.status),\n limit: readNumber(args.query.limit),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to list worktrees.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeListAll(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n query: {\n status?: string;\n track?: string;\n executionBand?: number;\n limit?: number;\n };\n}) {\n try {\n const payload = await listAllWorktreesFromGatewayAuth(args.authContext, {\n status: readString(args.query.status),\n track: readString(args.query.track),\n executionBand: readNumber(args.query.executionBand),\n limit: readNumber(args.query.limit),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to list worktrees.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeActivate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n}) {\n try {\n const payload = await activateWorktreeFromGatewayAuth(args.authContext, {\n id: args.worktreeId,\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to activate worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeUpdate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateWorktreeFromGatewayAuth(args.authContext, {\n id: args.worktreeId,\n objective: readString(body.objective),\n hypothesis: readString(body.hypothesis),\n rationale: readString(body.rationale),\n track: readString(body.track),\n trackPosition: readNumber(body.trackPosition),\n executionBand: readNumber(body.executionBand),\n executionOrder: readNumber(body.executionOrder),\n dependsOn: readStringArray(body.dependsOn),\n blocks: readStringArray(body.blocks),\n gate: readString(body.gate),\n status: readString(body.status),\n topicId: readString(body.topicId),\n additionalTopicIds: readStringArray(body.additionalTopicIds),\n proofArtifacts: Array.isArray(body.proofArtifacts) ? (body.proofArtifacts as unknown[]) : undefined,\n staffingHint: readString(body.staffingHint),\n lastReconciledAt: readNumber(body.lastReconciledAt),\n autoFixPolicy: body.autoFixPolicy && typeof body.autoFixPolicy === \"object\" ? body.autoFixPolicy : undefined,\n lensId: readString(body.lensId),\n });\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to update worktree metadata.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeMerge(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const rawOutcomes = Array.isArray(body.outcomes) ? body.outcomes : [];\n const outcomes = rawOutcomes\n .map((entry) => asRecord(entry))\n .map((entry) => ({\n beliefId: readString(entry.beliefId) ?? \"\",\n confidence: readNumber(entry.confidence) ?? Number.NaN,\n rationale: readString(entry.rationale) ?? \"\",\n }));\n\n const payload = await mergeWorktreeFromGatewayAuth(args.authContext, {\n id: args.worktreeId,\n summary: readString(body.summary),\n outcomes,\n });\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to merge worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeUpdateTargets(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n worktreeId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await updateWorktreeTargetsFromGatewayAuth(\n args.authContext,\n {\n id: args.worktreeId,\n addBeliefIds: readStringArray(body.addBeliefIds),\n addQuestionIds: readStringArray(body.addQuestionIds),\n removeBeliefIds: readStringArray(body.removeBeliefIds),\n removeQuestionIds: readStringArray(body.removeQuestionIds),\n }\n );\n\n return successResponse(payload, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to update worktree targets.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeComplete(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await completeWorktreeRecordFromGatewayAuth(\n args.authContext,\n {\n worktreeId: readString(body.worktreeId) ?? \"\",\n keyFindings: readStringArray(body.keyFindings),\n decisionsReached: readStringArray(body.decisionsReached),\n nextSteps: readStringArray(body.nextSteps),\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to complete worktree.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeAdvancePhase(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await advanceWorktreePhaseFromGatewayAuth(args.authContext, {\n worktreeId: readString(body.worktreeId) ?? \"\",\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to advance worktree phase.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeSetPhase(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await setWorktreePhaseFromGatewayAuth(args.authContext, {\n worktreeId: readString(body.worktreeId) ?? \"\",\n phase: readString(body.phase) ?? \"\",\n });\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to set worktree phase.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreePatchState(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await patchWorktreeStateFromGatewayAuth(\n args.authContext,\n {\n worktreeId: readString(body.worktreeId) ?? \"\",\n patch: asRecord(body.patch),\n }\n );\n return successResponse(payload as Record<string, unknown>, {\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to patch worktree state.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n\nexport async function handleWorktreeBulkCreate(args: {\n authContext: GatewayAuthContext;\n correlationId: string;\n policyTraceId: string;\n body: unknown;\n}) {\n try {\n const body = asRecord(args.body);\n const payload = await bulkCreateWorktreesFromGatewayAuth(args.authContext, {\n worktrees: Array.isArray(body.worktrees) ? body.worktrees : [],\n });\n return successResponse(payload as Record<string, unknown>, {\n status: 201,\n correlationId: args.correlationId,\n policyTraceId: args.policyTraceId,\n });\n } catch (error) {\n return handleWorktreesError(\n error,\n \"Failed to bulk create worktrees.\",\n args.correlationId,\n args.policyTraceId\n );\n }\n}\n"]}
|