diff --git a/src/agents/atlas/agent.ts b/src/agents/atlas/agent.ts index 87d3550c0..c4aa65f7c 100644 --- a/src/agents/atlas/agent.ts +++ b/src/agents/atlas/agent.ts @@ -99,7 +99,6 @@ export function createAtlasAgent(ctx: OrchestratorContext): AgentConfig { ]) const baseConfig = { - name: "Atlas (Plan Executor)", description: "Orchestrates work via task() to complete ALL tasks in a todo list until fully done. (Atlas - OhMyOpenCode)", mode: MODE, diff --git a/src/agents/hephaestus.ts b/src/agents/hephaestus.ts index 99d8575ea..1ac552755 100644 --- a/src/agents/hephaestus.ts +++ b/src/agents/hephaestus.ts @@ -633,7 +633,6 @@ export function createHephaestusAgent( : buildHephaestusPrompt([], tools, skills, categories, useTaskSystem); return { - name: "Hephaestus (Deep Agent)", description: "Autonomous Deep Worker - goal-oriented execution with GPT 5.2 Codex. Explores thoroughly before acting, uses explore/librarian agents for comprehensive context, completes tasks end-to-end. Inspired by AmpCode deep mode. (Hephaestus - OhMyOpenCode)", mode: MODE, diff --git a/src/agents/metis.ts b/src/agents/metis.ts index ebf6c6b17..f25c96c90 100644 --- a/src/agents/metis.ts +++ b/src/agents/metis.ts @@ -311,7 +311,6 @@ const metisRestrictions = createAgentToolRestrictions([ export function createMetisAgent(model: string): AgentConfig { return { - name: "Metis (Plan Consultant)", description: "Pre-planning consultant that analyzes requests to identify hidden intentions, ambiguities, and AI failure points. (Metis - OhMyOpenCode)", mode: MODE, diff --git a/src/agents/momus.ts b/src/agents/momus.ts index ae9ada612..457e354b5 100644 --- a/src/agents/momus.ts +++ b/src/agents/momus.ts @@ -197,7 +197,6 @@ export function createMomusAgent(model: string): AgentConfig { ]) const base = { - name: "Momus (Plan Critic)", description: "Expert reviewer for evaluating work plans against rigorous clarity, verifiability, and completeness standards. (Momus - OhMyOpenCode)", mode: MODE, diff --git a/src/agents/sisyphus.ts b/src/agents/sisyphus.ts index d4ca62d10..11ecdc34b 100644 --- a/src/agents/sisyphus.ts +++ b/src/agents/sisyphus.ts @@ -539,7 +539,6 @@ export function createSisyphusAgent( call_omo_agent: "deny", } as AgentConfig["permission"]; const base = { - name: "Sisyphus (Ultraworker)", description: "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before exploration, delegates strategically via category+skills combinations. Uses explore for internal code (parallel-friendly), librarian for external docs. (Sisyphus - OhMyOpenCode)", mode: MODE, diff --git a/src/plugin-handlers/prometheus-agent-config-builder.ts b/src/plugin-handlers/prometheus-agent-config-builder.ts index 0db8ec056..54fa0ddc8 100644 --- a/src/plugin-handlers/prometheus-agent-config-builder.ts +++ b/src/plugin-handlers/prometheus-agent-config-builder.ts @@ -66,7 +66,6 @@ export async function buildPrometheusAgentConfig(params: { params.pluginPrometheusOverride?.maxTokens ?? categoryConfig?.maxTokens; const base: Record = { - name: "Prometheus (Plan Builder)", ...(resolvedModel ? { model: resolvedModel } : {}), ...(variantToUse ? { variant: variantToUse } : {}), mode: "all", diff --git a/src/shared/agent-display-names.test.ts b/src/shared/agent-display-names.test.ts index 05da7d5c0..3d7276a1b 100644 --- a/src/shared/agent-display-names.test.ts +++ b/src/shared/agent-display-names.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "bun:test" -import { AGENT_DISPLAY_NAMES, getAgentDisplayName } from "./agent-display-names" +import { AGENT_DISPLAY_NAMES, getAgentDisplayName, getAgentConfigKey } from "./agent-display-names" describe("getAgentDisplayName", () => { it("returns display name for lowercase config key (new format)", () => { @@ -135,6 +135,47 @@ describe("getAgentDisplayName", () => { }) }) +describe("getAgentConfigKey", () => { + it("resolves display name to config key", () => { + // given display name "Sisyphus (Ultraworker)" + // when getAgentConfigKey called + // then returns "sisyphus" + expect(getAgentConfigKey("Sisyphus (Ultraworker)")).toBe("sisyphus") + }) + + it("resolves display name case-insensitively", () => { + // given display name in different case + // when getAgentConfigKey called + // then returns "atlas" + expect(getAgentConfigKey("atlas (plan executor)")).toBe("atlas") + }) + + it("passes through lowercase config keys unchanged", () => { + // given lowercase config key "prometheus" + // when getAgentConfigKey called + // then returns "prometheus" + expect(getAgentConfigKey("prometheus")).toBe("prometheus") + }) + + it("returns lowercased unknown agents", () => { + // given unknown agent name + // when getAgentConfigKey called + // then returns lowercased + expect(getAgentConfigKey("Custom-Agent")).toBe("custom-agent") + }) + + it("resolves all core agent display names", () => { + // given all core display names + // when/then each resolves to its config key + expect(getAgentConfigKey("Hephaestus (Deep Agent)")).toBe("hephaestus") + expect(getAgentConfigKey("Prometheus (Plan Builder)")).toBe("prometheus") + expect(getAgentConfigKey("Atlas (Plan Executor)")).toBe("atlas") + expect(getAgentConfigKey("Metis (Plan Consultant)")).toBe("metis") + expect(getAgentConfigKey("Momus (Plan Critic)")).toBe("momus") + expect(getAgentConfigKey("Sisyphus-Junior")).toBe("sisyphus-junior") + }) +}) + describe("AGENT_DISPLAY_NAMES", () => { it("contains all expected agent mappings", () => { // given expected mappings diff --git a/src/shared/agent-display-names.ts b/src/shared/agent-display-names.ts index 4370da366..a0bda2241 100644 --- a/src/shared/agent-display-names.ts +++ b/src/shared/agent-display-names.ts @@ -35,4 +35,20 @@ export function getAgentDisplayName(configKey: string): string { // Unknown agent: return original key return configKey +} + +const REVERSE_DISPLAY_NAMES: Record = Object.fromEntries( + Object.entries(AGENT_DISPLAY_NAMES).map(([key, displayName]) => [displayName.toLowerCase(), key]), +) + +/** + * Resolve an agent name (display name or config key) to its lowercase config key. + * "Atlas (Plan Executor)" → "atlas", "atlas" → "atlas", "unknown" → "unknown" + */ +export function getAgentConfigKey(agentName: string): string { + const lower = agentName.toLowerCase() + const reversed = REVERSE_DISPLAY_NAMES[lower] + if (reversed !== undefined) return reversed + if (AGENT_DISPLAY_NAMES[lower] !== undefined) return lower + return lower } \ No newline at end of file