///
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
}