Repository navigation
Releases
Releases · wjf1/dsh-plugin-usage-analytics
v0.1.1: 公开首个版本——本地用量与能力看板,75 条测试全绿
首个公开版本
DSH(DeepSeek Harness)的本地用量分析插件:订阅会话事件,把工具调用、回合、错误、耗时与能力使用情况聚合成日表,在侧栏面板展示,并对外提供一套受围栏保护的本地 HTTP 查询接口。默认 local 模式、零出站,不采集任何消息正文。
新增
- 宿主半:会话事件采集(\session/created\ / \session/event\ / \session/disposed\ / \session/flush\,按白名单消费 10 类事件),启动时对已有会话做一次回填。
- 三层幂等:会话游标 \meta.cursors[sid]\ + fork 起点 \inheritedEventCount\ + 回填去重,重启、重载、fork 都不重复计数。
- 聚合与存储:日表、工具日表、能力日表、会话表;每 profile 一个 storage domain,脏表每 10s 合并落盘,取不到 domain 时自动降级内存档。
- HTTP 面:单 prefix 路由 + 12 个 REST 便捷端点 + 设计 §7.5 的 18 个 JSON-RPC 方法,统一 {ok,value}\ / {ok:false,error}\ 信封。
- 面板:侧栏入口 + 主面板(6 个 KPI、14 日趋势、Top 工具、能力分布、设置区、操作区),样式只用 --dsw-alias-*\ 主题 token。
- 配置:\mode\ / \collect\ / \sampleRate\ /
etentionDays\ / \maxEventsPerDay\ / \lushIntervalMs\ / \layout\ / \selfExclude\ / \profileName\,白名单键支持运行时热改。 - 发布物料:中英双语 README(含配图说明)、CHANGELOG、HANDOFF 六模块、MIT LICENSE、.gitignore\。
修复
- cordis 受限上下文读未注入服务会抛错:\ctx?.profile?.name\ 在可选链生效前就抛 \cannot get property "profile" without inject\,异常让装配回调整体中断,路由与服务都没注册,外部只看到「插件装了但没反应」。引入 \safeGet\ 统一兜底,装配体整体 .catch\,服务发布改为先 \provide\ 再 \set\。
- profile 名探测过窄:桌面宿主里没有 \profile\ 服务也没有 \DSH_PROFILE\,domain 名退化成 \plugin_analytics_default\。新增分层探测 \detectProfile\(config → profile 服务 → app.profile → 环境变量 → --profile=\ → \ctx.baseDir\ → \default\),诊断里输出 \profileSource\。
安全加固
- 围栏:\Sec-Fetch-Site\ 非 \same-origin/
one\ 直接 403;存在 \Origin\ 时必须与 \Host\ 一致。 - 限流与载荷:写方法面每秒 10 次(超出 429 \E_RATE\),请求体上限 64KB(超出 413 \E_PAYLOAD\)。
- 删除需显式确认:\data.delete\ 必须带 \confirm:'DELETE'\,否则 \E_CONSENT\ 403。
- 最小化采集:只记元数据(工具名、能力类、成败、耗时、短哈希会话 ID、模型名、回合/步骤数、token 计数),不记录消息正文、工具参数、输出、路径与用户名;默认 local 模式代码内无任何外部网络请求。
验证
ode --test\:75/75 通过(store 10、aggregate 11、collector 10、routes 15、rpc 18、index 11)。- \ est/verify-http.mjs\:真
ode:http\ + 真 \etch\,10/10 通过。 - 真 cordis 4.0.5 + \ELECTRON_RUN_AS_NODE\:路由注册成功、服务 7 个键发布成功。
- 真宿主:\GET /\ →
eady:true\;\GET /overview?days=7\ → 1181 次工具调用 / 22 次错误 / 4 个会话 / tokensIn 3,354,030;\GET /diagnostics\ → \storage.kind=domain\、\writes=158\、\lushes=32\。
安装
\\�ash
dsh plugin --profile add github:wjf1/dsh-plugin-usage-analytics
\\
无需构建:\package.json\ 声明了 \dsh.bundle\(\patch: ./cordis.patch.yml\)与 \dsh.client\,\lib/\ 产物随仓库提交。
下载
- 源码包:v0.1.1.tar.gz / v0.1.1.zip
- 插件未发布到 npm;安装请用上面的一行
dsh plugin add github:…,或直接克隆仓库后 Junction 进 profile 的node_modules。