@juliantanx/aiusage 1.4.0 → 1.5.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 (109) hide show
  1. package/README.md +152 -27
  2. package/dist/index.js +3277 -907
  3. package/dist/web/_app/immutable/assets/0.BYjLgame.css +1 -0
  4. package/dist/web/_app/immutable/assets/11.4MyEKiO6.css +1 -0
  5. package/dist/web/_app/immutable/assets/12.nNHFRI35.css +1 -0
  6. package/dist/web/_app/immutable/assets/13.CAQKz1hf.css +1 -0
  7. package/dist/web/_app/immutable/assets/14.Bcofmxqa.css +1 -0
  8. package/dist/web/_app/immutable/assets/15.F0aA4smG.css +1 -0
  9. package/dist/web/_app/immutable/assets/2.GIkI4O03.css +1 -0
  10. package/dist/web/_app/immutable/assets/3.H3-dDI9U.css +1 -0
  11. package/dist/web/_app/immutable/assets/4.BOWlKC54.css +1 -0
  12. package/dist/web/_app/immutable/assets/5.CLn2x9cs.css +1 -0
  13. package/dist/web/_app/immutable/assets/6.C1lxHTyi.css +1 -0
  14. package/dist/web/_app/immutable/assets/7.oxd6PqWk.css +1 -0
  15. package/dist/web/_app/immutable/assets/8.9jvt5Dym.css +1 -0
  16. package/dist/web/_app/immutable/assets/9.DsmA__AV.css +1 -0
  17. package/dist/web/_app/immutable/assets/ToolSelector.BewzNVhC.css +1 -0
  18. package/dist/web/_app/immutable/assets/ToolSelector.BqfI2BMz.css +1 -0
  19. package/dist/web/_app/immutable/assets/_layout.D8R7GvV-.css +1 -0
  20. package/dist/web/_app/immutable/assets/_page.4MyEKiO6.css +1 -0
  21. package/dist/web/_app/immutable/assets/_page.9jvt5Dym.css +1 -0
  22. package/dist/web/_app/immutable/assets/_page.BOWlKC54.css +1 -0
  23. package/dist/web/_app/immutable/assets/_page.Bcofmxqa.css +1 -0
  24. package/dist/web/_app/immutable/assets/_page.C1lxHTyi.css +1 -0
  25. package/dist/web/_app/immutable/assets/_page.CFfU6gQq.css +1 -0
  26. package/dist/web/_app/immutable/assets/_page.CLn2x9cs.css +1 -0
  27. package/dist/web/_app/immutable/assets/_page.CMG6gS2t.css +1 -0
  28. package/dist/web/_app/immutable/assets/_page.DXX8tyXM.css +1 -0
  29. package/dist/web/_app/immutable/assets/_page.F0aA4smG.css +1 -0
  30. package/dist/web/_app/immutable/assets/_page.H3-dDI9U.css +1 -0
  31. package/dist/web/_app/immutable/assets/_page.ZSDsIDry.css +1 -0
  32. package/dist/web/_app/immutable/assets/_page.oxd6PqWk.css +1 -0
  33. package/dist/web/_app/immutable/chunks/ToolSelector.CofvKVw2.js +2 -0
  34. package/dist/web/_app/immutable/chunks/api.Mv_KcGhp.js +1 -0
  35. package/dist/web/_app/immutable/chunks/{entry.BDsSAg1a.js → entry.PDoHFbXz.js} +1 -1
  36. package/dist/web/_app/immutable/chunks/i18n.CwV3KceS.js +1 -0
  37. package/dist/web/_app/immutable/chunks/index.66Vu9Sio.js +1 -0
  38. package/dist/web/_app/immutable/chunks/{index.CNvYz5e_.js → index.m3oCcA6N.js} +1 -1
  39. package/dist/web/_app/immutable/chunks/scheduler.DsWd5xup.js +1 -0
  40. package/dist/web/_app/immutable/chunks/{stores.mBipGgjw.js → stores.BSI_cVy6.js} +1 -1
  41. package/dist/web/_app/immutable/chunks/{stores.BYIFXXy3.js → stores.Botc0ioY.js} +1 -1
  42. package/dist/web/_app/immutable/entry/app.CoPtpbXI.js +2 -0
  43. package/dist/web/_app/immutable/entry/start.CaOJNprV.js +1 -0
  44. package/dist/web/_app/immutable/nodes/0.CZMa2uzk.js +142 -0
  45. package/dist/web/_app/immutable/nodes/{1.C4vnvuzM.js → 1.DJI2NNga.js} +1 -1
  46. package/dist/web/_app/immutable/nodes/10.DTaETIM6.js +1 -0
  47. package/dist/web/_app/immutable/nodes/11.CScZqjVc.js +1 -0
  48. package/dist/web/_app/immutable/nodes/12.DeLNKhlw.js +1 -0
  49. package/dist/web/_app/immutable/nodes/13.BFaBQy6e.js +1 -0
  50. package/dist/web/_app/immutable/nodes/14.BgJEC28r.js +1 -0
  51. package/dist/web/_app/immutable/nodes/15.DjuCO6OE.js +1 -0
  52. package/dist/web/_app/immutable/nodes/2.CoxR54dV.js +3 -0
  53. package/dist/web/_app/immutable/nodes/3.Bua2oewW.js +1 -0
  54. package/dist/web/_app/immutable/nodes/4.DJwmYYKI.js +1 -0
  55. package/dist/web/_app/immutable/nodes/5.CXmtjVJL.js +1 -0
  56. package/dist/web/_app/immutable/nodes/6.kpxBlrHt.js +1 -0
  57. package/dist/web/_app/immutable/nodes/7.LSfdx4vz.js +9 -0
  58. package/dist/web/_app/immutable/nodes/8.ByAI01dT.js +1 -0
  59. package/dist/web/_app/immutable/nodes/9.Ubt4Bfxd.js +1 -0
  60. package/dist/web/_app/version.json +1 -1
  61. package/dist/web/index.html +10 -10
  62. package/dist/web/wechat-support-qr.jpg +0 -0
  63. package/package.json +3 -4
  64. package/dist/web/_app/immutable/assets/0.C3RIkHY2.css +0 -1
  65. package/dist/web/_app/immutable/assets/10.C9BKssg5.css +0 -1
  66. package/dist/web/_app/immutable/assets/11.D51Gzh6j.css +0 -1
  67. package/dist/web/_app/immutable/assets/12.MAt3PLLc.css +0 -1
  68. package/dist/web/_app/immutable/assets/13.CYY7rvzI.css +0 -1
  69. package/dist/web/_app/immutable/assets/2.CLCMeZwn.css +0 -1
  70. package/dist/web/_app/immutable/assets/3.BB9nMGBG.css +0 -1
  71. package/dist/web/_app/immutable/assets/4.CUknm1Jh.css +0 -1
  72. package/dist/web/_app/immutable/assets/5.BvcBvBEs.css +0 -1
  73. package/dist/web/_app/immutable/assets/6.BETPk561.css +0 -1
  74. package/dist/web/_app/immutable/assets/7.BeGOLIpG.css +0 -1
  75. package/dist/web/_app/immutable/assets/8.yw0F4oCm.css +0 -1
  76. package/dist/web/_app/immutable/assets/ToolSelector.BRqFUj1Q.css +0 -1
  77. package/dist/web/_app/immutable/assets/ToolSelector.Bqx3ytrl.css +0 -1
  78. package/dist/web/_app/immutable/assets/_layout.BqRkZ3UP.css +0 -1
  79. package/dist/web/_app/immutable/assets/_page.BB9nMGBG.css +0 -1
  80. package/dist/web/_app/immutable/assets/_page.BETPk561.css +0 -1
  81. package/dist/web/_app/immutable/assets/_page.BLq-3aJQ.css +0 -1
  82. package/dist/web/_app/immutable/assets/_page.BeGOLIpG.css +0 -1
  83. package/dist/web/_app/immutable/assets/_page.BvEGYIGb.css +0 -1
  84. package/dist/web/_app/immutable/assets/_page.BvcBvBEs.css +0 -1
  85. package/dist/web/_app/immutable/assets/_page.C9BKssg5.css +0 -1
  86. package/dist/web/_app/immutable/assets/_page.CQBzp_Oe.css +0 -1
  87. package/dist/web/_app/immutable/assets/_page.CUknm1Jh.css +0 -1
  88. package/dist/web/_app/immutable/assets/_page.CYY7rvzI.css +0 -1
  89. package/dist/web/_app/immutable/assets/_page.MAt3PLLc.css +0 -1
  90. package/dist/web/_app/immutable/chunks/ToolSelector.CCE1hHr0.js +0 -2
  91. package/dist/web/_app/immutable/chunks/api.CTjBjPiU.js +0 -1
  92. package/dist/web/_app/immutable/chunks/index.BXQEgizy.js +0 -1
  93. package/dist/web/_app/immutable/chunks/scheduler.DeaWU70L.js +0 -1
  94. package/dist/web/_app/immutable/entry/app.CCbAFnKJ.js +0 -2
  95. package/dist/web/_app/immutable/entry/start.BDGHATsW.js +0 -1
  96. package/dist/web/_app/immutable/nodes/0.vOgxhWzP.js +0 -1
  97. package/dist/web/_app/immutable/nodes/10.BejenNwL.js +0 -1
  98. package/dist/web/_app/immutable/nodes/11.Dx1YcRkP.js +0 -1
  99. package/dist/web/_app/immutable/nodes/12.C9dQuDmx.js +0 -1
  100. package/dist/web/_app/immutable/nodes/13.VP7fU2h5.js +0 -1
  101. package/dist/web/_app/immutable/nodes/2.DniTC2eC.js +0 -3
  102. package/dist/web/_app/immutable/nodes/3.BY0PLmXV.js +0 -1
  103. package/dist/web/_app/immutable/nodes/4.BUb_3Atw.js +0 -1
  104. package/dist/web/_app/immutable/nodes/5.DJ0O-s5e.js +0 -1
  105. package/dist/web/_app/immutable/nodes/6.nquf-x9G.js +0 -9
  106. package/dist/web/_app/immutable/nodes/7.BDm05vE_.js +0 -1
  107. package/dist/web/_app/immutable/nodes/8.mB-sVW7r.js +0 -1
  108. package/dist/web/_app/immutable/nodes/9.8PYvwJik.js +0 -1
  109. /package/dist/web/_app/immutable/assets/{9.DpWloLoX.css → 10.DpWloLoX.css} +0 -0
