@gehennawu/dsh-service 0.33.0 → 0.39.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.
package/README.en.md CHANGED
@@ -9,7 +9,7 @@
9
9
  <em>面向自托管 DeepSeek Harness (DSH) Web 的服务控制与运维插件。</em>
10
10
  </p>
11
11
 
12
- [![Version](https://img.shields.io/badge/version-0.33.0-3b82f6.svg?style=flat-square)](package.json)
12
+ [![Version](https://img.shields.io/badge/version-0.39.0-3b82f6.svg?style=flat-square)](package.json)
13
13
  [![License: MIT](https://img.shields.io/badge/License-MIT-10b981.svg?style=flat-square)](LICENSE)
14
14
  [![DSH Compatibility](https://img.shields.io/badge/DSH-%E2%89%A50.1.1--rc.2-6366f1.svg?style=flat-square)](https://github.com/deepseek-ai/deepseek-harness)
15
15
  [![Cordis](https://img.shields.io/badge/Cordis-v4.x-f59e0b.svg?style=flat-square)](https://cordis.moe/)
@@ -48,10 +48,12 @@ A service-control and operations plugin for self-hosted DSH Web: safe restart, v
48
48
 
49
49
  ## 🚀 Features
50
50
 
51
- The Settings "Service Control" panel has ten tabs: **Overview · Notifications · Health · Model stats · Quota lookup · Backups · Skills · Subagents · Sessions · Restart**; Restart, Quota lookup, Skills, Subagents, and Sessions can each enable a **quick entry in the settings left navigation** (off by default).
51
+ The Settings "Service Control" panel has a six-page navigation: **Overview · Model stats · Quota lookup · Health · Maintenance · Configuration**; "Maintenance" aggregates five subpages — Sessions · Skills · Subagents · Backups · Restart — and "Configuration" aggregates Features · Task notifications. Restart, Quota lookup, and Sessions can each enable a **quick entry in the settings left navigation** (off by default; the Skills and Subagents sidebar entries were removed).
52
52
 
53
53
  Under **Plugins → Plugin configuration**, ten host-level switches: **Health diagnostics, Model statistics, Quota lookup, Backup maintenance, Task notifications, Skill manager, Subagent model, Session manager, Mobile adaptation, `/healthz` liveness endpoint** (all on by default except Mobile adaptation). All are live settings: disabling hides the UI, stops polling/subscriptions, and makes the host reject that capability; Overview and Restart stay available.
54
54
 
55
+ ![Plugin configuration](./screenshots/plugin-config_en.png)
56
+
55
57
  ### Version and updates
56
58
 
57
59
  - Shows the current DSH and plugin versions, linking to GitHub Releases
@@ -60,14 +62,18 @@ Under **Plugins → Plugin configuration**, ten host-level switches: **Health di
60
62
 
61
63
  ### Safe restart
62
64
 
65
+ ![Safe restart](./screenshots/restart_en.png)
66
+
63
67
  - Detects active agents, background jobs, and terminals before restart; lists them and requires explicit confirmation
64
68
  - `/restart` also works in conversations; automatically refuses while work is running
65
69
  - Probes the new process after restart and reloads the page; manual reload offered after 60 seconds
66
- - Optional "Restart" entry in the settings left navigation (off by default), sharing the same confirmation flow
70
+ - Optional "Restart" entry in the settings left navigation (off by default), sharing the same confirmation flow as the "Maintenance → Restart" subpage
67
71
  - A suspected manual terminal launch warns that nothing will bring the process back and gets a yellow caution in Health
68
72
 
69
73
  ### Health diagnostics
70
74
 
75
+ ![Health diagnostics](./screenshots/health-diagnostics_en.png)
76
+
71
77
  - Uptime, memory, session count, active agents, and background jobs; a "Process and runtime" card shows platform, architecture, and Node version
72
78
  - Full diagnostics: session storage, workspace registry, backup storage, tar availability, file permissions, runtime environment, and Node version
73
79
  - File-permission deep scan and repair (two-step confirmation)
@@ -108,6 +114,8 @@ Under **Plugins → Plugin configuration**, ten host-level switches: **Health di
108
114
 
109
115
  ### Backup management
110
116
 
117
+ ![Backup management](./screenshots/backup-management_en.png)
118
+
111
119
  - Creates `.tar.gz` archives of sessions, configuration, and plugin-profile manifests
112
120
  - Export download / import upload / delete (two-step confirmation); unlimited, never auto-pruned
113
121
  - Restore: extract and overwrite to the corresponding paths, then restarts automatically after confirmation
@@ -142,6 +150,8 @@ Under **Plugins → Plugin configuration**, ten host-level switches: **Health di
142
150
 
143
151
  ### Mobile adaptation
144
152
 
153
+ ![Mobile adaptation](./screenshots/mobile-adaptation_en.png)
154
+
145
155
  - Off by default; active only below a 1024 px viewport (phones / narrow windows), desktops unaffected
146
156
  - Sidebar becomes a drawer, details column is hidden on mobile (matching the official narrow-screen behavior), modals become full-screen panels, settings left nav a horizontal top strip
147
157
  - Scroll immersion: inside a conversation, swiping down auto-hides the header and composer for full-screen reading; swipe up, reaching the bottom, or focusing the composer brings them back, with a resident bottom handle as a manual toggle. Programmatic scrolling (streaming pinning, anchor jumps) never triggers it
@@ -152,12 +162,14 @@ Under **Plugins → Plugin configuration**, ten host-level switches: **Health di
152
162
 
153
163
  ### Session manager
154
164
 
165
+ ![Session manager](./screenshots/session-manager_en.png)
166
+
155
167
  - **View**: one unified list for sessions (running / cold / archived) with status badges, workspace, event count, and size; **starts on the “Archived” view by default**, and each of the All / Archived / Deleted filters fetches its own subset from the host **once,** then keeps it in a **module-level cache** — switching filters sends no requests, and **closing and reopening the panel renders the cache instantly while quietly refreshing the current view once in the background** (only a page reload clears the cache), with a “Refresh” button for a forced refetch of the current view; sizes are never shipped with the list — each row fetches its size lazily (double-cached in the module and in host memory: reopened panels and refreshed pages reuse it, cleared on delete); the detail page walks events as paged cards (single-slot host snapshot cache: paging and reopening the same session never re-reads the log, live sessions stay fresh within 30 seconds), with **event bodies rendered as official Markdown** (reusing the platform renderer `MarkdownText`, same look as the chat UI: code blocks, lists, tables, math — raw HTML and unsafe links are rejected by default; older DSH shells without the renderer automatically fall back to plain text), and consecutive system events collapse into a countable block by default — click to expand the details; **entering a detail remembers the list scroll position and returning to the list drops you back exactly where you were** (reusing the official panel's scroll container; changing the filter or search while in the detail discards the restore)
156
168
  - **Export**: one-click download of the official full ZIP (including subagents and attachments) via the official export path — the host never assembles a package itself
157
169
  - **Archive**: archived sessions disappear from the official sidebar (official behavior); the panel marks “archiving is one-way”, and the official UI cannot unarchive
158
170
  - **Content search**: full-text semantic search over conversations (case-insensitive, whitespace-flexible) with cross-session hits (matched text is highlighted; multiple matches show seq chips for one-click jumps) → **hit-window view**: opening a result centers a context window on the matched seq (15 events on each side; the matched event gets a HIT badge, is highlighted, **auto-scrolled into view and flashes for 2 seconds**), with **previous / next match** navigation and navigator seq chips for direct jumps (mirroring dsh-session-kb's Locate interaction); the window can keep loading later events; optionally restricted to the archived zone
159
171
  - **Delete**: Only archived sessions can be deleted, and a session that becomes live is rejected again immediately before execution; the two-phase confirmation shows its id / title / workspace / size, persists the deletion record atomically first, and only then removes the log directory; deleted records stay visible (read-only) under the Deleted filter
160
- - Entry: “Sessions” chip in the top “Maintenance” tab group (on by default); the optional settings-sidebar entry is off by default
172
+ - Entry: the “Sessions” subpage under “Maintenance” (on by default); the optional settings-sidebar entry is off by default
161
173
  - Delete records live at `$DSH_HOME/dsh-service-sessions-deleted.json` (atomic write, `0600`, title/time only — no content, not recoverable)
162
174
 
163
175
  ### External liveness probe
@@ -172,7 +184,7 @@ The plugin is a Cordis two-half structure: the **Host half (`index.js`)** owns a
172
184
  ```mermaid
173
185
  flowchart TB
174
186
  subgraph Client["🌐 Client browser half (client.js)"]
175
- UI["Settings : Service Control panel (9 tabs + quick entries)<br/>quota ring · notification bell · mobile adaptation"]
187
+ UI["Settings : Service Control panel (six-page navigation + quick entries)<br/>quota ring · notification bell · mobile adaptation"]
176
188
  end
177
189
 
178
190
  subgraph Host["⚙️ Host half (index.js)"]
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  <em>A service-control &amp; operations plugin for self-hosted DeepSeek Harness (DSH) Web.</em>
10
10
  </p>
11
11
 
12
- [![Version](https://img.shields.io/badge/version-0.33.0-3b82f6.svg?style=flat-square)](package.json)
12
+ [![Version](https://img.shields.io/badge/version-0.39.0-3b82f6.svg?style=flat-square)](package.json)
13
13
  [![License: MIT](https://img.shields.io/badge/License-MIT-10b981.svg?style=flat-square)](LICENSE)
14
14
  [![DSH Compatibility](https://img.shields.io/badge/DSH-%E2%89%A50.1.1--rc.2-6366f1.svg?style=flat-square)](https://github.com/deepseek-ai/deepseek-harness)
15
15
  [![Cordis](https://img.shields.io/badge/Cordis-v4.x-f59e0b.svg?style=flat-square)](https://cordis.moe/)
@@ -48,10 +48,12 @@
48
48
 
49
49
  ## 🚀 功能
50
50
 
51
- 设置页「服务控制」面板十个标签:**概览 · 通知 · 健康诊断 · 模型统计 · 额度查询 · 备份维护 · 技能 · 子代理 · 会话管理 · 重启**;重启、额度查询、技能、子代理、会话管理可另行开启**设置页左列快捷入口**(默认关闭)。
51
+ 设置页「服务控制」面板六页导航:**概览 · 模型统计 · 额度查询 · 健康诊断 · 维护 · 配置**;其中「维护」聚合 会话管理 · 技能 · 子代理 · 备份维护 · 重启 五个子页,「配置」聚合 功能开关 · 任务通知 两个子页。重启、额度查询、会话管理可另行开启**设置页左列快捷入口**(默认关闭;技能与子代理的左列入口已撤销)。
52
52
 
53
53
  「插件 → 插件配置」提供十个宿主级开关:**健康诊断、模型统计、额度查询、备份维护、任务通知、技能管理、子代理模型、会话管理、移动端适配、`/healthz` 探活**(除移动端适配外默认开启)。全部热生效:关闭即隐藏界面、停止轮询并让宿主拒绝对应能力;概览与重启固定保留。
54
54
 
55
+ ![插件配置](./screenshots/plugin-config.png)
56
+
55
57
  ### 版本与更新
56
58
 
57
59
  - 显示当前 DSH 与插件版本,链接 GitHub Releases
@@ -60,14 +62,18 @@
60
62
 
61
63
  ### 安全重启
62
64
 
65
+ ![安全重启](./screenshots/restart.png)
66
+
63
67
  - 重启前检测活跃 Agent、后台任务与终端,展示清单并要求显式确认
64
68
  - 对话输入 `/restart` 也可触发;检测到运行中工作时自动拒绝
65
69
  - 重启后自动探测新进程并刷新页面,60 秒未恢复提供手动刷新
66
- - 可开启「设置页左列显示入口」(默认关闭),与「重启」标签共用同一确认流程
70
+ - 可开启「设置页左列显示入口」(默认关闭),与「维护 → 重启」子页共用同一确认流程
67
71
  - 疑似终端手动启动时提示「退出后不会自动拉起」,健康诊断以黄色警示标注
68
72
 
69
73
  ### 健康诊断
70
74
 
75
+ ![健康诊断](./screenshots/health-diagnostics.png)
76
+
71
77
  - 运行时间、内存、会话数、活跃 Agent 与后台任务;「进程与运行环境」卡显示平台、架构与 Node 版本
72
78
  - 完整诊断:会话存储、工作区注册表、备份目录、tar 可用性、文件权限、运行环境与 Node 版本
73
79
  - 文件权限深检与修复(两段式确认)
@@ -108,6 +114,8 @@
108
114
 
109
115
  ### 备份管理
110
116
 
117
+ ![备份管理](./screenshots/backup-management.png)
118
+
111
119
  - 创建会话、配置与插件 profile 清单的 `.tar.gz` 归档
112
120
  - 导出下载 / 导入上传 / 删除(两段式确认);不限份数、不自动清理
113
121
  - 恢复:解压覆盖对应路径,确认后自动重启
@@ -142,16 +150,20 @@
142
150
 
143
151
  ### 会话管理
144
152
 
153
+ ![会话管理](./screenshots/session-manager.png)
154
+
145
155
  - **查看**:统一列表展示会话(运行中 / 冷会话 / 已归档),行内标状态徽章、工作区、事件数、文件体积;**默认停在「仅归档」视图**,全部 / 仅归档 / 已删除三个筛选各自**首次**按需向宿主拉取对应子集并缓存(模块级缓存:切换筛选零请求、**关掉面板再打开秒显缓存 + 后台静默刷新一次保鲜**,页面刷新才清零),「刷新」按钮可强制重拉当前视图;文件体积不随列表下发、行内按需懒加载(模块级 + 宿主进程内存双层缓存:刷新浏览器 / 重开面板直接复用,删除时失效);**进详情记住列表滚动位置,返回列表原地不动**(沿用官方面板滚动容器,详情期间切筛选 / 改搜索则放弃恢复);详情按事件卡片分页浏览(宿主单槽位快照缓存:翻页/重进详情零重复读取,live 会话 30 秒内保鲜),**正文按官方 Markdown 富文本渲染**(复用平台官方渲染器 `MarkdownText`,与聊天界面观感一致:代码块/列表/表格/数学公式、默认拒原始 HTML 与危险链接;老版本 DSH 未提供该渲染器时自动回落纯文本),连续系统事件默认折叠为计数块、点击展开明细
146
156
  - **导出**:一键下载官方完整 ZIP(含子代理与附件),复用官方导出链路,宿主不自己拼包
147
157
  - **归档**:归档后从官方侧栏隐藏(官方行为);面板内明确标注「归档为单项操作」,官方不支持恢复
148
158
  - **内容搜索**:对话全文语义搜索(大小写不敏感、空白灵活),跨会话命中列表(匹配文本高亮;多命中显示 seq 位置芯片、可一键直达)→ **命中窗口视图**:打开即以命中 seq 为中心展示上下文窗口(命中前后各 15 条事件;命中行标「命中」徽章高亮、**自动滚动定位并闪烁 2 秒**),支持**上一个 / 下一个命中**翻跳与导航条 seq 芯片直达(参考 dsh-session-kb 的 Locate 交互);窗口可继续加载后续事件;可限定仅搜归档区
149
159
  - **删除**:仅已归档会话可删除,且执行前再次拒绝运行中的会话;两段式确认先展示会话 id / 标题 / 工作区 / 文件体积,删除记录先原子落盘、再移除日志目录;已删除记录在「已删除」筛选下可见(只读)
150
- - 入口:顶部标签「技能与维护」组「会话管理」胶囊(默认开),设置页左列入口可选(默认关)
160
+ - 入口:「维护」页子标签「会话管理」(默认开),设置页左列入口可选(默认关)
151
161
  - 删除记录存 `$DSH_HOME/dsh-service-sessions-deleted.json`(原子写入、`0600`,仅标题/时间,不含内容、不可恢复)
152
162
 
153
163
  ### 移动端适配
154
164
 
165
+ ![移动端适配](./screenshots/mobile-adaptation.png)
166
+
155
167
  - 默认关闭;仅在视口 <1024px(手机竖屏 / 窄窗口)生效,桌面完全无感
156
168
  - 侧栏变抽屉、详情列移动端隐藏(对齐官方窄屏语义)、模态变全屏面板、设置左列导航变顶部横滑
157
169
  - 滑动沉浸:会话内下滑自动收起头部与输入框全屏阅读,上滑 / 回到底部 / 聚焦输入框即恢复,底部常驻小把手可随时点开合;流式贴底、锚点跳转等程序化滚动绝不误触发
@@ -172,7 +184,7 @@
172
184
  ```mermaid
173
185
  flowchart TB
174
186
  subgraph Client["🌐 Client 浏览器端 (client.js)"]
175
- UI["设置页「服务控制」面板(9 标签 + 快捷入口)<br/>额度圆环 · 通知铃铛 · 移动端适配"]
187
+ UI["设置页「服务控制」面板(六页导航 + 快捷入口)<br/>额度圆环 · 通知铃铛 · 移动端适配"]
176
188
  end
177
189
 
178
190
  subgraph Host["⚙️ Host 服务端 (index.js)"]