Skip to content

rexlManu/copilot-api

 
 

Repository files navigation

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.

ko-fi

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

copilot-api-demo.mp4

Prerequisites

  • Bun (>= 1.2.x)
  • GitHub account with Copilot subscription (Individual or Business)

Installation

To install dependencies, run:

bun install

Using with Docker

Build image

docker build -t copilot-api .

Run the container

docker run -p 4141:4141 copilot-api

Using with npx

You can run the project directly using npx:

npx copilot-api@latest start

With options:

npx copilot-api@latest start --port 8080

For authentication only:

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). This command will also handle authentication if needed.
  • auth: Run GitHub authentication flow without starting the server. This is typically used if you need to generate a token for use with the --github-token option, especially in non-interactive environments.

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
--enterprise Use an enterprise 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 (must be generated using the auth subcommand) none -g

Auth Command Options

Option Description Default Alias
--verbose Enable verbose logging false -v

Example Usage

Using with npx:

# 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 plan GitHub account
npx copilot-api@latest start --business

# Use with an enterprise plan GitHub account
npx copilot-api@latest start --enterprise

# 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

Running from Source

The project can be run from source in several ways:

Development Mode

bun run dev

Production Mode

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 or enterprise plan account with Copilot, use the --business or --enterprise flag respectively

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.

API Key Authorization (OpenAI-Compatible)

This API now supports OpenAI-style API key authorization. To secure your endpoints:

  1. Set the API Key in Docker

    • Pass your API key as an environment variable when running the container:
      docker run -e OPENAI_API_KEY=sk-... your-copilot-api-image
    • Or set it in your Dockerfile/compose as OPENAI_API_KEY.
  2. Authorize Requests

    • All API endpoints (except /) require the Authorization header:
      Authorization: Bearer sk-...
    • This mimics the OpenAI API client format.
  3. Error Handling

    • If the header is missing or the key is incorrect, a 401 Unauthorized error is returned in the OpenAI error format.

About

Turn GitHub Copilot into OpenAI API compatible server!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 81.1%
  • JavaScript 17.3%
  • Dockerfile 1.6%