copilot-api
Version:
A wrapper around GitHub Copilot API to make it OpenAI compatible, making it usable for other tools.
169 lines (110 loc) • 4.37 kB
Markdown
# Copilot API
⚠️ **EDUCATIONAL PURPOSE ONLY** ⚠️
This project is a reverse-engineered implementation of the GitHub Copilot API created for educational purposes only. It is not officially supported by GitHub and should not be used in production environments.
[](https://ko-fi.com/E1E519XS7W)
## Project Overview
A wrapper around GitHub Copilot API to make it OpenAI compatible, making it usable for other tools like AI assistants, local interfaces, and development utilities.
## Demo
https://github.com/user-attachments/assets/7654b383-669d-4eb9-b23c-06d7aefee8c5
## Prerequisites
- Bun (>= 1.2.x)
- GitHub account with Copilot subscription (Individual or Business)
## Installation
To install dependencies, run:
```sh
bun install
```
## Using with docker
Build image
```sh
docker build -t copilot-api .
```
Run the container
```sh
docker run -p 4141:4141 copilot-api
```
## Using with npx
You can run the project directly using npx:
```sh
npx copilot-api@latest start
```
With options:
```sh
npx copilot-api@latest start --port 8080
```
For authentication only:
```sh
npx copilot-api@latest auth
```
## Command Structure
Copilot API now uses a subcommand structure with two main commands:
- `start`: Start the Copilot API server (default command)
- `auth`: Run GitHub authentication flow without starting the server
## Command Line Options
### Start Command Options
The following command line options are available for the `start` command:
| Option | Description | Default | Alias |
| -------------- | -------------------------------------------- | ------- | ----- |
| --port | Port to listen on | 4141 | -p |
| --verbose | Enable verbose logging | false | -v |
| --business | Use a business plan GitHub account | false | none |
| --manual | Enable manual request approval | false | none |
| --rate-limit | Rate limit in seconds between requests | none | -r |
| --wait | Wait instead of error when rate limit is hit | false | -w |
| --github-token | Provide GitHub token directly | none | -g |
### Auth Command Options
| Option | Description | Default | Alias |
| --------- | ---------------------- | ------- | ----- |
| --verbose | Enable verbose logging | false | -v |
## Example Usage
Using with npx:
```sh
# Basic usage with start command
npx copilot-api@latest start
# Run on custom port with verbose logging
npx copilot-api@latest start --port 8080 --verbose
# Use with a Business GitHub account
npx copilot-api@latest start --business
# Enable manual approval for each request
npx copilot-api@latest start --manual
# Set rate limit to 30 seconds between requests
npx copilot-api@latest start --rate-limit 30
# Wait instead of error when rate limit is hit
npx copilot-api@latest start --rate-limit 30 --wait
# Provide GitHub token directly
npx copilot-api@latest start --github-token ghp_YOUR_TOKEN_HERE
# Run only the auth flow
npx copilot-api@latest auth
# Run auth flow with verbose logging
npx copilot-api@latest auth --verbose
```
> **Note**: For backward compatibility, if no subcommand is provided, the `start` command will be used as default.
## Running from Source
The project can be run from source in several ways:
### Development Mode
```sh
bun run dev
```
### Production Mode
```sh
bun run start
```
## Usage Tips
- Consider using free models (e.g., Gemini, Mistral, Openrouter) as the `weak-model`
- Use architect mode sparingly
- Disable `yes-always` in your aider configuration
- Be mindful that Claude 3.7 thinking mode consumes more tokens
- Enable the `--manual` flag to review and approve each request before processing
- If you have a GitHub Business account with Copilot, use the `--business` flag
### Manual Request Approval
When using the `--manual` flag, the server will prompt you to approve each incoming request:
```
? Accept incoming request? › (y/N)
```
This helps you control usage and monitor requests in real-time.
## Roadmap
- [x] Manual authentication flow
- [x] Manual request approval system
- [x] Rate limiting implementation
- [x] Token counting
- [x] Enhanced error handling and recovery