Skip to content

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

SessionManager

eventBus

IEventBus

hooks

HooksManager

conversationContext

ConversationContext

transport

LLMTransport

clientTransport

IClientChannel

model

LanguageModelV1

getInstructionSuffix?

() => string

extraTools?

ToolDefinition[] = []

subagentCallbacks?

SubagentEventCallbacks

externalAudioCallbacks?

ExternalAudioCallbacks

Returns

AgentRouter

Properties

responseModality?

optional responseModality: "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

MainAgent


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

ToolCall

subagentConfig

SubagentConfig

externalSignal?

AbortSignal

Returns

Promise<SubagentResult>


registerAgents()

registerAgents(agents): void

Defined in: agent/agent-router.ts:89

Parameters

agents

MainAgent[]

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>

Built with VitePress