/// declare namespace NodeJS { interface ProcessEnv { /** * The built directory structure * * ```tree * ├─┬─┬ dist * │ │ └── index.html * │ │ * │ ├─┬ dist-electron * │ │ ├── main.js * │ │ └── preload.js * │ * ``` */ APP_ROOT: string /** /dist/ or /public/ */ VITE_PUBLIC: string } } // ============================================================================ // ElectronAPI type definitions // ============================================================================ interface HubStatus { hubId: string status: string agentCount: number gatewayConnected: boolean gatewayUrl?: string defaultAgent?: { agentId: string status: string } | null } interface AgentInfo { agentId: string status: string } interface ToolInfo { name: string group: string enabled: boolean } interface SkillInfo { id: string name: string description: string version: string enabled: boolean source: 'bundled' | 'global' | 'profile' triggers: string[] } interface DeviceMeta { userAgent?: string platform?: string language?: string } interface DeviceEntryInfo { deviceId: string agentId: string addedAt: number meta?: DeviceMeta } interface SkillAddResult { ok: boolean message: string path?: string skills?: string[] } interface ProfileData { profileId: string | undefined name: string | undefined style: string | undefined userContent: string | undefined } interface ElectronAPI { hub: { init: () => Promise getStatus: () => Promise getAgentInfo: () => Promise info: () => Promise reconnect: (url: string) => Promise listAgents: () => Promise createAgent: (id?: string) => Promise getAgent: (id: string) => Promise closeAgent: (id: string) => Promise sendMessage: (agentId: string, content: string) => Promise registerToken: (token: string, agentId: string, expiresAt: number) => Promise onDeviceConfirmRequest: (callback: (deviceId: string, meta?: DeviceMeta) => void) => void offDeviceConfirmRequest: () => void deviceConfirmResponse: (deviceId: string, allowed: boolean) => void listDevices: () => Promise revokeDevice: (deviceId: string) => Promise<{ ok: boolean }> } tools: { list: () => Promise toggle: (name: string) => Promise setStatus: (name: string, enabled: boolean) => Promise active: () => Promise reload: () => Promise } skills: { list: () => Promise get: (id: string) => Promise toggle: (id: string) => Promise setStatus: (id: string, enabled: boolean) => Promise reload: () => Promise add: (source: string, options?: { name?: string; force?: boolean }) => Promise remove: (name: string) => Promise } agent: { status: () => Promise } profile: { get: () => Promise updateName: (name: string) => Promise updateStyle: (style: string) => Promise updateUser: (content: string) => Promise } } // Used in Renderer process, expose in `preload.ts` interface Window { ipcRenderer: import('electron').IpcRenderer electronAPI: ElectronAPI }