diff --git a/src/config/claudeProviderPresets.ts b/src/config/claudeProviderPresets.ts index d1b3f1b0a..996fbf840 100644 --- a/src/config/claudeProviderPresets.ts +++ b/src/config/claudeProviderPresets.ts @@ -531,4 +531,44 @@ export const providerPresets: ProviderPreset[] = [ icon: "xiaomimimo", iconColor: "#000000", }, + { + name: "AWS Bedrock (AKSK)", + websiteUrl: "https://aws.amazon.com/bedrock/", + settingsConfig: { + env: { + ANTHROPIC_BASE_URL: + "https://bedrock-runtime.${AWS_REGION}.amazonaws.com", + AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}", + AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}", + AWS_REGION: "${AWS_REGION}", + ANTHROPIC_MODEL: "global.anthropic.claude-opus-4-6-v1", + ANTHROPIC_DEFAULT_HAIKU_MODEL: + "global.anthropic.claude-haiku-4-5-20251001-v1:0", + ANTHROPIC_DEFAULT_SONNET_MODEL: + "global.anthropic.claude-sonnet-4-5-20250929-v1:0", + ANTHROPIC_DEFAULT_OPUS_MODEL: "global.anthropic.claude-opus-4-6-v1", + CLAUDE_CODE_USE_BEDROCK: "1", + }, + }, + category: "cloud_provider", + templateValues: { + AWS_REGION: { + label: "AWS Region", + placeholder: "us-west-2", + editorValue: "us-west-2", + }, + AWS_ACCESS_KEY_ID: { + label: "Access Key ID", + placeholder: "AKIA...", + editorValue: "", + }, + AWS_SECRET_ACCESS_KEY: { + label: "Secret Access Key", + placeholder: "your-secret-key", + editorValue: "", + }, + }, + icon: "aws", + iconColor: "#FF9900", + }, ]; diff --git a/tests/config/claudeProviderPresets.test.ts b/tests/config/claudeProviderPresets.test.ts new file mode 100644 index 000000000..23ea60497 --- /dev/null +++ b/tests/config/claudeProviderPresets.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, it } from "vitest"; +import { providerPresets } from "@/config/claudeProviderPresets"; + +describe("AWS Bedrock Provider Presets", () => { + const bedrockAksk = providerPresets.find( + (p) => p.name === "AWS Bedrock (AKSK)", + ); + + it("should include AWS Bedrock (AKSK) preset", () => { + expect(bedrockAksk).toBeDefined(); + }); + + it("AKSK preset should have required AWS env variables", () => { + const env = (bedrockAksk!.settingsConfig as any).env; + expect(env).toHaveProperty("AWS_ACCESS_KEY_ID"); + expect(env).toHaveProperty("AWS_SECRET_ACCESS_KEY"); + expect(env).toHaveProperty("AWS_REGION"); + expect(env).toHaveProperty("CLAUDE_CODE_USE_BEDROCK", "1"); + }); + + it("AKSK preset should have template values for AWS credentials", () => { + expect(bedrockAksk!.templateValues).toBeDefined(); + expect(bedrockAksk!.templateValues!.AWS_ACCESS_KEY_ID).toBeDefined(); + expect(bedrockAksk!.templateValues!.AWS_SECRET_ACCESS_KEY).toBeDefined(); + expect(bedrockAksk!.templateValues!.AWS_REGION).toBeDefined(); + expect(bedrockAksk!.templateValues!.AWS_REGION.editorValue).toBe( + "us-west-2", + ); + }); + + it("AKSK preset should have correct base URL template", () => { + const env = (bedrockAksk!.settingsConfig as any).env; + expect(env.ANTHROPIC_BASE_URL).toContain("bedrock-runtime"); + expect(env.ANTHROPIC_BASE_URL).toContain("${AWS_REGION}"); + }); + + it("AKSK preset should have cloud_provider category", () => { + expect(bedrockAksk!.category).toBe("cloud_provider"); + }); + + it("AKSK preset should have Bedrock model as default", () => { + const env = (bedrockAksk!.settingsConfig as any).env; + expect(env.ANTHROPIC_MODEL).toContain("anthropic.claude"); + }); +});