dsh-web-search-opencode-go:修复 OpenCode Go / Zen 上的 DSH Web 搜索路由问题

前言

DeepSeek Harness (DSH) 的内置 web_search 工具调用 Anthropic 兼容的 Messages 端点。当将 provider 指向 OpenCode Go / Zen 时,网关要求请求必须携带 x-opencode-session 头部。缺少该头部会导致请求被拒绝并返回 MissingSessionID 错误。

dsh-web-search-opencode-go 是一个插件,它通过自动注入必要的路由头部,修复了 DSH 内置 web_search 在 OpenCode Go / Zen 上的路由问题。

它是什么

这是一个 Drop-in patched fork,旨在让 DSH 的 web_search 工具在不修改官方 DSH 安装的情况下,正常通过 OpenCode Go / Zen 网关工作。

  • 所有者:leeyoung1
  • 许可证:MIT

核心功能

  • 自动注入头部:自动添加 x-opencode-session 和 x-opencode-client: dsh 头部。
  • 修复路由问题:解决 OpenCode Go / Zen 对缺失会话 ID 的拒绝问题。
  • 安装模式:支持 DSH Bundle(推荐)和 Drop-in copy 两种安装模式。
  • 可配置头部:支持通过配置 headers 和 sessionId 自定义头部。
  • 即插即用:无需修改官方 DSH 安装,安装后重启 dsh web 即可使用。

安装与启用

推荐使用 Bundle 模式安装。

  1. 执行安装命令:
    dsh plugin --profile web add github:leeyoung1/dsh-web-search-opencode-go
安装命令会将插件添加到 `dsh.profile.bundles`,并自动处理 patch 配置。
  1. 必须重启 dsh web 进程,以加载新插件。

典型用法

安装并重启 dsh web 后,配置 baseURL 并设置 API Key 环境。

  1. 在 ~/.dsh/settings.yaml 中配置 provider 指向 OpenCode Go:
    web-search-deepseek:
      baseURL: https://opencode.ai/zen/go/v1
      apiKeyEnv: DEEPSEEK_API_KEY
(注:`apiKeyEnv` 也可设置为 `OPENCODE_GO_API_KEY`)
  1. 在对话中自然语言搜索,或直接调用工具:
    web_search: DeepSeek Harness GitHub

配置说明

除了基础的 baseURL 和 apiKeyEnv,还可以配置可选的 headers 和 sessionId。

可选配置项

web-search-deepseek:
  baseURL: https://opencode.ai/zen/go/v1
  # 自定义 x-opencode-session 头部
  headers:
    x-opencode-session: my-fixed-session
  # 显式指定会话 ID
  sessionId: my-fixed-session

头部优先级

当未显式配置时,插件按以下顺序确定会话 ID:
1. 显式配置的 headers['x-opencode-session']
2. 显式配置的 sessionId
3. 当前 DSH agent 会话 ID
4. 提供商级别的 UUID(用于非 agent 调用)

注意事项

  • 运行环境:需要 Node.js 20+ 或 pnpm。
  • 重启机制:安装后必须重启 dsh web 才能生效。
  • 平台支持:支持 macOS、Linux 和 Windows。
  • 官方包保护:插件以 Drop-in copy 或 Bundle 方式工作,不会修改 DSH 安装目录中的官方 profile 包。

总结

该插件解决了 DSH 使用 OpenCode Go / Zen 作为搜索提供商时的路由错误。通过标准的安装命令和配置文件修改,即可恢复 web_search 工具的正常功能。

羽毛球分组比赛记分
小程序二维码

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

小夜