29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
import { contextBridge, ipcRenderer } from 'electron'
|
|
import type { AgentUiEvent, SessionState } from '@shared/types'
|
|
|
|
export interface DesktopApi {
|
|
send: (text: string) => Promise<void>
|
|
steer: (text: string) => Promise<void>
|
|
stop: () => Promise<void>
|
|
getState: () => Promise<SessionState>
|
|
versions: () => Promise<{ app: string; electron: string; node: string; chrome: string }>
|
|
onEvent: (callback: (event: AgentUiEvent) => void) => () => void
|
|
}
|
|
|
|
const api: DesktopApi = {
|
|
send: (text) => ipcRenderer.invoke('agent:send', text),
|
|
steer: (text) => ipcRenderer.invoke('agent:steer', text),
|
|
stop: () => ipcRenderer.invoke('agent:stop'),
|
|
getState: () => ipcRenderer.invoke('agent:state'),
|
|
versions: () => ipcRenderer.invoke('app:versions'),
|
|
onEvent: (callback) => {
|
|
const listener = (_e: Electron.IpcRendererEvent, event: AgentUiEvent): void => callback(event)
|
|
ipcRenderer.on('agent:event', listener)
|
|
return () => {
|
|
ipcRenderer.removeListener('agent:event', listener)
|
|
}
|
|
}
|
|
}
|
|
|
|
contextBridge.exposeInMainWorld('api', api)
|