diff --git a/src/agents/builtin-agents.ts b/src/agents/builtin-agents.ts index 57e859c759..2d74a33dd7 100644 --- a/src/agents/builtin-agents.ts +++ b/src/agents/builtin-agents.ts @@ -12,6 +12,7 @@ import { createMetisAgent, metisPromptMetadata } from "./metis" import { createAtlasAgent, atlasPromptMetadata } from "./atlas" import { createMomusAgent, momusPromptMetadata } from "./momus" import { createHephaestusAgent } from "./hephaestus" +import { createSisyphusJuniorAgentWithOverrides } from "./sisyphus-junior" import type { AvailableCategory } from "./dynamic-agent-prompt-builder" import { fetchAvailableModels, @@ -41,6 +42,7 @@ const agentSources: Record = { // Note: Atlas is handled specially in createBuiltinAgents() // because it needs OrchestratorContext, not just a model string atlas: createAtlasAgent as AgentFactory, + "sisyphus-junior": createSisyphusJuniorAgentWithOverrides as unknown as AgentFactory, } /** diff --git a/src/agents/builtin-agents/general-agents.ts b/src/agents/builtin-agents/general-agents.ts index 54f2ae3fb3..e75baa1467 100644 --- a/src/agents/builtin-agents/general-agents.ts +++ b/src/agents/builtin-agents/general-agents.ts @@ -50,6 +50,7 @@ export function collectPendingBuiltinAgents(input: { if (agentName === "sisyphus") continue if (agentName === "hephaestus") continue if (agentName === "atlas") continue + if (agentName === "sisyphus-junior") continue if (disabledAgents.some((name) => name.toLowerCase() === agentName.toLowerCase())) continue const override = agentOverrides[agentName] diff --git a/src/agents/index.ts b/src/agents/index.ts index 1eee7c3b27..6f2bbc1e74 100644 --- a/src/agents/index.ts +++ b/src/agents/index.ts @@ -2,3 +2,4 @@ export * from "./types" export { createBuiltinAgents } from "./builtin-agents" export type { AvailableAgent, AvailableCategory, AvailableSkill } from "./dynamic-agent-prompt-builder" export type { PrometheusPromptSource } from "./prometheus" +export { createSisyphusJuniorAgentWithOverrides, SISYPHUS_JUNIOR_DEFAULTS } from "./sisyphus-junior" diff --git a/src/agents/types.ts b/src/agents/types.ts index 63e09b3f6a..acf4900074 100644 --- a/src/agents/types.ts +++ b/src/agents/types.ts @@ -113,7 +113,8 @@ export type BuiltinAgentName = | "multimodal-looker" | "metis" | "momus" - | "atlas"; + | "atlas" + | "sisyphus-junior"; export type OverridableAgentName = "build" | BuiltinAgentName; diff --git a/src/config/schema/agent-names.ts b/src/config/schema/agent-names.ts index 814077d88f..73e4f1f80a 100644 --- a/src/config/schema/agent-names.ts +++ b/src/config/schema/agent-names.ts @@ -11,6 +11,7 @@ export const BuiltinAgentNameSchema = z.enum([ "metis", "momus", "atlas", + "sisyphus-junior", ]) export const BuiltinSkillNameSchema = z.enum([ diff --git a/src/shared/model-requirements.test.ts b/src/shared/model-requirements.test.ts index 29c4770572..992af79d8e 100644 --- a/src/shared/model-requirements.test.ts +++ b/src/shared/model-requirements.test.ts @@ -191,8 +191,8 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(hephaestus.requiresModel).toBeUndefined() }) - test("all 10 builtin agents have valid fallbackChain arrays", () => { - // #given - list of 10 agent names + test("all 11 builtin agents have valid fallbackChain arrays", () => { + // #given - list of 11 agent names const expectedAgents = [ "sisyphus", "hephaestus", @@ -204,13 +204,14 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { "metis", "momus", "atlas", + "sisyphus-junior", ] // when - checking AGENT_MODEL_REQUIREMENTS const definedAgents = Object.keys(AGENT_MODEL_REQUIREMENTS) // #then - all agents present with valid fallbackChain - expect(definedAgents).toHaveLength(10) + expect(definedAgents).toHaveLength(11) for (const agent of expectedAgents) { const requirement = AGENT_MODEL_REQUIREMENTS[agent] expect(requirement).toBeDefined() diff --git a/src/shared/model-requirements.ts b/src/shared/model-requirements.ts index 84ade08016..4c3f33b232 100644 --- a/src/shared/model-requirements.ts +++ b/src/shared/model-requirements.ts @@ -157,6 +157,19 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.4", variant: "medium" }, ], }, + "sisyphus-junior": { + fallbackChain: [ + { + providers: ["anthropic", "github-copilot", "opencode"], + model: "claude-sonnet-4-6", + }, + { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.4", variant: "medium" }, + { + providers: ["google", "github-copilot", "opencode"], + model: "gemini-3-flash", + }, + ], + }, }; export const CATEGORY_MODEL_REQUIREMENTS: Record = {