Skip to content

Chat Barrel Exports

Defined in: chat/backends/base.ts:34

Abstract base for backend adapters implementing IChatBackend (core only). Subclasses implement createService() for backend-specific service creation. Resume support is NOT required — subclasses can implement IResumableBackend separately.

new BaseBackendAdapter(name, options): BaseBackendAdapter

Defined in: chat/backends/base.ts:46

string

BackendAdapterOptions

BaseBackendAdapter

protected readonly _agentConfig: FullAgentConfig

Defined in: chat/backends/base.ts:39

readonly name: string

Defined in: chat/backends/base.ts:35

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

IChatBackend.name

get agentService(): IAgentService

Defined in: chat/backends/base.ts:64

IAgentService

get currentModel(): string | undefined

Defined in: chat/backends/base.ts:78

Current effective model

string | undefined

Current effective model

IChatBackend.currentModel

protected assertNotDisposed(): void

Defined in: chat/backends/base.ts:244

void

abstract protected captureSessionId(agent): void

Defined in: chat/backends/base.ts:242

Subclasses capture backend session ID from agent after streaming

IAgent

void

abstract protected createService(): IAgentService

Defined in: chat/backends/base.ts:62

Subclasses create their specific IAgentService

IAgentService

dispose(): Promise<void>

Defined in: chat/backends/base.ts:196

Dispose resources

Promise<void>

IChatBackend.dispose

protected getOrCreateAgent(options?): IAgent

Defined in: chat/backends/base.ts:211

Get or create an agent. Model is passed per-call via RunOptions. Tools are passed per-call via SendMessageOptions — not baked into config. For persistent sessions, reuses agent when model matches.

SendMessageOptions

IAgent

listModels(): Promise<ModelInfo[]>

Defined in: chat/backends/base.ts:186

List available models

Promise<ModelInfo[]>

IChatBackend.listModels

sendMessage(session, message, options?): Promise<ChatMessage<unknown>>

Defined in: chat/backends/base.ts:90

Send a message and receive a complete response

ChatSession

string

SendMessageOptions

Promise<ChatMessage<unknown>>

IChatBackend.sendMessage

setTools(): void

Defined in: chat/backends/base.ts:86

void

No-op. Tools are passed per-call via SendMessageOptions.tools. Kept for backward compatibility with code that calls setTools() directly.

