import type { DurableSession } from "#execution/durable-session-store.js";
import type { HarnessSession } from "#harness/types.js";
import type { RuntimeTurnAgent } from "#runtime/agent/bootstrap.js";
/**
 * Creates the durable compaction configuration used by one harness session.
 */
export declare function createCompactionConfig(input?: {
    readonly contextWindowTokens?: number;
    readonly lastKnownInputTokens?: number;
    readonly lastKnownPromptMessageCount?: number;
    readonly thresholdPercent?: number;
}): {
    recentWindowSize: number;
    threshold: number;
} | {
    recentWindowSize: number;
    threshold: number;
    lastKnownInputTokens: number;
    lastKnownPromptMessageCount: number | undefined;
};
export interface CreateSessionInput {
    readonly continuationToken: string;
    readonly compactionOverrides?: {
        readonly thresholdPercent?: number;
    };
    /**
     * Optional root session id passed in by the runtime when this
     * session is a delegated subagent child. `undefined` for top-level
     * sessions — `sessionId` is the root for those.
     */
    readonly rootSessionId?: string;
    readonly sessionId: string;
    readonly turnAgent: RuntimeTurnAgent;
    readonly outputSchema?: HarnessSession["outputSchema"];
}
/**
 * Creates a fresh {@link HarnessSession}. The only site that derives
 * `session.agent.system` from a `turnAgent` — every subsequent turn
 * preserves the prompt via {@link refreshSessionFromTurnAgent}.
 */
export declare function createSession(input: CreateSessionInput): HarnessSession;
/**
 * Refreshes a session with the latest `turnAgent` — replaces model/tool
 * metadata and recalculates compaction thresholds; preserves history and
 * state. Production callers keep the session-start `agent.system` prompt,
 * while dev HMR callers can opt into refreshing it from authored source.
 */
export declare function refreshSessionFromTurnAgent(input: {
    readonly session: HarnessSession;
    readonly turnAgent: RuntimeTurnAgent;
    readonly refreshSystemPrompt?: boolean;
    readonly compactionOverrides?: {
        readonly thresholdPercent?: number;
    };
}): HarnessSession;
/**
 * Mints a continuation token for a delegated subagent session.
 * Deterministic when `suffix` is provided so retries address the same
 * child hook.
 */
export declare function mintSubagentContinuationToken(suffix?: string): string;
/**
 * Projects a {@link HarnessSession} to {@link DurableSession}.
 *
 * Drops fields rebuilt every turn from `bundle.turnAgent`; keeps
 * `agent.system` and `compaction.lastKnown*` so compaction stays
 * informed after rehydration.
 */
export declare function projectToDurableSession(session: HarnessSession): DurableSession;
/**
 * Rehydrates a {@link HarnessSession} from a {@link DurableSession}
 * plus the current `turnAgent`, rebuilding the runtime-only agent and
 * compaction fields the durable shape omits.
 */
export declare function hydrateDurableSession(input: {
    readonly durable: DurableSession;
    readonly turnAgent: RuntimeTurnAgent;
    readonly compactionOverrides?: {
        readonly thresholdPercent?: number;
    };
}): HarnessSession;
