bodhi-realtime-agent / AgentRouter
Class: AgentRouter
Defined in: agent/agent-router.ts:68
Manages agent lifecycle: transfers between MainAgents and handoffs to background subagents.
Transfer flow (agent → agent): onExit → agent.exit event → TRANSFERRING → buffer audio → disconnect → reconnect with new agent config → replay context + buffered audio → ACTIVE → onEnter → agent.enter event → agent.transfer event
Handoff flow (background tool → subagent): Create AbortController → build context snapshot → agent.handoff event → runSubagent() async → return SubagentResult
Constructors
Constructor
new AgentRouter(
sessionManager,eventBus,hooks,conversationContext,transport,clientTransport,model,getInstructionSuffix?,extraTools?,subagentCallbacks?,externalAudioCallbacks?):AgentRouter
Defined in: agent/agent-router.ts:75
Parameters
sessionManager
eventBus
hooks
conversationContext
transport
clientTransport
model
LanguageModelV1
getInstructionSuffix?
() => string
extraTools?
ToolDefinition[] = []
subagentCallbacks?
externalAudioCallbacks?
ExternalAudioCallbacks
Returns
AgentRouter
Properties
responseModality?
optionalresponseModality:"text"|"audio"
Defined in: agent/agent-router.ts:73
Response modality to include in transfer SessionUpdate (set by VoiceSession for TTS).
Accessors
activeAgent
Get Signature
get activeAgent():
MainAgent
Defined in: agent/agent-router.ts:103
Returns
activeSubagentCount
Get Signature
get activeSubagentCount():
number
Defined in: agent/agent-router.ts:345
Returns
number
Methods
cancelSubagent()
cancelSubagent(
toolCallId):void
Defined in: agent/agent-router.ts:336
Abort a running background subagent by its originating tool call ID.
Parameters
toolCallId
string
Returns
void
findSessionByRequestId()
findSessionByRequestId(
requestId):SubagentSession|null
Defined in: agent/agent-router.ts:231
Find the SubagentSession that has a pending UI request with the given requestId.
Parameters
requestId
string
Returns
SubagentSession | null
getSubagentSession()
getSubagentSession(
toolCallId):SubagentSession|null
Defined in: agent/agent-router.ts:226
Look up the SubagentSession for an active interactive subagent, or null.
Parameters
toolCallId
string
Returns
SubagentSession | null
handoff()
handoff(
toolCall,subagentConfig,externalSignal?):Promise<SubagentResult>
Defined in: agent/agent-router.ts:243
Spawn a background subagent to handle a tool call asynchronously.
Parameters
toolCall
subagentConfig
externalSignal?
AbortSignal
Returns
Promise<SubagentResult>
registerAgents()
registerAgents(
agents):void
Defined in: agent/agent-router.ts:89
Parameters
agents
Returns
void
setInitialAgent()
setInitialAgent(
agentName):void
Defined in: agent/agent-router.ts:95
Parameters
agentName
string
Returns
void
transfer()
transfer(
toAgentName):Promise<void>
Defined in: agent/agent-router.ts:115
Transfer the active LLM session to a different agent. Uses transport.transferSession() — the transport decides whether to apply in-place (OpenAI session.update) or reconnect-based (Gemini).
Parameters
toAgentName
string
Returns
Promise<void>