@xrn1997/dsh-session-delete 0.6.0 → 0.7.0

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 (47) hide show
  1. package/README.md +22 -13
  2. package/THIRD_PARTY_NOTICES.md +179 -0
  3. package/cordis.patch.yml +1 -1
  4. package/docs/screenshots/screenshot-01.png +0 -0
  5. package/docs/screenshots/screenshot-02.png +0 -0
  6. package/docs/screenshots/screenshot-03.png +0 -0
  7. package/icon.svg +24 -18
  8. package/lib/client.js +1439 -410
  9. package/lib/index.js +475 -244
  10. package/lib/types/api/connection-route.d.ts +1 -1
  11. package/lib/types/api/dispatch.d.ts +1 -1
  12. package/lib/types/api/route-table.d.ts +12 -7
  13. package/lib/types/client/api-base.d.ts +19 -0
  14. package/lib/types/client/config-settings.d.ts +13 -0
  15. package/lib/types/client/context-menu-actions.d.ts +47 -0
  16. package/lib/types/client/context.d.ts +3 -0
  17. package/lib/types/client/copy.d.ts +42 -7
  18. package/lib/types/client/delete-confirm.d.ts +2 -2
  19. package/lib/types/client/detail-blocks.d.ts +25 -0
  20. package/lib/types/client/index.d.ts +3 -0
  21. package/lib/types/client/maintenance-settings.d.ts +5 -4
  22. package/lib/types/client/remote.d.ts +43 -15
  23. package/lib/types/client/settings-cards.d.ts +19 -0
  24. package/lib/types/client/settings-view.d.ts +9 -0
  25. package/lib/types/client/trash-detail.d.ts +1 -1
  26. package/lib/types/client/trash-nav.d.ts +5 -1
  27. package/lib/types/client/trash-view.d.ts +34 -5
  28. package/lib/types/client/ui/MenuItemButton.d.ts +1 -1
  29. package/lib/types/client/ui/Toast.d.ts +4 -1
  30. package/lib/types/client/ui/icons.d.ts +23 -7
  31. package/lib/types/client/ui/recipe.d.ts +2 -0
  32. package/lib/types/client/ui/styles.d.ts +2 -0
  33. package/lib/types/client/use-detail-pager.d.ts +33 -0
  34. package/lib/types/config.d.ts +10 -11
  35. package/lib/types/deps.d.ts +9 -1
  36. package/lib/types/index.d.ts +8 -5
  37. package/lib/types/ports/agent-handles.d.ts +10 -2
  38. package/lib/types/ports/fs-port.d.ts +10 -0
  39. package/lib/types/ports/host-port.d.ts +4 -2
  40. package/lib/types/shared/wire.d.ts +37 -5
  41. package/lib/types/trash/attachments.d.ts +15 -2
  42. package/lib/types/verbs/config.d.ts +25 -0
  43. package/lib/types/verbs/errors.d.ts +3 -1
  44. package/lib/types/verbs/permanent-removal.d.ts +10 -5
  45. package/locale/en.json +1 -1
  46. package/locale/zh.json +6 -6
  47. package/package.json +30 -19
