|
Add multimodal image support and client UX improvements
Server: - Add ImageViewTool (load image from file/URL, returns base64) - Add images field to Message model with created_at timestamp - Agent run/run_stream accept images param; inject image messages after image_view tool calls - WebSocket handler accepts images array from client, strips data URI prefix - All profiles include image_view tool - Fix tool call serialization (model_dump mode=json for datetime) - Add no-store cache headers for static files Client: - Image attachment: file picker button + clipboard paste + preview strip with remove - Images rendered in chat bubbles; loaded from history - Tool cards rebuilt as div+CSS toggle (fixes details/overflow-hidden collapse bug) - Tool cards appear before response bubble (lazy bubble creation on first stream_delta) - Typing indicator persists through tool calls, removed only when text starts streaming - Tool cards restored from history on page reload - Message timestamps stored via created_at field, shown correctly in history - Session ID reflected in URL hash for bookmarking; restored on page load - Remove localStorage session tracking (server last_active used instead) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
|---|
|
|
| client/index.html |
|---|
| client/js/app.js |
|---|
| client/js/chat.js |
|---|
| client/js/ws.js |
|---|
| client/style.css |
|---|
| navi/api/routes/sessions.py |
|---|
| navi/api/websocket.py |
|---|
| navi/core/agent.py |
|---|
| navi/core/registry.py |
|---|
| navi/core/sqlite_session_store.py |
|---|
| navi/llm/base.py |
|---|
| navi/llm/ollama.py |
|---|
| navi/main.py |
|---|
| navi/profiles/secretary.py |
|---|
| navi/profiles/server_admin.py |
|---|
| navi/profiles/smart_home.py |
|---|
| navi/tools/__init__.py |
|---|
| navi/tools/image_view.py 0 β 100644 |
|---|