Features: - Welcome screen on first run (provider choice before LS starts) - 15+ AI providers (Google Gemini, OpenAI, Anthropic, DeepSeek, Ollama, etc.) - Provider config syncs to endpoints.json for translation proxy - Built-in Node.js translation proxy for non-native backends - Auto-update support, tray integration, URI scheme handler
82 lines
3.0 KiB
JavaScript
82 lines
3.0 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.setupApplicationMenu = setupApplicationMenu;
|
|
const electron_1 = require("electron");
|
|
const utils_1 = require("./utils");
|
|
const updater_1 = require("./updater");
|
|
const providerSettings_1 = require("./providerSettings");
|
|
/**
|
|
* Applies modifications to the default application menu.
|
|
* Adds "New Window", "AI Provider Settings", and other items.
|
|
*/
|
|
function setupApplicationMenu(url) {
|
|
const menu = electron_1.Menu.getApplicationMenu();
|
|
if (!menu) {
|
|
return;
|
|
}
|
|
// Adds a "New Window" item to the top of the existing File menu.
|
|
addItemToSubmenu(menu, 'File', 0, new electron_1.MenuItem({
|
|
label: 'New Window',
|
|
accelerator: 'CmdOrCtrl+Shift+N',
|
|
click: () => {
|
|
(0, utils_1.createWindow)(url);
|
|
},
|
|
}));
|
|
// Add "AI Provider Settings" to the File menu
|
|
addItemToSubmenu(menu, 'File', 1, new electron_1.MenuItem({
|
|
label: 'AI Provider Settings',
|
|
accelerator: 'CmdOrCtrl+,',
|
|
click: () => {
|
|
electron_1.BrowserWindow.getAllWindows()[0]?.webContents.send('provider:open-settings');
|
|
electron_1.ipcMain.emit('provider:open-settings-request');
|
|
},
|
|
}));
|
|
// Add separator after new items
|
|
addItemToSubmenu(menu, 'File', 2, new electron_1.MenuItem({
|
|
type: 'separator',
|
|
}));
|
|
// Add "Check for Updates" to the application menu on macOS.
|
|
if ((0, utils_1.isMacOS)()) {
|
|
const appSubmenu = menu.items[0]?.submenu;
|
|
if (appSubmenu) {
|
|
appSubmenu.insert(1, new electron_1.MenuItem({
|
|
id: 'check-for-updates',
|
|
label: updater_1.MenuUpdateStep.CheckForUpdates,
|
|
click: (menuItem) => {
|
|
const action = updater_1.updateActions[menuItem.label];
|
|
action?.();
|
|
},
|
|
}));
|
|
}
|
|
}
|
|
// Adds Docs, AI Provider Settings, and Toggle Developer Tools to the Help menu
|
|
addItemToSubmenu(menu, 'Help', 0, new electron_1.MenuItem({
|
|
label: 'Docs',
|
|
click: async () => {
|
|
await electron_1.shell.openExternal('https://ag-x.dev/docs');
|
|
},
|
|
}));
|
|
addItemToSubmenu(menu, 'Help', 1, new electron_1.MenuItem({
|
|
label: 'AI Provider Settings',
|
|
click: () => {
|
|
electron_1.BrowserWindow.getAllWindows()[0]?.webContents.send('provider:open-settings');
|
|
electron_1.ipcMain.emit('provider:open-settings-request');
|
|
},
|
|
}));
|
|
addItemToSubmenu(menu, 'Help', 2, new electron_1.MenuItem({
|
|
role: 'toggleDevTools',
|
|
}));
|
|
// Re-apply the menu so the change takes effect.
|
|
electron_1.Menu.setApplicationMenu(menu);
|
|
}
|
|
/**
|
|
* Adds a menu item to a submenu of the main application menu.
|
|
*/
|
|
function addItemToSubmenu(appMenu, submenuLabel, position, item) {
|
|
const submenuItem = appMenu.items.find((item) => item.label === submenuLabel);
|
|
if (!submenuItem?.submenu) {
|
|
return;
|
|
}
|
|
submenuItem.submenu.insert(position, item);
|
|
}
|