Fix/browser port (#1545)
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
CodeQL Advanced / Analyze (python) (push) Waiting to run
Pre-commit / pre-commit (push) Waiting to run
Test / Run Python Tests (push) Waiting to run

Co-authored-by: puzhen <1303385763@qq.com>
This commit is contained in:
Douglas Lai 2026-04-09 13:32:09 +01:00 committed by GitHub
parent dd48d2a15a
commit a3ee533d8b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -99,6 +99,7 @@ interface CdpBrowser {
addedAt: number;
}
let cdp_browser_pool: CdpBrowser[] = [];
let cdpLastAssignedPort = 9223; // tracks the highest port ever assigned, never decreases
let cdpHealthCheckTimer: ReturnType<typeof setInterval> | null = null;
const CDP_POOL_FILE = path.join(os.homedir(), '.eigent', 'cdp-browsers.json');
@ -121,8 +122,12 @@ function loadCdpPool(): void {
...b,
isExternal: true,
}));
cdpLastAssignedPort = cdp_browser_pool.reduce(
(max, b) => Math.max(max, b.port),
cdpLastAssignedPort
);
log.info(
`[CDP POOL] Loaded ${cdp_browser_pool.length} browser(s) from disk`
`[CDP POOL] Loaded ${cdp_browser_pool.length} browser(s) from disk, lastAssignedPort=${cdpLastAssignedPort}`
);
}
} catch (e) {
@ -759,18 +764,27 @@ function registerIpcHandlers() {
// Launch CDP browser with automatic port assignment
ipcMain.handle('launch-cdp-browser', async () => {
try {
// 1. Find available port (92249300) by checking no CDP browser is listening
// 1. Always increment port from the last assigned port
// Port 9223 is reserved for the login browser
let port: number | null = null;
for (let p = 9224; p < 9300; p++) {
if (
!cdp_browser_pool.some((b) => b.port === p) &&
!(await isCdpPortAlive(p))
) {
for (let p = cdpLastAssignedPort + 1; p < 9300; p++) {
if (!(await isCdpPortAlive(p))) {
port = p;
break;
}
}
// Wrap around if we hit the ceiling
if (port === null) {
for (let p = 9224; p <= cdpLastAssignedPort && p < 9300; p++) {
if (
!cdp_browser_pool.some((b) => b.port === p) &&
!(await isCdpPortAlive(p))
) {
port = p;
break;
}
}
}
if (port === null) {
return { success: false, error: 'No available port in 9224-9299' };
}
@ -905,6 +919,7 @@ function registerIpcHandlers() {
addedAt: Date.now(),
};
cdp_browser_pool.push(newBrowser);
cdpLastAssignedPort = port;
saveCdpPool();
notifyCdpPoolChanged();