docs(gemini-web): clarify CDP session reuse
This commit is contained in:
parent
93e54a7b86
commit
f407c950c3
|
|
@ -271,6 +271,9 @@ export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stabl
|
||||||
return dirs;
|
return dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Best-effort reuse of an already-running local CDP session discovered from
|
||||||
|
// known Chrome user-data dirs. This is distinct from Chrome DevTools MCP's
|
||||||
|
// prompt-based --autoConnect flow.
|
||||||
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
||||||
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
||||||
const timeoutMs = options.timeoutMs ?? 3_000;
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
||||||
|
|
|
||||||
|
|
@ -139,6 +139,10 @@ ${BUN_X} {baseDir}/scripts/main.ts "Hello" --json
|
||||||
|
|
||||||
First run opens browser for Google auth. Cookies cached automatically.
|
First run opens browser for Google auth. Cookies cached automatically.
|
||||||
|
|
||||||
|
When no explicit profile dir is set, cookie refresh may reuse an already-running local Chrome/Chromium debugging session tied to a standard user-data dir.
|
||||||
|
Set `--profile-dir` or `GEMINI_WEB_CHROME_PROFILE_DIR` to force a dedicated profile and skip existing-session reuse.
|
||||||
|
This is a best-effort CDP session reuse path, not the Chrome DevTools MCP prompt-based `--autoConnect` flow described in Chrome's official docs.
|
||||||
|
|
||||||
Supported browsers (auto-detected): Chrome, Chrome Canary/Beta, Chromium, Edge.
|
Supported browsers (auto-detected): Chrome, Chrome Canary/Beta, Chromium, Edge.
|
||||||
|
|
||||||
Force refresh: `--login` flag. Override browser: `GEMINI_WEB_CHROME_PATH` env var.
|
Force refresh: `--login` flag. Override browser: `GEMINI_WEB_CHROME_PATH` env var.
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ async function fetch_cookies_from_existing_chrome(
|
||||||
const discovered = await discoverRunningChromeDebugPort();
|
const discovered = await discoverRunningChromeDebugPort();
|
||||||
if (discovered === null) return null;
|
if (discovered === null) return null;
|
||||||
|
|
||||||
if (verbose) logger.info(`Found existing Chrome on port ${discovered.port}. Connecting via WebSocket...`);
|
if (verbose) logger.info(`Found reusable Chrome debugging session on port ${discovered.port}. Connecting via WebSocket...`);
|
||||||
|
|
||||||
let cdp: CdpConnection | null = null;
|
let cdp: CdpConnection | null = null;
|
||||||
let targetId: string | null = null;
|
let targetId: string | null = null;
|
||||||
|
|
@ -167,7 +167,7 @@ async function fetch_cookies_from_existing_chrome(
|
||||||
if (verbose) logger.debug(`Existing Chrome did not yield valid cookies. Last keys: ${Object.keys(last).join(', ')}`);
|
if (verbose) logger.debug(`Existing Chrome did not yield valid cookies. Last keys: ${Object.keys(last).join(', ')}`);
|
||||||
return null;
|
return null;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (verbose) logger.debug(`Failed to connect to existing Chrome: ${e instanceof Error ? e.message : String(e)}`);
|
if (verbose) logger.debug(`Failed to connect to existing Chrome debugging session: ${e instanceof Error ? e.message : String(e)}`);
|
||||||
return null;
|
return null;
|
||||||
} finally {
|
} finally {
|
||||||
if (cdp) {
|
if (cdp) {
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,12 @@ Options:
|
||||||
-h, --help Show help
|
-h, --help Show help
|
||||||
|
|
||||||
Env overrides:
|
Env overrides:
|
||||||
GEMINI_WEB_DATA_DIR, GEMINI_WEB_COOKIE_PATH, GEMINI_WEB_CHROME_PROFILE_DIR, GEMINI_WEB_CHROME_PATH`);
|
GEMINI_WEB_DATA_DIR, GEMINI_WEB_COOKIE_PATH, GEMINI_WEB_CHROME_PROFILE_DIR, GEMINI_WEB_CHROME_PATH
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
By default cookie refresh may reuse an already-running local Chrome/Chromium debugging session.
|
||||||
|
Set --profile-dir or GEMINI_WEB_CHROME_PROFILE_DIR to force a dedicated profile and skip existing-session reuse.
|
||||||
|
This reuse path is separate from Chrome DevTools MCP's prompt-based --autoConnect flow.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseArgs(argv: string[]): CliArgs {
|
function parseArgs(argv: string[]): CliArgs {
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,9 @@ export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stabl
|
||||||
return dirs;
|
return dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Best-effort reuse of an already-running local CDP session discovered from
|
||||||
|
// known Chrome user-data dirs. This is distinct from Chrome DevTools MCP's
|
||||||
|
// prompt-based --autoConnect flow.
|
||||||
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
||||||
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
||||||
const timeoutMs = options.timeoutMs ?? 3_000;
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,9 @@ export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stabl
|
||||||
return dirs;
|
return dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Best-effort reuse of an already-running local CDP session discovered from
|
||||||
|
// known Chrome user-data dirs. This is distinct from Chrome DevTools MCP's
|
||||||
|
// prompt-based --autoConnect flow.
|
||||||
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
||||||
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
||||||
const timeoutMs = options.timeoutMs ?? 3_000;
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,9 @@ export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stabl
|
||||||
return dirs;
|
return dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Best-effort reuse of an already-running local CDP session discovered from
|
||||||
|
// known Chrome user-data dirs. This is distinct from Chrome DevTools MCP's
|
||||||
|
// prompt-based --autoConnect flow.
|
||||||
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
||||||
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
||||||
const timeoutMs = options.timeoutMs ?? 3_000;
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,9 @@ export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stabl
|
||||||
return dirs;
|
return dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Best-effort reuse of an already-running local CDP session discovered from
|
||||||
|
// known Chrome user-data dirs. This is distinct from Chrome DevTools MCP's
|
||||||
|
// prompt-based --autoConnect flow.
|
||||||
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
||||||
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
||||||
const timeoutMs = options.timeoutMs ?? 3_000;
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,9 @@ export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stabl
|
||||||
return dirs;
|
return dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Best-effort reuse of an already-running local CDP session discovered from
|
||||||
|
// known Chrome user-data dirs. This is distinct from Chrome DevTools MCP's
|
||||||
|
// prompt-based --autoConnect flow.
|
||||||
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
||||||
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
||||||
const timeoutMs = options.timeoutMs ?? 3_000;
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,9 @@ export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stabl
|
||||||
return dirs;
|
return dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Best-effort reuse of an already-running local CDP session discovered from
|
||||||
|
// known Chrome user-data dirs. This is distinct from Chrome DevTools MCP's
|
||||||
|
// prompt-based --autoConnect flow.
|
||||||
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChrome | null> {
|
||||||
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
const channels = options.channels ?? ["stable", "beta", "canary", "dev"];
|
||||||
const timeoutMs = options.timeoutMs ?? 3_000;
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue