tokentracker-cli 0.21.3 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.ja.md +457 -0
  2. package/README.ko.md +457 -0
  3. package/README.md +45 -6
  4. package/README.zh-CN.md +45 -6
  5. package/dashboard/dist/assets/{Card-Cv4wn6W8.js → Card-CD18G4Ge.js} +1 -1
  6. package/dashboard/dist/assets/DashboardPage-DKY_Mi9v.js +64 -0
  7. package/dashboard/dist/assets/DevicePage-BkavlAal.js +1 -0
  8. package/dashboard/dist/assets/{FadeIn-DjQyRfLZ.js → FadeIn-CVNJ4aZy.js} +1 -1
  9. package/dashboard/dist/assets/{HeaderGithubStar-D2BjLT1b.js → HeaderGithubStar-COu1Xy3I.js} +1 -1
  10. package/dashboard/dist/assets/{IpCheckPage-D0uvbHPe.js → IpCheckPage-B2HjZ3vY.js} +1 -1
  11. package/dashboard/dist/assets/{LandingPage-DGJcVAg7.js → LandingPage-9PSLFnys.js} +1 -1
  12. package/dashboard/dist/assets/{LeaderboardPage-Dnt_YLsP.js → LeaderboardPage-CQT5dBHU.js} +1 -1
  13. package/dashboard/dist/assets/{LeaderboardProfilePage-DM7S9_kG.js → LeaderboardProfilePage-aPP-Raey.js} +1 -1
  14. package/dashboard/dist/assets/{LimitsPage-COomwRa6.js → LimitsPage-eFrAHmoA.js} +2 -2
  15. package/dashboard/dist/assets/{LoginPage-k0k50kws.js → LoginPage-CczTNZ_P.js} +1 -1
  16. package/dashboard/dist/assets/{PopoverPopup-DctOj5-q.js → PopoverPopup-CEvWSWgZ.js} +2 -2
  17. package/dashboard/dist/assets/{ProviderIcon-DGlYzr9I.js → ProviderIcon-ewev19y3.js} +1 -1
  18. package/dashboard/dist/assets/SettingsPage-taBxq6ux.js +1 -0
  19. package/dashboard/dist/assets/SkillsPage-cqHO3rMB.js +1 -0
  20. package/dashboard/dist/assets/{WidgetsPage-DsMj8Qcz.js → WidgetsPage-B53b1hwG.js} +1 -1
  21. package/dashboard/dist/assets/WrappedPage-DwAhprTa.js +1 -0
  22. package/dashboard/dist/assets/check-JnFJsHgI.js +1 -0
  23. package/dashboard/dist/assets/{chevron-down-kcaroSaH.js → chevron-down-zOKEzHdv.js} +1 -1
  24. package/dashboard/dist/assets/{download-DKMK6oF8.js → download-BZZ4vKc1.js} +1 -1
  25. package/dashboard/dist/assets/{leaderboard-columns-BZ06dD2h.js → leaderboard-columns-BNGlMUsD.js} +1 -1
  26. package/dashboard/dist/assets/main-A_x5MMU-.css +1 -0
  27. package/dashboard/dist/assets/{main-DKVBnAOd.js → main-D0Irg9xR.js} +62 -17
  28. package/dashboard/dist/assets/{use-limits-display-prefs-Bx-K-27B.js → use-limits-display-prefs-BTuSZo27.js} +1 -1
  29. package/dashboard/dist/assets/{use-native-settings-DtuifRKC.js → use-native-settings-BPXVZrWe.js} +1 -1
  30. package/dashboard/dist/assets/{use-reduced-motion-Cen-UCKO.js → use-reduced-motion-HUOV_JD1.js} +1 -1
  31. package/dashboard/dist/assets/{use-usage-limits-CAWz6ijv.js → use-usage-limits-G6-vCBcN.js} +1 -1
  32. package/dashboard/dist/index.html +2 -2
  33. package/dashboard/dist/share.html +2 -2
  34. package/package.json +3 -2
  35. package/src/cli.js +11 -0
  36. package/src/commands/device-login.js +161 -0
  37. package/src/commands/status.js +199 -1
  38. package/src/commands/sync.js +85 -2
  39. package/src/commands/wrapped.js +150 -0
  40. package/src/lib/local-api.js +37 -2
  41. package/src/lib/passive-mode.js +185 -0
  42. package/src/lib/pricing/seed-snapshot.json +1 -1
  43. package/src/lib/rollout.js +913 -0
  44. package/src/lib/wrapped-aggregator.js +225 -0
  45. package/dashboard/dist/assets/DashboardPage-DsfcNgai.js +0 -1
  46. package/dashboard/dist/assets/SettingsPage-D2sqM9g_.js +0 -1
  47. package/dashboard/dist/assets/SkillsPage-B8K--edc.js +0 -1
  48. package/dashboard/dist/assets/main-DX38hz5f.css +0 -1
