1- const { app, BrowserWindow, Menu, dialog } = require ( "electron" ) ;
1+ const { app, BrowserWindow, Menu, dialog, globalShortcut } = require ( "electron" ) ;
22const path = require ( "path" ) ;
33const { registerGitHandlers } = require ( "./ipc/git-handlers" ) ;
44const { registerVibeHandlers } = require ( "./ipc/vibe-handlers" ) ;
55const { registerCommonHandlers } = require ( "./ipc/common-handlers" ) ;
66const { registerSecureStoreHandlers } = require ( "./ipc/secure-store" ) ;
77const { createLogger } = require ( './logger' ) ;
88const isDev = process . env . NODE_ENV === "development" || ! app . isPackaged ;
9+ // Allow enabling DevTools in production via env var or CLI flag
10+ const enableDevTools =
11+ isDev ||
12+ process . env . ELECTRON_ENABLE_DEVTOOLS === "1" ||
13+ process . argv . includes ( "--enable-devtools" ) ;
914
1015const logger = createLogger ( { component : 'main' } ) ;
1116
@@ -41,11 +46,20 @@ function createWindow() {
4146 } ) ;
4247
4348 // Open DevTools in development
44- if ( isDev ) {
49+ if ( enableDevTools ) {
4550 mainWindow . webContents . openDevTools ( ) ;
4651 logger . info ( 'DevTools opened for development' ) ;
4752 }
4853
54+ // Keyboard toggles for DevTools even without a menu
55+ mainWindow . webContents . on ( 'before-input-event' , ( event , input ) => {
56+ const isToggle = ( input . key ?. toUpperCase ( ) === 'I' && input . control && input . shift ) || input . code === 'F12' ;
57+ if ( isToggle ) {
58+ mainWindow . webContents . toggleDevTools ( ) ;
59+ event . preventDefault ( ) ;
60+ }
61+ } ) ;
62+
4963 // Handle window closed
5064 mainWindow . on ( "closed" , ( ) => {
5165 mainWindow = null ;
@@ -82,6 +96,21 @@ app.whenReady().then(() => {
8296
8397 createWindow ( ) ;
8498
99+ // Global shortcuts to toggle DevTools in production builds
100+ try {
101+ globalShortcut . register ( 'Control+Shift+I' , ( ) => {
102+ const win = BrowserWindow . getFocusedWindow ( ) ;
103+ if ( win ) win . webContents . toggleDevTools ( ) ;
104+ } ) ;
105+ globalShortcut . register ( 'F12' , ( ) => {
106+ const win = BrowserWindow . getFocusedWindow ( ) ;
107+ if ( win ) win . webContents . toggleDevTools ( ) ;
108+ } ) ;
109+ logger . info ( 'Global shortcuts for DevTools registered' ) ;
110+ } catch ( e ) {
111+ logger . error ( 'Failed to register global shortcuts' , { error : e ?. message } ) ;
112+ }
113+
85114 // On macOS, re-create window when dock icon is clicked
86115 app . on ( "activate" , ( ) => {
87116 if ( BrowserWindow . getAllWindows ( ) . length === 0 ) {
@@ -98,6 +127,14 @@ app.on("window-all-closed", () => {
98127 }
99128} ) ;
100129
130+ // Unregister global shortcuts on quit
131+ app . on ( 'will-quit' , ( ) => {
132+ try {
133+ globalShortcut . unregisterAll ( ) ;
134+ logger . info ( 'Global shortcuts unregistered' ) ;
135+ } catch { }
136+ } ) ;
137+
101138// Security: Prevent new window creation
102139app . on ( "web-contents-created" , ( event , contents ) => {
103140 contents . on ( "new-window" , ( event , navigationUrl ) => {
0 commit comments