@lumea-labs/chat
v0.1.0
Published
Tier 1 — composable chat UI components, adapter-driven, zero SDK runtime deps.
Maintainers
Readme
@lumea/chat
Adapter-driven chat UI primitives — Tier 1, pure UI.
bun add @lumea/chatWhat's in the box
<Chat>— drop-in chat surface<ChatProvider>+useChatContext()— state + adapter binding- Composable primitives:
<ChatMessages>,<ChatInput>,<ChatLanding>,<ChatAgentSelector>,<ChatSuggestions>,<ChatScrollButton>,<ChatTyping>,<ChatAskUser>,<ChatMicButton> - Sessions sidebar primitives:
<ChatSessionRow>,<ChatAgentGroupHeader>,<ChatSessionsSearch>,<ChatSessionRenameInput>,<ChatSessionContextMenu>,<ChatSessionList>,<ChatSessionsByAgent> - Tool-call catalog:
<ToolCallChip>,<ToolCallShell>,<ToolCatalogProvider>,useToolCatalog(),defaultToolCatalog,pickToolCatalogEntry(),mergeToolCatalogs(), plus built-in renderers forbash,read,write,grep,search_web,http_fetch,email_send,ask_user_question - Skeletons:
<ChatSkeleton>,<MessageSkeleton>,<UserMessageSkeleton>
Adapter contract
<ChatProvider adapter={…}> accepts any object satisfying ChatAdapter:
messages,status,isStreaming,error,sessionId,pendingToolCallsendMessage,sendToolResult,setSessionId,newSession,abortuploadFile,isUploading
Wire the adapter to any backend — Polpo SDK (@lumea/chat-polpo's usePolpoChatAdapter), Vercel AI SDK, Anthropic / OpenAI direct, or roll your own.
Custom tool renderers
Drop a <ToolCatalogProvider> above the chat tree and register your own renderers next to the built-ins:
import { ToolCatalogProvider, ToolCallShell, type ToolCatalog } from "@lumea/chat";
import { Hash } from "lucide-react";
const myCatalog: ToolCatalog = {
slack_post: {
name: "slack_post",
label: "Slack post",
icon: Hash,
category: "comms",
Component: ({ tool }) => (
<ToolCallShell tool={tool} icon={Hash} label="Slack post">
<div>{String(tool.arguments?.text ?? "")}</div>
</ToolCallShell>
),
},
};
<ToolCatalogProvider catalogs={myCatalog}>
<Chat />
</ToolCatalogProvider>Override built-ins by registering the same name. prefix matches whole tool families (longest-prefix wins).
License
MIT
