import type React from 'react'; export interface PlanItem { id: string; title: string; details?: string; status: 'open' | 'in_progress' | 'done'; createdAt: string; updatedAt: string; } export interface PlanPanelData { items: PlanItem[]; title?: string | undefined; scope: 'session' | 'project'; loading: boolean; error: string | null; updatedAt?: string | undefined; setScope: (scope: 'session' | 'project') => void; load: (scope: 'session' | 'project', quiet?: boolean) => Promise; } export interface PlanPanelProps { /** Absolute path to the project root. */ projectRoot: string; /** Current session ID (null if no active session). */ sessionId: string | null; /** Called when the user presses F5 / Esc to close. */ onClose: () => void; } /** * Plan panel data hook (F5 in TUI). * * Reads the active plan JSON file from disk and renders plan items grouped * by status. Shows the current scope and a hint for switching scopes via * the /plan tool. * * Each consumer gets its own polling interval, gated by `enabled` (default * true). Consumers pass `enabled` reflecting whether their panel surface is * actually mounted — e.g. app-view gates the sidebar twin on its slot * visibility — so a closed or bottom-routed plan panel does not keep a * second 3s file-read poll alive for the whole session (the bottom PlanPanel * mounts its own instance of this hook while open). */ export declare function usePlanPanelData(projectRoot: string, sessionId: string | null, enabled?: boolean): PlanPanelData; export declare function PlanPanel({ projectRoot, sessionId, onClose: _onClose, }: PlanPanelProps): React.ReactElement; //# sourceMappingURL=plan-panel.d.ts.map