DeepSeek Harness(dsh)的 WakaTime 插件——追踪 AI 编码活动、代码行数和耗时
38.1/100
综合分
2
GitHub 星标
280
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @dingyi222666/dsh-wakatimenpm 源 · @dingyi222666/dsh-wakatime 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@dingyi222666/dsh-wakatime @ 0.2.10
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 03:46:04
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 25 处,展示前 19 条)
- 读取本地文件lib/index.js:331
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); - 写入本地文件lib/index.js:332
fs.appendFileSync(logFile, line); - 执行外部命令来自配置/变量lib/index.js:354
return execSync(isWindows ? `where ${cmd}` : `which ${cmd}`, { - 读取本地文件lib/index.js:398
if (fs.existsSync(this.stateFile)) return JSON.parse(fs.readFileSync(this.stateFile, "utf-8")); - 写入本地文件lib/index.js:404
fs.mkdirSync(path.dirname(this.stateFile), { recursive: true }); - 写入本地文件lib/index.js:405
fs.writeFileSync(this.stateFile, JSON.stringify(state, null, 2)); - 读取本地文件lib/index.js:426
return fs.existsSync(location); - 发起网络请求lib/index.js:464
https.get(GITHUB_RELEASES_URL, { headers: { "User-Agent": "dsh-wakatime" } }, (res) => { - 写入本地文件lib/index.js:483
fs.mkdirSync(this.resourcesLocation, { recursive: true }); - 读取本地文件lib/index.js:490
if (fs.existsSync(cliPath)) { - 写入本地文件lib/index.js:491
fs.chmodSync(cliPath, 493); - 读取本地文件lib/index.js:501
if (fs.existsSync(zipFile)) fs.unlinkSync(zipFile); - 发起网络请求lib/index.js:512
https.get(target, (res) => { - 写入本地文件lib/index.js:524
const file = createWriteStream(dest); - 删除本地文件lib/index.js:531
fs.unlinkSync(dest); - 执行外部命令运行时拼接lib/index.js:541
if (this.isWindows()) execSync(`powershell -command "Expand-Archive -Force '${zipFile}' '${destDir}'"`, { windowsHide: true }); - 执行外部命令运行时拼接lib/index.js:542
else execSync(`unzip -o "${zipFile}" -d "${destDir}"`, { stdio: "ignore" }); - 读取本地文件lib/index.js:550
const data = fs.readFileSync(zipFile); - 执行外部命令来自配置/变量lib/index.js:673
const child = spawn(cliLocation, args, buildExecOptions());
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-session@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 追踪AI编码活动
- 统计代码行数
- 统计编码耗时
README
由 DeepSeek 最新模型翻译生成@dingyi222666/dsh-wakatime
为 DeepSeek Harness (dsh) 开发的 WakaTime 插件 —— 统计你的 AI 编码活动、代码行数与耗时。由 opencode-wakatime 适配到 dsh 的插件模型。
安装
从 npm 安装(需要 dsh >= 0.1.3-alpha.2 <0.3.0-0,由 engines.dsh 声明)
dsh plugin --profile web add @dingyi222666/dsh-wakatime
重启 dsh web 生效
dsh web
插件适用于任何运行 agent 循环的 profile —— web、headless、acp、sdk,以及桌面端的 desktop profile。每个要用的 profile 都需要安装一次:
dsh plugin --profile headless add @dingyi222666/dsh-wakatime
桌面端(Desktop 应用)
DeepSeek Harness 桌面端是基于同一套 Web host 的 Electron 外壳,但它独占一个独立的 profile($DSH_HOME/profiles/desktop)与独立的包状态。
展开完整文档(README 剩余 1 节)
@dingyi222666/dsh-wakatime 为 DeepSeek Harness (dsh) 开发的 WakaTime 插件 —— 统计你的 AI 编码活动、代码行数与耗时。由 opencode-wakatime 适配到 dsh 的插件模型。 安装 从 npm 安装(需要 dsh >= 0.1.3-alpha.2 <0.3.0-0,由 engines.dsh 声明) dsh plugin --profile web add @dingyi222666/dsh-wakatime 重启 dsh web 生效 dsh web 插件适用于任何运行 agent 循环的 profile —— web、headless、acp、sdk,以及桌面端的 desktop profile。每个要用的 profile 都需要安装一次: dsh plugin --profile headless add @dingyi222666/dsh-wakatime 桌面端(Desktop 应用) DeepSeek Harness 桌面端是基于同一套 Web host 的 Electron 外壳,但它独占一个独立的 profile($DSH_HOME/profiles/desktop)与独立的包状态。需要用应用内置的 CLI 安装——npm 安装的 dsh 无法修改 Desktop profile: 1. 先启动一次 Desktop 让它初始化 profiles/desktop,然后完全退出应用。 2. 运行内置 CLI(下例为 macOS 路径;Windows 为 resources\runtime\cli\bin\dsh.cmd): "/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \ plugin --profile desktop add @dingyi222666/dsh-wakatime 3. 重新打开 Desktop,bundle 补丁会在下次启动时生效。 同一命令也支持更新(add @dingyi222666/dsh-wakatime@latest)、list 与 remove <package>,并保留共享的 profile 写锁与兼容性检查。由于 Desktop host 与插件运行在同一个 Electron Node 进程中,插件采集的事件与 heartbeat 行为与 Web profile 完全一致。 从源码安装(GitHub) git clone https://github.com/dingyi222666/dsh-wakatime cd dsh-wakatime pnpm install && pnpm run build dsh plugin --profile web add . dsh web 说明: - dsh plugin 等同于向 profile 添加依赖。bundle 插件的完整包名出现在 profile 的 dsh.profile.bundles 列表后即被加载(自动添加);bundle 补丁(cordis.patch.yml)在下一次启动时生效。 - 插件声明了 engines.dsh(>=0.1.3-alpha.2 <0.3.0-0):dsh 在安装与 profile 启动时会拒绝范围外的宿主(dsh 0.2.1-alpha.3 起以它取代 peer 范围检查;存在 engines.dsh 时不再用 @deepseek-ai/dsh peer 判定兼容性;<0.3.0-0 上界同时排除 0.3 的预发布)。 - 更新时重新执行相同命令即可。 - 使用仓库源码启动的 CLI 时,直接通过 bin 传入参数(node --import tsx/esm apps/cli/src/bin.ts plugin --profile web add @dingyi222666/dsh-wakatime)。 配置 插件开箱即用。如需覆盖行为,在 profile 的用户补丁层($DSH_HOME/profiles/<name>/cordis.patch.yml)或通过 --patch 声明同 id(wakatime)的配置行: - id: wakatime config: heartbeatIntervalMs: 120000 # 每项目限频间隔(默认 60000 毫秒) debug: true # 强制 DEBUG 日志(默认跟随 ~/.wakatime.cfg 的 debug=true) client: web # --plugin 字符串中的客户端限定名(默认 "dsh") timeoutMs: 45000 # heartbeat CLI 超时(默认 30000 毫秒) 所有字段均可选,加载时由 schemastery schema 校验。 功能 - 自动管理 CLI —— 自动下载并更新 wakatime-cli;检测到全局安装(brew install wakatime-cli)时直接使用 - 细粒度文件追踪 —— 追踪 agent 执行的文件操作:edit、write、read、read_image,以及 str_replace_editor(view/create/str_replace/insert) - 解析路径准确性(dsh 0.1.3-alpha.1) —— 优先读取 fs 工具持久化在 tool/result meta 中的信息:沙箱解析后的实际路径与精确 diff hunk;没有 meta 时回退到调用参数 - 精确的 write 结果语义(dsh 0.1.7-alpha.1) —— write 结果新增 operation(create/update)标记:新建文件按内容行数计费,内容未变的覆写记 0 行变化(只发心跳) - 跟随工作目录(dsh 0.2.1-alpha.2) —— 跟随会话已提交的 working-directory/change 记录:切换工作目录后,heartbeat 的实体、--project-folder、相对路径解析与每项目限频配额都会随之切换 - AI 编码指标 —— 发送 --ai-line-changes 供 WakaTime AI 编码分析使用;行数根据 fs 工具的 diff hunk 精确计算(上下文行已剔除) - 实时活动 heartbeat(dsh 0.1.3-alpha.1) —— 长时间回合流式输出期间,agent/status 状态切换与 agent/assistant-stream 事件流会以接近实时的节奏对当前文件发送 heartbeat,无需等待持久化结算事件 - 限频 heartbeat —— 每个项目每分钟最多 1 次,状态持久化到磁盘,多个 dsh 进程共享配额(持久化变更与实时活动共用同一配额) - 会话生命周期 —— 会话销毁与插件树卸载时强制冲刷待发送 heartbeat,单次 dsh --profile headless 运行也能上报 - 批量工具支持 —— 一次编辑涉及多个文件时,通过 --extra-heartbeats 在单次 wakatime-cli 调用中发送 - 零运行时依赖 —— 构建产物只依赖 Node 内置模块与宿主已提供的 @deepseek-ai/ peer 包 前置条件 WakaTime API Key 在 ~/.wakatime.cfg(或设置 WAKATIME_HOME 时的 $WAKATIME_HOME/.wakatime.cfg)中配置: [settings] api_key = waka_your_api_key_here 在 WakaTime 设置 页面获取 API Key。 WakaTime CLI(可选) 插件在缺失时会自动下载 wakatime-cli。也可以自行安装: brew install wakatime-cli 或从 WakaTime releases 下载。 工作原理 插件订阅 dsh 的会话事件流(session/event): - tool/call 按 callId 记录工具名与解析后的参数;tool/result 回查并读取 fs 工具持久化的 meta 载荷 —— 解析后的实体路径(read、read_image)、diff hunk(edit、write),以及 write 的结果标记(dsh 0.1.7-alpha.1 的 operation),得到每个 hunk 的精确增删行数;宿主未附加 meta 时回退到参数推导(write 内容、str_replace_editor 字符串)。 operation: update 且 hunk 为空表示内容未变(记 0 行),create 则按写入内容行数计费。 失败的结果一律不计费——包括 dsh 0.2.0 中 agent-loop 为未执行调用补写的合成恢复结果(recovery closers)。 - 每个项目每分钟最多发送一次 heartbeat(状态文件位于 ~/.wakatime/dsh-wakatime/);触发时机包括聊天活动、工具结果、已提交的模型结算(含 dsh 0.1.3-alpha.1 中无消息的 assistant/attempt 记录)、实时 agent 活动(agent/status、agent/assistant-stream)、turn 边界、会话销毁与插件卸载。 - 项目目录从会话 header 的 cwd 开始,并跟随已提交的 working-directory/change 记录(dsh 0.2.1-alpha.2),与 fs 工具实际解析所用的目录保持一致;每个目录各有独立的限频配额。 - --plugin 标签形如 Deepseek Harness[-<client>]/<dsh 版本> dsh-wakatime/<版本>。 开发 pnpm install pnpm run typecheck # tsc --noEmit pnpm run build # 声明文件到 lib/types + tsdown 打包 lib/index.js pnpm test # vitest:changes、state、heartbeat、插件接线 目录结构: - src/index.ts —— 插件入口(name / Config / apply)与事件接线 - src/config.ts —— schemastery Config schema、默认值、--plugin 标签 - src/changes.ts —— 工具事件 → 文件变更、diff 行数统计 - src/state.ts —— 每项目限频 - src/heartbeat.ts —— wakatime-cli 调用、批量发送、冲刷 - src/cli.ts —— wakatime-cli 发现/下载/更新 - src/paths.ts、src/logger.ts —— WakaTime 路径与文件日志 - tests/ —— 单元测试 + 基于真实 cordis Context 的集成测试 已知限制 - 沙箱/远程文件系统中的工具调用按其模型可见的 file_path 参数追踪,除非 tool/result 的 meta 携带解析后的绝对路径(dsh 0.1.3-alpha.1 的 fs 工具会携带);解析路径与沙箱不一致时可能以项目相对路径记录。 - bash 命令不归因到具体文件(可能改动任意内容)。 - 当 @deepseek-ai/dsh 无法从插件位置解析时(例如 npm 安装缺少 dev 依赖),--plugin 标签中的 dsh 版本显示为 unknown。 - @deepseek-ai/dsh-session/@deepseek-ai/dsh-agent 的 peer 范围从 0.1.3-alpha.1 起;更老的宿主仍能运行追踪路径,但没有实时 agent 活动 heartbeat。 许可证 MIT —— 移植逻辑来自 opencode-wakatime(MIT)。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dingyi222666/dsh-wakatime
DeepSeek Harness(dsh)的 WakaTime 插件——追踪 AI 编码活动、代码行数和耗时
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,197已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2