Releases
v0.17.0
Compare
Sorry, something went wrong.
No results found
0.17.0 (2026-06-26)
Features
chat: card media_player with transport + volume controls, same room grid (defc9ec ), closes #541
chat: card on/off control is a toggle switch, not an 'an'/'aus' button (88a0dba ), closes #560
chat: card on/off toggle + media_player power/source + failed-voice-turn traces (2df9601 )
chat: card-layout v2 — compact-all + full-width answers + uniform base-column grid (#552 ) (1b48c2b )
chat: chat-cards epic #534 — state-filtering, room grouping, compact card, grid, room query, media_player (f4c4ae5 )
chat: compact light card — on/off badge + brightness slider one row (dcdd6eb ), closes #538
chat: concrete read-only HttpDavClient for CalDAV/CardDAV ingest (aa66ae0 )
chat: concrete read-only HttpDavClient for CalDAV/CardDAV ingest (d4e5bb8 ), closes #522
chat: continuous conversation — a follow-up turn's spoken text ends in a question mark (e227c7c ), closes #566
chat: continuous conversation — follow-up turns end in '?' so HA re-opens the mic without re-wake (1e23cfe )
chat: default device-less play to the current room (u99) (44baab0 )
chat: default music/radio to the current room's device (2f7a042 )
chat: deterministic engine-side confirmation gate for sensitive ha_call_service (d4aebd8 )
chat: deterministic engine-side confirmation gate for sensitive ha_call_service (b77858e ), closes #570
chat: enrich bands with genre+bio facts + artist_info query op (57f59ca )
chat: enrich bands with genre+bio facts + artist_info query op (a457ffc ), closes #592
chat: group cards by room when >4, else label each card (eb2531d ), closes #537
chat: Jellyfin music ingest -> central knowledge OKF concepts (316143f )
chat: Jellyfin music ingest -> central knowledge OKF concepts (e134bb5 ), closes #564
chat: learned default playback device — ask once, store, reuse (c82f7c1 ), closes #622
chat: learned default playback device (ask once, store, reuse) (e890b3c )
chat: media_player card power on/off toggle + source select (492cf9e ), closes #561
chat: music_query structured artist->songs tool (per-user scoped) (b9adab9 )
chat: music_query tool over the structured store (46160b8 ), closes #588
chat: notes_search fuzzy + ranked retrieval (non-embedding slice of #591 ) (ba073c7 )
chat: notes_search lightly-fuzzy + ranked, shared scorer (37ce410 ), closes #591
chat: on-demand song lyrics — resolve song, fetch live from Jellyfin (3dcca18 ), closes #593
chat: on-demand song lyrics — resolve song, fetch live from Jellyfin (#593 ) (fd9db46 )
chat: path-based ownership — users/<uid>/ private paths + OKF resident: leak fix + per-library music (72875f9 )
chat: path-based ownership — users/<uid>/ private paths + OKF resident: leak fix + per-library music (1dc3b32 ), closes #576
chat: per-user privacy slice 1 — uid-filtered retrieval, default-deny (02a5bfa )
chat: per-user privacy slice 1 — uid-filtered retrieval, default-deny (776bbb6 ), closes #576
chat: persist a failed voice turn's trace so the error is visible (d85f504 ), closes #562
chat: play_music — cast a Jellyfin library track on a media_player (cc15c4c )
chat: play_music — cast a Jellyfin library track on a media_player (9b6ccc5 ), closes #604
chat: play_radio — favorite station, ask+store, via radio-browser (df5e93a )
chat: play_radio — per-user favorite station via radio-browser (07eca33 )
chat: podcast search by host/person via fyyd term fallback (40b713a )
chat: quick-reply answers on every question + composer pre-fill (66fc771 )
chat: quick-reply chips — model offers 2-4 clickable answers above the input (6b3e9db ), closes #555
chat: quick-reply suggestion chips — model offers 2-4 clickable answers (df02fc1 )
chat: render cards only for entities matching the query state (3e294de ), closes #536
chat: research(query) tool — fan out to notes+web, trust-rank, cited summary (5572132 ), closes #574
chat: research(query) tool — fan out to notes+web, trust-rank, cited summary (slice 1) (2e5f256 )
chat: resolve podcasts by host/person via fyyd term search (631a9da ), closes #568
chat: responsive side-by-side card grid — invisible auto-fill columns (123ba00 ), closes #539
chat: room query cards all the room's actuators under one header (18fa71e ), closes #540
chat: rooms first-class — list rooms, resolve device→room, friendly names (04f67a0 ), closes #535
chat: rooms first-class — list rooms, resolve device→room, never leak entity_ids (08ab8a5 )
chat: suggest quick-reply answers for every question + pre-fill favorite (4797e6b )
chat: trigger OKF ingest adapters on engine boot (dafdc67 )
chat: trigger OKF ingest adapters on engine boot (49964f4 ), closes #517
skill: SOUL — add second-brain section + tighten/dedupe (8c2100f )
skill: SOUL — add second-brain section + tighten/dedupe (#615 #617 ) (ff5c87e )
solaris: add user-guide.md for the ServiceBay portal (#533 ) (317981e )
template: add streaming microWakeWord Solaris model (#542 ) (56a3862 )
template: derive JELLYFIN_CAST_URL from the box LAN IP (e880c2b )
template: derive JELLYFIN_CAST_URL from the box LAN IP (960a03d ), closes #607
Bug Fixes
chat: boot ingest waits for source health / bounded retry — no 0-ingest boot (5f10fa6 )
chat: card grid — 1 full-width column on narrow/phone, no control overflow (bab1618 )
chat: card grid 1-col full-width on narrow, no control overflow (3694845 ), closes #553
chat: cast music via a LAN-reachable Jellyfin URL not localhost (9684407 ), closes #604
chat: close fail-open holes in the confirmation gate (48b1f45 )
chat: compact_history keeps tool_calls args (device-control regression) (#637 ) (93af311 )
chat: confirm-worthy actions ask via offer_choices and wait (2b1aadb )
chat: confirm-worthy actions ask via offer_choices and wait (520fe3e ), closes #558
chat: continue_conversation on a pending question, not only a trailing '?' (55685f7 ), closes #627
chat: degrade Jellyfin lyrics fetch errors to None, not a broken turn (b0d79ea ), closes #593
chat: drop 'bitte' from confirm-gate affirmatives — residual fail-open (7d09928 )
chat: escape LIKE wildcards in music_query artist/prefix arg (f4a9af8 )
chat: eval edge-case fixes — card room labels, area-cache, room-match, VALARM nesting (26ebcfc )
chat: eval edge-case fixes — card room labels, area-cache, room-match, VALARM nesting (f476819 ), closes #545 #546 #547 #548
chat: immich ingest bounded page-retry, cursor checkpoint, O(1) embed enqueue (2665b7b ), closes #597
chat: immich ingest robustness — page-retry, cursor checkpoint, O(1) embed enqueue (9f846be )
chat: ingest-adapter robustness — per-item isolation, persisted sync cursors, VALARM parse (a91ce2c )
chat: ingest-adapter robustness — per-item isolation, sync cursors, VALARM parse (a387d10 ), closes #528 #529 #527
chat: Jellyfin ingest re-auth on 401 + empty-slug id fallback (8c622b0 )
chat: Jellyfin ingest re-auth on 401 + empty-slug id fallback (2944a7d ), closes #583
chat: Jellyfin libraries() uses user-scoped /Users/{id}/Views (0a1823a )
chat: Jellyfin libraries() uses user-scoped /Users/{id}/Views (997bf29 ), closes #581
chat: Jellyfin re-auth fires on a raised 401 mid-pagination (614592d )
chat: Jellyfin re-auth fires on a raised 401 mid-pagination (5cd9201 ), closes #583
chat: keep chat responsive during OKF ingest — WAL + off-loop ingest (#587 ) (80d772d )
chat: keep the mic open when a question is pending (continuous conversation) (91bfbd2 )
chat: music_query ranked fuzzy artist resolve — exact wins first (ce43e0f ), closes #590
chat: music_query ranked fuzzy artist resolve — exact wins, else fuzzy (f5f7adc )
chat: Obsidian ingest robustness — per-note isolation + graceful unknown-type skip (166229d )
chat: per-note isolation and graceful unknown-type skip in Obsidian ingest (2a50328 ), closes #520
chat: play_music casts direct/static Jellyfin stream to fix Cast-GROUP HA 500 (fdad83f )
chat: play_music casts direct/static Jellyfin URL first, /universal fallback (107bc17 ), closes #604
chat: play_music casts from a LAN-reachable Jellyfin URL (f0e6c6e )
chat: play_music v2 — random play, 'Song von X' parse fix, surface+retry HA errors (56161f6 )
chat: play_music v2 — random play, 'Song von X' parse fix, surface+retry HA errors (c2b8f55 ), closes #604
chat: podcast search — keep the verbatim name + fuzzy best-match against fyyd (0f39a32 ), closes #563
chat: podcast search — keep verbatim name + fuzzy best-match against fyyd (29fd892 )
chat: radio — sanitize favorite name/url before frontmatter write (17dc249 )
chat: remove context-window fill ring from send button (1fcac6a )
chat: scope private-note ingest + contain note_write to caller subtree (b3f08e5 )
chat: solaris.db WAL + busy_timeout on all connect paths (78b3582 )
chat: solaris.db WAL + busy_timeout on all connect paths (181e0f2 ), closes #600
chat: strip [[ ]] cross-links to plain text on the voice/facade path (c714242 )
chat: strip [[ ]] cross-links to plain text on the voice/facade path (2b1639e ), closes #616
chat: wait for source health before boot ingest, no 0-ingest boot (6c35777 ), closes #531
template: solaris post-deploy converges JELLYFIN_PASSWORD self-heal (a4ab91c ), closes #626
template: solaris post-deploy self-heals the Jellyfin service credential (6b5703d )
voice: self-heal whisper STT — health probe + kill-on-failure (#611 ) (dea2d7e )
voice: THOROUGH_MODEL → gemma4:e4b for VRAM headroom (#612 ) (a8411d5 )
Performance Improvements
chat: compact past-turn tool calls in the model context (721ba4f )
chat: compact prior turns' tool args+results in the model context (7db7c69 ), closes #623
chat: dispatch a turn's tool calls concurrently (bounded 5), gate-first (8623b6f )
chat: dispatch a turn's tool calls concurrently, gate-first (4bb0a4f ), closes #624
You can’t perform that action at this time.