feat(sidebar B.1 #31): visible LLM status chip with live state
The LLM runtime has been quiet since it shipped in Phase 3 — users had no surface-level signal that cleanup was loaded, warming, or actively generating. Settings has verbose status text internally, but a dictation-flow user never opens Settings during a run. New: a shared $state store drives a small chip in the sidebar that reflects the true LLM state in ≤500 ms of any transition (brief item #31 acceptance). Five states: off → hidden (user has aiTier === "off") warming → model download or first load in flight; amber pulse ready → loaded + idle; green dot generating → cleanup_transcript_text_cmd or extract_tasks_from_transcript_cmd in flight; accent pulse with Sparkles icon error → last operation failed; red dot with AlertTriangle The store exposes three calls: refreshLlmStatus(aiTier) (polls the backend), markGenerating(detail) / markGenerationDone(success). DictationPage wraps its cleanup + extract calls in mark-generating pairs. SettingsPage's LLM load / unload / delete / download paths also refresh the global store so Settings-initiated transitions surface in the sidebar immediately. The chip collapses to a dot-only compact form when the sidebar is collapsed. No backend changes — everything wires onto the existing `get_llm_status` Tauri command. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { page, settings, tasks, saveSettings } from "$lib/stores/page.svelte.js";
|
||||
import { Mic, FileText, SquareCheck, Clock, Settings, ChevronRight, ChevronLeft } from 'lucide-svelte';
|
||||
import LlmStatusChip from "$lib/components/LlmStatusChip.svelte";
|
||||
|
||||
let taskCount = $derived(tasks.filter((t) => !t.done).length);
|
||||
|
||||
@@ -53,6 +54,17 @@
|
||||
|
||||
{#if !collapsed}
|
||||
<p class="text-[10px] text-text-tertiary px-5 mt-1.5 tracking-[0.12em] uppercase">Think out loud</p>
|
||||
<!-- LLM status chip — hidden when aiTier === off, otherwise reflects
|
||||
disconnected / warming / ready / generating / error state live. -->
|
||||
<div class="px-5 mt-2">
|
||||
<LlmStatusChip />
|
||||
</div>
|
||||
{:else}
|
||||
<!-- Collapsed: compact dot-only chip so the sidebar still surfaces
|
||||
the state without eating horizontal space. -->
|
||||
<div class="mt-2 flex justify-center">
|
||||
<LlmStatusChip compact />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<!-- Separator -->
|
||||
|
||||
Reference in New Issue
Block a user