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>
1 parent f3ce16d commit 9a8056d724f6ee8327a20431c284bc05b7553737
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored on 8 Apr
Showing 18 changed files
View
client/index.html
View
client/js/app.js
View
client/js/chat.js
View
client/js/ws.js
View
client/style.css
View
navi/api/routes/sessions.py
View
navi/api/websocket.py
View
navi/core/agent.py
View
navi/core/registry.py
View
navi/core/sqlite_session_store.py
View
navi/llm/base.py
View
navi/llm/ollama.py
View
navi/main.py
View
navi/profiles/secretary.py
View
navi/profiles/server_admin.py
View
navi/profiles/smart_home.py
View
navi/tools/__init__.py
View
navi/tools/image_view.py 0 β†’ 100644