READMESource: main@b9936b79
dsh-plugin-session-move
给 DeepSeek Harness 的侧栏会话菜单加一项 「移动到工作区…」:把对话连同磁盘上的会话日志、工作区归属和工作目录一起迁移到另一个工作区。
非官方社区插件,与 DeepSeek 官方无关。
安装
在侧栏 Plugins → Add plugin 里填:
github:PanChengN/dsh-plugin-session-move
点 Enable now。主机半立即生效;如果侧栏菜单里没有出现这一项,刷新一次页面(客户端半需要重新加载)。
- 升级:按新版本重装,如
github:PanChengN/dsh-plugin-session-move#v1.0.0。 - 本地路径安装(
/绝对路径/dsh-plugin-session-move)只建议开发时用:profile 会依赖该目录,卸载前要先在 GUI 里移除。 - 卸载:Plugins 页面 Disable / Remove。
用法
- 侧栏对话右侧 ⋯ → 移动到工作区… → 选目标工作区 → 移动。
- 对话会立刻在新工作区下重新分组;之后再打开时,工作目录就是目标目录。如果它正开着,保持打开并直接在新目录继续。
- 对话正在运行(或等待审批 / 回答)时不能移动,等这一轮结束再试。
也可以让 Agent 调用工具:
move_session_to_workspace({ sessionId, workspace }) // workspace 可填 id / 工作区标题 / 绝对路径
一次移动改了什么
工作区归属由会话日志 header 里的 cwd 决定,所以不是只改侧栏列表:
- 会话目录搬到目标工作区的 project 目录(先暂存,再原子改名;崩溃后可恢复);
- 只改写日志 header 所在的 Zstandard 帧里的
cwd,已提交事件的字节原样保留; - 工作区注册表 detach / attach,侧栏立即更新,重启后仍然一致;
- 如果对话正开着:同步改写内存里的 header 与持久化写句柄,再
workingDirectory.set到新目录,后续追加与模型上下文都跟着走; - 如果对话以前用
cd换过目录,再补一条working-directory/change;旧格式日志跳过,等它下次打开时由后端迁移。
边界
- 目标工作区目录必须存在;同工作区是幂等空操作;目标位置已有同名会话目录时不改动。
- 没有「撤销」按钮,移回原工作区即可。
- 依赖宿主内部结构(工作区注册表、JSONL 持久化的 header 与目录约定)。宿主升级后若结构变化,插件会以
runtime/incompatible/session/writer-unavailable明确失败,而不是写坏数据。
主机端点
POST /api/dsh-session-move
content-type: application/json
{ "sessionId": "session-…", "workspaceId": "…", "dryRun": false }
dryRun: true 只校验并返回源 / 目标路径、live、writerFound。错误码见 index.js。
开发
仓库根目录就是插件目录,纯 JS、无构建步骤。改动后重装或重启 DSH 生效,客户端半改动需刷新页面。
许可
MIT © 2026 NIUpc
No comments yet. Be the first to write one.