- Inicio
- Plugins
- Uso y facturación
- dsh-plugin-hub (dsh-provider-usage)
dsh-plugin-hub (dsh-provider-usage)
wingsky-1/dsh-plugin-hub/packages/dsh-provider-usage
Marco de estadísticas de uso multiproveedor (contrato de adaptador v2): cápsula persistente y panel de detalle; DeepSeek oficial (cálculo de uso diario por contabilidad por intervalos con insignia de cuenta atrás de pico/valle, funciona incluso sin endpoint oficial de uso) y OpenCode Go integrados; cualquier otra fuente de datos se une soltando un único archivo adaptador mjs, intercambiable en caliente desde la página de ajustes, con las claves API en el host.
Instalar
dsh plugin --profile web add github:wingsky-1/dsh-plugin-hubEste plugin se encuentra en el subdirectorio packages/dsh-provider-usage del repositorio.
README
dsh-plugin-hub
简体中文 | English
DSH(DeepSeek Harness)Web GUI 插件集,npm 分发:一键装全家桶,或按需单装。
- 聚合包:
@wingsky-1/dsh-plugins-all(一键装齐全部插件) - 单插件:
@wingsky-1/dsh-*(按需安装)
快速导航
使用前须知 · 最短上手 · 插件列表 · 常用配置与维护 · 验证与排障 · 详细参考 · 开发与架构
使用前须知
版本适配(只适配 rc)
本插件集只适配 DeepSeek Harness 的 rc(候选发布)版本,不对 alpha 版本适配。
- 当前全部插件锚定
dsh 0.1.5-rc.1(官方类型层 catalog 与各包 peerDependencies 一致锁定) - 安装/更新时若 dsh 版本不匹配,npm/pnpm 会给出 peer 提示——请先将 dsh 本体升级到对应 rc 版本
- 每版的具体适配基线、破坏性变更与升级指南见 Release Notes
- 官方发布新版 rc 后本插件集跟随升级;alpha 版本不受支持,请勿在 alpha 环境安装(或自行评估兼容风险)
独立安装与全家桶:二选一(0.1.5 起)
独立包与聚合包的 patch id 相同(ui-*)。请只选一种安装方式——
同时装 dsh-plugins-all 与任一 @wingsky-1/dsh-lan-proxy 等独立包会导致同名 entry
重复,dsh web 启动时报 duplicate 错误(可发现,不代表损坏)。需要调整时:
卸载聚合包,或卸载对应独立包,重启即可。
逐插件安全说明
dsh-lan-proxy装完即在0.0.0.0开放 HTTP/HTTPS 端口,局域网所有设备可访问你的 dsh——不需要时请卸载dsh-lan-proxy的启动令牌自动注入(injectToken)默认开启:局域网内任何能访问该端口的设备免 token 获得完整 dsh 控制权(等效信任整个局域网,bash 直通宿主机)——仅在可信内网开启,不可信网段务必在设置卡片关闭dsh-mcp-manager的 stdio 子进程继承宿主权限,只配置可信的 MCP 服务器- 插件管理路由有 loopback 围栏(非回环 403 / 方法错 405);经
dsh-lan-proxy转发的请求按设计视为受信,并不隔离局域网客户端。 dsh-notifier自持配置文件;设置响应掩码频道凭据,但通知正文与出口错误详情不打码,可能进入日志、历史与推送服务。dsh-provider-usage的 API 密钥留在宿主端,不进浏览器。dsh-verify-isolated使用临时 DSH_HOME、独立 profile、端口与浏览器实例;这是验证隔离边界,不是全局安全承诺。dsh-worktree-sidebar只改变侧栏根目录;会话 cwd、@引用与present仍锚定 cwd。
各插件的威胁模型与加固细节见其 README 安全章节。
最短上手
前提:已安装 DeepSeek Harness 且 dsh web 可正常启动(未全局安装 dsh 见下方「未全局安装 dsh」)。
安装插件(add)
# 一键装全家桶(推荐)
dsh plugin --profile web add @wingsky-1/dsh-plugins-all
# 或单独安装(按需)
dsh plugin --profile web add @wingsky-1/dsh-notifier
dsh plugin --profile web add @wingsky-1/dsh-lan-proxy
安装 / 卸载 / 更新后都需重启一次
dsh web(bundle 层只在启动时组合),侧边栏/设置页才反映变化。
访问与验证
重启 dsh web,打开启动时给出的 URL,在「设置 → 插件」确认已安装插件的卡片。notifier 可发送测试通知;局域网访问按 lan-proxy 访问与健康检查 验证。
插件列表
| 包名 | 功能 | 文档 | 状态 |
|---|---|---|---|
@wingsky-1/dsh-notifier | 浏览器、宿主 toast、Bark 与 Webhook 任务事件通知。 | README · 架构图解 | 已发布 |
@wingsky-1/dsh-provider-usage | 支持自定义适配器的多 provider 用量、趋势与报告。 | README · 适配器开发指南 · 架构图解 | 已发布 |
@wingsky-1/dsh-lan-proxy | 带 TLS、压缩与保活的局域网 HTTP/HTTPS/WebSocket 转发。 | README · 架构图解 | 已发布 |
@wingsky-1/dsh-mcp-manager | 按工作空间管理 MCP 配置与中间层工具接入。 | README · 架构图解 · 升级修复 | 已发布 |
@wingsky-1/dsh-verify-isolated | 为 DSH 插件开发提供隔离环境浏览器验证。 | README · 架构图解 | 已发布 |
@wingsky-1/dsh-worktree-sidebar | 绑定会话侧栏 worktree,不改变会话 cwd。 | README · 架构图解 | 未发布 |
常用配置与维护
在「设置 → 插件」进入对应卡片;各插件的配置与存储边界不同,请按对应 README 操作。
卸载插件(remove)
dsh plugin --profile web remove @wingsky-1/dsh-notifier
更新插件(update)
# 更新单个插件到最新
dsh plugin --profile web update @wingsky-1/dsh-notifier
# 更新全家桶(聚合包 + 其拉齐的子包)到最新
dsh plugin --profile web update @wingsky-1/dsh-plugins-all
# 更新当前 profile 下全部插件
dsh plugin --profile web update
安装 / 卸载 / 更新后都需重启一次
dsh web(bundle 层只在启动时组合),侧边栏/设置页才反映变化。
验证与排障
安装后未出现插件时先重启 dsh web;出现 duplicate entry 时,检查是否同时安装聚合包与独立包。
从 0.1.5 之前的 dsh 升级上来,出现历史会话打不开? 报
cannot safely transform unclassified message source的会话,是dsh-mcp-manager早期版本 注入的能力目录消息触发的宿主迁移闸门拒载(产物完好,只是读不出)。一条命令可救回:# 落盘前先停 dsh web;正在写入的日志不保证可安全重写 node scripts/maintenance/repair-mcp-catalog-sessions.mjs # 预演,列受影响会话 node scripts/maintenance/repair-mcp-catalog-sessions.mjs --apply # 落盘(自动备份),随后重启 dsh web详见 修复方案 · issue #723
升级须知与修复:历史会话打不开(mcp-catalog)
症状:从 0.1.5 之前的 dsh 升级上来后,某些历史会话在 GUI 里报
历史加载失败:failed to observe session "session-…":
cannot safely transform unclassified message source;
source v0 artifact remains unchanged (raw log: …/session.jsonl.zstd)(gateway/internal)
且该会话目录下始终不出现 session.v3.jsonl.zstd,每次打开都同样失败。
原因(不是会话损坏):dsh-mcp-manager 0.2.x 及更早把能力目录注入消息写成
source.kind = "mcp-catalog",而 dsh 0.1.5 的 session format v2→v3 迁移对 surface 消息的
source.kind 有一份封闭白名单,自造值不在其中 → 迁移被拒;产物按宿主设计原样保留
(未损坏)。v3 读取路径本身不校验该字段,所以只有"升级前的旧会话 + 装过本插件并触发过目录
注入"的用户会命中,升级后的新会话不受影响。
修复:本插件新版已改用宿主词表内的通用 source 形态(今后不再产生此类消息); 已落盘的旧产物用一次性脚本就地修复(只改 source 元数据,正文与事件序列不动):
# 先停掉 dsh web(正在写入的日志不保证可安全重写)
node scripts/maintenance/repair-mcp-catalog-sessions.mjs # 预演:只列受影响会话与处数
node scripts/maintenance/repair-mcp-catalog-sessions.mjs --apply # 落盘:先留 .bak-<时间戳>,写入原子
# 重启 dsh web,打开原会话
- 默认只读
<DSH_HOME>(--home <dir>/DSH_HOME可覆盖);--session <id>只处理单个会话 - 幂等;写后自检(帧结构 + 逐行 JSON + 零遗留旧 kind);回滚 = 用
.bak-<时间戳>覆盖回去 - v3 会话默认一起修:v3 里同样可能两种 kind 并存(升级前创建、升级后继续写入),
宿主将来给 v3→v4 迁移加同类闸门时会重演这次的永久拒载;改写只换 source 元数据,
v3 语义零变化。
--legacy-only可退回只修 v0/v1/v2 - 不产出 v3 产物:v0/v1/v2 修复后仍由 dsh 自己完成迁移
- 细节与验证证据见 dsh-mcp-manager README 与 issue #723
详细参考
功能详解
- 任务事件通知中心:提问 / 审批 / 完成 / 子代理完成 / 错误 / 轮次完成 6 类任务事件
双通道提醒(浏览器通知 + 系统 toast),经 Bark / Webhook 可推送到手机;免打扰时段与
紧急例外、按通道独立的弹窗/声音开关(4 音色)、宿主能力自检(
/diagnostics) - 上下文成本可控的 MCP 管理:项目级 MCP 默认经中间层收敛为
ws_mcp_list/ws_mcp_detail/ws_mcp_search/ws_mcp_call四个原子工具,项目级接入规模 不再膨胀上下文(middleware: all可把全局服务器也收进中间层,设置页热切换); 分工作目录维护项目级/全局两级配置,多仓库各配各的 MCP,互不串台 - 可扩展的用量统计框架:支持多 provider 用量统计与自定义数据源接入;覆盖每日 用量推算、使用趋势、峰谷倒计时与日/周/月报告
- 工程质量背书:每个插件自带 smoke 断言(路由围栏 / 客户端契约),构建契约 + 打包校验等全部门禁在 CI 全量执行
@wingsky-1/dsh-notifier
任务事件通知中心:6 类事件(提问/审批/完成/子代理完成/错误/轮次完成),双通道(浏览器通知 + 宿主系统 toast)+ Bark/Webhook 推送频道(ntfy、Gotify、自建网关);免打扰时段与紧急例外、按通道独立弹窗/声音(4 音色)、宿主能力自检(/diagnostics 给可用性与处置建议)
@wingsky-1/dsh-provider-usage
多 provider 用量统计框架(v2 适配器契约):常驻胶囊 + 详情面板;内置 DeepSeek 官方(区间记账法推算每日用量 + 峰谷倒计时徽标,官方无用量接口也能算)与 OpenCode Go 开箱即用;自写一个 mjs 即可接入任意数据源、设置页热插拔;日/周/月用量报告(经宿主 llm 生成,含目录与时段维度观察);密钥只在宿主端不进浏览器
@wingsky-1/dsh-lan-proxy
局域网访问 dsh web UI:HTTP/HTTPS/WS 转发 + TLS(自签名/自定义证书);HTTP(Brotli/gzip 自适应)与 WebSocket(permessage-deflate)双压缩;WS 半开探活,移动端切后台不僵死;启动令牌自动注入,LAN 设备免手工拿 token;DNS 重绑定防护 + 回环目标白名单
@wingsky-1/dsh-mcp-manager
MCP 服务器管理器(stdio / streamable-http):项目级/全局两级配置分工作目录维护;全部 MCP 经中间层收敛为 4 个原子工具(模型不可见 mcp__ 直呼工具);工作空间隔离防串台;配置只存 ${ENV} 引用不落盘密钥;提供运行时注册接口供其他插件注入 MCP;可选 MCP 调用统计与 debug 模式(metadata-only,默认关)
@wingsky-1/dsh-verify-isolated
DSH 插件开发的隔离环境浏览器验证 skill:临时 DSH_HOME + 独立 profile + 独立端口 + 独立浏览器实例四重隔离,一键拉起、退出自动清理;自带 raw CDP 零依赖浏览器驱动(快照/点击/截图/求值,支持设备视口模拟),可选隔离审计;首启弹窗默认跳过
@wingsky-1/dsh-worktree-sidebar
给 agent 三个工具(register / create / remove),把某个 git worktree 登记给当前会话,让该会话右侧栏文件树指向那个 worktree,而会话 cwd 不变(@ 引用、present 落点仍锚 cwd);子 agent 会话继承父会话的登记;只在「打开页签 / 点官方刷新 / 窗口重新可见」时重读,不轮询
低频安装变体:指定版本与 npx
指定版本号(@version)
省略 @版本号 即安装默认 latest(推荐)。仅当 registry 尚未同步到最新、或最新版在你的环境有问题时,在包名后追加 @版本号,add 与 update 通用:
# 安装指定版本(而非 latest)
dsh plugin --profile web add @wingsky-1/dsh-notifier@<版本号>
# 更新到指定版本
dsh plugin --profile web update @wingsky-1/dsh-notifier@<版本号>
未全局安装 dsh
若本机没有全局 dsh 命令,用 npx 临时拉起(dsh plugin 底层调用 pnpm,故仍需本机事先装好 pnpm 与 Node.js):
# 装全家桶
npx @deepseek-ai/dsh plugin --profile web add @wingsky-1/dsh-plugins-all
# 单独安装(带版本号)
npx @deepseek-ai/dsh plugin --profile web add @wingsky-1/dsh-notifier@<版本号>
# 卸载 / 更新(同理,把 add 换成 remove / update)
npx @deepseek-ai/dsh plugin --profile web remove @wingsky-1/dsh-notifier
npx @deepseek-ai/dsh plugin --profile web update @wingsky-1/dsh-plugins-all
npx每次会临时拉取@deepseek-ai/dsh;若想固定,可pnpm add -g @deepseek-ai/dsh(或npm i -g @deepseek-ai/dsh)后直接使用dsh。
历史维护与迁移——已停止维护的包、旧包迁移指引(装过旧包/退役包的用户请展开)
已停止维护(勿再安装,npm 均已标 deprecated):
@wingsky-1/dsh-skill-explorer(技能中心/skill 管理)已不再维护,插件包与聚合包均已移除。 web UI 侧已有更优实现@linxin666/dsh-client-ui-skill-explorer(dsh-web-ui仓库packages/dsh-skill-explorer),支持符号链接识别、链接技能安全处理等,请直接使用 web UI 内置技能中心。@wingsky-1/dsh-idle-archive(会话闲置提醒归档)已不再维护:社区已有更成熟的会话 生命周期管理/归档实现(如 dsh-session-pruner)。@wingsky-1/dsh-subagent-model-inherit(子 Agent 自动继承父会话模型与思考等级)已不再维护: 官方 dsh-subagent 0.1.2-alpha.2 已原生实现resolveChildAgentOptions(子 Agent 继承父会话 模型/思考等级/输出上限)。@wingsky-1/dsh-codegraph(codegraph 本地代码图谱 MCP + worktree 开发纪律)已不再维护: 封装工具与 codegraph CLI 版本强耦合,维护成本高于收益。@wingsky-1/dsh-mem0(mem0 长期记忆系统)已不再维护:环境隔离等缺陷未收敛 (#644 / #612),质量未达继续维护标准。@wingsky-1/dsh-web-file-preview(把对话内「用默认应用打开」改写为官方右侧栏预览) 已不再维护:官方 dsh 0.1.6 起交付物提及点击已改走官方侧栏预览,仅剩卡片菜单 「用默认应用打开」这一显式外开入口,改写它与用户显式意图相反(#840)。
此前安装过上述退役包的用户请卸载:
dsh plugin --profile web remove @wingsky-1/dsh-skill-explorer
dsh plugin --profile web remove @wingsky-1/dsh-idle-archive
dsh plugin --profile web remove @wingsky-1/dsh-subagent-model-inherit
dsh plugin --profile web remove @wingsky-1/dsh-codegraph
dsh plugin --profile web remove @wingsky-1/dsh-mem0
dsh plugin --profile web remove @wingsky-1/dsh-web-file-preview
dsh-memory(项目长期记忆)暂未包含,规划中。
旧包迁移(历史上发布过、现已不再分发):
@wingsky-1/dsh-gzip → 已合并进 @wingsky-1/dsh-lan-proxy(0.1.9 起)
HTTP 响应压缩能力整体并入 lan-proxy(默认开启,Brotli/gzip 按 Accept-Encoding 自适应协商,SSE 流式响应豁免,可配置)。 卸载 dsh-gzip、安装 dsh-lan-proxy 即获得等价压缩能力:
dsh plugin --profile web remove @wingsky-1/dsh-gzip
dsh plugin --profile web add @wingsky-1/dsh-lan-proxy
@wingsky-1/dsh-opencode-usage → 已重构更名为 @wingsky-1/dsh-provider-usage
重构为多 provider 适配器框架(内置 OpenCode Go,支持用户自定义取数适配器)。
patch id 由 ui-dsh-opencode-usage 变为 ui-dsh-provider-usage,配置项亦有调整,
不会自动迁移——重装后请在设置面板重新确认配置(如 apiKey、baseUrl):
dsh plugin --profile web remove @wingsky-1/dsh-opencode-usage
dsh plugin --profile web add @wingsky-1/dsh-provider-usage
两个旧包的 npm 版本均已标记 deprecated(安装时会提示迁移去向)。
相关项目
- dsh-web-mobile(npm:
@dsh-external/dsh-mobile-nav)— DSH web 移动端适配:窄屏自动收起侧栏、目录以抽屉方式展开。本项目的大部分开发与排障基于它在手机/平板上的远程使用完成。 - dsh-web-ui — DSH web UI 皮肤集合。从中学习了很多优秀实践,也是 DSH 插件开发的启蒙项目。
- dsh-routing-suite / dsh-router-standard — 提供 Router Standard agent preset(任务感知的推理模式路由:spec / mixed / react),供会话选择预设使用。
开发与架构
要求:Node ≥ 23.6(测试用原生 type stripping 直跑 TS)、pnpm ≥ 11。
构建 / 契约 / 测试 / 打包命令、目录结构、宿主端与客户端写法规范,统一见 DEVELOPMENT.md(从 §0 构建总览开始);贡献流程见 CONTRIBUTING.md;issue 处理流程见 ISSUE-WORKFLOW.md;各插件架构图解(功能 / 原理 / 使用方式, 含 SVG 架构图与 Mermaid 时序图)见 插件架构文档。
插件迁入本仓库前均经过开源前审查(构建自包含、隐私清理、安全加固、元数据完整)。
贡献
见 CONTRIBUTING.md:Conventional Commits 提交规范、功能分支 + PR 流程、 提交前检查(敏感信息/发布物边界)。
License
Plugins relacionados
DeepSeek-Balance-Whale-Widget
meteornox/deepseek-balance-whale-widget
dsh-context
bowenliang123/dsh-context
dsh-cost-meter
han-1413141/dsh-cost-meter
TokenLedger
zh667/tokenledger