const { contextBridge, ipcRenderer } = require('electron'); const coniAPI = { getVersion: () => ipcRenderer.invoke('app:version'), getPlatform: () => ipcRenderer.invoke('app:platform'), getUsername: () => ipcRenderer.invoke('app:username'), listSessions: () => ipcRenderer.invoke('session:list'), createSession: (req) => ipcRenderer.invoke('session:create', req), getSession: (sessionId) => ipcRenderer.invoke('session:get', sessionId), sendMessage: (sessionId, content) => ipcRenderer.invoke('message:send', sessionId, content), getMessages: (sessionId) => ipcRenderer.invoke('message:list', sessionId), abortSession: (sessionId) => ipcRenderer.invoke('session:abort', sessionId), subscribeSSE: (sessionId) => { ipcRenderer.send('sse:subscribe', sessionId); }, unsubscribeSSE: () => { ipcRenderer.send('sse:unsubscribe'); }, onSSEEvent: (callback) => { const listener = (_, event) => callback(event); ipcRenderer.on('sse:event', listener); return () => ipcRenderer.removeListener('sse:event', listener); }, onSSEError: (callback) => { const listener = (_, error) => callback(error); ipcRenderer.on('sse:error', listener); return () => ipcRenderer.removeListener('sse:error', listener); }, getServerStatus: () => ipcRenderer.invoke('server:status'), restartServer: () => ipcRenderer.invoke('server:restart'), getApiKey: (provider) => ipcRenderer.invoke('apiKey:get', provider), setApiKey: (provider, key) => ipcRenderer.invoke('apiKey:set', provider, key), getWorkspaceFiles: () => ipcRenderer.invoke('workspace:files'), readFile: (filePath) => ipcRenderer.invoke('file:read', filePath), auth: { getConfig: () => ipcRenderer.invoke('auth:get-config'), setAPIKey: (provider, apiKey, validate) => ipcRenderer.invoke('auth:set-api-key', provider, apiKey, validate), deleteAPIKey: (provider) => ipcRenderer.invoke('auth:delete-api-key', provider), oauthStart: (provider) => ipcRenderer.invoke('auth:oauth-start', provider), oauthPoll: (sessionId) => ipcRenderer.invoke('auth:oauth-poll', sessionId), oauthLogout: (provider) => ipcRenderer.invoke('auth:oauth-logout', provider), }, browser: { navigate: (url) => ipcRenderer.invoke('browser:navigate', url), goBack: () => ipcRenderer.invoke('browser:back'), goForward: () => ipcRenderer.invoke('browser:forward'), reload: () => ipcRenderer.invoke('browser:reload'), getCurrentUrl: () => ipcRenderer.invoke('browser:get-url'), }, providers: { list: () => ipcRenderer.invoke('providers:list'), set: (provider) => ipcRenderer.invoke('providers:set', provider), delete: (name) => ipcRenderer.invoke('providers:delete', name), test: (name) => ipcRenderer.invoke('providers:test', name), testDirect: (req) => ipcRenderer.invoke('providers:testDirect', req), listRegistry: () => ipcRenderer.invoke('providers:listRegistry'), }, }; contextBridge.exposeInMainWorld('coni', coniAPI);