前言¶
在 DeepSeek Harness(DSH)里用智能体改代码、跑工具,墙钟时间往往不少,但 WakaTime 默认只反映编辑器里的 keystroke 心跳,很难单独回答一个问题:这段时间是不是在和 AI 结对写这个项目?
下面介绍社区插件 dsh-plugin-wakatime(维护者 Dynesshely,分类为联网工具)。它作为 DSH Host 插件,在后台把你在 Harness 内的真实会话活动汇总成 WakaTime API v1 心跳,category 为 ai coding,与 WakaTime 侧的 AI Coding 统计并列展示;它不伪造逐文件按键心跳,只上报「这一段是否在项目里用 AI 干活」以及 token、字符数等元数据。
这是什么¶
dsh-plugin-wakatime 是 DeepSeek Harness 的 bundle 插件(当前版本 0.2.0,MIT 许可,需 Node ≥ 20)。仓库:https://github.com/Dynesshely/dsh-plugin-wakatime;社区目录页:https://www.skillhub.cn/plugins/Dynesshely/dsh-plugin-wakatime。
插件以 DSH 会话事件为输入,经节流与空闲判定后调用 WakaTime;未配置密钥时只打一条日志警告,不影响 DSH 正常启动。
核心功能¶
与 WakaTime 对齐的 AI 编程时间¶
- 按项目拆分:
entity为会话工作目录,project为目录名,WakaTime 里可按项目看 AI 时间。 - AI 形态心跳:每条心跳携带 DSH session id、输入/输出 token 增量、键入字符数。
- 跟随真实活动:用户消息、助手回复、工具调用与 turn 边界均计入;长 turn 有 15 秒 keepalive,空闲超过配置阈值则停止计时。
- 离线不丢:429/5xx/网络失败写入本地队列(原子写入,最多 500 条),退避重放;401 则停止发送,避免反复撞 API。
- Usage 页面(v0.2):侧栏入口,展示今日/本周/全量时间、7 日图、Top 项目、token 与 keystroke,以及 WakaTime 侧视图。
隐私边界¶
发往 WakaTime 的是:项目路径、项目名、session id、token 与字符统计、时间戳,以及配置中的 language、hostname。不会发送代码、prompt、模型输出、文件内容或终端输出;本地 usage 存储留在磁盘。
安装与启用¶
install_bundle 只会 symlink 本地目录,不会自动安装 bundle 依赖,需先在仓库根目录安装 npm 依赖。
git clone git@github.com:Dynesshely/dsh-plugin-wakatime.git
cd dsh-plugin-wakatime
pnpm install # 或 npm install
在 DSH 的 Plugin Manager 中安装仓库根目录为 bundle:
plugin_manager → install_bundle → D:\Projects\Dynesshely\dsh-plugin-wakatime
(路径改为你本机 clone 后的实际目录。)
安装或升级后 必须重启 DSH——Host 代码跑在服务端进程里,仅刷新页面不够。卸载使用 remove_bundle,包名为 dsh-plugin-wakatime。
前置条件:在 ~/.wakatime.cfg 的 [settings] 下配置与其他 WakaTime 客户端共用的 api_key;该文件中的 proxy、hostname、debug 会被插件复用。
配置¶
配置写在插件行的 config(cordis.patch.yml 或 Settings 表单)。优先级:插件 config > ~/.wakatime.cfg > 内置默认。
| Key | 默认 | 作用 |
|---|---|---|
enabled |
true |
总开关 |
minIntervalSeconds |
120 |
全局最小心跳间隔(秒) |
idleTimeoutMinutes |
15 |
超过该空闲间隔则结束当前计时段 |
entityType |
'file' |
file 上报项目路径;app 上报 DeepSeek Harness |
includeSubagentSessions |
false |
是否单独统计 subagent(关闭时避免同一墙钟重复计) |
category |
'ai coding' |
WakaTime 活动分类 |
apiKey |
空 | 覆盖 ~/.wakatime.cfg 的 api_key |
debug |
false |
日志详细诊断 |
空字符串表示回退到下层配置,而非刻意置空。apiUrl、proxy、hostname、language、userAgent、projectFromCwd 等语义见仓库 docs/design.md。
典型用法¶
日常:配好密钥后照常使用 DSH¶
配置 api_key 并重启 DSH 后,插件监听 session 事件,无需额外手动「开始计时」。流程可概括为:
session/event → 累积活动与 token/字符增量 → 节流(≥ minIntervalSeconds)
├── 成功 → WakaTime 单条或 bulk(≤25/批)
└── 失败 → 本地队列 → 退避重放
触发包括:user/message、assistant/message(含 usage)、tool/call、tool/result、turn/start、turn/end;运行中的 turn 由 15 秒 tick 保活。
Usage 页:本机统计与 WakaTime 对照¶
v0.2 起侧栏有 Usage,数据来自 Host 路由 GET /wakatime/usage.json(Cache-Control: no-store)。页面随 DSH 语言(en / zh)与主题变量渲染;可点刷新重新拉 JSON。远程「今日 AI Coding」来自 WakaTime heartbeats 查询(仅 AI Coding 分类,60 秒缓存);该请求失败时只影响对应区块,本地统计仍可用。
诊断与队列状态目录:<DSH_HOME>/cache/wakatime-dsh/(未设置 DSH_HOME 时为 ~/.dsh/cache/wakatime-dsh/),日志文件 wakatime.log。
适用场景与注意¶
适合:已在用 WakaTime、希望在 AI Coding 维度单独看见 DSH 内结对编程时间,并需要按项目、token 量做粗略对照的开发者。
注意:
- 插件在 当前 DSH Host 进程 中运行,权限与网络出站与 DSH 一致;安装前请阅读源码与 MIT 许可证,确认可接受上报字段(见上文 Privacy)。
- 社区目录 skillhub.cn 为独立生态站点,与 DeepSeek / 幻方无官方从属关系;DSH 本身遵循「一切皆插件」的扩展方式。
- 无
api_key时插件处于 inactive 状态,仅日志警告一次。
结尾¶
dsh-plugin-wakatime 把 DSH 会话里的 AI 协作时间,以 WakaTime 认可的 ai coding 心跳写进你已有的统计体系,并在 v0.2 提供本机 Usage 页做对照;配置与 WakaTime 桌面端共用 ~/.wakatime.cfg,上手成本主要是 bundle 安装与重启 Host。