protected streamAgentEvents(agent, messages, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:144

Shared streaming helper: bridges agent events to chat events. Used by both streamMessage() and resume() to avoid duplication.

IAgent

Message[]

SendMessageOptions

AsyncIterable<ChatEvent>

streamMessage(session, message, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:124

Stream a message response as ChatEvents

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

IChatBackend.streamMessage

validate(): Promise<{ errors: string[]; valid: boolean; }>

Defined in: chat/backends/base.ts:191

Validate backend configuration/credentials

Promise<{ errors: string[]; valid: boolean; }>

IChatBackend.validate


Defined in: chat/backends/claude.ts:29

Backend adapter for Claude CLI. Uses persistent session mode for session resume via Claude’s session_id.

new ClaudeChatAdapter(options): ClaudeChatAdapter

Defined in: chat/backends/claude.ts:32

ClaudeChatAdapterOptions

ClaudeChatAdapter

ResumableChatAdapter.constructor

protected readonly _agentConfig: FullAgentConfig

Defined in: chat/backends/base.ts:39

ResumableChatAdapter._agentConfig

readonly name: string

Defined in: chat/backends/base.ts:35

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

ResumableChatAdapter.name

get agentService(): IAgentService

Defined in: chat/backends/base.ts:64

IAgentService

ResumableChatAdapter.agentService

get backendSessionId(): string | null

Defined in: chat/backends/resumable.ts:40

The backend session ID from the last stream, or null if not yet streamed

string | null

The backend session ID from the last stream, or null if not yet streamed

ResumableChatAdapter.backendSessionId

get currentModel(): string | undefined

Defined in: chat/backends/base.ts:78

Current effective model

string | undefined

Current effective model

ResumableChatAdapter.currentModel

protected assertNotDisposed(): void

Defined in: chat/backends/base.ts:244

void

ResumableChatAdapter.assertNotDisposed

canResume(): boolean

Defined in: chat/backends/resumable.ts:44

Whether this adapter supports session resume

boolean

ResumableChatAdapter.canResume

protected captureSessionId(agent): void

Defined in: chat/backends/resumable.ts:82

Subclasses capture backend session ID from agent after streaming

IAgent

void

ResumableChatAdapter.captureSessionId

protected createService(): IAgentService

Defined in: chat/backends/claude.ts:37

Subclasses create their specific IAgentService

IAgentService

ResumableChatAdapter.createService

dispose(): Promise<void>

Defined in: chat/backends/base.ts:196

Dispose resources

Promise<void>

ResumableChatAdapter.dispose

protected getOrCreateAgent(options?): IAgent

Defined in: chat/backends/base.ts:211

Get or create an agent. Model is passed per-call via RunOptions. Tools are passed per-call via SendMessageOptions — not baked into config. For persistent sessions, reuses agent when model matches.

SendMessageOptions

IAgent

ResumableChatAdapter.getOrCreateAgent

listModels(): Promise<ModelInfo[]>

Defined in: chat/backends/base.ts:186

List available models

Promise<ModelInfo[]>

ResumableChatAdapter.listModels

resume(session, backendSessionId, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/resumable.ts:48

Resume a previous session by its backend session ID. Streams events from the resumed session.

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

ChatError with SESSION_EXPIRED if session is no longer valid

ChatError with SESSION_NOT_FOUND if session ID is unknown

ResumableChatAdapter.resume

sendMessage(session, message, options?): Promise<ChatMessage<unknown>>

Defined in: chat/backends/base.ts:90

Send a message and receive a complete response

ChatSession

string

SendMessageOptions

Promise<ChatMessage<unknown>>

ResumableChatAdapter.sendMessage

setTools(): void

Defined in: chat/backends/base.ts:86

void

No-op. Tools are passed per-call via SendMessageOptions.tools. Kept for backward compatibility with code that calls setTools() directly.

ResumableChatAdapter.setTools

protected streamAgentEvents(agent, messages, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:144

Shared streaming helper: bridges agent events to chat events. Used by both streamMessage() and resume() to avoid duplication.

IAgent

Message[]

SendMessageOptions

AsyncIterable<ChatEvent>

ResumableChatAdapter.streamAgentEvents

streamMessage(session, message, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:124

Stream a message response as ChatEvents

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

ResumableChatAdapter.streamMessage

validate(): Promise<{ errors: string[]; valid: boolean; }>

Defined in: chat/backends/base.ts:191

Validate backend configuration/credentials

Promise<{ errors: string[]; valid: boolean; }>

ResumableChatAdapter.validate


Defined in: chat/backends/copilot.ts:29

Backend adapter for GitHub Copilot CLI. Uses persistent session mode for session resume via CLI session ID.

new CopilotChatAdapter(options): CopilotChatAdapter

Defined in: chat/backends/copilot.ts:32

CopilotChatAdapterOptions

CopilotChatAdapter

ResumableChatAdapter.constructor

protected readonly _agentConfig: FullAgentConfig

Defined in: chat/backends/base.ts:39

ResumableChatAdapter._agentConfig

readonly name: string

Defined in: chat/backends/base.ts:35

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

ResumableChatAdapter.name

get agentService(): IAgentService

Defined in: chat/backends/base.ts:64

IAgentService

ResumableChatAdapter.agentService

get backendSessionId(): string | null

Defined in: chat/backends/resumable.ts:40

The backend session ID from the last stream, or null if not yet streamed

string | null

The backend session ID from the last stream, or null if not yet streamed

ResumableChatAdapter.backendSessionId

get currentModel(): string | undefined

Defined in: chat/backends/base.ts:78

Current effective model

string | undefined

Current effective model

ResumableChatAdapter.currentModel

protected assertNotDisposed(): void

Defined in: chat/backends/base.ts:244

void

ResumableChatAdapter.assertNotDisposed

canResume(): boolean

Defined in: chat/backends/resumable.ts:44

Whether this adapter supports session resume

boolean

ResumableChatAdapter.canResume

protected captureSessionId(agent): void

Defined in: chat/backends/resumable.ts:82

Subclasses capture backend session ID from agent after streaming

IAgent

void

ResumableChatAdapter.captureSessionId

protected createService(): IAgentService

Defined in: chat/backends/copilot.ts:37

Subclasses create their specific IAgentService

IAgentService

ResumableChatAdapter.createService

dispose(): Promise<void>

Defined in: chat/backends/base.ts:196

Dispose resources

Promise<void>

ResumableChatAdapter.dispose

protected getOrCreateAgent(options?): IAgent

Defined in: chat/backends/base.ts:211

Get or create an agent. Model is passed per-call via RunOptions. Tools are passed per-call via SendMessageOptions — not baked into config. For persistent sessions, reuses agent when model matches.

SendMessageOptions

IAgent

ResumableChatAdapter.getOrCreateAgent

listModels(): Promise<ModelInfo[]>

Defined in: chat/backends/base.ts:186

List available models

Promise<ModelInfo[]>

ResumableChatAdapter.listModels

resume(session, backendSessionId, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/resumable.ts:48

Resume a previous session by its backend session ID. Streams events from the resumed session.

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

ChatError with SESSION_EXPIRED if session is no longer valid

ChatError with SESSION_NOT_FOUND if session ID is unknown

ResumableChatAdapter.resume

sendMessage(session, message, options?): Promise<ChatMessage<unknown>>

Defined in: chat/backends/base.ts:90

Send a message and receive a complete response

ChatSession

string

SendMessageOptions

Promise<ChatMessage<unknown>>

ResumableChatAdapter.sendMessage

setTools(): void

Defined in: chat/backends/base.ts:86

void

No-op. Tools are passed per-call via SendMessageOptions.tools. Kept for backward compatibility with code that calls setTools() directly.

ResumableChatAdapter.setTools

protected streamAgentEvents(agent, messages, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:144

Shared streaming helper: bridges agent events to chat events. Used by both streamMessage() and resume() to avoid duplication.

IAgent

Message[]

SendMessageOptions

AsyncIterable<ChatEvent>

ResumableChatAdapter.streamAgentEvents

streamMessage(session, message, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:124

Stream a message response as ChatEvents

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

ResumableChatAdapter.streamMessage

validate(): Promise<{ errors: string[]; valid: boolean; }>

Defined in: chat/backends/base.ts:191

Validate backend configuration/credentials

Promise<{ errors: string[]; valid: boolean; }>

ResumableChatAdapter.validate


Defined in: chat/backends/in-process-transport.ts:35

In-process transport for ChatEvent streaming. Producer pushes events via IChatTransport.send(), consumer reads via async iteration.

const transport = new InProcessChatTransport();
// Consumer side (async iteration)
(async () => {
for await (const event of transport) {
console.log("Received:", event);
}
})();
// Producer side (via streamToTransport or manual)
transport.send({ type: "message:start", messageId, role: "assistant" });
transport.send({ type: "message:delta", messageId, text: "Hello" });
transport.close();

new InProcessChatTransport(): InProcessChatTransport

InProcessChatTransport

get isOpen(): boolean

Defined in: chat/backends/in-process-transport.ts:41

Whether the transport is still open

boolean

Whether the transport is still open

IChatTransport.isOpen

[asyncIterator](): AsyncIterator<ChatEvent>

Defined in: chat/backends/in-process-transport.ts:94

AsyncIterator<ChatEvent>

close(): void

Defined in: chat/backends/in-process-transport.ts:59

Signal stream completion and close the connection

void

IChatTransport.close

error(err): void

Defined in: chat/backends/in-process-transport.ts:71

Signal an error to the client

Error

void

IChatTransport.error

send(event): void

Defined in: chat/backends/in-process-transport.ts:45

Send a single chat event to the client

ChatEvent

void

IChatTransport.send


Defined in: chat/listener-set.ts:12

Generic listener set utility for subscribe/notify patterns.

Encapsulates the recurring pattern of:

  • Set storage
  • add(callback) → unsubscribe function
  • notify(…args) with try/catch per listener
  • clear() for disposal

T extends (…args) => void

new ListenerSet<T>(): ListenerSet<T>

ListenerSet<T>

get size(): number

Defined in: chat/listener-set.ts:34

Current number of listeners.

number

add(callback): () => void

Defined in: chat/listener-set.ts:16

Add a listener. Returns an unsubscribe function.

T

(): void

void

clear(): void

Defined in: chat/listener-set.ts:29

Remove all listeners.

void

notify(…args): void

Defined in: chat/listener-set.ts:22

Notify all listeners with the given arguments. Errors are isolated per listener.

Parameters<T>

void


Defined in: chat/backends/mock-llm.ts:27

Backend adapter for Mock LLM. Zero-auth, deterministic, fully configurable for E2E testing.

new MockLLMChatAdapter(options): MockLLMChatAdapter

Defined in: chat/backends/mock-llm.ts:28

MockLLMChatAdapterOptions

MockLLMChatAdapter

BaseBackendAdapter.constructor

protected readonly _agentConfig: FullAgentConfig

Defined in: chat/backends/base.ts:39

BaseBackendAdapter._agentConfig

readonly name: string

Defined in: chat/backends/base.ts:35

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

BaseBackendAdapter.name

get agentService(): IAgentService

Defined in: chat/backends/base.ts:64

IAgentService

BaseBackendAdapter.agentService

get currentModel(): string | undefined

Defined in: chat/backends/base.ts:78

Current effective model

string | undefined

Current effective model

BaseBackendAdapter.currentModel

protected assertNotDisposed(): void

Defined in: chat/backends/base.ts:244

void

BaseBackendAdapter.assertNotDisposed

protected captureSessionId(_agent): void

Defined in: chat/backends/mock-llm.ts:43

Subclasses capture backend session ID from agent after streaming

IAgent

void

BaseBackendAdapter.captureSessionId

protected createService(): IAgentService

Defined in: chat/backends/mock-llm.ts:38

Subclasses create their specific IAgentService

IAgentService

BaseBackendAdapter.createService

dispose(): Promise<void>

Defined in: chat/backends/base.ts:196

Dispose resources

Promise<void>

BaseBackendAdapter.dispose

protected getOrCreateAgent(options?): IAgent

Defined in: chat/backends/base.ts:211

Get or create an agent. Model is passed per-call via RunOptions. Tools are passed per-call via SendMessageOptions — not baked into config. For persistent sessions, reuses agent when model matches.

SendMessageOptions

IAgent

BaseBackendAdapter.getOrCreateAgent

listModels(): Promise<ModelInfo[]>

Defined in: chat/backends/base.ts:186

List available models

Promise<ModelInfo[]>

BaseBackendAdapter.listModels

sendMessage(session, message, options?): Promise<ChatMessage<unknown>>

Defined in: chat/backends/base.ts:90

Send a message and receive a complete response

ChatSession

string

SendMessageOptions

Promise<ChatMessage<unknown>>

BaseBackendAdapter.sendMessage

setTools(): void

Defined in: chat/backends/base.ts:86

void

No-op. Tools are passed per-call via SendMessageOptions.tools. Kept for backward compatibility with code that calls setTools() directly.

BaseBackendAdapter.setTools

protected streamAgentEvents(agent, messages, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:144

Shared streaming helper: bridges agent events to chat events. Used by both streamMessage() and resume() to avoid duplication.

IAgent

Message[]

SendMessageOptions

AsyncIterable<ChatEvent>

BaseBackendAdapter.streamAgentEvents

streamMessage(session, message, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:124

Stream a message response as ChatEvents

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

BaseBackendAdapter.streamMessage

validate(): Promise<{ errors: string[]; valid: boolean; }>

Defined in: chat/backends/base.ts:191

Validate backend configuration/credentials

Promise<{ errors: string[]; valid: boolean; }>

BaseBackendAdapter.validate


Defined in: chat/backends/transport.ts:58

Server-Sent Events transport for ChatEvent streaming. Sends events as data: JSON\n\n lines with SSE headers.

new SSEChatTransport(res, options?): SSEChatTransport

Defined in: chat/backends/transport.ts:63

WritableResponse

SSETransportOptions

SSEChatTransport

get isOpen(): boolean

Defined in: chat/backends/transport.ts:94

Whether the transport is still open

boolean

Whether the transport is still open

IChatTransport.isOpen

close(): void

Defined in: chat/backends/transport.ts:103

Signal stream completion and close the connection

void

IChatTransport.close

error(err): void

Defined in: chat/backends/transport.ts:111

Signal an error to the client

Error

void

IChatTransport.error

send(event): void

Defined in: chat/backends/transport.ts:98

Send a single chat event to the client

ChatEvent

void

IChatTransport.send


Defined in: chat/backends/vercel-ai.ts:32

Backend adapter for Vercel AI SDK (API-based). Stateless — each call creates a fresh agent. Does not support resume. Implements IChatBackend only (no IResumableBackend).

new VercelAIChatAdapter(options): VercelAIChatAdapter

Defined in: chat/backends/vercel-ai.ts:35

VercelAIChatAdapterOptions

VercelAIChatAdapter

BaseBackendAdapter.constructor

protected readonly _agentConfig: FullAgentConfig

Defined in: chat/backends/base.ts:39

BaseBackendAdapter._agentConfig

readonly name: string

Defined in: chat/backends/base.ts:35

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

BaseBackendAdapter.name

get agentService(): IAgentService

Defined in: chat/backends/base.ts:64

IAgentService

BaseBackendAdapter.agentService

get currentModel(): string | undefined

Defined in: chat/backends/base.ts:78

Current effective model

string | undefined

Current effective model

BaseBackendAdapter.currentModel

protected assertNotDisposed(): void

Defined in: chat/backends/base.ts:244

void

BaseBackendAdapter.assertNotDisposed

protected captureSessionId(_agent): void

Defined in: chat/backends/vercel-ai.ts:48

Subclasses capture backend session ID from agent after streaming

IAgent

void

BaseBackendAdapter.captureSessionId

protected createService(): IAgentService

Defined in: chat/backends/vercel-ai.ts:41

Subclasses create their specific IAgentService

IAgentService

BaseBackendAdapter.createService

dispose(): Promise<void>

Defined in: chat/backends/base.ts:196

Dispose resources

Promise<void>

BaseBackendAdapter.dispose

protected getOrCreateAgent(options?): IAgent

Defined in: chat/backends/base.ts:211

Get or create an agent. Model is passed per-call via RunOptions. Tools are passed per-call via SendMessageOptions — not baked into config. For persistent sessions, reuses agent when model matches.

SendMessageOptions

IAgent

BaseBackendAdapter.getOrCreateAgent

listModels(): Promise<ModelInfo[]>

Defined in: chat/backends/base.ts:186

List available models

Promise<ModelInfo[]>

BaseBackendAdapter.listModels

sendMessage(session, message, options?): Promise<ChatMessage<unknown>>

Defined in: chat/backends/base.ts:90

Send a message and receive a complete response

ChatSession

string

SendMessageOptions

Promise<ChatMessage<unknown>>

BaseBackendAdapter.sendMessage

setTools(): void

Defined in: chat/backends/base.ts:86

void

No-op. Tools are passed per-call via SendMessageOptions.tools. Kept for backward compatibility with code that calls setTools() directly.

BaseBackendAdapter.setTools

protected streamAgentEvents(agent, messages, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:144

Shared streaming helper: bridges agent events to chat events. Used by both streamMessage() and resume() to avoid duplication.

IAgent

Message[]

SendMessageOptions

AsyncIterable<ChatEvent>

BaseBackendAdapter.streamAgentEvents

streamMessage(session, message, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/base.ts:124

Stream a message response as ChatEvents

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

BaseBackendAdapter.streamMessage

validate(): Promise<{ errors: string[]; valid: boolean; }>

Defined in: chat/backends/base.ts:191

Validate backend configuration/credentials

Promise<{ errors: string[]; valid: boolean; }>

BaseBackendAdapter.validate


Defined in: chat/backends/ws-transport.ts:47

WebSocket transport for ChatEvent streaming. Sends events as JSON messages over a WebSocket connection.

new WsChatTransport(ws, options?): WsChatTransport

Defined in: chat/backends/ws-transport.ts:53

WebSocketLike

WsTransportOptions

WsChatTransport

get isOpen(): boolean

Defined in: chat/backends/ws-transport.ts:78

Whether the transport is still open

boolean

Whether the transport is still open

IChatTransport.isOpen

close(): void

Defined in: chat/backends/ws-transport.ts:87

Signal stream completion and close the connection

void

IChatTransport.close

error(err): void

Defined in: chat/backends/ws-transport.ts:96

Signal an error to the client

Error

void

IChatTransport.error

send(event): void

Defined in: chat/backends/ws-transport.ts:82

Send a single chat event to the client

ChatEvent

void

IChatTransport.send

Defined in: chat/backends/types.ts:23

Options for creating a backend adapter

agentConfig: FullAgentConfig

Defined in: chat/backends/types.ts:25

Agent configuration (model, systemPrompt, tools, etc.)

optional agentService: IAgentService

Defined in: chat/backends/types.ts:27

Pre-created agent service (if adapter should not own lifecycle)

optional agentServiceFactory: () => IAgentService

Defined in: chat/backends/types.ts:29

Factory for lazy service creation (called on first use, not at construction)

IAgentService


Defined in: chat/types.ts:95

A single chat message — the fundamental unit of conversation

TMetadata = unknown

createdAt: string

Defined in: chat/types.ts:100

id: ChatId

Defined in: chat/types.ts:96

optional metadata: TMetadata

Defined in: chat/types.ts:99

parts: MessagePart[]

Defined in: chat/types.ts:98

role: ChatRole

Defined in: chat/types.ts:97

status: MessageStatus

Defined in: chat/types.ts:102

optional updatedAt: string

Defined in: chat/types.ts:101


Defined in: chat/types.ts:82

Metadata attached to messages — useful preset for the TMetadata generic

optional backend: string

Defined in: chat/types.ts:84

optional custom: Record<string, unknown>

Defined in: chat/types.ts:88

optional estimatedTokens: number

Defined in: chat/types.ts:87

optional isSummary: boolean

Defined in: chat/types.ts:86

optional model: string

Defined in: chat/types.ts:83

optional usage: UsageData

Defined in: chat/types.ts:85


Defined in: chat/types.ts:247

Runtime-level middleware for the send/receive lifecycle. Different from EventMiddleware which operates at the event bus level.

optional onAfterReceive(message, context): ChatMessage<unknown> | Promise<ChatMessage<unknown>>

Defined in: chat/types.ts:253

Transform completed message after receiving from backend

ChatMessage

ChatMiddlewareContext

ChatMessage<unknown> | Promise<ChatMessage<unknown>>

optional onBeforeSend(message, context): ChatMessage<unknown> | Promise<ChatMessage<unknown> | null> | null

Defined in: chat/types.ts:249

Transform message before sending to backend. Return null to reject the send.

ChatMessage

ChatMiddlewareContext

ChatMessage<unknown> | Promise<ChatMessage<unknown> | null> | null

optional onError(error, context): Error | Promise<Error | null> | null

Defined in: chat/types.ts:255

Intercept errors — return null to suppress, return error to propagate

Error

ChatMiddlewareContext

Error | Promise<Error | null> | null

optional onEvent(event, context): ChatEvent | Promise<ChatEvent | null> | null

Defined in: chat/types.ts:251

Transform/intercept stream events

ChatEvent

ChatMiddlewareContext

ChatEvent | Promise<ChatEvent | null> | null


Defined in: chat/types.ts:240

Context passed to ChatMiddleware hooks

sessionId: ChatId

Defined in: chat/types.ts:241

signal: AbortSignal

Defined in: chat/types.ts:242


Defined in: chat/types.ts:139

Chat session — a conversation with ordered messages (pure serializable data)

TCustom extends Record<string, unknown> = Record<string, unknown>

optional backendSessionId: string

Defined in: chat/types.ts:148

config: ChatSessionConfig

Defined in: chat/types.ts:143

createdAt: string

Defined in: chat/types.ts:146

id: ChatId

Defined in: chat/types.ts:140

messages: ChatMessage<unknown>[]

Defined in: chat/types.ts:142

metadata: ChatSessionMetadata<TCustom>

Defined in: chat/types.ts:144

status: "active"

Defined in: chat/types.ts:145

optional title: string

Defined in: chat/types.ts:141

updatedAt: string

Defined in: chat/types.ts:147


Defined in: chat/types.ts:110

Session configuration snapshot

backend: string

Defined in: chat/types.ts:112

optional maxTokens: number

Defined in: chat/types.ts:115

model: string

Defined in: chat/types.ts:111

optional systemPrompt: string

Defined in: chat/types.ts:113

optional temperature: number

Defined in: chat/types.ts:114


Defined in: chat/types.ts:72

File attachment part (base64-encoded data)

data: string

Defined in: chat/types.ts:72

mimeType: string

Defined in: chat/types.ts:72

name: string

Defined in: chat/types.ts:72

status: PartStatus

Defined in: chat/types.ts:72

type: "file"

Defined in: chat/types.ts:72


Defined in: chat/backends/types.ts:42

Core chat backend — send, stream, models, validate, dispose. All backends implement this. Resume support is optional.

Note: agentService is intentionally NOT on this interface. It’s an implementation detail exposed on BaseBackendAdapter for advanced consumers who need direct service access.

readonly currentModel: string | undefined

Defined in: chat/backends/types.ts:70

Current effective model

readonly name: string

Defined in: chat/backends/types.ts:44

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

dispose(): Promise<void>

Defined in: chat/backends/types.ts:67

Dispose resources

Promise<void>

listModels(): Promise<ModelInfo[]>

Defined in: chat/backends/types.ts:61

List available models

Promise<ModelInfo[]>

sendMessage(session, message, options?): Promise<ChatMessage<unknown>>

Defined in: chat/backends/types.ts:47

Send a message and receive a complete response

ChatSession

string

SendMessageOptions

Promise<ChatMessage<unknown>>

streamMessage(session, message, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/types.ts:54

Stream a message response as ChatEvents

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

validate(): Promise<{ errors: string[]; valid: boolean; }>

Defined in: chat/backends/types.ts:64

Validate backend configuration/credentials

Promise<{ errors: string[]; valid: boolean; }>


Defined in: chat/backends/transport.ts:16

Abstraction for delivering chat events to a client. Implementations handle protocol details (SSE, WebSocket, etc.).

readonly isOpen: boolean

Defined in: chat/backends/transport.ts:27

Whether the transport is still open

close(): void

Defined in: chat/backends/transport.ts:21

Signal stream completion and close the connection

void

error(err): void

Defined in: chat/backends/transport.ts:24

Signal an error to the client

Error

void

send(event): void

Defined in: chat/backends/transport.ts:18

Send a single chat event to the client

ChatEvent

void


Defined in: chat/provider-types.ts:30

Provider storage interface for server-side provider management

create(config): Promise<void>

Defined in: chat/provider-types.ts:32

Create a new provider. Generates UUID if id not set on config.

ProviderConfig

Promise<void>

delete(id): Promise<void>

Defined in: chat/provider-types.ts:38

Delete a provider by id.

string

Promise<void>

optional dispose(): Promise<void>

Defined in: chat/provider-types.ts:42

Release any resources held by this store (optional).

Promise<void>

get(id): Promise<ProviderConfig | null>

Defined in: chat/provider-types.ts:34

Get a provider by id. Returns null if not found.

string

Promise<ProviderConfig | null>

list(): Promise<ProviderConfig[]>

Defined in: chat/provider-types.ts:40

List all providers.

Promise<ProviderConfig[]>

update(id, changes): Promise<void>

Defined in: chat/provider-types.ts:36

Update an existing provider. Throws if not found.

string

Partial<Omit<ProviderConfig, "id" | "createdAt">>

Promise<void>


Defined in: chat/backends/types.ts:80

Extended backend with session resume capabilities. Only backends with persistent sessions (Copilot, Claude) implement this. Use isResumableBackend() to type-narrow at runtime.

readonly backendSessionId: string | null

Defined in: chat/backends/types.ts:97

The backend session ID from the last stream, or null if not yet streamed

readonly currentModel: string | undefined

Defined in: chat/backends/types.ts:70

Current effective model

IChatBackend.currentModel

readonly name: string

Defined in: chat/backends/types.ts:44

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

IChatBackend.name

canResume(): boolean

Defined in: chat/backends/types.ts:82

Whether this adapter supports session resume

boolean

dispose(): Promise<void>

Defined in: chat/backends/types.ts:67

Dispose resources

Promise<void>

IChatBackend.dispose

listModels(): Promise<ModelInfo[]>

Defined in: chat/backends/types.ts:61

List available models

Promise<ModelInfo[]>

IChatBackend.listModels

resume(session, backendSessionId, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/types.ts:90

Resume a previous session by its backend session ID. Streams events from the resumed session.

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

ChatError with SESSION_EXPIRED if session is no longer valid

ChatError with SESSION_NOT_FOUND if session ID is unknown

sendMessage(session, message, options?): Promise<ChatMessage<unknown>>

Defined in: chat/backends/types.ts:47

Send a message and receive a complete response

ChatSession

string

SendMessageOptions

Promise<ChatMessage<unknown>>

IChatBackend.sendMessage

streamMessage(session, message, options?): AsyncIterable<ChatEvent>

Defined in: chat/backends/types.ts:54

Stream a message response as ChatEvents

ChatSession

string

SendMessageOptions

AsyncIterable<ChatEvent>

IChatBackend.streamMessage

validate(): Promise<{ errors: string[]; valid: boolean; }>

Defined in: chat/backends/types.ts:64

Validate backend configuration/credentials

Promise<{ errors: string[]; valid: boolean; }>

IChatBackend.validate


Defined in: chat/types.ts:156

Reactive wrapper around ChatSession — provides subscribe/getSnapshot for React useSyncExternalStore integration and lastMessage convenience getter. Session stores may optionally return ObservableSession instances.

TCustom extends Record<string, unknown> = Record<string, unknown>

optional backendSessionId: string

Defined in: chat/types.ts:148

ChatSession.backendSessionId

config: ChatSessionConfig

Defined in: chat/types.ts:143

ChatSession.config

createdAt: string

Defined in: chat/types.ts:146

ChatSession.createdAt

id: ChatId

Defined in: chat/types.ts:140

ChatSession.id

readonly lastMessage: ChatMessage<unknown> | undefined

Defined in: chat/types.ts:163

Last message in the session

messages: ChatMessage<unknown>[]

Defined in: chat/types.ts:142

ChatSession.messages

metadata: ChatSessionMetadata<TCustom>

Defined in: chat/types.ts:144

ChatSession.metadata

status: "active"

Defined in: chat/types.ts:145

ChatSession.status

optional title: string

Defined in: chat/types.ts:141

ChatSession.title

updatedAt: string

Defined in: chat/types.ts:147

ChatSession.updatedAt

getSnapshot(): ChatSession<TCustom>

Defined in: chat/types.ts:161

Get immutable snapshot of session state (for React useSyncExternalStore)

ChatSession<TCustom>

subscribe(callback): () => void

Defined in: chat/types.ts:159

Subscribe to session changes (for React useSyncExternalStore)

() => void

(): void

void


Defined in: chat/provider-types.ts:14

A user-configured provider combining backend + model + label

backend: string

Defined in: chat/provider-types.ts:18

Backend name (copilot, claude, vercel-ai)

createdAt: number

Defined in: chat/provider-types.ts:24

Creation timestamp (Date.now())

id: string

Defined in: chat/provider-types.ts:16

Unique identifier (UUID or slug)

label: string

Defined in: chat/provider-types.ts:22

User-facing display name

model: string

Defined in: chat/provider-types.ts:20

Model identifier


Defined in: chat/types.ts:66

Model reasoning/thinking content part

status: PartStatus

Defined in: chat/types.ts:66

text: string

Defined in: chat/types.ts:66

type: "reasoning"

Defined in: chat/types.ts:66


Defined in: chat/types.ts:273

Options for runtime.send() — requires backend routing info

backend: string

Defined in: chat/types.ts:275

Backend to route this request to (key in backends map)

optional context: Record<string, unknown>

Defined in: chat/types.ts:285

Request-scoped context

credentials: AuthToken

Defined in: chat/types.ts:277

Authentication credentials for the backend factory

model: string

Defined in: chat/types.ts:279

Model to use for this request

optional signal: AbortSignal

Defined in: chat/types.ts:283

Abort signal

optional systemPrompt: string

Defined in: chat/types.ts:281

Per-call system prompt override (forwarded to the backend agent)

optional tools: ToolDefinition<unknown>[]

Defined in: chat/types.ts:287

Additional tools


Defined in: chat/types.ts:261

Options for sending a message to a provider

optional context: Record<string, unknown>

Defined in: chat/types.ts:267

optional model: string

Defined in: chat/types.ts:264

Model to use for this request. Required for server-side runtime.send().

optional signal: AbortSignal

Defined in: chat/types.ts:262

optional systemPrompt: string

Defined in: chat/types.ts:266

Per-call system prompt override (forwarded to the backend agent)

optional tools: ToolDefinition<unknown>[]

Defined in: chat/types.ts:269

Additional tools to include in this request


Defined in: chat/types.ts:167

Lightweight session info for listing (without full message array)

createdAt: string

Defined in: chat/types.ts:173

id: ChatId

Defined in: chat/types.ts:168

optional lastMessage: ChatMessage<unknown>

Defined in: chat/types.ts:172

messageCount: number

Defined in: chat/types.ts:171

status: "active"

Defined in: chat/types.ts:170

optional title: string

Defined in: chat/types.ts:169

updatedAt: string

Defined in: chat/types.ts:174


Defined in: chat/types.ts:70

Source reference part (URL citation)

status: PartStatus

Defined in: chat/types.ts:70

optional title: string

Defined in: chat/types.ts:70

type: "source"

Defined in: chat/types.ts:70

url: string

Defined in: chat/types.ts:70


Defined in: chat/watchdog.ts:14

Stream watchdog configuration

optional signal: AbortSignal

Defined in: chat/watchdog.ts:18

AbortSignal to link with (watchdog aborts when this signal fires)

timeoutMs: number

Defined in: chat/watchdog.ts:16

Maximum inactivity time in milliseconds before aborting the stream


Defined in: chat/types.ts:64

Plain text content part

status: PartStatus

Defined in: chat/types.ts:64

text: string

Defined in: chat/types.ts:64

type: "text"

Defined in: chat/types.ts:64


Defined in: chat/types.ts:68

Tool invocation part with call ID, arguments, optional result

args: unknown

Defined in: chat/types.ts:68

optional error: string

Defined in: chat/types.ts:68

name: string

Defined in: chat/types.ts:68

optional result: unknown

Defined in: chat/types.ts:68

status: ToolCallStatus

Defined in: chat/types.ts:68

toolCallId: string

Defined in: chat/types.ts:68

type: "tool_call"

Defined in: chat/types.ts:68

ChatEvent = { messageId: ChatId; role: ChatRole; type: "message:start"; } | { messageId: ChatId; text: string; type: "message:delta"; } | { message: ChatMessage; messageId: ChatId; type: "message:complete"; } | { args: Record<string, unknown>; messageId: ChatId; toolCallId: string; toolName: string; type: "tool:start"; } | { isError?: boolean; messageId: ChatId; result: unknown; toolCallId: string; toolName: string; type: "tool:complete"; } | { messageId: ChatId; type: "thinking:start"; } | { messageId: ChatId; text: string; type: "thinking:delta"; } | { messageId: ChatId; type: "thinking:end"; } | { messageId: ChatId; toolArgs: Record<string, unknown>; toolName: string; type: "permission:request"; } | { allowed: boolean; messageId: ChatId; toolName: string; type: "permission:response"; } | { completionTokens: number; model?: string; promptTokens: number; type: "usage"; } | { sessionId: ChatId; type: "session:created"; } | { sessionId: ChatId; type: "session:updated"; } | { code?: ErrorCode; error: string; messageId?: ChatId; recoverable: boolean; type: "error"; } | { type: "typing:start"; } | { type: "typing:end"; } | { type: "heartbeat"; } | { finalOutput?: string; finishReason?: string; type: "done"; }

Defined in: chat/types.ts:180

Events emitted during chat operation


ChatEventType = ChatEvent["type"]

Defined in: chat/types.ts:235

All possible ChatEvent type strings


ChatId = string & object

Defined in: chat/types.ts:14

Branded type for unique identifiers

readonly __brand: "ChatId"


ChatIdLike = string | ChatId

Defined in: chat/types.ts:46

Accepts either a plain string or branded ChatId for API convenience. Use this in public API signatures so consumers don’t need as ChatId casts.


ChatMessageStatus = MessageStatus

Defined in: chat/types.ts:92

Message status


ChatRole = "user" | "assistant" | "system"

Defined in: chat/types.ts:79

Role of message author


IChatProvider = IChatBackend

Defined in: chat/types.ts:295

IChatProvider has been inlined into IChatBackend. Import IChatBackend from “@witqq/agent-sdk/chat/backends” instead. Kept as type alias for backward compatibility.


MessagePart = TextPart | ReasoningPart | ToolCallPart | SourcePart | FilePart

Defined in: chat/types.ts:74

Union of all message part types


MessageStatus = "pending" | "streaming" | "complete" | "error" | "cancelled"

Defined in: chat/types.ts:55

Lifecycle status of an entire message


PartStatus = "pending" | "streaming" | "complete" | "error"

Defined in: chat/types.ts:51

Lifecycle status of a message part (text, reasoning, etc.)


RuntimeStatus = "idle" | "streaming" | "error" | "disposed"

Defined in: chat/types.ts:59

Lifecycle status of the chat runtime


SessionStatus = "active"

Defined in: chat/types.ts:57

Lifecycle status of a chat session


ToolCallStatus = "pending" | "running" | "requires_approval" | "complete" | "error" | "denied"

Defined in: chat/types.ts:53

Lifecycle status of a tool call within a message

adaptAgentEvents(events, messageId): AsyncIterable<ChatEvent>

Defined in: chat/bridge.ts:85

Convert AgentEvent async iterable to ChatEvent async iterable

AsyncIterable<AgentEvent>

ChatId

AsyncIterable<ChatEvent>


agentEventToChatEvent(event, messageId): ChatEvent | null

Defined in: chat/bridge.ts:11

Map a single AgentEvent to a ChatEvent (or null if no mapping)

AgentEvent

ChatId

ChatEvent | null


createChatId(): ChatId

Defined in: chat/types.ts:20

Generate a new unique ChatId (crypto.randomUUID-based)

ChatId

Branded ChatId string


createTextMessage(text, role?): ChatMessage

Defined in: chat/types.ts:306

Create a simple text ChatMessage.

string

Message text content

ChatRole = "user"

Message role (default: “user”)

ChatMessage

A complete ChatMessage with a single TextPart


fromAgentMessage(message, id?): ChatMessage

Defined in: chat/conversion.ts:58

Convert an agent-sdk Message to ChatMessage

Message

ChatId

ChatMessage


getMessageReasoning(message): string

Defined in: chat/chat-utils.ts:28

Join all ReasoningPart texts in a message

ChatMessage

string


getMessageText(message): string

Defined in: chat/chat-utils.ts:11

Join all TextPart texts in a message

ChatMessage

string


getMessageToolCalls(message): ToolCallPart[]

Defined in: chat/chat-utils.ts:21

Filter all ToolCallParts from a message

ChatMessage

ToolCallPart[]


isChatEvent(value): value is ChatEvent

Defined in: chat/guards.ts:101

Check if a value is a ChatEvent

unknown

value is ChatEvent


isChatMessage(value): value is ChatMessage<unknown>

Defined in: chat/guards.ts:18

Check if a value is a ChatMessage

unknown

value is ChatMessage<unknown>


isChatSession(value): value is ChatSession<Record<string, unknown>>

Defined in: chat/guards.ts:32

Check if a value is a ChatSession

unknown

value is ChatSession<Record<string, unknown>>


isFilePart(value): value is FilePart

Defined in: chat/guards.ts:85

Check if a value is a FilePart

unknown

value is FilePart


isMessagePart(value): value is MessagePart

Defined in: chat/guards.ts:47

Check if a value is a MessagePart

unknown

value is MessagePart


isObservableSession<TCustom>(session): session is ObservableSession<TCustom>

Defined in: chat/types.ts:317

Type guard: checks if a session has reactive API (subscribe/getSnapshot)

TCustom extends Record<string, unknown> = Record<string, unknown>

ChatSession<TCustom>

session is ObservableSession<TCustom>


isReasoningPart(value): value is ReasoningPart

Defined in: chat/guards.ts:71

Check if a value is a ReasoningPart

unknown

value is ReasoningPart


isResumableBackend(adapter): adapter is IResumableBackend

Defined in: chat/backends/types.ts:101

Type guard: checks if a backend adapter supports session resume

IChatBackend

adapter is IResumableBackend


isSourcePart(value): value is SourcePart

Defined in: chat/guards.ts:78

Check if a value is a SourcePart

unknown

value is SourcePart


isTextPart(value): value is TextPart

Defined in: chat/guards.ts:57

Check if a value is a TextPart

unknown

value is TextPart


isToolCallPart(value): value is ToolCallPart

Defined in: chat/guards.ts:64

Check if a value is a ToolCallPart

unknown

value is ToolCallPart


streamToTransport(events, transport): Promise<void>

Defined in: chat/backends/transport.ts:146

Pipes an async iterable of ChatEvents into a transport. Handles errors and ensures transport is closed on completion.

AsyncIterable<ChatEvent>

Async iterable of ChatEvent (from adapter.streamMessage)

IChatTransport

Transport to send events through

Promise<void>


toAgentMessage(message): Message

Defined in: chat/conversion.ts:14

Convert a ChatMessage to agent-sdk Message format.

ChatMessage

Message

Use toAgentMessages() which correctly handles tool results. This function drops tool results for assistant messages with completed tool calls.


toAgentMessages(message): Message[]

Defined in: chat/conversion.ts:25

Convert a ChatMessage to one or more agent-sdk Messages. For assistant messages with completed tool calls, emits both:

  1. {role: “assistant”, toolCalls: […]} — the tool invocation
  2. {role: “tool”, toolResults: […]} — the tool results This preserves tool results when replaying conversation history to backends.

ChatMessage

Message[]


toChatId(value): ChatId

Defined in: chat/types.ts:35

Cast a string to ChatId with UUID format validation. Use this instead of manual as ChatId type assertions.

string

String to validate and cast

ChatId

Branded ChatId

If value is not a valid UUID v4 format


withStreamWatchdog<T>(source, config): AsyncGenerator<T>

Defined in: chat/watchdog.ts:43

Wraps an async iterable with an activity timeout. If no event arrives within timeoutMs, the stream is aborted with a ChatError. The timer resets after each received event.

Uses Promise.race() so even if the source iterator is stuck on an unresolvable promise, the timeout fires and aborts iteration.

T

AsyncIterable<T>

StreamWatchdogConfig

AsyncGenerator<T>

const watched = withStreamWatchdog(adapter.streamMessage(session, msg), {
timeoutMs: 30000,
signal: abortController.signal,
});
for await (const event of watched) {
// Each event resets the 30s inactivity timer
}

Re-exports BackendAdapterFactory


Re-exports BackendInfo


Re-exports ChatError


Re-exports ChatEventBus


Re-exports ChatRuntimeOptions


Re-exports classifyError


Re-exports ContextStats


Re-exports ContextWindowConfig


Re-exports ContextWindowManager


Re-exports ContextWindowResult


Re-exports createChatRuntime


Re-exports CreateSessionOptions


Re-exports ErrorCode


Re-exports estimateTokens


Re-exports ExponentialBackoffStrategy


Re-exports FileSessionStore


Re-exports IChatClient


Re-exports IChatRuntime


Re-exports IChatSessionStore


Re-exports InMemorySessionStore


Re-exports IProviderClient


Re-exports ISessionReader


Re-exports ISessionWriter


Re-exports isRetryable


Re-exports MessageAccumulator


Re-exports OverflowStrategy


Re-exports PaginatedMessages


Re-exports RetryConfig


Re-exports SelectionChangeCallback


Re-exports StreamRetryConfig


Re-exports TypedEventEmitter


Re-exports withRetry