Repository navigation
v1.0.0
opencode-free-provider v1.0.0
本地 OpenAI 兼容代理,将聊天请求转发到 OpenCode Zen 免费档,无需 API key 即可使用 big-pickle 等免费模型。
核心特性
动态指纹(绕过免费档 client-fingerprint gate)
OpenCode 免费档服务端会校验请求指纹,其中 x-opencode-session 的 id 结构/校验和由服务端验证,无法伪造——只有真正的 opencode 二进制生成的 ses_... 才通过。
本版本改为:每次需要时 spawn 真实的 opencode 命令,通过本地 MITM/TLS 拦截代理捕获它真正发往 opencode.ai 的请求的 fingerprint headers(user-agent、x-opencode-session、x-opencode-client、x-opencode-project 等),并缓存复用(OPENCODE_FP_TTL_MS,默认 30 分钟)。
- 相关文件:
src/fingerprint.js(getFingerprint()/fingerprintHeaders()),server.js启动预热,/__session暴露fingerprint.source(opencode-cli= 实时抓到;fallback*= 静态回退)。 - 若
opencode不可用或设OPENCODE_FP_DISABLE=1,回退到内置静态指纹,保证代理仍能启动。
Docker 镜像必须安装 opencode
修正了原 Dockerfile 的问题(基于 node:24-alpine 且根本没装 opencode,容器内 opencode: not found):
- 基础镜像
node:24-alpine(musl)→node:24-bookworm-slim(glibc):opencode是 Bun 编译的原生 ELF,链接 glibc,Alpine 跑不了。 npm install -g @opencode/cli@2.0.22(可用OPENCODE_VERSIONbuild-arg 升级)。- 安装
openssl(生成 MITM CA 用)。 - 支持
NODE_IMAGEbuild-arg 指向私有镜像源。
使用方法
# 本地
npm start # http://127.0.0.1:8791/v1
# Docker
docker build -t opencode-free-provider .
docker run -d --name opencode-free-provider -p 8791:8791 opencode-free-providerAgent 配置:
baseURL: http://127.0.0.1:8791/v1
apiKey: public
model: opencode-free/big-pickle
验证指纹已动态获取:
curl http://127.0.0.1:8791/__session # 期望 fingerprint.source == "opencode-cli"
docker exec opencode-free-provider opencode --version环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
OPENCODE_FP_DISABLE |
未设 | 设 1 跳过 spawn,用静态回退指纹 |
OPENCODE_FP_TTL_MS |
1800000 |
抓到的指纹缓存时长(毫秒) |
OPENCODE_FP_TIMEOUT_MS |
15000 |
spawn / MITM 抓取超时(毫秒) |
OPENCODE_VERSION |
2.0.22 |
仅构建时:Docker 内 opencode 版本 |
NODE_IMAGE |
node:24-bookworm-slim |
仅构建时:Docker 基础镜像 |
验证
- 47 个单元测试全部通过。
- 本地端到端:真实动态指纹成功绕过验证,
HTTP 200且返回真实模型回复。 - GitHub Actions 已成功构建并推送镜像到
ghcr.io/jcleng/opencode-free-provider:latest。
注意
- 客户端若有
ALL_PROXY(如socks5://127.0.0.1:20170),curl会把 localhost 请求也走代理导致空响应,请用curl --noproxy '*'测试;Node 的fetch默认不读ALL_PROXY,代理服务端不受影响。 - 新镜像体积比旧的 Alpine 版大(含完整 opencode CLI 原生二进制,约 200MB)。