在 DeepSeek Harness (DSH) 的开发流程中,随着技能库规模的扩大,判断哪些技能真正被调用、哪些可以清理,是维护工作的一部分。传统的日志排查方式效率有限,且技能形态的统计工具通常只能事后全量扫描,无法实时感知调用。下面介绍 dsh-skill-stats 插件,它通过双通道数据(历史回放 + 实时订阅)统计技能调用次数,帮助开发者判断哪些技能值得保留。
核心功能¶
该插件提供以下功能:
- 调用统计:统计每个技能的累计调用次数、使用过的会话数、首次/最近调用时间,以及每次调用的具体时间戳。
- 双通道数据:
- 历史回放:启动时扫描宿主环境的会话日志(
session.jsonl/session.jsonl.zstd),解析tool/call事件中的技能调用。 - 实时订阅:监听进行中的工具调用事件,即时累加统计数据。
- 历史回放:启动时扫描宿主环境的会话日志(
- 会话视图:展示单个会话用过的技能列表,支持排序。每行附带迷你趋势图,展开可查看大图及每次调用时间;已删除的技能标记「已删除」。
- 全局面板:提供所有技能(含 0 次使用)的统计表,支持排序、SVG 趋势图,并支持 1/3/7/30 天范围筛选及每次调用明细。
- 增量缓存:基于文件大小与修改时间记录水印,重启时仅重放发生变化的日志,加快启动速度。
- 已删除标记:扫描所有工作区与全局技能根目录,检测目录不再存在的技能。
- 加载态:在日志重放未完成时显示提示,避免将空快照误报为「未使用」。
安装与启用¶
使用以下命令进行安装和构建:
git clone git@github.com:chen-zz20/dsh-skill-stats.git
cd dsh-skill-stats && pnpm install && pnpm run build
dsh plugin --profile web add link:/path/to/dsh-skill-stats
说明:
* 该插件为 bundle 型插件,安装后自动加入 profile 的 dsh.profile.bundles 层,无需手动配置行。
* 依赖 @deepseek-ai/* 已发布至公共 npm registry,pnpm install 可直接拉取。
* 若遇 pnpm 10.19+ 的 minimumReleaseAge 拦截,仓库已包含 pnpm-workspace.yaml 豁免配置。
典型用法¶
插件提供 REST API 用于查询统计数据:
GET /skill-stats/api/stats # 全局统计(含已删除技能)
GET /skill-stats/api/stats?scope=current # 当前磁盘上的技能(含 0 次使用,无已删除)
GET /skill-stats/api/stats?sessionId=... # 单会话技能使用
响应示例:
{
"skills": [
{ "name": "file-dsh-issue", "invocations": 5, "sessions": 2,
"firstUsedAt": 1786000000000, "lastUsedAt": 1786009000000,
"deleted": false, "callTimes": [1786000000000, 1786009000000] }
],
"archivedSessionCount": 0,
"ready": true,
"updatedAt": 1786010000000
}
字段说明:
* ready:指示启动重放是否已全部完成(未完成时前端显示加载态)。
* callTimes:每次调用的时间戳,升序排列。
* sessionId 参数:按会话查询;未就绪的会话会在查询时按需重放其日志。
注意事项¶
- 只读插件:插件不修改任何会话日志或技能文件。
- 实时能力:插件形态的独特优势在于可以边发生边统计,而技能形态的统计工具只能事后全量扫描。
- 依赖与兼容性:依赖
@deepseek-ai/*包需由宿主环境注入。
总结¶
dsh-skill-stats 是一个专注于技能使用统计的只读插件。它通过增量缓存和双通道数据,既能快速提供历史数据,又能实时更新,帮助开发者清理不再需要的技能文件,维护健康的技能库。
- 项目主页:https://github.com/chen-zz20/dsh-skill-stats
- 社区目录:https://www.skillhub.cn/plugins/chen-zz20/dsh-skill-stats