package/README.zh-CN.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  # Token Tracker
4
4
 
5
- [English](./README.md) · **简体中文**
5
+ [English](./README.md) · **简体中文** · [日本語](./README.ja.md) · [한국어](./README.ko.md)
6
6
 
7
7
  ### 跨所有 CLI,看清你到底在 AI 上花了多少钱
8
8
 
9
- 自动采集 **17 款 AI 编码工具** 的 token 用量,全程本地聚合,用一套漂亮的 Dashboard 看真实成本与趋势。不需要云账号、不需要 API Key、不需要任何配置 —— 一条命令搞定。
9
+ 自动采集 **22 款 AI 编码工具** 的 token 用量,全程本地聚合,用一套漂亮的 Dashboard 看真实成本与趋势。不需要云账号、不需要 API Key、不需要任何配置 —— 一条命令搞定。
10
10
 
11
11
  [![npm version](https://img.shields.io/npm/v/tokentracker-cli.svg?color=blue)](https://www.npmjs.com/package/tokentracker-cli)
12
12
  [![npm downloads](https://img.shields.io/npm/dm/tokentracker-cli.svg?color=brightgreen)](https://www.npmjs.com/package/tokentracker-cli)
@@ -14,6 +14,7 @@
14
14
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
15
15
  [![Platform](https://img.shields.io/badge/macOS-supported-lightgrey.svg)](https://www.apple.com/macos/)
16
16
  [![GitHub stars](https://img.shields.io/github/stars/mm7894215/TokenTracker?style=social)](https://github.com/mm7894215/TokenTracker/stargazers)
17
+ [![作者 tokens](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=0652839f-d19f-4f67-af85-6b7675875443&metric=tokens&compact=1&label=author%20tokens)](https://www.tokentracker.cc/leaderboard/u/0652839f-d19f-4f67-af85-6b7675875443)
17
18
 
18
19
  <br/>
19
20
 
@@ -57,6 +58,8 @@ npm i -g tokentracker-cli
57
58
  tokentracker # 打开 Dashboard
58
59
  tokentracker sync # 手动同步
59
60
  tokentracker status # 查看 hook 挂接状态
61
+ tokentracker status --json # 机器可读 JSON(pipe 到 jq、给 AI agent 喂数据)
62
+ tokentracker status --light # 纯 ASCII 表(CI / SSH 用,无 spinner)
60
63
  tokentracker doctor # 健康检查
61
64
  ```
62
65
 
@@ -79,7 +82,7 @@ brew install mm7894215/tokentracker/tokentracker
79
82
 
80
83
  ## ✨ 特性
81
84
 
82
- - 🔌 **开箱即用支持 17 款 AI 工具** —— Claude Code、Codex CLI、Cursor、Gemini CLI、Kiro、OpenCode、OpenClaw、Every Code、Hermes Agent、GitHub Copilot、Kimi Code、CodeBuddy、Grok Build、oh-my-pi、Kilo CLI、Kilo Code、Antigravity
85
+ - 🔌 **开箱即用支持 22 款 AI 工具** —— Claude Code、Codex CLI、Cursor、Gemini CLI、Kiro、OpenCode、OpenClaw、Every Code、Hermes Agent、GitHub Copilot、Kimi Code、CodeBuddy、Grok Build、oh-my-pi、pi、Craft Agents、Kilo CLI、Kilo Code、Roo Code、Antigravity、Zed Agent、Goose
83
86
  - 🏠 **100% 本地** —— Token 数据绝不离开你的机器。无账号、无 API Key
84
87
  - 🚀 **零配置** —— 首次运行自动安装所有 hook。30 秒从零到 Dashboard
85
88
  - 📊 **漂亮的 Dashboard** —— 用量趋势、按模型的成本分解、GitHub 风格活跃度热力图、按项目归因
@@ -162,11 +165,16 @@ brew install mm7894215/tokentracker/tokentracker
162
165
  | **Grok Build** (xAI) | ✅ 自动 | SessionEnd hook + 被动扫描 `updates.jsonl` / `signals.json`(`~/.grok/sessions/**/`) |
163
166
  | **Kilo CLI** (kilo.ai) | ✅ 自动 | 被动读取 SQLite(`~/.local/share/kilo/kilo.db`,OpenCode-fork schema) |
164
167
  | **Kilo Code** (VS Code 插件) | ✅ 自动 | 被动读取 `ui_messages.json`(Cursor / VS Code / CodeBuddy / Windsurf 的 globalStorage) |
168
+ | **pi** (`@mariozechner/pi-coding-agent`) | ✅ 自动 | 被动读取(`~/.pi/agent/sessions/**/*.jsonl`) |
169
+ | **Craft Agents** | ✅ 自动 | 被动读取 session(`~/.craft-agent` + workspace session logs) |
170
+ | **Roo Code** (VS Code 扩展) | ✅ 自动 | 被动读取 `ui_messages.json`(`rooveterinaryinc.roo-cline`) |
171
+ | **Zed Agent** | ✅ 自动 | 被动 SQLite 读取(`threads.db`,仅统计托管的 `zed.dev` 模型) |
172
+ | **Goose** (Block) | ✅ 自动 | 被动 SQLite 读取(`sessions.db`,累计量 delta) |
165
173
 
166
174
  > **需要手动装什么插件 / hook 吗?** 不需要。`tokentracker`(或 `tokentracker init`)第一次跑的时候会全部搞定:
167
175
  > - **基于 hook 的工具**(Claude Code、Codex、Gemini、Every Code、**CodeBuddy**、**Grok Build**)—— 我们把 SessionEnd hook 或 TOML notify 条目写入它们自己的配置文件
168
176
  > - **基于插件的工具**(OpenCode、**OpenClaw**)—— 插件随 npm 包一起分发(`~/.tokentracker/app/openclaw-plugin/`),通过对应工具自己的 CLI 挂接(`openclaw plugins install --link …` + `enable`)。无需下载、无需拖拽
169
- > - **被动读取类**(Cursor、Kiro、Hermes、Kimi Code、Copilot、**Grok Build**、**oh-my-pi**、**Kilo CLI**、**Kilo Code**、**Antigravity**)—— 完全不往它们里面塞东西,只读取它们自己产生的文件(SQLite DB、JSONL、OTEL 导出、会话轨迹日志)
177
+ > - **被动读取类**(Cursor、Kiro、Hermes、Kimi Code、Copilot、**Grok Build**、**oh-my-pi**、**pi**、**Craft Agents**、**Kilo CLI**、**Kilo Code**、**Roo Code**、**Antigravity**、**Zed Agent**、**Goose**)—— 完全不往它们里面塞东西,只读取它们自己产生的文件(SQLite DB、JSONL、OTEL 导出、会话轨迹日志)
170
178
  > - **Grok Build 估算说明** —— Grok 当前本地遥测提供 `updates.jsonl` 里的累计 `totalTokens`,但还没有稳定的输入/输出/cache 拆分;`signals.json` 仍作为 `contextTokensUsed` 快照兜底。所以在 Grok 提供按调用粒度的用量明细之前,TokenTracker 对 Grok 成本仍是估算值
171
179
  >
172
180
  > 任何时候都可以用 `tokentracker status` 查看每个集成的状态。如果显示 `skipped`,`detail` 列会解释原因(例如某工具 CLI 不在 `PATH` 上、config 不可读等)。
@@ -181,7 +189,7 @@ brew install mm7894215/tokentracker/tokentracker
181
189
 
182
190
  | | **TokenTracker** | ccusage | Cursor 自带统计 |
183
191
  |--------------------------|:---:|:---:|:---:|
184
- | **支持的 AI 工具数** | **16** | 1(Claude) | 1(Cursor) |
192
+ | **支持的 AI 工具数** | **22** | 1(Claude) | 1(Cursor) |
185
193
  | **本地优先,无需账号** | ✅ | ✅ | ❌ |
186
194
  | **原生菜单栏 App** | ✅ | ❌ | ❌ |
187
195
  | **桌面小组件** | ✅ 4 个小组件 | ❌ | ❌ |
@@ -193,7 +201,7 @@ brew install mm7894215/tokentracker/tokentracker
193
201
 
194
202
  ```mermaid
195
203
  flowchart LR
196
- A["AI CLI 工具<br/>Claude · Codex · Cursor · Gemini · Kiro<br/>OpenCode · OpenClaw · Every Code · Hermes · Copilot · Kimi Code · CodeBuddy · Grok Build · oh-my-pi · Kilo CLI · Kilo Code"]
204
+ A["AI CLI 工具<br/>Claude · Codex · Cursor · Gemini · Kiro<br/>OpenCode · OpenClaw · Every Code · Hermes · Copilot · Kimi Code · CodeBuddy · Grok Build · oh-my-pi · pi · Craft · Roo Code · Zed · Goose"]
197
205
  A -->|hook 触发| B[Token Tracker]
198
206
  B -->|解析日志<br/>30 分钟 UTC 桶| C[(本地 SQLite)]
199
207
  C --> D[Web Dashboard]
@@ -386,6 +394,37 @@ xattr -cr /Applications/TokenTrackerBar.app
386
394
 
387
395
  ---
388
396
 
397
+ ## 🪪 README 徽章
398
+
399
+ 把你的 token 用量秀到 GitHub Profile 或项目 README 上。
400
+
401
+ 获取 `你的_USER_ID`:
402
+ 1. 运行 `tokentracker`,打开 Dashboard,并登录排行榜。
403
+ 2. 进入 **设置 → 账号**。
404
+ 3. 使用页面里的 **User ID**。如果是 headless/SSH 机器,`tokentracker device-login` 也会把同一个 `user_id` 写到 `~/.tokentracker/tracker/config.json`。
405
+
406
+ 然后贴一段:
407
+
408
+ ```markdown
409
+ ![tokens](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=你的_USER_ID&metric=tokens)
410
+ ![cost](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=你的_USER_ID&metric=cost)
411
+ ![rank](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=你的_USER_ID&metric=rank)
412
+ ```
413
+
414
+ 输出 shields.io 兼容的徽章 SVG,含你当前的累计数据(60 秒缓存):
415
+
416
+ | 参数 | 取值 | 默认 |
417
+ |---|---|---|
418
+ | `metric` | `tokens` / `cost` / `rank` | `tokens` |
419
+ | `period` | `week` / `month` / `total` | `total` |
420
+ | `style` | `flat` / `flat-square` | `flat` |
421
+ | `label` | 任意短文本 | 指标名 |
422
+ | `color` | hex,例如 `ff6b35` | 品牌绿 |
423
+
424
+ > **隐私**:徽章仅对开启了排行榜公开(**设置 → 账号 → 公开 Profile**)的用户生效;未公开的用户会返回 "private" 占位徽章。
425
+
426
+ ---
427
+
389
428
  ## ⭐ Star 历史
390
429
 
391
430
  <a href="https://star-history.com/#mm7894215/TokenTracker&Date">
@@ -1 +1 @@
1
- import{D as r}from"./main-DKVBnAOd.js";function t({children:i,title:a,subtitle:o,className:s="",bodyClassName:d=""}){return r.jsxs("div",{className:`rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-900 transition-colors duration-200 ${s}`,children:[(a||o)&&r.jsxs("div",{className:"px-5 py-4 border-b border-oai-gray-200 dark:border-oai-gray-800 transition-colors duration-200",children:[a&&r.jsx("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide transition-colors duration-200",children:a}),o&&r.jsx("p",{className:"text-sm text-oai-gray-500 dark:text-oai-gray-300 mt-1 transition-colors duration-200",children:o})]}),r.jsx("div",{className:`p-5 ${d}`,children:i})]})}export{t as C};
1
+ import{C as r}from"./main-D0Irg9xR.js";function t({children:i,title:a,subtitle:o,className:s="",bodyClassName:d=""}){return r.jsxs("div",{className:`rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-900 transition-colors duration-200 ${s}`,children:[(a||o)&&r.jsxs("div",{className:"px-5 py-4 border-b border-oai-gray-200 dark:border-oai-gray-800 transition-colors duration-200",children:[a&&r.jsx("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide transition-colors duration-200",children:a}),o&&r.jsx("p",{className:"text-sm text-oai-gray-500 dark:text-oai-gray-300 mt-1 transition-colors duration-200",children:o})]}),r.jsx("div",{className:`p-5 ${d}`,children:i})]})}export{t as C};