From 3efb2248dd50ee731546d196171c8ad2e2088ab3 Mon Sep 17 00:00:00 2001 From: Ramesh Nethi Date: Wed, 29 Apr 2026 22:02:12 +0530 Subject: [PATCH] fix: resolve gemini api key duplication and improve error classification --- apps/web/src/app/setup/page.tsx | 3 ++- packages/agent-adapters/src/gemini.ts | 9 +++++++++ packages/shared/src/error-classifier.ts | 12 ++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/setup/page.tsx b/apps/web/src/app/setup/page.tsx index 3993527c..631a9f56 100644 --- a/apps/web/src/app/setup/page.tsx +++ b/apps/web/src/app/setup/page.tsx @@ -1740,7 +1740,8 @@ export default function SetupPage() { setGeminiError(""); }} onPaste={(e) => { - const pasted = e.clipboardData.getData("text"); + e.preventDefault(); + const pasted = e.clipboardData.getData("text").trim(); if (pasted) { setGeminiKey(pasted); setGeminiValidated(false); diff --git a/packages/agent-adapters/src/gemini.ts b/packages/agent-adapters/src/gemini.ts index 37a7c0e5..29d40ec4 100644 --- a/packages/agent-adapters/src/gemini.ts +++ b/packages/agent-adapters/src/gemini.ts @@ -64,6 +64,8 @@ export class GeminiAdapter implements AgentAdapter { OPTIO_PROMPT: prompt, OPTIO_AGENT_TYPE: "gemini", OPTIO_BRANCH_NAME: `${TASK_BRANCH_PREFIX}${input.taskId}`, + // Ensure the CLI doesn't prompt for trust in isolated ephemeral pods + GEMINI_CLI_TRUST_WORKSPACE: "true", }; const requiredSecrets: string[] = []; @@ -164,6 +166,13 @@ export class GeminiAdapter implements AgentAdapter { let hasError = false; let lastAssistantMessage: string | undefined; + // Check for JSON error messages embedded in non-JSON output + const apiKeyErrorMatch = logs.match(/API key not valid|API_KEY_INVALID/i); + if (apiKeyErrorMatch) { + errorMessage = "API key not valid. Please pass a valid API key."; + hasError = true; + } + for (const line of logs.split("\n")) { if (!line.trim()) continue; diff --git a/packages/shared/src/error-classifier.ts b/packages/shared/src/error-classifier.ts index 4a8041e8..396c4470 100644 --- a/packages/shared/src/error-classifier.ts +++ b/packages/shared/src/error-classifier.ts @@ -234,6 +234,18 @@ const ERROR_PATTERNS: Array<{ retryable: true, }), }, + { + pattern: /API key not valid|API_KEY_INVALID/i, + classify: () => ({ + category: "auth", + title: "Invalid API key", + description: + "The provided API key is invalid. This can affect Gemini, Anthropic, or OpenAI depending on which agent was running.", + remedy: + "Go to Secrets and verify your API keys (GEMINI_API_KEY, ANTHROPIC_API_KEY, etc.) are valid and have not been revoked.", + retryable: false, + }), + }, { pattern: /exit code: (\d+)/i, classify: (match) => ({