bvandeusen
ed715dcc23
feat(knowledge): note types, counts, new-note button, audit fixes
...
- Add note_type (note/person/place/list) selector + entity metadata fields
(relationship, email, phone / address, hours) to NoteEditorView
- Pre-select type via ?type= query param from KnowledgeView new-note dropdown
- KnowledgeView: add split "New note / ▾" button with type dropdown
- KnowledgeView: show per-type counts on sidebar filter buttons (when > 1)
- Fix: filter-btn now flex layout so count badge aligns to right edge
- Fix: list_notes count_query was missing parent_id filter (inflated totals)
- Fix: PATCH /api/notes/:id now fires upsert_note_embedding (workspace autosave)
- Fix: get_knowledge_counts endpoint for per-type counts
- Fix: get_knowledge_tags was silently discarding note_type filter (double-stmt bug)
- Fix: NoteEditorView onMounted stray brace from edit session
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-04 12:53:09 -04:00
bvandeusen
90afbec4c2
feat(knowledge): two-tier pagination — ID pre-fetch + content batch loading
...
Backend:
- GET /api/knowledge/ids: returns up to 100 note IDs cheaply (no body
parsing), supports same filters as /api/knowledge, includes has_more
- GET /api/knowledge/batch?ids=...: fetches full items for given IDs in
order; used by frontend to load content in controlled batches
Frontend (KnowledgeView):
- Fetch 100 IDs upfront, load first 50 as content on mount
- IntersectionObserver sentinel (root: null) triggers 24-item content
batches as user scrolls
- Proactive ID refill when queue drops below 48 unloaded IDs
- fetchGen counter invalidates stale in-flight responses on filter reset
- IDs claimed before async fetch to prevent double-loading
- sentinelVisible ref drives post-load re-check when content doesn't
push sentinel off screen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-04 09:44:50 -04:00
bvandeusen
80f30b705d
feat: Knowledge view + entity types (People, Places, Lists)
...
Data model:
- Migration 0036: adds note_type TEXT (default 'note') and metadata JSONB
to the notes table; index on note_type
- Note model: entity_type property, note_type/metadata in to_dict()
- create_note() accepts note_type and metadata params
Backend:
- /api/knowledge — unified paginated endpoint: type/tag/sort/q filters,
semantic search via embeddings, excludes tasks
- /api/knowledge/tags — distinct tags across knowledge objects
- New LLM tools: create_person, create_place, create_list, add_to_list,
clear_checked_items — all wired into execute_tool()
- People and places auto-injected as compact summary into LLM system prompt
Frontend:
- KnowledgeView replaces HomeView at /; left filter panel (type+tag),
toolbar (search, sort, graph toggle), card grid with type-aware cards
(indigo=note, emerald=person, amber=place, sky=list), load-more pagination
- Today bar: upcoming events, overdue task count, Briefing/Chat links
- Floating mini-chat sticky to bottom: creates/continues a conversation
inline, message history expands upward, close button ends session
- Graph panel: toggles as a 420px right panel at full viewport width
- AppHeader: Knowledge, Chat, Briefing, Calendar, Tasks, Projects
- Router: / → KnowledgeView; /knowledge redirect; HomeView import removed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-31 18:01:03 -04:00