A full chat app with a chat list, reasoning, tool calls, approvals, cited answers and the Composer, built from Another UI components.
Sonnet 5.5
Which invoices are overdue right now?
Three invoices are overdue for $5,225 in total. Northwind Traders is the largest at $2,400, now 12 days late. Harbour Coffee owes $1,825 and Fraser Valley Rentals owes $1,000. No card payouts came in since Monday, so a reminder today makes sense. Want me to draft one?
Source 1: Open invoices, OctoberSource 2: INV-1031 Northwind Traders.pdfSource 3: Card payouts, last 7 days
Chat list. New chat, search, and chats grouped by Pinned, Today, Yesterday and Last 7 days. Each chat has a menu to rename, pin or delete it, and a deleted chat comes back with Undo. On phones the list opens in a sheet from the header.
Header. The chat title renames in place, the current model shows beside it, and Share copies a link.
Empty state. A new chat offers four suggestions that send a prompt in one tap.
Reasoning. Each turn opens with a thinking trace that streams its steps, counts the time and folds away when it finishes.
Tool calls. Tools run one after another as cards you can open to see the input and output.
Approvals. A risky action, such as a refund, waits on an Approval Card. The turn only carries on once someone approves, and a denial gets the five second Undo before the answer moves on.
Streaming answers. The answer streams in word by word with a soft blur, numbered Citations open their source, and a sources list sits below.
Message actions. Copy, Regenerate, and thumbs up or down under each answer. They show on hover, and stay visible on touch screens.
Stop. While a turn runs, Send turns into Stop and the turn ends where it is.
Scroll. The conversation follows new text while you are at the bottom. Scroll up and a button appears to jump back down.
Sounds. Sending, switching chats, pinning, copying, feedback and approvals play Cuelume cues. Tool errors and disclosures play theirs through the components.
The demo plays scripted turns so it works without a network. To connect a model, replace the play function inside the block with your own stream and write each part into the assistant turn as it arrives: reasoning, tools, approval, then text with shown counting the words that have streamed in.