Skip to content

LIA

v1.20.6 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

Topics

ai ai-assistant apple llm claude conversational-ai
+13 more
docker emotional-ai google healthcare-ai human-in-the-loop langchain langgraph mcp multi-agent personal-assistant self-hosted skills vision-ai

Affected surfaces

breaking_upgrade

Summary

AI summary

Adds a universal planner defense against semantic‑leak bugs and centralizes 28 timeouts as operator‑tunable config.

Full changelog

Highlights

Three independent hardening fronts shipped in one release.

🛡️ ADR-084 — Indexable vs Semantic Criteria (universal planning principle)

Repeated diagnostics of "mes deux prochains rdv médicaux" surfaced a class of failures invisible to the existing validator: the planner was passing semantic qualifiers (medical, urgent, important) as the query of literal-text-search tools (Calendar / Gmail / Notion-style stores) which then returned 0 hits or false positives.

4-layer defense:

  • Universal prompt section in smart_planner_prompt.txt (370 tokens, prompt-cached after first call)
  • Structured semantic_filter_terms hint emitted by the query analyzer
  • Universal PlanValidator._check_semantic_leak gated by PLANNER_SEMANTIC_LEAK_MODE (off / observe / autocorrect, default observe)
  • ToolManifest.text_search_mode declarative opt-out for native semantic-search backends

Ships in observe mode this release: zero plan mutation, only telemetry. Phase 2 promotion to autocorrect gated on operational metrics. Tests: 19 cases including French apostrophe regression and required-param protection.

🔧 Gemini 3.x response.content shape fix

Switching query_analyzer / planner to gemini-3.1-pro-preview exposed smart_planner_panic_failed with a JSON parse error: langchain_google_genai wraps the response as list[dict] for Gemini 3.x specifically while every other provider keeps str.

33 sites across 26 files migrated to the LangChain Core 1.2+ BaseMessage.text property which handles both shapes:

  • Planner ×2, response node, compaction ×3, memory extraction + reference resolution ×4
  • HITL classification + question generation streams ×6
  • Voice TTS, broadcast notifications
  • Journals extraction + consolidation ×3, interests ×3, psyche ×2, heartbeat
  • MCP service, llm_cache key serialization

End-to-end Gemini 3.1 Pro Preview pipeline now runs cleanly. Test mocks for compaction, draft_modifier, item_filter and psyche updated to mirror .content on .text.

⏱️ Vagues 1-5 timeout centralization

Audit inventoried ~80 backend timeouts and surfaced:

  • 28 hardcoded values used in production paths but never operator-tunable
  • 2 inline magic numbers in parallel_executor
  • 1 orphan field (task_orchestrator_execution_timeout_seconds) declared but never read
  • 2 dead constants, 1 duplicated Field (currency API)
  • 1 cascade inversion bug (Brave enrichment 3 s wrapper firing before its own 5 s HTTP call → raised to 8 s)

All 28 hardcoded values exposed as Pydantic Fields with operator-validated ranges and matching .env.example / .env.prod.example entries. Two new config modules: LocksSettings (OAuth refresh lock) and SchedulerSettings (scheduled-actions executor). The orphan global timeout was wired in parallel_executor.execute_plan_parallel as a soft cap on multi-wave plans + new Prometheus counter lia_parallel_execution_global_timeout_total{plan_outcome}.

Single source of doc truth: docs/technical/TIMEOUT_REGISTRY.md — 12 sections + Annex A (LLM out-of-scope), Annex B (frontend timing.ts mirror), Annex C (gaps tracked for future Vague 6).

Pydantic ranges fully aligned with scripts/validate_config.py end-to-end; 4 legacy gt=0-only Fields tightened (http_timeout_oauth/token/external_api, apple_connection_timeout).

What changed for users

See the in-app FAQ changelog (v1.20.6 entry) — 4 user/admin items in 6 languages:

  1. Web search (Brave) response enrichment more reliable
  2. Gemini 3.x LLM fully compatible end-to-end
  3. 28 timeouts now operator-tunable via .env + new TIMEOUT_REGISTRY.md
  4. Preventive defense layer on the planner (in observe mode)

Documentation

  • ADR-084 created
  • TIMEOUT_REGISTRY.md created
  • PLANNER.md, SMART_SERVICES.md, OBSERVABILITY_AGENTS.md updated
  • README banner bumped (v1.20.5 demoted)
  • GETTING_STARTED.md compatibility line updated
  • Blog article execution-plans enriched with an "Indexable vs Semantic criteria distinction" section in 6 languages

Commit

91eb2ad — see CHANGELOG.md for the full diff narrative.

Security Fixes

  • ADR‑084 defense layer added to prevent planner from leaking semantic qualifiers into literal text searches (observe mode)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track LIA

Get notified when new releases ship.

Sign up free

Beta — feedback welcome: [email protected]