agent-ui / showcase
All

Showcase / 05

Compose rich objects. Do not invent inventory.

The Orbit / Chorus dump is inspiration, not a backlog. MVP already covers agentic chat. Extract only when a pattern is reusable across hosts; otherwise compose. Reject Tailwind, Iconify, decorative glass, and spring physics — they conflict with design.md.

compose extend chat-message defer v1 pills + attachment no domain cards
decision matrixlocked for v0.5

Extend now: chat-message model meta, native expand, and host action buttons.

Compose now: synthesis → thinking-steps; verdict / refund / transfer → card + button + approval-gate; status row / attachments / diff / matrix → host markup in this showcase.

Defer to v1 (jobs.yaml): agent-status-pill, attachment, code-block, markdown.

Reject: Document Preview / Video Player as library components; DoorDash-specific outcome inventory; Apple spring/glass chrome; multi-model Chorus synthesis as MVP surface.

Message actions + expand

Superior patterns from the dump, adapted to agent-ui: model label, Copy / Regenerate as host buttons, native details for long turns.

chat-messageparts extended
Human
Show all

Add Diff View, Synthesis Progress, Verdict Sections, Provider Status Pill Row, Image Context, and Comparison Matrix — as compositions, not new inventory.

Synthesis progress = thinking-steps

Do not ship a second timeline. Label the steps for synthesis and keep states on each step.

thinking-stepssynthesis labels
Collect provider drafts
Align criteria
Write merged answer

While one draft stresses security, the other stresses performance…

Analyzed 3 components

Collapsible reasoning stays native details — no new accordion component.

Provider status row (host chrome)

Preview of deferred agent-status-pill. Until v1, keep this as host markup beside the thread.

host · status pillsnot a component yet
openai · complete anthropic · streaming gemini · error

Attachments (host chrome)

Preview of deferred attachment. Labels only — no remote images, no video player in the library.

host · attachmentsdocument + images
receipt-front.jpg receipt-back.jpg bag-photo.jpg

Verdict = card with Next / Verification

Typed sections with a CTA. Host owns take-action; the card never executes.

verdict

Goodwill credit is appropriate

Issue a $12 credit. Fraud signals are weak and delivery is confirmed.

Next action

Confirm the amount, then approve the exact credit action.

Verification

  • Data integrity preserved
  • One prior goodwill credit in 90 days

Support outcomes = card + approval-gate

Refund, credits, merchant deduction, transfer — domain content slots, not separate components. Bind consequential work to an immutable action ID.

refund credit

$12.00 to original payment

Order DD-48291 · reason missing item · posts in a few minutes after approval.

approval required

Issue refund credit?

⌘↵ Approve

issue-credit · $12.00 · actionId=refund-credit-48291 · exact action shown

Why this is safe

Order delivered; no open disputes. Host still owns the final decision.

Review window00:08

Suggested prompts = host buttons

Not a component. Concrete starters beside chat-input.

Diff view (host chrome → future code-block)

Plain escaped text with add/delete styling. Defer a real code-block / diff part to v1.

host · diffprovider A vs B
- Close the case without notifying the customer.
+ Close the case and send a short summary email.
  Keep the order ID visible in the audit trail.

Comparison matrix = table in card

Criteria × providers. Escape every cell. No Markdown parser in core.

compare

Merge criteria

Criteria Provider A Provider B
Policy fit Strong Moderate
Customer clarity Moderate Strong
Risk Low Low
Install
<link rel="stylesheet" href="tokens.css">
<link rel="stylesheet" href="components/button/button.css">
<link rel="stylesheet" href="components/card/card.css">
<link rel="stylesheet" href="components/chat-thread/chat-thread.css">
<link rel="stylesheet" href="components/chat-message/chat-message.css">
<link rel="stylesheet" href="components/thinking-steps/thinking-steps.css">
<link rel="stylesheet" href="components/approval-gate/approval-gate.css">
<link rel="stylesheet" href="host-chrome.css">

Document Preview and Video Player stay out of agent-ui. Hosts can iframe or mount media behind their own CSP. Countdown chrome never implies silent approval — the host owns the decision.