import type { CompactionOutcome } from "@gajae-code/agent-core/compaction"; import { Container, type KeyId } from "@gajae-code/tui"; import { type PlanApprovalDetails } from "../../plan-mode/approved-plan"; import type { AgentSession } from "../../session/agent-session"; import type { SessionContext, SessionManager } from "../../session/session-manager"; import { type PlanPreviewOptions, type PlanPreviewResult } from "../components/plan-preview-overlay"; import type { SubmittedUserInput } from "../types"; import type { ModeGate } from "./mode-gate"; type PlanModeControllerContext = { readonly session: AgentSession; readonly sessionManager: SessionManager; readonly modeGate: ModeGate; readonly chatContainer: Container; readonly inputCallback: ((input: SubmittedUserInput) => void) | undefined; readonly externalEditorKey: string | undefined; readonly externalEditorKeys: readonly KeyId[]; startPendingSubmission(input: { text: string; }): SubmittedUserInput; addChatChild(child: Container): void; requestRender(full?: boolean): void; stopUi(): void; startUi(): void; showStatus(message: string): void; showWarning(message: string): void; showError(message: string): void; showHookConfirm(title: string, message: string): Promise; showPlanPreview(content: string | null, options?: PlanPreviewOptions): Promise; flushCompactionQueue(options?: { willRetry?: boolean; }): Promise; updatePlanModeStatus(status: { enabled: boolean; paused: boolean; } | undefined): void; handleClearCommand(): Promise; handleCompactCommand(instructions?: string): Promise; updateEditorChrome(): void; }; /** Owns plan-mode state, model scope, plan review, approval, and restoration. */ export declare class PlanModeController { #private; private readonly ctx; constructor(ctx: PlanModeControllerContext); get enabled(): boolean; get paused(): boolean; get planFilePath(): string | undefined; setEnabledForCompatibility(enabled: boolean): void; setPausedForCompatibility(paused: boolean): void; setPlanFilePathForCompatibility(planFilePath: string | undefined): void; clearReview(): void; restoreFromSession(sessionContext: SessionContext): Promise; enter(options?: { planFilePath?: string; workflow?: "parallel" | "iterative"; }): Promise; exit(options?: { silent?: boolean; paused?: boolean; }): Promise; flushPendingModelSwitch(): Promise; handleCommand(initialPrompt?: string): Promise; handleApproval(details: PlanApprovalDetails): Promise; } export {};