@kaitranntt/ccs 6.7.0-dev.3 → 6.7.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
- package/dist/cliproxy/cliproxy-executor.js +59 -48
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/cliproxy/index.d.ts +4 -0
- package/dist/cliproxy/index.d.ts.map +1 -1
- package/dist/cliproxy/index.js +8 -1
- package/dist/cliproxy/index.js.map +1 -1
- package/dist/cliproxy/proxy-detector.d.ts +70 -0
- package/dist/cliproxy/proxy-detector.d.ts.map +1 -0
- package/dist/cliproxy/proxy-detector.js +177 -0
- package/dist/cliproxy/proxy-detector.js.map +1 -0
- package/dist/cliproxy/service-manager.d.ts.map +1 -1
- package/dist/cliproxy/service-manager.js +113 -86
- package/dist/cliproxy/service-manager.js.map +1 -1
- package/dist/cliproxy/startup-lock.d.ts +57 -0
- package/dist/cliproxy/startup-lock.d.ts.map +1 -0
- package/dist/cliproxy/startup-lock.js +216 -0
- package/dist/cliproxy/startup-lock.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliproxy-executor.d.ts","sourceRoot":"","sources":["../../src/cliproxy/cliproxy-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmBH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"cliproxy-executor.d.ts","sourceRoot":"","sources":["../../src/cliproxy/cliproxy-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmBH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAwE3D;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM,GACnC,OAAO,CAAC,IAAI,CAAC,CAggBf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAepE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,GAAE,MAA8B,EACzC,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -52,9 +52,10 @@ const websearch_manager_1 = require("../utils/websearch-manager");
|
|
|
52
52
|
const model_catalog_1 = require("./model-catalog");
|
|
53
53
|
const account_manager_1 = require("./account-manager");
|
|
54
54
|
const platform_commands_1 = require("../utils/platform-commands");
|
|
55
|
-
const port_utils_1 = require("../utils/port-utils");
|
|
56
55
|
const websearch_manager_2 = require("../utils/websearch-manager");
|
|
57
56
|
const session_tracker_1 = require("./session-tracker");
|
|
57
|
+
const proxy_detector_1 = require("./proxy-detector");
|
|
58
|
+
const startup_lock_1 = require("./startup-lock");
|
|
58
59
|
/** Default executor configuration */
|
|
59
60
|
const DEFAULT_CONFIG = {
|
|
60
61
|
port: config_generator_1.CLIPROXY_DEFAULT_PORT,
|
|
@@ -349,66 +350,76 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
|
|
|
349
350
|
log(`Generating config for ${provider}`);
|
|
350
351
|
const configPath = (0, config_generator_1.generateConfig)(provider, cfg.port);
|
|
351
352
|
log(`Config written: ${configPath}`);
|
|
352
|
-
// 6a. Pre-flight check
|
|
353
|
-
//
|
|
353
|
+
// 6a. Pre-flight check using unified detection with startup lock
|
|
354
|
+
// This prevents race conditions when multiple CCS processes start simultaneously
|
|
354
355
|
(0, session_tracker_1.cleanupOrphanedSessions)(cfg.port);
|
|
355
|
-
//
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
log(`
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
if ((0, port_utils_1.isCLIProxyProcess)(portProcess)) {
|
|
368
|
-
// CLIProxy on port but no session lock - likely orphaned/zombie
|
|
369
|
-
// Only kill if no active sessions registered
|
|
370
|
-
if (!(0, session_tracker_1.hasActiveSessions)()) {
|
|
371
|
-
log(`Found zombie CLIProxy on port ${cfg.port} (PID ${portProcess.pid}), killing...`);
|
|
372
|
-
const killed = (0, platform_commands_1.killProcessOnPort)(cfg.port, verbose);
|
|
373
|
-
if (killed) {
|
|
374
|
-
console.log((0, ui_1.info)(`Cleaned up zombie CLIProxy process`));
|
|
375
|
-
// Wait a bit for port to be released
|
|
376
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
380
|
-
// Active sessions exist but getExistingProxy returned null - something's wrong
|
|
381
|
-
// Try to connect anyway
|
|
382
|
-
log(`CLIProxy on port ${cfg.port} has active sessions, attempting to join...`);
|
|
383
|
-
}
|
|
356
|
+
// Use startup lock to coordinate with other CCS processes
|
|
357
|
+
await (0, startup_lock_1.withStartupLock)(async () => {
|
|
358
|
+
// Detect running proxy using multiple methods (HTTP, session-lock, port-process)
|
|
359
|
+
const proxyStatus = await (0, proxy_detector_1.detectRunningProxy)(cfg.port);
|
|
360
|
+
log(`Proxy detection: ${JSON.stringify(proxyStatus)}`);
|
|
361
|
+
if (proxyStatus.running && proxyStatus.verified) {
|
|
362
|
+
// Healthy proxy found - join it
|
|
363
|
+
if (proxyStatus.pid) {
|
|
364
|
+
sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid) ?? undefined;
|
|
365
|
+
}
|
|
366
|
+
if (sessionId) {
|
|
367
|
+
console.log((0, ui_1.info)(`Joined existing CLIProxy on port ${cfg.port} (${proxyStatus.method})`));
|
|
384
368
|
}
|
|
385
369
|
else {
|
|
386
|
-
//
|
|
387
|
-
|
|
388
|
-
console.error((0, ui_1.warn)(`Port ${cfg.port} is blocked by ${portProcess.processName} (PID ${portProcess.pid})`));
|
|
389
|
-
console.error('');
|
|
390
|
-
console.error('To fix this, close the blocking application or run:');
|
|
391
|
-
console.error(` ${(0, platform_commands_1.getPortCheckCommand)(cfg.port)}`);
|
|
392
|
-
console.error('');
|
|
393
|
-
throw new Error(`Port ${cfg.port} is in use by another application`);
|
|
370
|
+
// Failed to register session, but proxy is running - continue anyway
|
|
371
|
+
log(`Failed to register session but proxy is healthy, continuing...`);
|
|
394
372
|
}
|
|
373
|
+
return; // Exit lock early, skip spawning
|
|
395
374
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
375
|
+
if (proxyStatus.running && !proxyStatus.verified) {
|
|
376
|
+
// Proxy detected but not ready yet (another process is starting it)
|
|
377
|
+
log(`Proxy starting up (detected via ${proxyStatus.method}), waiting...`);
|
|
378
|
+
const becameHealthy = await (0, proxy_detector_1.waitForProxyHealthy)(cfg.port, cfg.timeout);
|
|
379
|
+
if (becameHealthy) {
|
|
380
|
+
if (proxyStatus.pid) {
|
|
381
|
+
sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid) ?? undefined;
|
|
382
|
+
}
|
|
383
|
+
console.log((0, ui_1.info)(`Joined CLIProxy after startup wait`));
|
|
384
|
+
return; // Exit lock early
|
|
385
|
+
}
|
|
386
|
+
// Proxy didn't become healthy - kill and respawn
|
|
387
|
+
if (proxyStatus.pid) {
|
|
388
|
+
log(`Proxy PID ${proxyStatus.pid} not responding, killing...`);
|
|
389
|
+
(0, platform_commands_1.killProcessOnPort)(cfg.port, verbose);
|
|
390
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
if (proxyStatus.blocked && proxyStatus.blocker) {
|
|
394
|
+
// Port blocked by non-CLIProxy process
|
|
395
|
+
// Last resort: try HTTP health check (handles Windows PID-XXXXX case)
|
|
396
|
+
const isActuallyOurs = await (0, proxy_detector_1.waitForProxyHealthy)(cfg.port, 1000);
|
|
397
|
+
if (isActuallyOurs) {
|
|
398
|
+
sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.blocker.pid) ?? undefined;
|
|
399
|
+
console.log((0, ui_1.info)(`Reclaimed CLIProxy with unrecognized process name`));
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
// Truly blocked by another application
|
|
403
|
+
console.error('');
|
|
404
|
+
console.error((0, ui_1.warn)(`Port ${cfg.port} is blocked by ${proxyStatus.blocker.processName} (PID ${proxyStatus.blocker.pid})`));
|
|
405
|
+
console.error('');
|
|
406
|
+
console.error('To fix this, close the blocking application or run:');
|
|
407
|
+
console.error(` ${(0, platform_commands_1.getPortCheckCommand)(cfg.port)}`);
|
|
408
|
+
console.error('');
|
|
409
|
+
throw new Error(`Port ${cfg.port} is in use by another application`);
|
|
410
|
+
}
|
|
411
|
+
// 6b. Spawn CLIProxyAPI binary
|
|
399
412
|
const proxyArgs = ['--config', configPath];
|
|
400
413
|
log(`Spawning: ${binaryPath} ${proxyArgs.join(' ')}`);
|
|
401
414
|
proxy = (0, child_process_1.spawn)(binaryPath, proxyArgs, {
|
|
402
415
|
stdio: ['ignore', 'ignore', 'ignore'],
|
|
403
|
-
detached: true,
|
|
416
|
+
detached: true,
|
|
404
417
|
env: {
|
|
405
418
|
...process.env,
|
|
406
|
-
WRITABLE_PATH: (0, config_generator_1.getCliproxyWritablePath)(),
|
|
419
|
+
WRITABLE_PATH: (0, config_generator_1.getCliproxyWritablePath)(),
|
|
407
420
|
},
|
|
408
421
|
});
|
|
409
|
-
// Unref so parent process can exit independently
|
|
410
422
|
proxy.unref();
|
|
411
|
-
// Handle proxy errors (only fires if spawn itself fails)
|
|
412
423
|
proxy.on('error', (error) => {
|
|
413
424
|
console.error((0, ui_1.fail)(`CLIProxy spawn error: ${error.message}`));
|
|
414
425
|
});
|
|
@@ -442,7 +453,7 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
|
|
|
442
453
|
// Register this session with the new proxy
|
|
443
454
|
sessionId = (0, session_tracker_1.registerSession)(cfg.port, proxy.pid);
|
|
444
455
|
log(`Registered session ${sessionId} with new proxy (PID ${proxy.pid})`);
|
|
445
|
-
}
|
|
456
|
+
});
|
|
446
457
|
}
|
|
447
458
|
// 7. Execute Claude CLI with proxied environment
|
|
448
459
|
// Use remote or local env vars based on mode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliproxy-executor.js","sourceRoot":"","sources":["../../src/cliproxy/cliproxy-executor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cliproxy-executor.js","sourceRoot":"","sources":["../../src/cliproxy/cliproxy-executor.ts"],"names":[],"mappings":"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"}
|
package/dist/cliproxy/index.d.ts
CHANGED
|
@@ -19,4 +19,8 @@ export type { OpenAICompatProvider, OpenAICompatModel } from './openai-compat-ma
|
|
|
19
19
|
export { listOpenAICompatProviders, getOpenAICompatProvider, addOpenAICompatProvider, updateOpenAICompatProvider, removeOpenAICompatProvider, OPENROUTER_TEMPLATE, TOGETHER_TEMPLATE, } from './openai-compat-manager';
|
|
20
20
|
export type { ServiceStartResult } from './service-manager';
|
|
21
21
|
export { ensureCliproxyService, stopCliproxyService, getServiceStatus } from './service-manager';
|
|
22
|
+
export type { ProxyStatus, DetectionMethod } from './proxy-detector';
|
|
23
|
+
export { detectRunningProxy, waitForProxyHealthy, reclaimOrphanedProxy } from './proxy-detector';
|
|
24
|
+
export type { LockResult } from './startup-lock';
|
|
25
|
+
export { acquireStartupLock, withStartupLock } from './startup-lock';
|
|
22
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cliproxy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EACL,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGjG,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGxE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cliproxy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EACL,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGjG,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGxE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGjG,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGjG,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/cliproxy/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.showCurrentConfig = exports.configureProviderModel = exports.getCurrentModel = exports.hasUserSettings = exports.findModel = exports.getProviderCatalog = exports.supportsModelConfig = exports.MODEL_CATALOG = exports.clearConfigCache = exports.getEnvVarsFromConfig = exports.getModelMappingFromConfig = exports.loadBaseConfig = exports.CLIPROXY_CONFIG_VERSION = exports.CLIPROXY_DEFAULT_PORT = exports.deleteConfig = exports.configExists = exports.getBinDir = exports.getConfigPath = exports.getAuthDir = exports.getProviderAuthDir = exports.getCliproxyDir = exports.getModelMapping = exports.getProviderConfig = exports.ensureProviderSettings = exports.getProviderSettingsPath = exports.getEffectiveEnvVars = exports.getClaudeEnvVars = exports.configNeedsRegeneration = exports.regenerateConfig = exports.generateConfig = exports.getVersionPinPath = exports.isVersionPinned = exports.clearPinnedVersion = exports.savePinnedVersion = exports.getPinnedVersion = exports.fetchLatestCliproxyVersion = exports.installCliproxyVersion = exports.getInstalledCliproxyVersion = exports.getCLIProxyPath = exports.isCLIProxyInstalled = exports.ensureCLIProxyBinary = exports.BinaryManager = exports.CLIPROXY_VERSION = exports.getPlatformDescription = exports.isPlatformSupported = exports.getArchiveBinaryName = exports.getExecutableName = exports.getChecksumsUrl = exports.getDownloadUrl = exports.detectPlatform = void 0;
|
|
8
|
-
exports.getServiceStatus = exports.stopCliproxyService = exports.ensureCliproxyService = exports.TOGETHER_TEMPLATE = exports.OPENROUTER_TEMPLATE = exports.removeOpenAICompatProvider = exports.updateOpenAICompatProvider = exports.addOpenAICompatProvider = exports.getOpenAICompatProvider = exports.listOpenAICompatProviders = exports.isCliproxyRunning = exports.fetchCliproxyStats = exports.displayAuthStatus = exports.getProviderTokenDir = exports.getOAuthConfig = exports.ensureAuth = exports.triggerOAuth = exports.clearAuth = exports.getAllAuthStatus = exports.getAuthStatus = exports.isAuthenticated = exports.findAvailablePort = exports.isPortAvailable = exports.execClaudeWithCLIProxy = void 0;
|
|
8
|
+
exports.withStartupLock = exports.acquireStartupLock = exports.reclaimOrphanedProxy = exports.waitForProxyHealthy = exports.detectRunningProxy = exports.getServiceStatus = exports.stopCliproxyService = exports.ensureCliproxyService = exports.TOGETHER_TEMPLATE = exports.OPENROUTER_TEMPLATE = exports.removeOpenAICompatProvider = exports.updateOpenAICompatProvider = exports.addOpenAICompatProvider = exports.getOpenAICompatProvider = exports.listOpenAICompatProviders = exports.isCliproxyRunning = exports.fetchCliproxyStats = exports.displayAuthStatus = exports.getProviderTokenDir = exports.getOAuthConfig = exports.ensureAuth = exports.triggerOAuth = exports.clearAuth = exports.getAllAuthStatus = exports.getAuthStatus = exports.isAuthenticated = exports.findAvailablePort = exports.isPortAvailable = exports.execClaudeWithCLIProxy = void 0;
|
|
9
9
|
// Platform detection
|
|
10
10
|
var platform_detector_1 = require("./platform-detector");
|
|
11
11
|
Object.defineProperty(exports, "detectPlatform", { enumerable: true, get: function () { return platform_detector_1.detectPlatform; } });
|
|
@@ -96,4 +96,11 @@ var service_manager_1 = require("./service-manager");
|
|
|
96
96
|
Object.defineProperty(exports, "ensureCliproxyService", { enumerable: true, get: function () { return service_manager_1.ensureCliproxyService; } });
|
|
97
97
|
Object.defineProperty(exports, "stopCliproxyService", { enumerable: true, get: function () { return service_manager_1.stopCliproxyService; } });
|
|
98
98
|
Object.defineProperty(exports, "getServiceStatus", { enumerable: true, get: function () { return service_manager_1.getServiceStatus; } });
|
|
99
|
+
var proxy_detector_1 = require("./proxy-detector");
|
|
100
|
+
Object.defineProperty(exports, "detectRunningProxy", { enumerable: true, get: function () { return proxy_detector_1.detectRunningProxy; } });
|
|
101
|
+
Object.defineProperty(exports, "waitForProxyHealthy", { enumerable: true, get: function () { return proxy_detector_1.waitForProxyHealthy; } });
|
|
102
|
+
Object.defineProperty(exports, "reclaimOrphanedProxy", { enumerable: true, get: function () { return proxy_detector_1.reclaimOrphanedProxy; } });
|
|
103
|
+
var startup_lock_1 = require("./startup-lock");
|
|
104
|
+
Object.defineProperty(exports, "acquireStartupLock", { enumerable: true, get: function () { return startup_lock_1.acquireStartupLock; } });
|
|
105
|
+
Object.defineProperty(exports, "withStartupLock", { enumerable: true, get: function () { return startup_lock_1.withStartupLock; } });
|
|
99
106
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cliproxy/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAqBH,qBAAqB;AACrB,yDAS6B;AAR3B,mHAAA,cAAc,OAAA;AACd,mHAAA,cAAc,OAAA;AACd,oHAAA,eAAe,OAAA;AACf,sHAAA,iBAAiB,OAAA;AACjB,yHAAA,oBAAoB,OAAA;AACpB,wHAAA,mBAAmB,OAAA;AACnB,2HAAA,sBAAsB,OAAA;AACtB,qHAAA,gBAAgB,OAAA;AAGlB,oBAAoB;AACpB,mDAa0B;AAZxB,+GAAA,aAAa,OAAA;AACb,sHAAA,oBAAoB,OAAA;AACpB,qHAAA,mBAAmB,OAAA;AACnB,iHAAA,eAAe,OAAA;AACf,6HAAA,2BAA2B,OAAA;AAC3B,wHAAA,sBAAsB,OAAA;AACtB,4HAAA,0BAA0B,OAAA;AAC1B,kHAAA,gBAAgB,OAAA;AAChB,mHAAA,iBAAiB,OAAA;AACjB,oHAAA,kBAAkB,OAAA;AAClB,iHAAA,eAAe,OAAA;AACf,mHAAA,iBAAiB,OAAA;AAGnB,oBAAoB;AACpB,uDAmB4B;AAlB1B,kHAAA,cAAc,OAAA;AACd,oHAAA,gBAAgB,OAAA;AAChB,2HAAA,uBAAuB,OAAA;AACvB,oHAAA,gBAAgB,OAAA;AAChB,uHAAA,mBAAmB,OAAA;AACnB,2HAAA,uBAAuB,OAAA;AACvB,0HAAA,sBAAsB,OAAA;AACtB,qHAAA,iBAAiB,OAAA;AACjB,mHAAA,eAAe,OAAA;AACf,kHAAA,cAAc,OAAA;AACd,sHAAA,kBAAkB,OAAA;AAClB,8GAAA,UAAU,OAAA;AACV,iHAAA,aAAa,OAAA;AACb,6GAAA,SAAS,OAAA;AACT,gHAAA,YAAY,OAAA;AACZ,gHAAA,YAAY,OAAA;AACZ,yHAAA,qBAAqB,OAAA;AACrB,2HAAA,uBAAuB,OAAA;AAGzB,+DAA+D;AAC/D,2DAK8B;AAJ5B,oHAAA,cAAc,OAAA;AACd,+HAAA,yBAAyB,OAAA;AACzB,0HAAA,oBAAoB,OAAA;AACpB,sHAAA,gBAAgB,OAAA;AAKlB,iDAAoG;AAA3F,8GAAA,aAAa,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAAE,0GAAA,SAAS,OAAA;AAC1E,+CAKwB;AAJtB,+GAAA,eAAe,OAAA;AACf,+GAAA,eAAe,OAAA;AACf,sHAAA,sBAAsB,OAAA;AACtB,iHAAA,iBAAiB,OAAA;AAGnB,WAAW;AACX,yDAAiG;AAAxF,2HAAA,sBAAsB,OAAA;AAAE,oHAAA,eAAe,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAInE,+CAUwB;AATtB,+GAAA,eAAe,OAAA;AACf,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAChB,yGAAA,SAAS,OAAA;AACT,4GAAA,YAAY,OAAA;AACZ,0GAAA,UAAU,OAAA;AACV,8GAAA,cAAc,OAAA;AACd,mHAAA,mBAAmB,OAAA;AACnB,iHAAA,iBAAiB,OAAA;AAKnB,iDAAwE;AAA/D,mHAAA,kBAAkB,OAAA;AAAE,kHAAA,iBAAiB,OAAA;AAI9C,iEAQiC;AAP/B,kIAAA,yBAAyB,OAAA;AACzB,gIAAA,uBAAuB,OAAA;AACvB,gIAAA,uBAAuB,OAAA;AACvB,mIAAA,0BAA0B,OAAA;AAC1B,mIAAA,0BAA0B,OAAA;AAC1B,4HAAA,mBAAmB,OAAA;AACnB,0HAAA,iBAAiB,OAAA;AAKnB,qDAAiG;AAAxF,wHAAA,qBAAqB,OAAA;AAAE,sHAAA,mBAAmB,OAAA;AAAE,mHAAA,gBAAgB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cliproxy/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Proxy Detector
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for CLIProxy detection.
|
|
5
|
+
* Uses multiple detection methods with fallbacks:
|
|
6
|
+
* 1. HTTP health check (most reliable, ~1s timeout)
|
|
7
|
+
* 2. Session lock file (sessions.json)
|
|
8
|
+
* 3. Port process detection (fallback for orphaned proxies)
|
|
9
|
+
*
|
|
10
|
+
* Detection Order Rationale:
|
|
11
|
+
* - HTTP first: Fastest verification that proxy is responsive
|
|
12
|
+
* - Session lock second: Catches proxies that are starting up
|
|
13
|
+
* - Port process third: Handles orphaned proxies and Windows PID-XXXXX case
|
|
14
|
+
*
|
|
15
|
+
* Solves race conditions between cliproxy-executor.ts and service-manager.ts
|
|
16
|
+
*/
|
|
17
|
+
import { PortProcess } from '../utils/port-utils';
|
|
18
|
+
/** Detection method used to find the proxy */
|
|
19
|
+
export type DetectionMethod = 'http' | 'session-lock' | 'port-process' | 'http-retry';
|
|
20
|
+
/** Proxy detection status */
|
|
21
|
+
export interface ProxyStatus {
|
|
22
|
+
/** Whether a proxy is running on the port */
|
|
23
|
+
running: boolean;
|
|
24
|
+
/** Whether the proxy was verified healthy via HTTP */
|
|
25
|
+
verified: boolean;
|
|
26
|
+
/** How the proxy was detected */
|
|
27
|
+
method?: DetectionMethod;
|
|
28
|
+
/** PID of the running proxy (if known) */
|
|
29
|
+
pid?: number;
|
|
30
|
+
/** Whether port is blocked by non-CLIProxy process */
|
|
31
|
+
blocked?: boolean;
|
|
32
|
+
/** Process blocking the port (if blocked) */
|
|
33
|
+
blocker?: PortProcess;
|
|
34
|
+
/** Number of active sessions (if session-lock found) */
|
|
35
|
+
sessionCount?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Detect running CLIProxy using multiple methods with fallbacks.
|
|
39
|
+
*
|
|
40
|
+
* Detection order (most reliable first):
|
|
41
|
+
* 1. HTTP health check - fastest, verifies proxy is responsive
|
|
42
|
+
* 2. Session lock - checks sessions.json for tracked proxy
|
|
43
|
+
* 3. Port process - checks OS-level port ownership
|
|
44
|
+
*
|
|
45
|
+
* @param port Port to check (default: 8317)
|
|
46
|
+
* @param verbose Enable verbose logging (default: false)
|
|
47
|
+
* @returns ProxyStatus with detection details
|
|
48
|
+
*/
|
|
49
|
+
export declare function detectRunningProxy(port: number, verbose?: boolean): Promise<ProxyStatus>;
|
|
50
|
+
/**
|
|
51
|
+
* Wait for proxy to become ready (healthy via HTTP).
|
|
52
|
+
* Useful after detecting proxy via session-lock or port-process.
|
|
53
|
+
*
|
|
54
|
+
* @param port Port to check
|
|
55
|
+
* @param timeout Max wait time in ms (default: 5000)
|
|
56
|
+
* @param pollInterval Time between checks in ms (default: 100)
|
|
57
|
+
* @returns true if proxy became ready, false if timeout
|
|
58
|
+
*/
|
|
59
|
+
export declare function waitForProxyHealthy(port: number, timeout?: number, pollInterval?: number): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Attempt to reclaim an orphaned CLIProxy (running but not in session tracker).
|
|
62
|
+
* Registers a new session with the detected proxy.
|
|
63
|
+
*
|
|
64
|
+
* @param port Port where proxy is running
|
|
65
|
+
* @param pid PID of the proxy process
|
|
66
|
+
* @param verbose Enable verbose logging (default: false)
|
|
67
|
+
* @returns Session ID if reclaimed, null if failed
|
|
68
|
+
*/
|
|
69
|
+
export declare function reclaimOrphanedProxy(port: number, pid: number, verbose?: boolean): string | null;
|
|
70
|
+
//# sourceMappingURL=proxy-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-detector.d.ts","sourceRoot":"","sources":["../../src/cliproxy/proxy-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAqC,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErF,8CAA8C;AAC9C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,CAAC;AAEtF,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAQD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,WAAW,CAAC,CAqGtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAa,EACtB,YAAY,GAAE,MAAY,GACzB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAe,GACvB,MAAM,GAAG,IAAI,CAaf"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Proxy Detector
|
|
4
|
+
*
|
|
5
|
+
* Single source of truth for CLIProxy detection.
|
|
6
|
+
* Uses multiple detection methods with fallbacks:
|
|
7
|
+
* 1. HTTP health check (most reliable, ~1s timeout)
|
|
8
|
+
* 2. Session lock file (sessions.json)
|
|
9
|
+
* 3. Port process detection (fallback for orphaned proxies)
|
|
10
|
+
*
|
|
11
|
+
* Detection Order Rationale:
|
|
12
|
+
* - HTTP first: Fastest verification that proxy is responsive
|
|
13
|
+
* - Session lock second: Catches proxies that are starting up
|
|
14
|
+
* - Port process third: Handles orphaned proxies and Windows PID-XXXXX case
|
|
15
|
+
*
|
|
16
|
+
* Solves race conditions between cliproxy-executor.ts and service-manager.ts
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.reclaimOrphanedProxy = exports.waitForProxyHealthy = exports.detectRunningProxy = void 0;
|
|
20
|
+
const session_tracker_1 = require("./session-tracker");
|
|
21
|
+
const stats_fetcher_1 = require("./stats-fetcher");
|
|
22
|
+
const port_utils_1 = require("../utils/port-utils");
|
|
23
|
+
/** No-op logger for when verbose is disabled */
|
|
24
|
+
const noopLog = () => { };
|
|
25
|
+
/**
|
|
26
|
+
* Detect running CLIProxy using multiple methods with fallbacks.
|
|
27
|
+
*
|
|
28
|
+
* Detection order (most reliable first):
|
|
29
|
+
* 1. HTTP health check - fastest, verifies proxy is responsive
|
|
30
|
+
* 2. Session lock - checks sessions.json for tracked proxy
|
|
31
|
+
* 3. Port process - checks OS-level port ownership
|
|
32
|
+
*
|
|
33
|
+
* @param port Port to check (default: 8317)
|
|
34
|
+
* @param verbose Enable verbose logging (default: false)
|
|
35
|
+
* @returns ProxyStatus with detection details
|
|
36
|
+
*/
|
|
37
|
+
async function detectRunningProxy(port, verbose = false) {
|
|
38
|
+
const log = verbose ? (msg) => console.error(`[proxy-detector] ${msg}`) : noopLog;
|
|
39
|
+
log(`Detecting proxy on port ${port}...`);
|
|
40
|
+
// 1. First: HTTP health check (fastest, most reliable)
|
|
41
|
+
log('Trying HTTP health check...');
|
|
42
|
+
const healthy = await (0, stats_fetcher_1.isCliproxyRunning)(port);
|
|
43
|
+
if (healthy) {
|
|
44
|
+
// Proxy is running and responsive
|
|
45
|
+
// Try to get PID from session lock if available
|
|
46
|
+
const lock = (0, session_tracker_1.getExistingProxy)(port);
|
|
47
|
+
log(`HTTP check passed, proxy healthy (PID: ${lock?.pid ?? 'unknown'})`);
|
|
48
|
+
return {
|
|
49
|
+
running: true,
|
|
50
|
+
verified: true,
|
|
51
|
+
method: 'http',
|
|
52
|
+
pid: lock?.pid,
|
|
53
|
+
sessionCount: lock?.sessions?.length,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
log('HTTP check failed, proxy not responding');
|
|
57
|
+
// 2. Second: Check session lock file
|
|
58
|
+
log('Checking session lock file...');
|
|
59
|
+
const lock = (0, session_tracker_1.getExistingProxy)(port);
|
|
60
|
+
if (lock) {
|
|
61
|
+
// Session lock exists - proxy might be starting up
|
|
62
|
+
// The lock validates PID is running, so proxy exists but not ready
|
|
63
|
+
log(`Session lock found: PID ${lock.pid}, ${lock.sessions.length} sessions`);
|
|
64
|
+
return {
|
|
65
|
+
running: true,
|
|
66
|
+
verified: false,
|
|
67
|
+
method: 'session-lock',
|
|
68
|
+
pid: lock.pid,
|
|
69
|
+
sessionCount: lock.sessions.length,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
log('No session lock found');
|
|
73
|
+
// 3. Third: Check port process (fallback for orphaned/untracked proxy)
|
|
74
|
+
log('Checking port process...');
|
|
75
|
+
const portProcess = await (0, port_utils_1.getPortProcess)(port);
|
|
76
|
+
if (portProcess) {
|
|
77
|
+
log(`Port occupied by: ${portProcess.processName} (PID ${portProcess.pid})`);
|
|
78
|
+
// Check by process name first (works on Linux/macOS, may fail on Windows)
|
|
79
|
+
if ((0, port_utils_1.isCLIProxyProcess)(portProcess)) {
|
|
80
|
+
log('Process name matches CLIProxy, retrying HTTP...');
|
|
81
|
+
// Looks like CLIProxy by name - verify with HTTP
|
|
82
|
+
const retryHealth = await (0, stats_fetcher_1.isCliproxyRunning)(port);
|
|
83
|
+
if (retryHealth) {
|
|
84
|
+
log('HTTP retry passed, proxy is healthy');
|
|
85
|
+
return {
|
|
86
|
+
running: true,
|
|
87
|
+
verified: true,
|
|
88
|
+
method: 'http-retry',
|
|
89
|
+
pid: portProcess.pid,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// CLIProxy by name but not responding - might be starting up
|
|
93
|
+
log('HTTP retry failed, proxy starting up or unresponsive');
|
|
94
|
+
return {
|
|
95
|
+
running: true,
|
|
96
|
+
verified: false,
|
|
97
|
+
method: 'port-process',
|
|
98
|
+
pid: portProcess.pid,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// Process name doesn't match (or Windows returned PID-XXXXX)
|
|
102
|
+
// Do one more HTTP check to be sure it's not ours
|
|
103
|
+
log('Process name unrecognized, final HTTP check (Windows PID-XXXXX case)...');
|
|
104
|
+
const finalHealthCheck = await (0, stats_fetcher_1.isCliproxyRunning)(port);
|
|
105
|
+
if (finalHealthCheck) {
|
|
106
|
+
// It IS our proxy, just with unrecognized name (Windows case)
|
|
107
|
+
log('Final HTTP check passed, reclaiming proxy with unrecognized name');
|
|
108
|
+
return {
|
|
109
|
+
running: true,
|
|
110
|
+
verified: true,
|
|
111
|
+
method: 'http-retry',
|
|
112
|
+
pid: portProcess.pid,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Definitely not our proxy - port is blocked
|
|
116
|
+
log(`Port blocked by non-CLIProxy process: ${portProcess.processName}`);
|
|
117
|
+
return {
|
|
118
|
+
running: false,
|
|
119
|
+
verified: false,
|
|
120
|
+
blocked: true,
|
|
121
|
+
blocker: portProcess,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Port is free
|
|
125
|
+
log('Port is free, no proxy detected');
|
|
126
|
+
return {
|
|
127
|
+
running: false,
|
|
128
|
+
verified: false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
exports.detectRunningProxy = detectRunningProxy;
|
|
132
|
+
/**
|
|
133
|
+
* Wait for proxy to become ready (healthy via HTTP).
|
|
134
|
+
* Useful after detecting proxy via session-lock or port-process.
|
|
135
|
+
*
|
|
136
|
+
* @param port Port to check
|
|
137
|
+
* @param timeout Max wait time in ms (default: 5000)
|
|
138
|
+
* @param pollInterval Time between checks in ms (default: 100)
|
|
139
|
+
* @returns true if proxy became ready, false if timeout
|
|
140
|
+
*/
|
|
141
|
+
async function waitForProxyHealthy(port, timeout = 5000, pollInterval = 100) {
|
|
142
|
+
const start = Date.now();
|
|
143
|
+
while (Date.now() - start < timeout) {
|
|
144
|
+
const healthy = await (0, stats_fetcher_1.isCliproxyRunning)(port);
|
|
145
|
+
if (healthy) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
exports.waitForProxyHealthy = waitForProxyHealthy;
|
|
153
|
+
/**
|
|
154
|
+
* Attempt to reclaim an orphaned CLIProxy (running but not in session tracker).
|
|
155
|
+
* Registers a new session with the detected proxy.
|
|
156
|
+
*
|
|
157
|
+
* @param port Port where proxy is running
|
|
158
|
+
* @param pid PID of the proxy process
|
|
159
|
+
* @param verbose Enable verbose logging (default: false)
|
|
160
|
+
* @returns Session ID if reclaimed, null if failed
|
|
161
|
+
*/
|
|
162
|
+
function reclaimOrphanedProxy(port, pid, verbose = false) {
|
|
163
|
+
const log = verbose ? (msg) => console.error(`[proxy-detector] ${msg}`) : noopLog;
|
|
164
|
+
try {
|
|
165
|
+
log(`Reclaiming orphaned proxy: port=${port}, pid=${pid}`);
|
|
166
|
+
const sessionId = (0, session_tracker_1.registerSession)(port, pid);
|
|
167
|
+
log(`Successfully reclaimed proxy, session ID: ${sessionId}`);
|
|
168
|
+
return sessionId;
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
const error = err;
|
|
172
|
+
log(`Failed to reclaim proxy: ${error.message}`);
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.reclaimOrphanedProxy = reclaimOrphanedProxy;
|
|
177
|
+
//# sourceMappingURL=proxy-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-detector.js","sourceRoot":"","sources":["../../src/cliproxy/proxy-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-manager.d.ts","sourceRoot":"","sources":["../../src/cliproxy/service-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"service-manager.d.ts","sourceRoot":"","sources":["../../src/cliproxy/service-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiFH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,GAAE,MAA8B,EACpC,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAiJ7B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,MAA8B,GAAG,OAAO,CAAC;IACpF,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAKD"}
|
|
@@ -40,8 +40,10 @@ const child_process_1 = require("child_process");
|
|
|
40
40
|
const net = __importStar(require("net"));
|
|
41
41
|
const binary_manager_1 = require("./binary-manager");
|
|
42
42
|
const config_generator_1 = require("./config-generator");
|
|
43
|
-
const stats_fetcher_1 = require("./stats-fetcher");
|
|
44
43
|
const session_tracker_1 = require("./session-tracker");
|
|
44
|
+
const proxy_detector_1 = require("./proxy-detector");
|
|
45
|
+
const startup_lock_1 = require("./startup-lock");
|
|
46
|
+
const stats_fetcher_1 = require("./stats-fetcher");
|
|
45
47
|
/** Background proxy process reference */
|
|
46
48
|
let proxyProcess = null;
|
|
47
49
|
/** Cleanup registered flag */
|
|
@@ -108,9 +110,6 @@ async function ensureCliproxyService(port = config_generator_1.CLIPROXY_DEFAULT_
|
|
|
108
110
|
console.error(`[cliproxy-service] ${msg}`);
|
|
109
111
|
}
|
|
110
112
|
};
|
|
111
|
-
// Check if already running (from another process or previous start)
|
|
112
|
-
log(`Checking if CLIProxy is running on port ${port}...`);
|
|
113
|
-
const running = await (0, stats_fetcher_1.isCliproxyRunning)(port);
|
|
114
113
|
// Check if config needs update (even if running)
|
|
115
114
|
let configRegenerated = false;
|
|
116
115
|
if ((0, config_generator_1.configNeedsRegeneration)()) {
|
|
@@ -118,92 +117,120 @@ async function ensureCliproxyService(port = config_generator_1.CLIPROXY_DEFAULT_
|
|
|
118
117
|
(0, config_generator_1.regenerateConfig)(port);
|
|
119
118
|
configRegenerated = true;
|
|
120
119
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
// Use startup lock to coordinate with other CCS processes (ccs agy, ccs config, etc.)
|
|
121
|
+
return await (0, startup_lock_1.withStartupLock)(async () => {
|
|
122
|
+
// Use unified detection (HTTP check + session-lock + port-process)
|
|
123
|
+
log(`Checking if CLIProxy is running on port ${port}...`);
|
|
124
|
+
const proxyStatus = await (0, proxy_detector_1.detectRunningProxy)(port);
|
|
125
|
+
log(`Proxy detection: ${JSON.stringify(proxyStatus)}`);
|
|
126
|
+
if (proxyStatus.running && proxyStatus.verified) {
|
|
127
|
+
// Already running and healthy
|
|
128
|
+
log('CLIProxy already running');
|
|
129
|
+
if (configRegenerated) {
|
|
130
|
+
log('Config was updated - running instance will use new config on next restart');
|
|
131
|
+
}
|
|
132
|
+
return { started: true, alreadyRunning: true, port, configRegenerated };
|
|
125
133
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
134
|
+
if (proxyStatus.running && !proxyStatus.verified) {
|
|
135
|
+
// Proxy detected but not ready yet (another process is starting it)
|
|
136
|
+
log(`Proxy starting up (detected via ${proxyStatus.method}), waiting...`);
|
|
137
|
+
const becameHealthy = await (0, proxy_detector_1.waitForProxyHealthy)(port, 5000);
|
|
138
|
+
if (becameHealthy) {
|
|
139
|
+
log('Proxy became healthy');
|
|
140
|
+
return { started: true, alreadyRunning: true, port, configRegenerated };
|
|
141
|
+
}
|
|
142
|
+
// Proxy didn't become healthy - will try to start fresh below
|
|
143
|
+
log('Proxy detected but not responding, will start fresh');
|
|
144
|
+
}
|
|
145
|
+
if (proxyStatus.blocked) {
|
|
146
|
+
// Port blocked by non-CLIProxy process - try HTTP as last resort
|
|
147
|
+
const isActuallyOurs = await (0, proxy_detector_1.waitForProxyHealthy)(port, 1000);
|
|
148
|
+
if (isActuallyOurs) {
|
|
149
|
+
log('Reclaimed CLIProxy with unrecognized process name');
|
|
150
|
+
return { started: true, alreadyRunning: true, port, configRegenerated };
|
|
151
|
+
}
|
|
152
|
+
// Truly blocked
|
|
153
|
+
return {
|
|
154
|
+
started: false,
|
|
155
|
+
alreadyRunning: false,
|
|
156
|
+
port,
|
|
157
|
+
error: `Port ${port} is blocked by ${proxyStatus.blocker?.processName}`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Need to start new instance
|
|
161
|
+
log('CLIProxy not running, starting background instance...');
|
|
162
|
+
// 1. Ensure binary exists
|
|
163
|
+
let binaryPath;
|
|
164
|
+
try {
|
|
165
|
+
binaryPath = await (0, binary_manager_1.ensureCLIProxyBinary)(verbose);
|
|
166
|
+
log(`Binary ready: ${binaryPath}`);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const err = error;
|
|
170
|
+
return {
|
|
171
|
+
started: false,
|
|
172
|
+
alreadyRunning: false,
|
|
173
|
+
port,
|
|
174
|
+
error: `Failed to prepare binary: ${err.message}`,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// 2. Ensure/regenerate config if needed
|
|
178
|
+
let configPath;
|
|
179
|
+
if ((0, config_generator_1.configNeedsRegeneration)()) {
|
|
180
|
+
log('Config needs regeneration, updating...');
|
|
181
|
+
configPath = (0, config_generator_1.regenerateConfig)(port);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
configPath = (0, config_generator_1.generateConfig)('gemini', port);
|
|
185
|
+
}
|
|
186
|
+
log(`Config ready: ${configPath}`);
|
|
187
|
+
// 3. Spawn background process
|
|
188
|
+
const proxyArgs = ['--config', configPath];
|
|
189
|
+
log(`Spawning: ${binaryPath} ${proxyArgs.join(' ')}`);
|
|
190
|
+
proxyProcess = (0, child_process_1.spawn)(binaryPath, proxyArgs, {
|
|
191
|
+
stdio: ['ignore', verbose ? 'pipe' : 'ignore', verbose ? 'pipe' : 'ignore'],
|
|
192
|
+
detached: true,
|
|
193
|
+
env: {
|
|
194
|
+
...process.env,
|
|
195
|
+
WRITABLE_PATH: (0, config_generator_1.getCliproxyWritablePath)(),
|
|
196
|
+
},
|
|
171
197
|
});
|
|
172
|
-
|
|
173
|
-
|
|
198
|
+
if (verbose) {
|
|
199
|
+
proxyProcess.stdout?.on('data', (data) => {
|
|
200
|
+
process.stderr.write(`[cliproxy] ${data.toString()}`);
|
|
201
|
+
});
|
|
202
|
+
proxyProcess.stderr?.on('data', (data) => {
|
|
203
|
+
process.stderr.write(`[cliproxy-err] ${data.toString()}`);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
proxyProcess.unref();
|
|
207
|
+
proxyProcess.on('error', (error) => {
|
|
208
|
+
log(`Spawn error: ${error.message}`);
|
|
174
209
|
});
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
proxyProcess.kill('SIGTERM');
|
|
191
|
-
proxyProcess = null;
|
|
210
|
+
registerCleanup();
|
|
211
|
+
// 4. Wait for proxy to be ready
|
|
212
|
+
log(`Waiting for CLIProxy on port ${port}...`);
|
|
213
|
+
const ready = await waitForPort(port, 5000);
|
|
214
|
+
if (!ready) {
|
|
215
|
+
if (proxyProcess && !proxyProcess.killed) {
|
|
216
|
+
proxyProcess.kill('SIGTERM');
|
|
217
|
+
proxyProcess = null;
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
started: false,
|
|
221
|
+
alreadyRunning: false,
|
|
222
|
+
port,
|
|
223
|
+
error: `CLIProxy failed to start within 5s on port ${port}`,
|
|
224
|
+
};
|
|
192
225
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
port,
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
// 5. Register session so stopProxy() can find and kill this process
|
|
202
|
-
if (proxyProcess.pid) {
|
|
203
|
-
(0, session_tracker_1.registerSession)(port, proxyProcess.pid);
|
|
204
|
-
log(`Session registered for PID ${proxyProcess.pid}`);
|
|
205
|
-
}
|
|
206
|
-
return { started: true, alreadyRunning: false, port };
|
|
226
|
+
log(`CLIProxy service started on port ${port}`);
|
|
227
|
+
// 5. Register session
|
|
228
|
+
if (proxyProcess.pid) {
|
|
229
|
+
(0, session_tracker_1.registerSession)(port, proxyProcess.pid);
|
|
230
|
+
log(`Session registered for PID ${proxyProcess.pid}`);
|
|
231
|
+
}
|
|
232
|
+
return { started: true, alreadyRunning: false, port };
|
|
233
|
+
});
|
|
207
234
|
}
|
|
208
235
|
exports.ensureCliproxyService = ensureCliproxyService;
|
|
209
236
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-manager.js","sourceRoot":"","sources":["../../src/cliproxy/service-manager.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAoD;AACpD,yCAA2B;AAC3B,qDAAwD;AACxD,yDAM4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"service-manager.js","sourceRoot":"","sources":["../../src/cliproxy/service-manager.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAoD;AACpD,yCAA2B;AAC3B,qDAAwD;AACxD,yDAM4B;AAC5B,uDAAoD;AACpD,qDAA2E;AAC3E,iDAAiD;AACjD,mDAAoD;AAEpD,yCAAyC;AACzC,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,8BAA8B;AAC9B,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,UAAkB,IAAI,EACtB,eAAuB,GAAG;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;oBACpE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzB,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE;oBAC1B,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,CAAC,wBAAwB;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,iBAAiB;QAAE,OAAO;IAE9B,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEhC,iBAAiB,GAAG,IAAI,CAAC;AAC3B,CAAC;AAUD;;;;;;;;;GASG;AACI,KAAK,UAAU,qBAAqB,CACzC,OAAe,wCAAqB,EACpC,UAAmB,KAAK;IAExB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QAC1B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC;IAEF,iDAAiD;IACjD,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,IAAA,0CAAuB,GAAE,EAAE,CAAC;QAC9B,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACxC,IAAA,mCAAgB,EAAC,IAAI,CAAC,CAAC;QACvB,iBAAiB,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,sFAAsF;IACtF,OAAO,MAAM,IAAA,8BAAe,EAAC,KAAK,IAAI,EAAE;QACtC,mEAAmE;QACnE,GAAG,CAAC,2CAA2C,IAAI,KAAK,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,IAAA,mCAAkB,EAAC,IAAI,CAAC,CAAC;QACnD,GAAG,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAEvD,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YAChD,8BAA8B;YAC9B,GAAG,CAAC,0BAA0B,CAAC,CAAC;YAChC,IAAI,iBAAiB,EAAE,CAAC;gBACtB,GAAG,CAAC,2EAA2E,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC1E,CAAC;QAED,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YACjD,oEAAoE;YACpE,GAAG,CAAC,mCAAmC,WAAW,CAAC,MAAM,eAAe,CAAC,CAAC;YAC1E,MAAM,aAAa,GAAG,MAAM,IAAA,oCAAmB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,aAAa,EAAE,CAAC;gBAClB,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;YAC1E,CAAC;YACD,8DAA8D;YAC9D,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,iEAAiE;YACjE,MAAM,cAAc,GAAG,MAAM,IAAA,oCAAmB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,IAAI,cAAc,EAAE,CAAC;gBACnB,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;YAC1E,CAAC;YACD,gBAAgB;YAChB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,KAAK;gBACrB,IAAI;gBACJ,KAAK,EAAE,QAAQ,IAAI,kBAAkB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE;aACxE,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,GAAG,CAAC,uDAAuD,CAAC,CAAC;QAE7D,0BAA0B;QAC1B,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAA,qCAAoB,EAAC,OAAO,CAAC,CAAC;YACjD,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAc,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,KAAK;gBACrB,IAAI;gBACJ,KAAK,EAAE,6BAA6B,GAAG,CAAC,OAAO,EAAE;aAClD,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,IAAI,UAAkB,CAAC;QACvB,IAAI,IAAA,0CAAuB,GAAE,EAAE,CAAC;YAC9B,GAAG,CAAC,wCAAwC,CAAC,CAAC;YAC9C,UAAU,GAAG,IAAA,mCAAgB,EAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,IAAA,iCAAc,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;QAEnC,8BAA8B;QAC9B,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC3C,GAAG,CAAC,aAAa,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEtD,YAAY,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE,SAAS,EAAE;YAC1C,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3E,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,aAAa,EAAE,IAAA,0CAAuB,GAAE;aACzC;SACF,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,YAAY,CAAC,KAAK,EAAE,CAAC;QAErB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,GAAG,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,eAAe,EAAE,CAAC;QAElB,gCAAgC;QAChC,GAAG,CAAC,gCAAgC,IAAI,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACzC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,KAAK;gBACrB,IAAI;gBACJ,KAAK,EAAE,8CAA8C,IAAI,EAAE;aAC5D,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;QAEhD,sBAAsB;QACtB,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;YACrB,IAAA,iCAAe,EAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;YACxC,GAAG,CAAC,8BAA8B,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AApJD,sDAoJC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACzC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAPD,kDAOC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,OAAe,wCAAqB;IAKzE,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAiB,EAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,YAAY,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAElE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AATD,4CASC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup Lock for CLIProxy
|
|
3
|
+
*
|
|
4
|
+
* File-based mutex to prevent race conditions when multiple
|
|
5
|
+
* CCS processes try to start CLIProxy simultaneously.
|
|
6
|
+
*
|
|
7
|
+
* Uses a lock file with PID and timestamp to coordinate startup.
|
|
8
|
+
* Lock is automatically released after timeout or process exit.
|
|
9
|
+
*
|
|
10
|
+
* Lock Timeout Rationale (10 seconds):
|
|
11
|
+
* - CLIProxy startup typically takes 1-3s (binary spawn + port bind)
|
|
12
|
+
* - HTTP health check takes ~1s timeout
|
|
13
|
+
* - Session registration takes <100ms
|
|
14
|
+
* - Total expected lock hold time: 2-5s
|
|
15
|
+
* - 10s provides 2x safety margin for slow systems/disk I/O
|
|
16
|
+
* - Too short: legitimate startups fail on slow systems
|
|
17
|
+
* - Too long: dead processes block other terminals unnecessarily
|
|
18
|
+
*
|
|
19
|
+
* Why file-based instead of port-based:
|
|
20
|
+
* - Works before port is bound (prevents duplicate spawn attempts)
|
|
21
|
+
* - Survives process crashes (stale detection via PID check)
|
|
22
|
+
* - Cross-platform (Windows, macOS, Linux)
|
|
23
|
+
*/
|
|
24
|
+
/** Lock acquisition result */
|
|
25
|
+
export interface LockResult {
|
|
26
|
+
acquired: boolean;
|
|
27
|
+
lockPath: string;
|
|
28
|
+
release: () => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Acquire the startup lock with retries.
|
|
32
|
+
*
|
|
33
|
+
* @param options.retries Number of retry attempts (default: 20)
|
|
34
|
+
* @param options.retryInterval Ms between retries (default: 250)
|
|
35
|
+
* @param options.verbose Enable verbose logging (default: false)
|
|
36
|
+
* @returns LockResult
|
|
37
|
+
* @throws Error if lock cannot be acquired after all retries
|
|
38
|
+
*/
|
|
39
|
+
export declare function acquireStartupLock(options?: {
|
|
40
|
+
retries?: number;
|
|
41
|
+
retryInterval?: number;
|
|
42
|
+
verbose?: boolean;
|
|
43
|
+
}): Promise<LockResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Execute a function while holding the startup lock.
|
|
46
|
+
* Lock is automatically released after function completes or throws.
|
|
47
|
+
*
|
|
48
|
+
* @param fn Function to execute
|
|
49
|
+
* @param options Lock acquisition options (retries, retryInterval, verbose)
|
|
50
|
+
* @returns Result of fn
|
|
51
|
+
*/
|
|
52
|
+
export declare function withStartupLock<T>(fn: () => Promise<T>, options?: {
|
|
53
|
+
retries?: number;
|
|
54
|
+
retryInterval?: number;
|
|
55
|
+
verbose?: boolean;
|
|
56
|
+
}): Promise<T>;
|
|
57
|
+
//# sourceMappingURL=startup-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-lock.d.ts","sourceRoot":"","sources":["../../src/cliproxy/startup-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAaH,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkID;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwBtB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACxE,OAAO,CAAC,CAAC,CAAC,CAOZ"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Startup Lock for CLIProxy
|
|
4
|
+
*
|
|
5
|
+
* File-based mutex to prevent race conditions when multiple
|
|
6
|
+
* CCS processes try to start CLIProxy simultaneously.
|
|
7
|
+
*
|
|
8
|
+
* Uses a lock file with PID and timestamp to coordinate startup.
|
|
9
|
+
* Lock is automatically released after timeout or process exit.
|
|
10
|
+
*
|
|
11
|
+
* Lock Timeout Rationale (10 seconds):
|
|
12
|
+
* - CLIProxy startup typically takes 1-3s (binary spawn + port bind)
|
|
13
|
+
* - HTTP health check takes ~1s timeout
|
|
14
|
+
* - Session registration takes <100ms
|
|
15
|
+
* - Total expected lock hold time: 2-5s
|
|
16
|
+
* - 10s provides 2x safety margin for slow systems/disk I/O
|
|
17
|
+
* - Too short: legitimate startups fail on slow systems
|
|
18
|
+
* - Too long: dead processes block other terminals unnecessarily
|
|
19
|
+
*
|
|
20
|
+
* Why file-based instead of port-based:
|
|
21
|
+
* - Works before port is bound (prevents duplicate spawn attempts)
|
|
22
|
+
* - Survives process crashes (stale detection via PID check)
|
|
23
|
+
* - Cross-platform (Windows, macOS, Linux)
|
|
24
|
+
*/
|
|
25
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
28
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
29
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(o, k2, desc);
|
|
32
|
+
}) : (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
o[k2] = m[k];
|
|
35
|
+
}));
|
|
36
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
38
|
+
}) : function(o, v) {
|
|
39
|
+
o["default"] = v;
|
|
40
|
+
});
|
|
41
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.withStartupLock = exports.acquireStartupLock = void 0;
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const config_generator_1 = require("./config-generator");
|
|
53
|
+
/** Lock file name */
|
|
54
|
+
const LOCK_FILE = '.startup.lock';
|
|
55
|
+
/** Lock timeout in ms (stale lock auto-released) */
|
|
56
|
+
const LOCK_TIMEOUT_MS = 10000; // 10 seconds - see module docstring for rationale
|
|
57
|
+
/** No-op logger for when verbose is disabled */
|
|
58
|
+
const noopLog = () => { };
|
|
59
|
+
/**
|
|
60
|
+
* Get path to startup lock file
|
|
61
|
+
*/
|
|
62
|
+
function getLockPath() {
|
|
63
|
+
return path.join((0, config_generator_1.getCliproxyDir)(), LOCK_FILE);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if a lock is stale (old or from dead process)
|
|
67
|
+
*/
|
|
68
|
+
function isLockStale(lockData) {
|
|
69
|
+
// Check timestamp
|
|
70
|
+
if (Date.now() - lockData.timestamp > LOCK_TIMEOUT_MS) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
// Check if PID is still running
|
|
74
|
+
try {
|
|
75
|
+
process.kill(lockData.pid, 0);
|
|
76
|
+
return false; // Process exists
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return true; // Process dead
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Try to acquire the startup lock once.
|
|
84
|
+
*
|
|
85
|
+
* @param log Logger function for verbose output
|
|
86
|
+
* @returns LockResult with acquired=true if lock obtained
|
|
87
|
+
*/
|
|
88
|
+
function tryAcquireLockOnce(log) {
|
|
89
|
+
const lockPath = getLockPath();
|
|
90
|
+
const dir = path.dirname(lockPath);
|
|
91
|
+
// Ensure directory exists
|
|
92
|
+
if (!fs.existsSync(dir)) {
|
|
93
|
+
log(`Creating lock directory: ${dir}`);
|
|
94
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
95
|
+
}
|
|
96
|
+
// Check for existing lock
|
|
97
|
+
if (fs.existsSync(lockPath)) {
|
|
98
|
+
try {
|
|
99
|
+
const content = fs.readFileSync(lockPath, 'utf-8');
|
|
100
|
+
const lockData = JSON.parse(content);
|
|
101
|
+
if (!isLockStale(lockData)) {
|
|
102
|
+
// Lock is held by another active process
|
|
103
|
+
log(`Lock held by PID ${lockData.pid} (age: ${Date.now() - lockData.timestamp}ms)`);
|
|
104
|
+
return {
|
|
105
|
+
acquired: false,
|
|
106
|
+
lockPath,
|
|
107
|
+
release: () => { },
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// Lock is stale - remove and continue
|
|
111
|
+
log(`Removing stale lock from PID ${lockData.pid}`);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Invalid lock file - remove and continue
|
|
115
|
+
log('Removing invalid lock file');
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
fs.unlinkSync(lockPath);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Ignore removal errors
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Try to create lock atomically
|
|
125
|
+
const lockData = {
|
|
126
|
+
pid: process.pid,
|
|
127
|
+
timestamp: Date.now(),
|
|
128
|
+
hostname: require('os').hostname(),
|
|
129
|
+
};
|
|
130
|
+
try {
|
|
131
|
+
// Use 'wx' flag for exclusive creation (fails if exists)
|
|
132
|
+
fs.writeFileSync(lockPath, JSON.stringify(lockData), { flag: 'wx', mode: 0o600 });
|
|
133
|
+
log(`Lock acquired by PID ${process.pid}`);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
const error = err;
|
|
137
|
+
if (error.code === 'EEXIST') {
|
|
138
|
+
// Another process created lock between our check and write
|
|
139
|
+
log('Lock acquisition race - another process won');
|
|
140
|
+
return {
|
|
141
|
+
acquired: false,
|
|
142
|
+
lockPath,
|
|
143
|
+
release: () => { },
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
// Lock acquired - return release function
|
|
149
|
+
const release = () => {
|
|
150
|
+
try {
|
|
151
|
+
// Only release if we still own it
|
|
152
|
+
const content = fs.readFileSync(lockPath, 'utf-8');
|
|
153
|
+
const currentLock = JSON.parse(content);
|
|
154
|
+
if (currentLock.pid === process.pid) {
|
|
155
|
+
fs.unlinkSync(lockPath);
|
|
156
|
+
log('Lock released');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Ignore release errors
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
return {
|
|
164
|
+
acquired: true,
|
|
165
|
+
lockPath,
|
|
166
|
+
release,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Acquire the startup lock with retries.
|
|
171
|
+
*
|
|
172
|
+
* @param options.retries Number of retry attempts (default: 20)
|
|
173
|
+
* @param options.retryInterval Ms between retries (default: 250)
|
|
174
|
+
* @param options.verbose Enable verbose logging (default: false)
|
|
175
|
+
* @returns LockResult
|
|
176
|
+
* @throws Error if lock cannot be acquired after all retries
|
|
177
|
+
*/
|
|
178
|
+
async function acquireStartupLock(options) {
|
|
179
|
+
const retries = options?.retries ?? 20;
|
|
180
|
+
const retryInterval = options?.retryInterval ?? 250;
|
|
181
|
+
const log = options?.verbose ? (msg) => console.error(`[startup-lock] ${msg}`) : noopLog;
|
|
182
|
+
log(`Attempting to acquire startup lock (max ${retries} retries, ${retryInterval}ms interval)`);
|
|
183
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
184
|
+
const result = tryAcquireLockOnce(log);
|
|
185
|
+
if (result.acquired) {
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
if (attempt < retries) {
|
|
189
|
+
log(`Retry ${attempt + 1}/${retries} in ${retryInterval}ms...`);
|
|
190
|
+
await new Promise((r) => setTimeout(r, retryInterval));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
log(`Failed to acquire lock after ${retries} attempts`);
|
|
194
|
+
throw new Error(`Failed to acquire startup lock after ${retries} attempts. ` +
|
|
195
|
+
`Another CCS process may be starting CLIProxy.`);
|
|
196
|
+
}
|
|
197
|
+
exports.acquireStartupLock = acquireStartupLock;
|
|
198
|
+
/**
|
|
199
|
+
* Execute a function while holding the startup lock.
|
|
200
|
+
* Lock is automatically released after function completes or throws.
|
|
201
|
+
*
|
|
202
|
+
* @param fn Function to execute
|
|
203
|
+
* @param options Lock acquisition options (retries, retryInterval, verbose)
|
|
204
|
+
* @returns Result of fn
|
|
205
|
+
*/
|
|
206
|
+
async function withStartupLock(fn, options) {
|
|
207
|
+
const lock = await acquireStartupLock(options);
|
|
208
|
+
try {
|
|
209
|
+
return await fn();
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
lock.release();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
exports.withStartupLock = withStartupLock;
|
|
216
|
+
//# sourceMappingURL=startup-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-lock.js","sourceRoot":"","sources":["../../src/cliproxy/startup-lock.ts"],"names":[],"mappings":"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"}
|