Skip to content

feat(usage): provider enablement settings, usage-source registry, and multi-provider usage modal #1102

Closed

Description

@Juliusolsson05

Motivation

The usage modal, header indicator, and exhaustion-driven switch suggestions are hardcoded to Claude + Codex (UsageProviderKind, usageService.ts), while five provider kinds are registered. Users who never use a provider (e.g. Grok) still see it everywhere; z.ai GLM Coding Plan usage (via OpenCode) has no surface at all.

Spec: docs/superpowers/specs/2026-09-20-provider-usage-enablement-design.md (approved).

Intended behavior

  • New main-owned provider enablement state per agent kind, defaulting to PATH auto-detection; explicit user toggles pin the value; Reset restores detection.
  • New Providers settings category: toggle + detection hint per provider; OpenCode row gains a usage-source dropdown (none | zai, extensible).
  • A disabled provider disappears from new-agent pickers, single/bulk provider switch menus, fleet bulk actions, and the usage modal/header. Running sessions are untouched.
  • Generalize usage to a UsageSourceId registry (claude | codex | grok | opencode:zai) in src/main/usage/; usageService composes the active source list from settings, preserving per-source failure isolation, 30s TTL, in-flight coalescing.
  • Usage modal redesign: provider rail + detail pane, per-source loading skeleton from the known active-source list, dynamic subtitle, keyboard-navigable rail, empty state linking to Providers settings.

This issue covers Phase 1 only (Claude + Codex live). Grok and z.ai readers are separate issues; their sources ship dark until those land.

Acceptance criteria

  • Enablement state with detection defaults, user override pinning, reset — unit tested.
  • All listed surfaces filter on enablement (exhaustive vs AGENT_PROVIDER_KINDS consumers, contract-test enforced).
  • getUsageSnapshot returns composed active sources; disabled ⇒ absent, never an error row.
  • Modal renders N sections in rail+detail layout with real loading skeleton; keyboard nav; empty state.
  • Existing behavior preserved for Claude/Codex rows, header polling, /usage shortcut, exhaustion suggestions.
  • npm run check-relevant test tiers pass.

Refs the spec above; implements Phase 1.

Activity

  1. Juliusolsson05 commented on Sep 22, 2026

    @Juliusolsson05
    OwnerAuthor

    Implementation complete in PR #1126 (enablement + both readers + review fixes from four orchestrated reviewers). CI running; will merge after green.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions