为 OpenCode 自动评审请求补上会话标识,避免工具调用失败
29.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zlxlsy666/dsh-opencode-session-fallback该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-opencode-session-fallback
一个小巧的 DeepSeek Harness(DSH)插件。它给 OpenCode 路由上不带会话的 LLM 请求补一个兜底 sessionId,这样 auto 权限预设就不会再让每次工具调用都因 400 MissingSessionID 失败。
不全局打补丁 fetch,不改服务商配置,也不覆盖官方包。
问题
OpenCode / OpenCode Go 会拒绝不带 x-opencode-session 头的推理请求:
400 {"type":"error","error":{"type":"MissingSessionID","message":"Request is missing x-opencode-session ..."}}
DSH 的 @deepseek-ai/dsh-llm-pi-ai 适配器只在请求带 sessionId 时才让 pi-ai 加上这个头。主对话调用确实带 sessionId,但 @deepseek-ai/dsh-experimental-auto-review 是手工拼出评审请求的,没带 sessionId。
展开完整文档(README 剩余 1 节)
dsh-opencode-session-fallback
一个小巧的 DeepSeek Harness(DSH)插件。它给 OpenCode 路由上不带会话的 LLM 请求补一个兜底 sessionId,这样 auto 权限预设就不会再让每次工具调用都因 400 MissingSessionID 失败。
不全局打补丁 fetch,不改服务商配置,也不覆盖官方包。
问题
OpenCode / OpenCode Go 会拒绝不带 x-opencode-session 头的推理请求:
400 {"type":"error","error":{"type":"MissingSessionID","message":"Request is missing x-opencode-session ..."}}
DSH 的 @deepseek-ai/dsh-llm-pi-ai 适配器只在请求带 sessionId 时才让 pi-ai 加上这个头。主对话调用确实带 sessionId,但 @deepseek-ai/dsh-experimental-auto-review 是手工拼出评审请求的,没带 sessionId。
于是在 opencode-go 路由上开启 auto 权限预设后:
1. 每次工具调用都先发给评审模型,
2. 这个请求没有会话头 → 网关返回 400,
3. 评审失败 → DSH 按失败关闭处理 → 工具主体永远不执行:
Auto review of tool "pwsh" failed; its body was not executed:
auto-review: reviewer ended with error INVALID_REQUEST: 400: {"type":"MissingSessionID", ...}
修复方式
启动时包装一次 ctx.llm.stream。已经带 sessionId 的请求,或者目标服务商不在配置列表里的请求,原样放行。只有 OpenCode 路由上不带会话的请求(实际就是自动评审的评审调用)会拿到配置的兜底 id;之后 pi-ai 自己会加上 x-opencode-session。
ctx.llm.stream(options)
├─ options.sessionId present .......... pass through (main chat, subagents, compaction, titles)
├─ provider not opencode/opencode-go .. pass through (official DeepSeek etc. untouched)
└─ session-less + OpenCode route ...... { ...options, sessionId: <fallback> }
为什么不打补丁 globalThis.fetch(有些插件这么干)?因为替换全局 fetch 会包住宿主的每一次出站调用,包括应用自身的网络请求,可能因连接错误把整个界面拖垮。这个插件只动 LLM 服务方法。
行为保证
- 已有的 sessionId 绝不替换 → 按会话路由、提示词缓存亲和性都保持不变。
- 其他服务商(例如官方 deepseek 服务商)完全不受影响。
- 调用方传入的 options 对象绝不被修改(用的是副本,所以冻结的 options 也没问题)。
- 卸载后自动恢复原来的 ctx.llm.stream。
- 如果未来 DSH 版本改了服务结构,插件会打一条警告并保持静默,而不是让启动失败。
安装
插件在 DSH 启动时装配 —— 安装后请重启 DSH。
从 npm 安装
dsh plugin --profile web add dsh-opencode-session-fallback
也可以用 GUI:设置 → 插件 → 安装,包名填 dsh-opencode-session-fallback。
从这个 Git 仓库安装
dsh plugin --profile web add git+https://github.com/zlxlsy666/dsh-opencode-session-fallback.git
从本地检出安装
dsh plugin --profile web add "file:C:\path\to\dsh-opencode-session-fallback"
桌面应用自己管理 desktop 配置档:这个配置档请用它的 插件管理器 界面安装,不要用命令行。
启动成功后,日志会显示:
[opencode-session-fallback] active for providers [opencode, opencode-go], fallback session id "dsh-opencode-session-fallback"
配置(可选)
在配置档的 cordis.patch.yml 里用同一个条目 id 覆盖:
- id: opencode-session-fallback
name: dsh-opencode-session-fallback
config:
providers: [opencode, opencode-go] # routes that need a session id
fallbackSessionId: my-stable-id # value used when the request has none
debug: false # log every injection
卸载
dsh plugin --profile web remove dsh-opencode-session-fallback
卸载后重启 DSH。
兼容性
- 基于 DSH 0.2.1-rc.2(桌面版)构建并验证,搭配 opencode-go + deepseek-v4.1-flash,端到端修好了这个故障(auto 预设可用、工具能执行、reviewer 正常返回 allow/deny 决定)。
- 要求 ctx.llm.stream 存在(inject: ['llm']);否则插件只打一条警告,什么都不做。
- 只要 DSH 版本自带 pi-ai 的 OpenCode 服务商,都能配合使用。
开发
node --check lib/index.js
node test/smoke.mjs # 5 assertions, no DSH runtime required
许可证
MIT
中文说明
解决的问题
OpenCode / OpenCode Go 要求每个推理请求都带 x-opencode-session 头,缺失会返回 400 MissingSessionID。DSH 的 dsh-llm-pi-ai 只在请求带 sessionId 时才让 pi-ai 补这个头,而 @deepseek-ai/dsh-experimental-auto-review 的 reviewer 请求是手工拼的、没有 sessionId。
结果:在 opencode-go 路由 + auto 权限预设下,每次工具调用先过 reviewer → reviewer 请求 400 → 审查失败 → fail-closed → 工具全部无法执行。
修复方式
启动时包一层 ctx.llm.stream:
- 已有 sessionId 的请求(主对话、子代理、压缩、会话标题)原样透传;
- 其他服务商(例如官方 deepseek)完全不受影响;
- 只有「缺 sessionId 且命中 OpenCode 路由」的请求(实际就是 reviewer)补一个兜底 id, pi-ai 随后自动加上 x-opencode-session。
不接管全局 fetch(那会把宿主自身的出网调用一起包住,可能直接让 UI 报 connection error),也不修改服务商配置、不覆盖任何官方包。
安装
插件在 DSH 启动时装配,装完必须重启 DSH。
- npm:dsh plugin --profile web add dsh-opencode-session-fallback
- GUI:设置 → 插件 → 安装,填包名
- Git:dsh plugin --profile web add git+https://github.com/zlxlsy666/dsh-opencode-session-fallback.git
- 本地目录:dsh plugin --profile web add "file:C:\path\to\dsh-opencode-session-fallback"
桌面版的 desktop 配置档由应用自己管理,请在应用的插件管理器里安装。
启动日志应出现:
[opencode-session-fallback] 对服务商 [opencode, opencode-go] 生效,回退会话 id 为 "dsh-opencode-session-fallback"
可选配置
在配置档的 cordis.patch.yml 里用同 id 覆盖:
- id: opencode-session-fallback
name: dsh-opencode-session-fallback
config:
providers: [opencode, opencode-go]
fallbackSessionId: my-stable-id
debug: false
卸载
从插件管理器卸载(或执行 dsh plugin --profile web remove dsh-opencode-session-fallback),然后重启 DSH, ctx.llm.stream 会自动恢复。
已验证环境
DSH 0.2.1-rc.2 桌面版 + opencode-go 路由 + deepseek-v4.1-flash:修复后 auto 预设下工具正常执行, reviewer 能正常返回 allow/deny 决策。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zlxlsy666/dsh-opencode-session-fallback
为 OpenCode 自动评审请求补上会话标识,避免工具调用失败
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,270已汉化DSH
70.8
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。