diff --git a/.changeset/gentle-local-profiles.md b/.changeset/gentle-local-profiles.md new file mode 100644 index 000000000..19c1e3f40 --- /dev/null +++ b/.changeset/gentle-local-profiles.md @@ -0,0 +1,5 @@ +--- +"@browserbasehq/stagehand": patch +--- + +Pass local browser profile directories as Chrome flags instead of chrome-launcher options. diff --git a/packages/core/lib/v3/launch/local.ts b/packages/core/lib/v3/launch/local.ts index 7e23bc87a..d61f93e53 100644 --- a/packages/core/lib/v3/launch/local.ts +++ b/packages/core/lib/v3/launch/local.ts @@ -51,6 +51,7 @@ export async function launchLocalChrome( opts.ignoreHTTPSErrors ? "--ignore-certificate-errors" : undefined, opts.proxy?.server ? `--proxy-server=${opts.proxy.server}` : undefined, opts.proxy?.bypass ? `--proxy-bypass-list=${opts.proxy.bypass}` : undefined, + opts.userDataDir ? `--user-data-dir=${opts.userDataDir}` : undefined, ...(opts.args ?? []), ].filter((f): f is string => typeof f === "string"); @@ -76,7 +77,6 @@ export async function launchLocalChrome( chromePath: opts.executablePath, chromeFlags, port: opts.port, - userDataDir: opts.userDataDir, handleSIGINT: opts.handleSIGINT, ignoreDefaultFlags, connectionPollInterval, diff --git a/packages/core/tests/unit/launch-local-ignore-default-args.test.ts b/packages/core/tests/unit/launch-local-ignore-default-args.test.ts index d87d5dc3f..98f08ddec 100644 --- a/packages/core/tests/unit/launch-local-ignore-default-args.test.ts +++ b/packages/core/tests/unit/launch-local-ignore-default-args.test.ts @@ -71,9 +71,11 @@ afterEach(() => { vi.unstubAllGlobals(); }); -async function getLaunchArgs( - opts: Record, -): Promise<{ chromeFlags: string[]; ignoreDefaultFlags: boolean }> { +async function getLaunchArgs(opts: Record): Promise<{ + chromeFlags: string[]; + ignoreDefaultFlags: boolean; + userDataDir?: string; +}> { const { launchLocalChrome } = await import("../../lib/v3/launch/local.js"); await launchLocalChrome(opts); return launchMock.mock.calls[0][0]; @@ -214,4 +216,15 @@ describe("launchLocalChrome ignoreDefaultArgs", () => { expect(args.chromeFlags).toContain("--renderer-process-limit=6"); expect(args.chromeFlags).toContain("--remote-allow-origins=*"); }); + + it("passes userDataDir as a Chrome flag instead of a chrome-launcher option", async () => { + const args = await getLaunchArgs({ + userDataDir: "/home/user/project/chrome-profile", + }); + + expect(args.userDataDir).toBeUndefined(); + expect(args.chromeFlags).toContain( + "--user-data-dir=/home/user/project/chrome-profile", + ); + }); });