dsh-session-manager 0.6.2 → 0.6.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 CHANGED
@@ -1,287 +1,153 @@
1
-
2
- ## 0.6.2 — 2026-10-02
3
-
4
- - **fix(ui)**: 修复删除当前打开的会话后未自动跳转的问题:删除当前会话时显式调用 `ctx.uiWorkspace.clearMain()` 并回退触发新建会话,使界面正确跳转到新建会话欢迎视图,与会话归档行为保持一致。
5
- - **fix(css)**: 修复无作用域全局样式覆盖宿主组件的缺陷(Issue #21):移除未带前缀的全局规则选择器 `[role=tooltip]`, `.bubble`, `[class*=bubble]`, `.tooltip`,仅保留插件作用域 `.sm-tooltip`,避免给 DSH 官方消息气泡强加 1px 边框;将 tooltip 浮层 z-index 调降回官方 Toast 档位(1100)。
6
- - **fix(ui)**: 优化顶部标题栏动作按钮排列与显示(归档按钮置于首位、图标垂直居中对齐、紧凑折叠菜单定位保持跟随)。
7
- - **feat(update)**: add self-update checking and installation workflow:
8
- - Header 🐋 (Whale) icon button: checks for updates against the npm registry with indicator badge / red dot notification when a new version is released.
9
- - Update Dialog (`UpdateDialog`): modal overlay displaying current and latest versions, check progress, and one-click update via the DSH Plugin Manager `installBundle()`.
10
- - Update state management (`UpdateStore`): unified state machine (`idle`, `checking`, `available`, `updating`, `done`, `error`) with development overrides (`window.__DSH_SM_TEST_UPDATE__`).
11
- - Host update endpoints: `GET /session-manager/api/update/check` and `POST /session-manager/api/update/install`.
12
- - **feat(settings)**: add Settings Card (`SessionManagerSettingsCard`) registered in DSH Settings under `settings.plugin.item` (`key: "dsh-session-manager"`):
13
- - Displays current version, latest version, inline check/update buttons, auto-check for updates toggle, and GitHub repository link.
14
- - **Install Source (Registry)**: add a registry source dropdown allowing users to select between **npm official registry** (`registry.npmjs.org`, default) and **China mainland mirror** (`registry.npmmirror.com`). Both check and install requests flow directly through the selected registry and the preference is persisted in `localStorage`.
15
- - **feat(ui)**: responsive Header layout enhancements:
16
- - Header actions use Container Queries (`@container (max-width: 720px)` and `@container (max-width: 520px)`): automatically transitions between full labels, 32×32 icon-only compact mode, and secondary action overflow menu (`⋯`).
17
- - Surface buttons: `.sm-headerBtn` styled with opaque background tokens for consistent visibility across light/dark themes.
18
- - Danger button: unified red text/border resting state and filled red hover state.
19
- - **fix(ui)**: overlay root, stacking context, and footer fixes:
20
- - Dedicated Overlay Root (`#dsh-session-manager-overlay-root`) ensures dialogs break out of ancestor stacking contexts (fixing issue #19).
21
- - Dynamic z-index layering (`nextDialogZ()`) ensures dialogs stack properly above panels and other overlays.
22
- - Footer action (`FooterAction`): renders directly as native buttons in wide/rail modes, avoiding double container wrappers and layout overflow (fixing issue #20).
23
- - **test**: comprehensive test suite expansion: added coverage for semver comparisons, UpdateStore state machine, UpdateDialog, Settings Card, responsive header layout, registry source switching, Host update endpoints, delete-current-session navigation and regression guards (338 tests total).
24
-
25
- ## 0.5.4 — 2026-09-30
26
-
27
- - **docs**: update project description and metadata to reflect official Web UI and Desktop app support; clarify client synchronization, install profiles, and runtime requirements.
28
-
29
- ## 0.5.3 — 2026-09-26
30
-
31
- - **fix**: issue #17.2 (panel `MoveDialog` now forwards `t` so labels render translated) and issue #17.4 (row Open unarchives archived sessions first).
32
-
33
- - **fix**: issue #18 — `moveSession` stamps `header.version` from the target filename so v4-named artifacts don't carry stale v0 headers (which broke DSH startup's `listArtifacts`).
34
-
35
- - **fix**: dialog descriptions (`confirm.move.desc`, `confirm.delete.desc`) show only the friendly `displayTitle`, never the raw id. The title-bar lookup is resolved once per render via IIFE — an earlier attempt invoked `useSessions()` inside an event handler, which crashed the slot framework's `useSyncExternalStore` subscriber and let `SlotErrorBoundary` replace the whole `conversation.session.header.actions` slot with `<div data-slot-error="…" />`, taking every title-bar button down.
36
-
37
- - **fix**: drop UTF-8 BOM from `package.json` (`JSON.parse` was rejecting it and surfacing the plugin as "all components disabled").
38
-
39
- - **chore**: remove leftover `TEMP DEBUG` block in `lib/index.js` (issue #18 debugging residue that spammed the log every 2 s).
40
-
41
- - **test**: regression guard added in `test/issue-17-static-guards.test.mjs`; existing `test/issue-18-move-version.test.mjs` covers #18.
42
-
43
- ## 0.5.2 — 2026-09-23
44
-
45
- - **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.
46
-
47
- - **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.
48
-
49
- - **feat(bulk management)**: add the **Migrate preset…** button to the bulk action bar. Selecting rows and clicking the new button opens a preset picker (sourced from `/preset-scan`) and, on confirm, runs the `preset-migrate` action against every selected session through the existing `/batch` endpoint. Sessions already on the chosen preset are reported as skipped in the result dialog; failed sessions can be retried individually.
50
-
51
- - **fix(host /batch)**: the `/session-manager/api/batch` host handler had four regressions that were hidden by the bulk-dialog UI bug fixed in the same release:
52
-
53
- 1. **archive** called `ctx.workspaces.archiveSession(sessionId)` directly from the per-request dispatch; Cordis rejected it with `cannot get property 'workspaces' without inject`. The host now exposes an `archiveSession` helper that mirrors `unarchiveSession` and updates `workspaceRegistry.archivedSessionIds` atomically.
54
-
55
- 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`.
56
-
57
- 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 }`.
58
-
59
- 4. the `BATCH_ACTIONS` set, the annotation action set inside `runBatchAction`, and `annotationPatchFromBatchAction` have been kept in sync.
60
-
61
- As a hygiene cleanup, an orphan copy of the same handler that was left inside the file header JSDoc (between `/**` and the real `* @dsh-session-manager` description) has been removed. **Important:** if any of these errors were seen before this fix, hard-refresh DSH (Ctrl+Shift+R) so the cached plugin bundle is replaced with the new one.
62
-
63
- - **fix(bulk dialog positioning)**: the bulk preview / progress / result / tag-input / priority / move / preset-migrate dialogs had only a `z-index` rule on `.sm-bulkDialog.sm-nativeDialogLayer` and inherited the default `position: static`, so they rendered in normal document flow at the bottom of the panel (below the row list). They now reuse the same fixed-position `inset: calc(50vh - 90px) auto auto calc(50vw + 308px)` as `.sm-confirmDialog.sm-nativeDialogLayer` and pop up to the right of the panel, matching every other per-row dialog.
64
-
65
- - **fix(bulk dialog dark mode)**: every `[data-sm-theme=dark]` override that previously covered `.sm-panelDialog` / `.sm-confirmDialog` / `.sm-migrateDialog` now also covers `.sm-bulkDialog`. Without this, dark mode rendered the bulk dialog body, header, footer, list, result list, progress bar and progress fill in default white-on-white, making the dialog text invisible.
66
-
67
- - **fix(footer)**: FooterAction now reads `props.wide` from `SidebarFooterActionOwnerProps` and renders differently for collapsed (`scope: 'root'` rail, 36x36 icon-only button) vs expanded (full-width row, icon + label, left-aligned) sidebar (DSH 0.1.6+ `sidebar.footer.action` slot contract).
68
- - **test(bulk management)**: add client-side coverage for issue #13: est/client-bulk-selection.test.mjs (static guards on the selection-state hooks), est/client-bulk-actions.test.mjs (static guards on the BulkActionBar wiring + locale coverage), est/client-bulk-runbatch.test.mjs (unit coverage for the runBatch wrapper via runInNewContext with a stubbed fetch), and est/client-bulk-static-guards.test.mjs (cross-cutting structural invariants -- namespace ownership, panel dialog sibling layout, fan-out refresh, host/client action vocabulary). Total tests: 225 (188 pre-existing + 37 new).
69
- - **feat(bulk management)**: add multi-select checkboxes to session rows plus a sticky bulk action bar with archive, unarchive, favorite, unfavorite, mark-for-review, clear-review, add-tags, clear-tags, set-priority, move-to-workspace, and delete actions. Destructive actions run through a BatchPreviewDialog with per-id skip/fail grouping; non-destructive ones fire immediately. Progress, success/failure counts, per-item error reasons, and a one-click **Retry failed** re-arm the failed ids back into the selection. The /batch endpoint is reused so per-id errors surface as partial failures without aborting the batch. Bulk state is reset when the panel closes or the filter excludes a selected row.
70
- - **feat(sessions)**: `ARTIFACT_NAMES` now lists `session.v4.jsonl.zstd` first so DSH 0.1.7 V4-default session artifacts are picked up by the list-snapshot reader. Existing V3/V2/V1 files remain readable; the reader is version-agnostic and parses the header JSON regardless of declared version, so no per-version code paths are required.
71
-
72
- ## 0.5.1 — 2026-09-18
73
-
74
- - **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.
75
-
76
- - **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.
77
-
78
- - **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.
79
-
80
- - **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.
81
-
82
- - **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)."
83
-
84
- - **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.
85
-
86
- - **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.
87
-
88
- - **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.
89
-
90
- - **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.
91
-
92
- - **feat(manager)**: add case-insensitive title/session-ID search, workspace/ungrouped filtering, four time-order modes, matching/total counts and reset controls; combine them with the existing archive filter. Creation times are supplied from cached host headers when DSH summaries omit them, without reading logs. Add workspace load/retry handling, stale-request cancellation, narrow-screen layout, IME-safe Escape handling and real-bundle interaction tests.
93
-
94
- - **fix(safety)**: validate session IDs, directory containment, symlinks/junctions and artifact identity before deletion or file rewrites; reject an already occupied move destination.
95
- - **fix(persistence)**: separate backup/publication/rollback phases; never delete the original after a failed backup rename. Preserve recovery files and report their paths if rollback fails, and clean uncommitted temporary files after write failures.
96
- - **fix(zstd)**: use structural frame decoding on every rewrite path and reject corrupt/torn logs instead of publishing a decoded prefix.
97
- - **fix(startup)**: distinguish incomplete scans from empty libraries; normalize snapshot headers, preserve live/concurrently attached sessions, and reconcile using a fresh immutable registry state.
98
- - **perf**: read only orphan artifact headers during enumeration and avoid duplicate full readRaw decoding for mutations.
99
- - **chore(test)**: test the real plugin routes instead of a copied move implementation; cover traversal, junctions, corruption, rollback failures, concurrent mutations, and startup read failures. Run module imports, tests, and package checks on Windows/Linux with Node 22.15.0/24; declare the Zstd-capable Node requirement.
100
-
101
- ## 0.4.11 — 2026-09-14
102
-
103
- - **chore(client)**: drop `@deepseek-ai/dsh-client-runtime` from `dsh.client.inject`. The package is no longer shipped by DSH 0.1.5-rc.2 / 0.1.2-alpha or newer (its client-bootstrap role was folded into `@deepseek-ai/dsh-client-store`). This plugin's bundle never required it, so removing the stale reference is a no-op at runtime and only cleans up the published manifest (#12).
104
-
105
- ## 0.4.10 — 2026-09-13
106
-
107
- - **fix(move)**: cross-workspace move no longer breaks the live JSONL writer. The DSH JSONL backend keeps one `JsonlSessionHandle` per session id in an in-process tracker; its `header.cwd` is captured at construction, and the api-gateway's `session/event` router writes through that handle, so a session whose header was rewritten in memory but whose writer was still pointing at the pre-move directory started throwing `ENOENT` on the first new message (issue #8). `moveSession` now mutates the live writer's `header` in place so its persist path flips to the target `cwd` while the same handle, queue, cursor, and lease are retained; the Agent's owned handle therefore stays consistent with the tracker entry, and no `session/disposed` is fabricated. If the runtime does not expose a rebindable writer (older DSH builds or a custom backend), the move now refuses up front with a clear message instead of silently leaving the live session writing to a deleted path. Adds `test/issue-8-move-enoent.test.mjs` (post-move writer identity stability + a "no-fix ENOENT" regression guard) and `test/issue-8-repro/` (a standalone reproducer script).
108
-
109
- - **chore**: bump version to 0.4.10.
110
-
111
- ## 0.4.9 — 2026-09-12
112
-
113
- - **fix(ui)**: Session manager panel and inner dialogs (Delete / Move /
114
- Migrate confirmations) now close on Esc regardless of focus
115
- position (issue #7). The original layer-bound onKeyDown was
116
- unreachable because the sidebar toggle / row button that opened
117
- each modal stayed focused -- focus is a sibling of the layer,
118
- not a descendant, so keydown never bubbles into the modal subtree.
119
- ConfirmDialog / MoveDialog are also used by the title-bar Delete
120
- / Move actions, so this fix applies there too.
121
-
122
- - **fix(ui)**: Modals now close ONLY via Esc or their explicit close
123
- buttons. The original 0.4.7 behavior (close on backdrop click)
124
- was removed per user feedback -- a stray click outside the panel
125
- was dismissing it accidentally. Every `.sm-nativeDialogBackdrop`
126
- `onMouseDown` handler is gone; the dim backdrop itself is also
127
- gone so opening a modal never darkens the page (sidebar or
128
- content area).
129
-
130
- - **refactor(ui)**: Esc handling moved from per-layer `onKeyDown`
131
- to a `window`-level `keydown` listener via `useEffect` on every
132
- modal. A `useRef` lets the listener see the latest state values
133
- without re-subscribing on every render. The panel listener
134
- returns early when any inner dialog is open so the child
135
- dialog's listener gets the first shot at Esc.
136
-
137
- - **fix(ui)**: After a keyboard-driven close (Esc), the originally
138
- focused trigger button (sidebar toggle / row button / Cancel
139
- button) no longer leaves a lingering `:focus-visible` ring. The
140
- four Esc handlers `blur()` the active element after the close
141
- call. Mouse-driven closes are not affected -- `:focus-visible`
142
- only activates for keyboard-acquired focus.
143
-
144
- - **fix(ui)**: ConfirmDialog no longer listens for Enter at the
145
- layer level. The previous handler raced with the focused Cancel
146
- button's native Enter handler -- both fired (`onCancel` +
147
- `onConfirm`). Enter now lives only on the focused button.
148
-
149
- - **cleanup(ui)**: Remove three dead `<section>` `ref={(el) =>
150
- el.focus()}` callbacks (sections have no `tabindex` and are
151
- not focusable, so the focus calls were silent no-ops). Also
152
- remove the now-unused `onPanelKey` callback and `tabIndex: -1`
153
- attributes on the modal layers. The `.sm-nativeDialogBackdrop`
154
- divs are no longer rendered at all -- they had no behavior left
155
- after removing the click-to-close.
156
-
157
- - **chore**: bump version to 0.4.9.
158
-
159
- ## 0.4.7 — 2026-09-10
160
-
161
- - **fix(disk scan)**: include `session.v3.jsonl.zstd` in the on-disk
162
- filename list used by readSessionArtifact() and listSessionHeaders().
163
- DSH 0.1.5-rc.1's persistence backend writes generation v3 artifacts at
164
- that filename; the 0.4.6 release scanned only v2/plaintext names, so
165
- fresh sessions appeared to have no disk record and the move/migrate
166
- endpoints failed with "session has no artifact".
167
-
168
- - **chore**: bump version to 0.4.7.
169
-
170
-
171
- ## 0.4.6 — 2026-09-05
172
-
173
- - **fix(persistence)**: read all concatenated Zstandard frames in a session
174
- artifact. DSH writes one frame for the header and additional frames for
175
- event batches; reading only the first frame made sessions appear to lose
176
- their event history after refresh.
177
- - **fix(move)**: preserve the session generation/header version when
178
- re-homing an artifact, and synchronize the live session, persistence
179
- coordinator, registry indexes, and workspace accounting after a move.
180
- This avoids stale-path `ENOENT` failures and v2/v0 filename/header
181
- mismatches on the next DSH startup.
182
- - **fix(preset migration)**: fall back to an id-based artifact scan when a
183
- persistence locate result points at a stale path, and mirror cold-path
184
- migrations into the live session projection.
185
- - **fix(client)**: stop calling the removed/unavailable
186
- `noteAgentPreset` client method; refresh the session projection instead.
187
- - **recovery**: add `scripts/heal-v2-sessions.ps1` for the DSH 0.1.1-rc.2
188
- boot-time quirk where `session.v2.jsonl.zstd` contains a `version: 0`
189
- header. Run it before starting DSH; this repair must happen before DSH's
190
- workspace initialization, which is earlier than user plugin `apply()`.
191
-
192
- - **docs**: bump version to 0.4.6.
193
- ## 0.4.5 — 2026-09-05
194
-
195
- - **fix(move)**: keep the live session and agent in place during a cross-workspace
196
- move. The previous code tore down the live agent/session, moved the file, then
197
- called `ctx.agents.resume` to re-create the agent. DSH's `agent/status` event
198
- is only emitted on phase changes, so a freshly resumed agent never told the
199
- client it was now idle, leaving the sidebar's model selector and send button
200
- disabled ("session unavailable") until a manual browser refresh. The new path flushes
201
- pending events to disk, updates the in-memory session header + coordinator
202
- state + workspace accounting in place, and atomically renames the artifact,
203
- so the agent's UI keeps showing the same in-memory session with no client
204
- re-init.
205
- - **fix(preset migration)**: drop the over-strict `persistence.readRaw` /
206
- `persistence.list` precondition that caused the
207
- `/session-manager/api/preset-scan` endpoint to fail with
208
- `current persistence backend does not support readRaw/list` on a default DSH
209
- build. The actual `JsonlSessionPersistence` backend exposes both methods, so
210
- the precondition is replaced with a try/catch around `listSessionHeaders` that
211
- converts any missing-method failure into a useful
212
- `failed to enumerate sessions: <detail>` message.
213
- - **chore**: remove the now-unused `quietLive` / `releaseLiveSession` helpers
214
- and squash the per-route indentation noise around `/move` and `/workspaces`.
215
-
216
- ## 0.4.4 — 2026-09-03
217
-
218
- - **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.
219
- - **chore**: rewrite `package.json` `description` to use `Session manager` / `sessions` for the same alignment, and bump the version to `0.4.4`.
220
- - **chore(repo)**: update the GitHub repository description to match.
221
-
222
- ## 0.4.3 — 2026-09-03
223
-
224
- - **docs**: add the [Awesome DSH Plugin](https://awesome-dsh-plugin.com) badge to `README.md` / `README.zh.md` so the repo surfaces its curated registry membership.
225
-
226
- ## 0.4.2 — 2026-09-03
227
-
228
- - **feat(theme)**: dialogs now auto-follow DSH''s dark/light theme (`data-ds-dark-theme` / ` `code-scheme` / `data-theme`) via a single `data-sm-theme` attribute and scoped CSS variables, with inline `background` / `color` / `border-color` applied to each dialog root so they stay opaque regardless of how DSH resolves its own tokens. The previous manual light/dark toggle button is removed.
229
- - **docs**: aligned bilingual README structure, dropped the obsolete "no bulk migration" wording, and added an Acknowledgments section that thanks the users and the contributors filing issues and opening PRs. Listed [dsh-market](https://github.com/dsh-market/dsh-market) and [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) as install sources.
230
- - **chore**: rewrote `package.json` `description` to match the new English summary.
231
-
232
- ## 0.4.1 — 2026-08-28
233
-
234
- - **fix(ui)**: keep the title-bar **Delete conversation** button readable on hover with a red background, white text, and red border; remove the unused legacy danger-button rules.
235
-
236
- ## 0.4.0 — 2026-08-28
237
-
238
- - **feat(session preset migration)**: replaces the former bulk workflow with a
239
- per-conversation **Migrate preset** action in Session manager. It resolves the
240
- effective preset from the latest `agent-preset/selected` event or, when absent,
241
- the session header, then safely updates that one conversation.
242
- - **fix(lifecycle)**: moving a conversation or migrating its preset now retires stale
243
- live agents and persistence owners before refresh. This prevents resume failures
244
- such as `already has a live persistence owner`.
245
- - **fix(move)**: refreshes session and workspace state immediately and once more after
246
- the host event race, so a moved conversation reappears in its target workspace
247
- without a manual browser refresh.
248
- - **ui**: finalizes header actions and Session manager dialogs: red delete actions,
249
- per-row preset migration, consistent dialog placement, readable hover states, and
250
- a close button beside the manager title.
251
- - **docs**: refreshes bilingual documentation and npm metadata for the single-session
252
- preset migration workflow.
253
-
254
- ## 0.3.0 — 2026-08-27
255
-
256
- - **feat(preset migration)**: introduced preset migration support for conversations
257
- whose configured Agent preset was renamed or removed.
258
- - **feat(move)**: added workspace move handling and client-side workspace refreshes.
259
-
260
- ## 0.2.1 — 2026-08-26
261
-
262
- - **fix(move)**: reimplemented cross-workspace moves so the session artifact, stored
263
- `cwd`, and workspace accounting are moved together while preserving history,
264
- title, archive state, and derived-session relationships.
265
- - **feat(workspaces API)**: added the workspace projection endpoint used by the move UI.
266
- - **guard**: reject subagent and transient blank-session placeholders for move actions.
267
-
268
- ## 0.2.0 — 2026-08-16
269
-
270
- > ⚠️ The initial workspace-move implementation was superseded by 0.2.1.
271
-
272
- - **feat(move)**: added the initial move-to-workspace UI and host endpoints.
273
-
274
- ## 0.1.2 — 2026-08-16
275
-
276
- - **docs**: synchronized package metadata and bilingual README files for publication.
277
-
278
- ## 0.1.1 — 2026-08-16
279
-
280
- - **fix(panel)**: hide transient blank-session placeholders from the manager panel.
281
- - **test**: added the host API smoke test.
282
- - **ci**: added syntax and package-content verification.
283
-
284
- ## 0.1.0 — 2026-08-16
285
-
286
- - **feat**: initial session deletion with confirmation, archive management, and the
287
- Session manager panel.
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## 0.6.4 — 2026-10-13
6
+
7
+ - **fix(ui)**: Portal `SessionManagerPanel` into `#dsh-session-manager-overlay-root` to resolve overlay occlusion and interaction blocking by DSH sidebar/main view (#28).
8
+ - **fix(responsive)**: Align compact header menu item order with expanded state across folding modes, hide visible primary actions from menu in medium fold, open menu rightwards under 420px ultra-narrow view, and clamp dialog positioning to avoid left sidebar occlusion.
9
+ - **fix(ui)**: Close secondary dialogs in LIFO order on Escape, align action button styles, and unify tooltip wrappers.
10
+ - **fix(compat)**: Support DSH 0.2.0-rc.2+ 3-argument `coldSnapshot` signature, fixing log offset warnings and projection refresh after workspace move (#25).
11
+ - **fix(workspace)**: Sync sidebar state on archive/unarchive via official `uiWorkspace`/`workspaces` commands, unpin archived sessions, and stop active sessions on archive (#26).
12
+ - **test**: Add automated test coverage for issues #25, #26, and #28.
13
+ - **docs**: Streamline dialog opacity and theming documentation in README files.
14
+
15
+ ## 0.6.3 — 2026-10-03
16
+
17
+ - **feat(settings)**: Add "Dialog opacity" preference (50%–100%) in Settings card to adjust plugin dialog background transparency without affecting text, borders, or controls (#23).
18
+ - **fix(theme)**: Directly consume official DSH `--dsw-alias-*` theme tokens instead of locally redefining them, removing hardcoded backgrounds and `!important` locks that broke custom themes (#23).
19
+ - **fix(theme)**: Subscribe to DSH `theme/change` event for reliable theme synchronization across light and dark modes.
20
+ - **fix(ui)**: Keep modal layers within DSH's 1000–1100 floating tier (`1020` panel, `1050` overlay root) so DSH tooltips remain visible above dialogs (#21).
21
+ - **fix(ui)**: Standardize dialog action buttons to 28px height with unified transparent border and hover styles.
22
+ - **fix(ui)**: Style dropdown `<option>` elements with DSH `--dsw-alias-bg-layer-3` to fix white popup backgrounds in dark mode.
23
+ - **fix(ui)**: Improve delete button contrast across custom themes using `--dsw-alias-button-floating-fill`.
24
+ - **fix(ui)**: Align AI prompt copy and import layout with standard field structure in Annotation dialog.
25
+ - **fix(css)**: Rewrite injected plugin stylesheet on reload to ensure styles update during client hot reloads.
26
+ - **test**: Add comprehensive test suites for dialog opacity, theme tokens, and z-index layering.
27
+ - **docs**: Clarify that validation is targeted primarily for the official DSH Desktop client.
28
+
29
+ ## 0.6.2 — 2026-10-02
30
+
31
+ - **feat(update)**: Add self-update checking and installation workflow with header whale icon, modal `UpdateDialog`, and host API endpoints.
32
+ - **feat(settings)**: Add `SessionManagerSettingsCard` in DSH Settings with version info, auto-check toggle, update actions, and npm registry source selection (npm official or China mirror).
33
+ - **feat(ui)**: Add responsive container queries for header actions (720px / 520px) transitioning between full labels, 32×32 icon buttons, and overflow menu (`⋯`).
34
+ - **fix(ui)**: Reset main view to welcome screen when deleting the active session via `ctx.uiWorkspace.clearMain()`, matching archive behavior.
35
+ - **fix(ui)**: Mount dialogs into dedicated `#dsh-session-manager-overlay-root` with dynamic z-index stacking (`nextDialogZ()`) to escape ancestor stacking contexts (#19).
36
+ - **fix(ui)**: Render `FooterAction` directly as native buttons in wide/rail modes, eliminating duplicate container wrappers (#20).
37
+ - **fix(ui)**: Optimize title bar button ordering with Archive first and vertically centered icons.
38
+ - **fix(css)**: Remove unscoped global tooltip selectors (`[role=tooltip]`, `.bubble`) that interfered with DSH core message bubbles (#21).
39
+ - **test**: Add coverage for updates, settings card, responsive headers, registry switching, and active session deletion.
40
+
41
+ ## 0.5.4 — 2026-09-30
42
+
43
+ - **docs**: Update project description and metadata to reflect official Web UI and Desktop app support; clarify client synchronization, install profiles, and runtime requirements.
44
+
45
+ ## 0.5.3 — 2026-09-26
46
+
47
+ - **fix(ui)**: Forward translation function `t` to panel `MoveDialog` and unarchive archived sessions when opening from row (#17).
48
+ - **fix(persistence)**: Stamp `header.version` from target filename during `moveSession` to ensure valid headers on V4 artifacts (#18).
49
+ - **fix(ui)**: Display friendly `displayTitle` instead of raw ID in confirmation descriptions and avoid crashes in title-bar action lookups.
50
+ - **fix**: Strip UTF-8 BOM from `package.json` to prevent JSON parse errors.
51
+ - **test**: Add regression guards for issues #17 and #18.
52
+
53
+ ## 0.5.2 — 2026-09-23
54
+
55
+ - **fix(bulk management)**: add a missing entry-point for batch operations with a new **Select** toolbar toggle in the panel header.
56
+ - **fix(bulk management)**: Remove duplicate return statement in `SessionManagerPanel` that prevented bulk dialogs from rendering.
57
+ - **feat(bulk management)**: Add multi-select checkboxes to session rows with a sticky bulk action bar for archiving, unarchiving, favorites, review flags, tags, priority, moving, and deletion.
58
+ - **feat(bulk management)**: Add batch preset migration action via `/preset-scan` and `/batch` endpoint.
59
+ - **fix(host)**: Fix Cordis dependency injection for `archiveSession`, resolve annotation accessor closure in `runBatchAction`, and add `unfavorite`/`unreview` to supported batch actions.
60
+ - **fix(ui)**: Position bulk dialogs consistently with other dialogs and apply proper dark theme styling.
61
+ - **feat(sessions)**: Prioritize `session.v4.jsonl.zstd` in artifact filename list for DSH 0.1.7+ compatibility.
62
+ - **test(bulk management)**: Add test coverage for bulk selection, actions, batch execution, and static invariants.
63
+
64
+ ## 0.5.1 — 2026-09-18
65
+
66
+ - **feat(annotations)**: Add favorites, review-later flags, tags, multiline notes, and priority levels (1 highest to 5 lowest, default 3 Normal) with atomic persistence, conflict detection, and search/sort integration.
67
+ - **feat(annotations)**: Add opt-in AI assistance with **Copy Prompt** and **Import** JSON from clipboard, supporting schema validation, smart quote normalization, and repair heuristics.
68
+ - **feat(annotations)**: Add inline clear buttons for Tags and Note fields, and streamline dialog layout with unified textarea heights and locale-aware prompts.
69
+ - **feat(manager)**: Add case-insensitive title/ID search, workspace and ungrouped filters, creation time sorting, and count indicators.
70
+ - **fix(safety)**: Validate session IDs, directory containment, symlinks/junctions, and artifact identity before file operations; prevent overwriting occupied destinations.
71
+ - **fix(persistence)**: Separate backup, publication, and rollback phases; preserve recovery files and cleanly abort on write failures.
72
+ - **fix(zstd)**: Use structural frame decoding on rewrite paths and reject corrupt or torn log frames.
73
+ - **fix(startup)**: Normalize snapshot headers, preserve active sessions during startup scan, and reconcile cleanly.
74
+ - **test**: Expand tests covering traversal, junctions, corruption, rollback, and concurrency.
75
+
76
+ ## 0.4.11 — 2026-09-14
77
+
78
+ - **chore(client)**: Drop obsolete `@deepseek-ai/dsh-client-runtime` reference from `dsh.client.inject` manifest (#12).
79
+
80
+ ## 0.4.10 — 2026-09-13
81
+
82
+ - **fix(move)**: Rebind live JSONL writer's header path during cross-workspace moves to prevent `ENOENT` on subsequent writes (#8).
83
+
84
+ ## 0.4.9 — 2026-09-12
85
+
86
+ - **fix(ui)**: Handle Escape key at window level so manager panel and confirmation dialogs close reliably regardless of focus position (#7).
87
+ - **fix(ui)**: Remove backdrop click-to-dismiss behavior and dim backdrops to prevent accidental dismissal and page dimming.
88
+ - **fix(ui)**: Blur trigger button on Escape close to remove lingering focus rings, and eliminate Enter key race conditions.
89
+
90
+ ## 0.4.7 — 2026-09-10
91
+
92
+ - **fix(disk scan)**: Include `session.v3.jsonl.zstd` in artifact scanner filenames to detect generation v3 sessions from DSH 0.1.5-rc.1.
93
+
94
+ ## 0.4.6 — 2026-09-05
95
+
96
+ - **fix(persistence)**: Read all concatenated Zstandard frames in session artifacts to prevent event history truncation.
97
+ - **fix(move)**: Synchronize live session state, persistence coordinator, registry indexes, and workspace accounting during move operations.
98
+ - **fix(preset migration)**: Fall back to ID-based artifact scan when persistence locate returns stale paths, and mirror migrations into live session projections.
99
+ - **recovery**: Add `scripts/heal-v2-sessions.ps1` helper for DSH 0.1.1-rc.2 v2/v0 header anomalies.
100
+
101
+ ## 0.4.5 — 2026-09-05
102
+
103
+ - **fix(move)**: Keep live agent and session instance in place during cross-workspace moves to preserve UI responsiveness without full re-initialization.
104
+ - **fix(preset migration)**: Handle persistence backends gracefully without strict preconditions on `readRaw`/`list`.
105
+
106
+ ## 0.4.4 — 2026-09-03
107
+
108
+ - **docs**: Standardize terminology from "conversation" to "session" across documentation and package manifests.
109
+
110
+ ## 0.4.3 — 2026-09-03
111
+
112
+ - **docs**: Add Awesome DSH Plugin badge and registry listing references.
113
+
114
+ ## 0.4.2 — 2026-09-03
115
+
116
+ - **feat(theme)**: Follow DSH dark/light theme automatically via `data-sm-theme` attribute and scoped CSS variables.
117
+
118
+ ## 0.4.1 — 2026-08-28
119
+
120
+ - **fix(ui)**: Improve hover contrast and styling on title-bar delete button.
121
+
122
+ ## 0.4.0 — 2026-08-28
123
+
124
+ - **feat(preset migration)**: Add per-session preset migration action in Session Manager.
125
+ - **fix(lifecycle)**: Retire stale live agents and persistence owners prior to move or migration.
126
+ - **fix(move)**: Refresh session and workspace state immediately after moving.
127
+
128
+ ## 0.3.0 — 2026-08-27
129
+
130
+ - **feat(preset migration)**: Introduce preset migration for sessions with renamed or missing Agent presets.
131
+ - **feat(move)**: Add cross-workspace move handling and client-side refreshes.
132
+
133
+ ## 0.2.1 — 2026-08-26
134
+
135
+ - **fix(move)**: Move session artifact, stored working directory, and workspace accounting together while preserving history, title, and metadata.
136
+ - **feat(workspaces API)**: Add workspace projection endpoint for move UI.
137
+
138
+ ## 0.2.0 — 2026-08-16
139
+
140
+ - **feat(move)**: Initial move-to-workspace UI and host endpoints (superseded by 0.2.1).
141
+
142
+ ## 0.1.2 — 2026-08-16
143
+
144
+ - **docs**: Synchronize package metadata and documentation for initial release.
145
+
146
+ ## 0.1.1 — 2026-08-16
147
+
148
+ - **fix(panel)**: Hide transient blank-session placeholders from Session Manager panel.
149
+ - **test**: Add host API smoke test and CI package verification.
150
+
151
+ ## 0.1.0 — 2026-08-16
152
+
153
+ - **feat**: Initial release with session deletion, confirmation dialogs, archive management, and Session Manager panel.
package/README.md CHANGED
@@ -11,7 +11,7 @@ English | [中文](README.zh.md)
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
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.
14
+ Verified with the official DSH Desktop client; see [5 Compatibility](#5-compatibility) for the current verification scope. Both environments use the same plugin Host/client functionality; environment-specific installation notes are documented below.
15
15
 
16
16
  ## 1 Features
17
17
 
@@ -47,6 +47,8 @@ Verified with the current official DSH Web UI and Desktop app. Both environments
47
47
  - **Self-update check**: A 🐋 (Whale) icon button in the session manager panel header checks for updates and displays a notification dot when a new version is available. Click to open the update dialog with current and latest versions, and one-click update via the DSH Plugin Manager.
48
48
  - **Settings Card**: Registered under DSH Settings (`settings.plugin.item`). Displays current version, latest version, inline check/update buttons, an auto-check toggle, and GitHub repository link.
49
49
  - **Install Source (Registry)**: Select between **npm official registry** (`registry.npmjs.org`, default) and **China mainland mirror** (`registry.npmmirror.com`) in the Settings Card. Check for updates and download packages directly from the selected registry.
50
+ - **Dialog opacity**: A 50%–100% slider (5% steps, default 100%) with a "Reset to default" button in the Settings Card's preferences section. Adjusts the background fill opacity of plugin dialogs in real time while keeping text, buttons, inputs, tags, and borders fully opaque.
51
+ - **Theme**: Automatically follows the active DSH theme (including third-party theme plugins). Dialogs, settings cards, title-bar buttons, menus, inputs, and all other UI elements seamlessly adapt to light and dark themes.
50
52
 
51
53
  ## 2 UI entry points
52
54
 
@@ -128,9 +130,11 @@ After changing plugin dependencies, `package.json`, bundle configuration, or oth
128
130
 
129
131
  DSH versions are shown above plugin versions; each column represents a tested version combination.
130
132
 
133
+ > Verification note: from 0.6.3 on, this plugin is verified with the official DSH Desktop client only (the Web UI shares the same Host/client code but is no longer covered by the verification matrix).
134
+
131
135
  | v0.2.0-rc.2 | v0.1.7-rc.2 | v0.1.7-rc.1 |
132
136
  | --- | --- | --- |
133
- | 0.6.2, 0.5.4 | 0.5.3 | 0.5.2 |
137
+ | 0.6.4, 0.6.3, 0.6.2, 0.5.4 | 0.5.3 | 0.5.2 |
134
138
 
135
139
  | v0.1.6-alpha.2 | v0.1.5-rc.2 | v0.1.5-rc.1 |
136
140
  | --- | --- | --- |
package/README.zh.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  DeepSeek Harness 会话管理插件:支持删除、归档、跨工作区移动、预设迁移、收藏、待回看、搜索、筛选、排序、优先级、标签、备注及批量操作。
13
13
 
14
- 当前版本已在官方新版 DSH Web UI 与 Desktop 客户端完成实际测试;两种环境共用本插件的 Host 与客户端功能,具体安装方式见下文。
14
+ 已在官方 DSH Desktop 客户端完成实际测试,当前验证范围见「5 兼容性」;两种环境共用本插件的 Host 与客户端功能,具体安装方式见下文。
15
15
 
16
16
  ## 1 功能
17
17
 
@@ -45,6 +45,8 @@ DeepSeek Harness 会话管理插件:支持删除、归档、跨工作区移动
45
45
  - **检查更新**:会话管理窗口顶部增加 🐋(鲸鱼)图标按钮,点击可检查新版本并在有更新时展示小红点提示;点击弹出更新窗口,展示当前版本与最新版本,支持一键调用插件管理器安装更新。
46
46
  - **设置卡片**:注册在 DSH 设置的插件配置页(`settings.plugin.item`)。展示当前安装版本、最新版本状态、卡片内检查更新与更新按钮、自动检查偏好开关以及 GitHub 仓库链接。
47
47
  - **安装源选择**:在设置卡片中可随时切换安装源,可选 **npm 官方源**(`registry.npmjs.org`,默认)与 **中国大陆镜像源**(`registry.npmmirror.com`);检查更新与版本下载将直接请求所选源。
48
+ - **弹窗透明度**:设置卡片「偏好设置」区域提供 50%–100% 滑块(步长 5%,默认 100%)与「恢复默认」按钮,支持调节插件弹窗的背景填充透明度,文字、按钮、输入框、标签与边框等内容保持不透明并即时生效。
49
+ - **主题**:全面跟随 DSH 当前主题(包含第三方主题插件),弹窗、设置卡片、标题栏按钮、下拉菜单、输入框等界面元素自动适配浅色与深色主题。
48
50
 
49
51
  ## 2 UI入口
50
52
 
@@ -126,9 +128,11 @@ dsh plugin --profile web add <本仓库路径>
126
128
 
127
129
  DSH 版本在上,插件版本在下;每列表示一组已测试的版本组合。
128
130
 
131
+ > 版本验证说明:自 0.6.3 起,本插件仅在官方 DSH Desktop 客户端上进行验证(Web UI 与本插件共用同一套 Host / 客户端代码,但不再纳入验证范围)。
132
+
129
133
  | v0.2.0-rc.2 | v0.1.7-rc.2 | v0.1.7-rc.1 |
130
134
  | --- | --- | --- |
131
- | 0.6.2, 0.5.4 | 0.5.3 | 0.5.2 |
135
+ | 0.6.4, 0.6.3, 0.6.2, 0.5.4 | 0.5.3 | 0.5.2 |
132
136
 
133
137
  | v0.1.6-alpha.2 | v0.1.5-rc.2 | v0.1.5-rc.1 |
134
138
  | --- | --- | --- |