(WIP) feat: Implement Copilot CLI feature via ACP#511
Draft
XiaoMouz wants to merge 8 commits into
Draft
Conversation
|
@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.
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.
- Introduced CopilotSessionManager to manage Copilot sessions. - Updated model catalog to include Copilot models with appropriate effort levels. - Enhanced request parser to recognize "copilot" as a valid provider. - Expanded session manager to include Copilot as a provider. - Implemented Copilot capabilities in provider capabilities module. - Added Copilot login status handling in system commands. - Created a new accumulator for handling Copilot events. - Integrated Copilot event handling into the main event processing pipeline. - Added Copilot icon and updated onboarding to include Copilot authentication. - Developed settings panel for managing Copilot provider settings.
dohooo
added a commit
that referenced
this pull request
Jun 3, 2026
* feat(agents): provider capability contract 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 #511, Pi via #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 #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 #510 / #511 by giving the Copilot ACP work a typed capability slot to plug into. * fix: format provider capability test helper --------- Co-authored-by: Caspian Zhao <caspian.zhao@outlook.com>
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