feat: bootstrap secure cross-platform assistant
Establish the Electron foundation and pluggable agent runtime so desktop workflows can evolve safely across supported platforms. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
commit
1b6178b841
@@ -0,0 +1,46 @@
|
||||
import { contextBridge, ipcRenderer } from 'electron'
|
||||
import {
|
||||
type AgentEvent,
|
||||
type AgentRequest,
|
||||
type AgentRuntimeStatus,
|
||||
type AppInfo,
|
||||
type DesktopApi
|
||||
} from '../shared/contracts'
|
||||
import { ipcChannels } from '../shared/ipc-channels'
|
||||
|
||||
const desktopApi: DesktopApi = {
|
||||
app: {
|
||||
getInfo: () => ipcRenderer.invoke(ipcChannels.appInfo) as Promise<AppInfo>,
|
||||
show: async () => {
|
||||
await ipcRenderer.invoke(ipcChannels.appShow)
|
||||
},
|
||||
hide: async () => {
|
||||
await ipcRenderer.invoke(ipcChannels.appHide)
|
||||
},
|
||||
onNewConversation: (listener) => {
|
||||
const handler = (): void => listener()
|
||||
ipcRenderer.on(ipcChannels.conversationNew, handler)
|
||||
return () => ipcRenderer.removeListener(ipcChannels.conversationNew, handler)
|
||||
}
|
||||
},
|
||||
agent: {
|
||||
getStatus: () =>
|
||||
ipcRenderer.invoke(
|
||||
ipcChannels.agentStatus
|
||||
) as Promise<AgentRuntimeStatus>,
|
||||
run: async (request: AgentRequest) => {
|
||||
await ipcRenderer.invoke(ipcChannels.agentRun, request)
|
||||
},
|
||||
cancel: async (requestId: string) => {
|
||||
await ipcRenderer.invoke(ipcChannels.agentCancel, requestId)
|
||||
},
|
||||
onEvent: (listener) => {
|
||||
const handler = (_event: Electron.IpcRendererEvent, payload: AgentEvent): void =>
|
||||
listener(payload)
|
||||
ipcRenderer.on(ipcChannels.agentEvent, handler)
|
||||
return () => ipcRenderer.removeListener(ipcChannels.agentEvent, handler)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
contextBridge.exposeInMainWorld('goodbuddy', desktopApi)
|
||||
Reference in New Issue
Block a user