Repository navigation
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
|
🦋 Changeset detectedLatest commit: 8aa6171 The changes in this PR will be included in the next version bump. This PR includes changesets to release 2 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
4 tasks
Draft
4 tasks
A composable text input for sending messages to an agent, with a headless useAgentComposer hook. AgentControlBar now uses it for its chat input. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The composer clears as soon as you send and no longer waits for the send to finish. Sending and failed states now live on each message, and the transcript offers a retry for failed messages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ength Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Also shows a listen toggle and a plus attach button in the composer story. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t for maxLength Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Changes the placeholder, adds data-listening, and shows the microphone's level in its button. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ing replies in the composer Adds labels to the composer and transcript, a connecting placeholder, drafts, and a screen reader announcement for messages that can't send. Removes the unused ghost variant from AgentTrackToggle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Calling `preventDefault` in `onSubmit` cancels the send, as it already did for Enter. - The microphone button hides when the participant can't publish audio. - `onMicrophoneError` always calls the latest callback. - Drafts load after mount, so server-rendered HTML matches, and a new `draftKey` loads its own draft. - Enter sends in browsers without `requestSubmit`. - The stop button is disabled while the composer is. - A label passed as `undefined` falls back to its default. - The transcript announces a failure only when a message newly fails, not when retrying one leaves an older failure behind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`maxLength` and the character count count graphemes, so an emoji or accented letter counts once instead of as two or more UTF-16 code units. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nput
AgentControlBar clears its input as soon as you send, so a failed send lost the text unless a
transcript showed the failure. It now puts the message back if nothing new has been typed.
`restoreFailedMessages={false}` turns this off for transcripts that already offer a retry, and
AgentSessionView_01 uses it so there's one way to resend.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and transcript The composer no longer depends on #1497. A message that fails to send goes back in the composer, unless something new has been typed, and onError reports the error. The transcript no longer marks failed messages or offers a retry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jeffdaley
force-pushed
the
jeffdaley/agents-ui-composer
branch
from
November 9, 2026 15:18
7d7e3b7 to
4154c42
Compare
AgentComposer takes icons, like labels, to replace the send, stop, and microphone icons, including each microphone state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
size-limit report 📦
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ticket
https://linear.app/livekit/issue/DE-206/agents-ui-add-agentcomposer-text-input-with-microphone
Context / reason for change
Agents UI has no standalone way to type to an agent. The chat input only exists inside
AgentControlBar, can't be placed or styled on its own, and loses your text when a message fails.Agents are increasingly hybrid: you type some turns and speak others. The composer is the text input for that, with the microphone alongside it, so an app can offer both without building its own input.
Summary of changes
AgentComposer, built from parts (Field,Input,Actions,Microphone,Submit,CharacterCount) plus a headlessuseAgentComposerhook. It sends through the session's chat by default, or throughonSend.onErrorreports the error so the app can show it, such as in a toast. There's no failed state or retry in the transcript; message status waits for the client SDK's upcominguseThreadMessages.maxLengthcounts instead of cutting you off. Typing past the limit is allowed. A "12/200" count sits in a row below the input, turns red when over, and sending waits until the message fits. Emoji and accented letters count once.respondingandonStop, Send becomes Stop while the input is empty. The SDK has no client interrupt API yet, so the app decides what stopping does.draftKeykeeps unsent text in sessionStorage across reloads. Drafts load after mount, so server-rendered HTML matches.onSend, the microphone hides when the participant can't publish audio.onSubmitcan cancel a send withpreventDefault, on Enter and on the button alike.labelson the composer and the transcript, for rewording and translation.iconson the composer replaces the send, stop, and microphone icons, including each microphone state, so they can be swapped without rebuilding the layout.AgentControlBaruses the composer for its chat input, without the microphone, since the bar already has one.Screenshots / demos
To add: a failed send putting the message back; the count over the limit; the microphone listening, pending, and blocked; Stop; light and dark.
How to verify
Run Storybook (
pnpm --filter @livekit/component-docs-storybook dev) and open Agents UI / AgentComposer:onErrorappears in the Actions panel.VITE_PUBLIC_LK_SANDBOX_TOKEN_SERVER_IDindocs/storybook/.env. Type and speak to a real agent.On a phone, Return should add a new line rather than send.
Submitter checklist
🤖 Generated with Claude Code