import type { SessionPlan } from "../../store/plan.js"; import type { AnyAppEvent } from "../events/app-event.js"; import type { PersistencePort } from "../ports/persistence-port.js"; import type { Disposable } from "./disposable.js"; export type PlanListener = () => void; export declare class PlanController implements Disposable { private readonly persistence; private plan; private loadGeneration; private activeSessionId; private readonly listeners; constructor(persistence: PersistencePort); current(): SessionPlan | undefined; subscribe(listener: PlanListener): () => void; observe(event: AnyAppEvent): void; /** * Load the plan for `sessionId` from disk into memory. The previous session's * projection is cleared synchronously, and a generation token prevents a * slower old-session load from repopulating the controller after /new. */ load(sessionId: string): Promise; refresh(sessionId: string): Promise; /** Drop the in-memory plan without touching disk. */ clear(): void; approve(): Promise; discard(): Promise; dispose(): void; private notify; }