# opencode-go-proxy **Repository Path**: wangweiyong/opencode-go-proxy ## Basic Information - **Project Name**: opencode-go-proxy - **Description**: OpenCode Go 服务从 2026年9月6日 起,强制要求所有请求必须携带一个名为 x-opencode-session 的 HTTP 请求头,部分Vibe Coding工具无法设置HTTP请求头,可以使用opencode-go-proxy进行本地代理转发。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-08 - **Last Updated**: 2026-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenCode Go × Trae 本地反代理 在 Trae 与 OpenCode Go (Zen API) 之间做双向转发:自动注入上游要求的会话/请求头(`x-opencode-session` 等)、做模型名别名重写,并以浏览器身份(Cookie)访问上游。解决 Trae 直连时返回 `Request is missing x-opencode-session` 400、或访问被上游反爬校验拦截的问题。 没有第三方依赖,AI 思考多久都不会超时断连,进程意外退出还会自动重启,端口始终可用。 **适用**:trae、traeCN、dsh 等,亲测有效。 ## 快速开始 ### 方式一:使用 exe(推荐) 直接双击 `opencode-go-proxy-for-trae.exe`,控制台出现类似日志即启动成功: ``` [opencode-go-proxy] listening on http://127.0.0.1:9356 [opencode-go-proxy] upstream -> https://opencode.ai ``` 进程异常退出会自动重启,无需手动看守。 ### 方式二:源码运行 有 Python 环境时,用 Python 运行项目根目录的主脚本入口即可,用法与 exe 完全一致。 ## 配置浏览器 Cookie(关键) 访问 opencode.ai 需要携带浏览器身份,请先把 Cookie 准备好: 1. 浏览器打开并登录 opencode.ai。 2. 按 `F12` → `Network`,点击任意一个接口请求 → `Request Headers`,复制 `Cookie:` 后面的**整段值**。 3. 编辑 exe 同目录下的 `opencode-go-proxy-config.json`,把 Cookie 填进 `BROWSER_COOKIE` 字段并保存。 4. 重启代理使配置生效。 配置文件示例: ```json { "BROWSER_COOKIE": "__cf_bm=xxx; cf_clearance=yyy; session=zzz", "PROXY_PORT": 9356 } ``` 配置优先级:**环境变量 > 配置文件 > 默认值**。 ## 配置 Trae 自定义模型 | 配置项 | 填写内容 | |---|---| | 请求地址(Base URL) | `http://127.0.0.1:9356/zen/go/v1` | | 模型 ID | `proxy-` + 真实模型名,例如 `proxy-glm-5.3-flash` | | API Key | 你的 OpenCode API Key | **重要:模型 ID 必须加 `proxy-` 前缀。** 若与官方预设重名(如直接填 `glm-5.3-flash`),Trae 会把对话流量路由到自己的云端通道,完全绕过本代理;代理会剥掉前缀、还原为真实模型名再发给上游。 ## 端口与环境变量(可选) | 变量 | 默认值 | 说明 | |---|---|---| | `PROXY_PORT` | `9356` | 监听端口 | | `UPSTREAM_HOST` | `opencode.ai` | 上游主机(可带端口,如 `example.com:8443`) | | `UPSTREAM_PROTO` | `https` | 上游协议(`https` / `http`) | | `BROWSER_COOKIE` | 空 | 浏览器 Cookie(也可写进配置文件) | | `OPENCODE_UA` | `opencode/1.18.29 cli` | 注入的 User-Agent | | `CONNECT_TIMEOUT` | `10` | 建连超时(秒);读取永不超时 | | `LOG_FILE` | 程序目录下 `data\opencode-go-proxy.log` | 日志文件路径 | 源码运行时示例(PowerShell): ```powershell $env:PROXY_PORT = "9356" python 主脚本.py ``` 端口变了的话,Trae 请求地址相应改为对应的端口,例如 `http://127.0.0.1:9356/zen/go/v1`。 ## 日志与排错 - 日志同时输出到控制台和 `data\opencode-go-proxy.log`(超过 5MB 自动轮转,最多保留 2 份)。 - 对话报错时,先看日志中的 `[upstream-error] body:` 行,里面是上游返回的具体错误信息。 - 若 Trae 的请求没有出现在代理日志里,多半是模型 ID 没加 `proxy-` 前缀,流量被 Trae 云端通道接走了。 - 读取永不超时:AI 思考多久都会持续等待,不用担心超时中断。 - 停止代理:控制台按 `Ctrl+C`。 ## 工作原理(简述) 每次请求转发前,代理自动注入: - `x-opencode-session`:会话 ID(同一对话保持稳定,用于上游提示词缓存路由) - `x-opencode-request`:请求 ID(同一会话内递增,如 `msg_1`、`msg_2`) - `x-opencode-client`:`cli` - `x-opencode-project`:`global` 会话识别优先级:客户端显式会话标识(header/body)> 内容哈希(system + 首条 user 消息)> 随机临时会话。