dsh-manage-session 0.5.7 → 2.0.4

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.
Files changed (67) hide show
  1. package/CHANGELOG.ja.md +33 -229
  2. package/CHANGELOG.ko.md +33 -229
  3. package/CHANGELOG.md +33 -363
  4. package/INSTALL.ja.md +164 -164
  5. package/INSTALL.ko.md +164 -164
  6. package/INSTALL.md +164 -164
  7. package/INSTALL.zh.md +164 -164
  8. package/LICENSE +21 -21
  9. package/README.en.md +41 -46
  10. package/README.ja.md +33 -57
  11. package/README.ko.md +32 -55
  12. package/README.md +64 -64
  13. package/cordis.patch.yml +19 -16
  14. package/dsh.plugin.json +4 -4
  15. package/lib/client.js +661 -3082
  16. package/lib/index.d.ts +79 -970
  17. package/lib/index.js +249 -2669
  18. package/locale/de.json +2 -2
  19. package/locale/en.json +2 -2
  20. package/locale/es.json +2 -2
  21. package/locale/fr.json +2 -2
  22. package/locale/it.json +2 -2
  23. package/locale/ja.json +2 -2
  24. package/locale/ko.json +2 -2
  25. package/locale/ru.json +2 -2
  26. package/locale/zh.json +2 -2
  27. package/package.json +15 -25
  28. package/screenshots.json +3 -3
  29. package/src/client/bridge-scope.ts +202 -213
  30. package/src/client/card.tsx +154 -154
  31. package/src/client/health-panel.tsx +49 -49
  32. package/src/client/host-api.ts +72 -6
  33. package/src/client/index.ts +594 -503
  34. package/src/client/locales.ts +893 -893
  35. package/src/client/manage-locales.ts +178 -0
  36. package/src/client/{search/manage.tsx → manage.tsx} +430 -404
  37. package/src/client/panel.tsx +131 -129
  38. package/src/client/session-menu-legacy.ts +2 -3
  39. package/src/client/session-menu.tsx +5 -5
  40. package/src/config.ts +43 -99
  41. package/src/host/health/attribution.ts +118 -118
  42. package/src/host/health/lossless.ts +128 -128
  43. package/src/host/health/repair.ts +2 -2
  44. package/src/host/health/source-kind.ts +350 -350
  45. package/src/host/history/archive-source.ts +250 -250
  46. package/src/host/history/archive.ts +249 -249
  47. package/src/host/history/favorites.ts +71 -71
  48. package/src/host/history/purge.ts +370 -370
  49. package/src/host/history/tombstones.ts +3 -3
  50. package/src/host/registry/archive-registry.ts +317 -317
  51. package/src/host/settings-bridge.ts +222 -264
  52. package/src/index.ts +66 -694
  53. package/src/client/search/card.tsx +0 -563
  54. package/src/client/search/host-api.ts +0 -213
  55. package/src/client/search/locales.ts +0 -861
  56. package/src/client/search/locate.ts +0 -330
  57. package/src/client/search/panel.tsx +0 -940
  58. package/src/client/search/platform.ts +0 -136
  59. package/src/host/index/archive-source.ts +0 -90
  60. package/src/host/index/drs-source.ts +0 -211
  61. package/src/host/index/engine.ts +0 -699
  62. package/src/host/index/extract.ts +0 -272
  63. package/src/host/index/peers.ts +0 -62
  64. package/src/host/index/rebuild.ts +0 -432
  65. package/src/host/index/schema.ts +0 -136
  66. package/src/host/index/snapshot.ts +0 -135
  67. package/src/host/index/sync.ts +0 -413
package/README.ko.md CHANGED
@@ -1,75 +1,52 @@
1
- # dsh-manage-session (세션 스튜어드)
1
+ # dsh-manage-session (세션 매니저)
2
2
 