package/README.md CHANGED
@@ -3,11 +3,11 @@
3
3
  [![CI](https://github.com/xrn1997/dsh-session-delete/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/xrn1997/dsh-session-delete/actions/workflows/ci.yml)
4
4
  [![npm version](https://img.shields.io/npm/v/@xrn1997/dsh-session-delete.svg)](https://www.npmjs.com/package/@xrn1997/dsh-session-delete)
5
5
  [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
6
- [![Tested with DSH 0.2.0-rc.2 … 0.2.1-rc.5](https://img.shields.io/badge/DSH-0.2.0--rc.2%20%E2%80%A6%200.2.1--rc.5-brightgreen)](#安装)
6
+ [![Tested with DSH 0.2.0-rc.2 … 0.2.2-rc.1](https://img.shields.io/badge/DSH-0.2.0--rc.2%20%E2%80%A6%200.2.2--rc.1-brightgreen)](#安装)
7
7
 
8
8
  给 DeepSeek Harness(DSH)加一个**删除会话**的能力。DSH 官方有归档、没有删除——归档只是把会话从列表里挪走,文件还在。本插件补上删除,并且让删除可恢复:删除 = 移入回收站,另有一个显式的「彻底删除」。
9
9
 
10
- ![回收站面板:左列是按项目分组的会话清单,右栏是选中那条的元信息与按块折叠的正文,页脚是整页唯一的实心红按钮「清空回收站…」](docs/screenshots/screenshot-01.png)
10
+ ![回收站面板:左列是按项目分组的无边框会话行(行右是恢复/彻底删除图标按钮),右栏是会话信息表、计量行与四档「工作步骤」正文,页脚是整页唯一的实心红按钮「清空回收站…」](docs/screenshots/screenshot-01.png)
11
11
 
12
12
  - 安装:`dsh plugin --profile <profile> add @xrn1997/dsh-session-delete`
13
13
  - 许可:[Apache-2.0](LICENSE)
@@ -34,8 +34,9 @@
34
34
  - **回收站面板**:左清单右详情,按项目分组、可折叠、可拖分栏;看得见正文再决定恢复不恢复
35
35
  - **详情看得到附件**:消息里的图片内联、可点开放大,普通文件给下载 chip;图片加载失败换成占位,不把破图留在屏上(文件下载失败没有页面内提示,浏览器可能把错误响应存成文件)
36
36
  - **恢复**:单条即点即回,批量带确认;回到各自的原项目目录(删除前你自己归档过的仍保持归档)
37
- - **显式彻底删除**:单条「彻底删除…」与页脚「清空回收站…」共用同一个二次确认;不自动过期
37
+ - **显式彻底删除**:单条彻底删除(行右的垃圾桶图标)与页脚「清空回收站…」共用同一个二次确认;不自动过期
38
38
  - **手动清理残留**:插件设置页有一张「维护」卡,随时检查两类残留——父会话已不在的子会话,和 `.dsh` 里已没有任何引用的图片副本;看过数量与体积再由你决定清不清,不自动检查、不自动清理
39
+ - **可调项有表单**:插件详情页的「可调项」卡直接改三只旋钮(孤儿预览条数、附件响应上限、JSON 扫描上限),保存写回 profile 的 patch 层;也可以继续直接改 `cordis.patch.yml`
39
40
  - **失败不吞**:宿主读不到时把原文上屏并给「重试」;不可用时不注册任何入口
40
41
  - **文案随宿主语言**:中文 / English 挂在宿主 locale 服务上
41
42
 
@@ -58,8 +59,9 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
58
59
 
59
60
  **兼容性分两层,别混**:
60
61
 
61
- - **装得上**由 `package.json` 的 `engines.dsh` 决定:宿主拿运行中的版本比这个区间,不满足即拒绝并回滚。窗口是 **`>=0.1.7-rc.2 <0.3.0-0`**(预发布版本参与匹配)。地板是**完整功能**的最低代次:`0.1.7-rc.2` 在 CLI 台架上验过四个槽位齐全、激活零错误;更低的 `0.1.7-rc.1` 缺行首勾选槽位,`0.1.5` 及以前连会话行入口都没有。
62
- - **真跑过**由 `dsh.compatibility.dshReleases` 记录,只列桌面真机实测过的宿主:**DSH Desktop 0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.5**(均 `compatible`)。窗口内的其他代次装得上但没在桌面真机上验过;窗口外的一律拒装。
62
+ - **装得上**由 `package.json` 的 `engines.dsh` 决定:宿主拿运行中的版本比这个区间,不满足即拒绝并回滚。窗口是 **`>=0.1.7-rc.2 <0.3.0-0`**(预发布版本参与匹配)。地板由两件硬依赖定:`sidebar.session.row.leading`(0.1.7-rc.2 首现)与 `workspaceRegistry.unarchiveSession`;`0.1.7-rc.2` 是第一个同时具备全部所需槽位与服务方法的代次,CLI 台架验过四个槽位齐全、激活零错误。更低的 `0.1.7-rc.1` 缺行首勾选槽位;0.1.7-alpha、0.1.6、0.1.5 还缺会话行菜单/行尾槽位或 `unarchiveSession`,**不要装**。
63
+ - **真跑过**由 `xrn1997.dshReleases` 记录,只列桌面真机实测过的宿主:**DSH Desktop 0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.5、0.2.2-rc.1**(均 `compatible`)。窗口内的其他代次装得上但没在桌面真机上验过,不作为推荐目标;窗口外的一律拒装。
64
+ - **部署注意**:exact Fetch 路由的 owner principal 校验(非 owner 回 403)自 `0.2.1-alpha.3` 起才有;更早的代次(含 `0.2.0-rc.2`)只有宿主 `/api` 的 trusted-host / 浏览器认证。单机 web / 桌面标准组合可用;要跑多 Peer 部署,优先名单里带这道校验的实测代次(`0.2.1-rc.1` 起)。
63
65
 
64
66
  ## 用法
65
67
 
@@ -73,9 +75,9 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
73
75
 
74
76
  ![批量删除模式:两行已勾选,浮条显示「已选 2 条」与展开的已选清单,动作是「移入回收站 2 条」与「退出多选」](docs/screenshots/screenshot-03.png)
75
77
 
76
- **管回收站**:侧栏面板里的「回收站」一行(与「插件」同层)。左清单右详情(中央列更窄时改成下钻,「← 返回清单」回来),按项目分组、组头可折叠、两栏之间那根线可拖。详情按块展示这条会话的对话全量:你的提问、宿主注入的上下文、助手文字与思考、工具调用与结果、系统消息与压缩摘要。注入、思考、工具等默认折叠,可逐块或一键展开;长会话顶部有「加载更早」。助手文字与思考按 Markdown 排版,你的提问保持原话。跟着父会话一起进来的子会话不占清单行,入口在父详情的「子会话」段:点一条即切到那个孩子的详情(元信息、正文与分页同一套),头部「← 返回父会话」回到父。
78
+ **管回收站**:侧栏面板里的「回收站」一行(与「插件」同层)。左清单右详情(中央列更窄时改成下钻,「← 返回清单」回来),按项目分组、组头可折叠、两栏之间那根线可拖。详情按块展示这条会话的对话全量:你的提问、宿主注入的上下文、助手文字与思考、工具调用与结果、系统消息与压缩摘要。工作步骤有四档(简洁 / 标准 / 详细 / 完全展开),默认「标准」把连续的过程块收成「工作步骤」一行,点开仍逐条折叠;长会话可「加载更早」,简洁档会自动继续往前翻,直到出现对话内容、翻完或到达页数上限。助手文字与思考按 Markdown 排版,你的提问保持原话。跟着父会话一起进来的子会话不占清单行,入口在父详情的「子会话」段:点一条即切到那个孩子的详情(会话信息、正文与分页同一套),头部「← 返回父会话」回到父。
77
79
 
78
- - **恢复**:单条不需要确认框,放回原项目目录(删除前你自己归档过的仍保持归档;旧版本留下的归档态条目会迁移式取消归档)。原工作区已被删掉也照常恢复(跳过账本挂接,归入「未分组」),清单行在点之前就说这句。
80
+ - **恢复**:单条不需要确认框,放回原项目目录(删除前你自己归档过的仍保持归档;旧版本留下的归档态条目会迁移式取消归档)。原工作区已被删掉也照常恢复(跳过账本挂接,恢复后在宿主的会话列表里归入「未分组」);回收站清单把这些条目直接归在「未分组」组里,点之前就看得见。
79
81
  - **批量恢复 / 批量彻底删除**:工具栏「多选」进入,页脚换成两颗动作按钮。组头那颗是**三态**勾选框,点它选上这个项目的全部会话(含折叠起来看不见的)。两者都先确认,逐条执行、失败不连坐,失败的原文留在它自己那行。
80
82
  - **彻底删除 / 清空**:共用同一个二次确认。单条那张卡片报的是**这一次会释放多少**(父 + 跟着进来的孩子 + 仍留在盘上的后代,与头部合计共用同一算式)。「清空回收站…」先把回收站目录与清单对账一遍再清,所以手工搬进 `session-trash/` 的**认得出**的目录也归它管;认不出的外人目录不动也不列。
81
83
  - **残留维护在插件设置页**:父会话已不在(既不在会话列表、也不在回收站清册)的子会话宿主客户端整排不显示,回收站里也不会有;`.dsh` 附件库里也可能留下没有任何引用的图片副本。插件详情页的「维护」卡分「孤儿会话」「孤儿附件」两段,都是**手动**:点「检查」只读,看过数量、体积与图片缩略图再确认清理,清完自动重查;永久删除、不搬进回收站、**绝不自动跑**。回收站面板不再扫描残留,顶上只保留彻底删除 / 清空之后的附件清理提示。
@@ -97,7 +99,7 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
97
99
 
98
100
  ## 可调项
99
101
 
100
- 三只旋钮都有默认值,在宿主 profile 的 `cordis.patch.yml` 里改;不需要改代码:
102
+ 三只旋钮都有默认值;可以在宿主 profile 的 `cordis.patch.yml` 里改,也可以在插件设置页的「可调项」卡里改,都不需要改代码:
101
103
 
102
104
  | 键 | 默认值 | 作用 |
103
105
  | --- | --- | --- |
@@ -107,7 +109,7 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
107
109
 
108
110
  ```yaml
109
111
  - insert:
110
- - id: session-delete
112
+ - id: xrn1997-session-delete
111
113
  name: '@xrn1997/dsh-session-delete'
112
114
  config:
113
115
  orphanPreviewLimit: 200
@@ -115,7 +117,10 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
115
117
  maxJsonRefBytes: 10485760
116
118
  ```
117
119
 
118
- 配置在插件激活时归一;未知键、非整数或越界会让这一条激活失败(不会用半套配置启动)。宿主的配置页不保证渲染这三个字段(本仓不引宿主 schema 库,ADR-0037),以 `cordis.patch.yml` 为准。
120
+ 0.6.1 及以前的行 id 是 `session-delete`;如果你的 profile 覆盖过这一行,升级后请把 id 同步成
121
+ `xrn1997-session-delete`,否则那份覆盖不再命中本行。
122
+
123
+ 配置在插件激活时归一;未知键、非整数或越界会让这一条激活失败(不会用半套配置启动)。宿主的字段投影仍不认这枚手写的 Standard Schema(0.2.2-rc.1 实测 `Config.listConfigs` 回 `status: unsupported`),所以字段表单由插件设置页的「可调项」卡提供([ADR-0043](docs/adr/0043-options-form-through-config-route.md)):三只数字输入 + 保存,写回 profile 的 patch 层(宿主的 `configEditor.edit`,保存后这一行会重启)。也可以继续直接改 `cordis.patch.yml`,两条路改的是同一份配置。
119
124
 
120
125
  ## 界面语言
121
126
 
@@ -141,7 +146,7 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
141
146
 
142
147
  **把工作区删了,回收站里的会话还能恢复吗?**
143
148
 
144
- 能。宿主的「删除工作区」只删注册、保留目录和每个会话日志;恢复照常回盘,只是跳过账本挂接,会话落在「未分组」。清单行和批量恢复确认框都会在点之前说明。
149
+ 能。宿主的「删除工作区」只删注册、保留目录和每个会话日志;恢复照常回盘,只是跳过账本挂接,会话落在「未分组」。回收站清单里这类条目归在「未分组」组,批量恢复确认框也会逐条说明。
145
150
 
146
151
  **我把会话目录从回收站手工搬回 `sessions/` 了,为什么列表里没有?**
147
152
 
@@ -149,7 +154,7 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
149
154
 
150
155
  **把宿主绑到局域网地址后,插件入口不出现,或操作报「需要宿主的 Web 身份」/「非受信来源」?**
151
156
 
152
- 本插件把九段注册到宿主的 exact Fetch 路由(`/api/dsh-session-delete-api/...`),取数门槛就是宿主 `/api` 的那一套:浏览器、桌面壳的请求转发与本机 `curl` 都需要宿主签发的 Web 身份(`dsh web` 那次访问换来的 cookie),不再有回环免身份,也没有旧前缀 fallback。支持面是 web UI 与桌面端,二者都装 `client-connection`;入口探测回 401/403 时插件不注册任何入口(页面表现为插件不存在),不会摆出一个点下去必然失败的入口;操作中途身份失效,原文「需要宿主的 Web 身份」上屏。原文写「非受信来源」说的是另一件事:这条请求的归属不成立,`Host` 不被认为是本次部署的地址,或 `Origin` 与它对不上(宿主 `/api` 查 Host / `sec-fetch-site` / Origin;附件字节段另有插件的同源取数闸,同站/跨站页面与 authority 对不上的 `Origin` / `Referer` 都拒)。常见成因有两种:用自定义域名(含 hosts 文件)访问,却没把它写进宿主 `client-connection` 的 `trustedHosts`——宿主自己的页面同样要求这一条;或者反向代理改写了 `Host`,它必须保留客户端的原始 `Host`。绑定时另有一条前提:宿主只接受具体接口地址、拒绝 `0.0.0.0`,请绑到某个具体 IP(例如 `webserver.host: 192.168.50.199`)。
157
+ 本插件把十段注册到宿主的 exact Fetch 路由(`/api/dsh-session-delete-api/...`),取数门槛就是宿主 `/api` 的那一套:浏览器、桌面壳的请求转发与本机 `curl` 都需要宿主签发的 Web 身份(`dsh web` 那次访问换来的 cookie),不再有回环免身份,也没有旧前缀 fallback。支持面是 web UI 与桌面端,二者都装 `client-connection`;入口探测回 401/403 时插件不注册任何入口(页面表现为插件不存在),不会摆出一个点下去必然失败的入口;操作中途身份失效,原文「需要宿主的 Web 身份」上屏。原文写「非受信来源」说的是另一件事:这条请求的归属不成立,`Host` 不被认为是本次部署的地址,或 `Origin` 与它对不上(宿主 `/api` 查 Host / `sec-fetch-site` / Origin;附件字节段另有插件的同源取数闸,同站/跨站页面与 authority 对不上的 `Origin` / `Referer` 都拒)。常见成因有两种:用自定义域名(含 hosts 文件)访问,却没把它写进宿主 `client-connection` 的 `trustedHosts`——宿主自己的页面同样要求这一条;或者反向代理改写了 `Host`,它必须保留客户端的原始 `Host`。绑定时另有一条前提:宿主只接受具体接口地址、拒绝 `0.0.0.0`,请绑到某个具体 IP(例如 `webserver.host: 192.168.50.199`)。
153
158
 
154
159
  ## 开发
155
160
 
@@ -161,4 +166,8 @@ dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
161
166
 
162
167
  ## 许可
163
168
 
164
- [Apache-2.0](LICENSE)
169
+ [Apache-2.0](LICENSE)。
170
+
171
+ 图标形状、控件与 Markdown 样式派生自 DeepSeek Harness 的 MIT 许可代码,`lib/client.js` 另内联了
172
+ `react-markdown` / `remark-gfm` 及其传递依赖(MIT / ISC);来源、落点与许可全文见
173
+ [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md)。
@@ -0,0 +1,179 @@
1
+ # Third-Party Notices
2
+
3
+ 本包整体以 [Apache-2.0](LICENSE) 发布。下列文件**逐字派生**自 DeepSeek Harness
4
+ (`deepseek-ai/deepseek-harness`)中以 **MIT** 许可发布的客户端包,继续受 MIT 约束;本文件保留其
5
+ 版权与许可声明,并记录来源、落点与改写。另有一部分构建期依赖被内联进 `lib/client.js`,各自的
6
+ 许可证见第 2 节。
7
+
8
+ 抄录代次:`@deepseek-ai/dsh-client-ui-primitives@0.2.0-rc.2`(`ui.css` 与 `icon.svg` 的文件头
9
+ 记录);`ui-conversation` / `ui-workspace` 两张样式表按同一代宿主产物抄录,具体出处见 `ui.css`
10
+ 头注。各副本的有意差异以文件头注为准。
11
+
12
+ ## 1. 来源与落点
13
+
14
+ | 上游包(MIT) | 上游产物 | 本包中的副本 | 改写 |
15
+ | --- | --- | --- | --- |
16
+ | `@deepseek-ai/dsh-client-ui-primitives` | `IconTrashOutlineRegular` 的图标形状 | `icon.svg` | 颜色分浅/深两档写死(`#0f1115` / `#f9fafb`,取自宿主 `--dsw-alias-label-primary`),由 SVG 内部的 `prefers-color-scheme` 切换(图片形式的 SVG 不继承 `currentColor`);不带 `aria-hidden`(可及名由承载它的宿主卡片提供) |
17
+ | `@deepseek-ai/dsh-client-ui-primitives` | 图标集的明文产物(恢复箭头除外) | `src/client/ui/icons.tsx` | 只保留本插件用到的图标;官方字形几何、`viewBox`、`strokeWidth` 不动;只暴露 `size`;唯一自绘的 `IconRestoreOutlineRegular` 不声称派生自官方图标集(其 ↩ 字形为本插件自绘,见文件头注) |
18
+ | `@deepseek-ai/dsh-client-ui-primitives` | `Button` / `Tag` / `Modal` / `Tooltip` / `Toast` / `MenuItemButton` / `Checkbox` 的明文实现,以及 `top-layer.ts` / `format.ts` | `src/client/ui/Button.tsx`、`src/client/ui/Tag.tsx`、`src/client/ui/Modal.tsx`、`src/client/ui/Tooltip.tsx`、`src/client/ui/Toast.tsx`、`src/client/ui/MenuItemButton.tsx`、`src/client/ui/Checkbox.tsx`、`src/client/ui/top-layer.ts`、`src/client/ui/format.ts` | 只收本插件用到的变体与行为;组件 API 收窄;文件头注点名与官方的差异 |
19
+ | `@deepseek-ai/dsh-client-ui-primitives` | `Button` / `Tag` / `Modal` / `Tooltip` / `Toast` / `Menu` / `Checkbox` / `DisclosureRow` 的 CSS Module 明文 | `src/client/ui/ui.css` | 类名加 `sd-` 前缀;`@keyframes` 改名;配色与几何走 `--sd-*` 别名层(解析到宿主 `--dsw-*` token);只收用到的变体;文件头点名的七处本插件自造差异 |
20
+ | `@deepseek-ai/dsh-client-ui-primitives` | `markdown/MarkdownText.module.css`(`.markdown` 一支)、`markdown/CodeBlock.module.css`(`pre`) | `src/client/ui/markdown.css` | 选择器适配 react-markdown 产出的 DOM;文件头点名的三处有意差异 |
21
+ | `@deepseek-ai/dsh-client-ui-conversation` | `ConversationRoot.module.css` 的 `.widthHandle` 族 | `src/client/ui/ui.css` | 同上(类名前缀 / token 别名层) |
22
+ | `@deepseek-ai/dsh-client-ui-workspace` | `Rows.module.css` 的 `.iconButton` 族 | `src/client/ui/ui.css` | 同上(类名前缀 / token 别名层) |
23
+
24
+ 这些副本只保留形状、布局与交互基线;本包不因收录它们而主张对上游素材的著作权。
25
+
26
+ ## 2. 构建期内联的 npm 依赖
27
+
28
+ `lib/client.js` 内联了 `react-markdown`、`remark-gfm` 及其传递依赖;`react` / `react-dom` 由宿主
29
+ 平台表提供,不在分发物内。本包的**生产依赖为空**(这条内联闭包住 `devDependencies`,只在构建期进产物),
30
+ 所以 `pnpm licenses list --prod` 是空的;下表是 `pnpm-lock.yaml` 里从 `react-markdown` / `remark-gfm`
31
+ 可达的**运行期**闭包(`@types/*` 等只在类型面出现、不进产物)。升级依赖后按同一份 lockfile 重跑
32
+ `pnpm licenses list --dev`,只取这条闭包核对并更新。
33
+
34
+ | 包 | 版本 | 许可证 | 作者 |
35
+ | --- | --- | --- | --- |
36
+ | `@ungap/structured-clone` | 1.4.0 | ISC | Andrea Giammarchi |
37
+ | `bail` | 2.0.2 | MIT | Titus Wormer |
38
+ | `ccount` | 2.0.1 | MIT | Titus Wormer |
39
+ | `character-entities` | 2.0.2 | MIT | Titus Wormer |
40
+ | `character-entities-html4` | 2.1.0 | MIT | Titus Wormer |
41
+ | `character-entities-legacy` | 3.0.0 | MIT | Titus Wormer |
42
+ | `character-reference-invalid` | 2.0.1 | MIT | Titus Wormer |
43
+ | `comma-separated-tokens` | 2.0.3 | MIT | Titus Wormer |
44
+ | `debug` | 4.4.3 | MIT | Josh Junon |
45
+ | `decode-named-character-reference` | 1.3.0 | MIT | Titus Wormer |
46
+ | `dequal` | 2.0.3 | MIT | Luke Edwards |
47
+ | `devlop` | 1.1.0 | MIT | Titus Wormer |
48
+ | `escape-string-regexp` | 4.0.0, 5.0.0 | MIT | Sindre Sorhus |
49
+ | `estree-util-is-identifier-name` | 3.0.0 | MIT | Titus Wormer |
50
+ | `extend` | 3.0.2 | MIT | Stefan Thomas |
51
+ | `hast-util-to-jsx-runtime` | 2.3.6 | MIT | Titus Wormer |
52
+ | `hast-util-whitespace` | 3.0.0 | MIT | Titus Wormer |
53
+ | `html-url-attributes` | 3.0.1 | MIT | Titus Wormer |
54
+ | `inline-style-parser` | 0.2.7 | MIT | — |
55
+ | `is-alphabetical` | 2.0.1 | MIT | Titus Wormer |
56
+ | `is-alphanumerical` | 2.0.1 | MIT | Titus Wormer |
57
+ | `is-decimal` | 2.0.1 | MIT | Titus Wormer |
58
+ | `is-hexadecimal` | 2.0.1 | MIT | Titus Wormer |
59
+ | `is-plain-obj` | 4.1.0 | MIT | Sindre Sorhus |
60
+ | `longest-streak` | 3.1.0 | MIT | Titus Wormer |
61
+ | `markdown-table` | 3.0.4 | MIT | Titus Wormer |
62
+ | `mdast-util-find-and-replace` | 3.0.3 | MIT | Titus Wormer |
63
+ | `mdast-util-from-markdown` | 2.1.0 | MIT | Titus Wormer |
64
+ | `mdast-util-gfm` | 3.1.0 | MIT | Titus Wormer |
65
+ | `mdast-util-gfm-autolink-literal` | 2.0.1 | MIT | Titus Wormer |
66
+ | `mdast-util-gfm-footnote` | 2.1.0 | MIT | Titus Wormer |
67
+ | `mdast-util-gfm-strikethrough` | 2.0.1 | MIT | Titus Wormer |
68
+ | `mdast-util-gfm-table` | 2.0.0 | MIT | Titus Wormer |
69
+ | `mdast-util-gfm-task-list-item` | 2.0.0 | MIT | Titus Wormer |
70
+ | `mdast-util-mdx-expression` | 2.0.1 | MIT | Titus Wormer |
71
+ | `mdast-util-mdx-jsx` | 3.2.0 | MIT | Titus Wormer |
72
+ | `mdast-util-mdxjs-esm` | 2.0.1 | MIT | Titus Wormer |
73
+ | `mdast-util-phrasing` | 4.1.0 | MIT | Victor Felder |
74
+ | `mdast-util-to-hast` | 13.2.1 | MIT | Titus Wormer |
75
+ | `mdast-util-to-markdown` | 2.2.0 | MIT | Titus Wormer |
76
+ | `mdast-util-to-string` | 4.0.0 | MIT | Titus Wormer |
77
+ | `micromark` | 4.0.3 | MIT | Titus Wormer |
78
+ | `micromark-core-commonmark` | 2.0.4 | MIT | Titus Wormer |
79
+ | `micromark-extension-gfm` | 3.0.0 | MIT | Titus Wormer |
80
+ | `micromark-extension-gfm-autolink-literal` | 2.1.0 | MIT | Titus Wormer |
81
+ | `micromark-extension-gfm-footnote` | 2.1.0 | MIT | Titus Wormer |
82
+ | `micromark-extension-gfm-strikethrough` | 2.1.0 | MIT | Titus Wormer |
83
+ | `micromark-extension-gfm-table` | 2.1.2 | MIT | Titus Wormer |
84
+ | `micromark-extension-gfm-tagfilter` | 2.0.0 | MIT | Titus Wormer |
85
+ | `micromark-extension-gfm-task-list-item` | 2.1.0 | MIT | Titus Wormer |
86
+ | `micromark-factory-destination` | 2.0.1 | MIT | Titus Wormer |
87
+ | `micromark-factory-label` | 2.0.1 | MIT | Titus Wormer |
88
+ | `micromark-factory-space` | 2.1.0 | MIT | Titus Wormer |
89
+ | `micromark-factory-title` | 2.0.1 | MIT | Titus Wormer |
90
+ | `micromark-factory-whitespace` | 2.0.1 | MIT | Titus Wormer |
91
+ | `micromark-util-character` | 2.1.1 | MIT | Titus Wormer |
92
+ | `micromark-util-chunked` | 2.0.1 | MIT | Titus Wormer |
93
+ | `micromark-util-classify-character` | 2.0.1 | MIT | Titus Wormer |
94
+ | `micromark-util-combine-extensions` | 2.0.1 | MIT | Titus Wormer |
95
+ | `micromark-util-decode-numeric-character-reference` | 2.0.2 | MIT | Titus Wormer |
96
+ | `micromark-util-decode-string` | 2.0.1 | MIT | Titus Wormer |
97
+ | `micromark-util-edit-map` | 1.0.0 | MIT | Titus Wormer |
98
+ | `micromark-util-encode` | 2.0.1 | MIT | Titus Wormer |
99
+ | `micromark-util-html-tag-name` | 2.0.1 | MIT | Titus Wormer |
100
+ | `micromark-util-normalize-identifier` | 2.0.1 | MIT | Titus Wormer |
101
+ | `micromark-util-resolve-all` | 2.0.1 | MIT | Titus Wormer |
102
+ | `micromark-util-sanitize-uri` | 2.0.1 | MIT | Titus Wormer |
103
+ | `micromark-util-subtokenize` | 2.1.0 | MIT | Titus Wormer |
104
+ | `micromark-util-symbol` | 2.0.1 | MIT | Titus Wormer |
105
+ | `micromark-util-types` | 2.0.3 | MIT | Titus Wormer |
106
+ | `ms` | 2.1.3 | MIT | — |
107
+ | `parse-entities` | 4.0.2 | MIT | Titus Wormer |
108
+ | `property-information` | 7.2.0 | MIT | Titus Wormer |
109
+ | `react-markdown` | 10.1.0 | MIT | Espen Hovlandsdal |
110
+ | `remark-gfm` | 4.0.1 | MIT | Titus Wormer |
111
+ | `remark-parse` | 11.0.0 | MIT | Titus Wormer |
112
+ | `remark-rehype` | 11.1.2 | MIT | Titus Wormer |
113
+ | `remark-stringify` | 11.0.0 | MIT | Titus Wormer |
114
+ | `space-separated-tokens` | 2.0.2 | MIT | Titus Wormer |
115
+ | `stringify-entities` | 4.0.4 | MIT | Titus Wormer |
116
+ | `style-to-js` | 1.1.21 | MIT | Mark |
117
+ | `style-to-object` | 1.0.14 | MIT | Mark |
118
+ | `trim-lines` | 3.0.1 | MIT | Titus Wormer |
119
+ | `trough` | 2.2.0 | MIT | Titus Wormer |
120
+ | `unified` | 11.0.5 | MIT | Titus Wormer |
121
+ | `unist-util-is` | 6.0.1 | MIT | Titus Wormer |
122
+ | `unist-util-position` | 5.0.0 | MIT | Titus Wormer |
123
+ | `unist-util-stringify-position` | 4.0.0 | MIT | Titus Wormer |
124
+ | `unist-util-visit` | 5.1.0 | MIT | Titus Wormer |
125
+ | `unist-util-visit-parents` | 6.0.2 | MIT | Titus Wormer |
126
+ | `vfile` | 6.0.3 | MIT | Titus Wormer |
127
+ | `vfile-message` | 4.0.3 | MIT | Titus Wormer |
128
+ | `zwitch` | 2.0.4 | MIT | Titus Wormer |
129
+
130
+ ## 许可全文
131
+
132
+ ### MIT
133
+
134
+ 本节适用于第 1 节的抄本(版权人 `DeepSeek`,`Copyright (c) 2026 DeepSeek`)与第 2 节表格里的
135
+ 构建期依赖(版权人见上表,各包 LICENSE 原文)。
136
+
137
+ ```text
138
+ MIT License
139
+
140
+ Copyright (c) 2026 DeepSeek
141
+
142
+ Permission is hereby granted, free of charge, to any person obtaining a copy
143
+ of this software and associated documentation files (the "Software"), to deal
144
+ in the Software without restriction, including without limitation the rights
145
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
146
+ copies of the Software, and to permit persons to whom the Software is
147
+ furnished to do so, subject to the following conditions:
148
+
149
+ The above copyright notice and this permission notice shall be included in all
150
+ copies or substantial portions of the Software.
151
+
152
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
153
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
154
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
155
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
156
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
157
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
158
+ SOFTWARE.
159
+ ```
160
+
161
+ ### ISC
162
+
163
+ ```text
164
+ ISC License
165
+
166
+ Copyright (c) 2021, Andrea Giammarchi, @WebReflection
167
+
168
+ Permission to use, copy, modify, and/or distribute this software for any
169
+ purpose with or without fee is hereby granted, provided that the above
170
+ copyright notice and this permission notice appear in all copies.
171
+
172
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
173
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
174
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
175
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
176
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
177
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
178
+ PERFORMANCE OF THIS SOFTWARE.
179
+ ```
package/cordis.patch.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  - insert:
2
- - id: session-delete
2
+ - id: xrn1997-session-delete
3
3
  name: '@xrn1997/dsh-session-delete'
4
4
  config:
5
5
  orphanPreviewLimit: 200
package/icon.svg CHANGED
@@ -1,18 +1,24 @@
1
- <!--
2
- 插件卡片/组件行的图标(`package.json` 顶层 `icon`,宿主按**图片**读它、不内联 HTML)。
3
-
4
- 形状逐字取自 `@deepseek-ai/dsh-client-ui-primitives@0.2.0-rc.2` 的 `IconTrashOutlineRegular`
5
- (与插件界面里那枚垃圾桶图标同源)。
6
-
7
- 两处与组件版不同:
8
- 1. 颜色写死。图片形式的 SVG **不继承 `currentColor`**(它是一份独立文档),所以不能像组件里那样
9
- 吃宿主的字色 ⇒ 取一个浅色/深色底上都能读的中灰。
10
- 2. 不带 `aria-hidden`。这不是行内构件,可及名由承载它的宿主卡片提供。
11
- -->
12
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" stroke="#8a9099" stroke-width="1">
13
- <path d="M1.28149 3.88831H14.7187" />
14
- <path d="M5.41602 3.88833V2.47962C5.41602 2.29282 5.52492 2.11366 5.71876 1.98157C5.9126 1.84948 6.17551 1.77527 6.44964 1.77527H9.55053C9.82466 1.77527 10.0876 1.84948 10.2814 1.98157C10.4753 2.11366 10.5842 2.29282 10.5842 2.47962V3.88833" />
15
- <path d="M2.57349 3.88831L3.19366 13.2943C3.21937 13.5502 3.33952 13.7872 3.53065 13.9593C3.72178 14.1313 3.97016 14.2259 4.22729 14.2246H11.7728C12.0299 14.2259 12.2783 14.1313 12.4694 13.9593C12.6605 13.7872 12.7807 13.5502 12.8064 13.2943L13.4266 3.88831" />
16
- <path d="M6.44946 6.98926V11.1238" />
17
- <path d="M9.55054 6.98926V11.1238" />
18
- </svg>
1
+ <!--
2
+ 插件卡片/组件行的图标(`package.json` 顶层 `icon`,宿主按**图片**读它、不内联 HTML)。
3
+
4
+ 形状逐字取自 `@deepseek-ai/dsh-client-ui-primitives@0.2.0-rc.2` 的 `IconTrashOutlineRegular`
5
+ (与插件界面里那枚垃圾桶图标同源)。
6
+
7
+ 两处与组件版不同:
8
+ 1. 颜色由 SVG 内部的 `prefers-color-scheme` 跟随宿主根节点的 `color-scheme`(DSH 的
9
+ ThemePresenter 会按解析后的主题写 `documentElement.style.colorScheme`)。图片形式的 SVG
10
+ **不继承 `currentColor`**(它是一份独立文档),所以不能像组件里那样吃宿主的字色;
11
+ 两档取自宿主 `dsw-alias-label-primary` token(浅色 `#0f1115` / 深色 `#f9fafb`)。
12
+ 2. 不带 `aria-hidden`。这不是行内构件,可及名由承载它的宿主卡片提供。
13
+ -->
14
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" stroke-width="1">
15
+ <style>
16
+ .ink { stroke: #0f1115; }
17
+ @media (prefers-color-scheme: dark) { .ink { stroke: #f9fafb; } }
18
+ </style>
19
+ <path class="ink" d="M1.28149 3.88831H14.7187" />
20
+ <path class="ink" d="M5.41602 3.88833V2.47962C5.41602 2.29282 5.52492 2.11366 5.71876 1.98157C5.9126 1.84948 6.17551 1.77527 6.44964 1.77527H9.55053C9.82466 1.77527 10.0876 1.84948 10.2814 1.98157C10.4753 2.11366 10.5842 2.29282 10.5842 2.47962V3.88833" />
21
+ <path class="ink" d="M2.57349 3.88831L3.19366 13.2943C3.21937 13.5502 3.33952 13.7872 3.53065 13.9593C3.72178 14.1313 3.97016 14.2259 4.22729 14.2246H11.7728C12.0299 14.2259 12.2783 14.1313 12.4694 13.9593C12.6605 13.7872 12.7807 13.5502 12.8064 13.2943L13.4266 3.88831" />
22
+ <path class="ink" d="M6.44946 6.98926V11.1238" />
23
+ <path class="ink" d="M9.55054 6.98926V11.1238" />
24
+ </svg>