/**
 * provenance — read a stored entry's coordinates back out of it.
 *
 * Pattern: pure projection.
 * Role:    memory/ layer. One place that knows which metadata keys mean
 *          "which document", "which page", "which section", so the
 *          retrieval record and the citation the model sees can never
 *          disagree about a chunk's origin.
 * Emits:   N/A.
 *
 * The keys are the ones `indexDocuments` already accepts on
 * `RagDocument.metadata`, and the ones a document splitter will write.
 * Nothing is invented: an entry that carries no metadata simply has no
 * coordinates, and the record says so by omitting the fields rather than
 * by guessing a filename from an id.
 */
/** The document coordinates a chunk can carry. All optional — absence is honest. */
export interface ChunkProvenance {
    /** Which document this text came from. Read from `docUri`, else `source`. */
    readonly docUri?: string;
    /** Which page, for paginated formats. */
    readonly page?: number;
    /** Which section heading the splitter cut under. */
    readonly heading?: string;
}
/**
 * Pull the coordinates out of a stored value.
 *
 * Accepts metadata at the value's `metadata` key (where `indexDocuments`
 * puts it) or directly on the value, so a hand-built entry works too.
 */
export declare function chunkProvenance(value: unknown): ChunkProvenance;
/**
 * The text a stored value carries.
 *
 * THREE shapes reach the formatter through the same pipeline, and they do
 * not agree on the key:
 *
 *   • a chat `Message` (`{ role, content }`) from conversation memory;
 *   • a document (`{ id, content, metadata }`) from `indexDocuments`;
 *   • a `Chunk` (`{ id, docUri, text, charStart, … }`) from `indexCorpus`
 *     / `indexFolder`, which keeps its passage on **`text`**.
 *
 * Until 8.19.0 this read `content` only, and returned `''` for everything
 * else. That is how a chunk indexed by this library's own `rag` door
 * rendered a perfectly-formed citation — right document, right heading,
 * right score — around an EMPTY BODY. The model was handed the coordinates
 * of a passage and not the passage; a retrieval that looks like it worked
 * is the most expensive way for this to fail, because nothing in the run
 * says anything is wrong.
 *
 * So the accessor reads both keys. `content` wins when both are present:
 * it is the older meaning, and no shape this library writes carries the two
 * with different text. A value carrying NEITHER has no passage at all —
 * that is a different fact from "an unrenderable one", and it is refused at
 * WRITE time by `indexDocuments` rather than discovered as a blank citation
 * at read time.
 */
export declare function chunkText(value: unknown): string;
