🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话跨区迁移 zsenpro/DSH-Transpose-Plugin

DeepSeek Harness
zsenpro3 天前有提交已提供中文文档扫描:含敏感能力

长按拖动会话,把对话连同历史搬到另一个工作区

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zsenpro/DSH-Transpose-Plugin
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 3 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 33 处,展示前 28 条)
  • 写入本地文件
    index.js:29
    await appendFile(TRACE_PATH, `${new Date().toISOString()} ${line}\n`)
  • 读取本地文件
    index.js:220
    if (!inPlace && existsSync(destinationDir)) {
  • 写入本地文件
    index.js:226
    await writeFile(located.path, bytes)
  • 写入本地文件
    index.js:230
    await mkdir(dirname(destinationDir), { recursive: true })
  • 写入本地文件
    index.js:231
    await mkdir(destinationDir)
  • 写入本地文件
    index.js:233
    await writeFile(destinationFile, bytes)
  • 删除本地文件递归
    index.js:235
    await rm(dirname(located.path), { recursive: true, force: true })
  • 删除本地文件递归
    index.js:239
    await rm(destinationDir, { recursive: true, force: true }).catch(() => {})
  • 写入本地文件
    index.js:253
    await writeFile(relocated.to, bytes)
  • 读取本地文件
    index.js:257
    if (existsSync(originalDir)) {
  • 删除本地文件递归
    index.js:262
    await rm(dirname(relocated.to), { recursive: true, force: true })
  • 读取本地文件
    index.js:277
    const projects = await readdir(root, { withFileTypes: true }).catch(() => [])
  • 读取本地文件
    index.js:292
    const files = (await readdir(folder, { withFileTypes: true }))
  • 读取本地文件
    index.js:306
    const raw = await readFile(path)
  • 读取本地文件
    index.js:320
    const raw = await readFile(path)
  • 发起网络请求
    client.js:261
    const response = await fetch(apiUrl('move'), {
  • 删除本地文件递归
    verify.js:30
    await rm(WORK, { recursive: true, force: true })
  • 写入本地文件
    verify.js:31
    await mkdir(ROOT, { recursive: true })
  • 写入本地文件
    verify.js:43
    await mkdir(join(ROOT, sourceProject), { recursive: true })
  • 读取本地文件
    verify.js:46
    const before = await readFile(join(staged, picked.file))
  • 读取本地文件
    verify.js:62
    const after = await readFile(relocated.to)
  • 写入本地文件
    verify.js:87
    await mkdir(duplicate, { recursive: true })
  • 删除本地文件递归
    verify.js:91
    await rm(join(ROOT, '--D-ELSEWHERE--'), { recursive: true, force: true })
  • 读取本地文件
    verify.js:95
    const restored = await readFile(join(staged, picked.file))
  • 删除本地文件递归
    verify.js:111
    await rm(WORK, { recursive: true, force: true })
  • 读取本地文件
    verify.js:117
    const projects = await readdir(LIVE_ROOT, { withFileTypes: true }).catch(() => [])
  • 读取本地文件
    verify.js:121
    const sessions = await readdir(projectDir, { withFileTypes: true }).catch(() => [])
  • 读取本地文件
    verify.js:125
    const files = await readdir(sessionDirPath, { withFileTypes: true }).catch(() => [])
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

为不同工作区之间的项目提供更方便的转移

README

由 DeepSeek 最新模型翻译生成
DSH Transpose 插件 把一段对话从一个工作区拖到另一个工作区,历史一起带走。DeepSeek Harness 原生侧栏只支持工作区内排序,跨工作区没有入口。 包名 @yg/dsh-session-mover,作为 DSH 插件(Cordis bundle)安装。 用法 侧栏会话行上有两种拖拽,按发生顺序分流: - 直接拖 → 原生排序。按住后鼠标一动就走浏览器自己的 HTML5 拖放,和没装插件时一样,会话在工作区内换位置。 - 按住不动 220ms 再拖 → 跨工作区搬家。长按成立后才接管这次手势,右侧浮出目标工作区列表,继续拖动并松手即完成搬迁。按 Esc 取消。 判定细节:按住不动 220ms 才算长按;这段时间内位移超过 12px 就判定为普通拖动,交回原生排序。 拖起后有两种投放目标:右侧浮层的卡片,或侧栏里的工作区行。成功后底部提示「已移动到 <工作区名>」,侧栏立刻刷新。只有一个工作区时不显示浮层。 原理 一段对话属于哪个工作区,由会话日志头部的 cwd 决定。移动一次要改三处,缺一处会话就会失联: 1. 把 <sessions>/<旧 project 目录>/<id>/session.vN.jsonl.zstd 搬到目标工作区对应的目录; 2. 重写日志首帧里的 cwd。
展开完整文档(README 剩余 1 节)
DSH Transpose 插件

把一段对话从一个工作区拖到另一个工作区,历史一起带走。DeepSeek Harness 原生侧栏只支持工作区内排序,跨工作区没有入口。

包名 @yg/dsh-session-mover,作为 DSH 插件(Cordis bundle)安装。

用法

侧栏会话行上有两种拖拽,按发生顺序分流:

- 直接拖 → 原生排序。按住后鼠标一动就走浏览器自己的 HTML5 拖放,和没装插件时一样,会话在工作区内换位置。
- 按住不动 220ms 再拖 → 跨工作区搬家。长按成立后才接管这次手势,右侧浮出目标工作区列表,继续拖动并松手即完成搬迁。按 Esc 取消。

判定细节:按住不动 220ms 才算长按;这段时间内位移超过 12px 就判定为普通拖动,交回原生排序。

拖起后有两种投放目标:右侧浮层的卡片,或侧栏里的工作区行。成功后底部提示「已移动到 <工作区名>」,侧栏立刻刷新。只有一个工作区时不显示浮层。

原理

一段对话属于哪个工作区,由会话日志头部的 cwd 决定。移动一次要改三处,缺一处会话就会失联:

1. 把 <sessions>/<旧 project 目录>/<id>/session.vN.jsonl.zstd 搬到目标工作区对应的目录;
2. 重写日志首帧里的 cwd。只有首帧是 header,后面每一帧都是原始事件字节,直接拼接,不重新压缩;
3. 在 workspace registry 里把会话从旧工作区摘掉、挂到新工作区,并同步 registry 的 cwd 索引。

任何一步失败都会把日志搬回原处、把归属还原(包括把会话挂回原工作区,避免变成游离状态),接口返回 attach-rejected 并附回滚结果。

已知限制

当前打开的会话,header 在内存里是冻结的。 文件、目录、工作区归属都会被正确搬走,侧栏刷新后也会显示在新工作区下;但这个进程里该会话记录的工作目录仍是旧值,直到重启 DSH 才切换。接口返回值里的 liveHeader: "frozen" 就是这件事。

没在当前进程打开过的会话不受影响,文件和 cwd 完全一致。

安装

package.json 的 name 是 @yg/dsh-session-mover,cordis.patch.yml 插入的条目 id 是 yg-session-mover。

在 DSH 里让 plugin_manager 执行 install_bundle,target 指向本目录即可。安装后:

- 宿主半提供 POST /yg-session-mover/api/move(参数 { sessionId, targetWorkspaceId })与 /api/peek;
- 客户端半注册 shell.overlay 上的浮层;
- 每次调用追加一行到 ~/.dsh/yg-session-mover.log。

改完客户端半必须让页面重新加载:桌面版没有刷新菜单,关掉窗口重新打开才会拉到新的 __DSH_BOOT__ 图。

自检

verify.js 复制一份真实日志到临时目录,跑一遍搬迁、回滚、帧完整性、重复 id 拒绝,不碰真实数据。

node verify.js

许可证

MIT,见 LICENSE。
预览分享卡片长什么样 ↓zsenpro/DSH-Transpose-Plugin
分享 · DeepSeek Harness Hub
zsenpro/DSH-Transpose-Plugin

长按拖动会话,把对话连同历史搬到另一个工作区

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部