diff --git a/src/config/schema/agent-overrides.test.ts b/src/config/schema/agent-overrides.test.ts new file mode 100644 index 000000000..6f095edce --- /dev/null +++ b/src/config/schema/agent-overrides.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, test } from "bun:test" +import { AgentOverridesSchema } from "./agent-overrides" + +describe("AgentOverridesSchema", () => { + test("preserves custom agent keys after parsing", () => { + const input = { + sisyphus: { model: "anthropic/claude-opus-4-6" }, + "technical-writer": { + model: "anthropic/claude-sonnet-4-6", + temperature: 0.3, + prompt_append: "You are a technical writer.", + }, + } + + const result = AgentOverridesSchema.safeParse(input) + + expect(result.success).toBe(true) + if (result.success) { + expect(result.data.sisyphus).toBeDefined() + expect(result.data["technical-writer"]).toBeDefined() + expect(result.data["technical-writer"]?.model).toBe("anthropic/claude-sonnet-4-6") + expect(result.data["technical-writer"]?.temperature).toBe(0.3) + } + }) + + test("validates custom agent keys against AgentOverrideConfigSchema", () => { + const input = { + "custom-agent": { + model: "provider/model", + temperature: 5, // invalid: max is 2 + }, + } + + const result = AgentOverridesSchema.safeParse(input) + + expect(result.success).toBe(false) + }) +}) diff --git a/src/config/schema/agent-overrides.ts b/src/config/schema/agent-overrides.ts index ac560cbd5..81245cbf6 100644 --- a/src/config/schema/agent-overrides.ts +++ b/src/config/schema/agent-overrides.ts @@ -72,7 +72,7 @@ export const AgentOverridesSchema = z.object({ explore: AgentOverrideConfigSchema.optional(), "multimodal-looker": AgentOverrideConfigSchema.optional(), atlas: AgentOverrideConfigSchema.optional(), -}) +}).catchall(AgentOverrideConfigSchema.optional()) export type AgentOverrideConfig = z.infer export type AgentOverrides = z.infer