Chat Events
chat/events
Section titled “chat/events”Classes
Section titled “Classes”ChatEventBus
Section titled “ChatEventBus”Defined in: chat/events.ts:222
Chat event bus: a typed event emitter specialized for ChatEvent types with middleware pipeline support.
Events pass through the middleware pipeline before reaching listeners. Middleware can inspect, transform, or suppress events.
Example
Section titled “Example”const bus = new ChatEventBus();
// Add middlewarebus.use((ctx) => { console.log(`[${ctx.event.type}]`); ctx.next();});
// Listen for eventsbus.on("message:delta", (event) => { console.log(event.text);});
// Emit eventsbus.emit("message:delta", { type: "message:delta", messageId: id, text: "hi" });Extends
Section titled “Extends”Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new ChatEventBus():
ChatEventBus
Returns
Section titled “Returns”Inherited from
Section titled “Inherited from”Methods
Section titled “Methods”clearMiddleware()
Section titled “clearMiddleware()”clearMiddleware():
void
Defined in: chat/events.ts:296
Remove all middleware functions.
Returns
Section titled “Returns”void
emit()
Section titled “emit()”emit<
K>(event,payload):void
Defined in: chat/events.ts:246
Emit a chat event through the middleware pipeline, then to listeners.
Type Parameters
Section titled “Type Parameters”K extends "heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end"
Parameters
Section titled “Parameters”K
ChatEvent type string
payload
Section titled “payload”ChatEventMap[K]
The full ChatEvent object
Returns
Section titled “Returns”void
Overrides
Section titled “Overrides”eventNames()
Section titled “eventNames()”eventNames(): (
"heartbeat"|"error"|"done"|"usage"|"message:start"|"message:delta"|"message:complete"|"tool:start"|"tool:complete"|"thinking:start"|"thinking:delta"|"thinking:end"|"permission:request"|"permission:response"|"session:created"|"session:updated"|"typing:start"|"typing:end")[]
Defined in: chat/events.ts:138
Get all event names that have at least one listener.
Returns
Section titled “Returns”("heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end")[]
Array of event names
Inherited from
Section titled “Inherited from”listenerCount()
Section titled “listenerCount()”listenerCount<
K>(event):number
Defined in: chat/events.ts:129
Get the number of listeners for a specific event.
Type Parameters
Section titled “Type Parameters”K extends "heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end"
Parameters
Section titled “Parameters”K
Event name
Returns
Section titled “Returns”number
Number of listeners
Inherited from
Section titled “Inherited from”TypedEventEmitter.listenerCount
middlewareCount()
Section titled “middlewareCount()”middlewareCount():
number
Defined in: chat/events.ts:304
Get the number of registered middleware functions.
Returns
Section titled “Returns”number
Number of middleware
off<
K>(event,listener):void
Defined in: chat/events.ts:90
Remove a specific listener from an event.
Type Parameters
Section titled “Type Parameters”K extends "heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end"
Parameters
Section titled “Parameters”K
Event name
listener
Section titled “listener”Listener<ChatEventMap[K]>
The listener to remove
Returns
Section titled “Returns”void
Inherited from
Section titled “Inherited from”on<
K>(event,listener):Unsubscribe
Defined in: chat/events.ts:55
Subscribe to an event.
Type Parameters
Section titled “Type Parameters”K extends "heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end"
Parameters
Section titled “Parameters”K
Event name
listener
Section titled “listener”Listener<ChatEventMap[K]>
Callback receiving the event payload
Returns
Section titled “Returns”Unsubscribe function
Inherited from
Section titled “Inherited from”once()
Section titled “once()”once<
K>(event,listener):Unsubscribe
Defined in: chat/events.ts:77
Subscribe to an event, firing the listener at most once.
Type Parameters
Section titled “Type Parameters”K extends "heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end"
Parameters
Section titled “Parameters”K
Event name
listener
Section titled “listener”Listener<ChatEventMap[K]>
Callback receiving the event payload
Returns
Section titled “Returns”Unsubscribe function
Inherited from
Section titled “Inherited from”removeAllListeners()
Section titled “removeAllListeners()”removeAllListeners<
K>(event?):void
Defined in: chat/events.ts:116
Remove all listeners for a specific event, or all events if no event specified.
Type Parameters
Section titled “Type Parameters”K extends "heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end"
Parameters
Section titled “Parameters”event?
Section titled “event?”K
Optional event name
Returns
Section titled “Returns”void
Inherited from
Section titled “Inherited from”TypedEventEmitter.removeAllListeners
use(
middleware):Unsubscribe
Defined in: chat/events.ts:230
Register a middleware function. Middleware runs in registration order.
Parameters
Section titled “Parameters”middleware
Section titled “middleware”Middleware function
Returns
Section titled “Returns”Unsubscribe function to remove the middleware
TypedEventEmitter
Section titled “TypedEventEmitter”Defined in: chat/events.ts:46
Generic type-safe event emitter parameterized by an EventMap.
Example
Section titled “Example”type MyEvents = { message: string; count: number; done: void;};const emitter = new TypedEventEmitter<MyEvents>();emitter.on("message", (text) => console.log(text));emitter.emit("message", "hello");Extended by
Section titled “Extended by”Type Parameters
Section titled “Type Parameters”T extends EventMap
Map of event names to payload types
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new TypedEventEmitter<
T>():TypedEventEmitter<T>
Returns
Section titled “Returns”Methods
Section titled “Methods”emit()
Section titled “emit()”emit<
K>(event,payload):void
Defined in: chat/events.ts:104
Emit an event, calling all registered listeners synchronously.
Type Parameters
Section titled “Type Parameters”K extends string | number | symbol
Parameters
Section titled “Parameters”K
Event name
payload
Section titled “payload”T[K]
Event payload
Returns
Section titled “Returns”void
eventNames()
Section titled “eventNames()”eventNames(): keyof
T[]
Defined in: chat/events.ts:138
Get all event names that have at least one listener.
Returns
Section titled “Returns”keyof T[]
Array of event names
listenerCount()
Section titled “listenerCount()”listenerCount<
K>(event):number
Defined in: chat/events.ts:129
Get the number of listeners for a specific event.
Type Parameters
Section titled “Type Parameters”K extends string | number | symbol
Parameters
Section titled “Parameters”K
Event name
Returns
Section titled “Returns”number
Number of listeners
off<
K>(event,listener):void
Defined in: chat/events.ts:90
Remove a specific listener from an event.
Type Parameters
Section titled “Type Parameters”K extends string | number | symbol
Parameters
Section titled “Parameters”K
Event name
listener
Section titled “listener”Listener<T[K]>
The listener to remove
Returns
Section titled “Returns”void
on<
K>(event,listener):Unsubscribe
Defined in: chat/events.ts:55
Subscribe to an event.
Type Parameters
Section titled “Type Parameters”K extends string | number | symbol
Parameters
Section titled “Parameters”K
Event name
listener
Section titled “listener”Listener<T[K]>
Callback receiving the event payload
Returns
Section titled “Returns”Unsubscribe function
once()
Section titled “once()”once<
K>(event,listener):Unsubscribe
Defined in: chat/events.ts:77
Subscribe to an event, firing the listener at most once.
Type Parameters
Section titled “Type Parameters”K extends string | number | symbol
Parameters
Section titled “Parameters”K
Event name
listener
Section titled “listener”Listener<T[K]>
Callback receiving the event payload
Returns
Section titled “Returns”Unsubscribe function
removeAllListeners()
Section titled “removeAllListeners()”removeAllListeners<
K>(event?):void
Defined in: chat/events.ts:116
Remove all listeners for a specific event, or all events if no event specified.
Type Parameters
Section titled “Type Parameters”K extends string | number | symbol
Parameters
Section titled “Parameters”event?
Section titled “event?”K
Optional event name
Returns
Section titled “Returns”void
Interfaces
Section titled “Interfaces”MiddlewareContext
Section titled “MiddlewareContext”Defined in: chat/events.ts:159
Context passed to middleware functions. Contains the event and control methods for the middleware pipeline.
Properties
Section titled “Properties”event:
ChatEvent
Defined in: chat/events.ts:161
The current event (may be transformed by prior middleware)
next()
Section titled “next()”next: () =>
void
Defined in: chat/events.ts:163
Call the next middleware in the chain, or deliver to listeners if last
Returns
Section titled “Returns”void
suppress()
Section titled “suppress()”suppress: () =>
void
Defined in: chat/events.ts:165
Suppress the event — do not deliver to listeners or subsequent middleware
Returns
Section titled “Returns”void
Type Aliases
Section titled “Type Aliases”ChatEventMap
Section titled “ChatEventMap”ChatEventMap =
{ [K in ChatEventType]: Extract<ChatEvent, { type: K }> }
Defined in: chat/events.ts:149
Map of ChatEvent type strings to their corresponding ChatEvent payloads. Used to parameterize TypedEventEmitter for chat events.
EventMap
Section titled “EventMap”EventMap =
Record<string,any>
Defined in: chat/events.ts:17
Constraint for event maps: keys are strings, values are payloads
EventMiddleware()
Section titled “EventMiddleware()”EventMiddleware = (
ctx) =>void
Defined in: chat/events.ts:192
Middleware function for intercepting, transforming, or suppressing events. EventMiddleware operates at the ChatEventBus level.
Parameters
Section titled “Parameters”Middleware context with event, next(), and suppress()
Returns
Section titled “Returns”void
Example
Section titled “Example”// Logging middlewareconst logger: EventMiddleware = (ctx) => { console.log(`Event: ${ctx.event.type}`); ctx.next();};
// Suppressing middlewareconst filter: EventMiddleware = (ctx) => { if (ctx.event.type === "heartbeat") { ctx.suppress(); } else { ctx.next(); }};Listener()
Section titled “Listener()”Listener<
T> = (payload) =>void
Defined in: chat/events.ts:22
Listener callback for a specific event
Type Parameters
Section titled “Type Parameters”T
Parameters
Section titled “Parameters”payload
Section titled “payload”T
Returns
Section titled “Returns”void
Unsubscribe()
Section titled “Unsubscribe()”Unsubscribe = () =>
void
Defined in: chat/events.ts:25
Unsubscribe function returned by on/once
Returns
Section titled “Returns”void
Functions
Section titled “Functions”collectText()
Section titled “collectText()”collectText(
source):Promise<string>
Defined in: chat/events.ts:396
Collect text from message:delta events into a single string.
Parameters
Section titled “Parameters”source
Section titled “source”AsyncIterable<ChatEvent>
Async iterable of ChatEvents
Returns
Section titled “Returns”Promise<string>
Complete text assembled from message:delta payloads
Example
Section titled “Example”const fullText = await collectText(stream);eventFilter()
Section titled “eventFilter()”eventFilter(…
types): (event) =>boolean
Defined in: chat/events.ts:323
Create a filter function that passes only events of specified types.
Parameters
Section titled “Parameters”…("heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end")[]
Event types to allow through
Returns
Section titled “Returns”Predicate function for filtering ChatEvents
(
event):boolean
Parameters
Section titled “Parameters”Returns
Section titled “Returns”boolean
Example
Section titled “Example”const isTextEvent = eventFilter("message:start", "message:delta", "message:complete");const textEvents = allEvents.filter(isTextEvent);filterEvents()
Section titled “filterEvents()”filterEvents(
source, …types):AsyncIterable<ChatEvent>
Defined in: chat/events.ts:344
Filter an async iterable of ChatEvents to only specified types.
Parameters
Section titled “Parameters”source
Section titled “source”AsyncIterable<ChatEvent>
Async iterable of ChatEvents
…("heartbeat" | "error" | "done" | "usage" | "message:start" | "message:delta" | "message:complete" | "tool:start" | "tool:complete" | "thinking:start" | "thinking:delta" | "thinking:end" | "permission:request" | "permission:response" | "session:created" | "session:updated" | "typing:start" | "typing:end")[]
Event types to keep
Returns
Section titled “Returns”AsyncIterable<ChatEvent>
Async iterable of filtered ChatEvents
Example
Section titled “Example”for await (const event of filterEvents(stream, "message:delta", "message:complete")) { // only message:delta and message:complete events}mapEvents()
Section titled “mapEvents()”mapEvents<
R>(source,transform):AsyncIterable<R>
Defined in: chat/events.ts:373
Map/transform events from an async iterable.
Type Parameters
Section titled “Type Parameters”R
Parameters
Section titled “Parameters”source
Section titled “source”AsyncIterable<ChatEvent>
Async iterable of ChatEvents
transform
Section titled “transform”(event) => R | null
Function to transform each event (return null to skip)
Returns
Section titled “Returns”AsyncIterable<R>
Async iterable of transformed values
Example
Section titled “Example”// Extract text from message:delta eventsconst texts = mapEvents(stream, (event) => event.type === "message:delta" ? event.text : null);