From 29a4e9847761837ab85ea42d4bab9267be606755 Mon Sep 17 00:00:00 2001 From: "Emre K." <110906681+kocaemre@users.noreply.github.com> Date: Wed, 23 Sep 2026 12:40:40 +0300 Subject: [PATCH] fix: preserve native Vertex endpoint defaults (#1104) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - keep `ANTHROPIC_VERTEX_BASE_URL` unset when `providers/set` selects Vertex's native default endpoint - retain explicit `ANTHROPIC_VERTEX_BASE_URL` only for custom Vertex gateways/endpoints - add a regression test for the default Vertex endpoint env mapping Closes #1087 ## Test Plan - `npm run test:run -- src/tests/providers.test.ts` — passed (21 tests) - `npm run check` — passed (`eslint src --ext .ts` + `prettier --check .`) - `npm run build` — passed (`tsc`) - `git diff --check origin/main..HEAD` — passed Note: `claude -p` delegation was attempted for candidate discovery but this cron shell's Claude Code auth is not logged in (`Not logged in · Please run /login`), so the implementation/validation above was done directly with local tests. Signed-off-by: Emre K <110906681+kocaemre@users.noreply.github.com> --- src/acp-agent.ts | 11 +++++++++-- src/tests/providers.test.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/acp-agent.ts b/src/acp-agent.ts index 7ad9554c..4c10fd3b 100644 --- a/src/acp-agent.ts +++ b/src/acp-agent.ts @@ -1300,6 +1300,7 @@ const AUTH_REQUIRED_CODE = RequestError.authRequired().code; const SUPPORTED_PROTOCOLS: LlmProtocol[] = ["anthropic", "bedrock", "vertex"]; const PROVIDER_ID = "main"; const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com"; +const DEFAULT_VERTEX_BASE_URL = "https://aiplatform.googleapis.com"; /** * Vertex needs project + region that the standard `providers/set` payload @@ -2691,7 +2692,7 @@ export class ClaudeAcpAgent { if (process.env.CLAUDE_CODE_USE_VERTEX) { return { apiType: "vertex", - baseUrl: process.env.ANTHROPIC_VERTEX_BASE_URL ?? "https://aiplatform.googleapis.com", + baseUrl: process.env.ANTHROPIC_VERTEX_BASE_URL ?? DEFAULT_VERTEX_BASE_URL, headers: {}, }; } @@ -9133,10 +9134,16 @@ function createEnvForProvider(config: ProviderConfig | null): Record { ); }); + it("leaves the native Vertex base URL unset for the default endpoint", async () => { + const [agent, mockQuery] = await createAgentMock(); + await agent.initialize({ protocolVersion: 1, clientCapabilities: {} }); + await agent.unstable_setProvider({ + providerId: "main", + apiType: "vertex", + baseUrl: "https://aiplatform.googleapis.com", + _meta: { claudeCode: { vertex: { projectId: "my-project", region: "global" } } }, + }); + + await agent.newSession({ cwd: process.cwd(), mcpServers: [] }); + + expect(mockQuery).toHaveBeenCalledWith( + expect.objectContaining({ + options: expect.objectContaining({ + env: expect.objectContaining({ + CLAUDE_CODE_USE_VERTEX: "1", + ANTHROPIC_VERTEX_BASE_URL: "", + ANTHROPIC_VERTEX_PROJECT_ID: "my-project", + CLOUD_ML_REGION: "global", + }), + }), + }), + ); + }); + it("rejects vertex set without _meta project/region", async () => { const [agent] = await createAgentMock(); await expect(