/**
 * Session transcript hygiene before LLM calls and after persistence.
 * Subset: no image/async paths here.
 */
import type { AgentMessage } from '@earendil-works/pi-agent-core';
import type { Api, Model } from '@earendil-works/pi-ai';
import { type TranscriptPolicy } from './transcript-policy.js';
export type TranscriptHygieneParams = {
    modelApi?: string | null;
    provider?: string | null;
    modelId?: string | null;
};
export declare function resolvePolicyForModel(model: Model<Api>): TranscriptPolicy;
/**
 * Apply provider-aware transcript fixes: thinking drop, tool input cleanup,
 * tool_use/tool_result pairing repair, strip non-LLM details, optional tool-call ID sanitize.
 */
export declare function applySessionTranscriptHygiene(messages: AgentMessage[], model: Model<Api>): AgentMessage[];
export declare function applySessionTranscriptHygieneWithPolicy(messages: AgentMessage[], policy: TranscriptPolicy): AgentMessage[];
export declare function tryApplySessionTranscriptHygiene(messages: AgentMessage[], model: Model<Api>): AgentMessage[];
/**
 * Hygiene for **writing session files** (gateway UI, history replay).
 *
 * Does **not** strip `thinking` blocks — those must remain on disk so web chat can show
 * reasoning after refresh. `dropThinkingBlocks` exists for **LLM** safety when loading
 * into the agent (`tryApplySessionTranscriptHygiene` in {@link prepareLoadedSessionMessages}).
 */
export declare function applySessionTranscriptHygieneForPersistence(messages: AgentMessage[], model: Model<Api>): AgentMessage[];
export declare function tryApplySessionTranscriptHygieneForPersistence(messages: AgentMessage[], model: Model<Api>): AgentMessage[];
