(WIP) feat: Implement Copilot CLI feature via ACP#511
Draft
XiaoMouz wants to merge 1 commit into
Draft
Conversation
- 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>
|
@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. |
6 tasks
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Target