Skip to content

Commit 0ccbd81

Browse files
committed
Fix extension screenshot gating in browser mode
1 parent e5a6c02 commit 0ccbd81

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

packages/cli/src/extensions/compat/host.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,9 @@ export class HarnessExtensionHost {
338338

339339
private async maybeInitialScreenshot(): Promise<ImageContent[] | undefined> {
340340
if (!this.initialScreenshot || !this.startedUp) return undefined;
341+
// Browser mode's only frame is the viewport; skip OS-display capture
342+
// rather than mix coordinate frames on the first turn.
343+
if (this.harness.getMode() === "browser") return undefined;
341344
if (await sessionHasPriorTurn(this.session)) return undefined;
342345
return this.initialScreenshot();
343346
}

packages/cli/test/extensions.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,29 @@ describe("HarnessExtensionHost", () => {
285285
expect(screenshotCalls).toBe(0);
286286
});
287287

288+
it("skips extension startup screenshot capture in browser mode", async () => {
289+
const extDir = mkdtempSync(join(tmpdir(), "cua-ext-"));
290+
writeFileSync(join(extDir, "startup-msg.ts"), SEND_ON_STARTUP_EXTENSION);
291+
fx = await buildTestHarness({ turns: [{ steps: [{ type: "text", text: "ok" }] }] });
292+
await fx.harness.setMode("browser");
293+
let screenshotCalls = 0;
294+
const created = new HarnessExtensionHost({
295+
harness: fx.harness,
296+
session: fx.session,
297+
cwd: fx.cwd,
298+
configuredPaths: [extDir],
299+
agentDir: mkdtempSync(join(tmpdir(), "cua-agentdir-")),
300+
initialScreenshot: async () => {
301+
screenshotCalls += 1;
302+
return [{ type: "image", data: "x", mimeType: "image/png" }];
303+
},
304+
});
305+
host = created;
306+
await created.load();
307+
await new Promise((resolve) => setTimeout(resolve, 20));
308+
expect(screenshotCalls).toBe(0);
309+
});
310+
288311
it("captures a failing extension sendUserMessage instead of an unhandled rejection", async () => {
289312
const extDir = mkdtempSync(join(tmpdir(), "cua-ext-"));
290313
writeFileSync(join(extDir, "startup-msg.ts"), SEND_ON_STARTUP_EXTENSION);

0 commit comments

Comments
 (0)