import { Observable } from 'rxjs'; import { CliEngine } from '@qodalis/cli'; import { CliNotification } from '@qodalis/cli-core'; export interface TabStatus { executionState: 'idle' | 'running'; lastCommandStatus: 'success' | 'error' | null; lastCommandName: string | null; notification: CliNotification | null; } export interface ServiceDetail { name: string; status: string; description?: string; } export interface ServerDetail { name: string; url: string; connected: boolean; apiVersion?: string; commandCount?: number; } export interface GlobalStatus { runningServiceCount: number; totalServiceCount: number; serviceDetails: ServiceDetail[]; serverConnectionState: 'connected' | 'disconnected' | 'none'; serverDetails: ServerDetail[]; uptime: number; } export declare class CliPanelStatusService { private tabs; private activeTabId; private globalStatus$; private destroy$; /** Push to trigger an immediate global status recalculation. */ private globalRefresh$; /** Cleanup functions for background-service event listeners. */ private bgUnsubscribes; private globalPollingStarted; /** * Register an engine for a specific pane within a tab. */ registerEngine(tabId: number, paneId: number, engine: CliEngine): void; /** * Unregister all engines for a tab (called on tab close). */ unregisterTab(tabId: number): void; /** * Set the active tab for global status derivation. */ setActiveTab(tabId: number): void; /** * Observable of per-tab status. */ getTabStatus$(tabId: number): Observable; /** * Observable of global status (from active tab). */ getGlobalStatus$(): Observable; /** * Clean up all subscriptions. */ destroy(): void; /** * Hook into an engine's background service events so that * service start/stop/status-change triggers an immediate refresh. */ private listenToBackgroundServices; private startPollingTab; private startGlobalPolling; private computeTabStatus; private computeGlobalStatus; }