Skip to content

feat(providers): GitHub Copilot runs on Windows - #7

Draft
wSedlacek wants to merge 20 commits into
mainfrom
t3/copilot-windows
Draft

wSedlacek wants to merge 20 commits into
mainfrom
t3/copilot-windows

Conversation

@wSedlacek

Copy link
Copy Markdown

Reopened from closed upstream PR pingdotgg#32630 as a draft for t3.1code.
Idea rank: 6 of 108. Branch is as it was upstream; it likely needs a rebase (modernize) before review.

Stacked on pingdotgg#32221 (includes that PR until it lands). Prefer reviewing only the Windows commits.

Problem

The GitHub Copilot provider from pingdotgg#32221 refuses to start on Windows. The SDK starts the CLI without a shell, so the copilot.cmd shim from an npm install fails with spawn EINVAL.

Change

T3 now launches the copilot.exe behind npm's shim, so the provider runs on Windows.

  • Review guides stay off on Windows. Their read-only rules are written for bash, and Copilot's shell there is powershell. They fail with the existing "choose another model" message until those rules can be tested on a live agent.
  • The account check gets 30 seconds instead of 10, on every platform. A first start took 9.7 seconds on a fresh Windows machine, so a signed-out user got "could not read your account" instead of being told to run copilot login.
  • Git paths like C:/secret are refused in the review guide rules. They were only unreachable on Windows because the shell tool is unavailable there.
  • PowerShell tools show as commands in the transcript.

Scope and approval

This depends on pingdotgg#32221, which has no explicit maintainer approval yet, so it needs the same decision on direction and scope.

Verification

vp run check:changed passes on macOS. I ran the rest on GitHub-hosted windows-latest machines through a temporary fork workflow, with no secrets and no Copilot login, using @​github/copilot 1.0.107 installed with npm on x64.

Check Result
Start the CLI through copilot.cmd directly Fails with spawn EINVAL
T3 resolves copilot.CMD to the copilot.exe behind it Works
Start the binary and create a session through the SDK Works
Status from T3's own code on a cold machine installed but not signed in. Run copilot login, in about 12s
packages/provider-copilot server tests All 3 test files pass
Tools the CLI reports powershell, not bash

Not checked:

  • A real agent turn on Windows, which needs a signed-in account. Steering, approvals, rewind, and file paths in tool output have not run there.
  • T3's runtime past the "not authenticated" error from models.list on that signed-out machine.
  • The desktop app on Windows.
  • Installs other than npm, and ARM.

There is no UI change to show.

Created with Opus 5.5 in Claude Code.

🤖 Generated with Claude Code

🤖 Generated with Claude Code

wSedlacek and others added 20 commits November 9, 2026 10:17
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep images on expanded slash commands, rebuild messages on resume and after
a rewind, fork from the source session's own history, and bound the CLI when
it stops responding.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bound Copilot text generation startup too, so a stalled CLI is force stopped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A fork leaves another session active, so a rewind could hit the wrong session
or report success without truncating anything. Also stop the CLI when text
generation is interrupted, and keep provider text out of the stop error detail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review guides need to read the checkout, so these sessions get read-only tools.
Copilot runs commands it considers read-only without asking, including
git diff --output, so a pre-tool hook enforces the limit on every call.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Move git to an allow list: git diff compares files anywhere once a path leaves
the checkout, even without --no-index. Treat unknown tool arguments as paths and
resolve symlinks, so a change request cannot point a read outside the checkout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The SDK starts the CLI without a shell, so npm's shim fails with spawn EINVAL.
Launch the binary behind it instead. Review guides stay off on Windows because
their read-only rules are written for bash, and Copilot's shell there is PowerShell.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Autopilot can finish while background work is still running, so end the turn on session.autopilot_stopped. Also keep MCP App failures as cause without copying their message, and resolve project-local .bin shims on Windows.

Co-authored-by: Cursor <cursoragent@cursor.com>
Subagent turn_start/idle were flipping mainAgentBusy and clearing the steered mark, so steers interrupted idle mains or settled as cancelled. Guard root-agent state on missing agentId (from NicL9923) and cover Autopilot error settles.

Co-authored-by: Cursor <cursoragent@cursor.com>
pnpm install failed with ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY for @effect/vitest after the main merge left an incomplete lockfile entry.

Co-authored-by: Cursor <cursoragent@cursor.com>
HistorySwipeNavigation only attaches on macOS, so the tab-strip flick test never navigated on Linux CI and failed after pingdotgg#33396.

Co-authored-by: Cursor <cursoragent@cursor.com>
# Conflicts:
#	packages/provider-acp/src/server/adapter.ts
@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:XXL labels Nov 14, 2026
@github-actions

Copy link
Copy Markdown

This PR changes the test suite by +58 test cases (browser 0, unit +54, server +4).

Keep tests that would fail for a real reason, and test logic below the UI where it can be. See Testing.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants