From 6a8bdcaa25b06fbb421a8c3f8b07d80131984c8c Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 4 May 2026 01:43:55 +0900 Subject: [PATCH] feat(team-mode): add resolveCallerTeamLead helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) --- .../team-mode/resolve-caller-team-lead.ts | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/features/team-mode/resolve-caller-team-lead.ts diff --git a/src/features/team-mode/resolve-caller-team-lead.ts b/src/features/team-mode/resolve-caller-team-lead.ts new file mode 100644 index 000000000..4a8891c05 --- /dev/null +++ b/src/features/team-mode/resolve-caller-team-lead.ts @@ -0,0 +1,47 @@ +import { getAgentConfigKey, stripAgentListSortPrefix } from "../../shared/agent-display-names" + +import { AGENT_ELIGIBILITY_REGISTRY, type TeamSpec } from "./types" + +export type CallerTeamLead = { + agentTypeId?: string + displayName?: string + isEligibleForTeamLead: boolean +} + +export function resolveCallerTeamLead(rawAgentName: string | undefined): CallerTeamLead { + if (typeof rawAgentName !== "string") { + return { isEligibleForTeamLead: false } + } + + const displayName = stripAgentListSortPrefix(rawAgentName).trim() + if (!displayName) { + return { isEligibleForTeamLead: false } + } + + const agentTypeId = getAgentConfigKey(displayName) + const eligibility = AGENT_ELIGIBILITY_REGISTRY[agentTypeId] + if (!eligibility || eligibility.verdict === "hard-reject") { + return { + displayName, + isEligibleForTeamLead: false, + } + } + + return { + agentTypeId, + displayName, + isEligibleForTeamLead: true, + } +} + +export function shouldReuseCallerLeadSession(spec: TeamSpec, callerAgentTypeId: string | undefined): boolean { + if (callerAgentTypeId === undefined) { + return false + } + + if (spec.leadAgentId === undefined) { + return false + } + + return true +}