🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话兜底补丁 zlxlsy666/dsh-opencode-session-fallback

DeepSeek Harness
zlxlsy6667 天前有提交已提供中文文档扫描:未发现敏感能力

为 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 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 7 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

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
预览分享卡片长什么样 ↓zlxlsy666/dsh-opencode-session-fallback
分享 · DeepSeek Harness Hub
zlxlsy666/dsh-opencode-session-fallback

为 OpenCode 自动评审请求补上会话标识,避免工具调用失败

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部