import type { ImageContent } from "@oh-my-pi/pi-ai"; import type { DroppedPrompt } from "../../session/agent-session-types.js"; import type { InteractiveModeContext } from "../types.js"; export declare class BtwController { #private; private readonly ctx; constructor(ctx: InteractiveModeContext); /** Whether the inline panel owns Escape. */ hasActiveRequest(): boolean; canBranch(): boolean; /** Whether plain `b` is currently reserved for a completed or pending branch action. */ handlesBranchKey(): boolean; canCopy(): boolean; handleCopy(): Promise; handleBranch(): Promise; handleEscape(): boolean; canFollowUp(): boolean; handleFollowUp(): boolean; canInject(): boolean; handleInject(): boolean; /** * A prompt the session dropped before dispatch: if it is an inject in flight, take it back so * the inject key stays its one retry path. Returns whether it was an inject. */ reclaimDroppedPrompt(prompt: DroppedPrompt): boolean; handleCancel(): boolean; dispose(): Promise; flush(timeoutMs?: number): Promise; withSessionMove(operation: () => Promise): Promise; /** * Ask a side question; resolves `false` when no question started and no history opened. * `title` heads the topic instead of the question, e.g. `/sitrep` rather than its expanded template. */ start(question: string, images?: ImageContent[], title?: string): Promise; startFollowUp(recordId: string, question: string, signal?: AbortSignal, images?: ImageContent[]): Promise; }