前言¶
DeepSeek Harness (DSH) 的设计理念是「一切皆插件」。在使用过程中,经常会遇到会话被移动过、或者在工作区目录尚未创建时就已建立会话的情况。此时,这些会话会被标记为「未分组」,且在 WorkspaceRegistry 初始化后不再被自动重新收养,从而永久停留在未分组列表中。
dsh-session-reattach 旨在填补这个空白。它不改变会话文件本身,仅通过校验会话的当前工作目录(cwd),将其归属记录重新写入正确的工作区。
插件定位¶
这是一款 DSH 宿主插件,用于解决历史会话的「归位」问题。它将游离的会话按 cwd 归位到匹配的工作区分组中。
核心功能¶
- 只改归属记录:插件仅修改
workspace.json中的归属记录,不触碰session.l.zstd等会话文件本身。 - 默认 dry-run:为了安全,默认只进行校验和报告,不执行写入,直到显式开启写入模式。
- 支持多种入口:既支持侧边栏的拖拽操作,也支持命令行输入。
- 零运行时依赖:不依赖任何 DSH 内部包或第三方库。
安装与启用¶
该插件仅支持 web profile。
- 执行安装命令:
dsh plugin --profile web add dsh-session-reattach
- 安装完成后,必须重启
dsh web。宿主插件在启动时装配,安装后不重启不会生效。
使用方式¶
命令行¶
插件提供三个命令入口,默认处于 dry-run 状态:
/reattach:仅报告将归位哪些会话、哪些会话无法归位及原因,不写入。/reattach apply:执行归位写入操作。/reattach apply subagents:在执行归位的同时,也处理子代理会话(默认跳过子代理)。
拖拽操作¶
在侧边栏展开「未分组」,按住某个会话行开始拖动。只有 cwd 与工作区目录完全一致的分组会显示虚线框,其余分组显示禁止光标,拖拽进去松手即可归位。
归位判定规则¶
插件使用 fs.realpath 将会话的 cwd 与工作区路径归一化后进行比较。只有路径完全一致才会进行归属。归位前会先从其他工作区清除该会话的旧槽位,避免双归属错误。
注意事项¶
- 默认安全策略:所有归位操作默认不写入,必须显式传入
false或使用apply参数。 - Web Profile 限制:仅支持 web profile,安装后必须重启
dsh web。 - 路径一致性:归位的前提是
cwd存在且有效。如果目录被删除、重命名或不可访问,会话将被跳过。 - 子代理处理:默认跳过子代理会话,除非显式指定
apply subagents。 - 文件安全:插件不修改会话文件本身,只修改归属记录,不会造成数据丢失或内容篡改。
总结¶
dsh-session-reattach 是一个轻量级的修复工具,专门处理 DSH 中因历史原因导致的会话归属错位。通过拖拽或命令行,可以快速将游离会话归位到正确的工作区,保持侧边栏结构的整洁。