diff --git a/packages/dsh-plugin-browserskill/src/tools.ts b/packages/dsh-plugin-browserskill/src/tools.ts index 7ca2059..416517b 100644 --- a/packages/dsh-plugin-browserskill/src/tools.ts +++ b/packages/dsh-plugin-browserskill/src/tools.ts @@ -81,7 +81,9 @@ function cmdline(deps: ToolDeps, args: string[]): string { /** Shared completed-card presenter: terminal card with the rendered text. */ function presentTerminalResult(_args: never, result: ToolResult) { - const block = result.content.length === 1 ? result.content[0] : undefined; + // Multi-block results (e.g. screenshot text + image) still project their + // text block onto the terminal card. + const block = result.content.find((b) => b.type === "text"); if (block === undefined || block.type !== "text") return undefined; if (result.isError) return undefined; return { card: "terminal" as const, output: block.text, exitCode: 0 }; diff --git a/packages/dsh-plugin-browserskill/tests/tools.test.ts b/packages/dsh-plugin-browserskill/tests/tools.test.ts index e234f68..9b6aa60 100644 --- a/packages/dsh-plugin-browserskill/tests/tools.test.ts +++ b/packages/dsh-plugin-browserskill/tests/tools.test.ts @@ -524,4 +524,17 @@ describe("presentation", () => { } as never) as { card: string; output: string; exitCode: number }; expect(view).toMatchObject({ card: "terminal", output: "clicked", exitCode: 0 }); }); + + it("projects the text block of multi-block results (screenshot text + image)", () => { + const { tools } = setup({}); + const screenshot = tools.get("browser_screenshot"); + const view = screenshot?.presentResult?.({}, { + content: [ + { type: "text", text: "[session s1] screenshot of tab 7" }, + { type: "image", attachment: { attachmentId: "a1" } }, + ], + isError: false, + } as never) as { card: string; output: string }; + expect(view).toMatchObject({ card: "terminal", output: "[session s1] screenshot of tab 7" }); + }); });