import { type VoiceFormat } from "../lib/voice-corpus.js";
export interface VoiceDistilProfileParams {
    accountId: string;
    userId: string;
    force?: boolean;
    /**
     * Writing format to distil. When omitted on `sample`, enumerates distinct
     * format values in the corpus and distils each that fires the cadence
     * guard. Required on `amend` and `write`.
     */
    format?: VoiceFormat;
    /**
     * Operation mode:
     *   - `'sample'` (default, Task 424) — walk the full per-format corpus and
     *     return exemplars + feedback intents. No write. The calling agent
     *     composes the style-card YAML in-turn.
     *   - `'write'` (Task 424) — persist the style card the agent produced.
     *     Requires `styleCardYaml`. Optional `amendedFromNodeIds` adds
     *     `LEARNED_FROM` edges to the named nodes (additive — MERGE preserves
     *     prior edges).
     *   - `'amend'` (Task 472) — operator-initiated incremental update from
     *     one or more named documents. Reads only those nodes plus the
     *     existing `:VoiceProfile.styleCard` so the agent can decide whether
     *     the document moves the profile. Format predicate is dropped on the
     *     read (the operator picked the docs); `authorshipMode` + trashed +
     *     label predicates still apply per-document. Cadence guard does not
     *     apply.
     */
    mode?: "sample" | "write" | "amend";
    /** Required when `mode='write'`. The style-card YAML produced by the agent. */
    styleCardYaml?: string;
    /**
     * Required when `mode='amend'`. ElementIds of the documents to fold into
     * the profile. Each id is eligibility-checked; ineligible ones are
     * reported in the return payload (the agent surfaces them to the operator).
     */
    nodeIds?: string[];
    /**
     * Optional on `mode='write'` after an `amend` sample. ElementIds the
     * agent decided moved the profile. Each becomes a `LEARNED_FROM` edge
     * from the persisted `:VoiceProfile`. Additive — pre-existing edges
     * remain via `MERGE`.
     */
    amendedFromNodeIds?: string[];
}
export interface VoiceCorpusExemplar {
    id: string;
    label: string;
    body: string;
}
export interface VoiceDistilProfileResult {
    profileId: string | null;
    corpusSize: number;
    generatedAt: string | null;
    feedbackEntries: number;
    skipped: boolean;
    skipReason?: "below-threshold" | "recent" | "empty-corpus" | "missing-style-card" | "no-format-tagged-content" | "amend-no-eligible-documents";
    errorReason?: string;
    /** Present when `mode='sample'` or `mode='amend'`: corpus exemplars for the agent to read. */
    exemplars?: VoiceCorpusExemplar[];
    /** Present when `mode='sample'` or `mode='amend'`: operator-edit intents to fold into the style card. */
    feedbackIntents?: string[];
    /**
     * Present when `mode='amend'`: the current `:VoiceProfile.styleCard` (or
     * null if no profile exists yet) so the agent can compare the named
     * documents against the prior card and decide update-or-skip.
     */
    existingStyleCard?: string | null;
    /** Present when `mode='amend'`: count of input nodeIds that passed eligibility. */
    eligible?: number;
    /**
     * Present when `mode='amend'`: per-input-id ineligibility records. Each
     * entry names the nodeId and the first failing predicate so the agent
     * can tell the operator which documents were rejected and why.
     */
    ineligible?: {
        nodeId: string;
        reason: string;
    }[];
}
export declare function voiceDistilProfile(params: VoiceDistilProfileParams): Promise<VoiceDistilProfileResult | VoiceDistilProfileResult[]>;
//# sourceMappingURL=voice-distil-profile.d.ts.map