DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Wakatime — DeepSeek Harness 插件(DSH Plugin)
← Plugins

@dingyi222666/dsh-wakatime

Wakatime

适用于 DeepSeek Harness (dsh) 的 WakaTime 插件——跟踪 AI 编码活动、代码行数和耗时

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add @dingyi222666/dsh-wakatime@0.2.4
README兼容性版本

兼容性与来源证明

Wakatime 以 @dingyi222666/dsh-wakatime 发布,当前版本为 0.2.4。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
npm
Registry 更新时间
2026/9/20

版本

0.2.4stable
2026/9/16
0.2.3stable
2026/9/10
0.2.2stable
2026/9/9
查看其余 10 个版本收起版本
0.2.1stable
2026/9/7
0.2.0stable
2026/9/4
0.1.7stable
2026/9/2
0.1.6stable
2026/8/30
0.1.5stable
2026/8/28
0.1.4stable
2026/8/28
0.1.3stable
2026/8/22
0.1.2stable
2026/8/17
0.1.1stable
2026/8/17
0.1.0stable
2026/8/17

相关插件

正在加载相关插件…

最新版
0.2.4
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
70.7 kB
文件数
22
Surface
any
许可证
MIT
发布源
npm
GitHub
★ 2
周下载
340
安全扫描
✓ v0.2.4 扫描通过
最近提交
2026/9/16
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Subagent Codex@deepseek-ai/dsh-subagent-codex基于官方 app-server 协议的一次性 Codex 子代理提供程序

README

@dingyi222666/dsh-wakatime

English | 中文

WakaTime plugin for DeepSeek Harness (dsh) — track your AI coding activity, lines of code, and time spent. Adapted from opencode-wakatime to dsh's plugin model.

Install

# Install from npm (requires dsh >= 0.1.3-alpha.2)
dsh plugin --profile web add @dingyi222666/dsh-wakatime
# Restart dsh web for it to take effect
dsh web

The plugin works in any profile that runs the agent loop — web, headless, tui, … — install it into each profile you use:

dsh plugin --profile headless add @dingyi222666/dsh-wakatime

From source (GitHub)

git clone https://github.com/dingyi222666/dsh-wakatime
cd dsh-wakatime
pnpm install && pnpm run build
dsh plugin --profile web add .
dsh web

Notes:

  • dsh plugin behaves like adding a dependency to your profile. A bundle plugin is loaded once its full package name appears in the profile's dsh.profile.bundles list (added automatically); the bundle patch (cordis.patch.yml) applies on the next boot.
  • To update, run the same command again.
  • With the repo source-launched CLI, run the args through the bin directly (node --import tsx/esm apps/cli/src/bin.ts plugin --profile web add @dingyi222666/dsh-wakatime).

Configuration

The plugin works out of the box. To override behavior, add a row with the same id (wakatime) in your profile's user patch layer ($DSH_HOME/profiles/<name>/cordis.patch.yml) or via --patch:

- id: wakatime
  config:
    heartbeatIntervalMs: 120000  # rate limit per project (default 60000)
    debug: true                  # force DEBUG logging (default: ~/.wakatime.cfg debug=true)
    client: web                  # client qualifier in the --plugin string (default "dsh")
    timeoutMs: 45000             # heartbeat CLI timeout (default 30000)

All fields are optional and validated by a schemastery schema at load.

