DeepSeek Harness Hub
← 返回列表

gausszhou/dsh-opencode-session-id

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
⚠ 装前注意

dsh session IDs for opencode, zero config.

基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/9/14 · 已提供中文文档

opencode 的 dsh 会话 ID,零配置。

综合分
41.5
GitHub 分
41.5
用户评分
★ Stars
15
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add gausszhou/dsh-opencode-session-id
未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包@gausszhou/dsh-opencode-session-id(未发布到 npm,仅可源码安装)
Node 引擎要求 >=20.3 · 基线 Node 22.19 满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件main/exports/bin 已声明

未发布到 npm registry,仅可从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/19 16:48:48

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-opencode-session-id

dsh session IDs for opencode, zero config.

npm version License: MIT

DeepSeek Harness (dsh) 插件:当你使用 opencode 模型(opencode / opencode-go 等指向 opencode.ai 网关的 provider)时,让实际发出的 HTTP 请求携带 session id——与 opencode 客户端自身的携带方式一致。

使用方法

将插件加进 dsh profile(发布为 npm 包后按包名安装):

dsh plugin --profile web add "@gausszhou/dsh-opencode-session-id"

装完后 重启 dsh web(systemctl --user restart dsh-web)让 bundle 生效。默认配置即可工作:请求 opencode.ai 时自动带上 x-opencode-session(opencode 网关同款会话头)以及 x-session-affinity / x-client-request-id / x-session-id。头值默认是会话 id 里 uuid 部分的纯字母数字 nanoid(8)(如 0RpJJnxJ,session- 前缀不参与哈希,由 uuid 经 SHA-256 确定性导出);verbose: true 时 journal 里同时打印原始 id 与 wire token 的映射:

journalctl --user -u dsh-web -f | grep opencode-session-id

实现

opencode 网关分支用 x-opencode-session 承载会话 id;本插件监听 llm/stream 作用域、包装 fetch 在 wire 层补上该头,并默认把 session- 里 uuid 部分(session- 前缀不参与)哈希成纯字母数字 nanoid(8) 上线。只改请求头,请求体 / URL / 方法等一律透传。原理细节见 docs/design.md。

配置

默认零配置即可用(上面的安装方式即可)。想开注入日志,patch 层只需:

- id: opencode-session-id
config:
verbose: true

全部可选项(均可省略,用默认值):

| 键 | 默认 | 说明 |
|---|---|---|
| providers | [opencode, opencode-go] | 要打标 sessionId 的 llm-pi-ai 路由名 |
| hosts | [opencode.ai] | 注入会话头的 URL host 后缀(含子域) |
| baseURLs | [] | 额外精确匹配的 URL 前缀(自定义网关) |
| headers | [x-opencode-session, x-session-affinity, x-client-request-id, x-session-id] | 注入的请求头名 |
| extraHeaders | {} | 可选静态附加头(如 opencode 指纹族 x-opencode-client: native / x-opencode-request: dsh) |
| userAgent | 空 | 覆写 User-Agent(opencode 自身发 opencode/;默认不动) |
| sessionIdEnv | 空 | 兜底 session id 的环境变量名 |
| verbose | false | 打印每次注入(含原 id → wire token 映射) |
| seedSessionId | false | 给 opencode 路由补种 options.sessionId |
| nanoidSessionId | true | 把 session- 哈希成 nanoid(8) 再上线;false 发原始 id |
| nanoidLength | 8 | token 长度(4–32) |
| nanoidAlphabet | alphanumeric | alphanumeric(纯 A-Za-z0-9,无 _/-)或 urlsafe(经典 64 字符表) |
| disableFetchInjection | false | true 时只保留 waterfall 会话作用域 |

验证

node test/verify.mjs   # 10 项:单测 + 真实 pi-ai wire 请求 + 并发隔离 + 只改请求头保证
node test/smoke-apply.mjs  # apply() 接线:监听器注册、作用域化 fetch、mount/dispose 生命周期

verify.mjs 用 dsh CLI 内置的真实 pi-ai 发出 opencode-go 请求,断言 wire 请求头里确实带上了 session id;另验证并发会话隔离、非 opencode 端点不受影响。

说明与限制

- session id 取 options.sessionId(agent-loop 已按会话填好);无会话上下文时兜底 sessionIdEnv > DSH_SESSION_ID(web 部署下是该进程的启动会话)> 进程内随机 id。
- 覆盖 openai-completions / openai-responses / anthropic-messages 等走 fetch 的协议;transport: websocket 不走 fetch,不在覆盖范围。
- 全局 fetch 包装只在命中 opencode 端点时追加请求头,不做任何其它改动。wire token 是 session- 中 uuid 部分的 SHA-256 单向哈希(不含 session- 前缀,如 0RpJJnxJ),后台无法反推原 id;换 nanoidAlphabet / nanoidLength 配置后 token 会整体变化,旧记录不再关联。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群