dsh-session-mover

DSH PLUGIN工具与能力

仓库 yvban/dsh-session-mover

工具与能力 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

dsh-session-mover 是 yvban 维护的 工具与能力 类 DSH 可安装插件, 仓库为 yvban/dsh-session-mover,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-session-mover 是工具与能力类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类工具与能力 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-14 创建于 2026-10-14
README 7.1 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:yvban/dsh-session-mover
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

工具与能力
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

文件读写存储

上游标签

deepseek-harnessdshdsh-pluginsessionworkspace

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在工具与能力场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-session-mover当前 L5 · 运行验证通过 低风险 0 未标注 有
huashu-design 未做沙盒验证 未标注 3.0 万 未标注 有
loopx 未做沙盒验证 未标注 6,233 未标注 无
agy-staff 未做沙盒验证 未标注 870 未标注 有
dsh-startup-screen 未做沙盒验证 未标注 633 未标注 有
minara-skills L4 · 沙盒安装通过 中风险 360 未标注 有

仓库档案

工具与能力
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方yvban仓库 dsh-session-mover · 默认分支 main
分类工具与能力tools
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-14 · 2026-10-14最后推送 2026-10-14
本站收录2026-10-30首次进入本站目录的时间

README 全文

7.1 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-session-mover

> 把 DSH 会话从一个工作区安全搬到另一个工作区,保留可续聊的完整历史。
> Move DSH sessions between workspaces safely — frame-level zstd header rewrite, byte-level verification.

一个 DeepSeek Harness(DSH)插件:在 设置 → 会话迁移 里选目标工作区、选会话、点一下,就把会话搬过去,归属即时更新、无需重启。

为什么需要它

DSH 的会话日志是多帧 zstd,并且有一条硬性约定:第 1 个帧必须只包含 header 那一行,其余每帧独立可解码(带 checksum)。DSH 读取时用 assertZstdHeaderFrame 校验,不满足就抛 SessionPersistenceCorruptionError,而会话枚举会静默跳过这条日志 —— 表现就是:

> 迁移完成后,那个对话在侧边栏里彻底消失(文件其实完好)。

手工改 header 时最容易踩的两个坑:

  1. 把整份日志一次性重压。改完 cwd 后重压全文,会把「头部帧 + 上千个事件帧」塌缩成单个帧,正好触发上面那条校验。
  2. 硬编码日志文件名。文件名带格式世代号:v0 叫 session.jsonl.zstd,vN(N>0) 叫 session.vN.jsonl.zstd。硬编码 v0 名字的实现,在较新的 DSH 上会一个会话都定位不到(实测 0/31)。

本插件按帧处理、按目录里实际存在的世代解析文件名,从根上避开这两个问题。

功能

能力 说明
迁移会话 设置 → 会话迁移:选目标工作区 → 选会话 → 迁移
按标题认会话 列表显示会话标题(与侧边栏同源),并标出它当前属于哪个分组;支持按标题 / 路径 / ID 过滤
帧级改写 只重压第 1 帧(header,写入新 cwd),body 帧字节原样保留
字节级校验 帧数不变 + 每个 body 帧逐字节比对 + 头部 id/cwd 核对;不做全量解压,大日志也不吃内存
整目录备份 迁移前把整个会话目录 + manifest.json 备份到 /storages/session-mover-backup//<时间戳>/
拒绝覆盖 目标工作区已有同 id 会话时直接拒绝,不动原会话
事务性 先写临时文件并校验,通过后才 rename;任何一步失败都会清掉半成品
归属热更新 通过官方实体 API(WorkspaceEntity.attachSession / detachSession)更新分组,无需重启
帧结构修复 已经被"整份重压"搞坏、在界面里消失的会话,可以就地修复(修复前自动备份)

标题从哪来

标题有两个来源,按"快 → 准"的顺序取;取不到只是不显示,绝不影响迁移:

  1. 投影缓存(快):/storages/session_projcache/sessions/.json 里的
    record.rows.title.val。本机实测覆盖 22/31 个会话。缓存只是显示提示,可能滞后于日志。
  2. sessionQuery.readTitleSnapshots()(准):官方公开服务,从日志里折叠标题事件。
    只对缓存里没有标题的会话调用,避免每次打开面板都全量读日志。

分组列来自 workspaceRegistry.list() 的成员关系;没有归属的显示为「未分组」。

安装

# 有 git(标准写法)
dsh plugin --profile <你的 profile> add github:yvban/dsh-session-mover#main

# 没有 git:pnpm 解析 github: 依赖需要 git,可以改用归档 tarball 的 URL
dsh plugin --profile <你的 profile> add https://github.com/yvban/dsh-session-mover/archive/refs/heads/main.tar.gz

