dsh-plugin-wakatime:把 DSH 里的 AI 结对编程时间记进 WakaTime

前言

在 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 量做粗略对照的开发者。

注意:

  1. 插件在 当前 DSH Host 进程 中运行,权限与网络出站与 DSH 一致;安装前请阅读源码与 MIT 许可证,确认可接受上报字段(见上文 Privacy)。
  2. 社区目录 skillhub.cn 为独立生态站点,与 DeepSeek / 幻方无官方从属关系;DSH 本身遵循「一切皆插件」的扩展方式。
  3. 无 api_key 时插件处于 inactive 状态,仅日志警告一次。

结尾

dsh-plugin-wakatime 把 DSH 会话里的 AI 协作时间,以 WakaTime 认可的 ai coding 心跳写进你已有的统计体系,并在 v0.2 提供本机 Usage 页做对照;配置与 WakaTime 桌面端共用 ~/.wakatime.cfg,上手成本主要是 bundle 安装与重启 Host。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye