main
fix: sports-hint ranking penalty fires on 'transport'/'passport' substrings (#1473)
Anchor shell-verb intent patterns to imperative or can-you position (#1664)
fix(agent): stop sending tool schemas to native Ollama endpoints (#1765)
Handle incomplete detached agent streams
fix: agent_tools._truncate crashes on non-string input (#1624)
Fix RAG remove_directory wiping the entire shared collection (#1660) (#1734)
fix: APIKeyManager.load crashes app startup on a corrupt/wrong-shape api_keys.json (#1565)
fix: inside_base_dir raises TypeError on a non-string path instead of failing closed (#1619)
Odysseus v1.0
fix: require_privilege 500s on a non-dict privileges blob from auth.json (#1693)
Ignore invalid background job store rows (#1261)
Ignore non-string background stream deltas (#1549)
fix: signature learning never skips support@/info@/admin@ senders (#1773)
Add native Windows compatibility layer
fix: validate_caldav_url crashes with TypeError on a non-string URL (#1608)
Decrypt CalDAV password before write-back (#1731)
Use LM Studio-reported vision capability for image passthrough (#1130)
fix(vision): recognize Gemma 4 and Phi-4 as vision-capable models (#1704)
fix: ChromaDB unreachable blocks app startup for 30-60s (#326) (#476)
Replace cleanup service datetime.utcnow calls (#1494)
Align SearXNG fallback URL
feat: adapt agent_input_token_budget to the model context window (#1170) (#1230)
fix: context_compactor token helpers crash on non-string message text (#1634)
fix: deep research runs the prompt's example queries when the model echoes them (#1666)
fix: document tidy crashes on a duplicate with NULL timestamps (#1772)
Cap inline attachment context across files (#1498)
Ignore non-string email thread bodies (#1654)
Harden session endpoint owner scope (#1308)
Ignore invalid integration rows (#1404)
fix: recognize Gemma 4 as a thinking model and add context entry (#1642)
fix: is_markitdown_format crashes on a non-string path (#1618)
fix: close AsyncExitStack on MCP init/tool-discovery failure (#1493)
fix: memory entry validation crashes on a non-dict row from memory.json (#1691)
Reject invalid Tailscale discovery JSON (#1556)
fix(forms): keep PDF-form export from dropping values when the label has '*' (#1407)
Show a clear message when PyMuPDF is missing
Skip malformed personal keyword index rows
Fall back from invalid preset stores (#1402)
Re-enable VectorRAG init with lazy retry
fix: RAG keyword fallback leaked owner-less documents across users (#1722)
feat: add /api/ready readiness probe (DB, data dir, local-first) (#1200)
fix: research source extraction crashes on a non-dict finding (#1714)
Treat non-string research summaries as low quality
fix(settings): catch PermissionError in load_settings + error-path tests (#1570)
Ignore non-object settings scrub inputs (#1645)
fix: monthly tasks scheduled for day 29-31 skip every short month (#1668)
fix: evaluate_turn_regex crashes on a non-string agent_reply (#1723)
fix: _strip_reasoning_prose discards the answer when reasoning trails it (#1643)
fix(tools): strict path confinement with sensitive-subpath deny list (#1072)
fix: updating a calendar event ignores user timezone and shifts the time (#1695)
Don't force-include the email toolset on every "tell me" query (#1707) (#1735)
fix: tool-block parsing crashes on a non-string input (#1628)
fix(agent): coerce non-object tool-call arguments instead of crashing (#1370)
fix: is_public_blocked_tool crashes on a truthy non-string tool name (#1620)
Topics: hydrate session history before analysis
fix: uploads with _ or - in the extension become permanently unreadable (#1756)
fix: check_outbound_url crashes on a truthy non-string URL (#1623)
fix: visual report drops photos whose URL slug contains icon or logo (#1685)
Replace webhook manager datetime.utcnow calls (#1499)
fix: youtube transcript formatter crashes on a non-dict segment (#1745)