Skip to content

Add GitHub Copilot as a built-in provider#3076

Open
huxcrux wants to merge 76 commits into
pingdotgg:mainfrom
huxcrux:hux-copliot-fix
Open

Add GitHub Copilot as a built-in provider#3076
huxcrux wants to merge 76 commits into
pingdotgg:mainfrom
huxcrux:hux-copliot-fix

Conversation

@huxcrux

@huxcrux huxcrux commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

This PR supersedes #2185. It includes the full Copilot integration from that PR plus the fixes and hardening discovered while testing it against the current codebase.

What Changed

  • Added GitHub Copilot as a first-class provider using the official Copilot SDK.
  • Wired Copilot through the server runtime for auth/status checks, model discovery, session start/resume, turn sending, permission replies, request handling, and event streaming.
  • Added Copilot-backed git text generation for commit messages, PR descriptions, branch names, and thread titles.
  • Added Copilot provider settings, defaults, model traits, reasoning effort, context window handling, and persisted configuration.
  • Updated the web UI so Copilot appears in provider/model pickers, settings, icons, context window selection, task rendering, and git writing model selection.
  • Hardened Copilot runtime behavior for queued turns, duplicate completions, tool-only turns, empty diffs, missing checkpoint refs, stale resume cursors, failed sends, task completions, and rollback-safe checkpointing.
  • Added regression coverage for the Copilot adapter, provider probing, text generation, context window handling, and related projection flows.

Why

T3 Code supports multiple agent providers, but did not have GitHub Copilot support. This adds Copilot end to end in the same shape as the existing providers, so users can configure Copilot, select Copilot models, use Copilot for git text generation, and rely on the same session/runtime flows as other providers.

The extra hardening keeps Copilot predictable under real usage: turns complete once, tool output and reasoning project correctly, diffs are only emitted when meaningful, permission replies resolve cleanly, checkpoint handling is safer, and provider status/model data stays accurate.

UI Changes

  • Added Copilot to the provider/model picker.
  • Added Copilot settings and model configuration surfaces.
  • Added Copilot icons, reasoning/context-window controls, and task output rendering.

Updated model picker:
image

Provider settings:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

High Risk
Touches checkpoint revert ordering, provider rollback recovery, and a new full provider adapter—errors could leave filesystem and conversation state inconsistent or mis-project active turns.

Overview
Adds GitHub Copilot as a built-in provider via CopilotDriver, the official SDK dependencies, and a large CopilotAdapter surface (sessions, permissions, event normalization, diffs, titles, background tasks) with extensive adapter tests.

Checkpoint and revert behavior is tightened: missing placeholder git refs are only captured once the session is no longer running, with a thread.session-set path to flush remaining placeholders; revert restores the filesystem before provider rollbackConversation, rolls back the workspace on provider failure (with optional restore to the current checkpoint), skips provider rollback when filesystem restore fails, and preflights checkpoint ref availability. Checkpoint diffs return a clearer error when a ref is missing.

Orchestration/projections avoid advancing latestTurn while another turn is still active, map content.delta streams into reasoning and tool-output activities, and improve first-turn title/branch generation (drain waits on title jobs, retries, truncated-seed matching, Copilot model selection in tests).

Test harnesses move some vi imports to vitest and add regression coverage across checkpoint store, checkpoint reactor, provider command reactor, and runtime ingestion.

Reviewed by Cursor Bugbot for commit df43adf. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add GitHub Copilot as a built-in provider with adapter, text generation, and settings

  • Introduces CopilotDriver as a registered built-in provider, wiring together a CopilotAdapter for session/turn/approval flows and makeCopilotTextGeneration for commit messages, PR content, branch names, and thread titles
  • Adds CopilotSettings to server config (binary path, server URL, custom models) and exposes Copilot in the settings UI; removes GitHub Copilot from the "coming soon" list
  • createCopilotClient handles CLI path resolution, POSIX shell normalization, environment setup, and model capability mapping (reasoning effort, context tier)
  • Text generation reuses a shared client per (cwd, settings) key, creates isolated sessions per request, retries on failure, and shuts down idle clients after 30 seconds
  • Checkpoint revert now validates target ref availability, attempts provider rollback on failure, restores the filesystem to the current checkpoint, invalidates workspace entries, and records detailed failure activities
  • Risk: adds @github/copilot and @github/copilot-sdk as runtime server dependencies; Copilot sessions time out at 180s with no streaming support

Macroscope summarized df43adf.

zortos293 and others added 30 commits June 14, 2026 09:28
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Expose the new Copilot CLI max reasoning effort option in model capabilities.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Emit command metadata separately from command output so Copilot command rows render like Codex.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
huxcrux and others added 9 commits June 14, 2026 11:41
Keep sidebarThreadSummaryById owned by shell updates by removing the detail-stream metadata patch and its regression test.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ensure Copilot session.error events complete the active turn as failed before clearing active turn state, and cover the lifecycle with a regression test.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Jun 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 265cdfc8-1095-4ea6-94f7-acbae04e4865

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jun 14, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit fa9f054. Configure here.

Comment thread apps/server/src/orchestration/Layers/CheckpointReactor.ts
Comment thread packages/shared/src/providerToolClassification.ts
Comment thread apps/server/src/orchestration/Layers/CheckpointReactor.ts
@macroscopeapp

macroscopeapp Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

huxcrux and others added 3 commits June 14, 2026 12:48
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread apps/server/src/orchestration/Layers/CheckpointReactor.ts
Comment thread packages/shared/src/providerToolClassification.ts
huxcrux and others added 6 commits June 14, 2026 13:02
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment on lines +1855 to +1858
message: event.data.message.trim(),
detail: event.data,
},
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium Layers/CopilotAdapter.ts:1855

event.data.message.trim() throws when event.data.message is null or undefined. Other handlers in this file use trimOrUndefined() to safely handle optional SDK messages.

-          payload: {
-            message: event.data.message.trim(),
-            detail: event.data,
-          },
+          payload: {
+            message: trimOrUndefined(event.data.message) ?? "",
+            detail: event.data,
+          },
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/server/src/provider/Layers/CopilotAdapter.ts around lines 1855-1858:

`event.data.message.trim()` throws when `event.data.message` is `null` or `undefined`. Other handlers in this file use `trimOrUndefined()` to safely handle optional SDK messages.

Evidence trail:
apps/server/src/provider/Layers/CopilotAdapter.ts line 1855 (direct .trim() on event.data.message), line 1761 (same field uses trimOrUndefined for session.error), apps/server/src/provider/copilotRuntime.ts lines 63-65 (trimOrUndefined definition with null-safe ?.trim())

huxcrux and others added 2 commits June 14, 2026 22:06
Import the mock API directly from vitest in server tests and keep the patched @effect/vitest runner resolution aligned with the workspace vitest alias.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid @effect/vitest in the tailscale package because its patched runner import can resolve incompatible Vitest internals under vp test. Run the Effects through a local Vitest helper instead and depend directly on the repo Vitest catalog alias.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants