From 4aa2a97b6941640be105fa24dae3fa2a3a00fcc7 Mon Sep 17 00:00:00 2001
From: rexdotsh <65942753+rexdotsh@users.noreply.github.com>
Date: Wed, 26 Aug 2026 12:10:49 +0000
Subject: [PATCH] chore: remove Copilot support
---
AGENTS.md | 8 +-
Caddyfile | 2 +-
README.md | 7 +-
assets/hero.html | 6 -
assets/hero.png | Bin 40661 -> 74606 bytes
assets/social.html | 6 -
assets/social.png | Bin 48476 -> 89314 bytes
public/admin/app-data.js | 8 +-
public/admin/app-render.js | 7 +-
public/admin/index.html | 34 +-
public/admin/styles.css | 6 -
src/db/schema.ts | 2 +-
src/http/routes/proxy.ts | 19 --
src/http/utils/request-timeout.ts | 6 +-
src/index.ts | 1 -
src/providers/constants.ts | 7 -
src/providers/copilot.ts | 386 -----------------------
src/providers/metadata.ts | 37 ---
src/providers/proxies/copilot-proxy.ts | 307 ------------------
src/providers/proxy-endpoints.ts | 14 +-
src/providers/proxy-provider.ts | 9 +-
src/providers/registry.ts | 2 -
tests/db/provider-accounts.test.ts | 34 +-
tests/domain/models-dev-contract.test.ts | 86 +----
tests/http/routing-auth-contract.test.ts | 3 +-
tests/providers/proxy-contract.test.ts | 283 +----------------
26 files changed, 46 insertions(+), 1234 deletions(-)
delete mode 100644 src/providers/copilot.ts
delete mode 100644 src/providers/proxies/copilot-proxy.ts
diff --git a/AGENTS.md b/AGENTS.md
index ef0f4fb..c897f8f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,6 +1,6 @@
# Kleis
-Single OAuth account proxy for coding agents. One base URL that stores OAuth credentials centrally, refreshes tokens automatically, and routes requests to Copilot/Codex/Claude through provider-compatible proxy endpoints.
+Single OAuth account proxy for coding agents. One base URL that stores OAuth credentials centrally, refreshes tokens automatically, and routes requests to Codex and Claude through provider-compatible proxy endpoints.
## Architecture
@@ -13,7 +13,7 @@ Single OAuth account proxy for coding agents. One base URL that stores OAuth cre
## Database Schema (4 tables)
-- **`provider_accounts`**: OAuth credentials per provider (copilot/codex/claude). Includes access/refresh tokens, expiry, primary flag, metadata JSON, distributed refresh lock fields.
+- **`provider_accounts`**: OAuth credentials per provider (codex/claude). Includes access/refresh tokens, expiry, primary flag, metadata JSON, distributed refresh lock fields.
- **`api_keys`**: Proxy auth keys (`kleis_*` format). Provider and model scope arrays. Each key gets a `modelsDiscoveryToken` for scoped model URLs.
- **`oauth_states`**: Ephemeral records for in-flight OAuth flows.
- **`request_usage_buckets`**: Minute-bucketed analytics. Tracks request/success/error counts and latency per key+account+provider+endpoint.
@@ -26,15 +26,11 @@ All require `Authorization: Bearer
0Ezn-fGk+G-6BWB^pN^v`* t~fgcX8K5~iqd8g~4@%w9gVIz(2
z8}(Rkt7TT+m&}SA;d=&D^T~yJm%NPr{Hno0n}BuWIYM)bVLuCxz!T07pTPnQ(5Sbh
zy|Zp=?9I7d$e{bN@-miWZ8#x`KR-dgmT%3F#l!j=M<%M?1Yd)!H*Tou?>5?z1wpz8
zyUy $Z;>H~l~KK&r<>oYzr>+fSMg;GkDBX-(G=Fj0Z
z@N5-`^uzU>
z3F#2FNDG65bV_%32wM?pkd&AKB?V?cV(5@=kQ!iMs1cAHy5qS<{r%T^?zeE?%e7Qy
zEhfHkUFUh6$MG2?pgZWbfuBN1xxw4tEc~^sFGY!~{3F-?|8TC>*d$Ocs2#=k+Iz%<
zsqLR?l`8=(&i>kJSqE;1$yxy5^85f;zNPD@l?CD#So`qJDmga0MV+pbbe6Se<G+JzjJ3jWW6BT_d3Xu-g6`ni^bQwO{Lh^<=Q4@lGgF0%yaMWG
zAgNH&m=CBj_z8t88)~?$9+N+himBg^x7{0k1BX%Bi4~A!_xIiBvd~?)Pkbp)J$g~X
z;Uwn%9D|uU`S}BYQ5tr|HM&;2b$xV)nj)^nl^vB5e1;C)()-SZx{_UKhFA8v5o;oE
zeMvi!2hFux6HT!WoF3ipgyW`tyo-5^jSGzR3miy-&>AUtn2T3dEUW+IQnq`M1p6J4
zf~EPAAA+qFjlsl*{Gz?Ujn$6T3e8=UvDA~VwGiBjJyVPXjYy2K699q(xb}8m@Gejn
ztYbbrp>pa}aLUn5G$gC%CiW?Nd^|f`MlDjM2E=Vp(1Yj)B*EC2X8Y5%GBG;LdBJ;3
zFH7d_zpE*Bubnz1!CV3=iCz?hdF_Hvf#NXv15fi#R>Zf%edj%NFyI8X#d%WnQD59#
zbI8QX$M|v-=1n9GW0YSv9RV@^6u3AkR;cK!kW>s)+7DrMed5aTVGHJ!velx#I@1JY
z$=7>V?-CE4LO@UZwrbc%tT!^Z>;$rB9j?w2WTN(9(=YqL-{%;|RMx{z>mrxj)~PW=Y}
z)~RnQhM4IqEvRQjOKKSsQ+T*(
gEBmW+w|dkbtL^nJ
z_eWd1DCU%hnVLn0l@EneQ7B!R_OnWB7b6&cbk=}3ci*94i=9)n->fJI+I#)ubB9Wt
zZ0ZA>H*T7EhuUMr5OSXVk*+NhN>O8KdEu-)BQ2qZ^({I|Hiw7r>Qxdu)I%<-$zmfo
zD+PzJ($w++dtOVTd>aV??&0BpAWMf%W<=ORShcXp>|s$_;@+&}Il6SK@Y#9^+9$DX
zw{`ED#R-P1WOnggjlIkOzxjj~q9tydvH0RjKSt95Rr#cuqqvt{Ij+-LRtsKeYh`$4
zy|A^L+t`AwUn|kh{}!W3n|)>{b3Q-!&`3WPJG|u`nrKO<5UXUSHSaJ9wV6D!H-S#Z
zBSRCyGMOVDP}m9U7EAwV#U)1yK|5TU?~*XFUZaJhD+*eD19kS?Q^igUvYb;Nb!B;$
znmUy8yNp!4$geo%5+xwfMJ3Zdx5aL_rrY(WcFM+vVgI@vdwJ`Lg$*r7OHbOj%vZ?F
zAD^T?Ez~Q%(c$WUCTeusOOOWYL1tj2j7$)Y<%f;zhcV^eZ}Q{qr??GyK<@uS2;-|p
znQpb1zUhdeU)a1SVIr~o*6UC%1fDCc=C$M=;3D!er(D>Dl8!*Z6n6{mR#AcxGV-^6
zAV2amy!(~wchzPT))G?I+RdzF^=;jQq#pU9!>0G0jCDZ``{HnyxnAU=>O{GPii&w=
z`Ito6XphQRpHPXapSY6W?G9zdHV1V?*Y7UbXbefla%3A!8`uW##n@9L32q-ae=R%&Y2*mSi{
zt%nvy)PqBn`@7D>!g6S`)t?pdE%!Fb^^T4r3KNT0h@Pbe>>sLCV8#JRx^i9c?v
zV7Dv