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(