mirror of
https://github.com/lone-cloud/gerbil
synced 2026-06-03 19:54:44 -07:00
285 lines
8 KiB
TypeScript
285 lines
8 KiB
TypeScript
import { ipcMain, app } from 'electron';
|
|
import { join } from 'path';
|
|
import { platform } from 'process';
|
|
import type { Screen } from '@/types';
|
|
import {
|
|
stopKoboldCpp,
|
|
launchKoboldCppWithCustomFrontends,
|
|
} from '@/main/modules/koboldcpp/launcher';
|
|
import { downloadRelease } from '@/main/modules/koboldcpp/download';
|
|
import {
|
|
getInstalledVersions,
|
|
getCurrentVersion,
|
|
setCurrentVersion,
|
|
deleteRelease,
|
|
} from '@/main/modules/koboldcpp/version';
|
|
import {
|
|
getConfigFiles,
|
|
saveConfigFile,
|
|
deleteConfigFile,
|
|
parseConfigFile,
|
|
selectModelFile,
|
|
selectInstallDirectory,
|
|
} from '@/main/modules/koboldcpp/config';
|
|
import { analyzeGGUFModel } from '@/main/modules/koboldcpp/analyze';
|
|
import {
|
|
get as getConfig,
|
|
set as setConfig,
|
|
getSelectedConfig,
|
|
getInstallDir,
|
|
getColorScheme,
|
|
getEnableSystemTray,
|
|
} from '@/main/modules/config';
|
|
import { createTray, updateTrayState, destroyTray } from '@/main/modules/tray';
|
|
import { getConfigDir, openPathHandler, openUrl } from '@/utils/node/path';
|
|
import { logError } from '@/utils/node/logging';
|
|
import { stopFrontend as stopSillyTavernFrontend } from '@/main/modules/sillytavern';
|
|
import { stopFrontend as stopOpenWebUIFrontend } from '@/main/modules/openwebui';
|
|
import { stopFrontend as stopComfyUIFrontend } from '@/main/modules/comfyui';
|
|
import {
|
|
isUvAvailable,
|
|
isNpxAvailable,
|
|
getVersionInfo,
|
|
isAURInstallation,
|
|
} from '@/main/modules/dependencies';
|
|
import { getMainWindow } from '@/main/modules/window';
|
|
import {
|
|
saveTabContent,
|
|
loadTabContent,
|
|
saveNotepadState,
|
|
loadNotepadState,
|
|
deleteTabFile,
|
|
createNewTab,
|
|
renameTab,
|
|
} from '@/main/modules/notepad';
|
|
import {
|
|
detectGPU,
|
|
detectCPU,
|
|
detectGPUCapabilities,
|
|
detectGPUMemory,
|
|
detectROCm,
|
|
detectSystemMemory,
|
|
} from '@/main/modules/hardware';
|
|
import {
|
|
detectBackendSupport,
|
|
getAvailableBackends,
|
|
} from '@/main/modules/koboldcpp/backend';
|
|
import {
|
|
openPerformanceManager,
|
|
startMonitoring,
|
|
stopMonitoring,
|
|
} from '@/main/modules/monitoring';
|
|
import {
|
|
checkForUpdates,
|
|
downloadUpdate,
|
|
quitAndInstall,
|
|
isUpdateDownloaded,
|
|
canAutoUpdate,
|
|
} from '@/main/modules/autoUpdater';
|
|
|
|
export function setupIPCHandlers() {
|
|
const mainWindow = getMainWindow();
|
|
|
|
ipcMain.handle('kobold:downloadRelease', async (_, asset, options) =>
|
|
downloadRelease(asset, options)
|
|
);
|
|
|
|
ipcMain.handle('kobold:getInstalledVersions', () => getInstalledVersions());
|
|
|
|
ipcMain.handle('kobold:getCurrentVersion', () => getCurrentVersion());
|
|
|
|
ipcMain.handle('kobold:getConfigFiles', () => getConfigFiles());
|
|
|
|
ipcMain.handle('kobold:saveConfigFile', async (_, configName, configData) =>
|
|
saveConfigFile(configName, configData)
|
|
);
|
|
|
|
ipcMain.handle('kobold:deleteConfigFile', async (_, configName) =>
|
|
deleteConfigFile(configName)
|
|
);
|
|
|
|
ipcMain.handle('kobold:getSelectedConfig', () => getSelectedConfig());
|
|
|
|
ipcMain.handle('kobold:setSelectedConfig', (_, configName) =>
|
|
setConfig('selectedConfig', configName)
|
|
);
|
|
|
|
ipcMain.handle('kobold:setCurrentVersion', (_, version) =>
|
|
setCurrentVersion(version)
|
|
);
|
|
|
|
ipcMain.handle('kobold:getCurrentInstallDir', () => getInstallDir());
|
|
|
|
ipcMain.handle('kobold:selectInstallDirectory', () =>
|
|
selectInstallDirectory()
|
|
);
|
|
|
|
ipcMain.handle('kobold:detectGPU', () => detectGPU());
|
|
|
|
ipcMain.handle('kobold:detectCPU', () => detectCPU());
|
|
|
|
ipcMain.handle('kobold:detectGPUCapabilities', () => detectGPUCapabilities());
|
|
|
|
ipcMain.handle('kobold:detectGPUMemory', () => detectGPUMemory());
|
|
|
|
ipcMain.handle('kobold:detectSystemMemory', () => detectSystemMemory());
|
|
|
|
ipcMain.handle('kobold:detectROCm', () => detectROCm());
|
|
|
|
ipcMain.handle('kobold:detectBackendSupport', () => detectBackendSupport());
|
|
|
|
ipcMain.handle('kobold:getAvailableBackends', (_, includeDisabled = false) =>
|
|
getAvailableBackends(includeDisabled)
|
|
);
|
|
|
|
ipcMain.handle('kobold:getPlatform', () => platform);
|
|
|
|
ipcMain.handle('kobold:launchKoboldCpp', (_, args) =>
|
|
launchKoboldCppWithCustomFrontends(args)
|
|
);
|
|
|
|
ipcMain.handle('kobold:deleteRelease', (_, binaryPath) =>
|
|
deleteRelease(binaryPath)
|
|
);
|
|
|
|
ipcMain.handle('kobold:stopKoboldCpp', () => {
|
|
stopKoboldCpp();
|
|
stopSillyTavernFrontend();
|
|
stopOpenWebUIFrontend();
|
|
stopComfyUIFrontend();
|
|
});
|
|
|
|
ipcMain.handle('kobold:parseConfigFile', (_, filePath) =>
|
|
parseConfigFile(filePath)
|
|
);
|
|
|
|
ipcMain.handle('kobold:selectModelFile', (_, title) =>
|
|
selectModelFile(title)
|
|
);
|
|
|
|
ipcMain.handle('kobold:analyzeModel', async (_, filePath: string) =>
|
|
analyzeGGUFModel(filePath)
|
|
);
|
|
|
|
ipcMain.handle('config:get', (_, key) => getConfig(key));
|
|
|
|
ipcMain.on('config:set', (_, key, value) => setConfig(key, value));
|
|
|
|
ipcMain.handle('app:getVersion', () => app.getVersion());
|
|
|
|
ipcMain.handle('app:getVersionInfo', () => getVersionInfo());
|
|
|
|
ipcMain.handle('app:openPath', (_, path) => openPathHandler(path));
|
|
|
|
ipcMain.handle('app:showLogsFolder', () =>
|
|
openPathHandler(join(app.getPath('userData'), 'logs'))
|
|
);
|
|
|
|
ipcMain.handle('app:viewConfigFile', () => openPathHandler(getConfigDir()));
|
|
|
|
ipcMain.handle('app:minimizeWindow', () => mainWindow.minimize());
|
|
|
|
ipcMain.handle('app:maximizeWindow', () => {
|
|
if (mainWindow.isMaximized()) {
|
|
mainWindow.restore();
|
|
} else {
|
|
mainWindow.maximize();
|
|
}
|
|
});
|
|
|
|
ipcMain.handle('app:closeWindow', () => mainWindow.close());
|
|
|
|
ipcMain.handle('app:isMaximized', () => mainWindow.isMaximized());
|
|
|
|
ipcMain.handle('app:getZoomLevel', () =>
|
|
mainWindow.webContents.getZoomLevel()
|
|
);
|
|
|
|
ipcMain.handle('app:setZoomLevel', (_, level) => {
|
|
mainWindow.webContents.setZoomLevel(level);
|
|
setConfig('zoomLevel', level);
|
|
});
|
|
|
|
ipcMain.handle('app:getColorScheme', () => getColorScheme());
|
|
|
|
ipcMain.handle('app:setColorScheme', (_, colorScheme) =>
|
|
setConfig('colorScheme', colorScheme)
|
|
);
|
|
|
|
ipcMain.handle('app:getEnableSystemTray', () => getEnableSystemTray());
|
|
|
|
ipcMain.handle('app:setEnableSystemTray', async (_, enabled: boolean) => {
|
|
await setConfig('enableSystemTray', enabled);
|
|
if (enabled) {
|
|
createTray();
|
|
} else {
|
|
destroyTray();
|
|
}
|
|
});
|
|
|
|
ipcMain.handle(
|
|
'app:updateTrayState',
|
|
(
|
|
_,
|
|
state: {
|
|
screen?: Screen | null;
|
|
model?: string | null;
|
|
config?: string | null;
|
|
monitoringEnabled?: boolean;
|
|
}
|
|
) => {
|
|
updateTrayState(state);
|
|
}
|
|
);
|
|
|
|
ipcMain.handle('app:openExternal', async (_, url) => openUrl(url));
|
|
|
|
mainWindow.webContents.once('did-finish-load', async () => {
|
|
const savedZoomLevel = await getConfig('zoomLevel');
|
|
if (typeof savedZoomLevel === 'number') {
|
|
mainWindow.webContents.setZoomLevel(savedZoomLevel);
|
|
}
|
|
});
|
|
|
|
ipcMain.handle('app:openPerformanceManager', () => openPerformanceManager());
|
|
|
|
ipcMain.on('logs:logError', (_, message, error?) => logError(message, error));
|
|
|
|
ipcMain.handle('dependencies:isNpxAvailable', () => isNpxAvailable());
|
|
|
|
ipcMain.handle('dependencies:isUvAvailable', () => isUvAvailable());
|
|
|
|
ipcMain.on('monitoring:start', () => startMonitoring(mainWindow));
|
|
|
|
ipcMain.on('monitoring:stop', () => stopMonitoring());
|
|
|
|
ipcMain.handle('app:checkForUpdates', () => checkForUpdates());
|
|
|
|
ipcMain.handle('app:downloadUpdate', () => downloadUpdate());
|
|
|
|
ipcMain.handle('app:quitAndInstall', () => quitAndInstall());
|
|
|
|
ipcMain.handle('app:isUpdateDownloaded', () => isUpdateDownloaded());
|
|
|
|
ipcMain.handle('app:canAutoUpdate', () => canAutoUpdate());
|
|
|
|
ipcMain.handle('app:isAURInstallation', () => isAURInstallation());
|
|
|
|
ipcMain.handle('notepad:saveTabContent', (_, title, content) =>
|
|
saveTabContent(title, content)
|
|
);
|
|
|
|
ipcMain.handle('notepad:loadTabContent', (_, title) => loadTabContent(title));
|
|
|
|
ipcMain.handle('notepad:renameTab', (_, oldTitle, newTitle) =>
|
|
renameTab(oldTitle, newTitle)
|
|
);
|
|
|
|
ipcMain.handle('notepad:saveState', (_, state) => saveNotepadState(state));
|
|
|
|
ipcMain.handle('notepad:loadState', () => loadNotepadState());
|
|
|
|
ipcMain.handle('notepad:deleteTab', (_, title) => deleteTabFile(title));
|
|
|
|
ipcMain.handle('notepad:createNewTab', (_, title) => createNewTab(title));
|
|
}
|