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

会话拖拽迁移 FurryBear2025/dsh-session-drag-move

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

DSH 左侧栏会话跨工作区拖拽:把会话拖到别的工作区,真正改写会话日志 header 的 cwd…

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · browser
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/11·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 22 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 13 条)
  • 发起网络请求
    lib/client.js:413
    const response = await fetch(API + method, {
  • 读取本地文件
    lib/session-log.js:113
    await access(p, constants.F_OK)
  • 读取本地文件
    lib/session-log.js:123
    return (await stat(p)).isDirectory()
  • 读取本地文件
    lib/session-log.js:144
    entries = await readdir(root, { withFileTypes: true })
  • 读取本地文件
    lib/session-log.js:170
    const entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    lib/session-log.js:243
    entries = await readdir(root, { withFileTypes: true })
  • 读取本地文件
    lib/session-log.js:270
    projects = await readdir(root, { withFileTypes: true })
  • 写入本地文件
    lib/session-log.js:436
    if (!buf.equals(content)) await writeFile(log.path, content)
  • 写入本地文件
    lib/session-log.js:457
    await mkdir(to, { recursive: true })
  • 写入本地文件
    lib/session-log.js:458
    await writeFile(join(to, name), content, { flag: 'wx' })
  • 写入本地文件
    lib/session-log.js:466
    await rename(join(dir, entry.name), join(to, entry.name))
  • 写入本地文件
    lib/session-log.js:472
    await mkdir(backupRoot, { recursive: true })
  • 写入本地文件
    lib/session-log.js:474
    await rename(dir, backup)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 跨工作区拖拽会话
  • 改写日志cwd
  • 迁移日志目录
展开完整介绍(74 字)↓

DSH 左侧栏会话跨工作区拖拽:把会话拖到别的工作区,真正改写会话日志 header 的 cwd 并把日志目录迁到目标项目下,改变归属而不只是改名。

README

由 DeepSeek 最新模型翻译生成
dsh-session-drag-move 左侧栏「工作区」面板里,把会话拖到别的工作区——真正改归属,不只是改个名字分组。 官方只支持同一工作区内部拖排序;跨工作区拖拽是完全不响应的(onDrop 只在 drag.accountKey === group.key 时生效,insertSessionBefore 也拒绝不属于本工作区的会话)。 这个插件只接管这段本来就是空的行为,同工作区拖拽照旧交给官方。 它到底做了什么 DSH 里会话的归属是派生的,不是存出来的: 工作区拥有「会话日志 header 的 cwd 等于本工作区路径」的那些会话 ~/.dsh/storages/workspace.json 里的 sessionIds 只是顺序账本,path 不匹配的 id 会在下次写入时被剪掉。所以换工作区必须改会话日志 header 里的 cwd。 会话日志是独立 Zstandard 帧的拼接,第一帧就是 header: <root>/--<projectKey(cwd)>--/<sessionId>/session.v4.jsonl.zstd └ 项目目录由 cwd 决定 └ 首帧 = header,其后每帧 = 一个追加批次 帧彼此独立,所以移动 = 重新压缩新的第一帧 + 原文件第二个 magic 之后的字节原样复制,事件数据一个字节都不动。
展开完整文档(README 剩余 1 节)
dsh-session-drag-move

左侧栏「工作区」面板里,把会话拖到别的工作区——真正改归属,不只是改个名字分组。

官方只支持同一工作区内部拖排序;跨工作区拖拽是完全不响应的(onDrop 只在 drag.accountKey === group.key 时生效,insertSessionBefore 也拒绝不属于本工作区的会话)。
这个插件只接管这段本来就是空的行为,同工作区拖拽照旧交给官方。

它到底做了什么

DSH 里会话的归属是派生的,不是存出来的:

工作区拥有「会话日志 header 的 cwd 等于本工作区路径」的那些会话

~/.dsh/storages/workspace.json 里的 sessionIds 只是顺序账本,path 不匹配的 id 会在下次写入时被剪掉。所以换工作区必须改会话日志 header 里的 cwd。

会话日志是独立 Zstandard 帧的拼接,第一帧就是 header:

<root>/--<projectKey(cwd)>--/<sessionId>/session.v4.jsonl.zstd
└ 项目目录由 cwd 决定 └ 首帧 = header,其后每帧 = 一个追加批次

帧彼此独立,所以移动 = 重新压缩新的第一帧 + 原文件第二个 magic 之后的字节原样复制,事件数据一个字节都不动。写完再自行解压校验一遍,然后把旧目录移到备份区。

最后同步正在运行的进程(否则要重启才生效):更新 registry 的 header 缓存与 session-path 索引,再走官方的 attachSession / insertSessionBefore / detachSession。
attachSession 会重新读 header 并校验 cwd,它成功就证明存储层改动真的落盘了。

安装

1. 放进 profile 的 node_modules Copy-Item 'E:\dsh插件开发' "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-session-drag-move" -Recurse -Force

2. 在 profile 的 cordis.patch.yml 里加一行
- insert:
- id: session-drag-move
name: 'dsh-session-drag-move'

3. 重启 DSH

也可以用官方命令行:

dsh plugin --profile desktop add dsh-session-drag-move

配置(host 半边)

| 字段 | 默认 | 含义 |
| root | ~/.dsh/sessions | 会话存储根目录 |
| backupRoot | <root>/../session-drag-move-backup | 移动前的会话目录停放处 |
| allowRemote | false | 默认只接受 loopback 请求;局域网部署需显式打开 |

使用

- 拖会话行到另一个工作区的头行 → 归入该工作区(追加到末尾)
- 拖会话行到另一个工作区的某个会话行上半 → 插到它前面;下半 → 插到它后面
- 同工作区内拖拽 → 不拦截,仍是官方排序
- 运行中 / 当前会话会被拒绝

拖拽时源行会变淡,目标行出现蓝色虚线框。松手后底部显示迁移进度条:先按阶段推进(查找目录 → 读取日志 → 重写 cwd → 搬运文件 → 备份 → 同步账本),搬运大量日志世代或分支会话时显示 已处理 n / 总数,完成后变绿并自动消失,失败变红并显示原因。

侧栏适配

客户端按运行时 DOM 契约识别行,而不是按源码里的类名:

| 信号 | 用途 |
| [data-row-key="session:<id>"] | 会话行识别 + 会话 id(主契约) |
| [data-row-key="workspace:<id>"] | 工作区头识别 + 工作区 id(主契约) |
| 类名 *_sessionRow 后缀 | 无 data-row-key 时的兜底 |
| [draggable="true"] / [role="treeitem"] | 最后的形状兜底 |

注意 dsh-better-workspace 等第三方侧栏用 CSS Modules 构建,源码里的可读类名(bw-session-row)在产物中会被哈希成 <hash>_sessionRow,因此按源码类名匹配一定失败;本插件匹配后缀与属性,跨构建稳定。目标工作区由几何位置(该行上方最近的工作区头)判定。
识别失败时会向 console 打印 [sm] 诊断日志(window.__smQuiet = true 可静默)。

迁移进度接口

长迁移在后台作业中执行,避免长时间无响应:

POST /session-drag-move/api/move → { jobId, started: true }
POST /session-drag-move/api/progress → { state, phase, detail, result, error }

move 传 wait: true 时同步返回最终结果(脚本/测试用)。phase 取值: resolve scan index read rewrite write-main move-extras backup ledger branches done;detail 在可量化阶段带 { done, total, current }。

安全边界

- 只重写第一帧;尾部原样复制;写完重新解压自检(id + cwd + 能解出 session header)
- 旧目录移出 sessions 根(留着会被扫到重复 id),停在备份区,可回滚
- 目标文件已存在则整体拒绝,不做半截写入
- 跨区移动前检查会话是否在运行

已知限制

- 依赖 workspaceRegistry 的内部字段(headers / sessionPaths / host.rememberSessionPath)同步运行状态。这些是普通字段不是 #private,能用,但版本敏感——所有访问都做了
- feature-probe,探测不到会返回结构化错误,不会抛栈。
- 侧栏适配跟随 dsh-better-workspace 的 data-row-key 契约,另留了类名/形状兜底。若某个侧栏把这套信号全部换掉,插件会静默不接管(不影响原生拖拽),此时用 ?smdiag=1 或默认的 [sm] 日志定位。
- 投影缓存 ~/.dsh/storages/session_projcache/sessions/<id>.json 里的 record.identity.cwd 目前未改写(可重建缓存,不影响归属)。

开发

$node = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\node\bin\node.exe"
& $node --test tests\smoke.mjs

测试覆盖路径编码(与本机磁盘目录逐字比对)、header 帧定位与校验、真实会话日志的 cwd 改写 round-trip(含尾部字节完全一致断言)。

许可证

MIT
预览分享卡片长什么样 ↓FurryBear2025/dsh-session-drag-move
分享 · DeepSeek Harness Hub
FurryBear2025/dsh-session-drag-move

DSH 左侧栏会话跨工作区拖拽:把会话拖到别的工作区,真正改写会话日志 header 的 cwd…

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