为自动审查请求补上会话标识,修复网关报错
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add XavierXhz/dsh-opg-session-header该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 插件:为 opencode-go 路由按会话加上 x-opencode-session 请求头,恢复官方 Auto 审查(修复 400 MissingSessionID)
README
由 DeepSeek 最新模型翻译生成dsh-opg-session-header
本地 DeepSeek Harness(dsh)插件:给每条走 opencode-go 路由的推理请求补上按会话稳定的 x-opencode-session 头,让 OpenCode Go 网关不再返回 400 MissingSessionID,并让官方 Auto review (自动审查)的评审请求也能正常工作。
- 目标环境:dsh 0.2.1-rc.2 + @earendil-works/pi-ai 1.3.0 + web profile + opencode-go provider
- 形态:纯 Host bundle,无依赖、无构建、无 client 半边;安装后不需要重启即可热生效,重启后照常加载
- 状态:已安装进本机 web profile,并通过单测、真实适配器集成测试、网关实测与实机自动审查路径验证
为什么需要它
dsh 0.2.1 的 pi-ai 适配器已经会根据 GenerateOptions.sessionId 给主 agent 请求加
x-opencode-session。
展开完整文档(README 剩余 1 节)
dsh-opg-session-header
本地 DeepSeek Harness(dsh)插件:给每条走 opencode-go 路由的推理请求补上按会话稳定的 x-opencode-session 头,让 OpenCode Go 网关不再返回 400 MissingSessionID,并让官方 Auto review (自动审查)的评审请求也能正常工作。
- 目标环境:dsh 0.2.1-rc.2 + @earendil-works/pi-ai 1.3.0 + web profile + opencode-go provider
- 形态:纯 Host bundle,无依赖、无构建、无 client 半边;安装后不需要重启即可热生效,重启后照常加载
- 状态:已安装进本机 web profile,并通过单测、真实适配器集成测试、网关实测与实机自动审查路径验证
为什么需要它
dsh 0.2.1 的 pi-ai 适配器已经会根据 GenerateOptions.sessionId 给主 agent 请求加
x-opencode-session。但官方自动审查插件 @deepseek-ai/dsh-experimental-auto-review 在 tools/pre-execute 里自己拼
ctx.llm.stream({ provider, model, system, messages, temperature, signal }),不带 sessionId
(该包全仓 grep sessionId 零命中)。评审请求到了网关仍是裸请求,于是:
Auto review of tool "bash" failed; its body was not executed: ... 400 MissingSessionID
本插件换了一个注入点:不再依赖调用方传 sessionId,而是在 pi-ai 适配器唯一的请求分发口 PiAiAdapter#streamWithSnapshot → snapshot.models.streamSimple(model, ctx, options) 的 options.headers 上补头。没有 sessionId 的辅助调用(自动审查、session title、compaction)用
agents.currentInitiator()?.session?.id 借发起这次调用的会话 id;不伪造、不共用一个固定值。
安装
用 dsh 插件管理器安装本目录(plugin_manager 的 install_bundle,target 传本仓库的绝对路径):
plugin_manager install_bundle target=<此仓库的绝对路径>
安装后效果:
- 当前进程热生效(实测 application: applied,适配器已挂上;若未热生效则重启 dsh);
- 下次启动 dsh 时从 dsh.profile.bundles 末尾加载,持久生效;
- 卸载:plugin_manager remove_bundle(或 profile 里移除 dsh-opg-session-header),适配器钩子会被 disposer 还原。
配置
cordis.patch.yml 默认插入一行,可在 profile 自己的 cordis.patch.yml 里按 id 覆盖:
- id: opg-session-header
config:
enabled: true # false = 挂载但不注入 value: auto # auto | uuid | id sessionlessFallback: true # 无 sessionId 时借发起会话 id(自动审查依赖它)
- 路由范围是代码常量 opencode-go(大小写不敏感):opencode-go、opencode-go-custom 进; opencode-zen、my-opencode-go、deepseek 一个字节都不动。故意不提供 routes: 配置,避免写错范围把网关专用头发给别的 provider。
- value:
- auto(默认):openai-responses 发原始 session-<uuid>(与 pi-ai 自带 session_id 对齐,避免一个会话裂成两个缓存桶);其它协议发裸 UUID;
- uuid:裸 UUID;id:原始 session-<uuid>。
诊断
只读端点(同源、需登录,复用 dsh 的 connection.requestRejection):
GET https://<dsh-web>/opg-session-header/status
或本机脚本(用 dsh 自己的 browser-session 密钥临时签 cookie,不打印密钥):
node scripts/status.mjs
返回关键字段:
{
"hooked": { "adapters": 1, "prototypes": 1, "routesInScope": ["opencode-go"] },
"counters": { "calls": 30, "scoped": 30, "attached": 30, "inherited": 1, "sessionless": 0 },
"diagnostics": []
}
- hooked.adapters >= 1:适配器已挂上;routesInScope 应包含 opencode-go;
- 主 agent 调用:attached 增长;
- 自动审查等无 sessionId 调用:inherited 增长、sessionless 保持 0(说明回退拿到了会话 id);
- sessionless 增长说明有调用没拿到会话 id(回退未命中,需要排查)。
验证
node --test test/*.test.mjs # 19 项:核心单测 + 真实 PiAiAdapter 集成测试
node scripts/verify-gateway.mjs # 直连网关:缺头 400 MissingSessionID / 带头 200
node scripts/status.mjs # 已安装插件的实时计数
完整记录(含实机自动审查路径探针)见 docs/03-验证记录.md。
目录
package.json bundle 清单(dsh.bundle.patch 指向 cordis.patch.yml) cordis.patch.yml 插入 opg-session-header 一行 lib/index.js Host 半边:注入、适配器扫描、诊断端点 lib/session-header.js 核心:范围/取值/合并/适配器钩子/状态 test/ core.test.mjs(单测)、adapter.test.mjs(真实适配器) scripts/ verify-gateway.mjs、status.mjs、credentials.mjs locale/ icon.svg 插件管理器的展示元数据 docs/ 调研对比、设计与实现、验证记录、项目记忆
与两个参考插件的关系
- mathangler/dsh-opencode-session-header:本插件的主要参考。adapter 分发点相同,initiator 回退机制也相同;本实现按本机场景重写、裁剪,并补了本地诊断端点与前端契约断言,MIT 归属见 LICENSE。
- DMIAOCHEN/dsh-auto-review-plus:另一条路线——fork 官方自动审查、把 sessionId 直接写进评审请求,并加审查模型选择器。它更接近根因,但需要停用官方行、带 client 半边,且 peer 钉在 0.2.0-rc.2,装进 0.2.1-rc.2 前必须改 peer 与 cwd 逻辑后重新构建。两者对比与选择理由见 docs/01-插件调研与对比.md。
已知边界
- 依赖两个 TypeScript private 内部面:ctx.llm.adapters 与 PiAiAdapter#streamWithSnapshot。dsh 升级若重命名它们,插件会挂不上,并在 diagnostics/routesInScope 里报出来(不是启动崩溃),按提示更新即可。
- 只作用于 route key 以 opencode-go 开头的调用;如果以后把 provider 改名,需要同步改 lib/session-header.js 的 SCOPED_ROUTE_PREFIX。
- 头值来自会话 id,不含任何凭据;诊断端点需要登录且只读。
- 400 MissingSessionID 是 OpenCode Go 网关的行为;额度耗尽、model_coming_soon、429 等错误不在本插件职责范围内。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
XavierXhz/dsh-opg-session-header
为自动审查请求补上会话标识,修复网关报错
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。