dsh-usage-dashboard:在 DSH Web 上挂载用量报表

前言

用 DSH 跑智能体时,token 与花费往往分散在日志或单独脚本里。dsh-usage-stats 可以把用量汇总成 HTML 报表,但报表文件本身不会自动出现在你日常打开的 DSH GUI 同一站点里。若再单独起一个静态文件服务或复制链接,就多一层入口,鉴权也要自己接。

下面介绍 dsh-usage-dashboard:一个 DSH 宿主插件,把 dsh-usage-stats 生成的 HTML 挂到宿主 Web 的 /usage,鉴权复用宿主登录态,包体纯 ESM、零依赖,不修改其它工程。

这是什么

插件只做一件事:在 DSH 宿主进程里注册一条 HTTP 路由,按配置路径返回本地 HTML 报表文件;未登录或 Host/Origin 不通过时,走宿主已有的 requestRejection,不引入独立令牌体系。

为什么是插件而不是改 stats 工程

报表数据与生成逻辑仍属于 dsh-usage-stats。DSH 宿主已提供插件挂路由与复用浏览器会话的两项能力:

用途 接口
挂一条自己的 HTTP 路由 ctx.webServer.register({ kind, path, handler })
复用宿主登录态做鉴权 ctx.connection.requestRejection(req) → 401 / 403 / undefined

文档说明 requestRejection 用于对「另一条 Web 路由」应用 Connection 的 Host/Origin 检查与浏览器认证。能打开 DSH GUI 的浏览器,在同一 origin 下通常也能打开 /usage(会话 Cookie 为 Path=/; SameSite=Strict)。

核心功能

  1. 路由挂载:默认路径 /usage,可在配置里改(须合法:以 / 开头、非根、无尾斜杠、无查询串/片段;非法值在装载期抛错)。
  2. 鉴权:先鉴权再读文件,避免未授权请求变成「文件是否存在」的探针。
  3. 静态 HTML 服务:支持 GET/HEAD;正常响应为 200、text/html,带 Cache-Control: no-store 与 X-Content-Type-Options: nosniff。
  4. 现读磁盘:每次请求读报表文件;在 stats 侧重生成 HTML 后刷新页面即可,不必重启 dsh web。
  5. 与 profile 集成:包内带 dsh.bundle.patch,dsh plugin 安装后会自动对账 dsh.profile.bundles,一般无需手改 profile 文件。

响应行为摘要:

情况 响应
未认证 401
Host/Origin 不通过 403
方法不是 GET/HEAD 405,Allow: GET, HEAD
报表文件不存在 404(响应体不回显配置路径)
正常 200,HTML

安装与启用

插件为独立仓库,在 web profile 下安装。安装后需重启 dsh web 生效。

从 GitHub 安装(跟 main):

dsh plugin --profile web add github:SJTUMalPan/dsh-usage-dashboard

锁 commit、可复现安装:

dsh plugin --profile web add "git+https://github.com/SJTUMalPan/dsh-usage-dashboard#<sha>"

本机开发(在仓库根目录执行,符号链接,改完即生效):

dsh plugin --profile web add "link:$PWD"

卸载:

dsh plugin --profile web remove dsh-usage-dashboard

路由随插件卸载通过 ctx.effect 的 disposer 自动注销。

典型用法

1. 生成报表

报表由 dsh-usage-stats 生成,例如:

node dsh-usage.mjs --format html --out <某个路径>/usage-dashboard.html

将输出路径填进插件配置的 reportPath。缺省时使用包内 report/usage-dashboard.html,把生成文件放到该位置可零配置。

刷新数据示例(在 stats 工程目录):

cd /path/to/dsh-usage-stats
node dsh-usage.mjs --format html --out usage-dashboard.html

2. 配置(可选)

在 cordis.patch.yml 对应插件项的 config 中,两项均可省略:

- insert:
    - id: usage-dashboard
      name: dsh-usage-dashboard
      config:
        path: /usage        # 挂载路径,默认 /usage
        reportPath: /abs/path/to/report.html
        # 默认 <本包>/report/usage-dashboard.html

reportPath 可为绝对路径,或相对本包根目录。

3. 访问

在浏览器先登录 DSH Web GUI,再打开:

http://<你的 dsh web 地址>/usage

未登录为 401;Host/Origin 不通过为 403。无需再抄单独令牌。

适用场景与注意

适合:已在用 DSH Web GUI,并希望用量报表与 GUI 同站、同登录态的内部查看;报表更新频率不高、可接受「stats 生成 HTML + 浏览器刷新」的流程。

边界与风险(README 已写明):

  • 页面可用性依赖 dsh web;DSH 未运行时 /usage 不可用。若需要独立于 DSH 进程的入口,应自行起服务,而不是挂进宿主。
  • 无独立 TLS,传输边界与宿主 Web 一致(宿主 Web 本身不带 TLS 时,报表亦同)。
  • 报表可能含工程名、会话 id、花费等内部信息;不要把挂载路径改成宿主免鉴权路由。

安装前:插件在 DSH 宿主进程内运行,权限与当前 dsh 进程一致。安装前应阅读仓库源码与 MIT 许可证,确认路径与报表内容符合你的安全策略。DeepSeek Harness 社区插件目录(如 SkillHub 上的条目)为独立生态站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-usage-dashboard 把 dsh-usage-stats 的 HTML 报表接到宿主 /usage,复用 GUI 登录态,零依赖、不改其它工程。装好插件、配置或放置报表文件、重启 dsh web 后即可在同源浏览器里查看用量。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