From b8acd05ec4c078eef2f4fccfca3254457e72e454 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Wed, 18 Feb 2026 00:28:39 -0500 Subject: [PATCH] Update summary.md for Phase 10 tool completeness additions Co-Authored-By: Claude Sonnet 4.6 --- summary.md | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/summary.md b/summary.md index a289fc3..99d83c7 100644 --- a/summary.md +++ b/summary.md @@ -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