Files
boocode/openspec/changes/v2-3-provider-lifecycle/proposal.md
indifferentketchup 93d3f86c2b v2.2-paseo-providers: Paseo provider stack + v2.2.1 pane-scoped chat fixes
Ship Paseo-equivalent provider snapshot, AgentComposerBar, ACP dispatch
rewrite with streaming/persist, permission prompts, and agent commands.
Follow-up: pane-scoped chat resolution, CoderMessageList tool timeline,
WS user-delta replace, and inference orphan tool_call stripping.
Archive openspec v2-2; update CHANGELOG and CURRENT.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 15:18:31 +00:00

3.2 KiB
Raw Blame History

v2.3 Provider lifecycle (Paseo-style registry)

Status: Planned
Depends on: v2.2 Paseo providers (snapshot, modes, commands, ACP dispatch)
Reference fork: /opt/forks/paseo
Related deferred work: docs/DEFERRED-WORK.md §2 (cold-probe skip)

Why

BooCode v2.2 copied Paseos snapshot wire shape (modes, thinking, commands) but not Paseos provider lifecycle:

  • Providers are hardcoded in provider-registry.ts; adding one requires a code change and redeploy.
  • Uninstalled agents disappear from the picker instead of showing “not installed.”
  • There is no enable/disable toggle — every probed binary appears.
  • Every snapshot cache miss runs a full cold ACP probe for all installed agents (530s).

Paseos model (see /opt/forks/paseo/public-docs/providers.md) treats providers as registered entries in a config-backed registry, then probes the machine for readiness, then lets the user toggle visibility. That fits a one-person homelab: edit JSON, refresh, flip a switch — no TypeScript deploy for each new ACP CLI.

Scope

In scope

  1. Config file /data/coder-providers.json — add/disable/custom ACP providers without code changes
  2. Merged registry — built-ins + config overrides at runtime
  3. Snapshot lifecycleloading | ready | unavailable | error; always list registered providers; enabled flag
  4. Two-tier probe — fast binary check vs slow ACP session (DB last_probed_at gate)
  5. Generic ACP dispatch — config entries spawn via { command, env } without new acp-spawn cases
  6. HTTP API — read/patch config, per-provider refresh, optional diagnostic
  7. Web UI — settings drawer: provider list, enable toggle, refresh, add-from-catalog (curated ~510 entries)
  8. Tests + docs — snapshot unit tests, BOOCODER.md refresh contract

Out of scope (this batch)

  • Full Paseo ACP catalog (30+ agents) — curate a small local catalog only
  • React Native settings app port
  • Replacing acp-dispatch.ts with Paseos ACPAgentClient hierarchy
  • Voice provider stack
  • MCP list_providers / inspect_provider tools (Tier 2 follow-up)
  • WS push of snapshot updates (Tier 2 follow-up)

Non-goals

  • Multi-user provider prefs (single-user homelab)
  • Installing CLIs from the UI (link to install instructions only, like Paseo)
  • Removing available_agents table — keep it as probe cache, extend with enabled or mirror config

Success criteria

  • Add amp-acp via catalog → appears in picker after refresh without coder redeploy
  • Disable goose in settings → gone from picker, still visible as “Disabled” in settings
  • opencode not on PATH → shows “Not installed” in settings, hidden from picker
  • Second snapshot open within warm window completes in <500ms (no ACP spawns)
  • POST /api/providers/refresh still runs full cold probe
  • Existing v2.2 dispatch (cursor, opencode, claude, qwen) unchanged for built-ins

Deliverables

Doc Purpose
design.md Full architecture, schemas, file map, Tier 3 reference
tasks.md Numbered implementation checklist