import type { ExtensionUIContext } from "../../core/extensions/index.js"; import type { IsolatedInteractiveRuntime } from "./isolated-runtime.js"; /** * Generation-owned host dialogs and line widgets for the isolated engine. * * `select`, `confirm`, `input`, and `editor` mount real host components and can * outlive the engine child that asked for them. Without ownership a dead * generation left its dialog on screen forever, its host promise unsettled, and * could answer through the replacement child's writer. Each request is recorded * with the generation that issued it; when that generation ends the mount is * aborted — closing only its own instance — and any answer is suppressed. * * Line widgets (`setWidget` with `string[]`) have the same problem without any * component to close: they are plain host state keyed by name, so the key is * tracked against its latest writer and released only if that writer's * generation is the one that died. */ export declare class EngineDialogHostController { private readonly runtime; private readonly ui; private readonly records; /** Line-widget key -> generation that last wrote it. */ private readonly widgetOwners; private readonly unsubscribeHandler; private readonly unsubscribeGenerationEnded; constructor(runtime: IsolatedInteractiveRuntime, ui: ExtensionUIContext); dispose(): void; /** Close every dialog and release every widget key owned by an ended generation. */ disposeGeneration(generation: number): void; private abortAll; private handle; } //# sourceMappingURL=engine-dialog-host.d.ts.map