• bvandeusen released this 2026-04-15 00:38:39 -04:00 | 787 commits to main since this release

    Voice

    • Rewrote the silence detector to compute honest linear RMS → dBFS (the old path ran RMS over byte-scaled frequency data, producing meaningless dB numbers).
    • Silence threshold is now dynamic per session: arms at -25 dBFS peak, then stops when the current level drops ≥15 dB below peak. Static -45 dBFS fallback covers the pre-arm window. 1500 ms grace at the start.
    • Mic pulse redesigned as a filled red radial-gradient disc behind an unmoving mic icon — far more visible than the previous subtle scale.
    Downloads
  • v26.04.14.3 Stable

    bvandeusen released this 2026-04-14 22:54:55 -04:00 | 789 commits to main since this release

    Live amplitude mic pulse

    The chat input bar's mic button now scales and glows proportional to the silence detector's live RMS amplitude instead of sitting static. Obvious feedback that audio is actually being picked up — no more wondering whether the mic is hot. Silence still breathes via a 0.1 baseline floor, loud input caps at ~1.18x scale so it doesn't punch through the input bar. A 120ms CSS transition blends smoothly between the ~100ms amplitude samples so the pulse feels continuous rather than stepping.

    Downloads
  • v26.04.14.2 Stable

    bvandeusen released this 2026-04-14 21:45:58 -04:00 | 791 commits to main since this release

    Discuss failure mode fixes

    Fixes a hallucination path in the article-discuss flow. Previously, if article extraction returned empty or RAG pulled in unrelated orphan notes that looked more relevant than the generic seed prompt, the model would confabulate a response that had nothing to do with the article.

    Empty-article hard-fail. seed_article_discussion now raises a new EmptyArticleError when the article body is empty or reduces to empty after prep. The /briefing and /news discuss routes catch it and return 422 with a clean error. No more empty synthetic read_article tool results silently telling the model "the article has nothing in it" and watching it invent content to fill the void. The /news route also cleans up the empty conversation it had already created so the user doesn't end up with a phantom chat.

    Skip RAG on the seed turn. When user_message matches ARTICLE_DISCUSS_SEED inside build_context, both the semantic-search and keyword-search auto-injection paths short-circuit. The article IS the context on turn one — RAG was diluting it by feeding the model unrelated orphan notes ranked against the generic "I want to talk about this article" seed. Follow-up turns keep RAG on because by then the user's own messages drive the query.

    Downloads
  • v26.04.14.1 Stable

    bvandeusen released this 2026-04-14 08:02:25 -04:00 | 793 commits to main since this release

    Highlights

    Unified /news + briefing discuss

    Both article discussion entry points now share a single seed_article_discussion() helper that stages the synthetic read_article tool exchange and the conversational seed prompt. Behavior is byte-identical across entry points — /news no longer dumps a raw article body into a seeded message and calls it a day.

    /news discuss also auto-starts generation server-side, so clicking 💬 lands you on an in-flight stream instead of a pre-seeded chat waiting for you to press send. The web ChatView reconnects to the running generation on mount; no UI changes were needed there.

    Article summaries persist to RAG

    The first assistant reply in a seeded article conversation is now saved as a Note, tagged article-summary plus any article topics, with entity_meta carrying rss_item_id + url + conversation_id. The rss_items.discussion_note_id FK back-link makes the save idempotent — re-clicking Discuss on the same article is a no-op.

    The goal: the knowledge base stops being amnesiac about articles you've already engaged with. Future chats can surface the prior summary through normal semantic search.

    The post-generation hook fires fire-and-forget from run_generation, logs failures, and never breaks the chat even if note persistence hits a snag.

    Schema

    Migration 0039 adds rss_items.discussion_note_id (BIGINT NULL, FK → notes.id ON DELETE SET NULL). Additive — existing rows stay unlinked until the next discuss click.

    Downloads
  • v26.04.13.3 Stable

    bvandeusen released this 2026-04-13 23:36:22 -04:00 | 796 commits to main since this release

    Highlights

    Rich single-article Discuss

    The news/RSS Discuss button now produces real conversations about articles instead of one-shot summaries. Architecture is a three-layer cache on rss_items (context_prepared → content_full → fresh fetch) so expensive prep work happens once, upfront, at click-time — the chat itself stays as fast as any normal chat turn regardless of article size.

    • Small articles (≤48k chars) pass through unchanged and cache on first click
    • Large articles run a parallel map-reduce step on the background model (chunked by paragraph, ~300-word factual summaries per chunk concatenated under section headers) — one-time cost, cached for repeat clicks
    • Follow-up turns in both cases are zero extra cost — the article context is already in history as a synthetic read_article tool result

    The canned "Please summarize and discuss this article." prompt is replaced with a conversational seed that invites a real discussion ("I want to talk about this article. Start with a substantive summary... I'll ask follow-ups from there.") — the old checklist-shaped prompt was making the model respond like it was completing an assignment instead of starting a conversation.

    The map step pins num_ctx=16384 explicitly to avoid the same silent-truncation footgun that wrecked the research pipeline in v26.04.13.2.

    discuss_topic (multi-article aggregation) is intentionally untouched — follow-up work will decide whether to retire it or rework it on the cached-context approach.

    Schema

    Migration 0038 adds three nullable columns to rss_items: content_full, context_prepared, content_fetched_at. Additive — no backfill, cache fills in lazily.

    Downloads
  • v26.04.13.2 Stable

    bvandeusen released this 2026-04-13 19:00:47 -04:00 | 798 commits to main since this release

    Highlights

    Chat auto-naming (#109)

    • Title model is now fed raw user/assistant turns instead of the post-build_context message list. build_context concatenates RAG snippets, RSS excerpts, URL content, and briefing articles into the user-role message string, which was leaking into the title filter's first-300-char window and producing garbage conversation titles.

    Timezone

    • Calendar and briefing dates now interpreted in the user's local timezone instead of UTC.

    Research pipeline — monolith note fix

    • Root cause: generate_completion was the only LLM entry point not defaulting num_ctx, so _generate_outline prompts (~6k tokens from 12 sources) were silently truncated to Ollama's ~4k qwen3 default. Outline JSON parse failed → pipeline fell back to the single-note path.
    • generate_completion now defaults num_ctx to Config.OLLAMA_NUM_CTX like stream_chat does.
    • _generate_outline and _generate_executive_summary pin num_ctx explicitly as a belt-and-suspenders guard against future refactors.

    Verified end-to-end on dev: a single research conversation produced a correct index note (title Research: …, tags research+research-index, 3 section notes with parent_id, executive summary) and a clean conversation title — confirming all three fixes in one test.

    Downloads
  • v26.04.13.1 Stable

    bvandeusen released this 2026-04-13 01:14:03 -04:00 | 802 commits to main since this release

    Highlights

    LLM / responsiveness

    • Root-cause fix for 5–20s TTFT variance on qwen3:14b: frontend no longer hardcodes think=true; _should_think is a real content classifier (length + keyword). Timing logs split first_token_ms / thinking_ms / ttft_ms.
    • 38 parametrized _should_think tests; briefing /discuss-* actions defer to the classifier.
    • pick_num_ctx now includes tool schemas — fixes silent prompt truncation at 14K+ tokens.
    • Ollama model tags normalized to lowercase; error bodies surfaced; pre-gemma3 summaries refreshed.
    • Default background model switched to gemma3:4b.

    Tools refactor

    • Decorator-based tool registry replaces monolithic tools.py (2566 lines → tools/ package). Single source of truth per tool via @tool; briefing eligibility via briefing=True; CalDAV/SearXNG via requires=.
    • Tool count consolidated from 42 → 38 (create_taskcreate_note, delete_taskdelete_note, entity saves merged, get_noteread_note).

    Research

    • Research pipeline emits an index note with executive summary + clickable section-note links; section notes parent_id → index. Minimum sections lowered to 2 with retry.
    • Empty-exception messages now fall back to exception class name.

    Chat / UI

    • Knowledge and Workspace views stop passing explicit conversation titles so backend auto-naming fires.
    • "New Chat" button no longer stretches full height in empty state.
    • Task cards in Knowledge view show the Task badge instead of List.

    CI

    • New ci-runner base image with uv/ruff/jq/tzdata baked in; typecheck 9m41s → ~30s, lint 13s → 2s.
    • Registry cache export made non-fatal; setuptools install fix for uv + http-ece.
    Downloads
  • v26.04.10.1 Stable

    bvandeusen released this 2026-04-10 11:05:30 -04:00 | 842 commits to main since this release

    What's Changed

    Paused Projects

    • New paused project status with auto-pause after 14 days of inactivity and auto-reactivation on activity
    • Paused tab added to project list filter; status validation updated to accept paused

    Project Cards

    • Overall completion bar rendered on project cards; done milestones auto-collapse
    • Fix: null project fields coerced to empty string to avoid NOT NULL violation

    Search

    • Hybrid keyword + semantic search — exact title/body matches now rank first above semantic hits

    Briefing

    • Redundant current-conditions block removed; live temperature patched directly into WeatherCard

    Email Templates

    • Email templates updated to Modern Fable visual identity (violet + gold palette)

    Navigation & UX

    • Back button from a note/task returns to its project when set, otherwise to Knowledge
    • Header nav text darkened in light mode — inactive uses text-secondary, active uses primary-solid

    Internal

    • Lint cleanup: timezone import, direct timedelta usage, unused variable removal
    Downloads
  • v26.04.09.1 Stable

    bvandeusen released this 2026-04-08 23:31:15 -04:00 | 854 commits to main since this release

    What's Changed

    Briefing Intelligence Overhaul

    • Actionable briefings: Tasks show days overdue + project context; LLM suggests rescheduling, marking in progress, or breaking down
    • Daily planning: "Your Day" section with prioritized focus list and calendar gap analysis
    • Differentiated check-ins: Midday = brief progress nudge; Afternoon = wrap-up + capture prompt
    • Weekly review: Sunday evening 7-day recap — completed tasks, notes created, project activity, upcoming week preview
    • Project continuity: "Pick up where you left off" — yesterday's activity and stale project warnings

    Live Weather

    • Current conditions endpoint polling every 30 min — live temperature displayed above forecast card
    • Weather × calendar cross-reference: rain warnings for outdoor events (30%+ precip probability)

    News Synthesis

    • Articles clustered by topic for thematic briefing instead of headline listing
    • Cluster-level preference filtering: user-preferred topics ranked higher, strongly disliked topics suppressed
    • Multi-article topic discussion endpoint for deep cross-article analysis
    Downloads
  • v26.04.08.3 Stable

    bvandeusen released this 2026-04-08 14:52:47 -04:00 | 865 commits to main since this release

    What's Changed

    Specialized Note Type Editors

    • Person: contact card form (Relationship, Birthday, Email, Phone, Organization, Address) with collapsible Notes section
    • Place: form-first layout (Address, Phone, Hours, Website, Category)
    • List: checklist builder with Enter-to-add, Backspace-to-delete, checkbox toggle
    • Tab navigation skips formatting toolbar; auto-focus on title; type-dependent placeholders

    Knowledge View

    • New item button: gradient CTA with 5-type icon menu
    • Person cards show organization; place cards show category

    Calendar Event UX

    • Smart time defaults: next 30-minute boundary, 1-hour duration
    • Linked start/end: changing start moves end to preserve duration
    • End can't be before start; all-day toggle manages times; past event hint

    Theme Polish

    • DRY: hardcoded violet values replaced with CSS custom properties
    • Dark mode contrast boost for borders, glows, and card edges
    Downloads