背景痛点 · Why this exists
个人开发者已经为 Copilot 付费,可那份额度被锁死在 IDE 插件里 — 想在 Claude Code / agent / 自动化里复用,只能再付一份 Anthropic。
- Copilot $10/mo 锁死在 IDE — 已经付了的 Claude 4.5/4.6/4.7 配额无法在 CLI / agent 里复用。
- Anthropic 国内限流 — 官方 API 付费、限流、网络三难,且没法走公司报销的 Copilot 订阅。
- 闲鱼引流 SaaS 钩子 — 想做"陪跑式"小型 SaaS,用户不该理解 OAuth / device flow / API 协议。
- 上游协议私有 — Copilot 是 copilot-chat headers + 自家 SSE 帧,需稳定翻译层。
- token 自动续期 — GitHub device login 拿到的 Copilot session token 有效期短,得自动池化续期。
一句话:把 Copilot 订阅包装成 Anthropic / OpenAI 兼容 API,自带计费、配额、微信扫码登录和管理后台 — 让 Claude Code / Cursor / 任何 SDK 客户端无缝白嫖。
5 个核心抽象 · Five abstractions
tokens.mjs
GitHub device login → Copilot session token 自动获取 / 缓存 / 续期池
lib/tokens.mjsopenai-protocol
三协议互转 Anthropic ↔ Copilot SSE ↔ OpenAI /v1/responses
tool_use + thinkingkeys-v2 + quota-gate
sk-proxy 计费体系 + preflight 扣费 + free/paid/balance 三段
usage_ledgerpayments + wx-gateway
微信扫码登录(邀请返利)+ 个人收款码 HMAC 充值回调
¥9.9 · ¥29双 Dashboard
用户自助 / + Admin /_a/<obfuscated>(pricing CRUD · audit · charts)
dashboard.js × 2
截图位 · E-08 /v1/models JSON
/v1/models 返回 enrich 后的 context / modalities / pricing 字段
次要
架构 · System architecture
客户端 → Caddy HTTPS → 127.0.0.1:4819 server.mjs (Node 20 单进程 PM2 守护) → 上游 Copilot SSE + 本地 SQLite WAL。旁路 wx-gateway 接微信扫码 / 个人收款码支付回调。
[Claude Code / Cursor / Hermes Agent]
│ ANTHROPIC_BASE_URL=https://api.eagle.openclaws.co.uk
│ Authorization: Bearer sk-proxy-xxx
▼
Caddy (HTTPS, eagle.openclaws.co.uk)
│ reverse proxy → 127.0.0.1:4819
▼
server.mjs (Node 20, 单进程, PM2 守护)
├─ auth sk-proxy-xxx → keys_v2 lookup
├─ quota-gate preflight 估算 + 扣费(free/paid/balance)
├─ protocol 翻译:
│ /v1/messages (Anthropic)
│ /v1/chat/completions (OpenAI)
│ /v1/responses (GPT-5 系)
│ ↕ openai-protocol.mjs
├─ upstream Copilot SSE (token pool)
└─ ledger usage_ledger 落库 + 真实费用回填
│
┌────────┴────────┐
▼ ▼
[SQLite WAL] [Copilot 上游]
keys_v2 api.githubcopilot.com
usage_ledger (Claude 4.5/4.6/4.7,
payments GPT-5.2-5.5, Gemini)
logs / audit
旁路:
wx-gateway (wx.mvp.restry.cn) ──扫码/支付回调──▶ /wx/* /payment/*
Dashboard (/ 用户 · /_a/xxx 管理) ──fetch──▶ /user/* /admin/*
8 条关键里程碑 · Milestones
- 04-11MVP 单文件落地:server.mjs 一把梭,Copilot → Anthropic 翻译 + SQLite 日志 + 基础 dashboard(25458a9)
- 04-13模块化:server.mjs → lib/*,dashboard.html 1720 → 229+720+772 行拆分(5e04c52 / e2fa019)
- 04-14移动端 UI + Logto SSO + GitHub device login(279f646)— 第一次"不懂技术的人"也能跑起来
- ★04-19Stage 2-4 大版本一晚集中提交 20+ commits:keys_v2 + usage_ledger + pricing 倍率表 + OpenAI 协议兼容 + 用户/管理员双 dashboard + 多模型注册表 — 从"自用工具"升级成"可计费 SaaS"
- 04-28默认路由对调:用户 dashboard 上 /,admin 退到 /_admin;接入 Claude Code / OpenClaw 快速集成卡(5771dbf / 776efde)
- ★04-29微信扫码默认化 + 邀请返利 + 个人收款码 HMAC 支付 E2E(66e6ca1 / a635502 / 5e07f3c)+ admin 路径混淆 /_a/<obfuscated>(f6eb7de)+ 移除 Logto 改单一 user_session(92c5aa1)
- 05-中同步上游 Sonnet/Opus 4.5/4.6/4.7 + GPT-5.2~5.5 全家桶(b084a8e);dashboard 显示 token 余额、enrich /v1/models 含 context/pricing(78e47b3)
- 05-29AGENTS.md Agent 接管剧本 + 本地自托管模式 + quickstart wizard + loopback 旁路(a1c77c4 / c727121 / 4c44ee9)— AI agent 一句话给用户在本机端到端部署
12 条关键 commit · Top commits
从 96 commits 里挑出"架构 / 安全 / 商业化 / 大爆发日"四个维度的代表。
| 25458a9 | 起点 | MVP:Copilot→Anthropic 翻译 + SQLite + dashboard 一把梭 — 全部价值的起点(2026-04-11) |
| 5e04c52 | 架构 | server.mjs 模块化到 lib/ — 后续所有功能扩展的前提(04-13) |
| 279f646 | 体验 | 移动端 UI + device login — 第一次能让"不懂技术的人"也跑起来(04-14) |
| d534dc2 + bc00510 + a26eb79 | 架构 | keys_v2 + quota engine + pricing 倍率表 — 从自用工具升级成可计费 SaaS(04-19) |
| eb5c297 | 协议 | OpenAI /v1/chat/completions 入口 — 覆盖 Cursor / 各种 OpenAI SDK 客户端(04-19) |
| dbbe8af | 合并 | dev → main 大合并:multi-model + keys_v2 + 双 dashboard,第一个生产可用版本(04-19) |
| 7946dca | 商业 | 微信扫码登录 + API key fallback + 绑定流程 — 为闲鱼引流铺路(04-28) |
| a635502 + 5e07f3c | 商业 | wx-gateway 个人收款码支付全链路 E2E — 正式具备收钱能力(04-29) |
| f6eb7de + 92c5aa1 | 安全 | admin 路径混淆 /_a/<obfuscated> + 移除 Logto 统一 user_session — 安全收敛(04-29) |
| b084a8e | 协议 | 同步上游 Copilot 模型(4.5/4.6/4.7 + GPT-5.2-5.5) — 跟上 Copilot 节奏(04-29) |
| c001963 | 修复 | 月度配额窗口 rollover + dashboard 显示纠偏 — 解决月底"key 突然不能用"投诉(详见名场面 #2) |
| a1c77c4 + 4c44ee9 | 爆发 | local self-host mode + AGENTS.md 剧本 — AI agent 端到端自动部署(05-29) |
名场面 #1 · Hall of Fame · 闲鱼 → 公众号 → key 的 7 步
HALL OF FAME · 商业化闭环 · 7 步用户旅程
微信扫码登录 + 闲鱼引流完整流程
TL;DR · 闲鱼挂的不是"卖 key",是 "Claude Code 陪跑 / 开源教程"。引流到公众号才是核心钩子 ——
关注公众号 → 公众号内打开 H5 → in-app OAuth 自动建 sk-proxy-xxx → 顶部一键复制 + 两行 export → 跑通后弹充值码,
全程不需要用户理解 OAuth / device flow / API 协议。
7 步用户旅程
-
1闲鱼商品页 / 私聊在闲鱼搜 "Claude Code",看到 ¥0.01 试用 / 教程陪跑链接,私聊问"怎么用"系统行为自动回复发公众号二维码 + api.eagle.openclaws.co.uk 落地页截图:闲鱼商品页 + 私聊话术(手机,必截)
-
2微信公众号「造悟者」扫码关注公众号系统行为wx-gateway 收到关注事件 → 推欢迎语 + "点这里 1 秒拿 key" 菜单链接截图 E-03:公众号 in-app 浏览器落地页(手机,必截)
-
3公众号 in-app H5在公众号内打开 H5 https://api.eagle.openclaws.co.uk/(自带 in-app 浏览器 OAuth)系统行为dbf02ef 的 in-app auto-OAuth → 后端 createWxSignupKey() 自动建 sk-proxy-xxx,带 invite_code / source 落库截图 E-01:User Dashboard 首屏 + 微信头像/昵称 banner(手机,必截)
-
4User Dashboard 顶部「立即复制 key」+「Claude Code 接入指南」卡系统行为一键复制 sk-proxy-xxx,下方展示两行 export 命令截图 E-02:快速集成卡 776efde(桌面,必截)
-
5用户本机终端跑 ANTHROPIC_BASE_URL=https://api.eagle.openclaws.co.uk ANTHROPIC_AUTH_TOKEN=sk-proxy-xxx claude系统行为服务端走 quotaPreflight → 命中 free 配额 → Copilot SSE 回流截图:终端首条 hello-world 响应(桌面,次要)
-
6Dashboard 充值弹窗配额吃完 / 想上 Opus 4.7-1m,点 dashboard「充值」系统行为弹二维码(e633459),5s 轮询 /payment/status,HMAC 回调到账,paid_quota +=截图 E-04:充值弹窗 ¥9.9 / ¥29 + 个人收款码(手机,必截)
-
7邀请返利转发邀请链接,新用户扫码注册 → 双方 +N 配额系统行为maybeSettleInvite() IP 反薅校验 + 自邀屏蔽(38daa85)截图:邀请卡片 + 邀请战绩(手机,次要)
名场面 #2 · Hall of Fame · 读路径不自愈的 monthly_29 bug
HALL OF FAME · 复盘 c001963 · 3 文件 / +15 / -3
c001963 · 月度窗口 rollover bug 复盘
先纠一下 · commit 修的是 monthly_29 套餐的月度配额窗口(不是 5h 滚动窗口 —— 五小时窗口走的是 Copilot 上游 rate-limit,本服务侧没碰)。
bug 本质:写路径(quotaPreflight)正确,读路径(dashboard /user/me · /user/plan)不自愈。
为什么修
4 月底连着三个充了 ¥29 月包的用户私信"key 突然 401 配额耗尽",可后台一看 window_used 已经超过 window_quota,但 window_reset_at 是上个月的时间戳 —— 明显该 rollover 没 rollover。
Debug 过程
- 怀疑 HMAC 充值回调没把 window_quota 续上 → 查 payments 表,到账记录齐全,排除支付侧。
- 看 quotaPreflight() · 里面 windowRolloverIfNeeded(row) 是有的 —— 但只有"用户真的发请求"才会触发 rollover。这几个用户当时没在打字,dashboard 一打开看到 window_used / window_quota 是过期窗口的快照,直接卡红,吓得不敢用。
- 本机时间复现 · 把系统时间调到 reset_at + 1s,刷 dashboard,果然显示"已用 200万 / 配额 0",因为读路径 /user/me 和 /user/plan 走的是裸 SELECT,没经过 rollover。
修复一句话
把 windowRolloverIfNeeded 从 quota-gate.mjs 内部函数 export 出来,在 /user/me 和 /user/plan 两个读端点里也调一次(仅对 plan_type === 'monthly_29' 且未过期的 key),dashboard 显示同步 clamp。改动 3 文件 / +15 / -3。
教训
"写路径正确"不等于"读路径正确"。dashboard 是用户感知第一屏,状态字段在读侧也得自愈,不能只靠下次写请求救场 —— 用户看到红条第一反应是"key 坏了",不是"我去发个请求试试"。
技术栈 · Tech stack
Runtime
Node.js 20 · ES Modules · 原生 http(无 Express)
Storage
better-sqlite3 WAL + 二级索引
协议层
Server-Sent Events 流式转发 · GitHub Copilot 私有协议 · Anthropic Messages · OpenAI /v1/responses
部署
Caddy(HTTPS 反代)· PM2(进程守护)· systemd / launchd 开机自启
前端
原生 HTML + 原生 JS + Chart.js(无前端框架)· Lucide icons
支付 / 登录
微信公众号 OAuth(经 wx-gateway)· HMAC-SHA256 支付回调 · 个人收款码
现状 + 未结清债务 · Status & debt
截图位 · E-05 Admin Dashboard Overview
活跃 key 数 / 今日 token / GMV / 模型分布饼图
必截
现状(2026-06-01 实测)
- 生产环境 · https://api.eagle.openclaws.co.uk,PM2 守护 copilot-proxy 单进程,Caddy 终结 HTTPS
- 模型覆盖 · Sonnet 4.5/4.6/4.7、Opus 4.5/4.6/4.7(含 4.7-1m-internal 1M 上下文)、GPT-5.2/5.3/5.5(走 /v1/responses)、Gemini(OpenAI 协议)
- 商业化已上线 · 微信扫码即得 key · ¥9.9 / ¥29 两档付费包 · free / paid / balance 三段扣费
- Agent 一键部署 · 用户把 repo 丢给 Claude Code,按 AGENTS.md 自动完成 device login + systemd/launchd 开机自启
- 当前 HEAD · fced613(2026-05-29 10:56 CST)· 96 个 commit
- 用户数 / 日活 / GMV · 待补(admin 后台有 overview,未导出快照)
未结清债务
- P1仓库未开源 · 未发公开 PR · GitHub repo URL + Release 节奏待补
- P1上游协议 break 缺自动兼容层 · 大版本(如 thinking.type.enabled)突然 break 老 CC,靠手动 bump 客户端版本号
- P2opus-4.7-1m-internal 本机直连 :4819 404 · 上游未对所有用户开放,目前依赖 eagle gateway 兜底
- P1支付无对账脚本 · 只接了微信个人码 + HMAC 回调,异常订单需手动 SQL 排查
- P1测试覆盖偏 e2e 缺 CI · scripts/test-*.mjs 为主,缺单元测试和 CI 流水线,回归靠人肉 npm test
- P2Dashboard 风格无设计稿 · UI 约定散落在 copilot-claude-proxy skill 里,新增 tab 容易破风格
- P2abuse 防护无行为风控 · 只有 IP 限流 + 邀请反薅,缺 prompt-injection 滥用检测
- P2DISABLE_LOCALHOST_BYPASS 默认偏宽松 · 需部署者自觉设置,文档化在 docs/SELF-HOST.md 但未在启动时告警