前言¶
在 DeepSeek Harness(DSH)里用浏览器连 dsh web 时,工作区会优先复用磁盘上已有的空白会话(没人说过话的那条),而不是每次都新建。关标签、再连一次,往往会「接管」上一次连接留下的空白 Session。若上一次对应的 dsh web 进程还在,Host 仍握着该 Session 的写租约,会以 session/writer-held 拒绝;官方客户端虽然会再建一个新 Session,但是先抛错再自愈,对话界面仍会弹出「当前会话已被占用……」——对真正的空白会话来说,这条提示并不成立。
dsh-blank-handoff 是社区维护的 DSH 插件(仓库 OahzOb/dsh-blank-handoff),在符合条件的拒绝场景下把请求静默转交给新 Session,避免误报。下面介绍它做什么、不做什么,以及如何安装与自检。
这是什么¶
- 名称:dsh-blank-handoff(npm 包名同 GitHub 仓库)
- 维护者:OahzOb
- 分类:模型推理(SkillHub 目录归类)
- 定位:DeepSeek Harness 插件;空白 Session 因前一次连接遗留而被
session/writer-held拒绝时,转交给新 Session,而不是在对话里报「已被占用」。
插件在 Host 侧通过 Cordis patch 包装 ctx.sessions.create;Web 客户端半边随页面加载(platform: web,immediately: true)。插件以当前 DSH 进程权限运行,安装前建议阅读仓库源码与 MIT 许可证。
核心功能¶
静默转交「没人用的空白会话」¶
每次连接各自起一个 dsh web、各自端口。浏览器打开后会选工作区,并倾向于复用空白 Session;上一次连接创建的空白 Session 仍可能在磁盘上,下一次连接会尝试「接管」(请求里指名 sessionId)。
若旧连接的服务还在、仍持有写租约,Host 返回 session/writer-held。装上本插件后:当创建会话且指名了 Session 的请求因上述错误失败时,插件会去掉 sessionId 重试,返回一个新 Session,拒绝不会冒到对话层,用户也不会看到:
当前会话已被占用,可能是其他正在运行的 DSH 导致的(如其他 dsh web、桌面端),请退出其他正在运行的 DSH 后重试。
刻意不改的行为¶
会话确实在被使用时,拒绝仍然有效。只有同时满足下列条件才会静默转交:
- 请求里指名了某个 Session(接管空白 Session 的典型路径);
- 错误码为
session/writer-held; - 错误针对的就是该 Session;
- 该 Session 不是当前对话 UI 已选中的那条。
你主动重开正在查看的 Session 而被拒绝,仍会照常报错。非空白、有人正在用的 Session 不会走这条转交路径。
安装与启用¶
DSH 生态里常用「一切皆插件」的方式扩展行为;社区目录在 SkillHub,与 DeepSeek / 幻方无官方从属关系,安装命令以仓库 README 为准。
在 profile 里用插件管理器安装 bundle(会写入依赖并加入 dsh.profile.bundles,二者缺一则插件不生效):
plugin_manager install_bundle target: github:OahzOb/dsh-blank-handoff
管理器也支持仓库 URL、.tgz、注册表包名或本地绝对路径。README 提醒:本地开发若用 link: 安装,在 Windows 上可能因 junction / realpath 导致整个 profile 无法启动;更稳妥的是普通文件拷贝或 file: 依赖并确认 node_modules 里是实体文件而非链接。
客户端逻辑随页面加载。已经打开的标签页在刷新之前仍是未装插件时的行为,改完安装后需要 reload。
典型用法与自检¶
复现问题的场景(README 描述)¶
桌面端常见路径:关掉浏览器标签,再次连接同一类 dsh web 入口,界面曾提示「上一个会话被占用」。装插件并刷新页面后,同类空白接管应不再弹出该句。
相关场景之一来自移动端:dsh-tabs-android 通过 SSH 连其它机器上的 Harness 时也会遇到同类问题。
在浏览器里确认插件是否生效¶
插件在页面上暴露计数器(不依赖 console),刷新后在开发者工具 Console 执行:
globalThis.__dshBlankHandoff // { installed: boolean, handedOff: number }
installed: false:Sessions 服务未就绪或未加载到客户端半边,行为与官方一致。handedOff:静默转交已触发的次数。
适用场景与注意¶
适合谁
- 经常开关
dsh web标签、或多端口多实例并行,又希望复用空白 Session 策略的开发者; - 远程 / 多设备(如 Android SSH 客户端)连同一 Harness 工作区,易被遗留空白 Session + 旧进程租约误伤的用户。
注意
- 插件只处理「空白接管 + writer-held + 非当前选中 Session」这一组合;真实并发占用仍会报错,这是预期设计。
- 安装 bundle 后务必刷新已打开的 Web UI;Host 侧需重启或按你 profile 的加载方式使 patch 生效。
- 星标与版本以仓库为准;
package.json当前版本为 1.0.0,使用前可在 GitHub 核对最新 tag。
结尾¶
dsh-blank-handoff 解决的是 DSH Web 在复用遗留空白 Session 时,因旧连接仍持有写租约而误报「会话被占用」的体验问题;在规则允许时静默建新 Session,保留对真实占用的拒绝。