3
- **세션 히스토리 파일**과 **세션 상태 점검**을 위한 DSH 웹 플러그인입니다. 세션 데이터 자체는 건드리지 않습니다.
3
+ > **이전 이름**: `dsh-session-steward`(세션 스튜어드). 2.0.0에서 `dsh-manage-session`로 개명했고,
4
+ > 검색/색인은 [`dsh-search-index`](https://github.com/drscrewdriver/dsh-search-index)로 되돌렸습니다.
4
5
 
5
- - **기록 보관소(히스토리 파일)** — 공식 아카이브 집합을 조회하고 id를 일괄 정리합니다
6
- (백업 + 원자적 교체, 호스트가 다시 로드하려면 DSH 재시작이 필요합니다).
7
- - **점검(상태)** — 네 개의 gate → 처방(명령 목록) → 퇴원(전후 비교가 포함된 되돌릴 수 있는 복구).
6
+ DSH 웹 플러그인: **활성·보관 세션 통합 관리대 + 세션 건강 점검**.
8
7
 
9
- > 이름 경계: **이 패키지는 검색이나 인덱스 기능을 제공하지 않습니다**. 검색/인덱싱은
10
- > `dsh-search-index`에 속하며, 어느 쪽도 상대방의 필드를 언급하거나 재해석하지 않습니다.
8
+ - **관리(메인 페이지)** — 워크스페이스별 활성+보관 세션 목록, 도메인 필터, 제목 필터, 즐겨찾기,
9
+ 일괄 보관/해제/실제 삭제(되돌릴 수 없음).
10
+ - **점검(보조 탭)** — 네 게이트 → 처방 → 퇴원(되돌릴 수 있는 조치).
11
11
 
12
- ## 스크린샷
13
-
14
- 사이드바 하단에 **「会话管家」**(세션 스튜어드) 항목이 추가되어 검색, 설정과 나란히 표시됩니다:
15
-
16
- ![사이드바 항목](assets/left-sidebar.png)
17
-
18
- **기록 보관소(히스토리 파일)** — 공식 아카이브 집합 목록. 각 행에 용량과 디스크 실체 존재 여부를 표시하며, 선택하여 아카이브 해제 또는 정리를 할 수 있습니다:
12
+ > **검색·색인은 이 패키지에 없고 DRS 의존도 없습니다**: 검색은 `dsh-search-index` 담당.
13
+ > 관리대 데이터는 호스트 `sessionQuery` + 공식 보관 집합에서 `session-catalog`가 조립합니다.
19
14
 
20
- ![기록 보관소](assets/archive.png)
15
+ ## 진입점 위치(상단 도구 슬롯 / 하단 대체)
21
16
 
22
- **점검** — 네 개의 gate 점검 입구이며, 검사 후 되돌릴 수 있는 처방을 제시합니다:
17
+ | 호스트 능력 | 진입점 형태 |
18
+ |---|---|
19
+ | 상단 도구 행(`sidebar.panellist` + `main`) 선언 | 「플러그인」 뒤, 「더 보기」 앞(order 6)에 **패널 행**, 클릭 시 메인 열 전체 페이지 |
20
+ | 슬롯 없음 | 사이드바 하단(`sidebar.footer.action`)으로 대체, 대화상자 표시 |
23
21
 
24
- ![점검](assets/doctor.png)
25
-
26
- ## 설치
27
-
28
- ```bash
29
- dsh plugin --profile web add dsh-manage-session
30
- ```
22
+ <!-- hosts-sync:begin -->
23
+ <!-- Generated by scripts/sync-hosts.mjs; single source in scripts/hosts.mjs -->
24
+ Supports DSH 0.1.0-rc.2, 0.1.0-rc.3, 0.1.0-rc.6, 0.1.0-rc.7, 0.1.0-rc.8, 0.1.1-rc.1, 0.1.1-rc.2, 0.1.2-rc.1, 0.1.5-rc.1, 0.1.5-rc.2, 0.1.5-rc.3, 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1, 0.2.0-rc.2, 0.2.1-rc.1, 0.2.1-rc.2, 0.2.1-rc.3 (enumerated peers — a per-rc tested whitelist; alpha/beta releases are out of scope).
25
+ <!-- hosts-sync:end -->
31
26
 
32
- 이후 호스트 프로세스를 재시작하세요(페이지 새로고침만으로는 부족합니다).
33
-
34
- ## 라우트
35
-
36
- 접두사 `/session-steward/api`; 모든 메서드 이름은 `session-*`이며(`index-*`는 결코 아닙니다), 인식되지 않는
37
- 메서드는 조용히 실패하지 않고 명시적인 오류를 반환합니다.
38
-
39
- | 메서드 | 도메인 | 목적 |
40
- |---|---|---|
41
- | `session-history-list` | history | 공식 아카이브 집합 조회(출처 및 성능 저하 관련 주석 포함) |
42
- | `session-history-prune` | history | 아카이브 배열에서 id 일괄 제거(자동 백업, 재시작 필요) |
43
- | `session-health-status` | health | 스위치 상태와 메서드 표(패널 폴링) |
44
- | `session-health-scan` | health | 일괄 점검(기본값은 비정상 세션만) |
45
- | `session-health-session` | health | 단일 세션의 4-gate 리포트와 처방 |
46
- | `session-health-repair` | health | 되돌릴 수 있는 복구(프로젝션 캐시 레코드 격리)와 전후 비교 |
47
-
48
- 설정 네임스페이스 `session-steward`; 사이드바 항목 id `dsh-manage-session`.
49
-
50
- ## 스위치(기능 게이트)
27
+ ## 스크린샷
51
28
 
52
- | 스위치 | 필드 | 꺼져 있을 때 |
53
- |---|---|---|
54
- | 세션 히스토리 파일 | `historyFiles`(기본값 true) | `session-history-*`가 등록되지 않고 기록 보관소 탭이 렌더링되지 않습니다 |
55
- | 상태 점검 | `healthCheck`(기본값 true) | `session-health-*`가 등록되지 않고 점검 탭이 렌더링되지 않습니다 |
29
+ **현재 형태** — 진입점은 사이드바 상단 도구 행(「플러그인」 뒤, 「더 보기」 앞)이며, 열면 세션 관리대:
30
+ 워크스페이스별 3열 카드, 워크스페이스/검색 영역(전체·활성·보관) 필터, 즐겨찾기,
31
+ 선택 항목 일괄 보관·해제·정리(되돌릴 수 없는 작업은 2회 확인):
56
32
 
57
- 닫힌 도메인은 `{ ok: false, error: '子域已关闭(…=false):<method> 未注册' }`를 반환합니다 — 빈 껍데기는 남지 않습니다.
33
+ ![세션 관리대](assets/new-manager.png)
58
34
 
59
- ## `dsh-search-index`와의 계약
35
+ **과거 형태** (연혁 참고용, 현재 UI 아님):
60
36
 
61
- 아카이브 파일 형식(`~/.dsh/storages/workspace.json`의 `global.archivedSessionIds`):
62
- **이 플러그인이 쓰고, search-index 플러그인은 읽기만 합니다**. `dsh-docs-deliverables/dsh-归档文件格式契约-20260914.md`를 참고하세요.
37
+ | 통합 패키지 시기(1.x: 검색 포함·2탭 대화상자·종료) | 더 이전(≤0.5.7: 사이드바 하단 진입점) |
38
+ |---|---|
39
+ | ![구 2탭 대화상자](assets/old-archive.png) | ![구 사이드바 하단 진입점](assets/left-sidebar-old.png) |
63
40
 
64
- ## 개발
41
+ ## 설치 / 설정 / 개발
65
42
 
66
43
  ```bash
67
- pnpm install
68
- pnpm typecheck
69
- pnpm test
70
- pnpm build
44
+ dsh plugin --profile web add dsh-manage-session # 설치 후 재시작
45
+ pnpm install && pnpm typecheck && pnpm test && pnpm build
71
46
  ```
72
47
 
48
+ 설정 네임스페이스 `manage-session`: `enabled`, `historyFiles`, `healthCheck`, `directDelete`.
49
+
73
50
  ## 라이선스
74
51
 
75
52
  MIT
package/README.md CHANGED
@@ -1,112 +1,112 @@
1
- # dsh-manage-session(会话管家 / Session Steward)
1
+ # dsh-manage-session(会话管理台 / Session Manager)
2
2
 
3
- DSH Web 插件:**会话管理台 + 会话健康检查**。
3
+ > **原名**:`dsh-session-steward`(会话管家)。本仓库自 2.0.0 起改名为 `dsh-manage-session`,
4
+ > 并把搜索/索引能力拆回 [`dsh-search-index`](https://github.com/drscrewdriver/dsh-search-index)。
4
5
 
5
- - **管理(会话操作台,主页面)**:按工作区分组列出全部会话(含归档域筛选),
6
- 勾选后批量执行三个**独立**操作 —— 归档、**取消归档状态**(只改数组,可逆)
7
- 与 **清理归档文件**(真删磁盘实体,不可逆)。
8
- (2026-10-20 页面调整:原「养老院」独立页签并入本页,不再单独存在。)
6
+ DSH Web 插件:**活跃与归档会话的统一管理台 + 四门体检**。
9
7
 
10
- > **两个操作不可互换,也不能合并**:
11
- >
12
- > | | 取消归档状态 | 清理归档文件 |
13
- > |---|---|---|
14
- > | 路由 | `session-history-prune` | `session-history-purge` |
15
- > | 改什么 | 只改 `global.archivedSessionIds` | 删磁盘实体 + 改归档数组 + 改工作区成员表 |
16
- > | 会话去向 | 回到侧边栏原工作区 | 从世界上消失 |
17
- > | 可逆 | ✅ | ❌ |
18
- >
19
- > **清理必然连带取消归档** —— 否则会留下「侧边栏看不见、一取消归档就变成空会话」的僵尸 id。
20
- > 体积**按行**显示(实测单条可从 0 到 23 MB),按钮给所选小计。
8
+ - **管理(主页面)** —— 按工作区分组列出**活跃 + 归档**会话:域筛选(全部 / 活跃 / 归档)、
9
+ 标题过滤、收藏,勾选后批量执行三个**互不等价**的操作 —— 归档、取消归档、
10
+ 清理归档文件(真删磁盘,不可逆)。每行给出标题、工作区与时间。
11
+ - **体检(备用页签)** —— 四门体检 → 处方(命令清单)→ 出院(可逆处置 + before/after)。
12
+
13
+ > 只做**可逆处置**:不改写会话日志、不改历史数据、不静默丢字段。
21
14
  >
22
- > **两条硬约束**(照做,否则操作会白做):
23
- > 1. **列表与写入同源** —— 都认存储文件 `~/.dsh/storages/workspace.json`。宿主内存里的
24
- > `workspaceRegistry` 是启动快照,改文件写不到它,只作为「已出文件、仍生效」的诊断面
25
- > (`pendingRestart`)。
26
- > 2. **操作后立刻重启 DSH** —— 存储层是全量重写、内存为准:宿主退出前**任何**归档或
27
- > 工作区改动都会把旧状态整份写回,本次操作归零。
28
- - **体检(健康检查 / 会话医生,备用页签)**:四门体检 → 处方(命令清单)→ 出院(可逆处置 + before/after 对照)。
15
+ > **本包不含搜索/索引,也不依赖 DRS**:会话检索(标题 / 内容 FTS5、命中定位)由
16
+ > `dsh-search-index` 提供,DRS(`dsh-reference-session-collector`)依赖也在那边。
17
+ > 管理台的语料由 `session-catalog` 现场从宿主 `sessionQuery` + 官方归档集合拼装。
18
+
19
+ ## 入口位次(顶栏工具槽 / 底栏回落)
20
+
21
+ | 宿主能力 | 入口形态 |
22
+ |---|---|
23
+ | 侧栏声明了顶部工具行槽位(`sidebar.panellist` 面板行 + `main` 整页槽,0.1.7+/0.2.x 的「插件 / 更多」工具行) | 入口作为**面板行**落在「插件」行之后、「更多」启动器之前(order 6),行内 icon + 文案默认左对齐;点击在主栏**整页**打开,页内「关闭」回到会话 |
24
+ | 宿主没有该槽位(老线 / 精简布局) | 回落侧栏**底栏** `sidebar.footer.action`,点击开浮动对话框 |
29
25
 
30
- > 命名边界:**本插件不提供搜索与索引**。搜索/独立索引属于另一片(`dsh-search-index`),
31
- > 两侧互不出现对方的子域字眼,也不互相解释对方字段。
26
+ 判定在装载时做(`inject` 探测两席位是否已声明);宿主稍后才声明槽位时,底栏入口会就地撤下
27
+ 并切换到顶栏,不会两份并存。两路都受设置开关驱动,开关翻转即时生效。
32
28
 
33
29
  <!-- hosts-sync:begin -->
34
30
  <!-- 由 scripts/sync-hosts.mjs 生成,勿手改;单源在 scripts/hosts.mjs -->
35
- 支持 DSH 0.1.0-rc.2、0.1.0-rc.3、0.1.0-rc.6、0.1.0-rc.7、0.1.0-rc.8、0.1.1-rc.1、0.1.1-rc.2、0.1.2-rc.1、0.1.5-rc.1、0.1.5-rc.2、0.1.5-rc.3、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3(枚举 peer,逐 rc 实测白名单;alpha/beta 不在支持范围)。
36
- <!-- hosts-sync:end -->
37
- ## 界面预览
31
+ 支持 DSH 0.1.0-rc.2、0.1.0-rc.3、0.1.0-rc.6、0.1.0-rc.7、0.1.0-rc.8、0.1.1-rc.1、0.1.1-rc.2、0.1.2-rc.1、0.1.5-rc.1、0.1.5-rc.2、0.1.5-rc.3、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.4(枚举 peer,逐 rc 实测白名单;alpha/beta 不在支持范围)。
32
+ <!-- hosts-sync:end -->
38
33
 
39
- 侧边栏底部新增 **「会话管家」** 入口,与搜索、设置并列:
34
+ ## 截图
40
35
 
41
- ![侧边栏入口](assets/left-sidebar.png)
36
+ **当前形态** —— 入口在侧栏顶部工具行(「插件」之后、「更多」之前),点开是会话管理台:
37
+ 按工作区分组的三列卡片、工作区与检索域(全部 / 活跃 / 归档)筛选、收藏,
38
+ 以及勾选后的批量归档 · 取消归档 · 清理(不可逆需二次确认):
42
39
 
43
- **管理(主页面)**——按工作区分组、活跃/归档/收藏筛选,每条给出体积与磁盘实体状态;
44
- 勾选后可批量归档、取消归档或清理(不可逆操作需二次确认):
40
+ ![会话管理台](assets/new-manager.png)
45
41
 
46
- **体检(备用页签)**——四门体检的入口,扫完给出可逆处方:
42
+ **历史形态**(仅作沿革对照,非当前界面):
47
43
 
48
- ![体检](assets/doctor.png)
44
+ | 合并包时代(1.x:含搜索,双页签对话框,已退场) | 更早(≤0.5.7:入口在侧栏底部) |
45
+ |---|---|
46
+ | ![旧版双页签对话框](assets/old-archive.png) | ![旧版侧栏底部入口](assets/left-sidebar-old.png) |
49
47
 
50
48
  ## 安装
51
49
 
52
50
  ```bash
53
51
  dsh plugin --profile web add dsh-manage-session
54
- # 或本地开发目录
55
- dsh plugin --profile web add "link:E:/test/rewrite-agently/mine-dsh-plugins/dsh-manage-session"
52
+ # 或本地 tgz
53
+ dsh plugin --profile web add "file:E:/test/rewrite-agently/mine-dsh-plugins/dsh-manage-session/dsh-manage-session-2.0.0.tgz"
56
54
  ```
57
55
 
58
56
  安装后**必须重启宿主进程**(仅刷新页面无效)。
59
57
 
60
58
  ## 路由契约
61
59
 
62
- 前缀 `/session-steward/api`,方法名一律 `session-*`(**不得**与搜索索引的 `index-*` 混用);
63
- 未识别的方法返回显式错误,绝不静默。
60
+ 前缀 `/manage-session/api`,方法名一律 `session-*`;未识别的方法返回显式错误,绝不静默。
64
61
 
65
- | 方法 | 子域 | 作用 |
66
- |---|---|---|
67
- | `session-history-list` | history | 列出归档集合(存储文件优先;含来源、降级、按行体积与 `pendingRestart` 标注) |
68
- | `session-history-prune` | history | **取消归档状态**:从归档数组批量移除 id(自动备份,需重启) |
69
- | `session-history-purge` | history | **清理归档文件**:真删转录目录 + 投影缓存 + 两处 id(**不可逆**) |
70
- | `session-health-status` | health | 开关状态与方法表(面板轮询用) |
71
- | `session-health-scan` | health | 批量体检(默认只返回非 ok 的会话) |
72
- | `session-health-session` | health | 单会话四门报告 + 处方 |
73
- | `session-health-repair` | health | 可逆处置(隔离投影缓存记录)+ before/after |
62
+ | 方法 | 作用 |
63
+ |---|---|
64
+ | `session-catalog` | 管理台语料(活跃 + 归档同表;`sessionQuery` + 归档集合现场拼装) |
65
+ | `session-history-list` | 列出归档集合(存储文件优先;含来源、降级、按行体积与 `pendingRestart`) |
66
+ | `session-history-archive` | 批量归档(内存 API 优先,文件降级) |
67
+ | `session-history-prune` | **取消归档状态**:从归档数组批量移除 id(可逆,需重启) |
68
+ | `session-history-purge` | **清理归档文件**:真删转录目录 + 投影缓存 + 两处 id(**不可逆**) |
69
+ | `session-history-favorites-list` / `-favorite-set` | 收藏集合读写(JSON 域) |
70
+ | `session-health-status` | 开关状态与方法表(面板与删除行探针用,含 `directDelete`) |
71
+ | `session-health-scan` / `-session` / `-repair` / `-source-migrate` | 批量体检、单会话报告、可逆处置、署名迁移 |
74
72
 
75
- 设置命名空间:`session-steward`;侧边栏入口 id:`dsh-manage-session`。
73
+ ## 设置
76
74
 
77
- ## 两个开关(feature gate)
75
+ 命名空间:`manage-session`。
78
76
 
79
77
  | 开关 | 字段 | 关闭效果 |
80
78
  |---|---|---|
81
- | 会话历史文件 | `historyFiles`(默认 true) | 不注册 `session-history-*` 路由(UI 页签已于 2026-10-20 并入管理台,不再单独控制界面) |
79
+ | 启用插件 | `enabled`(默认 true) | 不注册任何接口,入口整体消失 |
80
+ | 会话历史文件 | `historyFiles`(默认 true) | 不注册 `session-history-*` |
82
81
  | 健康检查 | `healthCheck`(默认 true) | 不注册 `session-health-*`,不渲染「体检」页签 |
82
+ | 行内删除 | `directDelete`(默认 false) | 侧栏会话菜单不出现「删除」行(破坏性入口默认关) |
83
+
84
+ ## 存储
83
85
 
84
- 关闭时对应方法返回 `{ ok: false, error: '子域已关闭(…=false):<method> 未注册' }`,**不留空壳**。
86
+ | 路径 | 内容 |
87
+ |---|---|
88
+ | `~/.dsh/storages/manage-session-favorites.json` | 收藏集合(按 sessionId) |
89
+ | `~/.dsh/storages/workspace.json` | 归档数组与工作区成员表(**宿主文件**,本插件写入前自动备份) |
85
90
 
86
91
  ## 四门体检
87
92
 
88
93
  | gate | 判据 | level |
89
94
  |---|---|---|
90
95
  | `log-integrity` | zstd 多帧扫描 → provenance 展开 → 打包行解包;seq 连续、无撕裂尾帧 | 有读取问题 `fail`;仅撕裂尾帧 `warn` |
91
- | `projection-cache` | `~/.dsh/storages/session_projcache/sessions/<id>.json` 的 `minSeq` 与日志末 seq 的 lag + 未结算字段(openStep / activeStep.active / pendingTurnStart / turnBoundary=start) | 滞后且未结算 `fail`;任一 `warn` |
92
- | `lossless-json` | 热态 `sessionProjections.checkpoint(session)` 逐行判定无损 JSON(undefined / 非有限数 / -0 / 稀疏洞 / 非普通原型 / 函数·Symbol·BigInt / 环) | 命中 `fail`,并给出投影 key → 归属包 |
93
- | `cold-read` | 最后 `turn/end` 的原因、是否存在未收尾 open step、最后 user 消息之后是否还有 assistant 输出 | open step `fail`;interrupted/无 turn/end `warn` |
94
-
95
- **处方**只给三件可逆的事:① 隔离损坏的投影缓存记录(先备份)② 含未结算 step 时提示等待宿主结算 ③ 输出可执行命令清单。
96
- **禁止**:改写会话日志、改历史数据、静默丢弃字段。
97
-
98
- ## 与 `dsh-search-index` 的唯一契约
96
+ | `projection-cache` | `~/.dsh/storages/session_projcache/sessions/<id>.json` 的 `minSeq` 与日志末 seq 的 lag + 未结算字段 | 滞后且未结算 `fail`;任一 `warn` |
97
+ | `lossless-json` | 热态 `sessionProjections.checkpoint(session)` 逐行判定无损 JSON | 命中 `fail`,并给出投影 key → 归属包 |
98
+ | `cold-read` | 最后 `turn/end` 的原因、是否存在未收尾 open step | open step `fail`;interrupted/无 turn/end `warn` |
99
99
 
100
- 归档文件格式(`~/.dsh/storages/workspace.json` 的 `global.archivedSessionIds`):
101
- **本插件写、搜索索引只读**。格式说明见
102
- `dsh-docs-deliverables/dsh-归档文件格式契约-20260914.md`。
100
+ **处方**只给三件可逆的事:① 隔离损坏的投影缓存记录(先备份)② 含未结算 step 时提示等待宿主结算
101
+ ③ 输出可执行命令清单。**禁止**:改写会话日志、改历史数据、静默丢弃字段。
103
102
 
104
103
  ## 开发
105
104
 
106
105
  ```bash
107
106
  pnpm install
108
107
  pnpm typecheck # tsc -b --pretty false
109
- pnpm test # vitest run
108
+ pnpm test # vitest run(宿主半)
109
+ pnpm test:client # 浏览器半身注册 / 字典断言(需先 build)
110
110
  pnpm build # tsc -b && tsdown → lib/index.js + lib/client.js
111
111
  ```
112
112
 
package/cordis.patch.yml CHANGED
@@ -1,16 +1,19 @@
1
- # dsh-manage-session bundle patch
2
- #
3
- # 通过官方 CLI 安装时 ——
4
- #
5
- # dsh plugin --profile web add dsh-manage-session
6
- #
7
- # —— 命令会把 `dsh-manage-session` 追加到 bundle 栈,profile 启动时合并本补丁
8
- # (单个 insert,插入本插件行)。
9
- #
10
- # 注:P1「替换官方 workspace 注册表」已撤编(beta.8-12 实测桌面宿主对用户层
11
- # 禁用核心服务行会触发 INACTIVE_EFFECT 启动致命)——归档/取消归档的即时生效
12
- # 不依赖替换(官方 archiveSession/unarchiveSession 内存 API);仅删除保留
13
- # 文件路径语义(操作后需重启侧栏生效)。子类源码留存 src/host/registry/ 备查。
14
- - insert:
15
- - id: dsh-manage-session
16
- name: 'dsh-manage-session'
1
+ # dsh-manage-session bundle patch
2
+ #
3
+ # 通过官方 CLI 安装时 ——
4
+ #
5
+ # dsh plugin --profile web add dsh-manage-session
6
+ #
7
+ # —— 命令会把 `dsh-manage-session` 追加到 bundle 栈,profile 启动时合并本补丁
8
+ # (单个 insert,插入本插件行)。
9
+ #
10
+ # 注:P1「替换官方 workspace 注册表」已撤编(beta.8-12 实测桌面宿主对用户层
11
+ # 禁用核心服务行会触发 INACTIVE_EFFECT 启动致命)——归档/取消归档的即时生效
12
+ # 不依赖替换(官方 archiveSession/unarchiveSession 内存 API);仅删除保留
13
+ # 文件路径语义(操作后需重启侧栏生效)。子类源码留存 src/host/registry/ 备查。
14
+ #
15
+ # 客户端口不使用本补丁: 入口位次由客户端半身自行判定(宿主声明
16
+ # `sidebar.panellist` + `main` 两个席位 → 顶栏面板行;否则回落底栏)。
17
+ - insert:
18
+ - id: dsh-manage-session
19
+ name: 'dsh-manage-session'
package/dsh.plugin.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "id": "dsh-manage-session",
3
3
  "name": "dsh-manage-session",
4
- "version": "0.5.7",
4
+ "version": "2.0.4",
5
5
  "description": {
6
- "en": "Session Steward (merged package): archive browsing & cleanup, a four-gate session health checkup with reversible prescriptions, plus an independent FTS5 content-search index (title/content modes, incremental sync, non-destructive rebuild, snapshot export/import). Never rewrites session logs.",
7
- "zh": "会话管家(合并包):归档浏览与清理、四门体检(可逆处方),外加独立 FTS5 会话内容搜索(标题/内容双模式、增量同步、非破坏性整理、快照导入导出)。不改写会话日志。"
6
+ "en": "Session Manager: one console over active and archived sessions (browse, filter, favorite, archive/unarchive, batch purge, delete) plus a four-gate session health checkup. The entry sits in the sidebar top tool slot right after the Plugins row when the host provides one, and falls back to the footer otherwise. No index of its own and no DRS dependency — search lives in dsh-search-index. Never rewrites session logs. (formerly dsh-session-steward)",
7
+ "zh": "会话管理台:一屏管理活跃与归档会话(列表、筛选、收藏、归档与取消归档、批量清理、删除),外加四门会话体检。宿主提供侧栏顶部工具槽位时入口落在「插件」行之后,否则回落底栏。不自建索引、不依赖 DRS——搜索能力在 dsh-search-index。不改写会话日志。(原名 dsh-session-steward)"
8
8
  },
9
9
  "homepage": "https://github.com/drscrewdriver/dsh-manage-session",
10
10
  "repository": {
@@ -13,7 +13,7 @@
13
13
  },
14
14
  "license": "MIT",
15
15
  "engines": {
16
- "dsh": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3"
16
+ "dsh": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4"
17
17
  },
18
18
  "components": {
19
19
  "host": "lib/index.js",