StarryKira/copilot2api-go: Go 언어로 재작성된 GitHub Copilot API 역공학 프록시
요약
GitHub Copilot API를 역공학하여 OpenAI 및 Anthropic 호환 API로 변환해주는 Go 언어 기반의 프록시 프로젝트입니다. 멀티 계정 관리와 부하 분산 기능을 제공하며, 웹 콘솔을 통해 계정 인증 및 관리가 가능합니다.
핵심 포인트
- GitHub Copilot API를 OpenAI 및 Anthropic 표준 API 규격으로 변환하여 제공
- Round-Robin 및 우선순위 전략을 통한 멀티 계정 부하 분산(Load Balancing) 지원
- 웹 콘솔을 통한 GitHub OAuth 디바이스 플로우 기반의 간편한 계정 관리
- Docker를 지원하여 프로덕션 환경에 용이한 배포 가능
- 스트리밍 SSE 및 모델 ID 매핑 기능 포함
Go 언어로 재작성된 GitHub Copilot API용 역공학 (Reverse-engineered) 프록시입니다. 관리 및 부하 분산 (Load balancing)을 위한 멀티 계정 웹 콘솔을 통해 Copilot을 OpenAI 및 Anthropic 호환 API 서비스로 노출합니다.
경고: 이것은 역공학 (Reverse-engineered) 프록시입니다. GitHub의 지원을 받지 않으며 예기치 않게 작동이 중단될 수 있습니다. 사용 시 발생하는 위험은 사용자 본인에게 있습니다.
GitHub 보안 고지: Copilot을 과도하게 자동화하거나 스크립트로 사용할 경우 GitHub의 남용 탐지 시스템 (Abuse-detection systems)이 작동할 수 있습니다. GitHub의 허용 가능한 사용 정책 (Acceptable Use Policies) 및 GitHub Copilot 약관을 검토하십시오.
멀티 계정 관리 (Multi-Account Management): 여러 GitHub Copilot 계정을 추가, 삭제, 시작 및 중지할 수 있는 웹 콘솔
풀 모드 부하 분산 (Pool Mode Load Balancing): Round-Robin 또는 우선순위 (Priority) 전략을 사용하여 계정 간에 요청을 분산
OpenAI 호환 API:
/v1/chat/completions
/v1/models
/v1/embeddings
Anthropic 호환 API:
/v1/messages
/v1/messages/count_tokens
— 자동 프로토콜 변환 (Protocol translation)
모델 ID 매핑 (Model ID Mapping): Copilot 내부 모델 ID와 표준 표시 ID 간의 양방향 매핑 (예: claude-sonnet-4-20250514)
스트리밍 SSE (Streaming SSE): OpenAI 및 Anthropic 형식 모두에서 스트리밍 응답을 완벽하게 지원
GitHub OAuth 디바이스 플로우 (GitHub OAuth Device Flow): 웹 콘솔에서 직접 계정 인증
관리자 인증 (Admin Authentication): 세션 관리가 포함된 비밀번호 보호 콘솔
이중 언어 웹 UI (Bilingual Web UI): 자동 감지 기능이 있는 영어 및 중국어 인터페이스
Docker 준비 완료 (Docker Ready): 최소한의 프로덕션 이미지를 위한 멀티 스테이지 Dockerfile
# 빌드 (Build)
go build -o copilot-go .
# 실행 (웹 UI 서빙을 위해 프로젝트 루트에서 실행)
...
# 이미지 빌드 (Build image)
docker build -t copilot-go .
# 지속성 데이터와 함께 실행 (Run with persistent data)
...
services:
copilot-go:
build: .
...
| 옵션 (Option) | 기본값 (Default) | 설명 (Description) |
|---|---|---|
--web-port | 3000 | 웹 콘솔 포트 |
--proxy-port | 4141 | 프록시 API 포트 |
--verbose | false | 상세 로깅 (Verbose logging) 활성화 |
--auto-start | true | 실행 시 활성화된 계정 자동 시작 |
http://localhost:3000열기
— 첫 방문 시 관리자 계정 생성 - OAuth 디바이스 플로우 (OAuth device flow)를 통해 GitHub Copilot 계정 추가
- 계정 인스턴스 시작
- 계정의 API Key (또는 Pool Key)를 사용하여 프록시 호출
| 엔드포인트 (Endpoint) | 메서드 (Method) | 설명 |
|---|---|---|
/v1/chat/completions | POST | 채팅 완성 (Chat completions, 스트리밍 지원) |
/v1/models | GET | 사용 가능한 모델 목록 조회 |
/v1/embeddings | POST | 임베딩 (Embeddings) 생성 |
/chat/completions | POST | /v1 접두사가 없는 별칭 (Alias) |
/models | GET | /v1 접두사가 없는 별칭 (Alias) |
/embeddings | POST | /v1 접두사가 없는 별칭 (Alias) |
| 엔드포인트 (Endpoint) | 메서드 (Method) | 설명 |
|---|---|---|
/v1/messages | POST | 메시지 API (Messages API, 스트리밍 지원) |
/v1/messages/count_tokens | POST | 토큰 계산 (Token counting, 추정치) |
모든 프록시 엔드포인트는 Bearer 토큰을 필요로 합니다:
# Authorization 헤더 사용 (OpenAI 스타일)
curl -H "Authorization: Bearer sk-your-api-key" ...
# x-api-key 헤더 사용 (Anthropic 스타일)
...
curl http://localhost:4141/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
...
curl http://localhost:4141/v1/messages \
-H "x-api-key: sk-your-api-key" \
-H "Content-Type: application/json" \
...
ANTHROPIC_BASE_URL=http://localhost:4141 \
ANTHROPIC_API_KEY=sk-your-api-key \
claude
또는 프로젝트 내에 .claude/settings.json을 생성하십시오:
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4141",
...
| 엔드포인트 (Endpoint) | 메서드 (Method) | 설명 |
|---|---|---|
/api/config | GET | 서버 설정 (프록시 포트, 설정 상태) |
/api/auth/setup | POST | 초기 관리자 설정 |
/api/auth/login | POST | 관리자 로그인 |
| 엔드포인트 (Endpoint) | 메서드 (Method) | 설명 (Description) |
|---|---|---|
/api/auth/check | GET | 세션 검증 (Validate session) |
/api/accounts | GET | 상태를 포함한 모든 계정 목록 조회 |
/api/accounts/usage | GET | 일괄 사용량 쿼리 (Batch usage query) |
/api/accounts/:id | GET | 단일 계정 조회 |
/api/accounts | POST | 계정 추가 |
/api/accounts/:id | PUT | 계정 업데이트 |
/api/accounts/:id | DELETE | 계정 삭제 |
/api/accounts/:id/regenerate-key | POST | API 키 재발급 (Regenerate API key) |
/api/accounts/:id/start | POST | 인스턴스 시작 |
/api/accounts/:id/stop | POST | 인스턴스 중지 |
/api/accounts/:id/usage | GET | 계정 사용량 조회 |
/api/auth/device-code | POST | GitHub OAuth 흐름 시작 |
/api/auth/poll/:sessionId | GET | OAuth 상태 폴링 (Poll OAuth status) |
/api/auth/complete | POST | OAuth 완료 및 계정 생성 |
/api/pool | GET | 풀 (Pool) 설정 조회 |
/api/pool | PUT | 풀 (Pool) 설정 업데이트 |
/api/pool/regenerate-key | POST | 풀 (Pool) API 키 재발급 |
/api/model-map | GET | 모델 ID 매핑 (Model ID mappings) 조회 |
/api/model-map | PUT | 매핑 일괄 업데이트 |
/api/model-map | POST | 단일 매핑 추가 |
/api/model-map/:copilotId | DELETE | 매핑 삭제 |
Copilot은 비표준 모델 ID를 반환합니다. 매핑 (Mapping) 기능을 통해 양방향 변환을 구성할 수 있습니다:
/v1/models는 매핑된 표시 ID (display IDs)를 반환합니다.
- 들어오는 요청은 표시 ID를 Copilot 내부 ID로 다시 변환합니다.
- 매핑 정보는
~/.local/share/copilot-api/model_map.json에 저장됩니다. - 웹 콘솔 (Web Console)의 "Model ID Mapping" 패널을 통해 설정 가능합니다.
copilot-go/
├── main.go # 진입점 (Entry point), 웹 콘솔 및 프록시 (proxy) 시작
├── config/config.go # 상수 (Constants), 상태 (State), 헤더 빌더 (header builders)
...
모든 데이터는 ~/.local/share/copilot-api/에 저장됩니다.
| 파일 (File) | 내용 (Content) |
|---|---|
accounts.json | 계정 목록 |
pool-config.json | 풀 (Pool) 모드 설정 |
admin.json | 관리자 비밀번호 해시 (Admin password hash) |
model_map.json | 모델 ID 매핑 |
ericc-ch/copilot-api (TypeScript/Bun)를 기반으로 하며, 멀티 계정 콘솔 모드를 갖춘 Go 언어로 재작성되었습니다.
MIT
GitHub Copilot API 역공학 (Reverse Engineering) 프록시 서비스 (Go 재작성 버전)로, 다중 계정 Web 관리, 부하 분산 (Load Balancing)을 지원하며 Copilot을 OpenAI/Anthropic 호환 인터페이스로 변환합니다.
경고: 이것은 역공학 프록시이며, GitHub의 공식 지원을 받지 않으므로 언제든 작동이 중단될 수 있습니다. 사용에 따른 위험은 사용자 본인에게 있습니다.
GitHub 보안 고지: Copilot을 과도하게 자동화하거나 스크립트 방식으로 사용할 경우 GitHub의 남용 탐지 시스템 (Abuse Detection System)이 작동할 수 있습니다. GitHub의 허용 가능한 사용 정책 (Acceptable Use Policy) 및 GitHub Copilot 약관을 확인하시기 바랍니다.
다중 계정 관리: Web 콘솔을 통해 여러 GitHub Copilot 계정의 추가, 삭제, 시작/중지 가능
Pool 모드 부하 분산 (Load Balancing): 라운드 로빈 (Round-Robin) 또는 우선순위 (Priority) 전략으로 요청 분산
OpenAI 호환 인터페이스: /v1/chat/completions, /v1/models, /v1/embeddings 지원
Anthropic 호환 인터페이스: /v1/messages, /v1/messages/count_tokens 지원 — 자동 프로토콜 변환
모델 ID 매핑: Copilot 내부 ID와 표준 ID 간의 양방향 매핑 (예: claude-sonnet-4-20250514)
스트리밍 SSE: OpenAI 및 Anthropic 형식의 스트리밍 (Streaming) 응답 완전 지원
GitHub OAuth 디바이스 플로우 (Device Flow): Web 콘솔에서 직접 계정 인증 완료
관리자 인증: 비밀번호로 보호되는 콘솔, 세션 관리 지원
중문/영문 인터페이스: 브라우저 언어 자동 감지 및 수동 전환 지원
Docker 지원: 멀티 스테이지 빌드 (Multi-stage build)를 통한 작은 크기의 프로덕션 이미지
# 컴파일
go build -o copilot-go .
# 실행 (Web UI 로드를 위해 프로젝트 루트 디렉토리에서 실행)
...
# 이미지 빌드
docker build -t copilot-go .
# 실행 (데이터 영속화)
...
services:
copilot-go:
build: .
...
| 파라미터 | 기본값 | 설명 |
|---|---|---|
--web-port | 3000 | Web 콘솔 포트 |
--proxy-port | 4141 | 프록시 API 포트 |
--verbose | false | 상세 로그 |
--auto-start | true | 시작 시 활성화된 계정 자동 시작 |
http://localhost:3000접속, 최초 사용 시 관리자 계정 생성- GitHub OAuth 디바이스 플로우를 통해 Copilot 계정 추가
- 계정 인스턴스 시작
- 계정 API Key 또는 Pool Key를 사용하여 프록시 인터페이스 호출
| 엔드포인트 (Endpoint) | 메서드 (Method) | 설명 |
|---|---|---|
/v1/chat/completions | POST | 대화 완성 (스트리밍 지원) |
/v1/models | GET | 모델 목록 |
/v1/embeddings | POST | 텍스트 임베딩 (Embeddings) |
| 엔드포인트 (Endpoint) | 메서드 (Method) | 설명 |
|---|---|---|
/v1/messages | POST | 메시지 API (스트리밍 지원) |
/v1/messages/count_tokens | POST | 토큰 (Token) 수 계산 (추정) |
모든 프록시 엔드포인트는 Bearer 토큰이 필요합니다:
# OpenAI 스타일
curl -H "Authorization: Bearer sk-your-api-key" ...
# Anthropic 스타일
...
curl http://localhost:4141/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
...
curl http://localhost:4141/v1/messages \
-H "x-api-key: sk-your-api-key" \
-H "Content-Type: application/json" \
...
ANTHROPIC_BASE_URL=http://localhost:4141 \
ANTHROPIC_API_KEY=sk-your-api-key \
claude
또는 프로젝트 내에 .claude/settings.json 생성:
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4141",
...
Copilot이 반환하는 모델 ID(Model ID)는 표준 규격에 맞지 않으므로, 매핑(Mapping) 기능을 통해 양방향 변환을 지원합니다:
/v1/models
- 매핑된 표준 ID를 반환합니다.
- 요청 시 표준 ID를 Copilot 내부 ID로 자동 변환합니다.
- 매핑 정보는
~/.local/share/copilot-api/model_map.json에 영구 저장됩니다. - Web 콘솔의 「모델 ID 매핑 (Model ID Mapping)」 패널을 통해 설정할 수 있습니다.
모든 데이터는 ~/.local/share/copilot-api/에 저장됩니다:
| 파일 | 내용 |
|---|---|
accounts.json | 계정 목록 |
pool-config.json | 풀 (Pool) 모드 설정 |
admin.json | 관리자 비밀번호 해시 (Hash) |
model_map.json | 모델 ID 매핑 테이블 |
ericc-ch/copilot-api (TypeScript/Bun)를 기반으로 Go 언어로 재작성되었으며, 다중 계정 콘솔 모드가 새롭게 추가되었습니다.
MIT
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기