fix(agent): sanitize backslash/quote from agent name in launch() and background-executor

Agent names like \hephaestus\ cause 'Agent not found' errors because
sanitizeSubagentType() was only called in subagent-resolver.ts but not
in the direct manager.launch() path or background-executor.ts.

- manager.ts: strip leading/trailing backslash/quote chars from input.agent
  before validation so \hephaestus\ → hephaestus
- background-executor.ts: call sanitizeSubagentType(args.subagent_type)
  instead of passing raw value to manager.launch()
- agent-display-names.ts: reuse sanitizeSubagentType in stripAgentListSortPrefix
- Add unit tests for all three fix points

Fixes: sessions dying with 'Agent not found: \hephaestus\'
This commit is contained in:
YeonGyu-Kim
2026-05-06 17:41:41 +09:00
parent 6a341fcb8f
commit 25d183fbe8
7 changed files with 134 additions and 24 deletions
@@ -8,6 +8,7 @@ import { resolveMessageContext } from "../../features/hook-message-injector"
import { getSessionAgent } from "../../features/claude-code-session-state"
import { getMessageDir } from "./message-dir"
import { getSessionTools } from "../../shared/session-tools-store"
import { sanitizeSubagentType } from "../delegate-task/subagent-discovery"
export async function executeBackground(
args: CallOmoAgentArgs,
@@ -47,7 +48,7 @@ export async function executeBackground(
const task = await manager.launch({
description: args.description,
prompt: args.prompt,
agent: args.subagent_type,
agent: sanitizeSubagentType(args.subagent_type),
parentSessionId: toolContext.sessionID,
parentMessageId: toolContext.messageID,
parentAgent,