dsh-tools
Personal toolbox for the dsh web profile with per-feature toggles: task-done desktop notifications, one-click restart, session deletion, plugin enable/disable, update checks, and UI utilities.
Install
dsh plugin --profile web add dsh-tools
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-tools
DSH web 插件:个人通用工具箱。一个插件收纳多个功能/工具想法,设置页
(设置 → dsh 工具箱)采用页签式导航:「功能开关」页签顶部为 DeepSeek Harness 版本检查、一键重启
(常驻,强制开启无开关)与「任务完成提示」卡片(授权与开关合一:未授权时显示授权按钮,授权完成后在卡片内展示启用/停用开关),
下方为可选功能的开关列表;每个已启用的可选功能一个页签入口(页签超出
宽度时可按住左右拖动查看);开关即时生效并持久化(重启后保留)。
⚠️ 使用提示:本插件纯 AI 制作,无人工含量,可能后续不会对其进行维护,请谨慎使用。
当前功能
key · 功能 · 说明 · 默认
notify.task-done · 任务完成提示 · 当前对话任务完成且网页未聚焦时,在 Windows 桌面右下角弹出系统提示框(置顶),点击跳回会话;开关关闭时不监听、不弹提示 · 开
harness.check · DeepSeek Harness 版本检查 · 「功能开关」页签顶部卡片:检查 DeepSeek Harness 当前版本与 GitHub 最新 Release/tag,仅检查不升级;每次 dsh web 启动后仅首次打开时自动检查,之后手动点「重新检查」 · 强制开启(无开关)
restart.web · 一键重启 dsh web · 「功能开关」页签顶部按钮:重启服务并自动打开新窗口,旧页面自动关闭(开发测试快循环) · 强制开启(无开关)
delete-chat · 会话管理 · 归档会话查看、单条/批量删除会话;列表显示每个会话与工作区占用的磁盘空间;v1.0.0 起先快速返回列表再后台补齐大小,并对目录大小做磁盘缓存,打开更快;删除会话页点击工作区路径可打开对应文件夹 · 开
plugin-toggle · 插件开关 · profile 已安装插件的启用/停用开关;点击插件名可跳转其 GitHub 页(有则显示),行内展示插件功能描述 · 开
update-plugin · 更新检查 · 检查/更新/卸载 profile 已安装插件;支持 npm 注册表与 GitHub(github: / git+https://github.com/... / URL spec,Releases/tags API 探测)安装来源;点击插件名可跳转其 GitHub 页(有则显示);每次 dsh web 启动后仅首次打开该页签时自动检查,之后需手动点「重新检查」 · 开
plugin-catalog · 插件分类视图 · 「设置 → 插件」新增「插件分类」页签:官方(安装 Harness 自带)/ 已安装(插件市场 / GitHub / npm)/ 本地(link:/file: 开发)三个分类筛选浏览;开关关闭时页签自动消失 · 开
ui.usage · 应用用量 · 「应用用量」页签:按时间跨度(今年 / 本月 / 近 7 天 / 近 3 天 / 自定义日期)与模型过滤聚合各会话用量(Token、缓存命中、时长、会话 / 步数);趋势柱图优先读取会话日志按自然日统计真实 usage(磁盘缓存 + 增量扫描),悬停显示具体数据,会话用量列表展示 Token / 命中率 / 估算费用;支持价格配置,v1.0.0 起费用卡片可直接切换峰 / 谷价格(默认谷价) · 关
wechat.openclaw · 微信接入(OpenClaw) · 扫码绑定个人微信,通过腾讯 openclaw-weixin / iLink 协议与 DSH Agent 文字聊天;支持白名单、room / per-user 会话模式、网关启停;v1.0.0 起页签内“使用说明”可展开 / 折叠 · 关
融合功能与参考来源
融合了开源插件的功能(均 MIT 许可,源码文件头与下方条目标注来源;融合版
默认关闭,开启后行为与上游一致,但配置存 dsh-tools 自身的 featureConfig,
设置入口统一在「dsh 工具箱」内):
功能 · 来源 · 许可
ui.usage · yoli-mi/dsh-client-ui-custom · MIT(Copyright (c) 2026 Yoli-mi)
说明:ui-custom 的appearance(外观)、shortcuts(快捷键)、
marketplace(插件市场)模块未融合;ui.enhance(Markdown 渲染 +
浮动历史条)自 v1.1.0 起移除,与 Harness 自带功能定位重复。
v1.1.0 更新
- 更新兼容 DeepSeek Harness 0.1.2-alpha.2(devDependencies 对齐到 0.1.2-alpha.2)。
- 删除「界面增强」(
ui.enhance)功能:用户消息 Markdown 渲染 + 浮动历史条,与 Harness 自带功能定位重复。
v1.1.1 更新
- 更新兼容 DeepSeek Harness 0.1.2-rc.1(devDependencies 对齐到 0.1.2-rc.1)。
- 微信接入的 AgentBridge 适配宿主会话读取 API:宿主已移除
Session.events,改为session.snapshotEvents()读取事件流(lib/wechat/vendor/bridge.js)。微信 AI 回复要求宿主提供该 API(DSH 0.1.2-alpha.4 及以上);更老宿主上该功能不可用。 - 应用用量口径实证(rc.1 会话日志多代采样):
inputTokens + outputTokens + cacheReadTokens ≡ totalTokens,宿主不单列 cache-write 用量,现有聚合数值精确,无需改动。
v1.1.2 更新
- 更新兼容 DeepSeek Harness 0.1.3-alpha.2(devDependencies 对齐到 0.1.3-alpha.2)。
- 修复微信接入在 0.1.3-alpha.1 及以上宿主上回复为空:宿主取消了顶层
assistant/chunk会话事件(Session format v2,流改嵌入assistant/message.data.stream),实时增量改由 agent 作用域事件agent/assistant-stream的start/chunk/end帧发布。AgentBridge 改为订阅该帧通道,并保留旧宿主(≤ 0.1.2)的assistant/chunk兼容订阅(两通道互斥,双订阅不重叠)。 - 新增增量兜底:宿主一个文本增量都没发布时,把
assistant/message聚合出的回复整体交给发送器 —— 调用方只从onDelta取文本,缺这条兜底会「静默空回复」。 test/wechat-openclaw-smoke.mjs新增 bridge 流式通道回归(v2 帧 / 旧信封 / 无增量兜底 / 订阅注销);该套件此前对流式路径零覆盖,正是破坏能通过自检的原因。
v1.1.5 更新
- 更新兼容 DeepSeek Harness 0.2.0-rc.2(devDependencies 对齐到 0.2.0-rc.2;宿主 0.1.7-rc.2 → 0.2.0-rc.2 为跨 minor 升级,逐触点核对后确认无破坏性变更命中本插件)。
- 修复文生图工具
generate_image静默注册失败:宿主tools.register()强制要求output{schema,render},且parameters必须是「紧凑参数表」而非已编译的 JSON Schema;旧写法两项都不符,register()抛TypeError后被本插件自己的try/catch吞掉,表现为「配置了文生图但 Agent 永远调不到工具、界面无任何提示」。现改用宿主导出的defineTool()统一生成定义(与lib/wechat/vendor/weixin/gateway.js写法一致),并把该catch的日志从api.log提升为console.error且写明后果,不再静默。 test/wechat-openclaw-smoke.mjs新增generate_image定义形状回归:走真实register()路径截获定义,断言output{schema,render}存在、parameters为编译后的 JSON Schema、render输出内容块,并用宿主导出的validateArgs/validateJsonSchemaValue做正反双向校验(旧形状必须被宿主拒绝,否则用例失去意义)。- 依赖声明补全:运行时消费的宿主包(
dsh-agent/dsh-llm/dsh-session/dsh-tools)加入peerDependencies(*+peerDependenciesMeta.optional,可选以免在非宿主环境安装时报错);@deepseek-ai/dsh-cmdline补入 devDependencies,消除lib/wechat/vendor/weixin/下两个不可达文件对未声明依赖的裸引用。 - 修复应用用量数据停止更新(2026-09-10 实测):宿主把会话日志升级为「格式世代」命名
session[.vN].jsonl[.zstd],旧口径只认字面量session.jsonl.zstd,导致带版本号的日志(实测 37 个)全部扫不到,磁盘缓存与实际用量冻结在升级当天。判定口径收敛到lib/features/session-log.js,usage-daily扫描与delete-chat删除共用同一条规则。 - 0.2.0-rc.2 实测
SESSION_FORMAT_VERSION仍为 4(与 0.1.7-rc.2 相同,未产生新世代),该正则继续覆盖,无需再改。 - 修复会话管理无法删除新格式会话:
sessionDirOf()同款字面量口径会让带版本号的日志直接返回bad-location。 test/smoke.mjs补回归:世代命名日志的目录大小、删除路径,以及文件名判定表的正反用例(含迁移临时文件session.migration.*.tmp必须被拒)。client-smoke的 React 解析新增本包 devDependencies 兜底(profile 里没有 React 时不再整份失败);React / react-dom 因此进入 devDependencies。
依赖解析提示:@deepseek-ai/dsh-agent等包把dsh-llm/dsh-session/dsh-scope等声明为精确版本 peer,因此升级 devDependencies 后必须删除package-lock.json与node_modules重装;沿用旧锁文件会因旧树的 peer 范围(^0.1.5-rc.1)无法接受新版本而报ERESOLVE。
已知边界:lib/wechat/vendor/weixin/下 15 个文件(含entry.js、gateway.js、driver.js、login-qr.js等)不在任何运行路径上(对lib/index.js做完整 ESM 可达性遍历确认),属迁移遗留的参考代码。本版只保证gateway.js可正常 import;entry.js仍需额外安装其传递依赖commander才能加载,因不可达故未处理。
v1.0.0 更新
- 一键重启 dsh web 后不再刷新旧页面,改为自动打开新窗口并关闭旧页面。
- 会话管理加载优化:先快速返回列表再后台补齐磁盘占用,并对目录大小做磁盘缓存。
- 界面增强中 Markdown 渲染新增独立开关;修复
@文件引用后紧跟中文时后续文字被一起高亮的问题。 - 应用用量底部提示文案更新;费用卡片新增峰 / 谷价格一键切换,默认按谷价计算。
- 微信接入页签的“使用说明”改为可展开 / 折叠。
- 修复
client-smoke因 React 与 react-dom/server 版本不一致导致的 server-render 失败。
安装
dsh-tools 是 DSH web profile 的常驻插件(bundle 插件)。傻瓜式安装,一条命令:
dsh plugin --profile web add dsh-tools
该命令自动完成:依赖安装(npm 官方源分发)+ 激活层写入(dsh.profile.bundles)。
执行后重启 dsh web,从 设置 →「dsh 工具箱」管理各功能开关。
提示:裸pnpm add/npm i只安装依赖、不会激活插件(依赖 ≠ 激活);
激活靠 `dsh.p
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::11,最后更新 2026-09-30