11import { describe , it , expect , beforeEach , afterEach } from "vitest"
2- import { applyEnvOverrides , ENV_OVERRIDES } from "../env-overrides.js"
2+ import { applyEnvOverrides , PROVIDER_ENV_VAR , PROVIDER_OVERRIDE_PREFIX } from "../env-overrides.js"
33import type { CLIConfig } from "../types.js"
44
55describe ( "env-overrides" , ( ) => {
@@ -46,118 +46,55 @@ describe("env-overrides", () => {
4646
4747 describe ( "KILO_PROVIDER override" , ( ) => {
4848 it ( "should override provider when KILO_PROVIDER is set and provider exists" , ( ) => {
49- process . env [ ENV_OVERRIDES . PROVIDER ] = "anthropic-provider"
49+ process . env [ PROVIDER_ENV_VAR ] = "anthropic-provider"
5050
5151 const result = applyEnvOverrides ( testConfig )
5252
5353 expect ( result . provider ) . toBe ( "anthropic-provider" )
5454 } )
5555
5656 it ( "should not override provider when KILO_PROVIDER provider does not exist" , ( ) => {
57- process . env [ ENV_OVERRIDES . PROVIDER ] = "nonexistent-provider"
57+ process . env [ PROVIDER_ENV_VAR ] = "nonexistent-provider"
5858
5959 const result = applyEnvOverrides ( testConfig )
6060
6161 expect ( result . provider ) . toBe ( "default" )
6262 } )
6363
64- it ( "should not override provider when KILO_PROVIDER is not set" , ( ) => {
64+ it ( "should not override provider when KILO_PROVIDER is empty" , ( ) => {
65+ process . env [ PROVIDER_ENV_VAR ] = ""
66+
6567 const result = applyEnvOverrides ( testConfig )
6668
6769 expect ( result . provider ) . toBe ( "default" )
6870 } )
6971 } )
7072
71- describe ( "KILO_MODEL override" , ( ) => {
72- it ( "should override kilocodeModel for kilocode provider" , ( ) => {
73- process . env [ ENV_OVERRIDES . MODEL ] = "anthropic/claude-opus-4.0"
73+ describe ( "KILO_PROVIDER_OVERRIDE_* overrides" , ( ) => {
74+ it ( "should override any field in current provider" , ( ) => {
75+ process . env [ `${ PROVIDER_OVERRIDE_PREFIX } kilocodeModel` ] = "anthropic/claude-opus-4.0"
76+ process . env [ `${ PROVIDER_OVERRIDE_PREFIX } kilocodeOrganizationId` ] = "new-org-id"
7477
7578 const result = applyEnvOverrides ( testConfig )
7679
7780 const provider = result . providers . find ( ( p ) => p . id === "default" )
7881 expect ( provider ?. kilocodeModel ) . toBe ( "anthropic/claude-opus-4.0" )
79- } )
80-
81- it ( "should override apiModelId for anthropic provider" , ( ) => {
82- testConfig . provider = "anthropic-provider"
83- process . env [ ENV_OVERRIDES . MODEL ] = "claude-3-opus-20240229"
84-
85- const result = applyEnvOverrides ( testConfig )
86-
87- const provider = result . providers . find ( ( p ) => p . id === "anthropic-provider" )
88- expect ( provider ?. apiModelId ) . toBe ( "claude-3-opus-20240229" )
89- } )
90-
91- it ( "should not modify original config object" , ( ) => {
92- process . env [ ENV_OVERRIDES . MODEL ] = "new-model"
93-
94- const result = applyEnvOverrides ( testConfig )
95-
96- const originalProvider = testConfig . providers . find ( ( p ) => p . id === "default" )
97- const resultProvider = result . providers . find ( ( p ) => p . id === "default" )
98-
99- expect ( originalProvider ?. kilocodeModel ) . toBe ( "anthropic/claude-sonnet-4.5" )
100- expect ( resultProvider ?. kilocodeModel ) . toBe ( "new-model" )
101- } )
102- } )
103-
104- describe ( "KILO_ORG_ID override" , ( ) => {
105- it ( "should override kilocodeOrganizationId for kilocode provider" , ( ) => {
106- process . env [ ENV_OVERRIDES . ORG_ID ] = "new-org-id"
107-
108- const result = applyEnvOverrides ( testConfig )
109-
110- const provider = result . providers . find ( ( p ) => p . id === "default" )
111- expect ( provider ?. kilocodeOrganizationId ) . toBe ( "new-org-id" )
112- } )
113-
114- it ( "should not override organizationId for non-kilocode provider" , ( ) => {
115- testConfig . provider = "anthropic-provider"
116- process . env [ ENV_OVERRIDES . ORG_ID ] = "new-org-id"
117-
118- const result = applyEnvOverrides ( testConfig )
119-
120- const provider = result . providers . find ( ( p ) => p . id === "anthropic-provider" )
121- expect ( provider ?. kilocodeOrganizationId ) . toBeUndefined ( )
122- } )
123-
124- it ( "should add kilocodeOrganizationId if not present in config" , ( ) => {
125- // Remove organizationId from config
126- const providerIndex = testConfig . providers . findIndex ( ( p ) => p . id === "default" )
127- delete ( testConfig . providers [ providerIndex ] as any ) . kilocodeOrganizationId
128-
129- process . env [ ENV_OVERRIDES . ORG_ID ] = "new-org-id"
130-
131- const result = applyEnvOverrides ( testConfig )
132-
133- const provider = result . providers . find ( ( p ) => p . id === "default" )
13482 expect ( provider ?. kilocodeOrganizationId ) . toBe ( "new-org-id" )
13583 } )
13684 } )
13785
138- describe ( "Multiple overrides" , ( ) => {
139- it ( "should apply all overrides when multiple env vars are set" , ( ) => {
140- process . env [ ENV_OVERRIDES . PROVIDER ] = "default"
141- process . env [ ENV_OVERRIDES . MODEL ] = "anthropic/claude-opus-4.0"
142- process . env [ ENV_OVERRIDES . ORG_ID ] = "new-org-id"
143-
144- const result = applyEnvOverrides ( testConfig )
145-
146- expect ( result . provider ) . toBe ( "default" )
147- const provider = result . providers . find ( ( p ) => p . id === "default" )
148- expect ( provider ?. kilocodeModel ) . toBe ( "anthropic/claude-opus-4.0" )
149- expect ( provider ?. kilocodeOrganizationId ) . toBe ( "new-org-id" )
150- } )
151-
152- it ( "should handle provider switch with model override" , ( ) => {
153- process . env [ ENV_OVERRIDES . PROVIDER ] = "anthropic-provider"
154- process . env [ ENV_OVERRIDES . MODEL ] = "claude-3-opus-20240229"
86+ describe ( "Combined overrides" , ( ) => {
87+ it ( "should apply both provider and field overrides together" , ( ) => {
88+ process . env [ PROVIDER_ENV_VAR ] = "anthropic-provider"
89+ process . env [ `${ PROVIDER_OVERRIDE_PREFIX } apiModelId` ] = "claude-3-opus-20240229"
90+ process . env [ `${ PROVIDER_OVERRIDE_PREFIX } apiKey` ] = "new-key"
15591
15692 const result = applyEnvOverrides ( testConfig )
15793
15894 expect ( result . provider ) . toBe ( "anthropic-provider" )
15995 const provider = result . providers . find ( ( p ) => p . id === "anthropic-provider" )
16096 expect ( provider ?. apiModelId ) . toBe ( "claude-3-opus-20240229" )
97+ expect ( provider ?. apiKey ) . toBe ( "new-key" )
16198 } )
16299 } )
163100
@@ -178,48 +115,23 @@ describe("env-overrides", () => {
178115 expect ( result ) . toEqual ( testConfig )
179116 } )
180117
181- it ( "should handle empty string env variables" , ( ) => {
182- process . env [ ENV_OVERRIDES . PROVIDER ] = ""
183- process . env [ ENV_OVERRIDES . MODEL ] = ""
184- process . env [ ENV_OVERRIDES . ORG_ID ] = ""
118+ it ( "should handle empty string override values" , ( ) => {
119+ process . env [ `${ PROVIDER_OVERRIDE_PREFIX } apiModelId` ] = ""
185120
186121 const result = applyEnvOverrides ( testConfig )
187122
188123 // Empty strings should not trigger overrides
189- expect ( result . provider ) . toBe ( "default" )
124+ const provider = result . providers . find ( ( p ) => p . id === "default" )
125+ expect ( provider ?. kilocodeModel ) . toBe ( "anthropic/claude-sonnet-4.5" )
190126 } )
191- } )
192127
193- describe ( "Provider-specific model fields" , ( ) => {
194- it ( "should use correct model field for different providers" , ( ) => {
195- const providers = [
196- { id : "ollama-test" , provider : "ollama" as const , ollamaModelId : "llama2" } ,
197- { id : "openrouter-test" , provider : "openrouter" as const , openRouterModelId : "anthropic/claude" } ,
198- { id : "lmstudio-test" , provider : "lmstudio" as const , lmStudioModelId : "local-model" } ,
199- ]
200-
201- testConfig . providers = [ ...testConfig . providers , ...providers ]
202-
203- // Test ollama
204- testConfig . provider = "ollama-test"
205- process . env [ ENV_OVERRIDES . MODEL ] = "llama3"
206- let result = applyEnvOverrides ( testConfig )
207- let provider = result . providers . find ( ( p ) => p . id === "ollama-test" )
208- expect ( provider ?. ollamaModelId ) . toBe ( "llama3" )
209-
210- // Test openrouter
211- testConfig . provider = "openrouter-test"
212- process . env [ ENV_OVERRIDES . MODEL ] = "openai/gpt-4"
213- result = applyEnvOverrides ( testConfig )
214- provider = result . providers . find ( ( p ) => p . id === "openrouter-test" )
215- expect ( provider ?. openRouterModelId ) . toBe ( "openai/gpt-4" )
216-
217- // Test lmstudio
218- testConfig . provider = "lmstudio-test"
219- process . env [ ENV_OVERRIDES . MODEL ] = "codellama"
220- result = applyEnvOverrides ( testConfig )
221- provider = result . providers . find ( ( p ) => p . id === "lmstudio-test" )
222- expect ( provider ?. lmStudioModelId ) . toBe ( "codellama" )
128+ it ( "should ignore KILO_PROVIDER_OVERRIDE_ with no field name" , ( ) => {
129+ process . env [ PROVIDER_OVERRIDE_PREFIX ] = "value"
130+
131+ const result = applyEnvOverrides ( testConfig )
132+
133+ // Should not modify anything
134+ expect ( result ) . toEqual ( testConfig )
223135 } )
224136 } )
225137} )
0 commit comments