Skip to content

feat: add GitHub Copilot OAuth provider for individual users#25

Open
cookiespiggy wants to merge 1 commit into
get-vix:mainfrom
cookiespiggy:github-copilot-provider
Open

feat: add GitHub Copilot OAuth provider for individual users#25
cookiespiggy wants to merge 1 commit into
get-vix:mainfrom
cookiespiggy:github-copilot-provider

Conversation

@cookiespiggy

Copy link
Copy Markdown

Summary

Adds GitHub Copilot as an LLM provider that authenticates via GitHub OAuth device-code flow. Personal subscribers use the raw GitHub OAuth token (ghu_*) directly with api.individual.githubcopilot.com, bypassing the Copilot token exchange (which only works for Enterprise/Business).

Key Changes

  • internal/auth/copilot.go (new): OAuth device-code login flow (RFC 8628), GitHub token polling with proper HTTP 200 error handling, Copilot token exchange (unused for personal users, ready for Enterprise)
  • providers.json: github-copilot provider with 8 models (gpt-5-mini, gpt-5.4, gpt-5.4-mini, gpt-5.5, claude-sonnet-4.6, claude-opus-4.7, claude-haiku-4.5, gemini-2.5-pro), OAuth login config with device code, correct inference headers (X-Initiator: agent)
  • UI: API key row hidden for OAuth-only providers; model selection triggers OAuth login automatically when no credential is stored; login-done applies the pending model selection
  • config: ProviderHasAPIKeyAuth() and HasOAuthLogin() helpers for checking OAuth-only provider status
  • Cost table: Copilot model pricing added for user-facing cost estimates

Adds GitHub Copilot as an LLM provider that authenticates via GitHub OAuth
device-code flow. Personal subscribers use the raw GitHub OAuth token (ghu_*)
directly with api.individual.githubcopilot.com, bypassing the Copilot token
exchange (which only works for Enterprise/Business).

Changes:
- internal/auth/copilot.go: OAuth device-code login, GitHub token polling,
  Copilot token exchange (unused for personal, ready for Enterprise)
- providers.json: github-copilot provider with 8 models, OAuth login config,
  individual endpoint, correct inference headers (X-Initiator: agent)
- UI: API key row hidden for OAuth-only providers; model selection triggers
  OAuth login when no credential is stored; login-done applies pending model
- config: ProviderHasAPIKeyAuth(), HasOAuthLogin() helpers
- Tests: updated golden data, provider count, model parse, effort defaults
- Cost table: Copilot model pricing added
@kirby88

kirby88 commented Jun 7, 2026

Copy link
Copy Markdown
Collaborator

@cookiespiggy Did you actually test it?

@cookiespiggy

cookiespiggy commented Jun 7, 2026 via email

Copy link
Copy Markdown
Author

@cookiespiggy

Copy link
Copy Markdown
Author

@cookiespiggy Did you actually test it?

E2E tests passed. A small note: we shouldn't hardcode the model. Please list all GitHub Copilot supported models to let users pick.

@kirby88

kirby88 commented Jun 8, 2026

Copy link
Copy Markdown
Collaborator

I tested it and I failed to get an auth token from Github. Can you give me the steps to step so I can reproduce the success path at least

Please list all GitHub Copilot supported models to let users pick.

I have a script that runs at release time to fetch the latest models, I'll add copilot to it

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.

2 participants