
For products where the chat is a guest rather than the page: a panel docked to the right, opened from a button in your own header, with a menu of past conversations, rename and delete on the open one, and a way out from inside. It holds its open state itself rather than borrowing a SidebarProvider, so the sidebar your app already has keeps its trigger, its shortcut and its collapse. It brings a whole working chat with it, so what your app supplies is the page it sits beside.
@shadcncraft
The panel needs nothing from your SidebarProvider: it holds its open state in components/assistant-provider.tsx and answers to ⌘J, so your own sidebar keeps its trigger, ⌘B and its collapse. Mount AssistantProvider above your page, put the panel beside it, and AssistantTrigger in your own header. Rename and delete are built in, IME guards and focus handling included, and land in onRename and onDelete: index.tsx implements both against the demo array, and pointing them at your backend is the whole integration. index.tsx, components/site-sidebar.tsx and lib/demo-sessions.ts are the stand-ins to replace, and components/assistant-panel.tsx is the panel. The conversation inside it is chat-1, mounted unchanged, so the transport and the message renderers are documented there rather than here.






