package/README.md CHANGED
@@ -1,30 +1,86 @@
1
- # aiusage — AI Coding Assistant Usage Tracker
1
+ <h1 align="center">
2
+ <img src="https://cdn.jsdelivr.net/gh/juliantanx/aiusage@main/packages/site/static/logo-icon.svg" alt="AIUsage logo" width="42" align="absmiddle" />
3
+ AIUsage
4
+ </h1>
2
5
 
3
- [![npm version](https://img.shields.io/npm/v/@juliantanx/aiusage)](https://www.npmjs.com/package/@juliantanx/aiusage)
4
- [![CI](https://github.com/juliantanx/aiusage/actions/workflows/test.yml/badge.svg)](https://github.com/juliantanx/aiusage/actions/workflows/test.yml)
5
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
+ <p align="center">
7
+ Local-first usage tracker for AI coding assistants.
8
+ </p>
9
+
10
+ <p align="center">
11
+ <a href="https://www.npmjs.com/package/@juliantanx/aiusage"><img src="https://img.shields.io/npm/v/@juliantanx/aiusage" alt="npm version" /></a>
12
+ <a href="https://www.npmjs.com/package/@juliantanx/aiusage"><img src="https://img.shields.io/npm/dm/@juliantanx/aiusage" alt="npm downloads" /></a>
13
+ <a href="https://github.com/juliantanx/aiusage/actions/workflows/test.yml"><img src="https://github.com/juliantanx/aiusage/actions/workflows/test.yml/badge.svg" alt="CI" /></a>
14
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT" /></a>
15
+ </p>
6
16
 
7
- **[aiusage.jtanx.com](https://aiusage.jtanx.com)** · English | [中文](https://github.com/juliantanx/aiusage/blob/main/README_zh.md)
17
+ <p align="center">
18
+ <strong><a href="https://aiusage.jtanx.com">Website</a></strong> ·
19
+ <strong><a href="https://aiusage.jtanx.com/docs">Docs</a></strong> ·
20
+ <strong><a href="https://aiusage.jtanx.com/leaderboard">Leaderboard</a></strong> ·
21
+ English | <a href="https://github.com/juliantanx/aiusage/blob/main/README_zh.md">中文</a>
22
+ </p>
8
23
 
9
- Track token usage, cost, and sessions across **22 AI coding tools** in one local dashboard. No accounts. No telemetry. No cloud required.
24
+ Track tokens, cost, sessions, models, projects, tool calls, and quota pressure across **22 AI coding tools** in one local dashboard. Local use needs no account, sends no telemetry, and does not require cloud sync.
10
25
 
11
26
  <p align="center">
12
- <img src="https://raw.githubusercontent.com/juliantanx/aiusage/a527444cf87a9c1e92f1440282ed4e94f744b910/packages/site/static/screenshots/dashboard-home.png" alt="aiusage dashboard home" width="32%" />
13
- <img src="https://raw.githubusercontent.com/juliantanx/aiusage/a527444cf87a9c1e92f1440282ed4e94f744b910/packages/site/static/screenshots/overview.png" alt="aiusage overview dashboard" width="32%" />
14
- <img src="https://raw.githubusercontent.com/juliantanx/aiusage/a527444cf87a9c1e92f1440282ed4e94f744b910/packages/site/static/screenshots/sessions.png" alt="aiusage sessions dashboard" width="32%" />
27
+ <img src="https://cdn.jsdelivr.net/gh/juliantanx/aiusage@b179e5a37c92e7040a07b84a7b2048821d120aed/packages/site/static/screenshots/aiusage-demo.gif" alt="AIUsage dashboard demo" width="92%" />
15
28
  </p>
16
29
 
30
+ ## Highlights
31
+
32
+ - **One local dashboard** for tokens, cost, sessions, models, projects, tool calls, and quotas.
33
+ - **Broad parser support** for Claude Code, Codex, OpenCode, Cursor, Copilot, Gemini CLI, and more.
34
+ - **Optional sync** through official cloud sync, GitHub, S3, R2, or MinIO.
35
+ - **Optional public leaderboard** with signed aggregate uploads only.
36
+ - **Desktop widget** for a tray/menu-bar glance at recent usage.
37
+ - **Private by default**: local parsing and local dashboards do not upload your prompts, completions, source code, or file paths.
38
+
17
39
  ## Quick Start
18
40
 
19
- **Prerequisites:** Node.js 20+
41
+ **Requirements:** Node.js 20+ on macOS, Linux, or Windows.
20
42
 
21
43
  ```bash
22
44
  npm install -g @juliantanx/aiusage
23
- aiusage parse
24
45
  aiusage serve
25
46
  ```
26
47
 
27
- Open `http://localhost:3847` to explore the dashboard.
48
+ Open `http://localhost:3847` to use the dashboard. `serve` parses once on startup and then serves the local web UI.
49
+
50
+ Prefer pnpm:
51
+
52
+ ```bash
53
+ pnpm add -g @juliantanx/aiusage
54
+ ```
55
+
56
+ Use Docker:
57
+
58
+ ```bash
59
+ docker run -d \
60
+ -p 3847:3847 \
61
+ -v ~/.aiusage:/root/.aiusage \
62
+ juliantanx/aiusage
63
+ ```
64
+
65
+ Docker persists AIUsage data with the `~/.aiusage` mount. To parse AI tool logs from the host, also mount each source log directory and configure the matching `AIUSAGE_*_PATH` variable. See the [Docker docs](https://aiusage.jtanx.com/docs#docker).
66
+
67
+ ## Common Commands
68
+
69
+ | Command | What it does |
70
+ |---|---|
71
+ | `aiusage` / `aiusage summary` | Print a terminal summary |
72
+ | `aiusage parse` | Parse supported local AI tool logs |
73
+ | `aiusage serve` | Start the local dashboard on port `3847` |
74
+ | `aiusage status` | Show data source and local database status |
75
+ | `aiusage export --range month` | Export usage data |
76
+ | `aiusage init` | Configure optional sync |
77
+ | `aiusage sync` | Sync with the configured backend |
78
+ | `aiusage widget` | Launch the desktop tray widget |
79
+ | `aiusage leaderboard` | View public leaderboard rankings |
80
+ | `aiusage login` / `aiusage upload` | Authorize this device and upload aggregate leaderboard data |
81
+ | `aiusage pm2-start` | Run dashboard and widget as PM2 background services |
82
+
83
+ Full CLI reference: [aiusage.jtanx.com/docs#cli-reference](https://aiusage.jtanx.com/docs#cli-reference).
28
84
 
29
85
  ## Supported Tools
30
86
 
@@ -36,36 +92,105 @@ Open `http://localhost:3847` to explore the dashboard.
36
92
  | `Roo Code` | `Zed` | `Goose` | `oh-my-pi` | `pi` |
37
93
  | `Craft` | `Droid` | | | |
38
94
 
39
- ## Why aiusage
95
+ Default paths and environment variable overrides are documented in [Data Sources](https://aiusage.jtanx.com/docs#settings-sources) and [Source Env Vars](https://aiusage.jtanx.com/docs#settings-env).
96
+
97
+ ## Dashboard Password
98
+
99
+ The local dashboard is open on localhost by default. Set `AIUSAGE_DASHBOARD_PASSWORD` to protect dashboard APIs.
100
+
101
+ | Shell | Command |
102
+ |---|---|
103
+ | macOS / Linux | `AIUSAGE_DASHBOARD_PASSWORD="change-me" aiusage serve` |
104
+ | Windows PowerShell | `$env:AIUSAGE_DASHBOARD_PASSWORD="change-me"; aiusage serve` |
105
+ | Windows CMD | `set AIUSAGE_DASHBOARD_PASSWORD=change-me && aiusage serve` |
40
106
 
41
- Your AI coding tools each log usage separately different formats, different machines, no shared view. aiusage pulls it all into one local dashboard:
107
+ For PM2 background services, pass the same variable when starting `aiusage pm2-start`, and use `pm2 restart aiusage-server --update-env` after changing it. Details: [Dashboard Password](https://aiusage.jtanx.com/docs#dashboard-password) and [PM2](https://aiusage.jtanx.com/docs#pm2).
42
108
 
43
- - **One dashboard** for tokens, cost, model mix, and tool-call activity
44
- - **Multi-machine sync** via GitHub, S3, or R2 — entirely optional
45
- - **Your data stays local** by default
109
+ ## Privacy and Data
110
+
111
+ AIUsage is designed to be local-first.
112
+
113
+ - Local parsing reads tool logs and stores parsed usage in `~/.aiusage/cache.db`.
114
+ - Local dashboard mode does not require an account and does not send telemetry.
115
+ - Optional sync is user-configured and can use official cloud sync, GitHub, S3, R2, or MinIO.
116
+ - Optional leaderboard uploads contain aggregate token totals for ranking periods. They do not include prompts, completions, source code, file paths, or local cost estimates.
117
+ - Cost is an estimate based on pricing metadata and can change when pricing is refreshed or recalculated.
118
+ - Historical totals depend on whether each AI tool still retains its source logs or local databases.
119
+
120
+ Security issues should be reported privately when possible. See [SECURITY.md](./SECURITY.md).
121
+
122
+ ## Sync and Leaderboard
123
+
124
+ Sync and leaderboard are independent optional features.
125
+
126
+ - **Sync** keeps your own devices aligned through official cloud sync, GitHub, S3, R2, or MinIO. Configure it with `aiusage init`, then run `aiusage sync`.
127
+ - **Leaderboard** is public ranking for users who explicitly upload aggregate totals. Authorize a device with `aiusage login`, then run `aiusage upload`.
128
+ - Anonymous mode is available in [site settings](https://aiusage.jtanx.com/settings) for leaderboard participation.
129
+
130
+ The official site handles accounts, OAuth login, profile settings, authorized devices, upload review status, and admin moderation. The CLI handles local parsing, local dashboards, sync, terminal summaries, and signed uploads.
131
+
132
+ ## Desktop Widget
133
+
134
+ Install the optional tray/menu-bar widget:
135
+
136
+ ```bash
137
+ npm install -g @juliantanx/aiusage-widget
138
+ aiusage-widget
139
+ ```
140
+
141
+ The widget reads the same local AIUsage database and can open the full dashboard from its tray menu. See [Widget docs](https://aiusage.jtanx.com/docs#widget).
142
+
143
+ ## Development
144
+
145
+ ```bash
146
+ git clone https://github.com/juliantanx/aiusage.git
147
+ cd aiusage
148
+ pnpm install
149
+ pnpm build
150
+ pnpm test
151
+ pnpm dev
152
+ ```
153
+
154
+ Project layout:
155
+
156
+ | Path | Purpose |
157
+ |---|---|
158
+ | `packages/core` | Shared types, schema, pricing, and utilities |
159
+ | `packages/cli` | Published CLI, parsers, local API server, sync, PM2 helpers |
160
+ | `packages/web` | Local dashboard UI bundled into the CLI |
161
+ | `packages/widget` | Electron tray/menu-bar widget |
162
+ | `packages/site` | Official website, docs, accounts, uploads, leaderboard |
163
+
164
+ Contributions are welcome. Read [CONTRIBUTING.md](./CONTRIBUTING.md), use the issue templates, and run `pnpm test` before opening a PR.
46
165
 
47
166
  ## Documentation
48
167
 
49
- Full documentation — CLI reference, Docker deployment, sync setup, desktop widget, and more — is available on the **[Docs page](https://aiusage.jtanx.com/docs)**.
168
+ - [Full docs](https://aiusage.jtanx.com/docs)
169
+ - [CLI reference](https://aiusage.jtanx.com/docs#cli-reference)
170
+ - [Docker deployment](https://aiusage.jtanx.com/docs#docker)
171
+ - [Sync setup](https://aiusage.jtanx.com/docs#sync)
172
+ - [Widget](https://aiusage.jtanx.com/docs#widget)
173
+ - [Changelog](./CHANGELOG.md)
174
+ - [Security policy](./SECURITY.md)
175
+
176
+ ## Community
50
177
 
51
- ## Friends
178
+ - Bugs: [GitHub Issues](https://github.com/juliantanx/aiusage/issues/new?template=bug_report.md)
179
+ - Feature requests: [GitHub Issues](https://github.com/juliantanx/aiusage/issues/new?template=feature_request.md)
180
+ - Questions: [GitHub Discussions](https://github.com/juliantanx/aiusage/discussions)
52
181
 
53
- [**linux.do**](https://linux.do/) Thanks to the linux.do community for their support and inspiration during the development of this project.
182
+ [**linux.do**](https://linux.do/) - thanks to the linux.do community for support and inspiration during the development of this project.
54
183
 
55
184
  ## Star History
56
185
 
57
186
  <a href="https://www.star-history.com/?repos=juliantanx%2Faiusage&type=date&logscale=&legend=top-left">
58
187
  <picture>
59
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=juliantanx/aiusage&type=date&theme=dark&legend=top-left&t=20260603" />
60
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=juliantanx/aiusage&type=date&legend=top-left&t=20260603" />
61
- <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=juliantanx/aiusage&type=date&legend=top-left&t=20260603" />
188
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=juliantanx/aiusage&type=date&theme=dark&logscale&legend=top-left" />
189
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=juliantanx/aiusage&type=date&logscale&legend=top-left" />
190
+ <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=juliantanx/aiusage&type=date&logscale&legend=top-left" />
62
191
  </picture>
63
192
  </a>
64
193
 
65
- ## Contributing
66
-
67
- Contributions are welcome! See [CONTRIBUTING.md](./CONTRIBUTING.md) for how to get started.
68
-
69
194
  ## License
70
195
 
71
196
  [MIT](./LICENSE)