/**
 * Same ingest surface as mcp-ui `load_dataset`: csv | url | path | datasetId.
 * Rows stay on the server. The MCP result only gets datasetId + column names.
 */
import { type Table } from '../profiler/table.js';
export declare const DATASET_KIND: "dataset";
export declare const INGEST_KEYS: readonly ["csv", "url", "path", "datasetId"];
export type IngestKey = (typeof INGEST_KEYS)[number];
export type StoredDataset = {
    name?: string;
    columns: string[];
    rows: Record<string, unknown>[];
};
export type IngestOptions = {
    /** Hosted/production: csv + datasetId only (no SSRF / no container file read). */
    allowRemoteSources?: boolean;
    maxBytes?: number;
    cwd?: string;
    /**
     * When set, the real path must stay inside this directory. Unset keeps the
     * documented absolute-path read, still subject to the sensitive-path gate.
     */
    datasetRoot?: string;
    fetchImpl?: (input: string, init?: {
        method?: string;
        redirect?: 'error' | 'follow' | 'manual';
    }) => Promise<Pick<Response, 'ok' | 'status' | 'text'>>;
    loadDataset?: (id: string) => StoredDataset | undefined | Promise<StoredDataset | undefined>;
};
export type IngestFail = {
    ok: false;
    code: 'invalid_ingest' | 'dataset_not_found';
    reason: string;
};
export type IngestOk = {
    ok: true;
    table: Table;
    rows: Record<string, string>[];
    label: string;
    datasetId?: string;
};
export type IngestResult = IngestOk | IngestFail | {
    ok: true;
    skip: true;
};
/** Hidden files, key material, and well-known secret directories. Checks the whole path, not only the basename. */
export declare function isSensitiveDatasetFileName(fileName: string): boolean;
/** System trees a chart table must not read, even when the basename looks harmless. */
export declare function isSensitiveDatasetPath(filePath: string): boolean;
export declare function isDatasetPayload(value: unknown): value is {
    config: {
        kind: typeof DATASET_KIND;
        name?: string;
    };
    data: {
        columns: string[];
        rows: Record<string, unknown>[];
    };
};
export declare function datasetFromPayload(payload: unknown): StoredDataset | undefined;
export declare function datasetPersistPayload(label: string, table: Table): unknown;
export declare function idFromDataUrl(dataUrl: string): string | undefined;
export declare function tableFromRecords(records: readonly Record<string, unknown>[]): Table;
export declare function tableFromStoredDataset(dataset: StoredDataset): Table;
/**
 * Resolve a user table for this tool call. `{ skip: true }` means use the
 * server's current table (demo / last ingest / WORKSPACE_DATA_PATH).
 */
export declare function resolveWorkspaceIngest(args: Record<string, unknown>, options?: IngestOptions): Promise<IngestResult>;
export type HostLookup = (hostname: string) => Promise<readonly {
    address: string;
}[]>;
/**
 * Refuse loopback, link-local, private, and cloud-metadata hosts before fetch.
 * A public name is refused when any resolved address is in those ranges.
 */
export declare function blockedDatasetUrl(raw: string, lookupHost?: HostLookup): Promise<string | undefined>;
