Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
8d5d4f8
First cut on different UI
suprjinx May 27, 2025
9391ede
WIP for passing process environment to webview components
suprjinx May 28, 2025
fa0504f
Set process env in react html as script, instead of trying to pass me…
suprjinx May 30, 2025
39a1edb
Fix logic for activating apiKeyEnvVar
suprjinx May 31, 2025
91725fd
Add new ApiKey component and use with Anthropic
suprjinx Jun 2, 2025
742ca14
Add apiKeyUseEnvVar to all providers supporting api key
suprjinx Jul 18, 2025
4fb7ed7
Merge branch 'main' into add_api_key_env_vars
suprjinx Jul 24, 2025
891af6d
Fix merge errors
suprjinx Jul 24, 2025
488ac44
Add unit tests for components/settings/ApiKey.tsx and api/index.ts
suprjinx Jul 24, 2025
910028d
Fix lint issues
suprjinx Jul 25, 2025
436025f
Merge branch 'main' into add_api_key_env_vars
suprjinx Jul 25, 2025
e17c2e6
Add support for "balance display" used by OpenRouter and Requesty pro…
suprjinx Jul 25, 2025
7e518b1
Fix additional unused vars
suprjinx Jul 25, 2025
78598db
Fix new lint complaints after removing unused func
suprjinx Jul 25, 2025
2f5e00f
Add missing translation to non-EN locales
suprjinx Jul 25, 2025
60002d8
Fix last lint complaint
suprjinx Jul 25, 2025
2b6b2ea
Fix missing imports
suprjinx Jul 25, 2025
f154eb2
One more lint fix
suprjinx Jul 25, 2025
674055c
Fix code scanner complaint re: potential prototype-pollution
suprjinx Jul 25, 2025
88d587f
Fix OpenAINative api key translation keys
suprjinx Jul 25, 2025
1ea534c
Merge branch 'main' into add_api_key_env_vars
suprjinx Jul 27, 2025
5706600
PR suggestions to make "use env var" property more general; use
suprjinx Jul 28, 2025
6f8b0d9
Fix tsc compile issue
suprjinx Jul 28, 2025
f9c6a51
Switch to "ENV_VAR_EXISTS" map of known API keys, instead of writing
suprjinx Aug 11, 2025
2ff6dec
Place a map of know api keys -> bool in webview for checking existence
suprjinx Aug 11, 2025
895b505
Merge branch 'main' into add_api_key_env_vars
suprjinx Aug 12, 2025
11fe352
fix typo with chutes provider; remove redundant `balanceDisplay` and
suprjinx Aug 12, 2025
08e7d73
Merge branch 'main' into add_api_key_env_vars
suprjinx Aug 12, 2025
0879bcd
Remove unused `env` property for ApiOptions
suprjinx Aug 12, 2025
0231f6f
Merge branch 'main' into add_api_key_env_vars
suprjinx Aug 13, 2025
0707083
Merge branch 'main' into add_api_key_env_vars
suprjinx Aug 13, 2025
e711534
Fix merge conflict
suprjinx Aug 13, 2025
6f7cace
Remove unused import from merge
suprjinx Aug 13, 2025
ce8186d
Remove translations help function
suprjinx Aug 22, 2025
010300c
Merge branch 'main' into add_api_key_env_vars
suprjinx Aug 22, 2025
91206b1
Fix formatting in test file; fix OllamaHandler reference
suprjinx Aug 22, 2025
1076c2a
Merge branch 'main' into add_api_key_env_vars
suprjinx Aug 25, 2025
8dd02bc
Fix merge error
suprjinx Aug 25, 2025
6b82ada
Fix merge error
suprjinx Aug 25, 2025
c0f82d8
Fix merge error
suprjinx Aug 25, 2025
8868930
Fix merge error
suprjinx Aug 25, 2025
86fd178
Merge branch 'main' into add_api_key_env_vars
suprjinx Aug 27, 2025
b39fdb9
Remove unneeded but failing test case
suprjinx Aug 27, 2025
bfe5486
Merge branch 'main' into add_api_key_env_vars
suprjinx Sep 3, 2025
2fd04c5
Fix merge conflict
suprjinx Sep 3, 2025
b2ef23c
Merge branch 'main' into add_api_key_env_vars
suprjinx Sep 26, 2025
6b32481
Change DEEP_SEEK_API_KEY -> DEEPSEEK_API_KEY
suprjinx Sep 26, 2025
09dad33
Change OPEN_ROUTER_API_KEY -> OPENROUTER_API_KEY
suprjinx Sep 26, 2025
2391628
Fix index.spec.ts header
suprjinx Sep 26, 2025
95fbe97
Update validate function for ConfigUseEnvVar on existing providers
suprjinx Sep 26, 2025
5ec88ba
Additional providers having apikey
suprjinx Sep 26, 2025
4736894
Remove unused imports and defs since using ApiKey component
suprjinx Sep 26, 2025
cc85602
Use constants instead of hard-coded strings in buildApiHandler; fix
suprjinx Sep 27, 2025
d6f301f
Fix Chutes translation key
suprjinx Sep 27, 2025
5048312
Merge branch 'main' into add_api_key_env_vars
suprjinx Oct 27, 2025
4597469
Fixing MOONSHOOT->MOONSHOT plus remove extra space
suprjinx Oct 27, 2025
142412c
Merge branch 'RooCodeInc:main' into add_api_key_env_vars
suprjinx Oct 27, 2025
564cc9a
Fix formatting
suprjinx Oct 27, 2025
3823e1b
Update existing api key validations and add missing ones
suprjinx Oct 29, 2025
7b24b89
trigger GitHub actions
suprjinx Oct 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions packages/types/src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/**
* API key environment variable names organized by provider
*/
export const API_KEYS = {
ANTHROPIC: "ANTHROPIC_API_KEY",
OPENAI: "OPENAI_API_KEY",
OPEN_ROUTER: "OPENROUTER_API_KEY",
GLAMA: "GLAMA_API_KEY",
GEMINI: "GEMINI_API_KEY",
MISTRAL: "MISTRAL_API_KEY",
DEEP_SEEK: "DEEPSEEK_API_KEY",
UNBOUND: "UNBOUND_API_KEY",
REQUESTY: "REQUESTY_API_KEY",
XAI: "XAI_API_KEY",
GROQ: "GROQ_API_KEY",
CHUTES: "CHUTES_API_KEY",
LITELLM: "LITELLM_API_KEY",
CEREBRAS: "CEREBRAS_API_KEY",
DEEP_INFRA: "DEEPINFRA_API_KEY",
DOUBAO: "DOUBAO_API_KEY",
FEATHERLESS: "FEATHERLESS_API_KEY",
FIREWORKS: "FIREWORKS_API_KEY",
HUGGING_FACE: "HUGGINGFACE_API_KEY",
IO_INTELLIGENCE: "IOINTELLIGENCE_API_KEY",
MOONSHOT: "MOONSHOT_API_KEY",
SAMBA_NOVA: "SAMBANOVA_API_KEY",
VERCEL: "VERCEL_API_KEY",
ZAI: "ZAI_API_KEY",
} as const

