From f064f6e59d40ef51500b055c7331d17610c1ea0f Mon Sep 17 00:00:00 2001 From: Woohyun Rho Date: Sun, 11 Jan 2026 01:59:38 +0900 Subject: [PATCH 1/8] feat(config): add github-copilot to oauth-model-mappings supported channels --- config.example.yaml | 5 ++++- internal/config/config.go | 2 +- sdk/cliproxy/auth/model_name_mappings.go | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/config.example.yaml b/config.example.yaml index 19e8e129..8eca6511 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -215,7 +215,7 @@ ws-auth: false # Global OAuth model name mappings (per channel) # These mappings rename model IDs for both model listing and request routing. -# Supported channels: gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow, kiro. +# Supported channels: gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow, kiro, github-copilot. # NOTE: Mappings do not apply to gemini-api-key, codex-api-key, claude-api-key, openai-compatibility, vertex-api-key, or ampcode. # oauth-model-mappings: # gemini-cli: @@ -246,6 +246,9 @@ ws-auth: false # kiro: # - name: "kiro-claude-opus-4-5" # alias: "op45" +# github-copilot: +# - name: "gpt-5" +# alias: "copilot-gpt5" # OAuth provider excluded models # oauth-excluded-models: diff --git a/internal/config/config.go b/internal/config/config.go index 0cd89dc4..27a47266 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -100,7 +100,7 @@ type Config struct { // OAuthModelMappings defines global model name mappings for OAuth/file-backed auth channels. // These mappings affect both model listing and model routing for supported channels: - // gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow. + // gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow, kiro, github-copilot. // // NOTE: This does not apply to existing per-credential model alias features under: // gemini-api-key, codex-api-key, claude-api-key, openai-compatibility, vertex-api-key, and ampcode. diff --git a/sdk/cliproxy/auth/model_name_mappings.go b/sdk/cliproxy/auth/model_name_mappings.go index d4200671..5bbab098 100644 --- a/sdk/cliproxy/auth/model_name_mappings.go +++ b/sdk/cliproxy/auth/model_name_mappings.go @@ -139,7 +139,7 @@ func modelMappingChannel(auth *Auth) string { // and auth kind. Returns empty string if the provider/authKind combination doesn't support // OAuth model mappings (e.g., API key authentication). // -// Supported channels: gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow. +// Supported channels: gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow, kiro, github-copilot. func OAuthModelMappingChannel(provider, authKind string) string { provider = strings.ToLower(strings.TrimSpace(provider)) authKind = strings.ToLower(strings.TrimSpace(authKind)) @@ -165,7 +165,7 @@ func OAuthModelMappingChannel(provider, authKind string) string { return "codex" case "gemini-cli", "aistudio", "antigravity", "qwen", "iflow": return provider - case "kiro": + case "kiro", "github-copilot": return provider default: return "" From d829ac4cf782dcdbc137e650a113227c04f3e5ff Mon Sep 17 00:00:00 2001 From: Woohyun Rho Date: Sun, 11 Jan 2026 02:48:05 +0900 Subject: [PATCH 2/8] docs(config): add github-copilot and kiro to oauth-excluded-models documentation --- config.example.yaml | 5 +++++ internal/config/config.go | 1 + 2 files changed, 6 insertions(+) diff --git a/config.example.yaml b/config.example.yaml index 8eca6511..7a56f325 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -251,6 +251,7 @@ ws-auth: false # alias: "copilot-gpt5" # OAuth provider excluded models +# Supported channels: gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow, kiro, github-copilot. # oauth-excluded-models: # gemini-cli: # - "gemini-2.5-pro" # exclude specific models (exact match) @@ -271,6 +272,10 @@ ws-auth: false # - "vision-model" # iflow: # - "tstars2.0" +# kiro: +# - "kiro-claude-haiku-4-5" +# github-copilot: +# - "raptor-mini" # Optional payload configuration # payload: diff --git a/internal/config/config.go b/internal/config/config.go index 27a47266..83bc6744 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -96,6 +96,7 @@ type Config struct { AmpCode AmpCode `yaml:"ampcode" json:"ampcode"` // OAuthExcludedModels defines per-provider global model exclusions applied to OAuth/file-backed auth entries. + // Supported channels: gemini-cli, vertex, aistudio, antigravity, claude, codex, qwen, iflow, kiro, github-copilot. OAuthExcludedModels map[string][]string `yaml:"oauth-excluded-models,omitempty" json:"oauth-excluded-models,omitempty"` // OAuthModelMappings defines global model name mappings for OAuth/file-backed auth channels. From 8f6740fcef8cce2310408d6d4926b20aa6c16e34 Mon Sep 17 00:00:00 2001 From: Woohyun Rho Date: Sun, 11 Jan 2026 03:01:50 +0900 Subject: [PATCH 3/8] fix(iflow): add missing applyExcludedModels call for iflow provider --- sdk/cliproxy/service.go | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/cliproxy/service.go b/sdk/cliproxy/service.go index 9c094c8c..a85b8149 100644 --- a/sdk/cliproxy/service.go +++ b/sdk/cliproxy/service.go @@ -769,6 +769,7 @@ func (s *Service) registerModelsForAuth(a *coreauth.Auth) { models = applyExcludedModels(models, excluded) case "iflow": models = registry.GetIFlowModels() + models = applyExcludedModels(models, excluded) case "github-copilot": models = registry.GetGitHubCopilotModels() models = applyExcludedModels(models, excluded) From b477aff611f5e7e4ccc14bbbc68bc85b809826cb Mon Sep 17 00:00:00 2001 From: Woohyun Rho Date: Mon, 12 Jan 2026 01:05:57 +0900 Subject: [PATCH 4/8] fix(login): use response project ID when API returns different project --- internal/cmd/login.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/cmd/login.go b/internal/cmd/login.go index 3bb0b9a5..221e1467 100644 --- a/internal/cmd/login.go +++ b/internal/cmd/login.go @@ -259,7 +259,8 @@ func performGeminiCLISetup(ctx context.Context, httpClient *http.Client, storage finalProjectID := projectID if responseProjectID != "" { if explicitProject && !strings.EqualFold(responseProjectID, projectID) { - log.Warnf("Gemini onboarding returned project %s instead of requested %s; keeping requested project ID.", responseProjectID, projectID) + log.Warnf("Gemini onboarding returned project %s instead of requested %s; using response project ID.", responseProjectID, projectID) + finalProjectID = responseProjectID } else { finalProjectID = responseProjectID } From c3e39267b852321dd2baea53f66ecda5574fa4fd Mon Sep 17 00:00:00 2001 From: jc01rho Date: Mon, 12 Jan 2026 01:10:58 +0900 Subject: [PATCH 5/8] Create auto-sync --- .github/workflows/auto-sync | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/auto-sync diff --git a/.github/workflows/auto-sync b/.github/workflows/auto-sync new file mode 100644 index 00000000..0219a396 --- /dev/null +++ b/.github/workflows/auto-sync @@ -0,0 +1,17 @@ +name: Sync Fork + +on: + schedule: + - cron: '*/30 * * * *' # every 30 minutes + workflow_dispatch: # on button click + +jobs: + sync: + + runs-on: ubuntu-latest + + steps: + - uses: tgymnich/fork-sync@v1.8 + with: + base: main + head: main From e9cd355893615e0c872044b9282d3a8ff5934813 Mon Sep 17 00:00:00 2001 From: jc01rho Date: Mon, 12 Jan 2026 01:11:11 +0900 Subject: [PATCH 6/8] Add auto-sync workflow configuration file --- .github/workflows/{auto-sync => auto-sync.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{auto-sync => auto-sync.yml} (100%) diff --git a/.github/workflows/auto-sync b/.github/workflows/auto-sync.yml similarity index 100% rename from .github/workflows/auto-sync rename to .github/workflows/auto-sync.yml From bbd3eafde0befab3c797495d1889827e8897111a Mon Sep 17 00:00:00 2001 From: jc01rho Date: Mon, 12 Jan 2026 01:19:49 +0900 Subject: [PATCH 7/8] Delete .github/workflows/auto-sync.yml --- .github/workflows/auto-sync.yml | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 .github/workflows/auto-sync.yml diff --git a/.github/workflows/auto-sync.yml b/.github/workflows/auto-sync.yml deleted file mode 100644 index 0219a396..00000000 --- a/.github/workflows/auto-sync.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Sync Fork - -on: - schedule: - - cron: '*/30 * * * *' # every 30 minutes - workflow_dispatch: # on button click - -jobs: - sync: - - runs-on: ubuntu-latest - - steps: - - uses: tgymnich/fork-sync@v1.8 - with: - base: main - head: main From e0e30df32399744f47d8d0dddd50665c64ace6d7 Mon Sep 17 00:00:00 2001 From: jc01rho Date: Mon, 12 Jan 2026 01:22:13 +0900 Subject: [PATCH 8/8] Delete .github/workflows/docker-image.yml --- .github/workflows/docker-image.yml | 46 ------------------------------ 1 file changed, 46 deletions(-) delete mode 100644 .github/workflows/docker-image.yml diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml deleted file mode 100644 index de924672..00000000 --- a/.github/workflows/docker-image.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: docker-image - -on: - push: - tags: - - v* - -env: - APP_NAME: CLIProxyAPI - DOCKERHUB_REPO: eceasy/cli-proxy-api-plus - -jobs: - docker: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Login to DockerHub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Generate Build Metadata - run: | - echo VERSION=`git describe --tags --always --dirty` >> $GITHUB_ENV - echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV - echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - platforms: | - linux/amd64 - linux/arm64 - push: true - build-args: | - VERSION=${{ env.VERSION }} - COMMIT=${{ env.COMMIT }} - BUILD_DATE=${{ env.BUILD_DATE }} - tags: | - ${{ env.DOCKERHUB_REPO }}:latest - ${{ env.DOCKERHUB_REPO }}:${{ env.VERSION }}