dsh-session-manager 0.5.3 → 0.5.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.
- package/CHANGELOG.md +13 -9
- package/README.md +55 -32
- package/README.zh.md +56 -31
- package/lib/client.js +2 -3
- package/package.json +9 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
|
|
2
|
+
## 0.5.4 — 2026-09-30
|
|
3
|
+
|
|
4
|
+
- **docs**: update project description and metadata to reflect official Web UI and Desktop app support; clarify client synchronization, install profiles, and runtime requirements.
|
|
5
|
+
|
|
2
6
|
## 0.5.3 — 2026-09-26
|
|
3
7
|
|
|
4
8
|
- **fix**: issue #17.2 (panel `MoveDialog` now forwards `t` so labels render translated) and issue #17.4 (row Open unarchives archived sessions first).
|
|
@@ -15,7 +19,7 @@
|
|
|
15
19
|
|
|
16
20
|
## 0.5.2 — 2026-09-23
|
|
17
21
|
|
|
18
|
-
- **fix(bulk management)**: add a missing entry-point for batch operations. The previous build gated the row checkboxes and `BulkActionBar` behind `selectedIds.size > 0`, so neither was ever reachable from the UI. A new **Select
|
|
22
|
+
- **fix(bulk management)**: add a missing entry-point for batch operations. The previous build gated the row checkboxes and `BulkActionBar` behind `selectedIds.size > 0`, so neither was ever reachable from the UI. A new **Select** toggle in the panel header now reveals the row checkboxes and the bulk action bar; toggling it a second time clears the selection and exits selection mode. Selection-mode state is also reset whenever the panel closes.
|
|
19
23
|
|
|
20
24
|
- **fix(bulk management)**: the SessionManagerPanel had a duplicated `return` statement above the bulk-dialog declarations (`bulkPreviewDialog`, `bulkProgressDialog`, `bulkResultDialog`, `bulkTagDialog`, `bulkPriorityDialog`, `bulkMoveDialog`, `bulkPresetDialog`). The early return made every bulk dialog unreachable, so the user never saw the confirmation preview, progress bar, or per-id success / failed / skipped result dialog. The duplicate return has been removed; the panel now keeps every dialog declaration live and renders them all in the final Fragment.
|
|
21
25
|
|
|
@@ -27,7 +31,7 @@
|
|
|
27
31
|
|
|
28
32
|
2. **favorite / review / set-priority / add-tags / remove-tags** threw `annotations is not a function` on the first id because the original `runBatchAction` signature destructured `annotations` from its parameter object and callers did not pass it. `runBatchAction` now resolves the annotation accessor from the surrounding closure so it can never again be silently `undefined`.
|
|
29
33
|
|
|
30
|
-
3. **unfavorite / unreview** were not in the `BATCH_ACTIONS` set and were rejected with `action
|
|
34
|
+
3. **unfavorite / unreview** were not in the `BATCH_ACTIONS` set and were rejected with `action not supported: unfavorite`. Both are now first-class annotation actions; `annotationPatchFromBatchAction` maps them to `{ favorite: false }` / `{ reviewLater: false }`.
|
|
31
35
|
|
|
32
36
|
4. the `BATCH_ACTIONS` set, the annotation action set inside `runBatchAction`, and `annotationPatchFromBatchAction` have been kept in sync.
|
|
33
37
|
|
|
@@ -46,19 +50,19 @@
|
|
|
46
50
|
|
|
47
51
|
- **feat(annotations)**: add favorites, manual review flags, tags, multiline notes and priority (1 highest → 5 lowest, default **3 Normal**) to the manager and title bar. Add annotation search/filtering and priority sorting. Persist separately from session history with atomic writes, an inter-process lock, strict limits, conflict detection and deletion cleanup; synchronize browser surfaces and preserve unsaved drafts on failure.
|
|
48
52
|
|
|
49
|
-
- **feat(annotations)**: add an opt-in AI-assisted workflow in the annotation editor. A **Copy Prompt**
|
|
53
|
+
- **feat(annotations)**: add an opt-in AI-assisted workflow in the annotation editor. A **Copy Prompt** button copies a strict-JSON prompt (Chinese or English, matched to the UI locale) to the clipboard for the user to paste into the current conversation. An **Import** button reads the clipboard, extracts the first JSON object (tolerating Markdown fences, conversational wrappers, smart quotes, stray backslashes and a leading BOM), validates tags/note/priority against the same limits, and populates the editor fields. Oversized notes are truncated and flagged in the status message; invalid tags/priority are dropped with reasons. Importing into a dirty draft triggers a confirm. Both buttons stay out of the conversation history — the plugin never calls the model directly. The parser is also exported as `parseClipboardAnnotation` from `lib/clipboard-parser.js` for tests and potential server-side reuse.
|
|
50
54
|
|
|
51
55
|
- **feat(annotations)**: add inline clear buttons inside the **Tags** and **Note** fields of the annotation editor. Each button only appears while the corresponding field has content and clears it without touching the other controls. Both buttons are disabled while a save is in flight and respect the existing Escape / IME handling.
|
|
52
56
|
|
|
53
|
-
- **feat(annotations)**: redesign the annotation editor layout. Favorite and review flags stack vertically on the left; priority and its small help text occupy the right column. The **Tags**, **Note**, and AI **paste** textareas all share the same `sm-noteInput` style and `rows: 3` height (60px min-height), so the three input boxes line up visually. The "{count} / 2000
|
|
57
|
+
- **feat(annotations)**: redesign the annotation editor layout. Favorite and review flags stack vertically on the left; priority and its small help text occupy the right column. The **Tags**, **Note**, and AI **paste** textareas all share the same `sm-noteInput` style and `rows: 3` height (60px min-height), so the three input boxes line up visually. The "{count} / 2000 chars" note counter and the privacy hint are removed; help text is moved into each input's `placeholder`. In the AI paste block the two buttons now sit **above** the paste textarea (Import on the left, Copy Prompt on the right) so the editor footer stays consistent. The priority label now uses the same 13px font as the favorite / review checkboxes.
|
|
54
58
|
|
|
55
|
-
- **feat(annotations)**: remove the "
|
|
59
|
+
- **feat(annotations)**: remove the "Not set" priority option. Priority is always one of 1–5, and the default is **3 (Normal)**; legacy data with `priority: null` is normalized to 3 in display, sort and filter, so there is no longer a separate "always-sorts-last" state. The priority filter dropdown, row badges and header badge all reflect the unified 1–5 scale; AI-returned `"priority": null` is also normalized to 3 by the clipboard parser. The priority help text now reads "1 is highest, 5 is lowest. Default is 3 (Normal)."
|
|
56
60
|
|
|
57
61
|
- **fix(annotations)**: in the manager's row badges, P1–P5 now always render (legacy `null` renders as P3) so the priority column is visually consistent across all rows instead of being absent for unset entries. The header shortcut button likewise always shows the current P-number badge.
|
|
58
62
|
|
|
59
63
|
- **fix(annotations)**: the AI copy/paste prompt now follows the active UI language. The dialog detects the language from the t() function (probing `marks.favorite`) instead of relying on `window.__smActiveLanguage`, which was never set; the prompt button writes Chinese under a Chinese UI and English under an English UI even when the global flag is missing.
|
|
60
64
|
|
|
61
|
-
- **fix(annotations)**: the AI paste workflow's error message now appends the actual `JSON.parse` error position from each recovery attempt (
|
|
65
|
+
- **fix(annotations)**: the AI paste workflow's error message now appends the actual `JSON.parse` error position from each recovery attempt (raw / fix quotes & backslashes / scan object / scan object + fix), so users can see exactly which character broke parsing when the auto-repair still fails. The parser also strips a leading UTF-8 BOM, normalizes smart quotes, and repairs stray single backslashes inside string values.
|
|
62
66
|
|
|
63
67
|
- **feat(annotations)**: tag input accepts both English `,` and Chinese `,` as separators (regex `/[,,\n]/`), trims whitespace around each tag, drops empty entries, and merges case-insensitive duplicates — so AI outputs in either locale parse cleanly without the user having to re-type the separator.
|
|
64
68
|
|
|
@@ -136,7 +140,7 @@
|
|
|
136
140
|
DSH 0.1.5-rc.1's persistence backend writes generation v3 artifacts at
|
|
137
141
|
that filename; the 0.4.6 release scanned only v2/plaintext names, so
|
|
138
142
|
fresh sessions appeared to have no disk record and the move/migrate
|
|
139
|
-
endpoints failed with "
|
|
143
|
+
endpoints failed with "session has no artifact".
|
|
140
144
|
|
|
141
145
|
- **chore**: bump version to 0.4.7.
|
|
142
146
|
|
|
@@ -170,7 +174,7 @@
|
|
|
170
174
|
called `ctx.agents.resume` to re-create the agent. DSH's `agent/status` event
|
|
171
175
|
is only emitted on phase changes, so a freshly resumed agent never told the
|
|
172
176
|
client it was now idle, leaving the sidebar's model selector and send button
|
|
173
|
-
disabled ("
|
|
177
|
+
disabled ("session unavailable") until a manual browser refresh. The new path flushes
|
|
174
178
|
pending events to disk, updates the in-memory session header + coordinator
|
|
175
179
|
state + workspace accounting in place, and atomically renames the artifact,
|
|
176
180
|
so the agent's UI keeps showing the same in-memory session with no client
|
|
@@ -188,7 +192,7 @@
|
|
|
188
192
|
|
|
189
193
|
## 0.4.4 — 2026-09-03
|
|
190
194
|
|
|
191
|
-
- **docs**: rename the English README wording from `conversation` to `session` to align with the plugin name (`dsh-session-manager`), the Chinese README (
|
|
195
|
+
- **docs**: rename the English README wording from `conversation` to `session` to align with the plugin name (`dsh-session-manager`), the Chinese README (`README.zh.md`), the DSH host APIs, and the [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) registry entry.
|
|
192
196
|
- **chore**: rewrite `package.json` `description` to use `Session manager` / `sessions` for the same alignment, and bump the version to `0.4.4`.
|
|
193
197
|
- **chore(repo)**: update the GitHub repository description to match.
|
|
194
198
|
|
package/README.md
CHANGED
|
@@ -9,7 +9,9 @@ English | [中文](README.zh.md)
|
|
|
9
9
|
|
|
10
10
|
## 0 Overview
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
DeepSeek Harness session manager: delete, archive, move sessions across workspaces, migrate presets, favorites, review-later, search, filter, sort, prioritize, add tags and notes, and batch-manage sessions.
|
|
13
|
+
|
|
14
|
+
Verified with the current official DSH Web UI and Desktop app. Both environments use the same plugin's Host/client functionality; environment-specific installation notes are documented below.
|
|
13
15
|
|
|
14
16
|
## 1 Features
|
|
15
17
|
|
|
@@ -28,7 +30,7 @@ DSH Web session manager: delete, archive, move across workspaces, migrate preset
|
|
|
28
30
|
- **Priority** is a dropdown **1 Highest, 2 High, 3 Normal, 4 Low, 5 Lowest**, default **3 (Normal)**; legacy `null` priorities are normalized to 3.
|
|
29
31
|
- **Tags / Notes**: up to 20 tags per session (≤ 32 characters each) and a 2000-character note. Both English `,` and Chinese `,` are separators, whitespace is trimmed, duplicate tags are merged case-insensitively.
|
|
30
32
|
- **AI-assisted tagging** is manual and opt-in: **Copy Prompt** writes a structured prompt (Chinese or English, matched to the active UI) to the clipboard; **Import** parses the clipboard JSON (tolerating Markdown fences, conversational wrappers, smart quotes, stray backslashes and a leading BOM), validates it against the same limits, and populates the editor fields. Neither button calls a model automatically.
|
|
31
|
-
- Annotations live in plain text under the DSH home (`dsh-session-manager/annotations.v1.json`), keyed by session ID. Same-origin
|
|
33
|
+
- Annotations live in plain text under the DSH home (`dsh-session-manager/annotations.v1.json`), keyed by session ID. Same-origin client instances stay in sync via `BroadcastChannel`. Saves are durable across crashes; revision conflicts surface a "load latest" prompt.
|
|
32
34
|
|
|
33
35
|
### 1.3 Bulk management
|
|
34
36
|
|
|
@@ -54,32 +56,54 @@ Open the **Session manager** panel from the bottom of DSH's sidebar to browse ev
|
|
|
54
56
|
|
|
55
57
|
The **Batch process** button in the session manager panel header is the entry point: click it once to enter batch process (row checkboxes appear, the **Select all in filter / Clear selection** pair and the bulk action bar show up); click it again to exit batch process.
|
|
56
58
|
|
|
57
|
-
## 3
|
|
59
|
+
## 3 Installation
|
|
60
|
+
|
|
61
|
+
### 3.1 Install from Plugins
|
|
62
|
+
|
|
63
|
+
In DSH, open **Plugins**, add a plugin, search for `dsh-session-manager`, and install it. This method is supported by both the official Web UI and Desktop app.
|
|
58
64
|
|
|
59
|
-
### 3.
|
|
65
|
+
### 3.2 Install from Third-Party Plugin Markets
|
|
60
66
|
|
|
61
|
-
|
|
67
|
+
This plugin is listed in [dsh-market](https://github.com/dsh-market/dsh-market) and [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin).
|
|
62
68
|
|
|
63
|
-
### 3.
|
|
69
|
+
### 3.3 Install to the Web profile via CLI
|
|
70
|
+
|
|
71
|
+
Install from npm:
|
|
64
72
|
|
|
65
73
|
```powershell
|
|
66
74
|
dsh plugin --profile web add npm:dsh-session-manager
|
|
67
75
|
```
|
|
68
76
|
|
|
69
|
-
|
|
77
|
+
Install from GitHub:
|
|
70
78
|
|
|
71
79
|
```powershell
|
|
72
80
|
dsh plugin --profile web add github:hkkz9522/dsh-session-manager
|
|
73
81
|
```
|
|
74
82
|
|
|
75
|
-
|
|
83
|
+
Restart DSH Web after installation. If the browser still loads an older client bundle, use `Ctrl+Shift+R` to force-refresh the page.
|
|
84
|
+
|
|
85
|
+
> The `desktop` profile is managed by the official Desktop app and is not intended to be modified with the regular `dsh` CLI. Desktop users should install the plugin through **Plugins** in the app.
|
|
76
86
|
|
|
77
|
-
### 3.4 Local
|
|
87
|
+
### 3.4 Local Development / Testing
|
|
78
88
|
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
#### Web profile
|
|
90
|
+
|
|
91
|
+
Install the local repository via CLI:
|
|
92
|
+
|
|
93
|
+
```powershell
|
|
94
|
+
dsh plugin --profile web add <path-to-this-repository>
|
|
81
95
|
```
|
|
82
96
|
|
|
97
|
+
The local repository is linked to the current profile as a plugin checkout, making it suitable for modifying the source code directly and testing changes.
|
|
98
|
+
|
|
99
|
+
#### Desktop app
|
|
100
|
+
|
|
101
|
+
Open **Plugins** in the official Desktop app and use the absolute path to the local repository as the installation source.
|
|
102
|
+
|
|
103
|
+
For client-side code, changes can be reloaded automatically after saving when HMR is working normally. If a change does not take effect immediately, reload the current interface or restart the corresponding DSH Web / Desktop client.
|
|
104
|
+
|
|
105
|
+
After changing plugin dependencies, `package.json`, bundle configuration, or other installation- or loading-related settings, reinstalling the plugin or restarting the corresponding client is recommended.
|
|
106
|
+
|
|
83
107
|
## 4 Safety and behavior
|
|
84
108
|
|
|
85
109
|
- **Deletion is permanent**, so the UI always asks for confirmation. The API checks the session ID, directory boundary and artifact header before deletion; traversal, symlinks and junctions are refused.
|
|
@@ -92,30 +116,29 @@ dev_inject_plugin {"dir": "<absolute path to this repository>"}
|
|
|
92
116
|
|
|
93
117
|
## 5 Compatibility
|
|
94
118
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
| 0.
|
|
98
|
-
|
|
|
99
|
-
| 0.5.
|
|
100
|
-
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
| 0.4.
|
|
104
|
-
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
| 0.4.0 |
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
Requires Node.js 22.15+ (22.x) or 24+ for built-in Zstd support.
|
|
119
|
+
DSH versions are shown above plugin versions; each column represents a tested version combination.
|
|
120
|
+
|
|
121
|
+
| v0.2.0-rc.2 | v0.1.7-rc.2 | v0.1.7-rc.1 |
|
|
122
|
+
| --- | --- | --- |
|
|
123
|
+
| 0.5.4 | 0.5.3 | 0.5.2 |
|
|
124
|
+
|
|
125
|
+
| v0.1.6-alpha.2 | v0.1.5-rc.2 | v0.1.5-rc.1 |
|
|
126
|
+
| --- | --- | --- |
|
|
127
|
+
| 0.5.1 | 0.4.11 | 0.4.10, 0.4.9, 0.4.7 |
|
|
128
|
+
|
|
129
|
+
| v0.1.3-alpha.2 | v0.1.2-rc.1 | v0.1.0-rc.7 |
|
|
130
|
+
| --- | --- | --- |
|
|
131
|
+
| 0.4.6, 0.4.4, 0.4.1 | 0.4.0 | 0.1.2, 0.1.1, 0.1.0 |
|
|
132
|
+
|
|
133
|
+
The version combinations above have been tested with either the official Web UI or Desktop app. Other version combinations may also work but have not been individually verified.
|
|
134
|
+
|
|
135
|
+
When using a standalone DSH CLI/runtime, Node.js 22.15+ (22.x) or 24+ is required for built-in Zstd support. The official Desktop app ships and manages its matching runtime separately.
|
|
113
136
|
|
|
114
137
|
This is a Cordis plugin and declares `cordis: ">=4.0.0-rc <5"` as its peer dependency.
|
|
115
138
|
|
|
116
139
|
## 6 Development
|
|
117
140
|
|
|
118
|
-
- `lib/index.js` is the host-side ESM plugin; `lib/client.js` is the
|
|
141
|
+
- `lib/index.js` is the host-side ESM plugin; `lib/client.js` is the client UI bundle. No build step is required.
|
|
119
142
|
- Before submitting changes, run:
|
|
120
143
|
|
|
121
144
|
```powershell
|
|
@@ -127,13 +150,13 @@ git diff --check
|
|
|
127
150
|
|
|
128
151
|
Tests use isolated temporary directories and the real plugin entry point, never real sessions. CI runs these checks on Windows / Linux with Node 22.15.0 / 24.
|
|
129
152
|
|
|
130
|
-
Optional integration check: run `node scripts/smoke-test.mjs` against a running test instance
|
|
153
|
+
Optional integration check: run `node scripts/smoke-test.mjs` against a running DSH Web-profile test instance. It contacts a real service and is not part of the default unit test suite.
|
|
131
154
|
|
|
132
155
|
Release history is in [CHANGELOG.md](CHANGELOG.md).
|
|
133
156
|
|
|
134
157
|
## 7 Acknowledgments
|
|
135
158
|
|
|
136
|
-
Thanks to everyone who installs and uses dsh-session-manager, and to the people who file issues and open pull requests to help improve it.
|
|
159
|
+
Thanks to everyone who installs and uses dsh-session-manager, and to the people who file issues and open pull requests to help improve it. Suggestions and feedback are welcome.
|
|
137
160
|
|
|
138
161
|
## 8 License
|
|
139
162
|
|
package/README.zh.md
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
## 0 简介
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
DeepSeek Harness 会话管理插件:支持删除、归档、跨工作区移动、预设迁移、收藏、待回看、搜索、筛选、排序、优先级、标签、备注及批量操作。
|
|
13
|
+
|
|
14
|
+
当前版本已在官方新版 DSH Web UI 与 Desktop 客户端完成实际测试;两种环境共用本插件的 Host 与客户端功能,具体安装方式见下文。
|
|
13
15
|
|
|
14
16
|
## 1 功能
|
|
15
17
|
|
|
@@ -28,7 +30,7 @@ DSH Web 会话管理:删除、归档、跨工作区移动、迁移预设;收
|
|
|
28
30
|
- **优先级**:下拉 **1 最高、2 高、3 普通、4 低、5 最低**,**默认 3(普通)**;旧数据中的 `null` 归一化为 3。
|
|
29
31
|
- **标签 / 备注**:每会话最多 20 个标签(每个 ≤ 32 字符)、备注最多 2000 字符。英文 `,` 与中文 `,` 都是分隔符,首尾空白被去除,重复标签按大小写不敏感合并。
|
|
30
32
|
- **AI 整理(手动、可选)**:标签 / 备注编辑窗口内的 **复制 Prompt** 把结构化提示复制到剪贴板,**导入** 解析剪贴板 JSON(可识别 Markdown 代码块、对话包裹、智能引号、孤立反斜杠和开头 BOM),按相同规则校验后填入字段;两者都不会自动调用模型。
|
|
31
|
-
- 标记保存在 `dsh-session-manager/annotations.v1.json`,按会话 ID
|
|
33
|
+
- 标记保存在 `dsh-session-manager/annotations.v1.json`,按会话 ID 关联;同源客户端实例通过 `BroadcastChannel` 同步;保存可跨进程崩溃恢复,版本冲突会提示"载入最新内容"。
|
|
32
34
|
|
|
33
35
|
### 1.3 批量处理
|
|
34
36
|
|
|
@@ -54,30 +56,52 @@ DSH Web 会话管理:删除、归档、跨工作区移动、迁移预设;收
|
|
|
54
56
|
|
|
55
57
|
## 3 安装
|
|
56
58
|
|
|
57
|
-
### 3.1
|
|
59
|
+
### 3.1 从插件安装
|
|
60
|
+
|
|
61
|
+
在 DSH 的 **插件** 中添加插件,搜索 `dsh-session-manager` 并安装。该方式适用于官方 Web UI 和 Desktop 客户端。
|
|
62
|
+
|
|
63
|
+
### 3.2 从第三方插件市场安装
|
|
58
64
|
|
|
59
|
-
|
|
65
|
+
本插件已被 [dsh-market](https://github.com/dsh-market/dsh-market) 和 [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) 收录。
|
|
60
66
|
|
|
61
|
-
### 3.
|
|
67
|
+
### 3.3 通过 CLI 安装至 Web profile
|
|
68
|
+
|
|
69
|
+
从 npm 安装:
|
|
62
70
|
|
|
63
71
|
```powershell
|
|
64
72
|
dsh plugin --profile web add npm:dsh-session-manager
|
|
65
73
|
```
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
从 GitHub 安装:
|
|
68
76
|
|
|
69
77
|
```powershell
|
|
70
78
|
dsh plugin --profile web add github:hkkz9522/dsh-session-manager
|
|
71
79
|
```
|
|
72
80
|
|
|
73
|
-
安装后重启 DSH Web
|
|
81
|
+
安装后重启 DSH Web。若浏览器仍加载旧的客户端代码,可使用 `Ctrl+Shift+R` 强制刷新。
|
|
82
|
+
|
|
83
|
+
> `desktop` profile 由官方 Desktop 客户端管理,普通 `dsh` CLI 不用于修改该 profile。Desktop 用户请通过客户端内的 **插件** 安装插件。
|
|
74
84
|
|
|
75
|
-
### 3.4 本地开发 /
|
|
85
|
+
### 3.4 本地开发 / 测试
|
|
76
86
|
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
#### Web profile
|
|
88
|
+
|
|
89
|
+
通过 CLI 安装本地仓库:
|
|
90
|
+
|
|
91
|
+
```powershell
|
|
92
|
+
dsh plugin --profile web add <本仓库路径>
|
|
79
93
|
```
|
|
80
94
|
|
|
95
|
+
本地仓库会作为插件 checkout 链接到当前 profile,适合直接修改源码并进行测试。
|
|
96
|
+
|
|
97
|
+
#### Desktop 客户端
|
|
98
|
+
|
|
99
|
+
在官方 Desktop 客户端中打开 **插件**,使用本地仓库的绝对路径作为安装源。
|
|
100
|
+
|
|
101
|
+
对于 Client 端代码,在 HMR 正常工作的情况下,保存修改后可以自动重新加载;若修改未立即生效,可重新加载当前界面或重启对应的 DSH Web / Desktop 客户端。
|
|
102
|
+
|
|
103
|
+
修改插件依赖、`package.json`、bundle 配置等安装或加载相关内容后,建议重新安装插件或重启对应客户端。
|
|
104
|
+
|
|
81
105
|
## 4 安全说明
|
|
82
106
|
|
|
83
107
|
- **删除不可恢复**,UI 始终要求二次确认;删除前校验会话 ID、目录边界和工件 header,不允许通过路径穿越、符号链接或 junction 操作其他目录。
|
|
@@ -90,30 +114,31 @@ dev_inject_plugin {"dir": "<本仓库的绝对路径>"}
|
|
|
90
114
|
|
|
91
115
|
## 5 兼容性
|
|
92
116
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
| 0.
|
|
96
|
-
|
|
|
97
|
-
| 0.5.
|
|
98
|
-
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
| 0.4.
|
|
102
|
-
|
|
103
|
-
| 0.
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
| 0.1.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
117
|
+
DSH 版本在上,插件版本在下;每列表示一组已测试的版本组合。
|
|
118
|
+
|
|
119
|
+
| v0.2.0-rc.2 | v0.1.7-rc.2 | v0.1.7-rc.1 |
|
|
120
|
+
| --- | --- | --- |
|
|
121
|
+
| 0.5.4 | 0.5.3 | 0.5.2 |
|
|
122
|
+
|
|
123
|
+
| v0.1.6-alpha.2 | v0.1.5-rc.2 | v0.1.5-rc.1 |
|
|
124
|
+
| --- | --- | --- |
|
|
125
|
+
| 0.5.1 | 0.4.11 | 0.4.10, 0.4.9, 0.4.7 |
|
|
126
|
+
|
|
127
|
+
| 0.1.3-alpha.2 | v0.1.2-rc.1 | v0.1.0-rc.7 |
|
|
128
|
+
| v0.1.3-alpha.2 | v0.1.2-rc.1 | v0.1.0-rc.7 |
|
|
129
|
+
| --- | --- | --- |
|
|
130
|
+
| 0.4.6, 0.4.4, 0.4.1 | 0.4.0 | 0.1.2, 0.1.1, 0.1.0 |
|
|
131
|
+
|
|
132
|
+
以上版本组合已在官方 Web UI 和 Desktop 客户端中完成测试。其他版本组合可能同样兼容,但未逐一验证。
|
|
133
|
+
以上版本组合已在官方 Web UI 或 Desktop 客户端中完成测试。其他版本组合可能同样兼容,但未逐一验证。
|
|
134
|
+
|
|
135
|
+
使用独立 DSH CLI / runtime 时,需要 Node.js 22.15+(22.x)或 24+,以提供内置 Zstd 支持。官方 Desktop 客户端单独携带并管理与其版本匹配的 runtime。
|
|
111
136
|
|
|
112
137
|
本插件是 Cordis 插件,peer dependency 为 `cordis: ">=4.0.0-rc <5"`。
|
|
113
138
|
|
|
114
139
|
## 6 开发
|
|
115
140
|
|
|
116
|
-
- `lib/index.js` 是 host 端 ESM 插件,`lib/client.js`
|
|
141
|
+
- `lib/index.js` 是 host 端 ESM 插件,`lib/client.js` 是客户端 UI bundle,无需构建步骤。
|
|
117
142
|
- 提交修改前请运行:
|
|
118
143
|
|
|
119
144
|
```powershell
|
|
@@ -125,13 +150,13 @@ git diff --check
|
|
|
125
150
|
|
|
126
151
|
测试使用隔离临时目录和真实插件入口,不操作真实会话。CI 在 Windows / Linux、Node 22.15.0 / 24 上执行相同检查。
|
|
127
152
|
|
|
128
|
-
|
|
153
|
+
可选集成检查:对正在运行的 DSH Web profile 测试实例执行 `node scripts/smoke-test.mjs`;它会请求实际服务,不属于默认单元测试。
|
|
129
154
|
|
|
130
155
|
发布记录见 [CHANGELOG.md](CHANGELOG.md)。
|
|
131
156
|
|
|
132
157
|
## 7 致谢
|
|
133
158
|
|
|
134
|
-
感谢每一位安装和使用 dsh-session-manager 的用户,也感谢提交 Issue 与 Pull Request
|
|
159
|
+
感谢每一位安装和使用 dsh-session-manager 的用户,也感谢提交 Issue 与 Pull Request 帮助改进本插件的朋友们。欢迎提出修改意见。
|
|
135
160
|
|
|
136
161
|
## 8 开源许可
|
|
137
162
|
|
package/lib/client.js
CHANGED
|
@@ -128,7 +128,7 @@ function nextDialogZ() { return ++dialogZStackCounter; }
|
|
|
128
128
|
"footer.aria": "会话管理",
|
|
129
129
|
"footer.label": "会话管理",
|
|
130
130
|
"panel.title": "会话管理",
|
|
131
|
-
"panel.github.title": "欢迎Star
|
|
131
|
+
"panel.github.title": "欢迎Star和提交Issue",
|
|
132
132
|
"panel.search": "搜索标题、ID、标签或备注",
|
|
133
133
|
"panel.workspace": "工作区",
|
|
134
134
|
"panel.workspace.all": "全部工作区",
|
|
@@ -285,7 +285,6 @@ function nextDialogZ() { return ++dialogZStackCounter; }
|
|
|
285
285
|
"marks.discard": "Discard unsaved annotation changes?",
|
|
286
286
|
"marks.note.exists": "Has note",
|
|
287
287
|
"marks.sort": "Priority (1 → 5)",
|
|
288
|
-
"marks.note.exists": "Has note",
|
|
289
288
|
"marks.import.copy": "Copy Prompt",
|
|
290
289
|
"marks.import.copy.copied": "Copied. Paste it into the current conversation to generate the result.",
|
|
291
290
|
"marks.import.copy.failed": "Copy failed: {message}",
|
|
@@ -313,7 +312,7 @@ function nextDialogZ() { return ++dialogZStackCounter; }
|
|
|
313
312
|
"footer.aria": "Session manager",
|
|
314
313
|
"footer.label": "Sessions",
|
|
315
314
|
"panel.title": "Session manager",
|
|
316
|
-
"panel.github.title": "Star or open an issue",
|
|
315
|
+
"panel.github.title": "Star the project or open an issue",
|
|
317
316
|
"panel.search": "Search title, ID, tags or notes",
|
|
318
317
|
"panel.workspace": "Workspace",
|
|
319
318
|
"panel.workspace.all": "All workspaces",
|
package/package.json
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-session-manager",
|
|
3
|
-
"version": "0.5.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.5.4",
|
|
4
|
+
"description": "DeepSeek Harness session manager: delete, archive, move across workspaces, migrate presets, favorites, review-later, search, filter, sort, priority, tags, notes, and batch actions. | DSH 会话管理:删除、归档、跨工作区移动、预设迁移、收藏、待回看、搜索、筛选、排序、优先级、标签、备注及批量操作。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"dsh",
|
|
8
|
+
"dsh-plugin",
|
|
8
9
|
"deepseek-harness",
|
|
10
|
+
"deepseek-harness-plugin",
|
|
9
11
|
"plugin",
|
|
10
12
|
"session",
|
|
13
|
+
"session-manager",
|
|
14
|
+
"session-management",
|
|
11
15
|
"archive",
|
|
12
16
|
"move",
|
|
13
17
|
"workspace",
|
|
14
18
|
"preset",
|
|
15
|
-
"
|
|
19
|
+
"agent-preset",
|
|
20
|
+
"migration",
|
|
21
|
+
"cordis"
|
|
16
22
|
],
|
|
17
23
|
"repository": {
|
|
18
24
|
"type": "git",
|