Skip to main content
T

dsh-plugins

tangzhizzz/dsh-plugins

按会话统计 token 与金额:输入框下方显示当前会话花费,设置页列出每个会话的花费(含历史会话)。

Install

dsh plugin --profile web add github:tangzhizzz/dsh-plugins

README

dsh-plugins

CI npm License: MIT

DeepSeek Harness(DSH)插件集合。 每个插件是一个独立的 npm 包,放在 packages/*,可以单独安装、单独发布,互不影响。

git clone https://github.com/TangZhiZzz/dsh-plugins.git

插件清单

包名显示名作用
dsh-plugin-session-cost会话消费统计输入框下方显示当前会话消费金额(点击弹出明细浮层:缓存命中/未命中/输出三段组成条 + 金额),设置页多出一页「会话消费」,列出每个会话的花费(含已归档的历史会话);另有一个 agent 工具 session_cost(可用 exposeTool: false 关掉)。金额按 DeepSeek 官方公开价估算,高峰/空闲时段自动区分,价目表可在 Config 里整体替换。徽标轮询只读当前会话、不折叠整个语料 —— 结构取舍与优化见包 README 第 8 节。
dsh-purge破甲(存档)DeepSeek Harness 提示词注入插件,原仓库 YuJunZhiXue/dsh-purge 已删除,此处为其 1.1.72 存档副本,额外做了 DSH 0.2.1-rc.2 的两处兼容修复({{cwd}} 崩溃 / 红队预设 toolFilter 判 broken)。不发布 npm(private: true),来源、署名与原项目非盈利条款见 packages/dsh-purge/NOTICE.md;原作者 YuJunZhiXue,MIT。
dsh-plugin-usage-stats用量统计9 张指标卡(调用 / Token / 命中率 / 工具 / 会话 / 活跃天 / 每次均值 / 日均 / 峰值日)、Token 构成(比例条 + 三段数值与占比)、年度热力图(最近一年,按真实星期几对齐,GitHub 贡献图那种绿色渐变,列宽自适应占满宽度,悬停出当天明细)、24 小时时段分布(按深夜/上午/下午/晚上上色)、模型分布、工具 Top、会话排行(带活跃天数)、会话花费、逐日明细表,挂在左侧面板栏。时间范围(7/14/30/90/365 天)在面板最上方,作用于整块面板。快在架构:每个会话只按天折叠一次(与窗口无关),切窗口只在天行上聚合、不再读日志(用 readSession 调用次数钉住);再叠后台预热、非活跃会话天行落盘持久化与后台轮转校验,状态行直接显示聚合耗时 / 缓存复用数 / 待校验数。图形用 div + 主题 token 手绘,不引第三方图表库;金额不算第二份,Client 半直接读 dsh-plugin-session-cost 的路由,没装它就不显示金额卡片。

安装

方式一 · 图形界面 / Agent 工具(推荐,profile 由 dsh 管理):

plugin_manager { action: "install_bundle", target: "dsh-plugin-session-cost" }

方式二 · 命令行:

dsh plugin --profile <profile 名> install dsh-plugin-session-cost

安装后若显示为未启用,用 plugin_manager { action: "set_bundle", target: "dsh-plugin-session-cost", enabled: true } 或在「设置 → 插件」里打开。target 也可以直接给本仓库某个包的绝对路径(本地开发调试用)。

开发

# 需要 Node >= 22、pnpm 11
pnpm install                # 本仓库无第三方依赖,只会建工作区链接
pnpm -r test                # 跑每个包自带的校验
pnpm -r pack:check          # 用 npm pack --dry-run 检查将要发布的文件清单

每个插件的约定(详见各包 README):

  • package.json 里 dsh.bundle.patch 指向 bundle 补丁(把插件行插进 profile);
  • 有 UI 的插件再加 dsh.client(platform: 'web')与 ./client 导出;
  • 显示名放 locale/en.json、locale/zh.json,必须是 { "meta": { "title": …, "description": … } }, 且 exports 要暴露 ./locale/*.json;写成顶层 title 会让宿主回落成包名(踩过的坑,见 packages/dsh-plugin-session-cost/README.md)。

本地以绝对路径装进 profile 时,profile 用 pnpm 的 link: 协议,插件运行时的真实路径仍在仓库里, 因此插件不应该有静态裸导入(@deepseek-ai/* 在 profile 里、从仓库路径解析不到)。 需要 schema 之类的包时用 best-effort 动态导入,解析不到也要能工作。

发布到 npm

npm login                                   # 首次
pnpm -C packages/dsh-plugin-session-cost publish --access public
# 或一次发布所有版本号尚未发布过的包:
pnpm -r publish --access public

打 tag 走 CI(.github/workflows/release.yml):仓库需要配置 secret NPM_TOKEN(npmjs 的 Automation token)。

git tag v1.0.0 && git push origin v1.0.0

同一版本号不能重复发布:改包内 package.json 的 version 后再发。

发布时会遇到的一步:staged publishing

npm 现在对 token 发布启用了 staged publishing: CI 用 NPM_TOKEN 提交后,版本会先进暂存区(新包名会先出现一个公共占位版本 0.0.0-stage), 需要维护者用 2FA 批准才会正式上架。批准方式:

  • 网页:npmjs.com → 头像 → Packages → Staged Packages → 找到版本 → Approve
  • 命令行(npm ≥ 11.15):npm stage list → npm stage approve <stage-id>(会要求 2FA)

批准前 npm view <包名> version 只会看到 0.0.0-stage,批准后才变成真实版本。

发布记录

版本时间说明
dsh-plugin-session-cost@1.0.02026-10-10首个版本:输入框下方实时金额徽标 + 点击弹框明细 + 设置页「会话消费」面板(含已归档会话)
dsh-plugin-session-cost@1.1.02026-10-10新增 agent 工具 session_cost(同一行内注册,与路由共用同一份取数与定价);取数拆成「只读当前会话」与「整个语料」两条路径(徽标不再折叠全部会话);排序按钮选中态;共 64 项单测。线上 tarball 与仓库逐字节一致

隐私与产物

  • verify/summary.json 是本机抓取的端点快照,包含真实会话标题与金额:已被 .gitignore 排除, 也不在 npm 包的 files 白名单里。
  • 仓库内的 verify/summary.sample.json 是匿名样例,供渲染测试在无本机数据时使用。

License

MIT

Related plugins