Skip to content

(WIP) feat: Implement Copilot CLI feature via ACP#511

Draft
XiaoMouz wants to merge 1 commit into
dohooo:mainfrom
XiaoMouz:helene
Draft

(WIP) feat: Implement Copilot CLI feature via ACP#511
XiaoMouz wants to merge 1 commit into
dohooo:mainfrom
XiaoMouz:helene

Conversation

@XiaoMouz
Copy link
Copy Markdown

Target

- Sidecar: add probeModelsOnce()/runModelProbe() to CopilotAcpSessionManager
  so listModels() fetches real models from ACP on first call (15s timeout,
  singleton Promise to prevent concurrent spawns)
- Rust catalog: replace static copilot_section() with copilot_section_from_prefs()
  that reads cachedModels from app.copilot_provider settings; add CopilotPrefs
  struct and load_copilot_prefs() helper
- Rust command: add fetch_copilot_models() + list_copilot_models Tauri command
  (mirrors list_cursor_models pattern)
- Frontend settings: add CopilotProviderSettings type, copilotProvider key in
  SETTINGS_KEY_MAP, parseCopilotProviderSettings(), default and saveSettings wiring
- Frontend API: add listCopilotModels() invoke wrapper + CopilotModelEntry type
- Frontend UI: add CopilotProviderPanel with auto-fetch on mount, refresh button,
  and model list display; wire into Settings > Models panel

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 12, 2026

@XiaoMouz is attempting to deploy a commit to the Caspian's Team Team on Vercel.

A member of the Team first needs to authorize it.

@XiaoMouz XiaoMouz changed the title (WIP) feat: implement Copilot CLI feature via ACP (WIP) feat: Implement Copilot CLI feature via ACP May 12, 2026
david-engelmann added a commit to david-engelmann/helmor that referenced this pull request May 13, 2026
Replace scattered `provider === "codex"` / `provider === "cursor"` /
`provider == "codex"` checks with a typed capability table that the
composer, session-close dialog, and streaming-stop hook all read off
of. Single source of truth lives in Rust
(`agents::provider_capabilities`); the frontend pulls a mirrored TS
shape through a new `list_provider_capabilities` command and a
forever-cached, on-disk-persisted React Query.

The capability fields cover the existing scattered checks:
- displayName (replaces hard-coded "Claude" / "Codex" / "Cursor")
- supportsActiveGoal (composer /goal interception + stream-stop pause)
- supportsPlanMode, supportsContextUsage, supportsSteer,
  supportsSlashCommands, requiresApiKey
- permissionModes (the SDK wire-string list the composer's dropdown
  should render; Claude=all four, Codex=default+bypass, Cursor=default)

Unknown provider ids fall back to Claude's defaults (the broadest
surface), so a future provider (Copilot via dohooo#511, Pi via dohooo#321) lands
without accidentally disabling composer features — adding a new row
to the matrix is a single edit.

The pipeline accumulator, model catalog, and sidecar are untouched —
this is purely a backend-Rust + Tauri-command + frontend-helper slice
that makes future provider work safer to review.

Tests:
- 6 Rust unit tests (per-provider rows, fallback, wire-format
  camelCase gate, permission-mode SDK strings)
- 5 frontend unit tests (`findProviderCapabilities` matrix lookups,
  null fallback, regression gates for active-goal and api-key flags)
- Existing composer `/goal pause/clear` interception tests still
  pass after switching to capability-driven dispatch (with a small
  seed update for the new query key).

Closes dohooo#321 only at the design level (the "support Pi-mono" issue —
the spine is now ready for a Pi-shaped provider row); does not add
Pi as a provider. Helps dohooo#510 / dohooo#511 by giving the Copilot ACP work a
typed capability slot to plug into.
david-engelmann added a commit to david-engelmann/helmor that referenced this pull request May 14, 2026
Replace scattered `provider === "codex"` / `provider === "cursor"` /
`provider == "codex"` checks with a typed capability table that the
composer, session-close dialog, and streaming-stop hook all read off
of. Single source of truth lives in Rust
(`agents::provider_capabilities`); the frontend pulls a mirrored TS
shape through a new `list_provider_capabilities` command and a
forever-cached, on-disk-persisted React Query.

The capability fields cover the existing scattered checks:
- displayName (replaces hard-coded "Claude" / "Codex" / "Cursor")
- supportsActiveGoal (composer /goal interception + stream-stop pause)
- supportsPlanMode, supportsContextUsage, supportsSteer,
  supportsSlashCommands, requiresApiKey
- permissionModes (the SDK wire-string list the composer's dropdown
  should render; Claude=all four, Codex=default+bypass, Cursor=default)

Unknown provider ids fall back to Claude's defaults (the broadest
surface), so a future provider (Copilot via dohooo#511, Pi via dohooo#321) lands
without accidentally disabling composer features — adding a new row
to the matrix is a single edit.

The pipeline accumulator, model catalog, and sidecar are untouched —
this is purely a backend-Rust + Tauri-command + frontend-helper slice
that makes future provider work safer to review.

Tests:
- 6 Rust unit tests (per-provider rows, fallback, wire-format
  camelCase gate, permission-mode SDK strings)
- 5 frontend unit tests (`findProviderCapabilities` matrix lookups,
  null fallback, regression gates for active-goal and api-key flags)
- Existing composer `/goal pause/clear` interception tests still
  pass after switching to capability-driven dispatch (with a small
  seed update for the new query key).

Closes dohooo#321 only at the design level (the "support Pi-mono" issue —
the spine is now ready for a Pi-shaped provider row); does not add
Pi as a provider. Helps dohooo#510 / dohooo#511 by giving the Copilot ACP work a
typed capability slot to plug into.
david-engelmann added a commit to david-engelmann/helmor that referenced this pull request May 14, 2026
Replace scattered `provider === "codex"` / `provider === "cursor"` /
`provider == "codex"` checks with a typed capability table that the
composer, session-close dialog, and streaming-stop hook all read off
of. Single source of truth lives in Rust
(`agents::provider_capabilities`); the frontend pulls a mirrored TS
shape through a new `list_provider_capabilities` command and a
forever-cached, on-disk-persisted React Query.

The capability fields cover the existing scattered checks:
- displayName (replaces hard-coded "Claude" / "Codex" / "Cursor")
- supportsActiveGoal (composer /goal interception + stream-stop pause)
- supportsPlanMode, supportsContextUsage, supportsSteer,
  supportsSlashCommands, requiresApiKey
- permissionModes (the SDK wire-string list the composer's dropdown
  should render; Claude=all four, Codex=default+bypass, Cursor=default)

Unknown provider ids fall back to Claude's defaults (the broadest
surface), so a future provider (Copilot via dohooo#511, Pi via dohooo#321) lands
without accidentally disabling composer features — adding a new row
to the matrix is a single edit.

The pipeline accumulator, model catalog, and sidecar are untouched —
this is purely a backend-Rust + Tauri-command + frontend-helper slice
that makes future provider work safer to review.

Tests:
- 6 Rust unit tests (per-provider rows, fallback, wire-format
  camelCase gate, permission-mode SDK strings)
- 5 frontend unit tests (`findProviderCapabilities` matrix lookups,
  null fallback, regression gates for active-goal and api-key flags)
- Existing composer `/goal pause/clear` interception tests still
  pass after switching to capability-driven dispatch (with a small
  seed update for the new query key).

Closes dohooo#321 only at the design level (the "support Pi-mono" issue —
the spine is now ready for a Pi-shaped provider row); does not add
Pi as a provider. Helps dohooo#510 / dohooo#511 by giving the Copilot ACP work a
typed capability slot to plug into.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant