// Global type extensions for Hermes WebUI // Patches for loosely-typed legacy JavaScript code interface WsEntry { name: string; path: string; type: 'file' | 'dir' | string; size?: number; modified?: number; } interface State { session: any; messages: any[]; entries: any[]; busy: boolean; pendingFiles: any[]; toolCalls: any[]; activeStreamId: any; currentDir: string; activeProfile: string; _expandedDirs?: Set; _dirCache?: Record; _profileDefaultWorkspace?: string; lastUsage?: Record; activityTree?: ActivityTree | null; mcFilter?: MCFilter; mcSort?: 'runtime' | 'agent' | 'status'; [key: string]: any; } declare const t: any; interface HTMLInputElement { value: string; disabled: boolean; files: FileList | null; checked?: boolean; } interface HTMLTextAreaElement { value: string; } interface HTMLSelectElement { value: string; options: HTMLOptionsCollection; selectedIndex: number; readonly children: HTMLCollectionOf; readonly childElementCount: number; item(index: number): HTMLOptGroupElement | HTMLOptionElement | null; namedItem(name: string): HTMLOptionElement | null; } interface HTMLOptionElement { value: string; text: string; disabled: boolean; defaultSelected: boolean; selected: boolean; index: number; form: HTMLFormElement | null; } interface HTMLOptGroupElement { disabled: boolean; label: string; readonly children: HTMLCollectionOf; } interface HTMLElement { disabled?: boolean; value?: string; files?: FileList | null; checked?: boolean; placeholder?: string; innerHTML?: string; innerText?: string; textContent?: string; title?: string; style?: CSSStyleDeclaration & { [key: string]: string } & { cssText?: string }; className?: string; id?: string; dataset?: DOMStringMap; offsetWidth?: number; offsetHeight?: number; offsetLeft?: number; offsetTop?: number; scrollIntoView?: (options?: any) => void; getBoundingClientRect?: () => DOMRect; contains?: (node: Node) => boolean; closest?: (selectors: string) => HTMLElement | null; classList?: DOMTokenList & { add(...classes: string[]): void; remove(...classes: string[]): void; toggle(c: string, force?: boolean): boolean; contains(c: string): boolean; }; setAttribute(name: string, value: string): void; getAttribute(name: string): string | null; removeAttribute(name: string): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; dispatchEvent(event: Event): boolean; appendChild(node: Node | Element | HTMLElement | HTMLButtonElement | HTMLDivElement | HTMLSpanElement | HTMLInputElement | HTMLOptGroupElement): Node; removeChild(node: Node | Element | HTMLElement | HTMLButtonElement | HTMLDivElement | HTMLSpanElement | HTMLInputElement | HTMLOptGroupElement): Node; replaceWith(...nodes: (Node | string)[]): void; insertAdjacentHTML(position: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend', html: string): void; insertAdjacentElement(position: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend', element: HTMLElement): HTMLElement | null; click(): void; focus(): void; blur(): void; scrollTo(x: number, y: number): void; requestFullscreen?: () => Promise; matches?(selector: string): boolean; replaceWith(...nodes: any[]): void; _t?: ReturnType; after(...nodes: (Node | string)[]): void; } interface Window { webkitSpeechRecognition: any; SpeechRecognition: any; _stopMic: () => void; _micActive: boolean; _micPendingSend: boolean; _sendKey: string; _showTokenUsage: boolean; _showCliSessions: boolean; _soundEnabled: boolean; _notificationsEnabled: boolean; _botName: string; _previewCurrentPath: string; _previewCurrentMode: string; _previewDirty: boolean; _initResizePanels: () => void; showSaveFilePicker?: (options?: any) => Promise; showOpenFilePicker?: (options?: any) => Promise; _activeProvider: string | null; t: any; _userEmoji: string; _userName: string; _updateData: any; _escHandler: any; _saveExpandedDirs: any; _mcPriorityFilter: any; cancelEditMode: () => void; cancelEdit: () => void; closeAgentDetail: () => void; switchToChatPanel: () => void; stopGatewaySSE: () => void; updateWorkspaceChip: () => void; _showAllProfiles: () => void; showPreview: (type: string) => void; cancelEditMode: () => void; _previewDirty: boolean; } declare var Prism: any; declare var mermaid: any; declare var katex: any; declare function li(name: string, size?: number): string; declare function openFile(path: string, line?: number): void; interface Session { session_id: string; messages?: Message[]; workspace?: string; input_tokens?: number; output_tokens?: number; estimated_cost?: number; last_usage?: Record; tool_calls?: any[]; active_stream_id?: string; pending_attachments?: unknown[]; [key: string]: any; } interface Message { id?: string; role: string; content?: string | any[]; tool_calls?: any[]; name?: string; [key: string]: any; } declare const IMAGE_EXTS: Set; declare const MD_EXTS: Set; declare const DOWNLOAD_EXTS: Set; interface Document { exitFullscreen?: () => Promise; fullscreenElement?: Element; pictureInPictureElement?: Element; documentMode?: any; } interface Element { scrollIntoViewIfNeeded?: (centerIfNeeded?: boolean) => void; onclick?: (ev: MouseEvent) => any; oninput?: (ev: InputEvent) => any; onkeydown?: (ev: KeyboardEvent) => any; onkeyup?: (ev: KeyboardEvent) => any; onchange?: (ev: Event) => any; style?: CSSStyleDeclaration & { [key: string]: string }; closest?: (selectors: string) => HTMLElement | null; dataset?: DOMStringMap; classList?: DOMTokenList & { add(...classes: string[]): void; remove(...classes: string[]): void; toggle(c: string, force?: boolean): boolean; contains(c: string): boolean; }; appendChild(node: T): T; removeChild(node: T): T; getAttribute(name: string): string | null; setAttribute(name: string, value: string): void; removeAttribute(name: string): void; appendChild(node: Node | Element | HTMLElement | HTMLButtonElement | HTMLDivElement | HTMLSpanElement | HTMLInputElement | HTMLOptGroupElement): Node; removeChild(node: Node | Element | HTMLElement | HTMLButtonElement | HTMLDivElement | HTMLSpanElement | HTMLInputElement | HTMLOptGroupElement): Node; addEventListener(type: K, listener: (this: Element, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: Element, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; contains(node: Node): boolean; replaceWith(...nodes: any[]): void; textContent?: string; innerHTML?: string; } declare function escape(html: string): string; declare function highlightCode(container?: any): void; declare function showToast(msg: string, ms?: number): void; declare function setStatus(msg: string): void; declare function setComposerStatus(msg: string): void; declare function loadWorkspaceList(): Promise; declare function syncOnboardingProvider(value: string): void; declare function syncOnboardingWorkspaceSelect(value: string): void; declare function fileIcon(name: string, type: string): string; declare function loadOnboardingWizard(): Promise; declare function nextOnboardingStep(): Promise; declare function prevOnboardingStep(): void; declare function skipOnboarding(): Promise; declare function renderSessionList(): Promise; declare function newSession(flash?: boolean, agentOverride?: string): Promise; declare function updateQueueBadge(sid?: string): void; declare function stopApprovalPolling(): void; declare function hideApprovalCard(): void; declare function updateSendBtn(): void; declare function syncTopbar(): void; declare function renderMessages(): void; declare function loadDir(path: string): Promise; declare function loadSession(sid: string): Promise; declare function executeCommand(text: string): boolean; declare function isCompressionUiRunning(): boolean; declare const _allSessions: any[]; declare function renderSessionListFromCache(): void; declare const _assistantTurnBlocks: any; declare function placeLiveToolCardsHost(): void; declare function finalizeThinkingCard(): void; declare const _: any; declare const jQuery: any; declare const LOCALES: any; interface ConfigData { default_model?: string; send_key?: string; theme?: string; language?: string; show_token_usage?: boolean; show_cli_sessions?: boolean; sync_to_insights?: boolean; check_for_updates?: boolean; sound_enabled?: boolean; notifications_enabled?: boolean; bubble_layout?: string; bot_name?: string; user_emoji?: string; user_name?: string; [key: string]: any; } declare function stopGateway(): void; declare function stopGatewaySSE(): void; declare function cancelEdit(): void; declare function watchInflightSession(sid: string, activeStreamId: string): void; declare function showPreview(type: string): void; declare function cancelEditMode(): void; declare function clearPreview(): void; declare function closeAgentDetail(): void; declare function switchToChatPanel(): void; declare function updateWorkspaceChip(): void; declare let _showAllProfiles: boolean; declare let _escHandler: any; declare let _previewDirty: boolean; declare function _saveExpandedDirs(): void; declare function highlightCode(container?: any): void; declare function addCopyButtons(): void; declare function renderMermaidBlocks(): void; declare function renderKatexBlocks(): void; declare function openFile(path: string, line?: number): void; declare const fileExt: any; interface DialogOpts { title?: string; message?: string; inputType?: string; value?: string; placeholder?: string; cancelLabel?: string; confirmLabel?: string; danger?: boolean; focusCancel?: boolean; } declare function showConfirmDialog(opts?: DialogOpts): Promise; declare function showPromptDialog(opts?: DialogOpts): Promise; // Global state variables used across modules declare let assistantText: string; declare let _reasoningText: string; declare let liveReasoningText: string; declare function persistInflightState(sid: string, state: any): void; declare function clearInflightState(sid: string): void; declare function markInflight(sid: string, streamId: string): void; declare function clearInflight(): void; declare function saveInflightState(sid: string, state: any): void; declare function loadInflightState(sid: string, streamId: string): any; declare function startApprovalPolling(sid: string): void; declare function stopApprovalPolling(): void; declare function startClarifyPolling(sid: string): void; declare function stopClarifyPolling(): void; declare function cancelStream(): void; declare function appendLiveToolCard(tc: any): void; declare function buildToolCard(tc: any, live?: boolean): string; declare function finalizeThinkingCard(): void; declare function syncInflightAssistantMessage(): void; declare function setBusy(busy: boolean): void; declare function attachLiveStream(sid: string, streamId: string, uploaded?: any[], opts?: any): void; declare function isCompressionUiRunning(): boolean; // ─── Agent Activity Tree (Mission Control) ────────────────────────── interface ActivityToolCall { id: string; name: string; status: 'pending' | 'running' | 'done' | 'error'; args: Record; result?: string; duration?: number; startedAt: number | null; endedAt: number | null; } interface ActivityNode { id: string; parentId: string | null; agentId: string; agentEmoji: string; agentName: string; tier: 1 | 2 | 3; status: 'pending' | 'running' | 'thinking' | 'done' | 'error' | 'cancelled'; task: string; toolCalls: ActivityToolCall[]; startedAt: number | null; endedAt: number | null; duration: number | null; children: string[]; collapsed: boolean; metadata: Record; } interface MCStats { totalAgents: number; runningAgents: number; pendingAgents: number; doneAgents: number; errorAgents: number; totalTools: number; doneTools: number; runningTools: number; avgResponseTime: number; totalElapsed: number; } interface ActivityTree { version: 1; rootId: string; nodes: Record; stats: MCStats; } interface MCFilter { agent?: string; status?: string; search?: string; } declare function initActivityTree(): ActivityTree; declare function createMockActivityTree(): ActivityTree; declare function formatElapsed(ms: number): string;