← 返回列表
✓ 可直接安装
一个 DeepSeek HarnessDSH
自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node >=20);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/11 · 已提供中文文档
综合分
38.8
GitHub 分
38.8
用户评分
—
★ Stars
6
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-opencode-sessionnpm 包 dsh-opencode-session 已校验归属本仓库,走 npm 安装最省事
信任档位:已验证本站已于 3 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · other
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 14 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/22
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/22(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-opencode-session @ 0.1.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/22 08:26:46
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-opencode-session
一个 DeepSeek Harness(DSH)
插件,会在路由到 OpenCode / OpenCode Go 提供商的模型调用上自动发送
x-opencode-session 请求头——每个 DSH 对话对应一个稳定的
会话 id。
为什么需要它
自 2026-09-05 起,OpenCode 的中继要求在
API 请求中携带 x-opencode-session 请求头(上游追踪见
deepseek-harness discussion #5495);
否则请求会以 400 MissingSessionID 之类的错误失败。共享
相同请求头值的请求会被固定到同一个上游后端,
这也正是让 OpenCode 的提示缓存在一个
对话的多个轮次之间保持热度的原因。
本插件:
- 修复 400 错误,方法是始终将请求头附加到 OpenCode(Go) 请求上,
- 保留缓存/亲和性收益,方法是使用一个每个
对话唯一、且在该对话的多个轮次之间保持稳定的值(默认情况下就是
DSH 会话 id 本身,也就是官方 DeepSeek 适配器
已经作为 x-deepseek-harness-session-id 发送的同一身份标识),
- 不触碰其他任何提供商,也不触碰任何已经携带该
请求头的请求。
安装
从 npm registry 安装(发布后):
dsh plugin --profile web add dsh-opencode-session
从本地检出安装:
dsh plugin --profile web add ./path/to/dsh-opencode-session
然后完全重启你的 dsh profile(bundle 层在启动时读取)。
启动日志会显示:
[opencode-go-session-header] active for providers [opencode, opencode-go] with mode session-id
如果你改为从源码检出运行 DSH,可以将其作为 overlay 加载:
pnpm dsh web --patch ./cordis.patch.yml。
配置
插件行位于 bundle 的 cordis.patch.yml 中;所有键都是可选的:
- insert:
- id: opencode-go-session-header
name: dsh-opencode-session
config:
providers: [opencode, opencode-go] # route keys to attach the header to
mode: session-id # 'session-id' | 'uuid'
debug: false
debugFile: null # optional absolute path
- providers — 其请求会附加该请求头的提供商路由键。默认值
覆盖 pi-ai 目录 id opencode 和 opencode-go;当你通过自定义
提供商名称来提供 OpenCode 服务时,请添加你自己的路由键。
- mode
- session-id(默认)— 请求头值 = 该模型
调用的 DSH 会话 id。每个对话唯一,在多个轮次、压缩、重试
和进程重启之间保持稳定。
- uuid — 每个 DSH 会话 id 派生一次的随机 UUID(不透明;保存在
内存中,因此进程重启时会重置)。
- debug — 通过
ctx.logger(dsh 进程控制台)记录每一个收到该请求头的流式调用。
- debugFile — 可选的绝对路径。设置后,每一个
收到该请求头的流式调用都会追加一行 JSON
({"ts","provider","model","session","header","value"}) 写入该文件——
当 dsh 控制台不可见时很方便。
若要在不编辑包的情况下覆盖某个 profile 中的配置,请在该 profile 自己的
cordis.patch.yml 中添加一行具有相同 id 的配置(它会替换整个 config,
因此需要重新声明每一个键)。
工作原理
1. 监听 llm/stream waterfall。若某个调用的 options.provider
指向已配置的 OpenCode 路由,并且携带 sessionId,则该调用会
通过一个持有 header 值的 AsyncLocalStorage 存储来驱动。
2. globalThis.fetch 会被 patch 一次。当此类存储处于活动状态时,
发出的请求会收到 x-opencode-session: (除非它已经
携带该 header——已有的值始终优先)。
3. 这两个注册都是 fiber 作用域的 ctx effect:停止 / 更新 /
卸载插件会恢复原始的 fetch 并移除监听器。
非 OpenCode 的 provider、没有 sessionId 的请求(一些辅助性的
手工构造调用)以及模型发现请求都会原样通过。
注意事项 / 限制
- 该 header 会附加到 llm/stream 调用内的聊天/流式请求上。Models 页面
使用的一次性模型列表(GET /models)是单独的流程,不会收到
该 header;如果你的 OpenCode 端点也拒绝该列表请求,请提交 issue。
- 该插件依赖 DSH 的出站 LLM 请求经过 Node 全局 fetch。如果未来的
DSH 版本更换了其网络栈,该插件将停止注入(症状:400 错误再次出现)
——届时请卸载。
开发
node --check lib/index.js
npm test # 针对 echo 服务器的本地行为测试
发布(面向维护者)
该包是纯 ESM JavaScript,零依赖;npm test 会通过 prepublishOnly
自动运行。
npm login # 一次即可,使用你的 npm 账户
npm pack --dry-run # 预览最终进入 tarball 的内容
npm publish # files = lib/, cordis.patch.yml, README.md
发布前,请再次确认该名称在 npm registry 上未被占用,并按需填写
package.json 中的 author、homepage 和 repository。
许可证
MIT