export declare function characterSearchPath(root: string): string; /** One row as the search displayed it. The shape `libraryPick` needs, plus the caption. */ export interface CharacterCandidate { sid: string; assetUrl: string; description: string; subject: string | null; similarity: number; } export interface CharacterSearchRecord { /** The prompt that produced this list — `add --id` reuses it as the asset's brief. */ prompt: string; /** Which shelf was searched. `add` sends the matching `voxelize` so the media cannot cross. */ representation: 'voxel' | 'lowpoly'; /** The floor automatic substitution would have applied, for the "auto" column. */ threshold: number; searchedAt: string; candidates: CharacterCandidate[]; } /** The last search, or null when there is none to trust. */ export declare function readCharacterSearch(root: string): CharacterSearchRecord | null; export declare function writeCharacterSearch(root: string, record: CharacterSearchRecord): void; /** * The cached row with this id, or null. * * Case-insensitive on the id because a creator reads it off a table and retypes * it, and the corpus uses one case throughout — so a capital letter is a typo * with an obvious intent, not a different character. */ export declare function findCachedCandidate(record: CharacterSearchRecord, sid: string): CharacterCandidate | null;