Skip to content

2026.02.27 - Keystone

Choose a tag to compare

@seiggy seiggy released this 27 Feb 22:40
· 577 commits to master since this release
462d050

Release Notes - 2026.02.27

Release Date: February 27, 2026
Code Name: "Keystone"


πŸ—οΈ Overview

"Keystone" is a UX and resilience release that transforms Lucia's first-run experience into a fully guided, self-healing onboarding wizard. Named after the wedge-shaped stone at the crown of an arch that locks everything into placeβ€”Keystone ensures that the dashboard API key, AI provider configuration, and agent initialization all interlock seamlessly before the user ever touches Home Assistant. Once that keystone is set, the arch holds.

πŸš€ Highlights

  • Guided AI Provider Setup β€” New wizard step lets users configure Chat and Embedding providers (OpenAI, Azure OpenAI with API Key or Default Credential) directly during onboarding, with live connectivity tests before proceeding.
  • Agent Status Gate β€” After providers are configured, the wizard waits for all agents to come online with real-time health polling before presenting the Home Assistant integration instructions.
  • Setup Resume Flow β€” If a user's browser session is lost mid-setup (after key generation but before completion), they can now re-authenticate with their dashboard key and continue where they left off instead of hitting a dead end.
  • Infinite Prompt Cache β€” Agent-level prompt cache entries no longer expire after 4 hours; they persist until manually evicted via the dashboard, maximizing LLM cost savings.

✨ What's New

πŸ§™ Setup Wizard β€” AI Provider Configuration (Step 4)

  • Provider type selection β€” Choose between OpenAI and Azure OpenAI for both Chat and Embedding capabilities.
  • Azure authentication modes β€” API Key and Azure Default Credential are both supported. Default Credential enables managed identity deployments without storing secrets.
  • Live provider test β€” Each configured provider is validated with a real API call before it can be saved. Failed tests show the error message inline.
  • Provider cards β€” Configured providers display as summary cards with model/deployment name and a remove option.
  • Capability badges β€” Visual indicators show which capabilities (Chat, Embedding) are configured.

⏳ Setup Wizard β€” Agent Status Gate (Step 5)

  • Real-time agent health polling β€” After AI providers are saved, the wizard polls /api/agents/status every 3 seconds until all agents report healthy.
  • Per-agent status cards β€” Each agent shows a spinner (initializing), green check (ready), or red X (failed) with the agent description.
  • Automatic progression β€” The Next button enables only when all agents are online, preventing the user from configuring Home Assistant before agents are ready to receive commands.

πŸ”„ Setup Resume Flow

  • Session recovery β€” If the dashboard key was already generated but setup wasn't completed, the wizard detects this state and presents a login form instead of a dead-end message.
  • Cookie-aware authentication β€” The wizard checks three auth sources: key generated this session, resumed via login form, or existing session cookie from a previous visit.
  • Graceful degradation β€” Users who lose their key must reset MongoDB storage and start freshβ€”no backdoor recovery mechanism that could be exploited.

♾️ Infinite Prompt Cache Retention

  • Removed 4-hour TTL β€” ChatCacheTtl field and all TimeSpan parameters removed from StringSetAsync calls in RedisPromptCacheService.
  • Manual eviction only β€” Cache entries persist in Redis indefinitely until evicted via the Prompt Cache dashboard page (per-entry or bulk "Clear All").
  • Cost optimization β€” Long-running instances accumulate cache hits over time without periodic cold-start penalties.

πŸ› Bug Fixes

  • Orchestrator URL registration β€” OrchestratorAgent was registering the internal container address (e.g., http://localhost:5000/agent) as its A2A endpoint instead of a relative /agent path. External callers couldn't reach the agent through the reverse proxy. Fixed to use relative URL resolution.
  • Azure OpenAI embedding 404 β€” The API-key path for Azure OpenAI embeddings used the plain OpenAI.Embeddings.EmbeddingClient which sends requests to the wrong URL pattern. Azure OpenAI requires AzureOpenAIClient for the /openai/deployments/{name}/embeddings?api-version=... route. Fixed to use AzureOpenAIClient + AzureKeyCredential for both API key and Default Credential paths.
  • Empty agent catalog crash β€” Home Assistant custom component raised ConfigEntryNotReady when the agent catalog was empty instead of gracefully showing no agents. Fixed to return an empty list.
  • A2A SDK dependency removed β€” Custom component no longer depends on the experimental a2a-sdk Python package, resolving HACS validation failures and installation issues.
  • Playwright test stability β€” Rewrote setup wizard E2E tests to handle the resume flow, added Agent Cache tab switching for prompt cache validation, and fixed column mapping for the new cache table layout.
  • StepIndicator overflow β€” The 6-step wizard progress tracker overflowed its container on narrow viewports. Fixed with proper flex-wrap and sizing.

πŸ§ͺ Testing

  • 7 setup wizard E2E tests β€” Covers redirect, welcome page, key generation + HA config, AI provider configuration, agent status gate, dashboard authentication, and setup endpoint lockdown.
  • 5 prompt cache E2E tests β€” Validates cache login/clear, miss recording, hit detection, different-prompt separation, and manual eviction through the dashboard UI.
  • Resume flow coverage β€” Tests navigate through the wizard with a pre-existing dashboard key, exercising the resume login path.

πŸ“¦ Files Changed

  • 20 files changed, +1,201 / βˆ’528 lines across dashboard, backend, tests, and HA custom component.