Skip to content

Commit 706032f

Browse files
committed
support any field
1 parent 0fd4e8f commit 706032f

File tree

2 files changed

+71
-222
lines changed

2 files changed

+71
-222
lines changed
Lines changed: 27 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { 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"
33
import type { CLIConfig } from "../types.js"
44

55
describe("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

Comments
 (0)