/**
 * Artifact Compression (Spark Plan 04)
 *
 * Takes a row-shaped artifact (columns + rows) and produces a compressed
 * view plus the schema-aware sidecar metadata required by
 * `ArtifactSchemaContract`. The full data still lives in the
 * `ArtifactStore`; this module only builds the compact summary that
 * downstream prompts and reporters consume.
 *
 * Strategies (Spark #24, #25, #26):
 *  - full        – no row drop (control case)
 *  - top_k       – keep top-K rows by `rankBy`
 *  - p95_tail    – keep rows whose `rankBy` value sits in the >=p95 tail
 *  - p99_tail    – same, p99
 *  - random      – seeded random sample of size `topK` (reproducible)
 *  - cuj_window  – keep rows whose timestamp falls inside `window`
 *  - cluster_representative – pick the densest representative per cluster
 *
 * Schema-aware columns (Spark #28) carry the type/unit/source/sampling
 * note so AI consumers know exactly what was preserved.
 */
import { type ArtifactColumnSpec, type ArtifactSamplingStrategy, type ArtifactSchemaContract, type NsTimeRange } from '../types/sparkContracts';
export interface CompressionOptions {
    artifactId: string;
    columns: ArtifactColumnSpec[];
    rows: any[][];
    strategy: ArtifactSamplingStrategy;
    /** Column name to rank by for top_k/p95_tail/p99_tail. */
    rankBy?: string;
    /** Top-K limit for `top_k` and `random`. Defaults to 50. */
    topK?: number;
    /** ns window for `cuj_window`. */
    window?: NsTimeRange;
    /** Column to read timestamp from when applying `cuj_window`. */
    timestampColumn?: string;
    /** Reproducibility seed for `random` strategy. */
    randomSeed?: number;
    /** Cluster count for `cluster_representative` (defaults to topK). */
    clusterCount?: number;
}
export interface CompressionResult {
    compressedRows: any[][];
    contract: ArtifactSchemaContract;
}
/**
 * Compress an artifact according to `strategy` and emit the schema-aware
 * sidecar contract. Always returns at least an empty compressed-rows array
 * + a contract, never throws on bad inputs (downstream will surface the
 * fallback via `compression.strategy = 'full'` when the strategy can't run).
 */
export declare function compressArtifact(opts: CompressionOptions): CompressionResult;
//# sourceMappingURL=artifactCompression.d.ts.map