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 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →数据截至 2026/10/11·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
FurryBear2025/dsh-session-drag-move
DSH 左侧栏会话跨工作区拖拽:把会话拖到别的工作区,真正改写会话日志 header 的 cwd…
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 272,060已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,885已汉化DSH
71.2
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。