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.ko.md ADDED
@@ -0,0 +1,457 @@
1
+ <div align="center">
2
+
3
+ # Token Tracker
4
+
5
+ [English](./README.md) · [简体中文](./README.zh-CN.md) · [日本語](./README.ja.md) · **한국어**
6
+
7
+ ### 모든 CLI에서 AI에 쓰는 비용을 정확히 파악
8
+
9
+ **22개의 AI 코딩 도구**에서 토큰 수치를 자동으로 수집하고 로컬에서 집계해, 실제 비용 추세를 아름다운 대시보드에서 확인. 클라우드 계정 불필요, API Key 불필요, 셋업 불필요 — 명령 한 줄이면 끝.
10
+
11
+ [![npm version](https://img.shields.io/npm/v/tokentracker-cli.svg?color=blue)](https://www.npmjs.com/package/tokentracker-cli)
12
+ [![npm downloads](https://img.shields.io/npm/dm/tokentracker-cli.svg?color=brightgreen)](https://www.npmjs.com/package/tokentracker-cli)
13
+ [![Homebrew](https://img.shields.io/github/v/release/mm7894215/TokenTracker?label=brew&color=F8B73E&logo=homebrew&logoColor=white)](https://github.com/mm7894215/homebrew-tokentracker)
14
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
15
+ [![Platform](https://img.shields.io/badge/macOS-supported-lightgrey.svg)](https://www.apple.com/macos/)
16
+ [![GitHub stars](https://img.shields.io/github/stars/mm7894215/TokenTracker?style=social)](https://github.com/mm7894215/TokenTracker/stargazers)
17
+ [![Author 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)
18
+
19
+ <br/>
20
+
21
+ <img src="https://raw.githubusercontent.com/mm7894215/tokentracker/main/docs/screenshots/dashboard-dark.png" alt="Token Tracker Dashboard" width="820" />
22
+
23
+ <br/><br/>
24
+
25
+ ⭐ **TokenTracker가 시간을 아껴줬다면 [GitHub에서 스타를 눌러주세요](https://github.com/mm7894215/TokenTracker) — 다른 개발자들이 이 프로젝트를 발견하는 데 도움이 됩니다.**
26
+
27
+ <br/>
28
+
29
+ [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/M4M11XSNWD)
30
+
31
+ </div>
32
+
33
+ ---
34
+
35
+ ## ⚡ 빠른 시작
36
+
37
+ > **요구 사항**: Node.js **20+** (CLI는 macOS / Linux / Windows에서 동작; 메뉴바 앱은 macOS 전용. Cursor 토큰 읽기는 가능한 경우 시스템 `sqlite3` CLI를 사용하고, 지원되는 Node 릴리스에서는 `node:sqlite`로 폴백).
38
+
39
+ ```bash
40
+ npx tokentracker-cli
41
+ ```
42
+
43
+ 끝입니다. 첫 실행에서 hook을 설치하고, 데이터를 동기화한 뒤 `http://localhost:7680`에 대시보드를 엽니다.
44
+
45
+ **30초 안에 얻는 것:**
46
+ - 📊 사용 추세, 모델별 분석, 비용 분석을 보여주는 `localhost:7680`의 로컬 대시보드
47
+ - 🔌 설치된 모든 지원 AI 도구에 대한 hook 자동 감지
48
+ - 🏠 100% 로컬 — 계정 없음, API Key 없음, 네트워크 호출 없음 (옵션 리더보드 제외)
49
+ - 🧩 *옵션:* 250+개의 공개 Skill을 둘러보고 Claude · Codex · Gemini · OpenCode · Hermes 간에 동기화할 수 있는 Skills 탭
50
+
51
+ > **네이티브 macOS 메뉴바 앱이 필요하다면?** [`TokenTrackerBar.dmg` 다운로드](https://github.com/mm7894215/TokenTracker/releases/latest) → Applications로 드래그. 데스크톱 위젯, 메뉴바 상태 아이콘, 그리고 WKWebView 안의 동일한 대시보드를 포함합니다.
52
+
53
+ 짧은 명령어로 쓰려면 전역 설치:
54
+
55
+ ```bash
56
+ npm i -g tokentracker-cli
57
+
58
+ tokentracker # 대시보드 열기
59
+ tokentracker sync # 수동 동기화
60
+ tokentracker status # hook 상태 확인
61
+ tokentracker doctor # 헬스 체크
62
+ ```
63
+
64
+ ### 🍺 Homebrew (macOS)
65
+
66
+ `brew`를 선호한다면, 별도 tap 단계 없이 바로 설치 가능:
67
+
68
+ ```bash
69
+ # macOS 메뉴바 앱 (DMG)
70
+ brew install --cask mm7894215/tokentracker/tokentracker
71
+
72
+ # CLI만
73
+ brew install mm7894215/tokentracker/tokentracker
74
+ ```
75
+
76
+ 업그레이드는 `brew upgrade --cask mm7894215/tokentracker/tokentracker`. tap은 새 릴리스마다 한 시간 이내에 자동 갱신됩니다.
77
+
78
+ ---
79
+
80
+
81
+ ## ✨ 기능
82
+
83
+ - 🔌 **22개의 AI 도구 기본 지원** — Claude Code, Codex CLI, Cursor, Gemini CLI, Antigravity, 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, Zed Agent, Goose
84
+ - 🏠 **100% 로컬** — 토큰 데이터가 기기를 떠나지 않습니다. 계정 없음, API Key 없음.
85
+ - 🚀 **제로 설정** — 첫 실행 시 Hook 자동 설치. 0에서 대시보드까지 30초.
86
+ - 📊 **아름다운 대시보드** — 사용 추세, 모델별 비용 분석, GitHub 스타일 활동 히트맵, 프로젝트 귀속 정보
87
+ - 🖥️ **네이티브 macOS 앱** — 메뉴바 상태 아이콘, 임베디드 서버, WKWebView 대시보드
88
+ - 🎨 **4종 데스크톱 위젯** — Pin Usage / Activity Heatmap / Top Models / Usage Limits를 데스크톱에 고정
89
+ - 📈 **실시간 레이트 제한 추적** — Claude / Codex / Cursor / Gemini / Kiro / Copilot / Antigravity 쿼터 윈도우와 리셋 카운트다운
90
+ - 💰 **비용 엔진** — [LiteLLM](https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json)을 통해 2,200+개 모델 가격 책정 (매일 자동 갱신) + 틈새 도구 (Kiro, Cursor Composer, Kimi, CodeBuddy hy3)를 위한 수동 큐레이션 오버라이드; 24시간 디스크 캐시 + 번들된 오프라인 스냅샷으로 인터넷 없이도 정확한 USD 표시. 벤더가 공식 가격을 공개하지 않은 모델 (예: Tencent hy3-preview)은 토큰만 추적되며 벤더가 요율을 공개할 때까지 비용은 $0으로 표시됩니다.
91
+ - 🌐 **옵션 리더보드** — 전 세계 개발자들과 비교; 컬럼을 드래그하여 관심 있는 프로바이더에 집중 (옵트인, 참여하려면 사인인 필요)
92
+ - 🧩 **옵션 Skills 탭** — `anthropics/skills`, `ComposioHQ/awesome-claude-skills`, `skills.sh` 그리고 직접 추가한 임의의 GitHub 저장소에서 250+개의 공개 Skill을 둘러보고, 타겟 이름을 지정해 Claude / Codex / Gemini / OpenCode / Hermes에 동기화. 원클릭 Undo 지원.
93
+ - 🔒 **프라이버시 우선** — 토큰 수치와 타임스탬프만. 프롬프트, 응답, 파일 내용은 절대 다루지 않음.
94
+
95
+ ---
96
+
97
+ ## 🖼️ 쇼케이스
98
+
99
+ <table>
100
+ <tr>
101
+ <td width="50%">
102
+
103
+ **대시보드** — 사용 추세, 모델별 분석, 비용 분석
104
+
105
+ <img src="https://raw.githubusercontent.com/mm7894215/tokentracker/main/docs/screenshots/dashboard-light.png" alt="Dashboard" />
106
+
107
+ </td>
108
+ <td width="50%">
109
+
110
+ **데스크톱 위젯** — 사용 정보를 데스크톱에 고정
111
+
112
+ <img src="https://raw.githubusercontent.com/mm7894215/tokentracker/main/docs/screenshots/widgets-overview.png" alt="Desktop Widgets" />
113
+
114
+ </td>
115
+ </tr>
116
+ <tr>
117
+ <td width="50%">
118
+
119
+ **메뉴바 앱** — 애니메이션 Clawd 컴패니언 + 네이티브 패널
120
+
121
+ <img src="https://raw.githubusercontent.com/mm7894215/tokentracker/main/docs/screenshots/menubar.gif" alt="Menu Bar App" />
122
+
123
+ </td>
124
+ <td width="50%">
125
+
126
+ **글로벌 리더보드** — 전 세계 개발자들과 비교
127
+
128
+ <img src="https://raw.githubusercontent.com/mm7894215/tokentracker/main/docs/screenshots/leaderboard.png" alt="Leaderboard" />
129
+
130
+ </td>
131
+ </tr>
132
+ <tr>
133
+ <td colspan="2">
134
+
135
+ **Skills Manager** — GitHub와 `skills.sh`에서 250+개의 공개 Skill을 둘러보고, 한 번 설치하면 Claude / Codex / Gemini / OpenCode / Hermes에 동기화. 타겟별 토글, 원클릭 Undo, 수동 파일 복사 불필요.
136
+
137
+ <img src="https://raw.githubusercontent.com/mm7894215/tokentracker/main/docs/screenshots/skills.png" alt="Skills Manager" />
138
+
139
+ </td>
140
+ </tr>
141
+ </table>
142
+
143
+ ---
144
+
145
+ ## 🔌 지원 AI 도구
146
+
147
+ | 도구 | 감지 | 방식 |
148
+ |---|---|---|
149
+ | **Claude Code** | ✅ 자동 | `settings.json`의 SessionEnd hook |
150
+ | **Codex CLI** | ✅ 자동 | `config.toml`의 TOML notify hook |
151
+ | **Cursor** | ✅ 자동 | API + SQLite 인증 토큰 |
152
+ | **Kiro** | ✅ 자동 | SQLite + JSONL 하이브리드 |
153
+ | **Gemini CLI** | ✅ 자동 | SessionEnd hook |
154
+ | **OpenCode** | ✅ 자동 | 플러그인 시스템 + SQLite |
155
+ | **OpenClaw** | ✅ 자동 | 세션 플러그인 |
156
+ | **Every Code** | ✅ 자동 | TOML notify hook |
157
+ | **Hermes Agent** | ✅ 자동 | SQLite sessions 테이블 (`~/.hermes/state.db`) |
158
+ | **GitHub Copilot** | ✅ 자동 | OpenTelemetry 파일 익스포터 (`COPILOT_OTEL_FILE_EXPORTER_PATH`) |
159
+ | **Kimi Code** | ✅ 자동 | 패시브 `wire.jsonl` 리더 (`~/.kimi/sessions/**/wire.jsonl`) |
160
+ | **oh-my-pi (Pi Coding Agent)** | ✅ 자동 | 패시브 리더 (`~/.omp/agent/sessions/**/*.jsonl`) |
161
+ | **CodeBuddy** (Tencent) | ✅ 자동 | `~/.codebuddy/settings.json`의 SessionEnd hook (Claude-Code fork) |
162
+ | **Grok Build** (xAI) | ✅ 자동 | SessionEnd hook + 패시브 `updates.jsonl` / `signals.json` 스캔 (`~/.grok/sessions/**/`) |
163
+ | **Kilo CLI** (kilo.ai) | ✅ 자동 | 패시브 SQLite 리더 (`~/.local/share/kilo/kilo.db`, OpenCode-fork 스키마) |
164
+ | **Kilo Code** (VS Code 확장) | ✅ 자동 | 패시브 `ui_messages.json` 리더 (Cursor/Code/CodeBuddy/Windsurf globalStorage) |
165
+ | **Antigravity** | ✅ 자동 | 패시브 트랜스크립트 리더 (`~/.gemini/{antigravity,antigravity-ide,antigravity-cli}/brain/**/transcript.jsonl`) |
166
+ | **pi** (`@mariozechner/pi-coding-agent`) | ✅ 자동 | 패시브 리더 (`~/.pi/agent/sessions/**/*.jsonl`) |
167
+ | **Craft Agents** | ✅ 자동 | 패시브 세션 리더 (`~/.craft-agent` + workspace session logs) |
168
+ | **Roo Code** (VS Code 확장) | ✅ 자동 | 패시브 `ui_messages.json` 리더 (`rooveterinaryinc.roo-cline`) |
169
+ | **Zed Agent** | ✅ 자동 | 패시브 SQLite 리더 (`threads.db`, hosted `zed.dev` models only) |
170
+ | **Goose** (Block) | ✅ 자동 | 패시브 SQLite 리더 (`sessions.db`, cumulative deltas) |
171
+
172
+ > **플러그인이나 hook을 수동으로 설치해야 하나요?** 아니요. `tokentracker` (또는 `tokentracker init`)가 첫 실행에서 모든 것을 처리합니다:
173
+ > - **Hook 기반** 도구 (Claude Code, Codex, Gemini, Every Code, **CodeBuddy**, **Grok Build**) — 도구 자체의 설정에 SessionEnd hook 또는 TOML notify 엔트리를 작성합니다.
174
+ > - **플러그인 기반** 도구 (OpenCode, **OpenClaw**) — 플러그인은 npm 패키지 안에 포함되어 있습니다 (`~/.tokentracker/app/openclaw-plugin/`). 도구 자체의 CLI로 링크합니다 (`openclaw plugins install --link …` + `enable`). 다운로드, 드래그 앤 드롭 불필요.
175
+ > - **패시브 리더** (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 export, session logs)만 읽습니다.
176
+ > - **Grok Build 추정** — 현재 로컬 텔레메트리는 `updates.jsonl`의 누적 `totalTokens`를 노출하지만, 안정적인 프롬프트/출력/캐시 분할은 제공하지 않습니다; `signals.json`은 `contextTokensUsed` 스냅샷을 사용한 폴백으로 남아 있습니다. 호출별 사용 상세 정보가 제공될 때까지 TokenTracker는 Grok 비용을 추정합니다.
177
+ >
178
+ > 언제든 `tokentracker status`로 각 통합의 상태를 확인할 수 있습니다. `skipped`로 표시되면 `detail` 컬럼이 이유를 설명합니다 (예: 도구 CLI가 `PATH`에 없음, 설정 읽기 불가).
179
+ >
180
+ > 더 깊이 살펴보기: [OpenClaw 통합 & 트러블슈팅](docs/openclaw-integration.md).
181
+
182
+ 원하는 도구가 빠져 있나요? [Issue를 열어주세요](https://github.com/mm7894215/TokenTracker/issues/new) — 새 프로바이더 추가는 보통 파서 파일 하나 정도면 됩니다.
183
+
184
+ ---
185
+
186
+ ## 🆚 왜 TokenTracker인가?
187
+
188
+ | | **TokenTracker** | ccusage | Cursor stats |
189
+ |--------------------------|:---:|:---:|:---:|
190
+ | **지원 AI 도구** | **22** | 1 (Claude) | 1 (Cursor) |
191
+ | **로컬 우선, 계정 불필요** | ✅ | ✅ | ❌ |
192
+ | **네이티브 메뉴바 앱** | ✅ | ❌ | ❌ |
193
+ | **데스크톱 위젯** | ✅ 4종 | ❌ | ❌ |
194
+ | **레이트 제한 추적** | ✅ 7개 프로바이더 | ❌ | Cursor 전용 |
195
+
196
+ ---
197
+
198
+ ## 🏗️ 작동 방식
199
+
200
+ ```mermaid
201
+ flowchart LR
202
+ A["AI CLI Tools<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"]
203
+ A -->|hooks trigger| B[Token Tracker]
204
+ B -->|parse logs<br/>30-min UTC buckets| C[(Local SQLite)]
205
+ C --> D[Web Dashboard]
206
+ C --> E[Menu Bar App]
207
+ C --> F[Desktop Widgets]
208
+ C -.->|opt-in| G[(Cloud Leaderboard)]
209
+ ```
210
+
211
+ 1. AI CLI 도구가 평소 사용 중에 로그를 생성
212
+ 2. 경량 hook이 변경을 감지하고 동기화를 트리거 (Cursor는 hook 대신 API 사용)
213
+ 3. 토큰 수치는 로컬에서 파싱 — 프롬프트나 응답 내용은 절대 다루지 않음
214
+ 4. 30분 UTC 버킷으로 집계
215
+ 5. 대시보드, 메뉴바 앱, 위젯 모두 동일한 로컬 스냅샷을 읽음
216
+
217
+ ---
218
+
219
+ ## 🛡️ 프라이버시
220
+
221
+ | 보호 | 설명 |
222
+ |---|---|
223
+ | **콘텐츠 업로드 없음** | 토큰 수치와 타임스탬프만. 프롬프트, 응답, 파일 내용은 절대 다루지 않습니다. |
224
+ | **기본적으로 로컬 전용** | 모든 데이터는 기기에 머뭅니다. 리더보드는 완전히 옵트인. |
225
+ | **감사 가능** | 오픈 소스. [`src/lib/rollout.js`](src/lib/rollout.js)를 읽어보세요 — 숫자와 타임스탬프뿐입니다. |
226
+ | **텔레메트리 없음** | 분석 없음, 크래시 리포트 없음, phone-home 없음. |
227
+
228
+ ---
229
+
230
+ ## 📦 설정
231
+
232
+ 대부분의 사용자는 건드릴 필요가 없습니다 — 기본값이 합리적입니다. 고급 설정이 필요할 때:
233
+
234
+ | 변수 | 설명 | 기본값 |
235
+ |---|---|---|
236
+ | `TOKENTRACKER_DEBUG` | 디버그 출력 활성화 (`1`로 활성화) | — |
237
+ | `TOKENTRACKER_HTTP_TIMEOUT_MS` | HTTP 타임아웃 (밀리초) | `20000` |
238
+ | `CODEX_HOME` | Codex CLI 디렉토리 오버라이드 | `~/.codex` |
239
+ | `GEMINI_HOME` | Gemini CLI 디렉토리 오버라이드 | `~/.gemini` |
240
+
241
+ ---
242
+
243
+ ## 🛠️ 개발
244
+
245
+ ```bash
246
+ git clone https://github.com/mm7894215/TokenTracker.git
247
+ cd TokenTracker
248
+ npm install
249
+
250
+ # 대시보드 빌드 + CLI 실행
251
+ cd dashboard && npm install && npm run build && cd ..
252
+ node bin/tracker.js
253
+
254
+ # 테스트
255
+ npm test
256
+ ```
257
+
258
+ ### macOS 앱 빌드
259
+
260
+ ```bash
261
+ cd TokenTrackerBar
262
+ npm run dashboard:build # 대시보드 번들 빌드
263
+ ./scripts/bundle-node.sh # Node.js + tokentracker 소스 번들링
264
+ xcodegen generate # Xcode 프로젝트 생성
265
+ ruby scripts/patch-pbxproj-icon.rb # Icon Composer 에셋 패치
266
+ xcodebuild -scheme TokenTrackerBar -configuration Release clean build
267
+ ./scripts/create-dmg.sh # .app을 DMG로 패키징
268
+ ```
269
+
270
+ **Xcode 16+** 와 [XcodeGen](https://github.com/yonaskolb/XcodeGen)이 필요합니다.
271
+
272
+ ---
273
+
274
+ ## 🔧 트러블슈팅
275
+
276
+ ### CLI
277
+
278
+ <details>
279
+ <summary><b>"engines.node" 또는 미지원 버전 에러</b></summary>
280
+
281
+ <br/>
282
+
283
+ TokenTracker는 **Node 20+** 이 필요합니다. 버전 확인:
284
+
285
+ ```bash
286
+ node --version
287
+ ```
288
+
289
+ 낮다면 [nvm](https://github.com/nvm-sh/nvm), [fnm](https://github.com/Schniz/fnm) 또는 패키지 매니저 (`brew upgrade node`, `apt install nodejs`)로 업그레이드.
290
+
291
+ </details>
292
+
293
+ <details>
294
+ <summary><b>포트 7680이 이미 사용 중</b></summary>
295
+
296
+ <br/>
297
+
298
+ 대시보드 서버는 `7680`이 사용 중이면 다음 빈 포트 (`7681`, `7682`, …)를 자동으로 선택합니다. 실제 사용 중인 포트는 시작 시 로그에 출력됩니다. 특정 포트를 강제하려면:
299
+
300
+ ```bash
301
+ PORT=7700 tokentracker serve
302
+ ```
303
+
304
+ `7680`을 점유 중인 프로세스를 찾으려면:
305
+
306
+ ```bash
307
+ lsof -i :7680
308
+ ```
309
+
310
+ </details>
311
+
312
+ <details>
313
+ <summary><b>프로바이더가 감지되지 않음</b></summary>
314
+
315
+ <br/>
316
+
317
+ 통합 상태 확인:
318
+
319
+ ```bash
320
+ tokentracker status
321
+ ```
322
+
323
+ 이후 doctor로 더 깊은 헬스 체크:
324
+
325
+ ```bash
326
+ tokentracker doctor
327
+ ```
328
+
329
+ 사용하고 있는데도 설정되지 않은 것으로 표시되는 프로바이더가 있다면 `tokentracker activate-if-needed`로 hook 감지를 다시 실행해 보세요. 여전히 없으면 `doctor` 출력을 첨부해 [Issue를 열어주세요](https://github.com/mm7894215/TokenTracker/issues/new).
330
+
331
+ </details>
332
+
333
+ <details>
334
+ <summary><b>hook을 제거하고 모든 설정을 삭제하는 방법</b></summary>
335
+
336
+ <br/>
337
+
338
+ ```bash
339
+ tokentracker uninstall
340
+ ```
341
+
342
+ 이 명령은 감지된 모든 AI 도구에 TokenTracker가 설치한 hook을 모두 제거하고, 로컬 설정과 데이터까지 삭제합니다. 다시 실행해도 안전.
343
+
344
+ </details>
345
+
346
+ ### macOS 앱
347
+
348
+ <details>
349
+ <summary><b>"TokenTrackerBar을(를) 열 수 없습니다" — 확인되지 않은 개발자</b></summary>
350
+
351
+ <br/>
352
+
353
+ TokenTrackerBar는 **애드혹 서명**되어 있습니다 (Apple Developer ID로 공증되지 않음 — 그것은 유료 개발자 계정이 필요합니다). Gatekeeper가 첫 실행을 차단합니다.
354
+
355
+ 1. **시스템 설정 → 개인 정보 보호 및 보안** 열기
356
+ 2. **보안** 섹션으로 스크롤 — *"TokenTrackerBar이(가) Mac을 보호하기 위해 차단되었습니다."* 가 보입니다
357
+ 3. **무시하고 열기** 클릭
358
+ 4. 후속 다이얼로그에서 **열기** 로 확인 (인증 필요)
359
+
360
+ 한 번만 하면 됩니다. 구버전 macOS 대안: Finder에서 앱 오른쪽 클릭 → **열기** → 확인 다이얼로그에서 **열기**.
361
+
362
+ </details>
363
+
364
+ <details>
365
+ <summary><b>"TokenTrackerBar이(가) 손상되어 열 수 없습니다"</b></summary>
366
+
367
+ <br/>
368
+
369
+ 이것은 macOS가 다운로드된 모든 파일에 붙이는 `com.apple.quarantine` 속성에 Gatekeeper가 반응하는 것일 뿐 — 실제 문제는 아닙니다. 다음으로 한 번 클리어:
370
+
371
+ ```bash
372
+ xattr -cr /Applications/TokenTrackerBar.app
373
+ ```
374
+
375
+ 이후 앱이 정상적으로 열립니다.
376
+
377
+ </details>
378
+
379
+ <details>
380
+ <summary><b>"TokenTrackerBar이(가) 다른 앱의 데이터에 접근하려고 합니다"</b></summary>
381
+
382
+ <br/>
383
+
384
+ 이것은 **Cursor** 와 **Kiro** 통합에 필요합니다. 이들은 인증 토큰 / 사용 데이터를 자신의 `~/Library/Application Support/` 폴더에 저장하는데, macOS는 이를 App Management 권한으로 보호합니다.
385
+
386
+ - ✅ Cursor 또는 Kiro를 쓴다면 **허용** 클릭
387
+ - ❌ 쓰지 않는다면 **허용 안 함** 클릭 — 해당 프로바이더는 조용히 건너뛰고, 나머지는 그대로 작동합니다
388
+
389
+ 한 번 허용하면 권한이 기억됩니다. 애드혹 서명된 빌드는 빌드마다 서명 ID가 새로 생기므로 업그레이드 후 다시 프롬프트가 뜬다는 점에 유의하세요.
390
+
391
+ </details>
392
+
393
+ ---
394
+
395
+ ## 🪪 README 배지
396
+
397
+ GitHub 프로필이나 프로젝트 README에서 토큰 사용량을 자랑해 보세요.
398
+
399
+ `YOUR_USER_ID`를 얻는 방법:
400
+ 1. `tokentracker`를 실행해 대시보드를 열고 리더보드에 사인인합니다.
401
+ 2. **Settings → Account**로 이동합니다.
402
+ 3. 표시되는 **User ID**를 사용합니다. headless / SSH 환경에서는 `tokentracker device-login`도 같은 `user_id`를 `~/.tokentracker/tracker/config.json`에 씁니다.
403
+
404
+ 아래 중 하나를 붙여넣으세요:
405
+
406
+ ```markdown
407
+ ![tokens](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=YOUR_USER_ID&metric=tokens)
408
+ ![cost](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=YOUR_USER_ID&metric=cost)
409
+ ![rank](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=YOUR_USER_ID&metric=rank)
410
+ ```
411
+
412
+ 현재 합계를 반영한 shields.io 호환 배지가 렌더링됩니다 (60초 캐시):
413
+
414
+ | 파라미터 | 값 | 기본값 |
415
+ |---|---|---|
416
+ | `metric` | `tokens` / `cost` / `rank` | `tokens` |
417
+ | `period` | `week` / `month` / `total` | `total` |
418
+ | `style` | `flat` / `flat-square` | `flat` |
419
+ | `label` | 임의의 짧은 문자열 | metric 이름 |
420
+ | `color` | hex, 예: `ff6b35` | 브랜드 그린 |
421
+
422
+ > **프라이버시**: 배지는 리더보드 공유가 **켜져** 있는 (`Settings → Account → Public profile`) 프로필에 대해서만 해석됩니다. 비공개 프로필은 "private" 플레이스홀더가 반환됩니다.
423
+
424
+ ---
425
+
426
+ ## ⭐ Star History
427
+
428
+ <a href="https://star-history.com/#mm7894215/TokenTracker&Date">
429
+ <img src="https://api.star-history.com/svg?repos=mm7894215/TokenTracker&type=Date" alt="Star History Chart" width="600" />
430
+ </a>
431
+
432
+ ---
433
+
434
+ ## 🤝 컨트리뷰션 & 지원
435
+
436
+ - **버그 / 기능 요청**: [Issue 열기](https://github.com/mm7894215/TokenTracker/issues/new)
437
+ - **보안**: [SECURITY.md](SECURITY.md) 참조 — 보안 보고는 공개 Issue로 올리지 마세요
438
+ - **풀 리퀘스트**: 셋업, 테스트, 새 AI 도구 통합 추가 방법은 [CONTRIBUTING.md](CONTRIBUTING.md) 참조
439
+ - **질문 / 쇼케이스**: [GitHub Discussions](https://github.com/mm7894215/TokenTracker/discussions)
440
+
441
+ ## 🙏 크레딧
442
+
443
+ Clawd 캐릭터 디자인은 Anthropic의 자산입니다. 이 프로젝트는 커뮤니티 프로젝트이며 Anthropic과의 공식적인 제휴 관계는 없습니다.
444
+
445
+ ## 라이선스
446
+
447
+ [MIT](LICENSE)
448
+
449
+ ---
450
+
451
+ <div align="center">
452
+
453
+ **Token Tracker** — 당신의 AI 산출물을 정량화하세요.
454
+
455
+ <a href="https://www.tokentracker.cc">tokentracker.cc</a> · <a href="https://www.npmjs.com/package/tokentracker-cli">npm</a> · <a href="https://github.com/mm7894215/TokenTracker">GitHub</a>
456
+
457
+ </div>
package/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  # Token Tracker
4
4
 
5
- **English** · [简体中文](./README.zh-CN.md)
5
+ **English** · [简体中文](./README.zh-CN.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md)
6
6
 
7
7
  ### Know exactly what you're spending on AI — across every CLI
8
8
 
9
- Auto-collect token counts from **17 AI coding tools**, aggregate them locally, and see real cost trends in a beautiful dashboard. No cloud account, no API keys, no setup — just one command.
9
+ Auto-collect token counts from **22 AI coding tools**, aggregate them locally, and see real cost trends in a beautiful dashboard. No cloud account, no API keys, no setup — just one command.
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 @@ Auto-collect token counts from **17 AI coding tools**, aggregate them locally, a
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
+ [![Author 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 # Open the dashboard
58
59
  tokentracker sync # Manual sync
59
60
  tokentracker status # Check hook status
61
+ tokentracker status --json # Machine-readable summary (pipe to jq, ingest from AI agents)
62
+ tokentracker status --light # Plain ASCII table (CI / SSH, no spinner)
60
63
  tokentracker doctor # Health check
61
64
  ```
62
65
 
@@ -79,7 +82,7 @@ Upgrade with `brew upgrade --cask mm7894215/tokentracker/tokentracker`. The tap
79
82
 
80
83
  ## ✨ Features
81
84
 
82
- - 🔌 **17 AI tools out of the box** — Claude Code, Codex CLI, Cursor, Gemini CLI, Antigravity, Kiro, OpenCode, OpenClaw, Every Code, Hermes Agent, GitHub Copilot, Kimi Code, CodeBuddy, Grok Build, oh-my-pi, Kilo CLI, Kilo Code
85
+ - 🔌 **22 AI tools out of the box** — Claude Code, Codex CLI, Cursor, Gemini CLI, Antigravity, 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, Zed Agent, Goose
83
86
  - 🏠 **100% local** — Token data never leaves your machine. No account, no API keys.
84
87
  - 🚀 **Zero config** — Hooks auto-install on first run. From zero to dashboard in 30 seconds.
85
88
  - 📊 **Beautiful dashboard** — Usage trends, cost breakdowns by model, GitHub-style activity heatmap, project attribution
@@ -162,11 +165,16 @@ Upgrade with `brew upgrade --cask mm7894215/tokentracker/tokentracker`. The tap
162
165
  | **Kilo CLI** (kilo.ai) | ✅ Auto | Passive SQLite reader (`~/.local/share/kilo/kilo.db`, OpenCode-fork schema) |
163
166
  | **Kilo Code** (VS Code extension) | ✅ Auto | Passive `ui_messages.json` reader (Cursor/Code/CodeBuddy/Windsurf globalStorage) |
164
167
  | **Antigravity** | ✅ Auto | Passive transcript reader (`~/.gemini/{antigravity,antigravity-ide,antigravity-cli}/brain/**/transcript.jsonl`) |
168
+ | **pi** (`@mariozechner/pi-coding-agent`) | ✅ Auto | Passive reader (`~/.pi/agent/sessions/**/*.jsonl`) |
169
+ | **Craft Agents** | ✅ Auto | Passive session reader (`~/.craft-agent` + workspace session logs) |
170
+ | **Roo Code** (VS Code extension) | ✅ Auto | Passive `ui_messages.json` reader (`rooveterinaryinc.roo-cline`) |
171
+ | **Zed Agent** | ✅ Auto | Passive SQLite reader (`threads.db`, hosted `zed.dev` models only) |
172
+ | **Goose** (Block) | ✅ Auto | Passive SQLite reader (`sessions.db`, cumulative deltas) |
165
173
 
166
174
  > **Do I need to install any plugin or hook manually?** No. `tokentracker` (or `tokentracker init`) handles everything on first run:
167
175
  > - **Hook-based** tools (Claude Code, Codex, Gemini, Every Code, **CodeBuddy**, **Grok Build**) — we write a SessionEnd hook or TOML notify entry into the tool's own config.
168
176
  > - **Plugin-based** tools (OpenCode, **OpenClaw**) — the plugin ships inside the npm package (`~/.tokentracker/app/openclaw-plugin/`). We link it via the tool's own CLI (`openclaw plugins install --link …` + `enable`). No download, no drag-and-drop.
169
- > - **Passive readers** (Cursor, Kiro, Hermes, Kimi Code, Copilot, **Grok Build**, **oh-my-pi**, **Kilo CLI**, **Kilo Code**, **Antigravity**) — nothing is installed into those tools. We only read files they already produce (SQLite DB, JSONL, OTEL export).
177
+ > - **Passive readers** (Cursor, Kiro, Hermes, Kimi Code, Copilot, **Grok Build**, **oh-my-pi**, **pi**, **Craft Agents**, **Kilo CLI**, **Kilo Code**, **Roo Code**, **Antigravity**, **Zed Agent**, **Goose**) — nothing is installed into those tools. We only read files they already produce (SQLite DB, JSONL, OTEL export, session logs).
170
178
  > - **Grok Build estimate** — current local telemetry exposes cumulative `updates.jsonl` `totalTokens`, but not a stable prompt/output/cache split; `signals.json` remains a fallback with `contextTokensUsed` snapshots. TokenTracker estimates Grok cost until per-call usage details are available.
171
179
  >
172
180
  > Run `tokentracker status` anytime to verify every integration's state. If something shows `skipped`, the `detail` column explains why (e.g. tool CLI not on `PATH`, config unreadable).
@@ -181,7 +189,7 @@ Missing your tool? [Open an issue](https://github.com/mm7894215/TokenTracker/iss
181
189
 
182
190
  | | **TokenTracker** | ccusage | Cursor stats |
183
191
  |--------------------------|:---:|:---:|:---:|
184
- | **AI tools supported** | **13** | 1 (Claude) | 1 (Cursor) |
192
+ | **AI tools supported** | **22** | 1 (Claude) | 1 (Cursor) |
185
193
  | **Local-first, no account** | ✅ | ✅ | ❌ |
186
194
  | **Native menu bar app** | ✅ | ❌ | ❌ |
187
195
  | **Desktop widgets** | ✅ 4 widgets | ❌ | ❌ |
@@ -193,7 +201,7 @@ Missing your tool? [Open an issue](https://github.com/mm7894215/TokenTracker/iss
193
201
 
194
202
  ```mermaid
195
203
  flowchart LR
196
- A["AI CLI Tools<br/>Claude · Codex · Cursor · Gemini · Kiro<br/>OpenCode · OpenClaw · Every Code · Hermes · Copilot · Kimi Code · CodeBuddy · Grok Build · oh-my-pi"]
204
+ A["AI CLI Tools<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 -->|hooks trigger| B[Token Tracker]
198
206
  B -->|parse logs<br/>30-min UTC buckets| C[(Local SQLite)]
199
207
  C --> D[Web Dashboard]
@@ -386,6 +394,37 @@ Once granted, the permission is remembered. Note that ad-hoc signed builds re-pr
386
394
 
387
395
  ---
388
396
 
397
+ ## 🪪 README Badges
398
+
399
+ Show off your token usage on your GitHub profile or project README.
400
+
401
+ To get `YOUR_USER_ID`:
402
+ 1. Run `tokentracker`, open the dashboard, and sign in to the leaderboard.
403
+ 2. Go to **Settings → Account**.
404
+ 3. Use the **User ID** shown there. On headless machines, `tokentracker device-login` also writes the same `user_id` to `~/.tokentracker/tracker/config.json`.
405
+
406
+ Then drop one of these in:
407
+
408
+ ```markdown
409
+ ![tokens](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=YOUR_USER_ID&metric=tokens)
410
+ ![cost](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=YOUR_USER_ID&metric=cost)
411
+ ![rank](https://srctyff5.us-east.insforge.app/functions/tokentracker-badge-svg?user_id=YOUR_USER_ID&metric=rank)
412
+ ```
413
+
414
+ Renders shields.io-compatible badges with your current totals (60s cache):
415
+
416
+ | Param | Values | Default |
417
+ |---|---|---|
418
+ | `metric` | `tokens` / `cost` / `rank` | `tokens` |
419
+ | `period` | `week` / `month` / `total` | `total` |
420
+ | `style` | `flat` / `flat-square` | `flat` |
421
+ | `label` | any short string | metric name |
422
+ | `color` | hex, e.g. `ff6b35` | brand green |
423
+
424
+ > **Privacy**: badges only resolve for profiles where leaderboard sharing is **on** (`Settings → Account → Public profile`). Private profiles get a "private" placeholder.
425
+
426
+ ---
427
+
389
428
  ## ⭐ Star History
390
429
 
391
430
  <a href="https://star-history.com/#mm7894215/TokenTracker&Date">