?
AgentChatEvent
TypeCovers every event in the message stream as one union discriminated on `type`.
Every event sendMessage streams, as one union discriminated on type, delivered raw to onEvent. The named callbacks cover the common members (text, thinking, tool_call_start, tool_call_result, client_tool_call, error); reach for the union to handle the lower-level ones like tool_use and tool_input_delta. Every member also carries a ts timestamp.
AgentChatEvent.ts
type AgentChatEvent = | { type: 'text'; text: string; ts: number } | { type: 'thinking'; text: string; ts: number } | { type: 'thinking_complete'; thinking: string; signature: string; ts: number } | { type: 'tool_use'; id: string; name: string; input: object; ts: number } | { type: 'tool_input_delta'; id: string; name: string; delta: string; ts: number } | { type: 'tool_call_start'; id: string; name: string; ts: number } | { type: 'tool_call_result'; id: string; output: unknown; ts: number } | { type: 'client_tool_call'; id: string; name: string; input: unknown; ts: number } | { type: 'done'; stopReason: string; usage: { inputTokens: number; outputTokens: number }; ts: number } | { type: 'error'; error: string; ts: number }
Fields
'text'
{ text }
An assistant text delta; append it. Covered by onText.
'thinking'
{ text }
An extended-thinking delta. Covered by onThinking.
'thinking_complete'
{ thinking, signature }
Thinking finished, with its full text and signature.
'tool_use'
{ id, name, input }
The model requested a tool call, with parsed input.
'tool_input_delta'
{ id, name, delta }
A streaming fragment of a tool call's input JSON.
'tool_call_start'
{ id, name }
A tool call began executing. Covered by onToolCallStart.
'tool_call_result'
{ id, output }
A tool call returned its result. Covered by onToolCallResult.
'client_tool_call'
{ id, name, input }
The agent invoked a browser-side client tool. Covered by onClientToolCall.
'done'
{ stopReason, usage }
The stream is complete; the promise resolves with this.
'error'
{ error }
A stream-level error. Covered by onError.
Handle the raw stream
chat.sendMessage(threadId, text, {
onEvent: (e: AgentChatEvent) => {
if (e.type === 'tool_input_delta') appendToolInput(e.id, e.delta);
},
});