/** * [WHO]: SessionEventHandler owns synchronous journaling, ordered hook delivery and latched run failures * [FROM]: ExtensionEventBridge, message types and named session capabilities * [TO]: AgentSession event subscription and reconnect * [HERE]: core/runtime/session-event-handler.ts - event lifecycle owner */ import type { AgentEvent } from "@catui/agent-core"; import type { AssistantMessage } from "@catui/ai/types"; import type { SessionManager } from "../session/session-manager.js"; import type { ExtensionRunner } from "../extensions-host/index.js"; import type { AgentSessionEvent } from "./session-events.js"; export interface SessionEventContext { appendMessage: SessionManager["appendMessage"]; appendCustomMessageEntry: SessionManager["appendCustomMessageEntry"]; delivered(text: string): void; emit(event: AgentSessionEvent): void; getExtensionRunner(): ExtensionRunner | undefined; onSuccess(): void; isRetryableError(message: AssistantMessage): boolean; handleError(message: AssistantMessage): Promise; checkCompaction(message: AssistantMessage): Promise; debug(level: "basic" | "verbose", source: "tool", message: string, data: Record): void; logError(message: string, data: Record): void; abortAgent(): void; } export declare class SessionEventHandler { private readonly context; private _lastAssistantMessage; private _pending; private _failure; private _cancelled; private readonly _extensionEventBridge; constructor(context: SessionEventContext); /** UI and journal work completes before this synchronous Agent subscriber returns. */ handle: (event: AgentEvent) => void; /** Drain lifecycle work, including work appended while a recovery is finishing. */ waitForCompletion(): Promise; throwIfFailed(): void; cancelRecovery(): void; private fail; }