import type { ExtensionCommandContext, KeybindingsManager, Theme } from "@earendil-works/pi-coding-agent"; import type { Component, Focusable, TUI } from "@earendil-works/pi-tui"; import type { PluginHost } from "../types.js"; export interface PluginManagerResult { readonly reloadNeeded: boolean; } export interface PluginManagerOptions { readonly host: PluginHost; readonly tui: TUI; readonly theme: Theme; readonly keybindings: KeybindingsManager; readonly done: (result: PluginManagerResult) => void; readonly notify: (message: string, type?: "info" | "warning" | "error") => void; } export declare class PluginManager implements Component, Focusable { private readonly host; private readonly tui; private readonly theme; private readonly keybindings; private readonly done; private readonly notify; private readonly searchInput; private readonly dialogInput; private dialog; private dialogCursor; private _focused; private tab; private view; private query; private searchFocused; private cursor; private detailActionCursor; private detailId; private selected; private installed; private marketplaces; private catalogs; private localEpoch; private runtime; private issues; private issuesLoading; private marketplaceCursor; private checkOnOpen; private checkOnOpenLoaded; private checkOnOpenSaving; private checking; private updatesChecked; private checkedMarketplaces; private checkTotal; private checkErrors; private checkingMarketplaces; private checkController; private checkPromise; private checkRun; private openCheckPending; private reloadNeeded; private toast; private toastTimer; private batch; private batchResults; private batchRunning; private batchCancelledAfterCurrent; private batchController; private batchItemActive; private destroyed; private completed; private bodyScroll; private bodyFocusLine; private bodyHeight; private followFocus; constructor(options: PluginManagerOptions); get focused(): boolean; set focused(value: boolean); render(width: number): string[]; handleInput(data: string): void; invalidate(): void; dispose(): void; private renderTabs; private statusText; private renderInstalled; private renderDiscover; private renderMarketplaces; private renderIssues; private renderDetail; private renderDialog; private handleDialogInput; private submitDialogInput; private closeDialogInput; private closeDialogConfirm; private promptInput; private promptConfirm; private renderConfirmation; private renderBatch; private renderRows; private renderBatchBar; private renderFooter; private heading; private fact; private indent; private renderCursorLine; private renderSearch; private wrapLine; private managerKeyAction; private handleListAction; private handleConfirmationInput; private handleBatchInput; private handleDetailInput; private runDetailAction; private detailActions; private startBatch; private confirmBatch; private openDetail; private close; private setTab; private loadCheckOnOpen; private maybeStartOpenCheck; private toggleCheckOnOpen; private loadDetailRuntime; private leaveSearch; private isListTab; private currentRows; private currentCursorId; private restoreCursor; private filteredRows; private installedRows; private discoverRows; private rowById; private currentDetailRow; private currentDetailInstalled; private statusLabel; private rowStatus; private tabLabel; private marketplaceStatus; private handleMarketplaceEnter; private addMarketplace; private startMarketplaceCheck; private cancelMarketplaceCheck; private loadLocal; private loadIssues; private projectIssues; private removeMarketplace; private showToast; private requestRender; } export declare function openPluginManager(host: PluginHost, ctx: ExtensionCommandContext): Promise;