Update summary.md for Phase 10 tool completeness additions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-18 00:28:39 -05:00
parent 4df5ec2d65
commit b8acd05ec4
+18 -12
View File
@@ -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) modesprevents 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