refactor(agents): drop ZWSP prefixes from agent display names

The sort shim from the previous commit enforces canonical core ordering at runtime, so ZWSP prefixes are no longer needed. Removing them eliminates the Bun.stringWidth vs terminal-width drift that broke the TUI status bar (#3259).

Drop AGENT_LIST_SORT_PREFIXES and getAgentRuntimeName from agent-display-names; switch all call sites to getAgentDisplayName. getAgentListDisplayName stays as a thin alias for external importers.

Keep stripInvisibleAgentCharacters and the ZWSP regex paths so legacy session state and configs from v3.14.0-v3.16.0 still resolve.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-04-27 17:36:05 +09:00
parent dffe5a305b
commit 333ad3aadd
13 changed files with 201 additions and 70 deletions
+12 -12
View File
@@ -3,7 +3,7 @@
import { describe, test, expect, spyOn, beforeEach, afterEach, mock } from "bun:test"
import type { CategoryConfig } from "../config/schema"
import type { OhMyOpenCodeConfig } from "../config"
import { getAgentDisplayName, getAgentListDisplayName, getAgentRuntimeName } from "../shared/agent-display-names"
import { getAgentDisplayName, getAgentListDisplayName } from "../shared/agent-display-names"
import { resolveCategoryConfig } from "./category-config-resolver"
import * as agents from "../agents"
@@ -359,19 +359,19 @@ describe("Plan agent demote behavior", () => {
expect(emittedCoreEntries).toEqual([
[
getAgentListDisplayName("sisyphus"),
expect.objectContaining({ name: getAgentRuntimeName("sisyphus") }),
expect.objectContaining({ name: getAgentListDisplayName("sisyphus") }),
],
[
getAgentListDisplayName("hephaestus"),
expect.objectContaining({ name: getAgentRuntimeName("hephaestus") }),
expect.objectContaining({ name: getAgentListDisplayName("hephaestus") }),
],
[
getAgentListDisplayName("prometheus"),
expect.objectContaining({ name: getAgentRuntimeName("prometheus") }),
expect.objectContaining({ name: getAgentListDisplayName("prometheus") }),
],
[
getAgentListDisplayName("atlas"),
expect.objectContaining({ name: getAgentRuntimeName("atlas") }),
expect.objectContaining({ name: getAgentListDisplayName("atlas") }),
],
])
})
@@ -540,7 +540,7 @@ describe("default_agent behavior with Sisyphus orchestration", () => {
await handler(config)
// then
expect(config.default_agent).toBe(getAgentRuntimeName("hephaestus"))
expect(config.default_agent).toBe(getAgentDisplayName("hephaestus"))
})
test("canonicalizes configured default_agent when key uses mixed case", async () => {
@@ -564,7 +564,7 @@ describe("default_agent behavior with Sisyphus orchestration", () => {
await handler(config)
// then
expect(config.default_agent).toBe(getAgentRuntimeName("hephaestus"))
expect(config.default_agent).toBe(getAgentDisplayName("hephaestus"))
})
test("canonicalizes configured default_agent key to display name", async () => {
@@ -588,7 +588,7 @@ describe("default_agent behavior with Sisyphus orchestration", () => {
await handler(config)
// #then
expect(config.default_agent).toBe(getAgentRuntimeName("hephaestus"))
expect(config.default_agent).toBe(getAgentDisplayName("hephaestus"))
})
test("preserves existing display-name default_agent", async () => {
@@ -613,7 +613,7 @@ describe("default_agent behavior with Sisyphus orchestration", () => {
await handler(config)
// #then
expect(config.default_agent).toBe(getAgentRuntimeName("hephaestus"))
expect(config.default_agent).toBe(getAgentDisplayName("hephaestus"))
})
test("sets default_agent to sisyphus when missing", async () => {
@@ -636,7 +636,7 @@ describe("default_agent behavior with Sisyphus orchestration", () => {
await handler(config)
// #then
expect(config.default_agent).toBe(getAgentRuntimeName("sisyphus"))
expect(config.default_agent).toBe(getAgentDisplayName("sisyphus"))
})
test("uses canonical default_agent display name so OpenCode lookups match emitted agent keys", async () => {
@@ -660,7 +660,7 @@ describe("default_agent behavior with Sisyphus orchestration", () => {
await handler(config)
// then
expect(config.default_agent).toBe(getAgentRuntimeName("hephaestus"))
expect(config.default_agent).toBe(getAgentDisplayName("hephaestus"))
})
test("sets default_agent to sisyphus when configured default_agent is empty after trim", async () => {
@@ -684,7 +684,7 @@ describe("default_agent behavior with Sisyphus orchestration", () => {
await handler(config)
// then
expect(config.default_agent).toBe(getAgentRuntimeName("sisyphus"))
expect(config.default_agent).toBe(getAgentDisplayName("sisyphus"))
})
test("preserves custom default_agent names while trimming whitespace", async () => {