dsh-session-mng 0.1.1 → 0.1.3
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 +37 -0
- package/README.md +25 -6
- package/ROADMAP.md +30 -4
- package/client.js +272 -66
- package/docs/01-design.md +23 -13
- package/docs/02-open-source-and-marketplace.md +21 -0
- package/docs/HANDOVER-2026-10-27.md +133 -0
- package/docs/PLAN-2026-10-27.md +2 -0
- package/docs/PLAN-2026-10-28-branch-visibility.md +116 -0
- package/docs/PLAN-2026-10-28-legacy-fork-safety.md +62 -0
- package/docs/RELEASE-CHECKLIST-0.1.1.md +18 -5
- package/docs/RELEASE-CHECKLIST-0.1.2.md +31 -0
- package/docs/RELEASE-CHECKLIST-0.1.3.md +38 -0
- package/lib/service.js +64 -16
- package/lib/state.js +54 -9
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.3 — 2026-10-28
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **分支会话被误判成子会话并默认隐藏**:只要会话 header 带 `parentSession` 就被当成子代理会话,导致侧栏有 2 条、设置页「会话管理」只有 1 条。现在按三态分类——根会话 / 分支会话(`isSeeded:true`、无委派深度)/ 子代理会话(`origin:'subagent'` 或 `delegationDepth≥1`)。
|
|
8
|
+
- **删除父会话会连带删掉历史分支**:宿主 `traceSession` 仍按 `parentSession` 把历史分支算作后代,插件原先按该谱系级联删除,且分支不需归档、也没有单独确认。现在只级联子代理;历史分支保留(父链接悬空无害,父被删后宿主会把它降级为顶层会话),预览单独提示,勾选后才删除。
|
|
9
|
+
- **父会话有历史分支时不能移动**:`has-descendants` 误拦。现在只有子代理后代阻止移动。
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- 分支会话默认显示,并在所属工作区内缩进挂在父会话下方;父行显示「N 分支」计数,分支行副行显示「↳ 来自:父标题」。
|
|
14
|
+
- 搜索父标题时,其分支会话也会命中。
|
|
15
|
+
- 总览行显示「已隐藏 N 个子代理会话」;开关文案改为「显示子代理会话」。
|
|
16
|
+
- 删除范围预览提示:被删会话名下的 `N` 个分支不会被删除,但会失去来源标识;如需一起删除请勾选。
|
|
17
|
+
- 分支的来源父会话已被删除时,行/详情显示「来源父会话已不存在」。
|
|
18
|
+
- 移动有分支的父会话时,详情提示「移动只迁移本会话,分支留在原工作区并继续独立使用」。
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- 「子会话」文案统一改为「子代理」/「子代理会话」,与分支会话区分。
|
|
23
|
+
- 分支会话暂不支持跨工作区移动(保持父子同工作区),移动不可用提示按 live / 分支 / 子代理 / 有后代分别给出原因。
|
|
24
|
+
- `GET /state` 的行新增 `kind` / `isFork` / `parentTitle` / `parentPresent` / `forkCount`,`totals` 新增 `forks` / `hiddenSubagents`;`isSubagent` 保留用于兼容。
|
|
25
|
+
- 兼容声明增加 `0.2.1-rc.3: compatible`(保留 `0.2.1-rc.2`)。注意:当前安装的 rc.3 构建里普通 fork **仍会写** `parentSession`(DSH 源码中的「独立 fork」变更尚未进入该构建),所以「历史分支」形态短期仍会持续出现;插件对两种形态一视同仁。
|
|
26
|
+
|
|
27
|
+
## 0.1.2 — 2026-10-27
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- 默认隐藏空会话(`blank: true`):这类会话本来就不出现在侧栏会话列表;现在「会话管理」默认也不显示,可用「显示空会话」临时查看。
|
|
32
|
+
- 「清理空会话(N)」:批量清理**已归档且可删除**的空会话,仍先弹出删除范围确认;未归档空会话会提示先归档。
|
|
33
|
+
- 全部/活跃/已归档 tab 计数与隐藏空会话后的可见列表一致;总览行显示「已隐藏 N 个空会话」。
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- 删除范围确认改为**模态对话框**:内容区独立滚动,底部「我已了解」勾选与「确认彻底删除 / 取消」固定可见,不再随列表滚走。
|
|
38
|
+
- 删除范围弹窗支持点击遮罩取消、Esc 取消;加载/错误状态仍显示取消按钮。
|
|
39
|
+
|
|
3
40
|
## 0.1.1 — 2026-10-27
|
|
4
41
|
|
|
5
42
|
### Changed
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# dsh-session-mng
|
|
2
2
|
|
|
3
|
+
> 官网 / Website: <https://dsh.zlmix.com/session-mng/>
|
|
4
|
+
|
|
3
5
|
[](https://www.npmjs.com/package/dsh-session-mng)
|
|
4
6
|
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
5
7
|
[](LICENSE)
|
|
@@ -14,13 +16,16 @@
|
|
|
14
16
|
|
|
15
17
|
## 功能
|
|
16
18
|
|
|
17
|
-
- **统一会话总览**:按工作区分组列出当前 profile 的全部会话(活跃 + 已归档)。显示标题、路径、会话 id
|
|
19
|
+
- **统一会话总览**:按工作区分组列出当前 profile 的全部会话(活跃 + 已归档)。显示标题、路径、会话 id、大小、最后活动时间、运行/已打开/已归档/已置顶/分支/子代理标记;支持搜索、工作区筛选、排序、刷新、批量选择。
|
|
20
|
+
- **分支会话默认显示**:从某条会话分出来的会话(fork)和主会话一样可见、可管理——缩进挂在父会话下方,父行显示「N 分支」,分支行标注「↳ 来自:父标题」;搜索父标题也能找到它。由委派产生的**子代理会话**仍默认隐藏(勾选「显示子代理会话」查看),总览行会提示「已隐藏 N 个子代理会话」。
|
|
18
21
|
- **工作区优先 + 分页**:会话数 >100 时默认折叠工作区;每个工作区默认 50 条,「加载更多」继续展开;搜索自动展开命中工作区。过滤工具栏和批量条整体吸顶。
|
|
19
22
|
- **选择跟随可见集**:切换筛选/折叠/搜索/刷新后,隐藏会话自动取消选择;`全选当前列表` 只作用于当前筛选与已展开的工作区。
|
|
23
|
+
- **空会话默认隐藏**:侧栏本来就不显示的 `blank` 会话,会话管理默认也不显示;勾选「显示空会话」才出现。提供「清理空会话(N)」快速清理已归档空会话。
|
|
24
|
+
- **删除范围模态确认**:范围内容在弹窗内独立滚动,底部勾选与确认/取消按钮固定可见;支持遮罩点击/Esc 取消。
|
|
20
25
|
- **生成标题**:选中任意会话(**包括已归档的冷会话**),让模型总结整段对话,给出可编辑的标题提案;**确认后才写入**。活跃会话走官方 `sessionTitle.rename`,冷会话按官方 `session/title` 事件形状追加,不需要恢复会话。
|
|
21
26
|
- **归档 / 恢复**:调用官方 `workspaceRegistry.archiveSession` / `unarchiveSession`。运行中的会话先提示,用户二次确认后才停止并归档;恢复后回到原工作区原位置。
|
|
22
27
|
- **跨工作区移动**:把冷会话真正迁移到目标工作区——改写会话日志 header 的 `cwd`、把日志目录迁到目标项目目录、同步 workspace 账本。SessionId、归档状态、pin 状态不变,事件字节不变。
|
|
23
|
-
- **彻底删除已归档会话**:删除前先预览范围(根会话、子代理会话、目录、字节数);确认后把日志目录移出 store、清理归档集合与 workspace 账本,再删除。**不可恢复。**
|
|
28
|
+
- **彻底删除已归档会话**:删除前先预览范围(根会话、子代理会话、目录、字节数);确认后把日志目录移出 store、清理归档集合与 workspace 账本,再删除。**不可恢复。** 子代理会话随父级联删除;**普通分支会话不会**(它们仍是独立会话,来源父会话删除后保留下来),如需一并删除请把分支也勾选进来。
|
|
24
29
|
- **预览最近消息**:不恢复会话即可看最近 10 条用户/助手消息。
|
|
25
30
|
- **失效归档标记清理**:归档集合里有、但磁盘上已无日志的 id,会以横幅提示并允许清理。
|
|
26
31
|
- **中英双语**、浅色/深色主题跟随宿主。
|
|
@@ -54,7 +59,7 @@ dsh plugin --profile <profile> add link:/绝对路径/dsh-session-mng
|
|
|
54
59
|
|
|
55
60
|
Host 半是进程内模块:装完如果看不到页面,重启一次 dsh/应用再刷新页面;Client 半刷新页面即可。
|
|
56
61
|
|
|
57
|
-
>
|
|
62
|
+
> 市场状态:awesome-dsh-plugin 收录 PR [#9672](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9672) 的 `check` 已通过;`Submission gate` 目前只差仓库满 1 天(约 2026-10-28 00:44 Asia/Shanghai 自动重跑),无需重新提交。合并后 dshmarket 读取同一份目录,卡片版本随 npm 显示 `0.1.1`。
|
|
58
63
|
|
|
59
64
|
## 使用
|
|
60
65
|
|
|
@@ -89,11 +94,12 @@ Host route (lib/api.js) ──► service (lib/service.js)
|
|
|
89
94
|
|
|
90
95
|
| 项 | 说明 |
|
|
91
96
|
|---|---|
|
|
92
|
-
| 实测宿主 | DSH `0.2.1-rc.
|
|
97
|
+
| 实测宿主 | DSH `0.2.1-rc.3`(Desktop `desktop` profile,Web GUI);`0.2.1-rc.2` 也已验证 |
|
|
93
98
|
| Node | `>=20.3` 可运行总览/标题/归档/删除;**移动** 需要 `node:zlib` 的 Zstandard 支持(Node `>=22.15`,当前 Desktop 运行时为 Node 24.21) |
|
|
94
99
|
| 会话后端 | 移动/删除只支持本地 JSONL 后端(`sessionPersistence.locate`);其他后端仍可用总览/标题/归档/恢复 |
|
|
95
100
|
| 官方依赖 | 无 runtime 依赖;只使用 `ctx` 服务 |
|
|
96
|
-
| 已知限制 | 已打开(live)会话不能移动或彻底删除,重启 DSH
|
|
101
|
+
| 已知限制 | 已打开(live)会话不能移动或彻底删除,重启 DSH 后重试;有子代理后代的会话不能单独移动;子代理会话默认隐藏(可勾选「显示子代理会话」查看);分支会话默认显示,但暂不能单独移动(需与父会话留在同一工作区);删除父会话不级联普通分支,分支会失去来源标识(显示「来源父会话已不存在」) |
|
|
102
|
+
| 规模限制 | 0.1.1 的折叠/分页只在客户端压 DOM,`state` 仍一次拉全量(202 条约 103 KB;10000 条约 5 MB)。Host 侧 overview + paged sessions 是 0.2.0 的主任务 |
|
|
97
103
|
|
|
98
104
|
### 版本敏感点(请读)
|
|
99
105
|
|
|
@@ -136,14 +142,27 @@ node --check index.js client.js lib/*.js
|
|
|
136
142
|
npm --cache /tmp/dsh-npm-cache pack --dry-run
|
|
137
143
|
```
|
|
138
144
|
|
|
139
|
-
|
|
145
|
+
实机验收:安装到 `desktop` profile → 确认 `settings.section` 出现 `session-mng-section` → 用**一次性测试会话**验证标题/归档/恢复/移动/删除 → 清理测试数据。0.1.1 的列表验收见 `docs/RELEASE-CHECKLIST-0.1.1.md`。
|
|
146
|
+
|
|
147
|
+
## 当前状态与下一步
|
|
148
|
+
|
|
149
|
+
- `0.1.3` 待发布:修复分支会话被当成子会话隐藏(三态会话模型 + 缩进显示 + 隐藏子代理提示),并修正「删除父会话级联删掉历史分支」「父会话因历史分支无法移动」两个问题;等实机验证后再发 npm/GitHub。
|
|
150
|
+
- `0.1.2` 已发布到 npm / GitHub / Release;空会话默认隐藏、清理空会话、删除范围模态确认。
|
|
151
|
+
- `0.1.1` 已发布;26 个测试全绿,0.1.2 包 33 个文件 / 568.3 kB。
|
|
152
|
+
- 市场 PR [#9672](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9672) 等 1 天仓库年龄 gate,之后等维护者合并。
|
|
153
|
+
- 下一项主任务:**0.2.0 Host 侧 overview + 分页 sessions**,为 1000–10000 条会话设计;详细任务、验收标准、环境坑见 [接手说明](docs/HANDOVER-2026-10-27.md)。
|
|
140
154
|
|
|
141
155
|
## 文档索引
|
|
142
156
|
|
|
157
|
+
- [接手说明(下一步任务)](docs/HANDOVER-2026-10-27.md)
|
|
143
158
|
- [实施计划(批准时原样归档)](docs/PLAN-2026-10-26.md)
|
|
144
159
|
- [0.1.0 发布检查清单](docs/RELEASE-CHECKLIST-0.1.0.md)
|
|
145
160
|
- [0.1.1 实施计划](docs/PLAN-2026-10-27.md)
|
|
146
161
|
- [0.1.1 发布检查清单](docs/RELEASE-CHECKLIST-0.1.1.md)
|
|
162
|
+
- [0.1.2 发布检查清单(待发布)](docs/RELEASE-CHECKLIST-0.1.2.md)
|
|
163
|
+
- [0.1.3 实施计划(分支会话默认可见)](docs/PLAN-2026-10-28-branch-visibility.md)
|
|
164
|
+
- [0.1.3 实施计划(历史分支删除/移动安全)](docs/PLAN-2026-10-28-legacy-fork-safety.md)
|
|
165
|
+
- [0.1.3 发布检查清单(待发布)](docs/RELEASE-CHECKLIST-0.1.3.md)
|
|
147
166
|
- [设计与实现说明](docs/01-design.md)
|
|
148
167
|
- [开源、发 npm 与市场收录记录](docs/02-open-source-and-marketplace.md)
|
|
149
168
|
- [路线图](ROADMAP.md)
|
package/ROADMAP.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Roadmap
|
|
2
2
|
|
|
3
|
+
> 当前:`0.1.2` 已发布;`0.1.3`(分支会话默认可见)已实现待实机验证/发布。市场 PR [#9672](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9672) 的 `check` 已过,只差仓库 1 天年龄 gate(约 2026-10-28 00:44 Asia/Shanghai 自动重跑)。下一项主任务是 0.2.0 的 Host 分页;详细接手任务见 [docs/HANDOVER-2026-10-27.md](docs/HANDOVER-2026-10-27.md)。
|
|
4
|
+
|
|
3
5
|
## 0.1.0 — delivered
|
|
4
6
|
|
|
5
7
|
- 统一会话总览(活跃 + 已归档,工作区分组,搜索/筛选/排序,日志大小)。
|
|
@@ -17,15 +19,39 @@
|
|
|
17
19
|
- 选择集裁剪到当前筛选与展开可见集;批量操作不触碰隐藏会话。
|
|
18
20
|
- 批量移动提示区分 live 与一般不可移动项。
|
|
19
21
|
|
|
20
|
-
## 0.2
|
|
22
|
+
## 0.1.2 — delivered
|
|
23
|
+
|
|
24
|
+
- 空会话默认隐藏 + 「显示空会话」开关;tab 计数与可见列表一致。
|
|
25
|
+
- 「清理空会话(N)」批量清理已归档空会话,复用删除范围预览/确认。
|
|
26
|
+
- 删除范围确认改为模态框,内容独立滚动、底部确认区固定,支持遮罩/Esc 取消。
|
|
27
|
+
|
|
28
|
+
## 0.1.3 — delivered (待实机验证/发布)
|
|
29
|
+
|
|
30
|
+
- 三态会话模型:根 / 分支(fork)/ 子代理;分支不再因 `parentSession` 被误判成子会话隐藏。
|
|
31
|
+
- 分支会话默认显示,缩进挂在父行下,父行「N 分支」、分支行「↳ 来自:父标题」;搜索父标题命中分支。
|
|
32
|
+
- 子代理仍默认隐藏,总览行提示「已隐藏 N 个子代理会话」;开关改名「显示子代理会话」。
|
|
33
|
+
- 删除只级联子代理:历史分支保留(预览提示会失去来源标识),不再静默删除;父会话有历史分支时也能移动。
|
|
34
|
+
- 分支的来源父会话被删除后显示「来源父会话已不存在」;移动有分支的会话时提示分支留在原工作区。
|
|
35
|
+
|
|
36
|
+
## 0.2.0 — next (planned)
|
|
37
|
+
|
|
38
|
+
首要目标:真正支撑 1000–10000 条会话,不再首屏拉全量 `state`。实施前先写 `docs/PLAN-2026-10-28.md` 并获批准。
|
|
39
|
+
|
|
40
|
+
- `GET /session-mng/api/overview`:只返回工作区计数/大小/归档数、totals、capabilities、orphans;不读全部标题/日志。
|
|
41
|
+
- `GET /session-mng/api/sessions`:按 `workspaceId/tab/offset/limit/query/sort` 分页;只对当前页 id 读标题/大小;返回 `hasMore`。
|
|
42
|
+
- 未分组会话懒加载 + 短 TTL 缓存;全局搜索先只读验证宿主 search 是否覆盖标题。
|
|
43
|
+
- Client:overview 首屏 → 工作区展开时取第一页 → 加载更多;保留 sticky、选择裁剪、搜索自动展开。
|
|
44
|
+
- 兼容:保留 `/state` 给 0.1.x 客户端;Host 同时提供新旧接口。
|
|
45
|
+
- 验收:合成 10k 数据首屏不返回 session rows;单页 ≤50 行;不触发全量 `sessionController.list`;现有 26 测试 + 新增分页/overview/search 测试。
|
|
46
|
+
- 详细接口建议、验收与坑:[docs/HANDOVER-2026-10-27.md](docs/HANDOVER-2026-10-27.md)。
|
|
47
|
+
|
|
48
|
+
## Later candidates
|
|
21
49
|
|
|
22
|
-
- Host 侧 overview + paged sessions 接口:首屏只取工作区计数,按工作区懒加载 50 条,真正支撑 1000–10000 条会话。
|
|
23
|
-
- 未分组会话懒加载 + 短缓存;全局搜索复用宿主索引。
|
|
24
50
|
- 侧栏会话「...」菜单快捷入口(生成标题 / 会话管理详情),复用同一套 Host 操作。
|
|
25
51
|
- 内容全文搜索(复用 `sessionQuery.searchSessions` / `searchEvents`),不只按标题/路径/id。
|
|
26
52
|
- 导出所选会话为 Markdown / JSON(删除前的安全网;批量)。
|
|
27
53
|
- 置顶 / 取消置顶(`workspaceRegistry.pinSession` / `unpinSession`)。
|
|
28
|
-
- 整枝移动(父会话 +
|
|
54
|
+
- 整枝移动(父会话 + 分支会话 + 子代理后代一起迁移),或在移动时保留父链接。
|
|
29
55
|
- 会话体检 / 修复:重复目录、幽灵归档、workspace 账本与 header cwd 不一致、损坏日志报告。
|
|
30
56
|
- 可选回收站(与「彻底删除」并存,默认关闭)。
|
|
31
57
|
- 移动的增量实现(rename 而不是整目录复制),大日志更快。
|