From 38cf90f6db8caaceaf9c5b1f3c1f0dd211d37bbb Mon Sep 17 00:00:00 2001 From: Marc Date: Fri, 16 Jan 2026 15:50:02 +0100 Subject: [PATCH] fix: rename format parameter to avoid JSON Schema keyword conflict - Rename `format` to `snapshotFormat` in browser-tool schema and implementation - Rename `format` to `outputFormat` in canvas-tool schema and implementation - The parameter name `format` conflicts with JSON Schema keyword, causing Google Cloud Code Assist to reject the schema as invalid Co-Authored-By: Claude Opus 4.5 --- ...laude-style-aliases-schemas-without-dropping-a.test.ts | 8 ++++---- src/agents/tools/browser-tool.schema.ts | 2 +- src/agents/tools/browser-tool.ts | 4 ++-- src/agents/tools/canvas-tool.ts | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/agents/pi-tools.create-clawdbot-coding-tools.adds-claude-style-aliases-schemas-without-dropping-a.test.ts b/src/agents/pi-tools.create-clawdbot-coding-tools.adds-claude-style-aliases-schemas-without-dropping-a.test.ts index 3d593ba0a..d2791a0af 100644 --- a/src/agents/pi-tools.create-clawdbot-coding-tools.adds-claude-style-aliases-schemas-without-dropping-a.test.ts +++ b/src/agents/pi-tools.create-clawdbot-coding-tools.adds-claude-style-aliases-schemas-without-dropping-a.test.ts @@ -129,16 +129,16 @@ describe("createClawdbotCodingTools", () => { expect(Array.isArray(action?.enum)).toBe(true); expect(action?.enum).toContain("act"); - const format = parameters.properties?.format as + const snapshotFormat = parameters.properties?.snapshotFormat as | { type?: unknown; enum?: unknown[]; anyOf?: unknown[]; } | undefined; - expect(format?.type).toBe("string"); - expect(format?.anyOf).toBeUndefined(); - expect(format?.enum).toEqual(["aria", "ai"]); + expect(snapshotFormat?.type).toBe("string"); + expect(snapshotFormat?.anyOf).toBeUndefined(); + expect(snapshotFormat?.enum).toEqual(["aria", "ai"]); }); it("inlines local $ref before removing unsupported keywords", () => { const cleaned = __testing.cleanToolSchemaForGemini({ diff --git a/src/agents/tools/browser-tool.schema.ts b/src/agents/tools/browser-tool.schema.ts index 5acad1688..a04b7f8d0 100644 --- a/src/agents/tools/browser-tool.schema.ts +++ b/src/agents/tools/browser-tool.schema.ts @@ -91,7 +91,7 @@ export const BrowserToolSchema = Type.Object({ limit: Type.Optional(Type.Number()), maxChars: Type.Optional(Type.Number()), mode: optionalStringEnum(BROWSER_SNAPSHOT_MODES), - format: optionalStringEnum(BROWSER_SNAPSHOT_FORMATS), + snapshotFormat: optionalStringEnum(BROWSER_SNAPSHOT_FORMATS), refs: optionalStringEnum(BROWSER_SNAPSHOT_REFS), interactive: Type.Optional(Type.Boolean()), compact: Type.Optional(Type.Boolean()), diff --git a/src/agents/tools/browser-tool.ts b/src/agents/tools/browser-tool.ts index 9ed5ddd3b..37e71db7d 100644 --- a/src/agents/tools/browser-tool.ts +++ b/src/agents/tools/browser-tool.ts @@ -191,8 +191,8 @@ export function createBrowserTool(opts?: { } case "snapshot": { const format = - params.format === "ai" || params.format === "aria" - ? (params.format as "ai" | "aria") + params.snapshotFormat === "ai" || params.snapshotFormat === "aria" + ? (params.snapshotFormat as "ai" | "aria") : "ai"; const mode = params.mode === "efficient" ? "efficient" : undefined; const labels = typeof params.labels === "boolean" ? params.labels : undefined; diff --git a/src/agents/tools/canvas-tool.ts b/src/agents/tools/canvas-tool.ts index 247d69fb0..092d00ab4 100644 --- a/src/agents/tools/canvas-tool.ts +++ b/src/agents/tools/canvas-tool.ts @@ -40,7 +40,7 @@ const CanvasToolSchema = Type.Object({ // eval javaScript: Type.Optional(Type.String()), // snapshot - format: optionalStringEnum(CANVAS_SNAPSHOT_FORMATS), + outputFormat: optionalStringEnum(CANVAS_SNAPSHOT_FORMATS), maxWidth: Type.Optional(Type.Number()), quality: Type.Optional(Type.Number()), delayMs: Type.Optional(Type.Number()), @@ -127,7 +127,7 @@ export function createCanvasTool(): AnyAgentTool { return jsonResult({ ok: true }); } case "snapshot": { - const formatRaw = typeof params.format === "string" ? params.format.toLowerCase() : "png"; + const formatRaw = typeof params.outputFormat === "string" ? params.outputFormat.toLowerCase() : "png"; const format = formatRaw === "jpg" || formatRaw === "jpeg" ? "jpeg" : "png"; const maxWidth = typeof params.maxWidth === "number" && Number.isFinite(params.maxWidth)