Class: VoiceNodeBuilder
Defined in: packages/agentos/src/orchestration/builders/VoiceNodeBuilder.ts:99
Fluent DSL builder for voice graph nodes.
Collects exit-reason -> target-node mappings via on and produces a
fully-specified GraphNode via build.
The builder is designed to be chained. Each on() call returns this,
enabling a declarative voice node definition:
voiceNode('listen', { mode: 'conversation', maxTurns: 5 })
.on('completed', 'summarize')
.on('interrupted', 'listen')
.on('hangup', 'end')
See
voiceNode -- the factory function that creates builder instances.
See VoiceNodeExecutor for the runtime that resolves exit reasons and edge routing.
Constructors
Constructor
new VoiceNodeBuilder(
id,config):VoiceNodeBuilder
Defined in: packages/agentos/src/orchestration/builders/VoiceNodeBuilder.ts:119
Creates a new VoiceNodeBuilder.
Parameters
id
string
Node identifier; exposed as a readonly property for introspection by callers that need to reference this node before building (e.g. for cross-node edge wiring).
config
VoiceNodeConfig forwarded to the node's executorConfig
at build time. Immutable after construction.
Returns
VoiceNodeBuilder
Properties
id
readonlyid:string
Defined in: packages/agentos/src/orchestration/builders/VoiceNodeBuilder.ts:121
The node id assigned at construction time.
Methods
build()
build():
GraphNode
Defined in: packages/agentos/src/orchestration/builders/VoiceNodeBuilder.ts:195
Produce a GraphNode IR object from the accumulated builder state.
The returned node has:
type: 'voice'in sync withexecutorConfig.type.executionMode: 'react_bounded'-- voice nodes run a multi-turn loop.effectClass: 'external'-- voice I/O touches the real world.checkpoint: 'before'-- snapshot taken before the session starts so the run can be resumed from the start of the voice turn if the process crashes.edges-- plain object mapping exit-reason strings to target node ids, populated from allon()calls. The compiler is responsible for expanding these intoGraphEdgeinstances.
Returns
A GraphNode with the edges extension field. Cast to any
to accommodate the edges field not present on the base interface.
Example
const node = voiceNode('greet', { mode: 'conversation' })
.on('completed', 'process')
.build();
console.log(node.type); // 'voice'
console.log(node.edges.completed); // 'process'
on()
on(
exitReason,target):this
Defined in: packages/agentos/src/orchestration/builders/VoiceNodeBuilder.ts:160
Register an exit-reason -> target-node route.
When the voice node's session ends with exitReason, the graph transitions
to target. Multiple calls to on() accumulate routes; calling on() with
a reason that was already registered overwrites the previous target.
Common exit reasons
| Reason | When it fires |
|---|---|
'completed' | Session ended normally (catch-all). |
'turns-exhausted' | maxTurns reached. |
'hangup' | Transport disconnected. |
'interrupted' | User barged in (VoiceInterruptError). |
'silence-timeout' | No speech activity for 30 seconds. |
'keyword:<word>' | A final_transcript contained an exit keyword. |
Parameters
exitReason
string
The reason string returned by the voice executor.
target
Either the string id of the target node, or an object
with an id property (compatible with other builder
instances, e.g. voiceNode('other', ...)).
string | { id: string; }
Returns
this
this for fluent chaining.
Example
builder
.on('completed', 'next-node')
.on('hangup', { id: 'cleanup-node' });