Skip to content

epic: add spinner/status indicators for all long-running operations #694

@bug-ops

Description

@bug-ops

Motivation

User-facing operations exceeding ~300ms should display status indicators via Channel::send_status() so users know what's happening. Currently only 2 of ~25 long-running operations show spinners (context compaction and summarization).

Existing Infrastructure

  • Channel::send_status(text) — displays spinner with message; empty string clears it
  • Channel::send_typing() — typing indicator (Telegram)
  • Already used in context.rs:276 (compaction) and persistence.rs:114 (summarization)

Scope

25 operations identified across the codebase, grouped into 6 issues by subsystem:

Issue Subsystem Priority Items
#1 LLM inference & provider warmup P0 4
#2 Skills: install, registry, matcher P0-P1 4
#3 Memory: init, embeddings, persistence P0-P1 4
#4 MCP & external service initialization P1 3
#5 Tool execution & web scraping P2 4
#6 Miscellaneous: CLI, config, audio P2 6

Implementation Pattern

let _ = self.channel.send_status("loading model...").await;
// ... long operation ...
let _ = self.channel.send_status("").await; // clear

Constraints

  • send_status requires &mut Channel — some call sites may need threading changes
  • Status text should be lowercase, concise (e.g. "loading skills...", not "Loading the skill registry, please wait")
  • Clear status ("") after every operation to avoid stale messages
  • Ignore send errors (let _ =) — status is best-effort

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions