fix(cursor): use process.execPath and add safeResolve to model fetcher

- Replace 'node' with process.execPath for cross-platform reliability
- Add safeResolve guard in fetchModelsFromDaemon matching startDaemon pattern
This commit is contained in:
Tam Nhu Tran
2026-02-12 07:37:20 +07:00
parent 36f0308a72
commit 94789676b9
2 changed files with 14 additions and 7 deletions
+1 -1
View File
@@ -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',
+13 -6
View File
@@ -78,6 +78,13 @@ export const DEFAULT_CURSOR_MODELS: CursorModel[] = [
*/
export async function fetchModelsFromDaemon(port: number): Promise<CursorModel[]> {
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<CursorModel[]
data += chunk;
if (data.length > MAX_BODY_SIZE) {
req.destroy();
resolve(DEFAULT_CURSOR_MODELS);
safeResolve(DEFAULT_CURSOR_MODELS);
}
});
@@ -109,24 +116,24 @@ export async function fetchModelsFromDaemon(port: number): Promise<CursorModel[]
provider: detectProvider(m.id),
isDefault: m.id === DEFAULT_CURSOR_MODEL,
}));
resolve(models.length > 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();