# 复制本文件为 .env 后按需修改。 # 优先级:进程环境变量 > .env > 内置默认值。留空的项一律走自动探测。 # # 注意:.env 已被 .gitignore 忽略,但仍不建议在此填写任何真实凭据 —— # 桥的鉴权材料全部在运行时从 WorkBuddy 客户端现取,不需要也不应该写到这里。 # ── 桥 ────────────────────────────────────────────────────────────────── WORKBUDDY_HOST=127.0.0.1 WORKBUDDY_PORT=8790 # 本地回环令牌:只用于阻止同机其它程序误用这个端口,并非上游凭据。 # **留空 / 不写这一行 = 首次启动时自动生成随机令牌并持久化到 # dsh-plugin/.bridge-token**(控制台与 dsh 插件读同一个文件,自动保持一致)—— # 推荐就这么用。只有需要手工指定(例如要跟已有客户端配置对齐)时才填。 WORKBUDDY_LOCAL_TOKEN= # 上游请求超时(毫秒)。0 = 不限;长回答需要保持 0。 WORKBUDDY_TIMEOUT_MS=0 # 上游 keep-alive 连接池:空闲连接保留时长(毫秒)。跨请求复用 TLS 连接, # 免去每次 ~150ms 的 DNS+TLS 握手;0 = 关闭(回退到每请求新建连接)。 WORKBUDDY_KEEPALIVE_MS=300000 # 1 = 打印每次请求的模型/消息数/工具数(不含对话内容) WORKBUDDY_LOG=1 # ── Anthropic 兼容层(Claude Code 用 POST /v1/messages)───────────────── # Claude Code 发的是 claude-sonnet-4-… 这类名字,上游并没有这些 id,必须映射。 # 填上游真实模型 id 即可(见 /v1/models)。主模型默认 glm-5.3 —— 它是实测 # 工具调用最稳的一个,而 Claude Code 全程依赖工具调用。 # WORKBUDDY_ANTHROPIC_MODEL=glm-5.3 # Claude Code 用它跑标题生成、文件摘要这类后台活,用小模型就够,别浪费额度。 # WORKBUDDY_ANTHROPIC_FAST_MODEL=glm-5.3-flash # ── 本地限流(保护账号配额;默认全关)────────────────────────────────── # 单个失控的客户端(脚本 bug、死循环重试)能把账号配额打爆。两个旋钮可独立启用: # RPM = 每分钟最多向上游发几条(0 = 不限) # MIN_INTERVAL = 两条请求之间的最小间隔毫秒(0 = 不限) # 超限行为(MODE):queue = 排队等待(默认,对齐 copilot-api 的 --wait); # reject = 立刻 429 + Retry-After(适合会自行退避的客户端) # 被限流的请求只进账本(status=429 / rate_limited),不打上游。 # WORKBUDDY_RATE_LIMIT_RPM=0 # WORKBUDDY_RATE_LIMIT_MIN_INTERVAL_MS=0 # WORKBUDDY_RATE_LIMIT_MODE=queue # ── 上游 429 的桥侧重试(默认关;慢与稳二选一)───────────────────────── # 上游按账号限流回 429(code 14003,官方提示"等约 1 分钟再试")时,桥可按这份毫秒 # 计划在本地等待并**原样重发**,成功后客户端无感。代价:上游拥塞时段每条请求会先 # 憋这么久 —— 实测(2026-10-13)等待 20s 后多半还是 429,用户感知为"反应好慢", # 所以**默认关闭**,重试交给客户端自己退避。想要"桥替你等"再显式开: # WORKBUDDY_429_WAITS=30000,60000 # 进行中请求超过该毫秒数即在控制台标「疑似卡死」(默认 5 分钟)。 # 只影响显示高亮,不干预请求 —— 桥没有任何默认超时(长回答需要无限等待)。 # WORKBUDDY_ACTIVE_ALERT_MS=300000 # ── 上游 400 的重试策略(默认:按真因分流)────────────────────────────── # 上游 400 的 code 11133 只是**包装码**,真因在响应体的 extError.code 里: # · 确定性(model_param_invalid / invalid_reasoning_effort / model_not_found …) # —— 参数被模型提供方拒了,重发一万次也不会变。桥**立刻**返回,不退避。 # · 认不出来的 —— 按退避表重试(保守:不认识的不擅自放弃)。 # 实测(2026-10-13):修前这类确定性错误会白等 1s+4s+10s+25s = 40 秒后照样报错, # 日志里 122 次全是确定性的、纯等待累计 2460 秒(41 分钟)。 # # WORKBUDDY_TRANSIENT_400_RETRY=0 连瞬时 400 也不重试(全部快速失败,速度优先) # WORKBUDDY_TRANSIENT_400_DELAYS= 非确定性 400 的退避表(毫秒,逗号分隔) # 默认 1000,4000,10000,25000;主要给测试用 # WORKBUDDY_TRANSPORT_RETRY_MS= 传输层瞬时失败(DNS/建连)重试前的等待, # 默认 250ms。只在失败路径上花这个时间。 # WORKBUDDY_TRANSIENT_400_RETRY=0 # WORKBUDDY_TRANSPORT_RETRY_MS=250 # ── 客户端凭据分层(opt-in;默认关)──────────────────────────────────── # 给不同客户端发不同的 key(逗号分隔),实现:分开记账(账本 client 字段 = # key 哈希前 8 位)、独立限流桶、单独吊销(删掉某把、重启桥生效)。 # WORKBUDDY_LOCAL_TOKEN 永远有效(管理面 / 控制台用它)。内存中只保留哈希, # 明文不落盘、不进日志。 # WORKBUDDY_CLIENT_KEYS=claude-code-key-xxx,opencode-key-yyy # ── 出站客户端身份(上游版本漂移时才需要动)───────────────────────────── # 上游按 User-Agent / X-IDE-* / X-Product-Version 校验调用来源;官方客户端 # 升级后旧指纹可能被拒(现象:所有请求突然 401/400,凭据却完全正常)。 # 到那时把这三个改成新版本号(或参考官方客户端当前 UA)即可,默认值 = # 当前实测可用的官方版本。改完重启桥生效。 # WORKBUDDY_APP_VERSION=4.9.29177644 # WORKBUDDY_IDE_VERSION=1.119.0 # WORKBUDDY_IDE_NAME=VSCode # ── 控制台 ────────────────────────────────────────────────────────────── DASHBOARD_PORT=8792 # 积分余额的缓存时长(毫秒)。积分要打上游计费网关,而总览每 20 秒轮询一次 —— # 不加缓存等于每 20 秒打一次计费端点。调小能让页面更快反映余额变化(如签到后), # 代价是更频繁的上游查询。 WORKBUDDY_QUOTA_TTL_MS=60000 # ── WorkBuddy 客户端 ──────────────────────────────────────────────────── # 留空则按平台自动探测。 # WORKBUDDY_APP_EXECUTABLE=E:\App\WorkBuddy\WorkBuddy.exe # 登录文件。留空时使用 /workbuddy-desktop.info。 # 该目录下若同时存在多个账号快照(如国际版 workbuddy-desktop-ai.info), # 必须显式指定,否则可能选错账号。 # WORKBUDDY_AUTH_FILE= # WORKBUDDY_AUTH_DIR= # ── DeepSeek Harness ──────────────────────────────────────────────────── # 留空则使用 %USERPROFILE%\.dsh 与 %USERPROFILE%\DeepSeek-Harness\runtime # DSH_HOME= # DSH_RUNTIME=