<你的 profile> 通常是 web;桌面版是 desktop。如果 PATH 里没有 dsh,用应用自带的 CLI:

& '\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add github:yvban/dsh-session-mover#main

装完重启 DSH(客户端面板在启动时加载),然后打开 设置 → 会话迁移。

使用

  1. 目标工作区:下拉里选一个已注册的工作区。
  2. 选中会话:列表按创建时间倒序,每行显示标题 / 当前分组 / 原始 cwd / 体积 / 会话 ID。
    - 打开中 的会话不能迁移(日志被写句柄占着)。
    - 标了 帧结构异常 的会话先用「修复帧结构」,修完重启 DSH 就会重新出现。
  3. 迁移选中会话:完成后归属即时生效,不用重启。

HTTP 接口(面板用的就是这三个)

方法 路径 说明
GET /plugins/dsh-session-mover/state 工作区清单 + 会话清单(含 readable / live / title / 分组)
POST /plugins/dsh-session-mover/migrate { sessionId, targetWorkspaceId }
POST /plugins/dsh-session-mover/repair { sessionId }

两个 POST 需要 x-dsh-session-mover: session-mover 头,并通过 Host 的本机同源校验;跨站请求会被拒。

已知边界

  • 正在 DSH 里打开的会话不能迁移(日志被写句柄占着),返回 409。请先关掉那个会话。
  • 热更新归属只用到一个非公开方法:workspaceRegistry.indexHeader()。attachSession 会用
    内存里启动时缓存的头部索引校验 cwd,文件搬走后该索引过期,必须先刷新它。这一点无法用公开
    API 替代。若该方法在某版本不存在,插件会自动退回"直写 workspace.json"并提示需要重启;
    再不行就只搬文件,重启后手动把会话拖进目标分组。
  • 迁移不会改动 defaultWorkspaceId,也不会动别的会话。
  • 只用 Node 内置模块,无第三方运行时依赖。

开发与测试

node --check lib/migrate.js
node --check lib/index.js
node --check lib/client.js
node tests/unit.mjs        # 12 项
node tests/host.test.mjs   # 10 项

覆盖内容:

  • 路径编码(projectKey / encodeSegment)与真实 sessions 目录名逐字一致(含中文路径);
  • 合成多帧 fixture 的完整迁移:header 改写、body 帧逐字节不变、旧目录删除、备份与 manifest;
  • 世代感知定位:v0 与 vN 两种命名都能定位并沿用同名迁移;文件名世代与 header.version 不一致时判定为不可读;
  • 单帧塌缩(历史上导致会话消失的那个 bug)的检测与修复,修复后内容零丢失且幂等;
  • no-overwrite、迁移到同工作区的 no-op、日志位置与头部 cwd 不符时拒绝;
  • host 集成测试:用模拟 ctx 真实跑通 apply() → 路由注册 → 鉴权(跨站 403、缺确认头 403)→
    迁移成功(attach/detach/indexHeader 调用与文件落位都有断言)→ 打开中的会话 409 → 修复入口;
  • 标题优先级:缓存命中直接用,缓存缺失才查 sessionQuery,并断言命中过的不会重复查;
  • 归属更新必须被证实:模拟上游 attachSession 静默无效(成员被 canonical-cwd 过滤丢掉)时,
    插件必须报 disk 而不是 hot,并如实说明需要重启——避免"报成功但侧边栏没有";
  • 真实 DSH 会话根目录的只读回归(本机 31/31 可定位、可读;没有真实目录时自动跳过)。

License

MIT

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-session-mover 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:yvban/dsh-session-mover` 即可。

dsh-session-mover 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-session-mover 安全吗?

低风险。

dsh-session-mover 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-session-mover 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

3 条
不同作者的仓库分开列,请确认你要装的是哪一个
工具与能力
按星标排序,可作替代方案

huashu-design

huashu-design

在 DeepSeek Harness 里说一句话,就能拿回可交付的设计:网页、App 原型、可编辑 PPTX、动画与信息图,自带 84 种风

未标注验证等级 3.0 万 星

loopx

loopx

LoopX 是面向长周期 Agent 的本地优先控制平面,作为 DSH plugin 为 DeepSeek Harness 提供持久目标、证

未标注验证等级 6,233 星

agy-staff

agy-staff

把 Google Antigravity CLI 作为快速 Gemini 员工接入 DSH,提供子代理侧边栏、编排模式与多种角色技能。

未标注验证等级 870 星

dsh-startup-screen

dsh-startup-screen

DeepSeek Harness 的启动界面与启动动画插件。

未标注验证等级 633 星

dsh-blender-plugin

dsh-blender-plugin

让 AI 模型通过直连 TCP 通道实时驱动 Blender 的 DSH plugin:15 个工具覆盖视口取帧、任意角度渲染、内循环搜索、

未标注验证等级 211 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。