Skip to main content

useAgentContext

The useAgentContext hook manages real-time AI agent chat sessions using Server-Sent Events (SSE) for streaming responses.

Return Value

messages
ConversationMessage[]
List of conversation messages
quickQuestions
string[]
Suggested quick questions the user can ask
pendingMessage
string | null
The message currently being generated
pendingImages
ImageData[] | null
Images currently being processed
pendingFiles
File[] | null
Files currently being processed
connectionState
ConnectionState
The current connection state
isConnected
boolean
Whether the SSE connection is active
isExecuting
boolean
Whether the agent is currently executing
executionStatus
FrontendStatus
The current execution status
isWaitingForInput
boolean
Whether the agent is waiting for user input
hasMoreMessages
boolean
Whether there are more messages to load
isLoadingMore
boolean
Whether more messages are being loaded
sendMessage
submitUserInput
clearMessages
loadMoreMessages
cancelExecution
connect
disconnect
import { useAgentContext } from "@wacht/tanstack-router";

function AgentChat({ contextId, agentName }: { contextId: string; agentName: string }) {
  const {
    messages,
    pendingMessage,
    isConnected,
    isExecuting,
    sendMessage,
  } = useAgentContext({
    contextId,
    agentName,
  });

  return (
    <div>
      <ConnectionStatus connected={isConnected} />
      <MessageList messages={messages} />
      <PendingMessage message={pendingMessage} />
      <InputForm onSend={sendMessage} />
    </div>
  );
}

Parameters

contextId
string
required
The context ID for the agent conversation
agentName
string
required
The name of the agent
platformAdapter
object
Platform adapter for platform events and functions
onUserInputRequest

Data Structures

Examples

Basic Chat Interface

import { useAgentContext } from "@wacht/tanstack-router";

function ChatInterface() {
  const { messages, sendMessage, isConnected } = useAgentContext({
    contextId: "ctx_123",
    agentName: "assistant",
  });

  return (
    <div>
      {!isConnected && <p>Connecting...</p>}
      <MessageList messages={messages} />
      <Input
        placeholder="Type a message..."
        onSend={(msg) => sendMessage(msg)}
      />
    </div>
  );
}

With File Upload

import { useAgentContext } from "@wacht/tanstack-router";

function FileUploadChat() {
  const { sendMessage, pendingFiles } = useAgentContext({
    contextId: "ctx_123",
    agentName: "assistant",
  });

  const handleSend = async (message: string, files: FileList) => {
    await sendMessage(message, [], Array.from(files));
  };

  return (
    <div>
      <input type="file" onChange={(e) => handleSend("Hi", e.target.files)} />
      {pendingFiles && <p>Uploading {pendingFiles.length} files...</p>}
    </div>
  );
}

Cancel Execution

import { useAgentContext } from "@wacht/tanstack-router";

function ChatWithCancel() {
  const { isExecuting, cancelExecution } = useAgentContext({
    contextId: "ctx_123",
    agentName: "assistant",
  });

  return (
    <div>
      {isExecuting && (
        <button onClick={() => cancelExecution()}>
          Cancel
        </button>
      )}
    </div>
  );
}

Load More Messages

import { useAgentContext } from "@wacht/tanstack-router";

function InfiniteScrollChat() {
  const { messages, hasMoreMessages, isLoadingMore, loadMoreMessages } = useAgentContext({
    contextId: "ctx_123",
    agentName: "assistant",
  });

  return (
    <div>
      <MessageList messages={messages} />
      {hasMoreMessages && (
        <button onClick={loadMoreMessages} disabled={isLoadingMore}>
          Load More
        </button>
      )}
    </div>
  );
}

SSE Connection

The hook establishes an SSE connection to:
https://{backend_host}/realtime/agent/stream?context_id={contextId}
Features:
  • Automatic reconnection with exponential backoff
  • Platform event and user input request support
  • Ping/pong for connection health
  • Session-based authentication