From 423eef462422e9ae8c6b98c05ea3daacbf794055 Mon Sep 17 00:00:00 2001 From: Keith the Silly Goose Date: Sat, 10 Jan 2026 07:42:32 +1300 Subject: [PATCH] fix: simplify tool schemas for Gemini compatibility Replaces Type.Integer with Type.Number and simplifies the sessions_send tool schema to avoid anyOf/oneOf unions that cause 400 errors with Google Cloud Code Assist API. --- src/agents/tools/sessions-history-tool.ts | 2 +- src/agents/tools/sessions-list-tool.ts | 6 +++--- src/agents/tools/sessions-send-tool.ts | 26 ++++++----------------- src/agents/tools/sessions-spawn-tool.ts | 4 ++-- 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/agents/tools/sessions-history-tool.ts b/src/agents/tools/sessions-history-tool.ts index 0cc378f7b..5288fc839 100644 --- a/src/agents/tools/sessions-history-tool.ts +++ b/src/agents/tools/sessions-history-tool.ts @@ -18,7 +18,7 @@ import { const SessionsHistoryToolSchema = Type.Object({ sessionKey: Type.String(), - limit: Type.Optional(Type.Integer({ minimum: 1 })), + limit: Type.Optional(Type.Number({ minimum: 1 })), includeTools: Type.Optional(Type.Boolean()), }); diff --git a/src/agents/tools/sessions-list-tool.ts b/src/agents/tools/sessions-list-tool.ts index 87108fad7..68e14506c 100644 --- a/src/agents/tools/sessions-list-tool.ts +++ b/src/agents/tools/sessions-list-tool.ts @@ -46,9 +46,9 @@ type SessionListRow = { const SessionsListToolSchema = Type.Object({ kinds: Type.Optional(Type.Array(Type.String())), - limit: Type.Optional(Type.Integer({ minimum: 1 })), - activeMinutes: Type.Optional(Type.Integer({ minimum: 1 })), - messageLimit: Type.Optional(Type.Integer({ minimum: 0 })), + limit: Type.Optional(Type.Number({ minimum: 1 })), + activeMinutes: Type.Optional(Type.Number({ minimum: 1 })), + messageLimit: Type.Optional(Type.Number({ minimum: 0 })), }); function resolveSandboxSessionToolsVisibility( diff --git a/src/agents/tools/sessions-send-tool.ts b/src/agents/tools/sessions-send-tool.ts index 1c6a06e93..7640d314b 100644 --- a/src/agents/tools/sessions-send-tool.ts +++ b/src/agents/tools/sessions-send-tool.ts @@ -30,25 +30,13 @@ import { resolvePingPongTurns, } from "./sessions-send-helpers.js"; -const SessionsSendToolSchema = Type.Union([ - Type.Object( - { - sessionKey: Type.String(), - message: Type.String(), - timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })), - }, - { additionalProperties: false }, - ), - Type.Object( - { - label: Type.String({ minLength: 1, maxLength: SESSION_LABEL_MAX_LENGTH }), - agentId: Type.Optional(Type.String({ minLength: 1, maxLength: 64 })), - message: Type.String(), - timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })), - }, - { additionalProperties: false }, - ), -]); +const SessionsSendToolSchema = Type.Object({ + sessionKey: Type.Optional(Type.String()), + label: Type.Optional(Type.String()), + agentId: Type.Optional(Type.String()), + message: Type.String(), + timeoutSeconds: Type.Optional(Type.Number({ minimum: 0 })), +}); export function createSessionsSendTool(opts?: { agentSessionKey?: string; diff --git a/src/agents/tools/sessions-spawn-tool.ts b/src/agents/tools/sessions-spawn-tool.ts index e6260a38a..f4391e5c3 100644 --- a/src/agents/tools/sessions-spawn-tool.ts +++ b/src/agents/tools/sessions-spawn-tool.ts @@ -25,9 +25,9 @@ const SessionsSpawnToolSchema = Type.Object({ label: Type.Optional(Type.String()), agentId: Type.Optional(Type.String()), model: Type.Optional(Type.String()), - runTimeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })), + runTimeoutSeconds: Type.Optional(Type.Number({ minimum: 0 })), // Back-compat alias. Prefer runTimeoutSeconds. - timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })), + timeoutSeconds: Type.Optional(Type.Number({ minimum: 0 })), cleanup: Type.Optional( Type.Union([Type.Literal("delete"), Type.Literal("keep")]), ),