diff --git a/src/cursor/cursor-daemon.ts b/src/cursor/cursor-daemon.ts index 4da46322..eae9295c 100644 --- a/src/cursor/cursor-daemon.ts +++ b/src/cursor/cursor-daemon.ts @@ -184,7 +184,7 @@ export async function startDaemon( `, ]; - proc = spawn('node', args, { + proc = spawn(process.execPath, args, { stdio: ['ignore', 'pipe', 'pipe'], detached: true, shell: process.platform === 'win32', diff --git a/src/cursor/cursor-models.ts b/src/cursor/cursor-models.ts index 3cb8cd4d..05a0a19d 100644 --- a/src/cursor/cursor-models.ts +++ b/src/cursor/cursor-models.ts @@ -78,6 +78,13 @@ export const DEFAULT_CURSOR_MODELS: CursorModel[] = [ */ export async function fetchModelsFromDaemon(port: number): Promise { return new Promise((resolve) => { + let resolved = false; + const safeResolve = (models: CursorModel[]) => { + if (resolved) return; + resolved = true; + resolve(models); + }; + const req = http.request( { // Use 127.0.0.1 instead of localhost for more reliable local connections @@ -95,7 +102,7 @@ export async function fetchModelsFromDaemon(port: number): Promise MAX_BODY_SIZE) { req.destroy(); - resolve(DEFAULT_CURSOR_MODELS); + safeResolve(DEFAULT_CURSOR_MODELS); } }); @@ -109,24 +116,24 @@ export async function fetchModelsFromDaemon(port: number): Promise 0 ? models : DEFAULT_CURSOR_MODELS); + safeResolve(models.length > 0 ? models : DEFAULT_CURSOR_MODELS); } else { - resolve(DEFAULT_CURSOR_MODELS); + safeResolve(DEFAULT_CURSOR_MODELS); } } catch { - resolve(DEFAULT_CURSOR_MODELS); + safeResolve(DEFAULT_CURSOR_MODELS); } }); } ); req.on('error', () => { - resolve(DEFAULT_CURSOR_MODELS); + safeResolve(DEFAULT_CURSOR_MODELS); }); req.on('timeout', () => { req.destroy(); - resolve(DEFAULT_CURSOR_MODELS); + safeResolve(DEFAULT_CURSOR_MODELS); }); req.end();