Features

  • Automatic CLI management — downloads and updates wakatime-cli automatically, or uses a global install (brew install wakatime-cli)
  • Detailed file tracking — tracks file operations the agent performs: edit, write, read, read_image, and str_replace_editor (view/create/str_replace/insert)
  • Resolved-path accuracy (dsh 0.1.3-alpha.1) — reads the fs tools' durable tool/result meta: resolved (sandbox-aware) entity paths and exact diff hunks win over raw call arguments when present
  • AI coding metrics — sends --ai-line-changes for WakaTime's AI coding analytics, computed exactly from the fs tools' diff hunks (context lines excluded)
  • Live activity heartbeats (dsh 0.1.3-alpha.1) — agent/status transitions and the agent/assistant-stream firehose heartbeat the current file in near real time while a long turn streams, instead of waiting for the durable settlement
  • Rate-limited heartbeats — 1 per minute per project, persisted to disk so parallel dsh processes share the budget (durable changes and live activity draw from the same budget)
  • Session lifecycle — force-flushes pending heartbeats when a session is disposed and when the plugin tree tears down, so one-shot dsh --profile headless runs still report their activity
  • Batch tool support — multiple files in one edit are sent in a single wakatime-cli invocation via --extra-heartbeats
  • Zero runtime dependencies — the built plugin imports only Node builtins plus the @deepseek-ai/* peers the host already provides

Prerequisites

WakaTime API Key

Ensure you have a WakaTime API key configured in ~/.wakatime.cfg (or $WAKATIME_HOME/.wakatime.cfg when WAKATIME_HOME is set):

[settings]
api_key = waka_your_api_key_here

Get your API key from WakaTime Settings.

WakaTime CLI (Optional)

The plugin downloads wakatime-cli automatically when missing. To install it yourself:

brew install wakatime-cli

or download from WakaTime releases.

How It Works

The plugin subscribes to dsh's session event firehose (session/event):

flowchart TB
    subgraph dsh["DeepSeek Harness"]
        A[Agent Loop] --> B[tool/call + tool/result events<br/>(meta: resolved path + diff hunks)]
        C[Live agent events<br/>agent/status, agent/assistant-stream] --> D[Activity]
        C2[Chat Activity<br/>user/message, assistant/message, assistant/attempt] --> D
        B --> D
        D --> E[Session Events<br/>turn/end, session/disposed]
    end

    subgraph Plugin["dsh-wakatime"]
        B --> F[Join callId: extract file<br/>path + line changes from<br/>meta and fs diff hunks]
        F --> G[Per-project pending<br/>changes + last entity]
        C --> H[Rate-limited<br/>heartbeat batch]
        G --> H
        E --> I[Final force flush]
        H --> J[wakatime-cli<br/>--ai-line-changes<br/>--extra-heartbeats]
        I --> J
    end
  • tool/call records the tool name and parsed arguments by callId; tool/result matches it back and reads the fs tools' durable meta payload — resolved entity paths (read, read_image) and diff hunks (edit, write) — for exact per-hunk line counts, falling back to the call arguments when a host attaches no meta (write content, str_replace_editor strings).
  • Heartbeats are sent at most once per minute per project (state file under ~/.wakatime/dsh-wakatime/), on chat activity, tool results, committed model settlements (including message-less assistant/attempt records in dsh 0.1.3-alpha.1), live agent activity (agent/status, agent/assistant-stream), turn boundaries, session disposal, and plugin teardown.
  • The --plugin tag reports Deepseek Harness[-<client>]/<dsh version> dsh-wakatime/<version>.

Development

pnpm install
pnpm run typecheck   # tsc --noEmit
pnpm run build       # declarations into lib/types + tsdown bundle lib/index.js
pnpm test            # vitest: changes, state, heartbeat, plugin wiring

Layout:

  • src/index.ts — plugin entry (name / Config / apply) and event wiring
  • src/config.ts — schemastery Config schema, defaults, --plugin tag
  • src/changes.ts — tool events → file changes, diff line counting
  • src/state.ts — per-project rate limiting
  • src/heartbeat.ts — wakatime-cli invocation, batching, flushing
  • src/cli.ts — wakatime-cli discovery/download/update
  • src/paths.ts, src/logger.ts — WakaTime paths and file logging
  • tests/ — unit tests plus an integration test that drives the plugin over a real cordis Context

Known Limitations

  • Tool calls executed inside sandboxed/remote filesystems are tracked by their model-visible file_path arguments unless the tool/result meta carries a resolved absolute path (dsh 0.1.3-alpha.1 fs tools do); paths the sandbox resolves differently may land as project-relative entities.
  • bash commands are not attributed to files (they can touch anything).
  • The dsh host version in the --plugin tag is unknown when the @deepseek-ai/dsh package cannot be resolved from the plugin's location (e.g. an npm install without the dev dependency present).
  • The @deepseek-ai/dsh-session/@deepseek-ai/dsh-agent peer ranges start at 0.1.3-alpha.1; older hosts run the tracking paths but get no live agent activity heartbeats.

License

MIT — ported logic from opencode-wakatime (MIT).