dsh-workspace-mover 2.4.0 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +22 -7
- package/README_EN.md +21 -6
- package/client/client.js +2678 -2599
- package/docs/compatibility/immediate-migration-2026-10-26.md +68 -0
- package/lib/index.js +54 -24
- package/lib/lifecycle.js +104 -0
- package/package.json +6 -5
- package/test/client-dom.test.mjs +96 -4
- package/test/e2e-sandbox.test.mjs +46 -1
- package/test/live-migration.test.mjs +183 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.2] - 2026-10-26
|
|
4
|
+
|
|
5
|
+
- Reopen the still-selected removed conversation through host navigation after migration or rollback, waiting for the old view's retained references to release before reopening. Do not change a later user selection. Replace the page-refresh hint with a fully-quit-and-restart hint for Desktop.
|
|
6
|
+
- Read titles from the live cache and current per-record checkpoints before legacy aggregate caches, fixing unnamed entries in repair/archive/preview/backup lists.
|
|
7
|
+
- Tracked idle sessions now release their public Agent lifecycle, physically migrate and reload through the host controller without a pending queue or restart. New requests are refused while the lifecycle is draining.
|
|
8
|
+
- Dragging a running session offers cancellation or explicit stop-and-move. The backend rechecks consent; it never stops a newly running task based on a stale idle preview.
|
|
9
|
+
- Fix #10: use the projection table get/put contract and align title-cache identity before publishing target membership. Failed attachment restores the source checkpoint identity.
|
|
10
|
+
- Restart once after installation/hot update to capture lifecycle handles. Untracked or unsupported live writers remain protected. Existing queue APIs remain compatible.
|
|
11
|
+
- Validation: user accepted candidate 2.4.2-rc.4 on DSH Desktop 0.2.1-rc.2: immediate movement, title preservation, continued replies without switching views, cancel while running, explicit stop-and-move, and persistence/continued replies after restart. Windows local checks: 327 passed, 2 optional host tests skipped; installed-host checks: all 4 passed. Web and the reporter's DSH 0.2.0-rc.2 environment remain unverified.
|
|
12
|
+
|
|
13
|
+
## [2.4.1] - 2026-10-22
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Synchronize version metadata and documentation badges; runtime behavior is unchanged.
|
|
18
|
+
|
|
3
19
|
## [2.4.0] - 2026-10-22
|
|
4
20
|
|
|
5
21
|
### Added
|
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# dsh-workspace-mover
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
当前版本:**2.4.2**。已通过 DSH Desktop `0.2.1-rc.2` 人工验收,详见[即时迁移与标题修复验收记录](docs/compatibility/immediate-migration-2026-10-26.md)。
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
支持即时迁移的会话:空闲时释放写入句柄、实际搬移并重新加载;运行中可取消,或明确选择「停止任务并迁移」。迁移保留标题和历史。安装或热更新后请彻底重启 DSH 一次,以接入会话生命周期;无法安全释放的会话会明确阻止拖动迁移。旧队列仍保留恢复与取消入口。后端验证与实际验收结果见 [即时迁移记录](docs/compatibility/immediate-migration-2026-10-26.md)。
|
|
7
7
|
> [!IMPORTANT]
|
|
8
8
|
> 非官方项目,由社区成员独立开发和维护。
|
|
9
9
|
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
<p style="font-size: 0; line-height: 1;">
|
|
14
14
|
<a href="https://github.com/PianoPrince/dsh-workspace-mover/actions/workflows/test.yml"><img alt="CI" src="https://github.com/PianoPrince/dsh-workspace-mover/actions/workflows/test.yml/badge.svg" style="height:20px; margin:0 2px;" /></a>
|
|
15
15
|
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-workspace-mover" style="height:20px; margin:0 2px;" /></a>
|
|
16
|
-
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm
|
|
17
|
-
<img alt="plugin version" src="https://img.shields.io/badge/dsh--plugin-2.
|
|
18
|
-
<img alt="DSH tested 0.2.
|
|
16
|
+
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm 最近 30 天下载量" src="https://img.shields.io/npm/dm/dsh-workspace-mover" style="height:20px; margin:0 2px;" /></a>
|
|
17
|
+
<img alt="plugin version" src="https://img.shields.io/badge/dsh--plugin-2.4.2-4d6bfe" style="height:20px; margin:0 2px;" />
|
|
18
|
+
<img alt="DSH tested 0.2.1-rc.2" src="https://img.shields.io/badge/DSH_tested-0.2.1--rc.2-4c8dff" style="height:20px; margin:0 2px;" />
|
|
19
19
|
<img alt="Node" src="https://img.shields.io/badge/Node-%E2%89%A522-339933" style="height:20px; margin:0 2px;" />
|
|
20
20
|
</p>
|
|
21
21
|
<p style="font-size: 0; line-height: 1;">
|
|
@@ -65,7 +65,7 @@ DeepSeek Harness 侧边栏可以拖拽排序**同一工作区**内的会话,
|
|
|
65
65
|
- **🛡️ 数据保护**:相同会话内容只保留一份物理快照,往返迁移不会无限增长;每次迁移仍写入历史,备份列表显示快照份数与占用
|
|
66
66
|
- **⏪ 移动历史与撤回**:记录最近 100 次跨工作区移动,批量聚合为一条,整批可一键撤回
|
|
67
67
|
- **🧾 迁移任务中心**:批量迁移逐项持久化记录(完成/失败、最后错误与尝试时间),失败项一键重试——按会话当前位置重新迁移,不用陈旧路径
|
|
68
|
-
- **⏳
|
|
68
|
+
- **⏳ 即时迁移**:接入生命周期的空闲会话释放句柄后直接搬移并重新加载;运行中需明确选择停止任务。旧队列仍可查询、取消和重试
|
|
69
69
|
- **🔎 迁移预览**:确认前展示来源、目标路径、冲突、运行状态、适配器和本次预计新增备份大小;已有内容快照会明确显示复用
|
|
70
70
|
- **📂 空分组清理 / 打开文件夹**:只列出真正零成员的工作区;组菜单可直达系统文件管理器
|
|
71
71
|
- **🤖 Agent 工具**:`mover_list_sessions` / `mover_move_session` / `mover_repair_sessions` / `mover_doctor` / `mover_create_workspace` / `mover_rename_workspace` 六个模型可调用工具——在对话里说「把这个会话挪到某组」即可触发与面板完全相同的备份回滚管线,也能新建、改名工作区;迁移、修复与改名执行前经宿主审批弹窗确认(改名在完全访问模式下免确认),未装 dsh-tools 的宿主自动停用
|
|
@@ -236,6 +236,7 @@ dsh plugin --profile web add "link:C:/path/to/dsh-workspace-mover"
|
|
|
236
236
|
|
|
237
237
|
| 插件版本 | 已验证 DeepSeek Harness | Node | 备注 |
|
|
238
238
|
|----------|-------------------------|------|------|
|
|
239
|
+
| 2.4.2 | `0.2.1-rc.2` Desktop | `≥22` | 用户确认即时迁移、当前界面继续发送、运行中取消/停止迁移、标题保留及重启恢复 |
|
|
239
240
|
| 2.4.0 | `0.2.1-rc.2` Desktop | `≥22` | 用户确认排队、迁移前后继续发送、两次重启、目标工作目录和工作区工具审批;自动滚动仅自动检查 |
|
|
240
241
|
| 2.3.0 | `0.2.0-rc.2` Desktop(用户验证部分场景) | `≥22` | 空闲会话迁移与快照复用已反馈通过;Web、队列进程重启和完整 runtime smoke 待验证 |
|
|
241
242
|
| 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` 时工具自动停用 |
|
|
@@ -244,7 +245,7 @@ dsh plugin --profile web add "link:C:/path/to/dsh-workspace-mover"
|
|
|
244
245
|
|
|
245
246
|
### 会话档案格式验证
|
|
246
247
|
|
|
247
|
-
以下“本地通过”指仓库沙盒 fixture,不代表官方 DSH runtime
|
|
248
|
+
以下“本地通过”指仓库沙盒 fixture,不代表官方 DSH runtime 逐格式实测。2.4.0 已在 Desktop 0.2.1-rc.2 完成排队、重启迁移、继续发送和工作区工具审批验收;下表逐格式的官方 runtime 状态仍待单独验收。自动滚动通过自动 DOM 检查,人工验收已豁免。详见[Desktop 验收记录](docs/compatibility/issue-5-desktop-acceptance-2026-10-22.md)和[格式兼容报告](docs/compatibility/dsh-0.2.0-rc.2-2026-10-13.md)。
|
|
248
249
|
|
|
249
250
|
| 档案布局 | 本地沙盒 | 官方 DSH runtime |
|
|
250
251
|
| --- | --- | --- |
|
|
@@ -313,6 +314,20 @@ dsh plugin --profile web add "link:C:/path/to/dsh-workspace-mover"
|
|
|
313
314
|
|
|
314
315
|
## 🆕 最近版本
|
|
315
316
|
|
|
317
|
+
### v2.4.2 · 2026-10-26
|
|
318
|
+
|
|
319
|
+
- **即时迁移**:已接入生命周期的空闲会话直接释放句柄、搬移并重新加载;运行中可取消或明确选择“停止任务并迁移”。
|
|
320
|
+
- **标题修复(#10)**:对齐标题缓存归属,兼容新版单记录缓存,避免迁移及归档列表误显示“未命名会话”。
|
|
321
|
+
- **迁移后继续对话**:等待旧界面引用释放后重新打开,修复“会话不可用”;桌面提示改为必要时彻底退出并重启。
|
|
322
|
+
- **验收**:Desktop `0.2.1-rc.2` 上述流程及重启后继续发送均通过。更新后请彻底重启 DSH 一次。见[验收记录](docs/compatibility/immediate-migration-2026-10-26.md)和[CHANGELOG](CHANGELOG.md)。Web 与旧版宿主的完整验收仍待补齐。
|
|
323
|
+
|
|
324
|
+
### v2.4.0 · 2026-10-22
|
|
325
|
+
|
|
326
|
+
- **Issue #5 安全迁移**:运行中或仍驻留内存的会话进入持久化队列;等会话卸载或 DSH 重启、写入句柄关闭后再迁移,并保留工作目录变更历史。
|
|
327
|
+
- **工作区工具**:`mover_create_workspace` 登记已有目录;`mover_rename_workspace` 只修改显示名称,并按宿主权限请求审批。
|
|
328
|
+
- **故障处理与界面清理**:缺失存储根目录视为空列表,权限和 I/O 错误继续明确报告;指针离开侧栏或到达边界、拖动结束或取消、插件卸载时都会停止自动滚动。
|
|
329
|
+
- **验收**:DSH Desktop `0.2.1-rc.2` 的排队、继续发送、两次重启、目标工作目录及工作区工具审批通过;自动滚动仅完成人工豁免后的自动 DOM 检查。详见[Desktop 验收记录](docs/compatibility/issue-5-desktop-acceptance-2026-10-22.md)和[CHANGELOG](CHANGELOG.md)。
|
|
330
|
+
|
|
316
331
|
### v2.3.0 · 2026-10-13
|
|
317
332
|
|
|
318
333
|
- **恢复快照复用**:会话内容相同时复用已有快照,忽略迁移产生的 `cwd` 变化;内容发生变化才新增备份。每次迁移仍记录来源、目标及快照引用,默认保留最多 20 个物理快照,兼容旧备份。
|
package/README_EN.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# dsh-workspace-mover
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
Current version: **2.4.2**. Accepted on DSH Desktop `0.2.1-rc.2`. Tracked idle sessions release their writer, physically move and reload. Running tasks require explicit Stop task and move confirmation. Restart DSH once after installing/updating to capture lifecycle handles. Untracked writers block immediate drag migration; old durable queues remain inspectable and cancellable. See the [migration and title-fix acceptance record](docs/compatibility/immediate-migration-2026-10-26.md).
|
|
5
5
|
> [!IMPORTANT]
|
|
6
6
|
> Unofficial project, independently developed and maintained by community members.
|
|
7
7
|
|
|
@@ -12,9 +12,9 @@ Running or resident sessions wait in the durable queue. Idle alone does not rele
|
|
|
12
12
|
<p style="font-size: 0; line-height: 1;">
|
|
13
13
|
<a href="https://github.com/PianoPrince/dsh-workspace-mover/actions/workflows/test.yml"><img alt="CI" src="https://github.com/PianoPrince/dsh-workspace-mover/actions/workflows/test.yml/badge.svg" style="height:20px; margin:0 2px;" /></a>
|
|
14
14
|
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-workspace-mover" style="height:20px; margin:0 2px;" /></a>
|
|
15
|
-
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm
|
|
16
|
-
<img alt="plugin version" src="https://img.shields.io/badge/dsh--plugin-2.
|
|
17
|
-
<img alt="DSH tested 0.2.
|
|
15
|
+
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm downloads in the last 30 days" src="https://img.shields.io/npm/dm/dsh-workspace-mover" style="height:20px; margin:0 2px;" /></a>
|
|
16
|
+
<img alt="plugin version" src="https://img.shields.io/badge/dsh--plugin-2.4.2-4d6bfe" style="height:20px; margin:0 2px;" />
|
|
17
|
+
<img alt="DSH tested 0.2.1-rc.2" src="https://img.shields.io/badge/DSH_tested-0.2.1--rc.2-4c8dff" style="height:20px; margin:0 2px;" />
|
|
18
18
|
<img alt="Node" src="https://img.shields.io/badge/Node-%E2%89%A522-339933" style="height:20px; margin:0 2px;" />
|
|
19
19
|
</p>
|
|
20
20
|
<p style="font-size: 0; line-height: 1;">
|
|
@@ -64,7 +64,7 @@ DeepSeek Harness's sidebar supports drag-to-reorder **within** a workspace, but
|
|
|
64
64
|
- **🛡️ Data protection**: identical session content keeps one physical snapshot, so back-and-forth moves do not grow storage without bound; every move still appears in history with snapshot counts and footprint visible
|
|
65
65
|
- **⏪ Move history and undo**: last 100 cross-workspace moves; bulk operations aggregate into one undoable entry
|
|
66
66
|
- **🧾 Task center**: bulk moves persist per-item state (done/failed, last error and attempt time); failed items retry in one click — from each session's CURRENT location, never a stale path
|
|
67
|
-
- **⏳
|
|
67
|
+
- **⏳ Immediate migration**: tracked idle sessions release their lifecycle, physically move and reload; running tasks require explicit stop confirmation. Existing queued work remains inspectable, cancellable and retryable
|
|
68
68
|
- **🔎 Migration preview**: before confirmation, show source, target path, collisions, running state, adapter mode, and estimated new backup bytes; reuse is called out when a matching snapshot already exists
|
|
69
69
|
- **📂 Empty-group cleanup / open folder**: only truly empty workspaces are listed; open a group directory in your file manager
|
|
70
70
|
- **🤖 Agent tools**: six model-callable tools — `mover_list_sessions` / `mover_move_session` / `mover_repair_sessions` / `mover_doctor` / `mover_create_workspace` / `mover_rename_workspace` — so "move this session to group X" in the conversation runs the same backup-first pipeline as the panel, and workspaces can be created and renamed too; move, repair and rename ask for user approval first (rename skips it under full access), and hosts without `dsh-tools` skip them automatically
|
|
@@ -237,6 +237,7 @@ Recovery snapshots are separate from primary archives. A reused snapshot retains
|
|
|
237
237
|
|
|
238
238
|
| Plugin version | Verified DeepSeek Harness | Node | Notes |
|
|
239
239
|
|----------------|---------------------------|------|-------|
|
|
240
|
+
| 2.4.2 | `0.2.1-rc.2` Desktop | `≥22` | User accepted immediate migration, continued replies in the same view, cancel/stop-and-move, titles and restart recovery |
|
|
240
241
|
| 2.4.0 | `0.2.1-rc.2` Desktop | `≥22` | User accepted queueing, continued replies, two restarts, target cwd and workspace-tool approval; autoscroll automated checks only |
|
|
241
242
|
| 2.3.0 | `0.2.0-rc.2` Desktop (partial user verification) | `≥22` | Idle migration and snapshot reuse confirmed; Web, queue process restart, and full runtime smoke pending |
|
|
242
243
|
| 2.2.0 | `0.1.5-rc.1`, `0.1.5-rc.2`, **`0.2.0 desktop`** (0.2.0-rc.2 core) | `≥22` | Storage-layout check; Agent tools + desktop verified; tools auto-skip on hosts without `dsh-tools` |
|
|
@@ -245,7 +246,7 @@ Recovery snapshots are separate from primary archives. A reused snapshot retains
|
|
|
245
246
|
|
|
246
247
|
### Session archive format validation
|
|
247
248
|
|
|
248
|
-
“Local pass” below means repository sandbox fixtures, not an official DSH runtime test. Desktop
|
|
249
|
+
“Local pass” below means repository sandbox fixtures, not an official DSH runtime test for each archive format. The v2.4.0 Desktop 0.2.1-rc.2 acceptance passed for queueing, restart migration, continued replies and workspace-tool approvals; the per-format Official DSH runtime cells below remain pending. Autoscroll has automated DOM coverage only; manual acceptance was waived. See the [Desktop acceptance record](docs/compatibility/issue-5-desktop-acceptance-2026-10-22.md) and [format compatibility report](docs/compatibility/dsh-0.2.0-rc.2-2026-10-13.md).
|
|
249
250
|
|
|
250
251
|
| Archive layout | Local sandbox | Official DSH runtime |
|
|
251
252
|
| --- | --- | --- |
|
|
@@ -299,6 +300,20 @@ Every migration runs through the same safety-bounded pipeline: **byte-level back
|
|
|
299
300
|
|
|
300
301
|
## 🆕 Recent version
|
|
301
302
|
|
|
303
|
+
### v2.4.2 · 2026-10-26
|
|
304
|
+
|
|
305
|
+
- **Immediate migration**: tracked idle sessions release their writer, physically move and reload. Running tasks require explicit stop-and-move consent; cancellation leaves them running.
|
|
306
|
+
- **Titles (#10)**: align projection identity before publishing membership and read current per-record checkpoints, fixing unnamed entries after migration and in archive/repair lists.
|
|
307
|
+
- **Conversation recovery**: wait for old view references to release before reopening, fixing the unavailable composer. Desktop guidance now says to fully quit and restart if needed.
|
|
308
|
+
- **Acceptance**: these flows and continued replies after restart passed on Desktop `0.2.1-rc.2`. Fully restart DSH once after updating. See the [acceptance record](docs/compatibility/immediate-migration-2026-10-26.md) and [CHANGELOG](CHANGELOG.md). Full Web and older-host acceptance remains pending.
|
|
309
|
+
|
|
310
|
+
### v2.4.0 · 2026-10-22
|
|
311
|
+
|
|
312
|
+
- **Issue #5 safe migration**: running or resident sessions enter a durable queue; migration waits for unload or restart and writer release, preserving working-directory history.
|
|
313
|
+
- **Workspace tools**: `mover_create_workspace` registers an existing folder; `mover_rename_workspace` changes only its display name and follows host approval rules.
|
|
314
|
+
- **Failure handling and UI cleanup**: a missing storage root is treated as an empty list while permission and I/O errors remain visible; sidebar autoscroll stops when the pointer leaves the sidebar or reaches a scroll boundary, on drag end/cancel, and on unload.
|
|
315
|
+
- **Acceptance**: DSH Desktop `0.2.1-rc.2` passed queueing, continued replies, two restarts, destination working directory and workspace-tool approval checks. Autoscroll received automated DOM checks only; manual acceptance was waived. See the [Desktop acceptance record](docs/compatibility/issue-5-desktop-acceptance-2026-10-22.md) and [CHANGELOG](CHANGELOG.md).
|
|
316
|
+
|
|
302
317
|
### v2.3.0 · 2026-10-13
|
|
303
318
|
|
|
304
319
|
- **Reusable recovery snapshots**: identical content reuses an existing snapshot, ignoring migration-only `cwd` changes. Changed content creates a new backup. Every move retains its source, target, and snapshot reference in history; up to 20 physical snapshots are retained by default, with legacy backups supported.
|