Overview
The@standardagents/vue package provides Vue 3 composables and a plugin for building UIs that connect to AgentBuilder threads. It handles real-time message streaming, custom event listening, and workblock transformation for tool visualization.
Key Features
- Real-time WebSocket updates for live message streaming
- Vue plugin with provide/inject architecture
- Workblock transformation for UI-friendly tool displays
- Custom event system for backend-to-frontend communication
- File uploads and attachments for sending images to the LLM
- TypeScript support with full type definitions
- Works with any Vue 3 framework (Nuxt, Vite, etc.)
Installation
npm
pnpm
yarn
Quick Start
Plugin Setup
StandardAgentsPlugin
Install the plugin when creating your Vue application to configure the API endpoint.| Option | Type | Required | Description |
|---|---|---|---|
endpoint | string | Yes | The API endpoint URL |
Components
ThreadProvider
Component that establishes a WebSocket connection to a thread and provides context to child components.| Prop | Type | Default | Description |
|---|---|---|---|
threadId | string | Required | The thread ID to connect to |
preload | boolean | true | Fetch existing messages on mount |
live | boolean | true | Enable WebSocket for live updates |
useWorkblocks | boolean | false | Transform tool calls into workblocks |
depth | number | 0 | Max message depth (0 = top-level only) |
includeSilent | boolean | false | Include silent messages |
endpoint | string | - | Override endpoint from plugin |
Composables
useStandardAgents
Access the StandardAgents client directly for advanced operations.| Property | Type | Description |
|---|---|---|
client | AgentBuilderClient | The HTTP/WebSocket client instance |
endpoint | string | The configured endpoint URL |
useThread
Composable to access the full thread context. Must be used within aThreadProvider.
Method Reference
sendMessage
Send a message to the thread. Automatically includes any pending attachments and clears them after sending.sendMessage(), an optimistic message with attachment previews is shown immediately. The real message replaces it when confirmed by the server via WebSocket.
addAttachment
Queue file(s) to be sent with the next message. Files are NOT uploaded immediately - they’re held locally with preview URLs and sent inline (base64) whensendMessage() is called.
Use this for images/files that should be sent directly to the LLM.
removeAttachment
Remove a pending attachment before sending.clearAttachments
Remove all pending attachments.addFiles
Upload files to the thread’s filesystem. Files are uploaded immediately and stored persistently. Use this for documents/files that should be stored on the thread but NOT sent directly to the LLM.removeFile
Remove a pending file upload (cannot remove already committed files).File URL Helpers
stopExecution
Stop the current agent execution.deleteMessage
Delete a message from the thread. The message is optimistically removed from the UI immediately. If the server request fails, the message is restored.onEvent / subscribeToEvent
Subscribe to custom events emitted by the agent.addFiles vs addAttachment
| Feature | addFiles() | addAttachment() |
|---|---|---|
| Purpose | Filesystem storage | Send to LLM |
| Upload timing | Immediate | On sendMessage() |
| Storage | Thread filesystem (persistent) | Inline base64 |
| Image processing | None (raw storage) | Server-side resize/optimize |
| Use case | Documents, persistent files | Chat images to LLM |
Real-time File Synchronization
Thefiles computed ref from useThread() automatically stays synchronized with the server. When files are added, modified, or deleted on the thread (by the agent, tools, or other clients), the files array updates in real-time via WebSocket.
File Events
The SDK listens for three file-related events:| Event | Description |
|---|---|
file_created | A new file was added to the thread filesystem |
file_updated | An existing file was modified |
file_deleted | A file was removed from the thread filesystem |
Custom File Event Handling
You can also subscribe to these events directly for custom handling:How It Works
- Initial load: When
ThreadProvidermounts, it fetches the current file list from the server - Live updates: WebSocket events update the
filesarray as changes occur - Optimistic UI: Local uploads via
addFiles()appear immediately as “uploading” then transition to “committed” - Deduplication: Server files take priority over local pending files with the same path
useThread Return Value
Full ThreadContext:| Property | Type | Description |
|---|---|---|
threadId | string | The current thread ID |
messages | Ref<Message[]> | Reactive array of raw messages |
workblocks | ComputedRef<ThreadMessage[]> | Messages transformed to workblocks (if useWorkblocks is true) |
status | Ref<ConnectionStatus> | Connection status (alias: connectionStatus) |
loading | Ref<boolean> | Loading state (alias: isLoading) |
error | Ref<Error | null> | Error state |
options | ThreadProviderOptions | Options passed to the provider |
sendMessage | (payload) => Promise<Message> | Send a message (auto-includes attachments) |
stopExecution | () => Promise<void> | Cancel execution |
deleteMessage | (messageId: string) => Promise<void> | Delete a message (optimistic UI) |
onEvent | <T>(type, callback) => () => void | Subscribe to events |
files | ComputedRef<ThreadFile[]> | All files (pending uploads + committed) |
addFiles | (files) => void | Upload files to filesystem |
removeFile | (id) => void | Remove a pending file |
getFileUrl | (file) => string | Get file URL |
getThumbnailUrl | (file) => string | Get thumbnail URL |
getPreviewUrl | (file) => string | null | Get preview URL |
attachments | Ref<PendingAttachment[]> | Pending attachments for next message |
addAttachment | (files) => void | Add attachment(s) for next message |
removeAttachment | (id) => void | Remove a pending attachment |
clearAttachments | () => void | Clear all pending attachments |
Custom Events
Listen for custom events emitted by the backend usingonEvent from useThread():
emitThreadEvent():
Workblocks
Workblocks are a UI-friendly transformation of tool calls. WhenuseWorkblocks: true, consecutive assistant messages with tool calls are grouped into workblocks.
- Raw Messages
- Transformed Workblocks
WorkMessage Type
Rendering Workblocks
UseThreadProvider with :useWorkblocks="true" and access via useThread():
TypeScript Support
The package is written in TypeScript and includes full type definitions.Message Type
Complete Example
View Complete Chat Interface Example with Image Attachments
View Complete Chat Interface Example with Image Attachments