@gehennawu/dsh-service 2.0.2 → 2.0.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/README.en.md +4 -5
- package/README.md +4 -5
- package/backup-routes.js +1 -1
- package/client.js +1 -1
- package/index.js +3 -20
- package/package.json +1 -2
- package/quota-routes.js +1 -1
- package/session-routes.js +1 -1
- package/skill-routes.js +1 -1
- package/subagent-routes.js +1 -1
- package/plugin-compat.js +0 -611
package/README.en.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<em>DeepSeek Harness (DSH) Web 服务控制与运维插件。</em>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
|
-
[](package.json)
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
15
15
|
[](https://cordis.moe/)
|
|
@@ -94,10 +94,9 @@ Under **Plugins → Plugin configuration**, twelve host-level switches: **Health
|
|
|
94
94
|
|
|
95
95
|
- Uptime, memory, session count, active agents, and background jobs; a "Process and runtime" card shows platform, architecture, and Node version
|
|
96
96
|
- Full diagnostics: session storage, workspace registry, backup storage, tar availability, file permissions, runtime environment, Node version, and the **usage index** — rendered as a two-line check list (name + status dot / detail) with abnormal rows locally emphasized
|
|
97
|
-
- **Usage index**: reports how many sessions are indexed, when the index was last updated, and how many sessions failed to index (a failed fold silently undercounts usage). Failed sessions are partial-success, so they are
|
|
97
|
+
- **Usage index**: reports how many sessions are indexed, when the index was last updated, and how many sessions failed to index (a failed fold silently undercounts usage). Failed sessions are partial-success, so they are reported as informational rather than a warning and do not surface as an overview attention item; an index that has never been built (the Model statistics page has not been opened yet) is informational; the whole check is omitted while the Model usage feature is off (the host only skips refreshing the index in that state, so reporting would be stale and misleading)
|
|
98
98
|
- **Notification permission**: the diagnostics page appends a browser-side check after the host checks — a blocked or not-yet-granted system-notification permission both mean "notifications will not fire", with a pointer to restore it; an unsupported browser is informational. The row stays inside the diagnostics page: it never enters overview attention items or lights the ⚠ (using notifications is a user choice), and it is not rendered at all while Task notifications is off
|
|
99
99
|
- **Plugin health checks**: checks for anomalies only (the official plugin page already provides the full inventory and toggles, so no duplicate list here) — a failed plugin or one waiting on dependencies marks the check as error/warning, while fresh pending/loading fibers receive a short startup grace period; disposed or unknown states are explicit informational rows and do not become warnings. Affected plugins are listed below the check list with clipped, redacted failure text and missing deps; failed plugins can be reloaded behind a two-step confirmation (only entries the host confirmed as failed); manually disabled plugins (built-in or custom) never count as an anomaly
|
|
100
|
-
- **Plugin compatibility**: every enabled plugin is scanned against the interfaces DSH alpha versions have removed or changed (client suppliers, the SQLite persistence backend, chat/status-line style hashes, deprecated attributes, legacy settings surfaces) — a hit flags the plugin as "possibly incompatible" with the concrete reason (e.g. "Declares the removed client supplier @deepseek-ai/dsh-client-runtime"). Tiered verdict: only a real `require`/`import` reference is flagged "possibly incompatible"; a supplier that appears only in the manifest (unused in code) falls back to a gray "stale declaration" note — the official loader silently skips missing suppliers, so it is harmless and merely signals the author to clean up; retired slots (e.g. settings.plugin.item) and references to removed client services (e.g. settingsScope — callback-shaped references merely degrade silently while only a declarative inject hangs activation; the text scan cannot tell shapes apart and reports the milder tier) are downgraded to a blue "references a retired interface" notice that does not disrupt plugin execution or raise a yellow warning. Before upgrading to alpha or right after doing so, you can see whether third-party plugins kept up; fully local scan with cached results, zero network
|
|
101
100
|
- File-permission deep scan and repair (two-step confirmation) behind a collapsed "Permissions & repair" section
|
|
102
101
|
- Suspected manual launch → yellow "no restart assurance" caution; no backups is informational only and never lights the ⚠
|
|
103
102
|
|
|
@@ -197,11 +196,11 @@ Under **Plugins → Plugin configuration**, twelve host-level switches: **Health
|
|
|
197
196
|
- Off by default; active only below a 1024 px viewport (phones / narrow windows), desktops unaffected
|
|
198
197
|
- 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
|
|
199
198
|
- The official Plugins panel header never wraps its text on phones: when "title + intro" and "refresh / Add plugin" no longer fit one row, the whole toolbar drops to a second row flush right, keeping the intro and the button label each on a single line; this also fixes the old drawer-button clearance rule that rewrote this page header's vertical/right padding (it used to squeeze the intro into two lines with an orphan character and wrap the "Add plugin" label inside its pill)
|
|
200
|
-
- The model
|
|
199
|
+
- The model selector follows dynamic untruncated measurement with persistent reasoning effort: removes the 45cqw clamp so measurement reflects natural unclipped text; when space allows, it shows the brand icon, full model name, and reasoning effort without truncation; when space is tight (narrow screens, long names, or tools added by other plugins), the model name collapses into compact form while the reasoning effort (e.g. High / Low) and brand icon remain persistently displayed ([brand icon] High ▾), models without reasoning effort collapse into a sleek 45px icon button, with zero wrapping and zero awkward clipping; on mobile the "Search models…" input row is hidden to prevent autoFocus from forcing up the mobile on-screen keyboard, presenting the model list directly
|
|
201
200
|
- The stats line under the composer ("turns/steps · tok/s | tok · cache hit") **stays on one line, centred and straight** on phones: this row's own horizontal padding is tightened (official 32 px → 2 px) along with its gaps to free up width, and the official `justify-content` centres both chips — zero truncation from ~420 px up, proportionally less text cut than the official fixed truncation below that, with no wrapping and no horizontal scrolling; this also works on older DSH (on 0.1.5-rc.2 the row spans the full width, where the earlier sub-item `flex-grow` pushed both chips as a group to the left — they no longer grow) (desktops unaffected)
|
|
202
201
|
- The session header is re-flowed on phones (≤560 px): the title row keeps only the **title + preset chip** (the chip hugs the "…" button on the right, the title stays nearly fully visible), while the "N subagents" and "N background jobs running" counter chips park as a pair on the right of the Conversation/Trajectory tab row (tab gap 36→20, tapping a chip still opens its menu); the official crumbs **hard-clip** is eliminated, and layouts ≥561 px keep the official flow. From DSH 0.1.7-rc.1 the official preset label hides itself via `@container (width<=540px)` (the container is the title row, roughly viewports up to 606 px), so the mode chip vanished on every phone; the plugin overrides that back to visible across the whole mobile range (from 390 px up the title stays untruncated, only 320–375 px trade away 15–70 px of title as an ellipsis)
|
|
203
202
|
- The Agent Team panel stays on screen on phones (<1024 px): the official panel is left-anchored (`left:0`), so sitting in the header's right-hand action slot pushes it off the right edge (measured 112–352 px past the viewport at 320–1023 px). On mobile the session header becomes the positioning context and the panel is re-anchored to the **right with a 16 px inset** and capped at `100vw − 32px`, leaving 16 px on each side; desktop ≥1024 px keeps the official geometry byte-for-byte
|
|
204
|
-
- Scroll immersion: inside a conversation, swiping down auto-hides the header and composer for full-screen reading (the composer
|
|
203
|
+
- Scroll immersion: inside a conversation, swiping down auto-hides the header, the top-left drawer icon, and composer for full-screen reading (the top-left drawer icon slides up and fades out in sync with the top-right sidebar button, and the composer yields its layout space so the transcript really fills the screen; on reveal, if you are still at the end of the conversation it re-aligns to the bottom). Swipe up, tapping the official "Back to bottom" button, or focusing the composer brings them back (no extra floating button); already sitting at the end of the conversation, a single small backward nudge reveals it right away (no full threshold needed), and after a back-to-bottom tap the resting position gets one extra bottom snap. Programmatic scrolling (streaming pinning, anchor jumps) never triggers it
|
|
205
204
|
- Swipeable drawers: with both drawers closed, a horizontally dominant swipe rightward anywhere opens the sidebar drawer and a swipe leftward anywhere opens the official right sidebar (DSH 0.1.5+; stays inert when unavailable); once open, a swipe in the reverse direction anywhere closes them. Swipes starting at the screen edge additionally benefit from stolen-gesture completion for browser edge navigation, and horizontal scrolling inside editors never misfires
|
|
206
205
|
- The "Back to bottom" button is shifted flush right on mobile (no more large empty strip); a matching circular up-arrow now sits above it on all platforms, jumping to the previous user message on each click for step-by-step back navigation. Targets outside the loaded history auto-trigger the official "load earlier" action; the button hides once you reach the very top and reappears when you scroll back down
|
|
207
206
|
- Transparent large-JSON compression (≥4KB auto gzip/brotli per `Accept-Encoding`) speeds up long session histories
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<em>A service-control & operations plugin for DeepSeek Harness (DSH) Web.</em>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
|
-
[](package.json)
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
15
15
|
[](https://cordis.moe/)
|
|
@@ -94,10 +94,9 @@ DSH Web 服务控制与运维插件:安全重启、版本管理与一键升级
|
|
|
94
94
|
|
|
95
95
|
- 运行时间、内存、会话数、活跃 Agent 与后台任务;「进程与运行环境」卡显示平台、架构与 Node 版本
|
|
96
96
|
- 完整诊断:会话存储、工作区注册表、备份目录、tar 可用性、文件权限、运行环境、Node 版本与**使用统计索引**——**两行检查清单**(检查名+状态点 / 详情),异常行局部淡染强调、正常行低对比
|
|
97
|
-
-
|
|
97
|
+
- **使用统计索引**:报出已索引会话数、索引更新时间与未能索引的会话数(单会话折读失败会让用量静默少算)。失败会话按「部分成功」处理,记提示而非警告,不点亮警告状态、不进概览可行动项;尚未建立索引(还没打开过模型统计页)记信息级;「模型统计」开关关闭时整项不检查(宿主在该状态下本就不刷新索引,报了只会是陈旧误导)
|
|
98
98
|
- **通知权限**:诊断页在宿主检查项之后追加一行浏览器侧检查——系统通知被拒绝或尚未授权都意味着「通知不会响」,并给出恢复入口;浏览器不支持时记信息级。该行只留在诊断页内,不进概览可行动项、不点亮标签 ⚠(是否用通知是用户选择),「任务通知」开关关闭时整行不渲染
|
|
99
99
|
- **插件健康检查**:只检查异常(官方插件页已有完整清单与开关,这里不做重复清单)——插件失败或依赖未就绪时检查项报错/警告,刚启动的 pending/loading 有短暂宽限;已释放或未知状态显式标为信息级,不误报为警告。检查清单下方列出异常插件(名称、已脱敏且限长的错误、缺失依赖);失败插件可**两段式确认后重新加载**(只作用于宿主已确认失败的条目);手动停用的插件(无论内置还是自定义)一律不算异常
|
|
100
|
-
- **插件兼容性**:对照 DSH alpha 版本已移除/变更的接口(客户端供应商、SQLite 持久化后端、聊天/统计条样式哈希、弃用属性、设置面旧接口)扫描每个启用插件——命中即提示「可能不兼容」并给出具体原因(如「声明了已移除的客户端供应商 @deepseek-ai/dsh-client-runtime」)。分级判定:**代码真实 require/import 才报「可能不兼容」**;仅在 manifest 声明、代码未引用的供应商降为灰色「仅声明残留」(官方加载器对缺失供应商静默跳过,实际无害,提示作者清理即可);退役槽位(如 settings.plugin.item)、已移除客户端服务的引用(如 settingsScope——回调形态只静默退化、声明式 inject 才挂起激活,文本扫描分不清形态按轻档上报)等降为蓝色「引用已退役接口」提示,不影响插件运行亦不触发黄色警告。升级 alpha 前或刚升级后看一眼就知道第三方插件有没有跟上;纯本地扫描、结果缓存、零网络
|
|
101
100
|
- 文件权限深检与修复(两段式确认)收敛在**默认折叠**的「权限与修复」区(有异常时按钮显示计数)
|
|
102
101
|
- 疑似手动启动 → 黄色警示「重启无保障」;无备份属信息级提示,不点亮 ⚠
|
|
103
102
|
|
|
@@ -212,11 +211,11 @@ DSH Web 服务控制与运维插件:安全重启、版本管理与一键升级
|
|
|
212
211
|
- 默认关闭;仅在视口 <1024px(手机竖屏 / 窄窗口)生效,桌面完全无感
|
|
213
212
|
- 侧栏变抽屉、详情列移动端隐藏(对齐官方窄屏语义)、模态变全屏面板、设置左列导航变顶部横滑
|
|
214
213
|
- 官方插件面板页(「插件」)顶部手机端不折行:标题+简介与「刷新/添加插件」放不下时工具栏整体落到第二行右缘,简介与按钮文案各自单行;同时修掉抽屉钮让位内边距连带改写该页头部纵向/右侧内边距的旧写法(曾把「安装、启用和配置插件」挤成两行、「添加插件」按钮内文案折两行溢出胶囊)
|
|
215
|
-
-
|
|
214
|
+
- 模型选择按钮自适应零截断与思考程度常驻:放宽官方 45cqw 硬限宽,使测宽基于真实无损文字;空间充裕时完整显示「厂家图标 + 模型全名 + 思考程度」(零截断),空间吃紧时(小屏手机、长模型名或被其他插件占用工具栏)模型全名自动收缩为紧凑态,但思考程度(如 High / Low)与厂家图标永远保持显示([厂家图标] High ▾),无思考程度的模型则收成 45px 纯图标钮,全程单行不折行、不截断文字;移动端模型选择弹窗隐藏「搜索模型…」行,防止 autoFocus 强行唤起软键盘遮挡面板,模型列表直接展示更清爽
|
|
216
215
|
- 统计条(输入框下方「轮/步/tok/s | tok/缓存命中」)在手机上**保持一行、居中且不歪**:收紧这一行自身的左右内边距(官方 32px→2px)与列间距换出可用宽度,两枚统计交给官方 `justify-content` 居中排开——≥~420px 视口零截断,更窄视口按比例各让一点(远少于官方的固定截断),不换行、不横向滚动;同时兼容老版本 DSH(0.1.5-rc.2 上这条行是整行宽,早期实现的子项 `flex-grow` 会把两枚统计整组推到左边,现已改为不生长)(桌面不受影响)
|
|
217
216
|
- 会话顶栏手机端重排(≤560px):标题行只留**标题 + 模式芯片**(芯片右靠贴住「…」钮,标题基本完整可见),「N 个子代理」与「N 个后台任务运行中」两枚计数芯片泊到「对话/轨迹」标签行右缘成一对(标签间距 36→20,点芯片本体仍开各自菜单);官方 crumbs 放不下时的**拦腰硬裁**彻底消除,561px 以上与桌面保持官方原布局。DSH 0.1.7-rc.1 起官方给模式芯片加了 `@container (width<=540px)` 隐藏(容器是标题行,约合 606px 视口),手机上曾整片消失——本插件在整个移动端带内覆盖回可见(390px 以上标题仍完整不裁,仅 320~375px 档标题略带省略号)
|
|
218
217
|
- Agent Team 弹窗手机端不越屏(<1024px):官方 Agent Team 面板自带左锚(`left:0`),挂在头部右侧动作槽上会整体右移出屏(实测 320~1023px 越出 112~352px)。移动端把会话头部设为定位上下文、面板改**右锚 16px** 并按 `100vw − 32px` 封顶,两缘各留 16px;桌面 ≥1024px 官方几何逐字不变
|
|
219
|
-
-
|
|
218
|
+
- 滑动沉浸:会话内下滑自动收起头部、左上角抽屉图标与输入框全屏阅读(左上角抽屉图标与右上角右侧栏展开按钮同步上滑淡出,收起时让出输入框占位,正文真正铺满整屏;回显时若仍停在会话末尾会自动对齐到底),上滑 / 点「回到底部」浮钮 / 聚焦输入框即恢复(无额外悬浮钮);已经停在会话末尾时往回一点即回显(不再等满阈值),点回底后停留位置会补一次贴底对齐;流式贴底、锚点跳转等程序化滚动绝不误触发
|
|
220
219
|
- 滑动开合抽屉:双抽屉关闭时,横移主导的右滑任意位置打开侧栏抽屉、左滑任意位置打开官方右侧栏(DSH 0.1.5+,未就绪时该方向无效);开启后反向横滑任意位置关闭;从屏幕边缘起滑额外享有浏览器手势接管的补完加成,编辑器等真横滚区内的滑动不误触发
|
|
221
220
|
- 「回到底部」浮钮右移贴边(不再空出大片右侧留白);其上方新增同款圆形上箭头(全平台生效,不含移动端),点击逐条跳转上一条用户回复、可连续向上回溯,目标在未加载历史时会自动点「加载更早」补齐,跳到最顶部后按钮自动隐藏、下滑即复现
|
|
222
221
|
- 大 JSON 响应透明压缩(≥4KB 按 `Accept-Encoding` 自动 gzip/brotli),长会话历史首屏提速
|
package/backup-routes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// 备份与恢复(backup)的 RPC 端点:从 apply 的端点表按功能域拆出。
|
|
2
2
|
// 依赖显式注入(工厂解构名单即本模块完整依赖面);handler 体与拆分前逐字一致。
|
|
3
3
|
// 注意:客户端半有单产物约束,宿主半无此约束——兄弟 ESM 模块是本仓库既有惯例
|
|
4
|
-
// (quota-adapters.js / backup-integrity.js / plugin-health.js
|
|
4
|
+
// (quota-adapters.js / backup-integrity.js / plugin-health.js)。
|
|
5
5
|
|
|
6
6
|
import { createBackupIntegrity } from './backup-integrity.js'
|
|
7
7
|
import { join } from 'node:path'
|