feat(chat): add LibreChat-inspired chat interface with MongoDB persistence
Implement full chat functionality with persistent sessions and messages
stored in MongoDB, LLM completion via Ollama (with multi-provider
dispatch support), markdown rendering, and a model selector.
- Add ChatSession/ChatMessage models with serde attributes for MongoDB
ObjectId handling (skip_serializing_if empty, alias _id)
- Add CRUD server functions: list/create/rename/delete sessions,
list/save messages, non-streaming chat completion
- Add raw Document collection accessor for BSON ObjectId -> String
conversion in read paths
- Add SSE streaming endpoint (Axum handler) for future streaming support
- Add provider dispatch client (Ollama, OpenAI, Anthropic, HuggingFace)
- Add frontend components: ChatSidebar with namespace grouping,
ChatModelSelector, ChatMessageList, ChatInputBar, ChatBubble with
pulldown-cmark markdown rendering and StreamingBubble thinking indicator
- Rewrite ChatPage with full signal-based state management
- Add comprehensive CSS for chat UI, markdown prose, animations
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>