diff --git a/src/config/zod-schema.agent-params.test.ts b/src/config/zod-schema.agent-params.test.ts new file mode 100644 index 00000000000..83b712c2d00 --- /dev/null +++ b/src/config/zod-schema.agent-params.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, it } from "vitest"; +import { AgentEntrySchema } from "./zod-schema.agent-runtime.js"; + +describe("AgentEntrySchema params field", () => { + it("accepts agents.list[].params with cacheRetention", () => { + const result = AgentEntrySchema.safeParse({ + id: "main", + params: { cacheRetention: "none" }, + }); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.params).toEqual({ cacheRetention: "none" }); + } + }); + + it("accepts agents.list[].params with arbitrary model overrides", () => { + const result = AgentEntrySchema.safeParse({ + id: "main", + params: { temperature: 0.7, maxTokens: 4096 }, + }); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.params).toEqual({ temperature: 0.7, maxTokens: 4096 }); + } + }); + + it("accepts agents.list[] without params (optional)", () => { + const result = AgentEntrySchema.safeParse({ + id: "main", + }); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.params).toBeUndefined(); + } + }); +}); diff --git a/src/config/zod-schema.agent-runtime.ts b/src/config/zod-schema.agent-runtime.ts index d7b1dd393e7..f4ac349e68b 100644 --- a/src/config/zod-schema.agent-runtime.ts +++ b/src/config/zod-schema.agent-runtime.ts @@ -751,6 +751,8 @@ export const AgentEntrySchema = z heartbeat: HeartbeatSchema, identity: IdentitySchema, groupChat: GroupChatSchema, + /** Per-agent model params (e.g. cacheRetention, temperature). Merged on top of agents.defaults.models[...].params. */ + params: z.record(z.string(), z.unknown()).optional(), subagents: z .object({ allowAgents: z.array(z.string()).optional(),