Update summary.md for Phase 10 tool completeness additions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+18
-12
@@ -12,7 +12,7 @@
|
||||
> Include file-level details in the commit body when the change is non-trivial.
|
||||
|
||||
## Last Updated
|
||||
2026-02-17 — Phase 10: CalDAV full lifecycle, update_note tool, dashboard inline streaming, keyboard shortcuts, intent router upgrades
|
||||
2026-02-18 — Phase 10 cont.: update_note task fields, list_tasks tool, update_todo CalDAV tool
|
||||
|
||||
## Project Overview
|
||||
Fabled Assistant is a self-hosted note-taking and task-tracking application with
|
||||
@@ -265,7 +265,7 @@ fabledassistant/
|
||||
│ │ ├── generation_buffer.py # In-memory SSE event buffer with cancel_event, reconnect support, auto-cleanup; supports chat (int keys) and assist (string keys)
|
||||
│ │ ├── generation_task.py # Background asyncio tasks: run_generation (chat, DB flush, titles, intent routing + tool loop) + run_assist_generation (lightweight, no DB)
|
||||
│ │ ├── intent.py # Intent routing: classify_intent() makes fast non-streaming LLM call to detect tool intent before streaming
|
||||
│ │ ├── tools.py # LLM tool definitions (create_task, create_note, update_note, search_notes, full CalDAV suite) + execute_tool dispatcher
|
||||
│ │ ├── tools.py # LLM tool definitions (create_task, create_note, update_note, list_tasks, search_notes, full CalDAV suite incl. update_todo) + execute_tool dispatcher
|
||||
│ │ ├── tag_suggestions.py # LLM-powered tag suggestions: suggest_tags() builds prompt with existing tags, calls generate_completion, parses JSON response
|
||||
│ │ ├── caldav.py # CalDAV integration: full event lifecycle (create/list/search/update/delete), todos (create/list/complete/delete), list_calendars, timezone (ZoneInfo), reminders (VALARM), attendees, multi-calendar search
|
||||
│ │ ├── settings.py # Settings CRUD with user_id isolation: get_setting, set_setting, set_settings_batch, get_all_settings
|
||||
@@ -554,16 +554,22 @@ When adding a new migration, follow these conventions:
|
||||
- Ollama configured with `OLLAMA_MAX_LOADED_MODELS=2` and `OLLAMA_KEEP_ALIVE=30m`
|
||||
- Timeout tuning: connect timeout 30s (cold model loading), warm timeout 300s, pull timeout 1800s
|
||||
- SSE reconnection failure shows error toast instead of silently recovering
|
||||
- **LLM tool calling:** Models with tool support can create tasks, create/update notes, search notes,
|
||||
and manage CalDAV events/todos on behalf of the user during chat. Multi-round tool loop (max 5 rounds)
|
||||
allows the LLM to execute tools and then produce a natural language response incorporating results.
|
||||
Tool call results are persisted in message `tool_calls` JSONB column and rendered as compact
|
||||
ToolCallCard components (linked titles for created items, search result lists, event cards, todo cards).
|
||||
SSE emits `tool_call` events for real-time rendering during streaming. System prompt includes today's
|
||||
date for relative date resolution. Graceful degradation: models without tool support respond normally.
|
||||
`update_note` tool finds existing notes by exact title (falling back to fuzzy search) and supports
|
||||
`replace` (overwrite body) or `append` (add to existing body) modes — prevents duplicate note creation
|
||||
when the user provides follow-up content for an already-created note.
|
||||
- **LLM tool calling:** Models with tool support can create tasks, create/update notes, search and list
|
||||
notes/tasks, and manage CalDAV events/todos on behalf of the user during chat. Multi-round tool loop
|
||||
(max 5 rounds) allows the LLM to execute tools and then produce a natural language response
|
||||
incorporating results. Tool call results are persisted in message `tool_calls` JSONB column and
|
||||
rendered as compact ToolCallCard components. SSE emits `tool_call` events for real-time rendering.
|
||||
System prompt includes today's date for relative date resolution. Graceful degradation: models without
|
||||
tool support respond normally.
|
||||
Full tool suite:
|
||||
- `create_task` / `create_note` — create new items
|
||||
- `update_note` — edit note content (replace/append) AND update task fields: `status`, `priority`,
|
||||
`due_date`; finds by exact title first, falls back to fuzzy search; prevents duplicate notes
|
||||
- `list_tasks` — filter tasks by `status`, `priority`, `due_before`, `due_after`, `limit`;
|
||||
backed by `list_notes(is_task=True)`; enables "overdue tasks", "high priority", "in progress" queries
|
||||
- `search_notes` — keyword search across notes and tasks
|
||||
- Full CalDAV suite: `create_event`, `list_events`, `search_events`, `update_event`, `delete_event`,
|
||||
`list_calendars`, `create_todo`, `list_todos`, `update_todo`, `complete_todo`, `delete_todo`
|
||||
- **Intent routing:** Before streaming, a fast non-streaming LLM call classifies user intent and
|
||||
extracts tool parameters (`services/intent.py`). If a tool call is detected, it executes directly
|
||||
— bypassing the model's native (sometimes unreliable) tool calling API. Falls through to normal
|
||||
|
||||
Reference in New Issue
Block a user