-
Notifications
You must be signed in to change notification settings - Fork 2.1k
feat: add GitHub Copilot Provider that support agent mode #7010 #7072
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for your contribution! I've reviewed the GitHub Copilot Provider implementation and found it to be well-structured overall. The OAuth device flow authentication is properly implemented, and the TypeScript typing is comprehensive. However, there are some issues that need attention before merging.
/** | ||
* Determine the X-Initiator header based on message roles | ||
*/ | ||
private determineInitiator(messages: Anthropic.Messages.MessageParam[]): string { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this X-Initiator logic correct? The method seems complex and the logic for determining 'agent' vs 'user' might not cover all edge cases. Could you add more comments explaining the rationale, or consider simplifying this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. This method is mainly used to determine whether the last request was sent by the user. However, there is currently no such flag, which can only determine whether the text in the message has the specified tag.
|
||
private constructor() { | ||
// Store tokens in user's home directory | ||
this.tokenDir = join(homedir(), ".roo-code", "copilot") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Security concern: Tokens are stored in plaintext at ~/.roo-code/copilot/tokens.json. Have you considered using VSCode's secret storage API instead for better security?
Example:
await context.secrets.store('copilot_access_token', accessToken)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this is no different from other apiKeys. And it is difficult to get the context in a singleton object
ae0ac5c
to
fcd4536
Compare
- Implemented the Copilot component with authentication and model selection features. - Added tests for the Copilot component covering authentication, error handling, and model management. - Updated localization files to include Copilot-related strings in multiple languages. - Enhanced model validation functions to support Copilot models. - Integrated Copilot into the settings provider index and updated hooks to handle selected models.
fcd4536
to
6e825b2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you @NaccOll. This looks good. My main concern is the TOS that we might be breaking by pretending we are Copilot:


After the review comments are addressed, I will approve it and let the team decide if we should merge this.
@NaccOll Thank you for addressing the review, it seems that a unit test is failing, can you take a look? |
chang default model for copilot refactor the message handler about copilot remove useless console ouput
e1c32ff
to
f3d35b3
Compare
Related GitHub Issue
Closes: #7010
Description
VS Code LM API cannot achieve multiple use of the tool consuming only one premium requeusts. Therefore, I implemented a Copilot Provider, mimicking the Copilot authentication process found at https://github.com/BerriAI/litellm and https://github.com/sst/opencode.
In my own test, I chose claude-4 and had him write a web version of Angry Birds. This involved reading and writing eight files, requiring approximately 20 tool calls and consuming only one premium requeust.
Test Procedure
Pre-Submission Checklist
Screenshots / Videos
Documentation Updates
Additional Notes
Get in Touch
Important
Add GitHub Copilot Provider with agent mode support, including authentication, model selection, and validation, along with tests and localization updates.
CopilotHandler
incopilot.ts
to handle GitHub Copilot API interactions, including authentication and model selection.webviewMessageHandler.ts
to handle Copilot authentication and model requests.validate.ts
.CopilotHandler
incopilot.spec.ts
.copilot.test.ts
.validate.test.ts
to include Copilot model validation.Copilot
component inCopilot.tsx
for UI interactions related to Copilot authentication and model selection.This description was created by
for 6e825b2. You can customize this summary. It will automatically update as commits are pushed.