Sessions

Sessions represent conversations with an agent. They store conversation history, track resources and variables, and enable stateful interactions.

Creating Sessions

Create a session by specifying the agent ID and initial input variables:

typescript

Getting Session Messages

To restore a conversation on page load, use getMessages() to retrieve UI-ready messages:

typescript

The returned messages can be passed directly to the client SDK's initialMessages option.

UISessionState Interface

typescript

Full Session State (Debug)

For debugging or internal use, you can retrieve the complete session state including all variables and internal message format:

typescript

Note: Use getMessages() for client-facing code. The get() method returns internal message format that includes hidden content not intended for end users.

Attaching to Sessions

To trigger actions on a session, you need to attach to it first:

typescript

Executing Requests

Once attached, execute requests on the session using execute():

typescript

Request Types

The execute() method accepts a discriminated union:

typescript

This makes it easy to pass requests through from the client:

typescript

Stop Support

Pass an abort signal to allow clients to stop generation:

typescript

When the client aborts the request, the signal propagates through to the LLM provider, stopping generation immediately. Any partial content is preserved.

WebSocket Handling

For WebSocket integrations, use handleSocketMessage() which manages abort controller lifecycle internally:

typescript

The handleSocketMessage() method:

  • Handles trigger, continue, and stop messages
  • Automatically aborts previous requests when a new one arrives
  • Streams events via the onEvent callback
  • Calls onFinish after streaming completes (not called if aborted)

See Socket Chat Example for a complete implementation.

Session Lifecycle

Rendering diagram...

Session Expiration

Sessions expire after a period of inactivity (default: 24 hours). When you call getMessages() or get(), the response includes a status field:

typescript

Response Types

StatusTypeDescription
activeUISessionStateSession is active, includes messages array
expiredExpiredSessionStateSession expired, includes sessionId, agentId, createdAt

Persisting Chat History

To enable session restoration, store the chat messages in your own database after each interaction:

typescript

Best Practice: Store the full UIMessage[] array. This preserves all message parts (text, tool calls, files, etc.) needed for accurate restoration.

Restoring Sessions

When a user returns to your app:

typescript

Restore Response

typescript

Complete Example

Here's a complete session management flow:

typescript

Clearing Sessions

To programmatically clear a session's state (e.g., for testing reset/restore flows), use clear():

typescript

After clearing, the session transitions to expired status. You can then restore it with restore() or create a new session.

typescript

This is idempotent — calling clear() on an already expired session succeeds without error.

Error Handling

typescript