npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-analytics

v0.4.0

Published

Agent FinOps / token analytics for DeepSeek Harness: usage collection, time-aware cost engine, cache analysis, and session drill-down

Readme

dsh-analytics

English | 中文

面向 DeepSeek Harness 的 Agent FinOps / token 分析:从会话事件采集用量写入本地 SQLite 账本,用时间感知的定价表(绝不硬编码进逻辑)计费,并通过服务、agent 工具与 JSON API 路由查询。

这是设计中的 v1 范围:总览 + 会话下钻 + 成本引擎 + 缓存分析,并按 dsh-plugin 生态的 bundle 打包方式发布(带 dsh.bundle 的 npm 包 → cordis.patch.yml)。

安装

dsh plugin --profile web add dsh-analytics

从 git 安装(需要 prepare 构建授权):

dsh plugin --profile web add github:you/dsh-analytics#<sha>

从本地检出安装:

dsh plugin --profile web add /path/to/dsh-analytics

本地开发时挂载源码 overlay:

dsh --profile web --patch ./cordis.yml

配置

插件行的 config(形状见 cordis.yml):

| Key | 类型 | 默认值 | 说明 | | --- | --- | --- | --- | | dbPath | string | —(必填) | SQLite 数据库文件;缺失的目录会自动创建。 | | currency | string | — | 摘要中优先排序的首选币种(每行自带币种)。 | | peakHours | [startHour, endHour][] | [[1,4],[6,10]] | UTC 半开区间高峰窗口;其余小时为低谷。 | | pricing | PricingRow[] | 随附 DeepSeek V4 表 | 替换随附默认值的定价行。 | | pricingFile | string(绝对路径) | — | PricingRow[] 的 JSON 文件;与 pricing 互斥。 | | budget.daily | number | — | 以 budget.currency 计的每日支出上限(UTC 日)。 | | budget.monthly | number | — | 每月上限;总览还会预测月末支出。 | | budget.currency | string | currencyUSD | 限额计量币种。 | | tools | boolean | true | 注册 analytics_query agent 工具。 | | web | boolean | true | 在存在 ctx.webServer 时注册 /api/analytics/* JSON 路由。 |

定价:表是数据,不是代码

成本通过把每个请求与定价行匹配来计算:

interface PricingRow {
  provider: string          // request/header config provider
  model: string             // request/header config model
  region?: string           // optional discriminator
  priceType: 'peak' | 'off-peak' | 'flat'
  inputType: 'cache_hit' | 'cache_miss' | 'cache_write' | 'output'
  pricePerMillion: number   // per 1M tokens, in `currency`
  currency: string
  effectiveFrom: string     // ISO 8601, inclusive
  effectiveTo?: string      // ISO 8601, exclusive
}

匹配使用 model + timestamp + cache hit/miss + input/output,因此 T 时刻的请求始终按 T 时刻生效的行计费——之后改价永远不会改写历史。没有专用行时 cache_write 回退到 cache_miss。匹配行中 effectiveFrom 最新者胜出。

随附默认值遵循 DeepSeek V4 公告:2026-08-16T16:00:00Z 之前为统一费率,之后为高峰/低谷费率(低谷 = 高峰的 50%)。它们只是种子数据——提供 pricingpricingFile 即可拥有整张表。无配置时仅在表为空时播种默认值,因此不带定价配置的重启绝不会覆盖已记录的价格。

采集内容

插件监听 session/event,并在启动时通过 ctx.sessionQuery 回放持久会话(未挂载该 seam 时仅实时):

  • assistant/message 用量 → 每个 (session, seq) 一行请求记录(去重、回放安全)
  • request/header → provider / model / reasoning effort,用于定价
  • tool/call + tool/result → 带错误标志的工具调用记录
  • 会话头 → created-at、cwd、parent,用于分组

存储是本地 SQLite 数据库(dsh_analytics_requestsdsh_analytics_tool_callsdsh_analytics_sessionsdsh_analytics_pricing)。数据不出本机;插件绝不调用 provider API。

服务:ctx.analytics

所有读取都是分离快照;服务绝不触碰会话存储或 agent loop:

await ctx.analytics.overview({ start, end })   // totals, cost, cache, reasoning, trend, byModel, bySession, budget
await ctx.analytics.session(sessionId)          // request rows, turn waterfall, tools, cache
await ctx.analytics.sessions({ start, end })    // per-session summaries
await ctx.analytics.models({ start, end })      // per-provider/model summaries
await ctx.analytics.tools({ start, end })       // per-tool calls/errors + step-attributed cost
await ctx.analytics.pricing()                   // the pricing table in force
await ctx.analytics.budget()                    // spend vs configured limits + projection

工具成本是步骤级归因:一次模型调用的成本在该步骤调用的所有工具间均摊,因此含多个工具的一步共享成本(绝不重复计算)。

Agent 工具:analytics_query

模型可以查询同样的数字:

analytics_query(query="overview", range_hours=24)
analytics_query(query="session", session_id="session-1")
analytics_query(query="models" | "sessions" | "tools" | "pricing" | "budget", range_hours=24)

range_hours 限制截止当前的时间窗口(0 = 全部时间,默认 24)。

Web API

挂载 ctx.webServer 时,只读 JSON 路由注册在 /api/analytics/overview|sessions|models|tools|pricing|budget(带可选 ?hours= 查询参数)与 /api/analytics/session/<sessionId>。它们是未来仪表盘页面的数据源。

浏览器仪表盘

同样的路由驱动一个由插件在 /analytics 提供的自包含仪表盘(在浏览器打开 harness web 服务器 URL,或在挂载 ctx.webServer 的 headless profile 中打开 http://127.0.0.1:<port>/analytics)。它是打包在包内(web/)的零构建原生 JS 应用:

  • 总览 — KPI 卡片(成本、token、缓存命中率、reasoning 占比)、token/成本趋势、构成、按模型成本、会话、预算
  • 会话 — 带下钻的列表:轮次瀑布、累积上下文图、工具、缓存
  • Token 流 / 模型 / 成本 / 定价 — 分桶趋势、按模型聚合、按工具步骤归因、生效中的定价表

范围选择器(6h/24h/7d/30d/全部)作用于每个页面;harness 客户端内的 shell 导航集成是后续工作(harness 客户端目前没有空闲插件页槽)。

外壳内入口(web profile)

包还附带一个浏览器客户端 bundle(dsh.clientexports["./client"],按 harness module-loader 契约构建)。在 web profile 中注册两个入口:

  • 侧栏底部 Settings 旁的一个 Token Analytics 操作,打开全屏应用内面板,提供与 /analytics 相同的六个页面(Overview / Sessions / Token Flow / Models / Cost / Pricing,带范围选择器与刷新);
  • 会话头中的一个按会话 Analytics 操作,打开任务成本浮层(成本、token、缓存命中率、轮次瀑布、工具归因,以及完整仪表盘链接)。

两者读取同一组只读 JSON 路由,因此需要挂载插件的 host 侧(及其 web 路由)。无需 harness 客户端 shell 变更:侧栏入口使用 shell 现有的 sidebar.footer.action 槽位。

开发

pnpm install
pnpm test
pnpm lint
pnpm build
pnpm doctor

路线图

  • harness 客户端 shell 内的 Analytics 入口(左栏集成;客户端目前没有空闲插件页槽,因此仪表盘暂位于 /analytics
  • Skill / 子 agent ROI 与 reasoning-effort 效率
  • 基于预算信号的成本异常告警

许可证

MIT