-
released this
2026-04-15 00:38:39 -04:00 | 787 commits to main since this releaseVoice
- 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
released this
2026-04-14 22:54:55 -04:00 | 789 commits to main since this releaseLive 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
released this
2026-04-14 21:45:58 -04:00 | 791 commits to main since this releaseDiscuss 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_discussionnow raises a newEmptyArticleErrorwhen the article body is empty or reduces to empty after prep. The/briefingand/newsdiscuss routes catch it and return 422 with a clean error. No more empty syntheticread_articletool results silently telling the model "the article has nothing in it" and watching it invent content to fill the void. The/newsroute 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_messagematchesARTICLE_DISCUSS_SEEDinsidebuild_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
released this
2026-04-14 08:02:25 -04:00 | 793 commits to main since this releaseHighlights
Unified
/news+ briefing discussBoth article discussion entry points now share a single
seed_article_discussion()helper that stages the syntheticread_articletool exchange and the conversational seed prompt. Behavior is byte-identical across entry points —/newsno longer dumps a raw article body into a seeded message and calls it a day./newsdiscuss 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 webChatViewreconnects 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-summaryplus any article topics, withentity_metacarryingrss_item_id+url+conversation_id. Therss_items.discussion_note_idFK 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
0039addsrss_items.discussion_note_id(BIGINT NULL, FK →notes.idON DELETE SET NULL). Additive — existing rows stay unlinked until the next discuss click.Downloads
-
v26.04.13.3 Stable
released this
2026-04-13 23:36:22 -04:00 | 796 commits to main since this releaseHighlights
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_articletool 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=16384explicitly 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
0038adds three nullable columns torss_items:content_full,context_prepared,content_fetched_at. Additive — no backfill, cache fills in lazily.Downloads
-
v26.04.13.2 Stable
released this
2026-04-13 19:00:47 -04:00 | 798 commits to main since this releaseHighlights
Chat auto-naming (#109)
- Title model is now fed raw user/assistant turns instead of the post-
build_contextmessage list.build_contextconcatenates 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_completionwas the only LLM entry point not defaultingnum_ctx, so_generate_outlineprompts (~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_completionnow defaultsnum_ctxtoConfig.OLLAMA_NUM_CTXlikestream_chatdoes._generate_outlineand_generate_executive_summarypinnum_ctxexplicitly 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: …, tagsresearch+research-index, 3 section notes withparent_id, executive summary) and a clean conversation title — confirming all three fixes in one test.Downloads
- Title model is now fed raw user/assistant turns instead of the post-
-
v26.04.13.1 Stable
released this
2026-04-13 01:14:03 -04:00 | 802 commits to main since this releaseHighlights
LLM / responsiveness
- Root-cause fix for 5–20s TTFT variance on qwen3:14b: frontend no longer hardcodes
think=true;_should_thinkis a real content classifier (length + keyword). Timing logs splitfirst_token_ms/thinking_ms/ttft_ms. - 38 parametrized
_should_thinktests; briefing/discuss-*actions defer to the classifier. pick_num_ctxnow 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 viabriefing=True; CalDAV/SearXNG viarequires=. - Tool count consolidated from 42 → 38 (
create_task→create_note,delete_task→delete_note, entity saves merged,get_note→read_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-runnerbase 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
- Root-cause fix for 5–20s TTFT variance on qwen3:14b: frontend no longer hardcodes
-
v26.04.10.1 Stable
released this
2026-04-10 11:05:30 -04:00 | 842 commits to main since this releaseWhat's Changed
Paused Projects
- New
pausedproject 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 usesprimary-solid
Internal
- Lint cleanup: timezone import, direct
timedeltausage, unused variable removal
Downloads
- New
-
v26.04.09.1 Stable
released this
2026-04-08 23:31:15 -04:00 | 854 commits to main since this releaseWhat'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
released this
2026-04-08 14:52:47 -04:00 | 865 commits to main since this releaseWhat'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