dsh-opencode-freeaccess:在 DSH 里用 OpenCode 免费模型

前言

在 DeepSeek Harness(DSH)里把 Provider 指到 opencode.ai、选用免费模型发消息时,常见报错是 403 FreeTierError: OpenCode's free tier can only be used from within OpenCode。密钥、模型 ID 和 Harness 本身往往没问题:OpenCode 的免费档只接受带 session id 的请求,而 DSH 默认不会在出站请求里带上它。可选退路包括整段任务改在 OpenCode CLI 里跑、购买付费 Key,或经代理/聚合层转发——都会增加成本或运维负担。下面介绍社区插件 dsh-opencode-freeaccess(维护者 mubaid,分类:联网工具),它在匹配 OpenCode 路由的请求上补全 session 相关头,使免费档可在 DSH 内直接使用。

这是什么

dsh-opencode-freeaccess 是 DeepSeek Harness 插件,职责很窄:在发往 OpenCode 的请求上写入会话标识(session id)及官方客户端同类头信息,不改变请求体、URL、方法、凭据与响应内容;对其它 Host 的请求按原样转发。

DSH 侧本身已持有会话信息,适配层此前未把它传到线上;该插件在能触达网络的一层补上缺口,无需新建 Provider 块或额外网关。

核心功能

以下均来自项目 README 与 package 描述,未单独验证的边界见文末「注意」。

  1. 解锁 OpenCode 免费档
    安装并重启 profile 后,同一 Provider、同一免费模型在 DSH 中可正常流式返回,而非 403 FreeTierError。

  2. 按会话稳定的 id
    id 由对话创建时间与对话 uuid 派生,格式与 OpenCode 一致:ses_ + 12 位十六进制(时间)+ 14 位(uuid 派生)。一次 DSH 对话对应一个 id,重启后仍相同;并行对话互不共用 id。

  3. 并发与子智能体
    会话作用域使用 async context,并行对话不会串 id;子智能体各自从所属对话生成 id。

  4. 仅改请求头
    项目含测试:对匹配请求与控制请求 diff,断言只有 headers 不同。prompt 与回复逻辑不被插件改写。

  5. 默认按 Host 限定
    只处理配置匹配的 OpenCode 相关 Host;可通过 profile patch 调整范围。

  6. 可观测
    配置 verbose: true 时可日志输出每次发送的 id。

  7. 无构建步骤
    纯 ESM,从 GitHub 安装,README 称无需额外 permission。

写入的头(完整列表见 README)包括:x-opencode-session、x-session-affinity、x-opencode-session-id、x-session-id、x-opencode-client: cli、x-opencode-project: global,以及 User-Agent: opencode/latest/<version>/cli。

安装与启用

先做插件安装,再重启对应 profile 服务。官方 Quick start 如下。

dsh plugin --profile web add github:mubaid/dsh-opencode-freeaccess
systemctl restart dsh-web

README 说明:默认已对齐 opencode.ai 与常见路由,一般无需再改 Provider 配置。若你使用自建 gateway 或代理,可将现有 baseURLs 指向该路径,插件仍可在匹配 Host 上注入头信息。

观察插件是否在运行:

journalctl -u dsh-web -f | grep opencode-freeaccess

典型用法与预期现象

安装前(同一 opencode2 / space-bunny-free 等免费模型):

403 FreeTierError: OpenCode's free tier can only be used from within OpenCode

安装并重启 profile 后(同一 Provider、同一模型、同一 Key):

streaming normally

README 中的场景示例(非独立案例数据,仅为能力说明):

  • 长时 Agent 会话:对话 id 全程不变,上游可维持 prompt cache 亲和,而非每请求一个新 id。
  • 并行子智能体:多个子任务各自 id,互不影响。
  • 希望 dsh 到 OpenCode 直连、不经过聚合代理时,仍保留免费档。
  • 从代理迁移:去掉中间 hop,模型与免费档行为可保留。

高级配置在 profile 的 patch 层,插件 id 为 opencode-freeaccess,字段包括 providers、hosts、baseURLs、headers、extraHeaders、userAgent、sessionIdEnv、verbose、seedSessionId、disableFetchInjection;默认值见仓库 docs/design.md。

适用场景与注意

适合谁

  • 已在 DSH 中配置 OpenCode Provider,想使用其免费模型且不愿整段工作流迁到 OpenCode CLI。
  • 需要会话级稳定 id(缓存亲和、路由)且希望改动范围限于请求头。
  • 使用 openai-completions、openai-responses、anthropic-messages 等基于 fetch 的协议栈。

与其它路径对比(摘自 README 对比表)

OpenCode CLI 代理/聚合 本插件
Harness 仅 OpenCode 任意 DeepSeek Harness
免费档 是 视上游而定 是
额外 hop 无 有 无
需自维护基础设施 无 有 无

务必知晓的限制

  • WebSocket 传输不走 fetch,不支持。
  • OpenCode 免费档期望请求里存在名为 read 的工具(官方客户端会发 read + shell);DSH 默认带有同名工具,若禁用可能导致网关拒绝。
  • 个别免费模型在上游偶发失败,README 说明可能与凭据无关,属上游行为。
  • 项目自述为早期阶段、职责面窄;未验证项见 VERIFICATION.md。

安全与信任

插件以当前 DSH 进程权限运行,会在匹配的出站请求上追加头信息。安装前请阅读源码与 MIT 许可证,确认 Host 匹配范围与 patch 配置符合你的环境。社区目录站点(如 SkillHub)与 DeepSeek / 幻方无官方从属关系,插件来自社区维护者 mubaid,非官方应用商店条目。

结尾

dsh-opencode-freeaccess 针对「DSH 已知 session id 但未写入 OpenCode 请求」这一缺口:一条安装命令、重启 profile,即可在 Harness 内继续使用 OpenCode 免费模型,而无需代理或付费 Key。细节、测试与配置默认值以 GitHub 仓库为准。

  • 目录页:https://www.skillhub.cn/plugins/mubaid/dsh-opencode-freeaccess
  • GitHub:https://github.com/mubaid/dsh-opencode-freeaccess
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