import type { AgentSessionEvent } from '../../app/agent-session.js';
import type { InteractiveSessionEventSource } from '../session-client.js';
type ControllerEvent<TType extends AgentSessionEvent['type']> = Extract<AgentSessionEvent, {
    type: TType;
}>;
type EventHandler<TType extends AgentSessionEvent['type']> = (event: ControllerEvent<TType>) => void | Promise<void>;
export interface InteractiveSessionControllerHandlers {
    ensureInitialized(): Promise<void>;
    invalidateFooter(): void;
    onAgentStart: EventHandler<'agent_start'>;
    onMessageStart: EventHandler<'message_start'>;
    onMessageUpdate: EventHandler<'message_update'>;
    onMessageEnd: EventHandler<'message_end'>;
    onToolExecutionStart: EventHandler<'tool_execution_start'>;
    onToolExecutionUpdate: EventHandler<'tool_execution_update'>;
    onToolExecutionEnd: EventHandler<'tool_execution_end'>;
    onToolSummary: EventHandler<'tool_summary'>;
    onAgentEnd: EventHandler<'agent_end'>;
    onAutoCompactionStart: EventHandler<'auto_compaction_start'>;
    onAutoCompactionEnd: EventHandler<'auto_compaction_end'>;
    onRecoveryStart: EventHandler<'recovery_start'>;
    onRecoveryEnd: EventHandler<'recovery_end'>;
}
export declare class InteractiveSessionController {
    private readonly session;
    private readonly handlers;
    constructor(session: InteractiveSessionEventSource, handlers: InteractiveSessionControllerHandlers);
    subscribe(): () => void;
    private handleEvent;
}
export {};
//# sourceMappingURL=interactive-session-controller.d.ts.map