liangmianya/dsh-synapse
liangmianya/dsh-synapseDeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
拖拽跨工作区真迁移会话,找回失联与未记账会话,文件夹改名后一键原地重定向工作区;ID 与历史原样保留,步步备份回滚。
当前版本:2.4.1。Desktop 验收记录。
v2.4.0 会将运行中或仍驻留内存的会话加入持久化等待队列。DSH 暂无安全的写入句柄重绑定接口,因此需等会话卸载或重启后才会迁移,单纯变为空闲不足以释放句柄。迁移会把会话当前工作目录同步到目标工作区,保留已有目录变更历史,并在需要时追加目标目录记录。详见Desktop 验收记录和验证记录与检验方法。
[!IMPORTANT]
非官方项目,由社区成员独立开发和维护。
在侧边栏把会话拖到另一个工作区——真迁移原始档案,而不是复制
🌏 中文 · English
DeepSeek Harness 侧边栏可以拖拽排序同一工作区内的会话,但拖到另一个工作区上会被静默忽略。本插件补上跨工作区迁移:
mover_list_sessions / mover_move_session / mover_repair_sessions / mover_doctor / mover_create_workspace / mover_rename_workspace 六个模型可调用工具——在对话里说「把这个会话挪到某组」即可触发与面板完全相同的备份回滚管线,也能新建、改名工作区;迁移、修复与改名执行前经宿主审批弹窗确认(改名在完全访问模式下免确认),未装 dsh-tools 的宿主自动停用dsh plugin --profile web add "github:PianoPrince/dsh-workspace-mover"
# 重启 dsh web 一次零构建授权:纯 JavaScript 源码即产物(无 TypeScript、无构建步骤)。从 GitHub 安装时不需要 allowBuilds 构建授权。npm 渠道
dsh plugin --profile web add dsh-workspace-mover本地开发安装
dsh plugin --profile web add "link:C:/path/to/dsh-workspace-mover"桌面版安装(DSH v0.2 桌面客户端)
dsh-workspace-mover 安装并启用;桌面 profile 由 Electron 应用专属管理(独立 CLI 不接受 --profile desktop),请以应用内插件页为准。常见问题
现象 · 原因与解决 拖了但没反应 · 请在分组视图把会话行拖到工作区标题行;「扁平列表」视图没有标题行,本插件在该视图不激活 提示会话正在运行中 · 等该会话回合结束再拖即可 移动失败的 toast · 操作前有自动备份、失败会回滚;按提示处理后重试。详细原因见宿主日志中的 MOVE FAILED 移动成功但侧边栏没归位 · 刷新页面即可 有些会话从侧边栏不见了 · 打开 设置 → 会话救援 自动扫描并找回 升级 DSH 0.2 后,旧会话切换模型报 Unknown agent preset · 0.2 不再读取 0.1.x 旧格式的自定义预设目录,需迁移为声明行——与插件无关,完整步骤见 docs/dsh-0.2-preset-migration.md
以下均为真实界面实拍(点击可放大)。
· 把空闲会话行拖到目标工作区标题行,出现虚线高亮 · 确认框亮出目标工作区路径,一键移动 · 设置 → 会话救援:一键找回失联与未记账的会话 · ·
Ctrl+点击选中多个会话(当前打开的会话自动带上),左下角亮出计数徽章;拖到目标工作区标题行即整批移动,Esc 清空 组标题「⋯」菜单里的「整组迁移…」:整组搬移,迁入后可删除已空的源分组(分组合并)
以下为一次真实搬家的完整记录:把 Test1 文件夹改名为 Test2 后,用向导原地修复工作区。
· 改名前:`Test1` 分组正常工作 · 改名后侧边栏仍显示旧分组(磁盘上文件夹已不在) · 打开设置 → 会话修复:「工作区体检」把分组标为「路径失效」,填入新路径 · 确认框亮出起讫路径与将要迁移的会话数 · 搬家完成:分组原地更名为 Test2,会话与历史原样保留 · ·
运行中的会话会被拒绝;移动失败会自动回滚并在 toast 中说明原因。
需要审批的工具在审批服务缺失时会拒绝执行,可改用设置中的会话修复面板。
dsh-tools 的宿主(web 与桌面版默认)自动注册六个模型工具:会话清单(只读)、迁移、一键修复、自检(只读)、新建工作区、工作区改名;danger-full-access)时免确认;与其他工作区重名时拒绝;dsh-tools 时自动停用,不影响面板与拖拽。本插件面向使用者只承诺以下接入原则(实现细节见 docs/ARCHITECTURE.md):
设计上按「与生态共生」标准实现,冲突面很小:通信与样式使用独立命名空间;不改写官方安装文件;会话归属写入使用宿主正式接口。
同装插件类目 · 兼容性 · 说明 官方内置插件(0.2 起的 8 个:终端 / 网页搜索 / 子智能体等) · ✅ 无冲突 · 功能面不相交;Agent 工具经官方 dsh-tools 注册表共存,本插件工具名以 mover_ 前缀隔离 侧边栏增强 / better-sidebar / 终端 / 费用统计 / 记忆 / 导出分享 · ✅ 无冲突 · 面板与数据面完全不同 归档管理类插件 · ✅ 兼容 · 双方都使用官方归档数据,数据层一致(面板功能可能有些重复) 回收站 / 会话删除类插件 · ✅ 数据隔离 · 各插件维护独立的回收站目录,互不读写;建议只启用一家的删除入口,避免操作混淆 排序 / 置顶类插件 · ⚠️ 基本兼容 · 移动后会精确重排「最近更新」;与置顶/排序插件并存通常无碍,仅各自面板展示顺序可能不完全一致 重画侧边栏的插件(自绘工作区树) · ⚠️ 降级共存 · 对方若替换官方侧边栏结构,本插件可能暂时无法识别会话行——表现为功能不触发,不会损坏数据 其他会话移动器 · ❌ 建议二选一 · 同类插件可能重复处理同一次拖拽;本插件已覆盖移动 / 批量 / 合并 / 归位 / 归档恢复
当前 DSH 未公开原始档案路径或原始字节迁移接口,插件使用宿主存储根目录和经过检查的 JSONL 文件布局进行迁移,因此显示 filesystem-fallback 警告。它表示兼容性降级,不代表迁移失败;请同时查看“存储布局”检查结果。宿主升级后应重新自检,布局未知或损坏时不要继续迁移。仅提供官方会话 handle、没有物理路径的宿主不支持物理迁移。
恢复快照独立于主会话档案;复用的快照保留首次保存时的路径,默认恢复到该路径,也可明确选择其他工作区。历史记录不意味着对应快照会永久保留,超出保留上限或手动清理后,该快照可能不存在。
插件版本 · 已验证 DeepSeek Harness · Node · 备注 2.4.0 · 0.2.1-rc.2 Desktop · ≥22 · 用户确认排队、迁移前后继续发送、两次重启、目标工作目录和工作区工具审批;自动滚动仅自动检查 2.3.0 · 0.2.0-rc.2 Desktop(用户验证部分场景) · ≥22 · 空闲会话迁移与快照复用已反馈通过;Web、队列进程重启和完整 runtime smoke 待验证 2.2.0 · 0.1.5-rc.1、0.1.5-rc.2、`0.2.0 桌面版`(0.2.0-rc.2 内核) · ≥22 · 存储布局自检、Agent 工具与桌面版实测;宿主缺 dsh-tools 时工具自动停用 2.0.3 · 0.1.5-rc.1、0.1.5-rc.2 · ≥22 · 真迁移 / 批量 / 救援 / 回收站 / 备份;首次发布 npm — · 0.2.0 web(0.2.0-rc.2) · ≥22 · 与桌面版同内核,已按同一代码路径适配;web 启动场景待回归
以下“本地通过”指仓库沙盒 fixture,不代表官方 DSH runtime 逐格式实测。2.4.0 已在 Desktop 0.2.1-rc.2 完成排队、重启迁移、继续发送和工作区工具审批验收;下表逐格式的官方 runtime 状态仍待单独验收。自动滚动通过自动 DOM 检查,人工验收已豁免。详见Desktop 验收记录和格式兼容报告。
档案布局 · 本地沙盒 · 官方 DSH runtime v3 / v4 Zstd · 迁移与撤回通过;同目录选择最高代际并保留旧文件 · 待验收 legacy / v3 plain JSONL · 迁移与撤回通过,不升级代际 · 待验收 混合压缩编码 · 明确拒绝 · 待验收 文件名与 header 代际不符 · header 声明代际时,迁移前拒绝且字节不变 · 待验收
package.json → engines.dsh ≥ 0.1.5-rc.1,engines.node ≥ 22(与 CI 矩阵 Node 22/24 一致)。1.45.1。不修改 DSH 源码,仅通过官方扩展点接入。npm run check(语法检查 + 测试 + npm pack --dry-run);CI 在 ubuntu / windows / macos × Node 22/24 上执行同等步骤。$DSH_HOME.agent-presets),旧会话恢复会报 Unknown agent preset(与本插件无关,属宿主变更)。迁移步骤与实测记录见 docs/dsh-0.2-preset-migration.md。部分高级操作依赖较新的 DSH 能力;不支持时界面会明确提示,而不是静默失败。
每一次迁移都走同一条带安全边界的管线:字节级备份先行 → 逐步回滚 → 迁移后校验 → 恢复账本兜底。任何一步失败都会回到移动前的状态;连回滚都失败的极端情况会写入持久化恢复记录并在救援面板标红,等待人工确认——数据永不消失。
Never-does(绝不):
具体承诺:
cwd 变化)复用既有快照,搬运落地后再核对会话身份与路径,不符则整体回退;失败路径优先保数据,不静默丢会话。
并非「任何错误都能自动恢复」:极端情况下会要求人工处理,但数据会留在原处。
schemastery(插件目录下不可解析,静态引入会打断启动)。策略改用环境变量配置,见下表;mover_doctor 会报告宿主服务与存储布局的降级情况;registry.unarchiveSession、改名 entity.setTitle),宿主没有时自动回退到等价实现。回退是静默的(功能不变),所以 mover.status.capabilities 会同时给出 unarchiveApi / setTitleApi 能力位,degradedFeatures 里也会列出 unarchive-official-api / set-title-official-api——真机上一眼能看出走的是哪条路。storageAdapter 为 official-handle,诊断与预览仍可用,物理移动会明确提示不支持;有物理根目录时标记为 filesystem-fallback,并由 mover_doctor 解释原因。策略 · 默认 · 环境变量 每个会话保留的物理快照数 · 20 · DSH_WORKSPACE_MOVER_BACKUP_KEEP 移动历史保留条数 · 100 · DSH_WORKSPACE_MOVER_HISTORY_LIMIT 单批移动 / 修复上限 · 50 · DSH_WORKSPACE_MOVER_BATCH_LIMIT 单个工作区搬家上限 · 200 · DSH_WORKSPACE_MOVER_REPOINT_LIMIT 救援扫描解析上限 · 400 · DSH_WORKSPACE_MOVER_SCAN_LIMIT 「清理 N 天前数据」默认天数 · 30 · DSH_WORKSPACE_MOVER_CLEANUP_DAYS
取值非法或越界时回退默认值——配置写错不会让功能失效。
mover_create_workspace 登记已有目录;mover_rename_workspace 只修改显示名称,并按宿主权限请求审批。0.2.1-rc.2 的排队、继续发送、两次重启、目标工作目录及工作区工具审批通过;自动滚动仅完成人工豁免后的自动 DOM 检查。详见Desktop 验收记录和CHANGELOG。