From 9081475ec045d1c438f59ee7d4908128c3a54509 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 27 Apr 2026 17:44:15 +0900 Subject: [PATCH] fix(plugin-handlers): normalize default agent runtime lookup Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- .../agent-config-handler.test.ts | 50 +++++++++++++++++++ src/plugin-handlers/agent-config-handler.ts | 10 +++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/plugin-handlers/agent-config-handler.test.ts b/src/plugin-handlers/agent-config-handler.test.ts index afca8f62b..74ea03c8a 100644 --- a/src/plugin-handlers/agent-config-handler.test.ts +++ b/src/plugin-handlers/agent-config-handler.test.ts @@ -191,6 +191,56 @@ describe("applyAgentConfig builtin override protection", () => { } }) + test("normalizes display-name default_agent to runtime agent name", async () => { + // given + const config = createBaseConfig() + config.default_agent = "Sisyphus - Ultraworker" + + // when + await applyAgentConfig({ + config, + pluginConfig: createPluginConfig(), + ctx: { directory: "/tmp" }, + pluginComponents: createPluginComponents(), + }) + + // then + expect(config.default_agent).toBe(getAgentRuntimeName("sisyphus")) + }) + + test("keeps config-key default_agent behavior unchanged", async () => { + // given + const config = createBaseConfig() + config.default_agent = "sisyphus" + + // when + await applyAgentConfig({ + config, + pluginConfig: createPluginConfig(), + ctx: { directory: "/tmp" }, + pluginComponents: createPluginComponents(), + }) + + // then + expect(config.default_agent).toBe(getAgentRuntimeName("sisyphus")) + }) + + test("keeps fallback default_agent behavior unchanged", async () => { + // given + const config = createBaseConfig() + + // when + await applyAgentConfig({ + config, + pluginConfig: createPluginConfig(), + ctx: { directory: "/tmp" }, + pluginComponents: createPluginComponents(), + }) + + // then + expect(config.default_agent).toBe(getAgentRuntimeName("sisyphus")) + }) + test("filters user agents whose key matches the builtin display-name alias", async () => { // given loadUserAgentsSpy.mockReturnValue({ diff --git a/src/plugin-handlers/agent-config-handler.ts b/src/plugin-handlers/agent-config-handler.ts index 384871114..cc29d71c8 100644 --- a/src/plugin-handlers/agent-config-handler.ts +++ b/src/plugin-handlers/agent-config-handler.ts @@ -2,7 +2,11 @@ import { createBuiltinAgents } from "../agents"; import { createSisyphusJuniorAgentWithOverrides } from "../agents/sisyphus-junior"; import type { OhMyOpenCodeConfig } from "../config"; import { isTaskSystemEnabled, log, migrateAgentConfig } from "../shared"; -import { getAgentRuntimeName } from "../shared/agent-display-names"; +import { + getAgentConfigKey, + getAgentRuntimeName, + normalizeAgentForPromptKey, +} from "../shared/agent-display-names"; import { AGENT_NAME_MAP } from "../shared/migration"; import { registerAgentName } from "../features/claude-code-session-state"; import { @@ -189,8 +193,10 @@ export async function applyAgentConfig(params: { if (isSisyphusEnabled && builtinAgents.sisyphus) { if (configuredDefaultAgent) { + const configKey = getAgentConfigKey(configuredDefaultAgent); + const runtimeConfigKey = normalizeAgentForPromptKey(configuredDefaultAgent) ?? configKey; (params.config as { default_agent?: string }).default_agent = - getAgentRuntimeName(configuredDefaultAgent); + getAgentRuntimeName(runtimeConfigKey); } else { (params.config as { default_agent?: string }).default_agent = getAgentRuntimeName("sisyphus");