mirror of
https://github.com/tiennm99/ccs.git
synced 2026-09-03 06:18:55 +00:00
hotfix: stop auto-enabling stale Chrome DevTools reuse
This commit is contained in:
@@ -49,18 +49,7 @@ export function resolveDefaultChromeUserDataDir(
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function resolveConfiguredBrowserProfileDir(profileDir?: string): string | undefined {
|
export function resolveConfiguredBrowserProfileDir(profileDir?: string): string | undefined {
|
||||||
if (profileDir?.trim()) {
|
return profileDir?.trim() ? expandPath(profileDir) : undefined;
|
||||||
return expandPath(profileDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const defaultUserDataDir = resolveDefaultChromeUserDataDir();
|
|
||||||
return fs.existsSync(path.join(defaultUserDataDir, DEVTOOLS_ACTIVE_PORT_FILE))
|
|
||||||
? defaultUserDataDir
|
|
||||||
: undefined;
|
|
||||||
} catch {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function resolveBrowserRuntimeEnv(
|
export async function resolveBrowserRuntimeEnv(
|
||||||
|
|||||||
@@ -151,6 +151,40 @@ exit 0
|
|||||||
await expect(waitForMockDevtoolsPort(delayedPortFile, 500)).resolves.toBe('43123');
|
await expect(waitForMockDevtoolsPort(delayedPortFile, 500)).resolves.toBe('43123');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('ignores stale default Chrome DevTools metadata unless browser reuse is explicitly configured', () => {
|
||||||
|
if (process.platform === 'win32') return;
|
||||||
|
|
||||||
|
const defaultChromeDir = path.join(
|
||||||
|
tmpHome,
|
||||||
|
'Library',
|
||||||
|
'Application Support',
|
||||||
|
'Google',
|
||||||
|
'Chrome'
|
||||||
|
);
|
||||||
|
fs.mkdirSync(defaultChromeDir, { recursive: true });
|
||||||
|
fs.writeFileSync(
|
||||||
|
path.join(defaultChromeDir, 'DevToolsActivePort'),
|
||||||
|
'9222\n/devtools/browser/stale-default',
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
|
||||||
|
const result = runCcs(['default', 'smoke'], {
|
||||||
|
...baseEnv,
|
||||||
|
HOME: tmpHome,
|
||||||
|
USERPROFILE: tmpHome,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.status).toBe(0);
|
||||||
|
expect(result.stderr).not.toContain('Chrome DevTools endpoint is unreachable');
|
||||||
|
|
||||||
|
const launchedArgs = fs.readFileSync(claudeArgsLogPath, 'utf8');
|
||||||
|
expect(launchedArgs).not.toContain(BROWSER_PROMPT_SNIPPET);
|
||||||
|
|
||||||
|
const launchedEnv = fs.readFileSync(claudeEnvLogPath, 'utf8');
|
||||||
|
expect(launchedEnv).not.toContain('9222');
|
||||||
|
expect(launchedEnv).not.toContain('devtools/browser/stale-default');
|
||||||
|
});
|
||||||
|
|
||||||
it('passes browser runtime env through default Claude launches when reuse is configured', async () => {
|
it('passes browser runtime env through default Claude launches when reuse is configured', async () => {
|
||||||
if (process.platform === 'win32') return;
|
if (process.platform === 'win32') return;
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,15 @@ import * as fs from 'fs';
|
|||||||
import * as os from 'os';
|
import * as os from 'os';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import {
|
import {
|
||||||
|
resolveConfiguredBrowserProfileDir,
|
||||||
resolveBrowserRuntimeEnv,
|
resolveBrowserRuntimeEnv,
|
||||||
resolveDefaultChromeUserDataDir,
|
resolveDefaultChromeUserDataDir,
|
||||||
} from '../../../../src/utils/browser/chrome-reuse';
|
} from '../../../../src/utils/browser/chrome-reuse';
|
||||||
|
|
||||||
describe('chrome reuse resolver', () => {
|
describe('chrome reuse resolver', () => {
|
||||||
|
const originalHome = process.env.HOME;
|
||||||
const originalLocalAppData = process.env.LOCALAPPDATA;
|
const originalLocalAppData = process.env.LOCALAPPDATA;
|
||||||
|
const originalUserProfile = process.env.USERPROFILE;
|
||||||
let tempDirs: string[] = [];
|
let tempDirs: string[] = [];
|
||||||
let servers: Array<{ stop: () => void }> = [];
|
let servers: Array<{ stop: () => void }> = [];
|
||||||
|
|
||||||
@@ -96,6 +99,18 @@ describe('chrome reuse resolver', () => {
|
|||||||
} else {
|
} else {
|
||||||
process.env.LOCALAPPDATA = originalLocalAppData;
|
process.env.LOCALAPPDATA = originalLocalAppData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (originalHome === undefined) {
|
||||||
|
delete process.env.HOME;
|
||||||
|
} else {
|
||||||
|
process.env.HOME = originalHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (originalUserProfile === undefined) {
|
||||||
|
delete process.env.USERPROFILE;
|
||||||
|
} else {
|
||||||
|
process.env.USERPROFILE = originalUserProfile;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('uses explicit profile-dir before the default path and resolves the websocket target', async () => {
|
it('uses explicit profile-dir before the default path and resolves the websocket target', async () => {
|
||||||
@@ -122,6 +137,23 @@ describe('chrome reuse resolver', () => {
|
|||||||
expect(fs.existsSync(path.join(defaultProfileDir, 'DevToolsActivePort'))).toBe(false);
|
expect(fs.existsSync(path.join(defaultProfileDir, 'DevToolsActivePort'))).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('only enables browser reuse for an explicitly configured profile directory', () => {
|
||||||
|
const isolatedHome = createTempDir('ccs-chrome-config-home-');
|
||||||
|
const defaultProfileDir = path.join(
|
||||||
|
isolatedHome,
|
||||||
|
'Library',
|
||||||
|
'Application Support',
|
||||||
|
'Google',
|
||||||
|
'Chrome'
|
||||||
|
);
|
||||||
|
writeDevToolsActivePort(defaultProfileDir, '9222\n/devtools/browser/stale-default');
|
||||||
|
process.env.HOME = isolatedHome;
|
||||||
|
process.env.USERPROFILE = isolatedHome;
|
||||||
|
|
||||||
|
expect(resolveConfiguredBrowserProfileDir()).toBeUndefined();
|
||||||
|
expect(resolveConfiguredBrowserProfileDir(defaultProfileDir)).toBe(defaultProfileDir);
|
||||||
|
});
|
||||||
|
|
||||||
it('uses an explicit devtools port override when metadata is missing', async () => {
|
it('uses an explicit devtools port override when metadata is missing', async () => {
|
||||||
const profileDir = createTempDir('ccs-chrome-explicit-port-');
|
const profileDir = createTempDir('ccs-chrome-explicit-port-');
|
||||||
const server = await startDevToolsServer({
|
const server = await startDevToolsServer({
|
||||||
|
|||||||
Reference in New Issue
Block a user