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:
lofyer
2026-07-29 22:42:30 +08:00
co-authored by factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
commit 1b6178b841
30 changed files with 12017 additions and 0 deletions
+46
View File
@@ -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)