import { describe, test, expect } from "bun:test" import { createBuiltinAgents } from "./utils" import type { AgentConfig } from "@opencode-ai/sdk" describe("createBuiltinAgents with model overrides", () => { test("Sisyphus with default model has thinking config", () => { // #given - no overrides // #when const agents = createBuiltinAgents() // #then expect(agents.Sisyphus.model).toBe("anthropic/claude-opus-4-5") expect(agents.Sisyphus.thinking).toEqual({ type: "enabled", budgetTokens: 32000 }) expect(agents.Sisyphus.reasoningEffort).toBeUndefined() }) test("Sisyphus with GPT model override has reasoningEffort, no thinking", () => { // #given const overrides = { Sisyphus: { model: "github-copilot/gpt-5.2" }, } // #when const agents = createBuiltinAgents([], overrides) // #then expect(agents.Sisyphus.model).toBe("github-copilot/gpt-5.2") expect(agents.Sisyphus.reasoningEffort).toBe("medium") expect(agents.Sisyphus.thinking).toBeUndefined() }) test("Sisyphus with systemDefaultModel GPT has reasoningEffort, no thinking", () => { // #given const systemDefaultModel = "openai/gpt-5.2" // #when const agents = createBuiltinAgents([], {}, undefined, systemDefaultModel) // #then expect(agents.Sisyphus.model).toBe("openai/gpt-5.2") expect(agents.Sisyphus.reasoningEffort).toBe("medium") expect(agents.Sisyphus.thinking).toBeUndefined() }) test("Oracle with default model has reasoningEffort", () => { // #given - no overrides // #when const agents = createBuiltinAgents() // #then expect(agents.oracle.model).toBe("openai/gpt-5.2") expect(agents.oracle.reasoningEffort).toBe("medium") expect(agents.oracle.textVerbosity).toBe("high") expect(agents.oracle.thinking).toBeUndefined() }) test("Oracle with Claude model override has thinking, no reasoningEffort", () => { // #given const overrides = { oracle: { model: "anthropic/claude-sonnet-4" }, } // #when const agents = createBuiltinAgents([], overrides) // #then expect(agents.oracle.model).toBe("anthropic/claude-sonnet-4") expect(agents.oracle.thinking).toEqual({ type: "enabled", budgetTokens: 32000 }) expect(agents.oracle.reasoningEffort).toBeUndefined() expect(agents.oracle.textVerbosity).toBeUndefined() }) test("non-model overrides are still applied after factory rebuild", () => { // #given const overrides = { Sisyphus: { model: "github-copilot/gpt-5.2", temperature: 0.5 }, } // #when const agents = createBuiltinAgents([], overrides) // #then expect(agents.Sisyphus.model).toBe("github-copilot/gpt-5.2") expect(agents.Sisyphus.temperature).toBe(0.5) }) }) describe("buildAgent with category and skills", () => { const { buildAgent } = require("./utils") test("agent with category inherits category settings", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", category: "visual-engineering", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.model).toBe("google/gemini-3-pro-preview") expect(agent.temperature).toBe(0.7) }) test("agent with category and existing model keeps existing model", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", category: "visual-engineering", model: "custom/model", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.model).toBe("custom/model") expect(agent.temperature).toBe(0.7) }) test("agent with skills has content prepended to prompt", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", skills: ["frontend-ui-ux"], prompt: "Original prompt content", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.prompt).toContain("Role: Designer-Turned-Developer") expect(agent.prompt).toContain("Original prompt content") expect(agent.prompt).toMatch(/Designer-Turned-Developer[\s\S]*Original prompt content/s) }) test("agent with multiple skills has all content prepended", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", skills: ["frontend-ui-ux"], prompt: "Agent prompt", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.prompt).toContain("Role: Designer-Turned-Developer") expect(agent.prompt).toContain("Agent prompt") }) test("agent without category or skills works as before", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", model: "custom/model", temperature: 0.5, prompt: "Base prompt", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.model).toBe("custom/model") expect(agent.temperature).toBe(0.5) expect(agent.prompt).toBe("Base prompt") }) test("agent with category and skills applies both", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", category: "high-iq", skills: ["frontend-ui-ux"], prompt: "Task description", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.model).toBe("openai/gpt-5.2") expect(agent.temperature).toBe(0.1) expect(agent.prompt).toContain("Role: Designer-Turned-Developer") expect(agent.prompt).toContain("Task description") }) test("agent with non-existent category has no effect", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", category: "non-existent", prompt: "Base prompt", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.model).toBeUndefined() expect(agent.prompt).toBe("Base prompt") }) test("agent with non-existent skills only prepends found ones", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", skills: ["frontend-ui-ux", "non-existent-skill"], prompt: "Base prompt", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.prompt).toContain("Role: Designer-Turned-Developer") expect(agent.prompt).toContain("Base prompt") }) test("agent with empty skills array keeps original prompt", () => { // #given const source = { "test-agent": () => ({ description: "Test agent", skills: [], prompt: "Base prompt", }) as AgentConfig, } // #when const agent = buildAgent(source["test-agent"]) // #then expect(agent.prompt).toBe("Base prompt") }) })