-
Notifications
You must be signed in to change notification settings - Fork 2.6k
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
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.
src/api/providers/copilot.ts
Outdated
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.
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
fcd4536 to
6e825b2
Compare
daniel-lxs
left a comment
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? |
e1c32ff to
f3d35b3
Compare
|
@daniel-lxs fixed unit test |
|
How do I resolve this latest conflict: Types of property 'apiProvider' are incompatible. @roo-code/cloud restricts adding providers. |
b9776a7 to
956716b
Compare
|
Hey @NaccOll, Thank you for the contribution. After discussing it with the team, we decided to close this PR. We prefer not to bypass restrictions by using the Copilot User Agent. Let me know if you have any questions! |
|
@daniel-lxs I think the issue should be closed as the VSCode LM API does not provide this functionality. It is unique to copilot and relies on a hack with a specific http header. |
|
I have just sent a message to a Senior Developer Advocate at GitHub. Maybe we can merge this... |
If there's any progress, please let me know so I can make changes. Copilot's documentation does allow third-party agents to access this. They might ban pretend copilots and instead require RooCode to register an Github app and grant permissions for the app. I've tried this myself, but when I tried to access the final API key, I got a message saying I didn't have the required permissions, so I gave up. |
|
I think GH Copilot allow tools call response to be agent and not count toward premium requests. |
|
@daniel-lxs Any updates on this issue? Unfortunately, it's impossible to effectively use GitHub Copilot models with Roo-Code as premium requests are consumed too quickly. |
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.
CopilotHandlerincopilot.tsto handle GitHub Copilot API interactions, including authentication and model selection.webviewMessageHandler.tsto handle Copilot authentication and model requests.validate.ts.CopilotHandlerincopilot.spec.ts.copilot.test.ts.validate.test.tsto include Copilot model validation.Copilotcomponent inCopilot.tsxfor UI interactions related to Copilot authentication and model selection.This description was created by
for 6e825b258ba1fe54c1ebdfe1da63e19f31ec7557. You can customize this summary. It will automatically update as commits are pushed.