const { contextBridge, ipcRenderer } = require('electron'); // Expose protected methods that allow the renderer process to use the ipcRenderer contextBridge.exposeInMainWorld('electronAPI', { // App info getAppVersion: () => ipcRenderer.invoke('get-app-version'), getUserDataPath: () => ipcRenderer.invoke('get-user-data-path'), getDocumentsPath: () => ipcRenderer.invoke('get-documents-path'), // Dialogs showOpenDialog: (options) => ipcRenderer.invoke('show-open-dialog', options), showSaveDialog: (options) => ipcRenderer.invoke('show-save-dialog', options), // Store setStore: (key, value) => ipcRenderer.invoke('set-store', key, value), getStore: (key, defaultValue) => ipcRenderer.invoke('get-store', key, defaultValue), deleteStore: (key) => ipcRenderer.invoke('delete-store', key), clearStore: () => ipcRenderer.invoke('clear-store'), // Events onNavigateToSettings: (callback) => ipcRenderer.on('navigate-to-settings', callback), onNavigateToHelp: (callback) => ipcRenderer.on('navigate-to-help', callback), removeAllListeners: (channel) => ipcRenderer.removeAllListeners(channel) }); // Secure API for models and voice contextBridge.exposeInMainWorld('modelAPI', { invoke: (channel, data) => { const validChannels = ['load-model', 'unload-model', 'generate-text', 'generate-image', 'generate-video']; if (validChannels.includes(channel)) { return ipcRenderer.invoke(channel, data); } } });