/**
 * Column-oriented view of one dataset — the profiler's only input.
 *
 * A Table is the parsed shape of a CSV: header names plus raw cell text in row
 * order. The profiler never sees typed rows, so a fixture CSV and a live
 * dataset go through exactly the same classification.
 */
export type TableColumn = {
    /** Header text, as written. Matching is done on a normalized copy. */
    name: string;
    /** Raw cell text, one entry per row, in row order. */
    values: readonly string[];
};
export type Table = {
    columns: readonly TableColumn[];
};
/** Rows in the table — the longest column wins if a CSV row was short. */
export declare function tableRowCount(table: Table): number;
/** Row-oriented copy of a Table. Used to persist / profile, not as MCP tool output. */
export declare function tableToRows(table: Table): Record<string, string>[];
/** Header text reduced to letters and digits: `Created At` and `created_at` match. */
export declare function normalizeName(name: string): string;
/**
 * Minimal RFC 4180 reader: quoted fields, `""` escapes, CR/LF or LF, blank
 * lines skipped. Enough for fixtures; the profiler owns no other parsing.
 */
export declare function parseCsvTable(text: string): Table;
