Session Item

The row an agent session lives in: status dot, title, time, unread count — and on hover, a card with live status, branch, and next actions, so you can check on an agent without leaving the thread you're in.

tsx
import { SessionItem } from "@/registry/seam/ui/session-item"

export default function SessionItemDemo() {
  return (
    <div className="bg-muted/40 w-72 rounded-lg border p-2">
      <SessionItem title="fix-auth-redirect" status="waiting" time="2m" />
      <SessionItem
        title="migrate-billing-webhooks"
        status="working"
        time="now"
        active
      />
      <SessionItem title="model-picker-component" status="ready" time="18m" />
      <SessionItem title="bump-dependencies" status="done" time="1h" />
      <SessionItem title="flaky-e2e-hunt" status="error" time="3h" />
    </div>
  )
}
bunx --bun @seamui/cli@latest add session-item

Notes

  • The row wears Button (ghost, row-shaped): press depth, haptic tap, focus ring, and disabled handling come from the foundation. data-active renders it as the embossed key risen from the sidebar well.
  • SessionCard is layout only — the hover wiring is preview-card (see the example), so on touch you can put the identical card in a popover instead (hover → long-press, per the native contract).
  • No nested interactive elements in the row; the branch chip's copy action lives on the card. Unread announces as “3 unread”; the status dot stays decorative next to the visible title.
  • Pure props in (title, status, time, unread, active), onClick out — no transport or router coupling.

Press feedback, reduced motion, and haptics follow the global policy — see Motion and Haptics.