fix: Provider sync on every startup + sandbox fixes (v2.0.4)
Critical fixes: - ALWAYS sync active AG X provider to endpoints.json on startup (previously only synced on first run, causing LS to use stale data) - Add --no-sandbox to proxy process spawns (fixes SIGTRAP crash on Linux) - Add --no-sandbox for all Electron modes (not just headless) - Add --ag-reset flag to re-trigger welcome screen - Bump version to 2.0.4 Root causes fixed: 1. endpoints.json was never updated after first-run, so LS used wrong provider 2. Electron child processes (translation proxy) crashed due to SUID sandbox 3. No way to re-show provider selection after initial setup
This commit is contained in:
2
dist/languageServer.js
vendored
2
dist/languageServer.js
vendored
@@ -238,7 +238,7 @@ function ensureProxyStarted() {
|
||||
// Use Electron's built-in Node.js to run our translation proxy
|
||||
const proxyScript = path_1.default.join(__dirname, 'services', 'translationProxy.js');
|
||||
const nodeBin = process.execPath;
|
||||
_proxyProcess = (0, child_process_1.spawn)(nodeBin, [proxyScript], {
|
||||
_proxyProcess = (0, child_process_1.spawn)(nodeBin, ['--no-sandbox', proxyScript], {
|
||||
stdio: 'ignore',
|
||||
detached: true,
|
||||
env: { ...process.env }
|
||||
|
||||
14
dist/main.js
vendored
14
dist/main.js
vendored
@@ -81,12 +81,15 @@ let apiProxy;
|
||||
const HEADLESS = process.env.ELECTRON_OZONE_PLATFORM_HINT === 'headless';
|
||||
// When set, skip LS startup and load this URL directly (for dev iteration).
|
||||
const DEV_URL = process.env.DEV_URL;
|
||||
const AG_RESET = process.argv.includes('--ag-reset');
|
||||
if (HEADLESS) {
|
||||
electron_1.app.commandLine.appendSwitch('ozone-platform', 'headless');
|
||||
electron_1.app.commandLine.appendSwitch('headless');
|
||||
electron_1.app.commandLine.appendSwitch('disable-gpu');
|
||||
electron_1.app.commandLine.appendSwitch('no-sandbox');
|
||||
}
|
||||
// Always disable sandbox for Linux compatibility (SUID sandbox issues)
|
||||
electron_1.app.commandLine.appendSwitch('no-sandbox');
|
||||
if (!electron_1.app.commandLine.hasSwitch('remote-debugging-port')) {
|
||||
electron_1.app.commandLine.appendSwitch('remote-debugging-port', '0');
|
||||
}
|
||||
@@ -218,17 +221,16 @@ electron_1.app
|
||||
const csrf = crypto.randomUUID();
|
||||
console.log(`Starting app (v${electron_1.app.getVersion()}) with dynamic port…`);
|
||||
// Check if first run BEFORE starting LS so we can configure provider first
|
||||
const isFirstRun = !fs_1.existsSync(providerService.configPath);
|
||||
const isFirstRun = !fs_1.existsSync(providerService.configPath) || AG_RESET;
|
||||
if (isFirstRun && !HEADLESS) {
|
||||
console.log('[Welcome] First run detected — showing provider choice screen');
|
||||
await showWelcomeScreen('about:blank');
|
||||
console.log('[Welcome] User selected provider:', providerService.getActiveProvider());
|
||||
// Sync to endpoints.json (for Google, the handler already set the endpoint;
|
||||
// for custom, the settings save handler synced. This is a safety sync.)
|
||||
if (providerService.getActiveProvider() !== 'google_gemini') {
|
||||
syncProviderToEndpoints(providerService);
|
||||
}
|
||||
}
|
||||
// ALWAYS sync the active AG X provider to endpoints.json on every startup.
|
||||
// This ensures the Language Server reads the correct provider config.
|
||||
console.log('[Sync] Syncing active provider to endpoints.json on startup');
|
||||
syncProviderToEndpoints(providerService);
|
||||
let handle;
|
||||
const targetPort = Number(process.env.JETSKI_LS_PORT) || constants_1.DYNAMIC_PORT;
|
||||
try {
|
||||
|
||||
2
dist/services/apiProxy.js
vendored
2
dist/services/apiProxy.js
vendored
@@ -71,7 +71,7 @@ class ApiProxy {
|
||||
// Use Electron's Node.js binary to run our translation proxy
|
||||
const proxyScript = path.join(__dirname, 'translationProxy.js');
|
||||
const nodeBin = process.execPath;
|
||||
this.proxyProcess = child_process.spawn(nodeBin, [proxyScript], {
|
||||
this.proxyProcess = child_process.spawn(nodeBin, ['--no-sandbox', proxyScript], {
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
detached: false,
|
||||
env: { ...process.env },
|
||||
|
||||
Reference in New Issue
Block a user