dsh-archived-chats 2.0.1 → 2.0.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 CHANGED
@@ -4,6 +4,36 @@
4
4
 
5
5
  Entries describe behavior at each release, not necessarily current behavior. Consult the READMEs and user guides for current usage.
6
6
 
7
+ ## 2.0.3 — 2026-11-14
8
+
9
+ ### 中文
10
+
11
+ - 明确支持 DeepSeek Harness `0.2.2-rc.3`:同时更新宿主与 Session peer 兼容声明,保留已有宿主范围,不自动放行未来预发布版本。
12
+ - 新增锁定官方 `0.2.2-rc.3` 后端的原生集成 fixture,并纳入 macOS、Windows、Linux CI;同步中英文兼容说明。运行时代码、归档、备份与删除安全逻辑不变。
13
+
14
+ ### English
15
+
16
+ - Explicitly support DeepSeek Harness `0.2.2-rc.3` in both the Host and Session peer ranges, preserving older supported Hosts without admitting untested future prereleases.
17
+ - Add a pinned official `0.2.2-rc.3` native backend fixture to macOS, Windows and Linux CI, and synchronize bilingual compatibility documentation. Runtime code, archive/backup behavior and deletion safety are unchanged.
18
+
19
+ ## 2.0.2 — 2026-11-12
20
+
21
+ ### 中文
22
+
23
+ - 支持 DeepSeek Harness `0.2.2-rc.2`:宿主兼容声明增加 `0.2.2-rc.2`,开发依赖同步到 `0.2.2-rc.2`;旧宿主仍可直接升级。
24
+ - 菜单与成功提示改走宿主原生组件:操作菜单使用宿主 Menu,成功提示优先使用宿主 Toast;旧版宿主没有 Toast 时自动使用插件原来的提示框。菜单、提示框不再用插件自己的定位样式。
25
+ - 成功提示的外观随宿主走:宿主 Toast 没有手动关闭按钮,悬停不会暂停计时,位置为窗口顶部居中。归档成功提示停留 6 秒,其他成功提示停留 4 秒;随后由宿主控制淡出,具体动画时长取决于宿主版本。
26
+ - 用户指南补充说明:在 DSH ≥ 0.2.2-rc.2 上,归档会话会删除 DSH 为该会话创建的 Git 工作树检出目录(分支与提交保留)。
27
+ - 插件功能与数据处理不变。
28
+
29
+ ### English
30
+
31
+ - Support DeepSeek Harness `0.2.2-rc.2`: the Host compatibility declaration adds `0.2.2-rc.2` and the development dependency moves to `0.2.2-rc.2`; older Hosts can still update directly.
32
+ - Menus and success notices now use the Host's native components: action menus use the Host Menu and success notices prefer the Host Toast, falling back to the plugin's own toast on older Hosts without it. Menus and notices no longer use the plugin's own positioning styles.
33
+ - Success notices follow the Host Toast appearance: no manual dismiss button, hovering does not pause the timer, and the position is top-center of the window. Archive-success notices hold for 6 seconds; other success notices hold for 4 seconds. The Host then controls the fade, whose duration depends on the Host version.
34
+ - The user guide now notes that on DSH ≥ 0.2.2-rc.2, archiving a session removes the checkout directory of a Git worktree DSH itself created for that session (the branch and its commits are preserved).
35
+ - Plugin features and data handling are unchanged.
36
+
7
37
  ## 2.0.1 — 2026-11-10
8
38
 
