import type { ResolvedMemoryWikiConfig } from "./config.js"; import { parseWikiMarkdown, type WikiPageKind } from "./markdown.js"; import { readQueryableWikiPages } from "./query.js"; const PALACE_KIND_ORDER: WikiPageKind[] = ["synthesis", "entity", "concept", "source", "report"]; const PRIMARY_PALACE_KINDS = new Set(["synthesis", "entity", "concept"]); const PALACE_KIND_LABELS: Record = { synthesis: "Syntheses", entity: "Entities", concept: "Concepts", source: "Sources", report: "Reports", }; export type MemoryWikiPalaceItem = { pagePath: string; title: string; kind: WikiPageKind; id?: string; updatedAt?: string; sourceType?: string; claimCount: number; questionCount: number; contradictionCount: number; claims: string[]; questions: string[]; contradictions: string[]; snippet?: string; }; export type MemoryWikiPalaceCluster = { key: WikiPageKind; label: string; itemCount: number; claimCount: number; questionCount: number; contradictionCount: number; updatedAt?: string; items: MemoryWikiPalaceItem[]; }; export type MemoryWikiPalaceStatus = { totalItems: number; totalClaims: number; totalQuestions: number; totalContradictions: number; clusters: MemoryWikiPalaceCluster[]; }; function normalizeTimestamp(value: unknown): string | undefined { if (typeof value !== "string") { return undefined; } const trimmed = value.trim(); return trimmed.length > 0 ? trimmed : undefined; } function extractSnippet(body: string): string | undefined { for (const rawLine of body.split(/\r?\n/)) { const line = rawLine.trim(); if ( !line || line.startsWith("#") || line.startsWith("```") || line.startsWith("