/**
* Array of all API key environment variable names
*/
export const API_KEY_ENV_VAR_NAMES = Object.values(API_KEYS)

/**
* Type for API key environment variable names
*/
export type ApiKeyEnvVar = (typeof API_KEYS)[keyof typeof API_KEYS]
1 change: 1 addition & 0 deletions packages/types/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export * from "./api.js"
export * from "./cloud.js"
export * from "./codebase-index.js"
export * from "./constants.js"
export * from "./cookie-consent.js"
export * from "./events.js"
export * from "./experiment.js"
Expand Down
25 changes: 25 additions & 0 deletions packages/types/src/provider-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ const apiModelIdProviderModelSchema = baseProviderSettingsSchema.extend({

const anthropicSchema = apiModelIdProviderModelSchema.extend({
apiKey: z.string().optional(),
anthropicConfigUseEnvVars: z.boolean().optional(),
anthropicBaseUrl: z.string().optional(),
anthropicUseAuthToken: z.boolean().optional(),
anthropicBeta1MContext: z.boolean().optional(), // Enable 'context-1m-2025-08-07' beta for 1M context window.
Expand All @@ -203,10 +204,12 @@ const claudeCodeSchema = apiModelIdProviderModelSchema.extend({
const glamaSchema = baseProviderSettingsSchema.extend({
glamaModelId: z.string().optional(),
glamaApiKey: z.string().optional(),
glamaConfigUseEnvVars: z.boolean().optional(),
})

const openRouterSchema = baseProviderSettingsSchema.extend({
openRouterApiKey: z.string().optional(),
openRouterConfigUseEnvVars: z.boolean().optional(),
openRouterModelId: z.string().optional(),
openRouterBaseUrl: z.string().optional(),
openRouterSpecificProvider: z.string().optional(),
Expand Down Expand Up @@ -243,6 +246,7 @@ const vertexSchema = apiModelIdProviderModelSchema.extend({
const openAiSchema = baseProviderSettingsSchema.extend({
openAiBaseUrl: z.string().optional(),
openAiApiKey: z.string().optional(),
openAiConfigUseEnvVars: z.boolean().optional(),
openAiLegacyFormat: z.boolean().optional(),
openAiR1FormatEnabled: z.boolean().optional(),
openAiModelId: z.string().optional(),
Expand Down Expand Up @@ -281,6 +285,7 @@ const lmStudioSchema = baseProviderSettingsSchema.extend({

const geminiSchema = apiModelIdProviderModelSchema.extend({
geminiApiKey: z.string().optional(),
geminiConfigUseEnvVars: z.boolean().optional(),
googleGeminiBaseUrl: z.string().optional(),
enableUrlContext: z.boolean().optional(),
enableGrounding: z.boolean().optional(),
Expand All @@ -293,6 +298,7 @@ const geminiCliSchema = apiModelIdProviderModelSchema.extend({

const openAiNativeSchema = apiModelIdProviderModelSchema.extend({
openAiNativeApiKey: z.string().optional(),
openAiNativeConfigUseEnvVars: z.boolean().optional(),
openAiNativeBaseUrl: z.string().optional(),
// OpenAI Responses API service tier for openai-native provider only.
// UI should only expose this when the selected model supports flex/priority.
Expand All @@ -301,40 +307,47 @@ const openAiNativeSchema = apiModelIdProviderModelSchema.extend({

const mistralSchema = apiModelIdProviderModelSchema.extend({
mistralApiKey: z.string().optional(),
mistralConfigUseEnvVars: z.boolean().optional(),
mistralCodestralUrl: z.string().optional(),
})

const deepSeekSchema = apiModelIdProviderModelSchema.extend({
deepSeekBaseUrl: z.string().optional(),
deepSeekApiKey: z.string().optional(),
deepSeekConfigUseEnvVars: z.boolean().optional(),
})

const deepInfraSchema = apiModelIdProviderModelSchema.extend({
deepInfraBaseUrl: z.string().optional(),
deepInfraApiKey: z.string().optional(),
deepInfraConfigUseEnvVars: z.boolean().optional(),
deepInfraModelId: z.string().optional(),
})

const doubaoSchema = apiModelIdProviderModelSchema.extend({
doubaoBaseUrl: z.string().optional(),
doubaoApiKey: z.string().optional(),
doubaoConfigUseEnvVars: z.boolean().optional(),
})

const moonshotSchema = apiModelIdProviderModelSchema.extend({
moonshotBaseUrl: z
.union([z.literal("https://api.moonshot.ai/v1"), z.literal("https://api.moonshot.cn/v1")])
.optional(),
moonshotApiKey: z.string().optional(),
moonshotConfigUseEnvVars: z.boolean().optional(),
})

const unboundSchema = baseProviderSettingsSchema.extend({
unboundApiKey: z.string().optional(),
unboundConfigUseEnvVars: z.boolean().optional(),
unboundModelId: z.string().optional(),
})

const requestySchema = baseProviderSettingsSchema.extend({
requestyBaseUrl: z.string().optional(),
requestyApiKey: z.string().optional(),
requestyConfigUseEnvVars: z.boolean().optional(),
requestyModelId: z.string().optional(),
})

Expand All @@ -346,35 +359,42 @@ const fakeAiSchema = baseProviderSettingsSchema.extend({

const xaiSchema = apiModelIdProviderModelSchema.extend({
xaiApiKey: z.string().optional(),
xaiConfigUseEnvVars: z.boolean().optional(),
})

const groqSchema = apiModelIdProviderModelSchema.extend({
groqApiKey: z.string().optional(),
groqConfigUseEnvVars: z.boolean().optional(),
})

const huggingFaceSchema = baseProviderSettingsSchema.extend({
huggingFaceApiKey: z.string().optional(),
huggingFaceConfigUseEnvVars: z.boolean().optional(),
huggingFaceModelId: z.string().optional(),
huggingFaceInferenceProvider: z.string().optional(),
})

const chutesSchema = apiModelIdProviderModelSchema.extend({
chutesApiKey: z.string().optional(),
chutesConfigUseEnvVars: z.boolean().optional(),
})

const litellmSchema = baseProviderSettingsSchema.extend({
litellmBaseUrl: z.string().optional(),
litellmApiKey: z.string().optional(),
litellmConfigUseEnvVars: z.boolean().optional(),
litellmModelId: z.string().optional(),
litellmUsePromptCache: z.boolean().optional(),
})

const cerebrasSchema = apiModelIdProviderModelSchema.extend({
cerebrasApiKey: z.string().optional(),
cerebrasConfigUseEnvVars: z.boolean().optional(),
})

const sambaNovaSchema = apiModelIdProviderModelSchema.extend({
sambaNovaApiKey: z.string().optional(),
sambaNovaConfigUseEnvVars: z.boolean().optional(),
})

export const zaiApiLineSchema = z.enum(["international_coding", "china_coding"])
Expand All @@ -383,20 +403,24 @@ export type ZaiApiLine = z.infer<typeof zaiApiLineSchema>

const zaiSchema = apiModelIdProviderModelSchema.extend({
zaiApiKey: z.string().optional(),
zaiConfigUseEnvVars: z.boolean().optional(),
zaiApiLine: zaiApiLineSchema.optional(),
})

const fireworksSchema = apiModelIdProviderModelSchema.extend({
fireworksApiKey: z.string().optional(),
fireworksConfigUseEnvVars: z.boolean().optional(),
})

const featherlessSchema = apiModelIdProviderModelSchema.extend({
featherlessApiKey: z.string().optional(),
featherlessConfigUseEnvVars: z.boolean().optional(),
})

const ioIntelligenceSchema = apiModelIdProviderModelSchema.extend({
ioIntelligenceModelId: z.string().optional(),
ioIntelligenceApiKey: z.string().optional(),
ioIntelligenceConfigUseEnvVars: z.boolean().optional(),
})

const qwenCodeSchema = apiModelIdProviderModelSchema.extend({
Expand All @@ -409,6 +433,7 @@ const rooSchema = apiModelIdProviderModelSchema.extend({

const vercelAiGatewaySchema = baseProviderSettingsSchema.extend({
vercelAiGatewayApiKey: z.string().optional(),
vercelConfigUseEnvVars: z.boolean().optional(),
vercelAiGatewayModelId: z.string().optional(),
})

Expand Down
Loading