9
39
  ### 中文
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![DSH Insights health](https://dsh-insights.com/badge/Ultronen/dsh-archived-chats.svg)](https://dsh-insights.com/p/Ultronen/dsh-archived-chats/)
1
+ [![DSH Insights health](https://dsh-insights.com/badge/Ultroncn/dsh-archived-chats.svg)](https://dsh-insights.com/p/Ultroncn/dsh-archived-chats/)
2
2
 
3
3
  <p align="center">
4
4
  <img src="assets/brand/archive-management-banner.png" alt="Archive Management: local-first archived-chat center for DeepSeek Harness" width="100%">
@@ -20,7 +20,6 @@
20
20
  <p>
21
21
  <a href="https://github.com/Ultroncn/dsh-archived-chats/blob/main/LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/License-MIT-2ea44f?style=flat-square"></a>
22
22
  <a href="https://awesome-dsh-plugin.com/p/Ultroncn/dsh-archived-chats/"><img alt="Awesome DSH Plugin" src="https://awesome-dsh-plugin.com/badge.svg"></a>
23
- <a href="https://github.com/Ultroncn/dsh-archived-chats/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/Ultroncn/dsh-archived-chats?style=flat-square"></a>
24
23
  </p>
25
24
 
26
25
  <p>English · <a href="README.zh-CN.md">简体中文</a></p>
@@ -35,7 +34,7 @@ Archive Management adds conversation search, organization and backups to DeepSee
35
34
  - **Portable backups:** export and import JSON + Markdown ZIPs; imports preview before writing and skip existing IDs to avoid overwrites.
36
35
  - **Conversation lineage:** read-only Origins & Branches view traces sources, forks and subagent relationships across all workspaces, including archived and unarchived chats.
37
36
 
38
- > This document describes version 2.0.1. Previous recovery features are removed, with explicit retries for permanent-deletion tasks.
37
+ > This document describes version 2.0.3. Previous recovery features are removed, with explicit retries for permanent-deletion tasks.
39
38
 
40
39
  ## Install and open
41
40
 
@@ -94,7 +93,7 @@ Installing an older release can restore its earlier cleanup rules. Before downgr
94
93
 
95
94
  ## Compatibility
96
95
 
97
- The declared range is DSH `>=0.1.0-rc.7 || 0.2.2-rc.1`; features still depend on Host capabilities. Native integration tests cover official `0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5` and `0.2.2-rc.1` backends; CI runs the Host matrix on macOS, Windows and Linux.
96
+ The declared range is DSH `>=0.1.0-rc.7 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3`; features still depend on Host capabilities. Native integration tests cover official `0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5`, `0.2.2-rc.1` and `0.2.2-rc.3` backends; CI runs the Host matrix on macOS, Windows and Linux.
98
97
 
99
98
  Archive, unarchive and inventory use official capabilities. Permanent deletion coordinates Host session lifecycle and storage locations rather than calling one unified public deletion API. See [compatibility and limits](docs/USER_GUIDE.md#compatibility-and-limits).
100
99
 
@@ -157,6 +156,8 @@ npm ci --prefix test/fixtures/native-host-0.2.1-rc.5 --ignore-scripts --include=
157
156
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.1-rc.5
158
157
  npm install --prefix test/fixtures/native-host-0.2.2-rc.1 --ignore-scripts --include=optional --package-lock=true
159
158
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.1
159
+ npm ci --prefix test/fixtures/native-host-0.2.2-rc.3 --ignore-scripts --include=optional
160
+ node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.3
160
161
  npm pack --dry-run --json
161
162
  ```
162
163
 
package/README.zh-CN.md CHANGED
@@ -12,13 +12,12 @@
12
12
  <p>
13
13
  <a href="https://www.npmjs.com/package/dsh-archived-chats"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-archived-chats?style=flat-square"></a>
14
14
  <a href="https://www.npmjs.com/package/dsh-archived-chats"><img alt="npm 累计下载量" src="https://img.shields.io/npm/dt/dsh-archived-chats?style=flat-square&amp;label=total%20downloads"></a>
15
- <a href="https://github.com/Ultroncn/dsh-archived-chats/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/Ultronen/dsh-archived-chats/ci.yml?branch=main&amp;style=flat-square&amp;label=CI"></a>
15
+ <a href="https://github.com/Ultroncn/dsh-archived-chats/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/Ultroncn/dsh-archived-chats/ci.yml?branch=main&amp;style=flat-square&amp;label=CI"></a>
16
16
  <a href="https://github.com/Ultroncn/dsh-archived-chats/actions/workflows/ci.yml"><img alt="Node.js 18 and 24" src="https://img.shields.io/badge/Node.js-18%20%7C%2024-339933?style=flat-square&amp;logo=nodedotjs&amp;logoColor=white"></a>
17
17
  </p>
18
18
  <p>
19
19
  <a href="https://github.com/Ultroncn/dsh-archived-chats/blob/main/LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/License-MIT-2ea44f?style=flat-square"></a>
20
20
  <a href="https://awesome-dsh-plugin.com/p/Ultroncn/dsh-archived-chats/"><img alt="Awesome DSH Plugin" src="https://awesome-dsh-plugin.com/badge.svg"></a>
21
- <a href="https://github.com/Ultroncn/dsh-archived-chats/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/Ultronen/dsh-archived-chats?style=flat-square"></a>
22
21
  </p>
23
22
 
24
23
  <p><a href="README.md">English</a> · 简体中文</p>
@@ -33,7 +32,7 @@
33
32
  - **可迁移备份:** 导出和导入 JSON + Markdown ZIP;导入前预览,跳过已有 ID,不覆盖现有数据。
34
33
  - **会话溯源:** 只读的「来源与分支」视图查看所有工作区中已归档、未归档会话的来源、分叉和子代理关系。
35
34
 
36
- > 本文描述 2.0.1,旧恢复功能已移除,永久删除支持任务重试。
35
+ > 本文描述 2.0.3,旧恢复功能已移除,永久删除支持任务重试。
37
36
 
38
37
  ## 安装与打开
39
38
 
@@ -92,7 +91,7 @@ dsh plugin --profile web update dsh-archived-chats
92
91
 
93
92
  ## 兼容性
94
93
 
95
- 声明范围为 DSH `>=0.1.0-rc.7 || 0.2.2-rc.1`,具体能力仍取决于 Host。原生集成测试覆盖官方 `0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5` 与 `0.2.2-rc.1` 后端;CI 在 macOS、Windows 和 Linux 上运行 Host 测试矩阵。
94
+ 声明范围为 DSH `>=0.1.0-rc.7 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3`,具体能力仍取决于 Host。原生集成测试覆盖官方 `0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5`、`0.2.2-rc.1` 与 `0.2.2-rc.3` 后端;CI 在 macOS、Windows 和 Linux 上运行 Host 测试矩阵。
96
95
 
97
96
  归档、取消归档、列表读取以官方能力为基础。永久删除由插件协调会话生命周期和存储位置完成,并非调用一个官方统一删除接口。详见[兼容性与限制](docs/USER_GUIDE.zh-CN.md#兼容性与限制)。
98
97
 
@@ -155,6 +154,8 @@ npm ci --prefix test/fixtures/native-host-0.2.1-rc.5 --ignore-scripts --include=
155
154
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.1-rc.5
156
155
  npm install --prefix test/fixtures/native-host-0.2.2-rc.1 --ignore-scripts --include=optional --package-lock=true
157
156
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.1
157
+ npm ci --prefix test/fixtures/native-host-0.2.2-rc.3 --ignore-scripts --include=optional
158
+ node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.3
158
159
  npm pack --dry-run --json
159
160
  ```
160
161
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  English · [中文](ARCHITECTURE.md) · [User guide](USER_GUIDE.md)
4
4
 
5
- This document describes the interfaces and behavior of version 2.0.1. Native integration tests cover DSH `0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5` and `0.2.2-rc.1`. See the [changelog](../CHANGELOG.md) for release history. Runtime code is the authority for interfaces and behavior; user-facing documentation should agree with it.
5
+ This document describes the interfaces and behavior of version 2.0.3. Native integration tests cover DSH `0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5`, `0.2.2-rc.1` and `0.2.2-rc.3`. See the [changelog](../CHANGELOG.md) for release history. Runtime code is the authority for interfaces and behavior; user-facing documentation should agree with it.
6
6
 
7
7
  The client capability-detects public UI primitives. `HostModal` uses the official headless Modal for complex business content. Ordinary `ConfirmDialog` uses its heading, description and footer. `ControlButton` and `ControlInput` forward refs, disabled state and editing events. Older Hosts retain HTML fallbacks. Native controls use separate styling classes so legacy button CSS cannot override their sizing, colors or hover states. Menus retain filter placement and scrolling constraints; preview content stays within the outer modal bounds. Native modals own focus layering, with document-level legacy traps registered only in compatibility mode. Plugin-owned portals belong to the archive interaction so clicks inside a dialog cannot prematurely release settings protection.
8
8
 
@@ -183,10 +183,12 @@ npm ci --prefix test/fixtures/native-host-0.2.1-rc.5 --ignore-scripts --include=
183
183
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.1-rc.5
184
184
  npm install --prefix test/fixtures/native-host-0.2.2-rc.1 --ignore-scripts --include=optional --package-lock=true
185
185
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.1
186
+ npm ci --prefix test/fixtures/native-host-0.2.2-rc.3 --ignore-scripts --include=optional
187
+ node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.3
186
188
  npm pack --dry-run --json
187
189
  git diff --check
188
190
  ```
189
191
 
190
- The native commands install the locked `@deepseek-ai/dsh-session@0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5` and `0.2.2-rc.1` fixtures and require all nine native integration cases to run without skips for each fixture. This is the local equivalent of the mandatory native Host integration gate in CI.
192
+ The native commands install the locked `@deepseek-ai/dsh-session@0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5`, `0.2.2-rc.1` and `0.2.2-rc.3` fixtures and require all nine native integration cases to run without skips for each fixture. This is the local equivalent of the mandatory native Host integration gate in CI.
191
193
 
192
- The declared DSH `>=0.1.0-rc.7 || 0.2.2-rc.1` range remains capability-based. Release automation tests Node.js 18 on Ubuntu and Node.js 24 on Ubuntu, macOS, and Windows; the Node.js 24 matrix requires all four official Host backend fixtures, `@deepseek-ai/dsh-session@0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5` and `0.2.2-rc.1`, on all three platforms (9/9 each), along with package checks, including the v4 session format. The [screenshots](../screenshots.json) show the current interface with synthetic example chats.
194
+ The declared DSH `>=0.1.0-rc.7 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3` range remains capability-based. Release automation tests Node.js 18 on Ubuntu and Node.js 24 on Ubuntu, macOS, and Windows; the Node.js 24 matrix requires all five official Host backend fixtures, `@deepseek-ai/dsh-session@0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5`, `0.2.2-rc.1` and `0.2.2-rc.3`, on all three platforms (9/9 each), along with package checks, including the v4 session format. The [screenshots](../screenshots.json) show the current interface with synthetic example chats.
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](ARCHITECTURE.en.md) · 中文 · [用户指南](USER_GUIDE.zh-CN.md)
4
4
 
5
- 本文描述 2.0.1 的接口与行为;原生集成测试覆盖 DSH `0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5` 和 `0.2.2-rc.1`。版本变更见[更新日志](../CHANGELOG.md)。运行时代码是接口与行为的依据;用户操作说明与本文应保持一致。
5
+ 本文描述 2.0.3 的接口与行为;原生集成测试覆盖 DSH `0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5`、`0.2.2-rc.1` 和 `0.2.2-rc.3`。版本变更见[更新日志](../CHANGELOG.md)。运行时代码是接口与行为的依据;用户操作说明与本文应保持一致。
6
6
 
7
7
  客户端通过能力探测复用公开 UI primitives。`HostModal` 为复杂业务内容使用官方无头 Modal,普通 `ConfirmDialog` 直接使用 Modal 的标题、说明及 footer;`ControlButton` 与 `ControlInput` 透传 ref、禁用状态和编辑事件。旧 Host 保留 HTML 兼容入口。原生按钮使用独立样式类,避免旧按钮 CSS 覆盖官方尺寸、颜色和悬停。菜单保留筛选定位与滚动约束,预览内容限制在外层弹窗边界内。原生弹窗拥有焦点层,旧文档级焦点陷阱仅在兼容模式注册。带插件归属标记的 portal 计入归档交互范围,避免设置保护被弹窗内点击提前解除。
8
8
 
@@ -184,12 +184,14 @@ npm ci --prefix test/fixtures/native-host-0.2.1-rc.5 --ignore-scripts --include=
184
184
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.1-rc.5
185
185
  npm install --prefix test/fixtures/native-host-0.2.2-rc.1 --ignore-scripts --include=optional --package-lock=true
186
186
  node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.1
187
+ npm ci --prefix test/fixtures/native-host-0.2.2-rc.3 --ignore-scripts --include=optional
188
+ node scripts/run-native-integration.mjs --fixture-root test/fixtures/native-host-0.2.2-rc.3
187
189
  npm pack --dry-run --json
188
190
  git diff --check
189
191
  ```
190
192
 
191
- 原生集成命令会分别安装锁定的 `@deepseek-ai/dsh-session@0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5` 和 `0.2.2-rc.1` fixtures,每套都要求九个原生集成用例全部执行且不能跳过;这是 CI 强制原生 Host 集成门禁的本地等价检查。
193
+ 原生集成命令会分别安装锁定的 `@deepseek-ai/dsh-session@0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5`、`0.2.2-rc.1` 和 `0.2.2-rc.3` fixtures,每套都要求九个原生集成用例全部执行且不能跳过;这是 CI 强制原生 Host 集成门禁的本地等价检查。
192
194
 
193
- 声明的 DSH `>=0.1.0-rc.7 || 0.2.2-rc.1` 范围仍以 Host 公开能力为准。发布自动化在 Ubuntu 上测试 Node.js 18,并在 Ubuntu、macOS 和 Windows 上测试 Node.js 24;Node.js 24 矩阵在三个平台上分别强制运行基于官方 `@deepseek-ai/dsh-session@0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5` 和 `0.2.2-rc.1` 的四套 Host 后端集成(每套 9/9)与打包检查,覆盖 v4 会话格式。[截图](../screenshots.json)使用虚构示例聊天展示当前界面。
195
+ 声明的 DSH `>=0.1.0-rc.7 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3` 范围仍以 Host 公开能力为准。发布自动化在 Ubuntu 上测试 Node.js 18,并在 Ubuntu、macOS 和 Windows 上测试 Node.js 24;Node.js 24 矩阵在三个平台上分别强制运行基于官方 `@deepseek-ai/dsh-session@0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5`、`0.2.2-rc.1` 和 `0.2.2-rc.3` 的五套 Host 后端集成(每套 9/9)与打包检查,覆盖 v4 会话格式。[截图](../screenshots.json)使用虚构示例聊天展示当前界面。
194
196
 
195
197
  永久删除在最终读取子代理关系前先取消并释放活动代理。完整后代集合以可选 `cascadeSessionIds` 保存到父会话的 `purge-pending` 记录;父目录消失后也保留该记录,直到所有子代理清理完成。用户明确重试时据此恢复级联,不跨越分叉或已有独立删除任务的子树。待重试记录清空前不要降级到不支持此字段的版本。
@@ -4,7 +4,7 @@ Current source removes the previous recovery UI and keeps explicit permanent-del
4
4
 
5
5
  English · [简体中文](USER_GUIDE.zh-CN.md) · [Back to README](../README.md)
6
6
 
7
- Archive Management provides a place to browse and manage DSH's archived chats, plus workspace bulk archiving. This document describes version 2.0.1, with native integration coverage for DSH `0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5` and `0.2.2-rc.1`. See the [changelog](../CHANGELOG.md) for release history. For interfaces and data formats, see the [architecture](ARCHITECTURE.en.md).
7
+ Archive Management provides a place to browse and manage DSH's archived chats, plus workspace bulk archiving. This document describes version 2.0.3, with native integration coverage for DSH `0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5`, `0.2.2-rc.1` and `0.2.2-rc.3`. See the [changelog](../CHANGELOG.md) for release history. For interfaces and data formats, see the [architecture](ARCHITECTURE.en.md).
8
8
 
9
9
  Archive Management prefers the Host’s public Modal, Button, Input, menu, Tooltip, and icon components. Search fields follow the built-in plugin inventory’s 36px height, search icon, and focus styles. Ordinary text fields use the public Input. Confirmations use the official heading, description, and action areas. Complex preview and import content use the official modal frame. Older Hosts without these exports use compatible controls. Page headings, descriptions, secondary list text, and focus states follow the official settings typography and theme variables.
10
10
 
@@ -113,6 +113,8 @@ Deletion requires explicit confirmation and is irreversible after completion. Ar
113
113
  - Transitive subagent descendants are included through recorded parent relationships, even across workspace or archive-state boundaries. Ordinary forks are included only when selected themselves.
114
114
  - Workspace directories, project code, Git repositories and worktrees, global shared attachments and caches outside session directories, exported ZIPs, and other independent backups are retained. Files inside a target session directory are removed with that directory.
115
115
 
116
+ > **Archiving is not deletion:** on DSH ≥ 0.2.2-rc.2, archiving a session removes the checkout directory of a Git worktree that DSH itself created for that session (the branch and its commits are preserved); worktrees you created yourself outside session directories are unaffected. To keep the local directory, configure the Host to retain worktrees on archive.
117
+
116
118
  To keep content, export the target chats and any subagents you need before deletion. Archive unarchived chats first to make them available for export. Plugin ZIPs exclude attachment binaries and do not automatically include descendant chats. Back up attachments separately.
117
119
 
118
120
  Every target must be idle. Execution rechecks identities, archive state, workspace membership, and scope. Changed scope requires fresh confirmation. Retries preserve the stored identities and confirmed scope. Historical selected-only tasks retain their original scope.
@@ -199,7 +201,7 @@ Upgrades preserve archives, tags, notes, and pending permanent-deletion tasks. P
199
201
 
200
202
  Features depend on public Host capabilities, not just a version number:
201
203
 
202
- The declared DSH `>=0.1.0-rc.7 || 0.2.2-rc.1` range remains capability-based. Release automation tests Node.js 18 on Ubuntu and Node.js 24 on Ubuntu, macOS, and Windows; the Node.js 24 matrix requires all four pinned official Host backends, `@deepseek-ai/dsh-session@0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5` and `0.2.2-rc.1` (nine integration cases each) and package checks, including the v4 session format.
204
+ The declared DSH `>=0.1.0-rc.7 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3` range remains capability-based. Release automation tests Node.js 18 on Ubuntu and Node.js 24 on Ubuntu, macOS, and Windows; the Node.js 24 matrix requires all five pinned official Host backends, `@deepseek-ai/dsh-session@0.1.7-rc.2`, `0.2.1-rc.2`, `0.2.1-rc.5`, `0.2.2-rc.1` and `0.2.2-rc.3` (nine integration cases each) and package checks, including the v4 session format.
203
205
 
204
206
  ## Local data and uninstall
205
207
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](USER_GUIDE.md) · 简体中文 · [返回 README](../README.zh-CN.md)
4
4
 
5
- 归档管理为 DSH 已归档聊天提供查看和管理页面,并扩展按工作区批量归档。本文描述 2.0.1 的行为(包含未归档正文搜索),原生集成测试覆盖 DSH `0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5` 和 `0.2.2-rc.1`。版本变更见[更新日志](../CHANGELOG.md),接口和数据格式见[架构说明](ARCHITECTURE.md)。
5
+ 归档管理为 DSH 已归档聊天提供查看和管理页面,并扩展按工作区批量归档。本文描述 2.0.3 的行为(包含未归档正文搜索),原生集成测试覆盖 DSH `0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5`、`0.2.2-rc.1` 和 `0.2.2-rc.3`。版本变更见[更新日志](../CHANGELOG.md),接口和数据格式见[架构说明](ARCHITECTURE.md)。
6
6
 
7
7
  归档管理优先复用宿主公开的 Modal、Button、Input、菜单、Tooltip 和图标组件。搜索框采用内置插件页面的 36px 高度、搜索图标和焦点样式,普通文本输入使用公开 Input。确认弹窗的标题、正文和操作区使用官方组件,复杂预览和导入内容使用官方弹窗框架;缺少相应导出的旧 Host 使用兼容样式。页面标题、说明、列表次要文字和焦点状态采用官方设置页的文字层级与主题变量。
8
8
 
@@ -113,6 +113,8 @@ dsh plugin --profile web add -w dsh-archived-chats@latest
113
113
  - 子智能体后代按真实父子关系递归纳入,可能具有不同的工作区或归档状态。普通分叉仅在自身被选中时纳入。
114
114
  - 工作区目录、项目代码、Git 仓库与工作树、会话目录之外的全局共享附件和缓存、另行导出的 ZIP 及其他独立备份均保留。会话目录内的文件随目录一起删除。
115
115
 
116
+ > **归档不是删除:** 在 DSH ≥ 0.2.2-rc.2 上,归档会话会删除 DSH 为该会话创建的 Git 工作树检出目录(分支与提交保留);会话目录之外由你自己创建的工作树不受影响。如需保留本地目录,请在 Host 中配置归档时保留工作树。
117
+
116
118
  删除前如需保留内容,请先导出目标会话及需要保留的子智能体;未归档会话需先归档再导出。插件 ZIP 不包含附件二进制,也不会自动打包后代会话,附件需另行备份。
117
119
 
118
120
  全部目标必须空闲。确认后会重新核对身份、归档状态、工作区及删除范围;范围变化时要求重新确认。失败重试沿用持久保存的会话身份和确认范围,历史仅删选中项的任务保留原范围。
@@ -199,7 +201,7 @@ JSON 是机器可读记录,Markdown 是可读副本。新版 Host 导出 ZIP v
199
201
 
200
202
  功能取决于 Host 公开能力,不仅取决于版本号:
201
203
 
202
- 声明的 DSH `>=0.1.0-rc.7 || 0.2.2-rc.1` 范围仍表达基于 Host 公开能力的兼容性。发布自动化在 Ubuntu 上测试 Node.js 18,并在 Ubuntu、macOS 和 Windows 上测试 Node.js 24;Node.js 24 矩阵强制运行官方 `@deepseek-ai/dsh-session@0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5` 和 `0.2.2-rc.1` 四套锁定 Host 后端集成(各 9 项)与打包检查,覆盖 v4 会话格式。
204
+ 声明的 DSH `>=0.1.0-rc.7 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3` 范围仍表达基于 Host 公开能力的兼容性。发布自动化在 Ubuntu 上测试 Node.js 18,并在 Ubuntu、macOS 和 Windows 上测试 Node.js 24;Node.js 24 矩阵强制运行官方 `@deepseek-ai/dsh-session@0.1.7-rc.2`、`0.2.1-rc.2`、`0.2.1-rc.5`、`0.2.2-rc.1` 和 `0.2.2-rc.3` 五套锁定 Host 后端集成(各 9 项)与打包检查,覆盖 v4 会话格式。
203
205
 
204
206
  ## 本地数据与卸载
205
207
 
package/lib/about.js CHANGED
@@ -3,7 +3,7 @@ import { dirname, resolve, isAbsolute, join } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
 
5
5
  const manifest = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
6
- const HOME = 'https://github.com/Ultronen/dsh-archived-chats';
6
+ const HOME = 'https://github.com/Ultroncn/dsh-archived-chats';
7
7
  const REGISTRY_URL = 'https://registry.npmjs.org/dsh-archived-chats/latest';
8
8
  const DEFAULT_CACHE_TTL_MS = 12 * 60 * 60 * 1000;
9
9
  const DEFAULT_FORCE_COOLDOWN_MS = 30 * 1000;
package/lib/client.js CHANGED
@@ -1135,12 +1135,6 @@ window.__ModuleLoader__.load({
1135
1135
  .dac-toolbar-more>summary.dac-iconbtn{width:22px;height:22px;padding:0}
1136
1136
  .dac-action-trigger.dac-danger{color:var(--dsw-alias-state-error-primary)}
1137
1137
  .dac-action-trigger:disabled{opacity:.45;cursor:default}
1138
- .dac-action-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:60;min-width:190px;display:flex;flex-direction:column;gap:2px;padding:4px;border:1px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-lg);background:var(--dsw-alias-bg-layer-1);box-shadow:var(--dsw-shadow-lv3)}
1139
- .dac-action-menu-item{display:flex;align-items:center;width:100%;border:none;border-radius:var(--dsw-radius-md);background:transparent;color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:20px;text-align:left;padding:7px 10px;white-space:nowrap;cursor:pointer}
1140
- .dac-action-menu-item:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.12))}
1141
- .dac-action-menu-item:disabled{opacity:.45;cursor:default}
1142
- .dac-action-menu-item.dac-danger{color:var(--dsw-alias-state-error-primary)}
1143
- .dac-action-menu-item.dac-danger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger)}
1144
1138
  /* Shared radii follow Host settings cards (xl), inputs/controls (md), and menu surfaces (lg). */
