Files
webui-develop/static/global.d.ts

390 lines
13 KiB
TypeScript

// 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<string>;
_dirCache?: Record<string, WsEntry[]>;
_profileDefaultWorkspace?: string;
lastUsage?: Record<string, unknown>;
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<HTMLOptGroupElement | HTMLOptionElement>;
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<HTMLOptionElement>;
}
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<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
removeEventListener<K extends keyof HTMLElementEventMap>(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<void>;
matches?(selector: string): boolean;
replaceWith(...nodes: any[]): void;
_t?: ReturnType<typeof setTimeout>;
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<any>;
showOpenFilePicker?: (options?: any) => Promise<any>;
_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<string, unknown>;
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<string>;
declare const MD_EXTS: Set<string>;
declare const DOWNLOAD_EXTS: Set<string>;
interface Document {
exitFullscreen?: () => Promise<void>;
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<T extends Node>(node: T): T;
removeChild<T extends Node>(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<K extends keyof HTMLElementEventMap>(type: K, listener: (this: Element, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
removeEventListener<K extends keyof HTMLElementEventMap>(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<any>;
declare function syncOnboardingProvider(value: string): void;
declare function syncOnboardingWorkspaceSelect(value: string): void;
declare function fileIcon(name: string, type: string): string;
declare function loadOnboardingWizard(): Promise<boolean>;
declare function nextOnboardingStep(): Promise<void>;
declare function prevOnboardingStep(): void;
declare function skipOnboarding(): Promise<void>;
declare function renderSessionList(): Promise<void>;
declare function newSession(flash?: boolean, agentOverride?: string): Promise<void>;
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<void>;
declare function loadSession(sid: string): Promise<void>;
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<boolean>;
declare function showPromptDialog(opts?: DialogOpts): Promise<string | null>;
// 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<string, any>;
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<string, any>;
}
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<string, ActivityNode>;
stats: MCStats;
}
interface MCFilter {
agent?: string;
status?: string;
search?: string;
}
declare function initActivityTree(): ActivityTree;
declare function createMockActivityTree(): ActivityTree;
declare function formatElapsed(ms: number): string;