import type { WikiIssueKind, WikiIssueRecord, WikiIssueStatus } from "./contracts.js"; import { type ScholarDatabase } from "./database.js"; import { type QmdIndexOptions } from "./external/qmd.js"; import { type VaultPaths } from "./vault.js"; export interface WikiPage { pageId: string; relativePath: string; title: string; digest: string; revision: number; status: "active" | "drifted" | "retired"; quizWorthiness: "eligible" | "skip" | "unknown"; updatedAt: string; body?: string; } export interface WikiPageInput { path: string; title?: string; description?: string; body: string; pageId?: string; quizWorthiness?: "eligible" | "skip" | "unknown"; frontmatter?: Record; } export type DriftResolution = "record-issue" | "restore"; export interface QmdAdapter { search(query: string, options?: { collection: string; scope: "wiki/**/*.md"; limit?: number; ignoredPaths?: readonly string[]; }): Promise | unknown; index?: (options?: QmdIndexOptions) => Promise | void; } export interface WikiAdapters { qmd?: QmdAdapter; } export interface WikiCreateResult { page: WikiPage; content: string; } export interface WikiPreparedUpdate extends WikiCreateResult { expectedDigest: string; } export interface DriftReport { page: WikiPage; drifted: boolean; authoredDigest: string; currentDigest: string; diff: string; choices: ["record-issue", "restore"]; } export declare function isExecutableHtml(value: string): boolean; export declare class WikiService { readonly db: ScholarDatabase; readonly paths: Partial & { root?: string; }; readonly adapters: WikiAdapters; constructor(db: ScholarDatabase, paths: Partial & { root?: string; }, adapters?: WikiAdapters); private root; private qmdIgnoredPaths; refreshQmdIndex(): Promise; private refreshQmd; private atomicWrite; private assertDestinationAbsent; private optionalBytes; private restoreOptional; private catalog; private catalogByPath; private snapshotPath; private authored; private authoredPage; private writeCatalog; private sourceRows; citedSourceIds(body: string): ReadonlySet; private sourceAwareContent; private serializeContent; create(input: WikiPageInput): Promise; prepareUpdate(pageId: string, input: { body?: string; title?: string; description?: string; quizWorthiness?: WikiPage["quizWorthiness"]; expectedDigest?: string; path?: string; }, updatedAt?: string): Promise; update(pageId: string, input: { body?: string; title?: string; description?: string; quizWorthiness?: WikiPage["quizWorthiness"]; expectedDigest?: string; path?: string; }, prepared?: WikiPreparedUpdate): Promise; rename(pageId: string, requestedPath: string): Promise; retire(pageId: string): Promise; readExact(requestedPath: string): Promise; semanticSearch(query: string, limit?: number): Promise; lexicalSearch(query: string, limit?: number): Promise; get(pageIdOrPath: string): Promise; list(): Promise; private qmdPath; private search; report(input: { pageId?: string; heading?: string; pageDigest?: string; kind?: WikiIssueKind; description: string; }): Promise; inspectDrift(pageId: string): Promise; resolveDrift(pageId: string, choice: DriftResolution): Promise<{ page: WikiPage; issue?: WikiIssueRecord; restored: true; }>; patchIssue(issueId: string, patch: { status?: WikiIssueStatus; resolution?: string; }): Promise; resolveIssueAfterCorrection(issueId: string, resolution: string): Promise; refreshProjections(write?: boolean): Promise<{ indexPath: string; logPath: string; backlinks: Record; lint: string[]; }>; lintSync(pages?: WikiPage[], backlinks?: Record): string[]; } export declare function parseWikiMarkdown(content: string): { frontmatter: Record; body: string; }; //# sourceMappingURL=wiki.d.ts.map