1145
1139
  .dac-search{box-sizing:border-box;position:relative;width:100%;display:flex;align-items:center;color:var(--dsw-alias-label-tertiary)}
1146
1140
  .dac-search>svg{position:absolute;left:12px;pointer-events:none}
@@ -1454,7 +1448,7 @@ window.__ModuleLoader__.load({
1454
1448
  .dac-action-confirm button:not(.dac-native-control):focus-visible,.dac-workspace-actions>button:not(.dac-native-control):focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}
1455
1449
  .dac-workspace-body ul{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:4px;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere}
1456
1450
  .dac-workspace-result-group{display:flex;flex-direction:column;gap:5px;border-top:1px solid var(--dsw-alias-border-l2);padding-top:10px}
1457
- @media (max-width:640px){[role="dialog"][data-dac-section-active="1"]>nav{display:none}[role="dialog"][data-dac-section-active="1"]>nav+div{width:100%;min-width:0}.dac-head{align-items:flex-start;flex-wrap:wrap}.dac-action-trigger{padding:5px 9px}.dac-action-menu{left:0;right:auto;max-width:calc(100vw - 32px)}.dac-action-wrap:last-child .dac-action-menu{left:auto;right:0}.dac-row{align-items:flex-start;flex-wrap:wrap}.dac-row-actions{gap:4px;flex-wrap:wrap}.dac-unarchive{padding:4px 10px}.dac-summary{gap:6px}.dac-row-meta{gap:4px}.dac-preview-dialog{width:calc(100vw - 20px);height:calc(100vh - 20px)}.dac-preview-layout{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.dac-preview-feed{padding:10px}.dac-preview-rail{flex-direction:row;overflow-x:auto;border-right:none;border-bottom:1px solid var(--dsw-alias-border-l2);padding:8px 5px}.dac-preview-rail button:not(.dac-native-control){flex:none}}
1451
+ @media (max-width:640px){[role="dialog"][data-dac-section-active="1"]>nav{display:none}[role="dialog"][data-dac-section-active="1"]>nav+div{width:100%;min-width:0}.dac-head{align-items:flex-start;flex-wrap:wrap}.dac-action-trigger{padding:5px 9px}.dac-row{align-items:flex-start;flex-wrap:wrap}.dac-row-actions{gap:4px;flex-wrap:wrap}.dac-unarchive{padding:4px 10px}.dac-summary{gap:6px}.dac-row-meta{gap:4px}.dac-preview-dialog{width:calc(100vw - 20px);height:calc(100vh - 20px)}.dac-preview-layout{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.dac-preview-feed{padding:10px}.dac-preview-rail{flex-direction:row;overflow-x:auto;border-right:none;border-bottom:1px solid var(--dsw-alias-border-l2);padding:8px 5px}.dac-preview-rail button:not(.dac-native-control){flex:none}}
1458
1452
  @media (max-width:640px){.dac-lineage-card-head{gap:8px}.dac-lineage-workspace-toggle small{font-size:11px}}
1459
1453
  .dac-lineage-canvas{position:relative;min-width:0;overflow:hidden;border:1px solid var(--dsw-alias-border-l2,#e4e5e8);border-radius:var(--dsw-radius-xl);background:var(--dsw-alias-bg-layer-1,#fff);--dac-lineage-accent:var(--dsw-alias-state-business-primary,#4b78e8)}
1460
1454
  .dac-lineage-list-title{display:flex;align-items:center;gap:8px;min-width:0}
@@ -4713,11 +4707,34 @@ window.__ModuleLoader__.load({
4713
4707
  * nowhere to appear, and the action would look like it did nothing.
4714
4708
  */
4715
4709
  function NoticeBanner({ t, notice, interaction, top, onDismiss, onViewArchived }) {
4710
+ // A new notice object restarts the Host Toast lifetime: the Host
4711
+ // Toast only restarts when remounted, so key it by a per-notice
4712
+ // sequence. (Render-phase ref update, the same pattern
4713
+ // `useSuccessNoticeTimer` uses for its latest values.)
4714
+ const noticeSequenceRef = _react.useRef(0);
4715
+ const lastNoticeRef = _react.useRef(null);
4716
+ if (lastNoticeRef.current !== notice) {
4717
+ lastNoticeRef.current = notice;
4718
+ noticeSequenceRef.current += 1;
4719
+ }
4716
4720
  if (notice === null) return null;
4717
4721
  if (notice.source === "archive") return (0, jsx.jsx)(NativeArchiveNotice, { notice, t, onViewArchived, onDismiss });
4718
4722
  const view = notice.action === "view-archived";
4719
4723
  const dismiss = (0, jsx.jsx)("button", { type: "button", "aria-label": t("notice.dismiss"), onClick: onDismiss, children: (0, jsx.jsx)(IconClose, {}) });
4720
4724
  if (notice.kind === "ok") {
4725
+ // Success feedback follows the Host Toast when the Host
4726
+ // provides it — its body portal keeps the banner clear of
4727
+ // clipping ancestors, and its positioning is the Host's.
4728
+ // Older Hosts keep the plugin's own fixed toast below.
4729
+ const Toast = previewPrimitives.Toast;
4730
+ if (Toast !== null) return (0, jsx.jsx)(Toast, {
4731
+ key: noticeSequenceRef.current,
4732
+ text: notice.text,
4733
+ tone: "success",
4734
+ holdMs: 4000,
4735
+ actions: view ? [{ label: t("archive.viewArchived"), onClick: onViewArchived }] : undefined,
4736
+ onDone: onDismiss,
4737
+ });
4721
4738
  return (0, jsx.jsxs)("div", {
4722
4739
  className: "dac-toast",
4723
4740
  ...interaction,
@@ -4966,7 +4983,7 @@ window.__ModuleLoader__.load({
4966
4983
  return markArchiveDialog(pageRef.current);
4967
4984
  }, [sessions, loadError]);
4968
4985
 
4969
- const noticeInteraction = useSuccessNoticeTimer(notice, notice?.kind === "ok" && notice.source !== "archive", () => setNotice((current) => current === notice ? null : current));
4986
+ const noticeInteraction = useSuccessNoticeTimer(notice, notice?.kind === "ok" && notice.source !== "archive" && previewPrimitives.Toast === null, () => setNotice((current) => current === notice ? null : current));
4970
4987
  const changePageMode = (mode) => {
4971
4988
  if (mode !== pageMode) setNotice(null);
4972
4989
  if (mode !== "archived") { setSelectionMode(false); setSelectedIds(new Set()); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-archived-chats",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "查看、搜索和管理会话归档,支持工作区批量归档、标签备注、ZIP 备份和会话谱系。",
5
5
  "license": "MIT",
6
6
  "author": "Ultronen",
@@ -76,7 +76,7 @@
76
76
  ],
77
77
  "dsh": {
78
78
  "engines": {
79
- "dsh": ">=0.1.0-rc.7 || 0.2.2-rc.1"
79
+ "dsh": ">=0.1.0-rc.7 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3"
80
80
  },
81
81
  "bundle": {
82
82
  "patch": "./cordis.patch.yml"
@@ -91,7 +91,7 @@
91
91
  },
92
92
  "peerDependencies": {
93
93
  "@deepseek-ai/cordis": "^4.0.1",
94
- "@deepseek-ai/dsh-session": ">=0.1.0-rc.7 <0.1.1-0 || >=0.1.1-rc.1 <0.1.2-0 || >=0.1.2-alpha.1 <0.2.0-0 || 0.1.5-rc.2 || 0.1.7-rc.2 || 0.2.0-rc.2 || 0.2.1-rc.2 || 0.2.1-rc.5 || 0.2.2-rc.1",
94
+ "@deepseek-ai/dsh-session": ">=0.1.0-rc.7 <0.1.1-0 || >=0.1.1-rc.1 <0.1.2-0 || >=0.1.2-alpha.1 <0.2.0-0 || 0.1.5-rc.2 || 0.1.7-rc.2 || 0.2.0-rc.2 || 0.2.1-rc.2 || 0.2.1-rc.5 || 0.2.2-rc.1 || 0.2.2-rc.2 || 0.2.2-rc.3",
95
95
  "react": "^18.2.0"
96
96
  },
97
97
  "peerDependenciesMeta": {
@@ -103,7 +103,7 @@
103
103
  "fflate": "^0.8.3"
104
104
  },
105
105
  "devDependencies": {
106
- "@deepseek-ai/dsh-session": "0.2.2-rc.1",
106
+ "@deepseek-ai/dsh-session": "0.2.2-rc.3",
107
107
  "typescript": "^5.9.3"
108
108
  },
109
109
  "overrides": {