@ipv9/tokentracker-cli 0.39.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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +464 -0
  3. package/README.ko.md +464 -0
  4. package/README.md +476 -0
  5. package/README.zh-CN.md +469 -0
  6. package/bin/tracker.js +52 -0
  7. package/dashboard/dist/app-icon.png +0 -0
  8. package/dashboard/dist/apple-touch-icon.png +0 -0
  9. package/dashboard/dist/assets/ActivityHeatmap-BxBGHY1z.js +42 -0
  10. package/dashboard/dist/assets/Card-GROxUc_6.js +1 -0
  11. package/dashboard/dist/assets/DashboardPage-BZ5VFoBk.js +19 -0
  12. package/dashboard/dist/assets/DevicePage-CQts7ivB.js +1 -0
  13. package/dashboard/dist/assets/DialogTitle-DqFsk26U.js +1 -0
  14. package/dashboard/dist/assets/FadeIn-HBBXW_3q.js +1 -0
  15. package/dashboard/dist/assets/HeaderGithubStar-COD2HfaF.js +1 -0
  16. package/dashboard/dist/assets/IpCheckPage-Cn0l8-BQ.js +15 -0
  17. package/dashboard/dist/assets/LandingPage-CmV1BMU4.js +4356 -0
  18. package/dashboard/dist/assets/LeaderboardAvatar-CiIpWZwb.js +1 -0
  19. package/dashboard/dist/assets/LeaderboardPage-BU0mlR3g.js +6 -0
  20. package/dashboard/dist/assets/LeaderboardProfileModal-C49_3Xm9.js +72 -0
  21. package/dashboard/dist/assets/LeaderboardProfilePage-Bh1n0BAM.js +1 -0
  22. package/dashboard/dist/assets/LimitsPage-fZAmwLWT.js +2 -0
  23. package/dashboard/dist/assets/LocalOnlyNotice-D3rQdA-P.js +1 -0
  24. package/dashboard/dist/assets/LoginPage-enO4XP-c.js +1 -0
  25. package/dashboard/dist/assets/PopoverPopup-pitJEpN1.js +1 -0
  26. package/dashboard/dist/assets/Select-tT9x4ntD.js +1 -0
  27. package/dashboard/dist/assets/SelectItemText-C7F7eIm0.js +1 -0
  28. package/dashboard/dist/assets/SettingsPage-pDasZNU2.js +1 -0
  29. package/dashboard/dist/assets/SkillsPage-DEu7FY-2.js +1 -0
  30. package/dashboard/dist/assets/WidgetsPage-DGcO7rbp.js +1 -0
  31. package/dashboard/dist/assets/WrappedPage-D_1ID213.js +1 -0
  32. package/dashboard/dist/assets/agent-logos-DXQVg1xy.js +1 -0
  33. package/dashboard/dist/assets/arrow-up-right-DNLo92Ba.js +1 -0
  34. package/dashboard/dist/assets/download-DbBBBpJF.js +1 -0
  35. package/dashboard/dist/assets/geist-mono-cyrillic-400-normal-BPBWmzPh.woff +0 -0
  36. package/dashboard/dist/assets/geist-mono-cyrillic-400-normal-Ce5q_31Z.woff2 +0 -0
  37. package/dashboard/dist/assets/geist-mono-cyrillic-500-normal-CJBLNVQT.woff2 +0 -0
  38. package/dashboard/dist/assets/geist-mono-cyrillic-500-normal-mNhfPmgl.woff +0 -0
  39. package/dashboard/dist/assets/geist-mono-cyrillic-700-normal-DH5Q319x.woff +0 -0
  40. package/dashboard/dist/assets/geist-mono-cyrillic-700-normal-VCNRadI3.woff2 +0 -0
  41. package/dashboard/dist/assets/geist-mono-cyrillic-900-normal-BKC3PZkM.woff +0 -0
  42. package/dashboard/dist/assets/geist-mono-cyrillic-900-normal-DdrQ8KBw.woff2 +0 -0
  43. package/dashboard/dist/assets/geist-mono-latin-400-normal-CoULgQGM.woff +0 -0
  44. package/dashboard/dist/assets/geist-mono-latin-400-normal-LC9RFr9I.woff2 +0 -0
  45. package/dashboard/dist/assets/geist-mono-latin-500-normal-D3o2eNa9.woff2 +0 -0
  46. package/dashboard/dist/assets/geist-mono-latin-500-normal-DOxI7kZ4.woff +0 -0
  47. package/dashboard/dist/assets/geist-mono-latin-700-normal-D6izGJRP.woff2 +0 -0
  48. package/dashboard/dist/assets/geist-mono-latin-700-normal-QGw08Lff.woff +0 -0
  49. package/dashboard/dist/assets/geist-mono-latin-900-normal-CmoKXrdK.woff +0 -0
  50. package/dashboard/dist/assets/geist-mono-latin-900-normal-Cu5MFKsu.woff2 +0 -0
  51. package/dashboard/dist/assets/geist-mono-latin-ext-400-normal-Cgks_Qgx.woff2 +0 -0
  52. package/dashboard/dist/assets/geist-mono-latin-ext-400-normal-CxNRRMGd.woff +0 -0
  53. package/dashboard/dist/assets/geist-mono-latin-ext-500-normal-CQcGuCNt.woff2 +0 -0
  54. package/dashboard/dist/assets/geist-mono-latin-ext-500-normal-diTenJ8L.woff +0 -0
  55. package/dashboard/dist/assets/geist-mono-latin-ext-700-normal-BX9f1BHp.woff +0 -0
  56. package/dashboard/dist/assets/geist-mono-latin-ext-700-normal-YOllDaLV.woff2 +0 -0
  57. package/dashboard/dist/assets/geist-mono-latin-ext-900-normal-Br6WNUGb.woff +0 -0
  58. package/dashboard/dist/assets/geist-mono-latin-ext-900-normal-CrmBTzU2.woff2 +0 -0
  59. package/dashboard/dist/assets/index-BeoRn2gJ.js +2 -0
  60. package/dashboard/dist/assets/info-Bh5qTz6k.js +1 -0
  61. package/dashboard/dist/assets/main-BIY3Nj6I.js +969 -0
  62. package/dashboard/dist/assets/main-G_F9Iu_x.css +1 -0
  63. package/dashboard/dist/assets/use-limits-display-prefs-B4iJ-bBc.js +1 -0
  64. package/dashboard/dist/assets/use-native-settings-DHjPFDv8.js +1 -0
  65. package/dashboard/dist/assets/use-usage-limits-odqe9OY7.js +1 -0
  66. package/dashboard/dist/assets/useCurrency-BsSZiZMP.js +1 -0
  67. package/dashboard/dist/assets/useOpenInteractionType-BQhgq4rv.js +12 -0
  68. package/dashboard/dist/brand-logos/antigravity.svg +1 -0
  69. package/dashboard/dist/brand-logos/claude-code.svg +1 -0
  70. package/dashboard/dist/brand-logos/codebuddy.svg +1 -0
  71. package/dashboard/dist/brand-logos/codex.svg +15 -0
  72. package/dashboard/dist/brand-logos/copilot.svg +1 -0
  73. package/dashboard/dist/brand-logos/cursor.svg +1 -0
  74. package/dashboard/dist/brand-logos/gemini.svg +1 -0
  75. package/dashboard/dist/brand-logos/grok.svg +1 -0
  76. package/dashboard/dist/brand-logos/hermes.svg +1 -0
  77. package/dashboard/dist/brand-logos/kilo.svg +4 -0
  78. package/dashboard/dist/brand-logos/kimi.svg +1 -0
  79. package/dashboard/dist/brand-logos/kiro.svg +1 -0
  80. package/dashboard/dist/brand-logos/openclaw.svg +22 -0
  81. package/dashboard/dist/brand-logos/opencode.svg +3 -0
  82. package/dashboard/dist/clawd/happy.svg +161 -0
  83. package/dashboard/dist/clawd/idle/collapse.svg +101 -0
  84. package/dashboard/dist/clawd/idle/doze.svg +72 -0
  85. package/dashboard/dist/clawd/idle/follow.svg +64 -0
  86. package/dashboard/dist/clawd/idle/living.svg +196 -0
  87. package/dashboard/dist/clawd/idle/look.svg +115 -0
  88. package/dashboard/dist/clawd/idle/yawn.svg +158 -0
  89. package/dashboard/dist/clawd/mini/alert.svg +129 -0
  90. package/dashboard/dist/clawd/mini/crabwalk.svg +76 -0
  91. package/dashboard/dist/clawd/mini/enter-sleep.svg +65 -0
  92. package/dashboard/dist/clawd/mini/enter.svg +115 -0
  93. package/dashboard/dist/clawd/mini/happy.svg +124 -0
  94. package/dashboard/dist/clawd/mini/idle-tight.svg +15 -0
  95. package/dashboard/dist/clawd/mini/idle.svg +83 -0
  96. package/dashboard/dist/clawd/mini/peek.svg +82 -0
  97. package/dashboard/dist/clawd/mini/sleep.svg +112 -0
  98. package/dashboard/dist/clawd/react/double.svg +108 -0
  99. package/dashboard/dist/clawd/react/drag.svg +102 -0
  100. package/dashboard/dist/clawd/react/left.svg +102 -0
  101. package/dashboard/dist/clawd/react/right.svg +102 -0
  102. package/dashboard/dist/clawd/sleep/collapse-sleep.svg +247 -0
  103. package/dashboard/dist/clawd/sleep/sleeping.svg +118 -0
  104. package/dashboard/dist/clawd/sleep/wake.svg +277 -0
  105. package/dashboard/dist/clawd/static-base.svg +21 -0
  106. package/dashboard/dist/clawd/status/disconnected.svg +136 -0
  107. package/dashboard/dist/clawd/status/error.svg +94 -0
  108. package/dashboard/dist/clawd/status/notification.svg +134 -0
  109. package/dashboard/dist/clawd/working/building.svg +231 -0
  110. package/dashboard/dist/clawd/working/carrying.svg +107 -0
  111. package/dashboard/dist/clawd/working/conducting.svg +118 -0
  112. package/dashboard/dist/clawd/working/confused.svg +113 -0
  113. package/dashboard/dist/clawd/working/debugger.svg +91 -0
  114. package/dashboard/dist/clawd/working/juggling.svg +82 -0
  115. package/dashboard/dist/clawd/working/overheated.svg +75 -0
  116. package/dashboard/dist/clawd/working/pushing.svg +125 -0
  117. package/dashboard/dist/clawd/working/sweeping.svg +79 -0
  118. package/dashboard/dist/clawd/working/thinking.svg +119 -0
  119. package/dashboard/dist/clawd/working/typing.svg +153 -0
  120. package/dashboard/dist/clawd/working/ultrathink.svg +166 -0
  121. package/dashboard/dist/clawd/working/wizard.svg +98 -0
  122. package/dashboard/dist/dashboard-dark.png +0 -0
  123. package/dashboard/dist/favicon-16.png +0 -0
  124. package/dashboard/dist/favicon-32.png +0 -0
  125. package/dashboard/dist/favicon.ico +0 -0
  126. package/dashboard/dist/feed.xml +34 -0
  127. package/dashboard/dist/icon-192.png +0 -0
  128. package/dashboard/dist/icon-512.png +0 -0
  129. package/dashboard/dist/index.html +355 -0
  130. package/dashboard/dist/llms.txt +53 -0
  131. package/dashboard/dist/neon_bg.png +0 -0
  132. package/dashboard/dist/robots.txt +7 -0
  133. package/dashboard/dist/share.html +140 -0
  134. package/dashboard/dist/sitemap.xml +27 -0
  135. package/dashboard/dist/widgets-overview.png +0 -0
  136. package/package.json +78 -0
  137. package/scripts/install-local-service.sh +140 -0
  138. package/scripts/uninstall-local-service.sh +21 -0
  139. package/src/cli.js +95 -0
  140. package/src/commands/device-login.js +161 -0
  141. package/src/commands/diagnostics.js +38 -0
  142. package/src/commands/doctor.js +96 -0
  143. package/src/commands/init.js +1195 -0
  144. package/src/commands/serve.js +351 -0
  145. package/src/commands/status.js +609 -0
  146. package/src/commands/sync.js +2285 -0
  147. package/src/commands/uninstall.js +189 -0
  148. package/src/commands/wrapped.js +150 -0
  149. package/src/lib/antigravity-paths.js +48 -0
  150. package/src/lib/browser-auth.js +281 -0
  151. package/src/lib/categorizer-utils.js +232 -0
  152. package/src/lib/claude-categorizer.js +1319 -0
  153. package/src/lib/claude-config.js +204 -0
  154. package/src/lib/cli-ui.js +179 -0
  155. package/src/lib/codex-config.js +350 -0
  156. package/src/lib/codex-context-breakdown.js +400 -0
  157. package/src/lib/codex-rollout-parser.js +623 -0
  158. package/src/lib/codex-token-refresh.js +112 -0
  159. package/src/lib/cursor-config.js +425 -0
  160. package/src/lib/debug-flags.js +7 -0
  161. package/src/lib/diagnostics.js +272 -0
  162. package/src/lib/doctor.js +338 -0
  163. package/src/lib/fs.js +91 -0
  164. package/src/lib/gemini-config.js +288 -0
  165. package/src/lib/grok-hook.js +351 -0
  166. package/src/lib/init-flow.js +42 -0
  167. package/src/lib/local-api.js +1861 -0
  168. package/src/lib/openclaw-hook.js +420 -0
  169. package/src/lib/openclaw-session-plugin.js +520 -0
  170. package/src/lib/opencode-config.js +99 -0
  171. package/src/lib/passive-mode.js +185 -0
  172. package/src/lib/pricing/curated-overrides.json +79 -0
  173. package/src/lib/pricing/index.js +143 -0
  174. package/src/lib/pricing/litellm-fetcher.js +172 -0
  175. package/src/lib/pricing/matcher.js +255 -0
  176. package/src/lib/pricing/seed-snapshot.json +1 -0
  177. package/src/lib/progress.js +76 -0
  178. package/src/lib/project-usage-purge.js +106 -0
  179. package/src/lib/prompt.js +24 -0
  180. package/src/lib/proxy-env.js +131 -0
  181. package/src/lib/rollout.js +8442 -0
  182. package/src/lib/runtime-config.js +122 -0
  183. package/src/lib/skill-usage.js +267 -0
  184. package/src/lib/skills-manager.js +1127 -0
  185. package/src/lib/source-metadata.js +48 -0
  186. package/src/lib/sqlite-reader.js +136 -0
  187. package/src/lib/static-server.js +59 -0
  188. package/src/lib/subscriptions.js +453 -0
  189. package/src/lib/tracker-paths.js +16 -0
  190. package/src/lib/upload-throttle.js +148 -0
  191. package/src/lib/usage-limits.js +1806 -0
  192. package/src/lib/wrapped-aggregator.js +225 -0
@@ -0,0 +1,119 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* Slow, contemplative swaying */
5
+ .body-sway {
6
+ transform-origin: 7.5px 15px; /* Pivot at the base of the feet */
7
+ animation: sway 4s infinite ease-in-out;
8
+ }
9
+
10
+ /* Ground shadow shifting with the sway */
11
+ .shadow-sway {
12
+ transform-origin: 7.5px 15.5px;
13
+ animation: shadow-shift 4s infinite ease-in-out;
14
+ }
15
+
16
+ /* Right arm raised and tapping the "chin" */
17
+ .arm-tap {
18
+ transform-origin: 14px 10px; /* Shoulder joint */
19
+ animation: tap-chin 0.8s infinite alternate ease-in-out;
20
+ }
21
+
22
+ /* Slow, thoughtful blinking */
23
+ .eyes-think {
24
+ transform-origin: 7.5px 7px;
25
+ animation: blink-think 4s infinite;
26
+ }
27
+
28
+ /* Loading dots appearing sequentially */
29
+ .dot { opacity: 0; }
30
+ .d1 { animation: load-dot-1 2s infinite; }
31
+ .d2 { animation: load-dot-2 2s infinite; }
32
+ .d3 { animation: load-dot-3 2s infinite; }
33
+
34
+ /* Keyframes */
35
+ @keyframes sway {
36
+ 0%, 100% { transform: rotate(0deg) translate(0, 0); }
37
+ 25% { transform: rotate(-3deg) translate(-1px, 0); }
38
+ 75% { transform: rotate(3deg) translate(1px, 0); }
39
+ }
40
+
41
+ @keyframes shadow-shift {
42
+ 0%, 100% { transform: translate(0, 0); }
43
+ 25% { transform: translate(-1px, 0); }
44
+ 75% { transform: translate(1px, 0); }
45
+ }
46
+
47
+ @keyframes tap-chin {
48
+ 0% { transform: rotate(-125deg); }
49
+ 100% { transform: rotate(-145deg); }
50
+ }
51
+
52
+ @keyframes blink-think {
53
+ 0%, 46%, 54%, 100% { transform: scaleY(1); }
54
+ 50% { transform: scaleY(0.1); } /* Single slow blink */
55
+ }
56
+
57
+ /* Sequential dot loading (0-20% empty, then dots appear one by one) */
58
+ @keyframes load-dot-1 {
59
+ 0%, 20% { opacity: 0; }
60
+ 21%, 100% { opacity: 1; }
61
+ }
62
+ @keyframes load-dot-2 {
63
+ 0%, 40% { opacity: 0; }
64
+ 41%, 100% { opacity: 1; }
65
+ }
66
+ @keyframes load-dot-3 {
67
+ 0%, 60% { opacity: 0; }
68
+ 61%, 100% { opacity: 1; }
69
+ }
70
+ </style>
71
+ </defs>
72
+
73
+ <!-- Pixel-Art Thinking Bubble (upper-left, tail points down-right toward Clawd) -->
74
+ <g transform="translate(-3, -7)">
75
+ <g class="think-bubble">
76
+ <!-- Bubble Cloud Base -->
77
+ <g fill="#FFFFFF" opacity="0.9">
78
+ <rect x="2" y="1" width="8" height="7"/>
79
+ <rect x="1" y="2" width="10" height="5"/>
80
+ <rect x="3" y="0" width="6" height="9"/>
81
+
82
+ <!-- Tail pointing down-right toward Clawd -->
83
+ <rect x="8" y="7" width="2" height="2"/>
84
+ <rect x="10" y="9" width="1" height="1"/>
85
+ </g>
86
+
87
+ <!-- Animated Loading Dots (left-to-right order preserved) -->
88
+ <g fill="#0082FC">
89
+ <rect class="dot d1" x="2.5" y="4" width="1" height="1"/>
90
+ <rect class="dot d2" x="5.5" y="4" width="1" height="1"/>
91
+ <rect class="dot d3" x="8.5" y="4" width="1" height="1"/>
92
+ </g>
93
+ </g>
94
+ </g>
95
+
96
+ <!-- Mirrored Character Body (SVG transform flips all body parts + shadow) -->
97
+ <g transform="translate(15, 0) scale(-1, 1)">
98
+ <!-- Ground Shadow -->
99
+ <rect id="ground-shadow" class="shadow-sway" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
100
+
101
+ <g class="body-sway">
102
+ <g id="body-color-group" fill="#DE886D">
103
+ <rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
104
+ <rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
105
+ <rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
106
+ <rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
107
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
108
+ <rect id="left-arm" x="0" y="9" width="3" height="2" transform="rotate(25 1 10)"/>
109
+ <g class="arm-tap">
110
+ <rect id="right-arm" x="13" y="9" width="2" height="2"/>
111
+ </g>
112
+ </g>
113
+ <g class="eyes-think" fill="#000000">
114
+ <rect id="left-eye" x="5" y="7" width="1" height="2"/>
115
+ <rect id="right-eye" x="11" y="7" width="1" height="2"/>
116
+ </g>
117
+ </g>
118
+ </g>
119
+ </svg>
@@ -0,0 +1,153 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* High-speed body jitter */
5
+ .body-jitter {
6
+ transform-origin: 7.5px 15px;
7
+ animation: jitter 0.08s infinite alternate ease-in-out;
8
+ }
9
+
10
+ /* Furious typing arms (rotating out and tapping) */
11
+ .arm-l-type {
12
+ transform-origin: 2px 10px; /* Shoulder joint */
13
+ animation: type-l 0.15s infinite ease-in-out;
14
+ }
15
+ .arm-r-type {
16
+ transform-origin: 13px 10px; /* Shoulder joint */
17
+ animation: type-r 0.12s infinite ease-in-out;
18
+ }
19
+
20
+ /* Eye tracking (reading lines of code quickly) */
21
+ .eyes-read {
22
+ animation: read-code 1.2s infinite;
23
+ }
24
+
25
+ /* Floating data packets */
26
+ .data-bit {
27
+ opacity: 0;
28
+ animation: float-data 1s infinite linear;
29
+ }
30
+ .d1 { animation-delay: 0.0s; transform-origin: -2px 10px; }
31
+ .d2 { animation-delay: 0.3s; transform-origin: 5px 12px; }
32
+ .d3 { animation-delay: 0.6s; transform-origin: 12px 11px; }
33
+ .d4 { animation-delay: 0.8s; transform-origin: 17px 9px; }
34
+ .d5 { animation-delay: 0.1s; transform-origin: 8px 10px; }
35
+ .d6 { animation-delay: 0.4s; transform-origin: 0px 11px; }
36
+ .d7 { animation-delay: 0.7s; transform-origin: 15px 12px; }
37
+
38
+ /* Laptop Logo Glow */
39
+ .logo-glow {
40
+ animation: logo-pulse 1.5s infinite alternate ease-in-out;
41
+ }
42
+
43
+ /* Keyframes */
44
+ @keyframes jitter {
45
+ 0% { transform: translateY(0); }
46
+ 100% { transform: translateY(0.5px); }
47
+ }
48
+
49
+ /* Arms point forward and tap rapidly */
50
+ @keyframes type-l {
51
+ 0% { transform: rotate(70deg); }
52
+ 25% { transform: rotate(110deg); }
53
+ 50% { transform: rotate(80deg); }
54
+ 75% { transform: rotate(100deg); }
55
+ 100% { transform: rotate(70deg); }
56
+ }
57
+
58
+ @keyframes type-r {
59
+ 0% { transform: rotate(-80deg); }
60
+ 25% { transform: rotate(-100deg); }
61
+ 50% { transform: rotate(-70deg); }
62
+ 75% { transform: rotate(-110deg); }
63
+ 100% { transform: rotate(-80deg); }
64
+ }
65
+
66
+ /* Discrete steps to look like reading text */
67
+ @keyframes read-code {
68
+ 0%, 14% { transform: translate(-2px, 0); }
69
+ 15%, 29% { transform: translate(-1px, 0); }
70
+ 30%, 44% { transform: translate(0px, 0); }
71
+ 45%, 59% { transform: translate(1px, 0); }
72
+ 60%, 84% { transform: translate(2px, 0); }
73
+ 85%, 100% { transform: translate(-2px, 0); } /* Carriage return snap back */
74
+ }
75
+
76
+ /* Packets float up and fade */
77
+ @keyframes float-data {
78
+ 0% { transform: translateY(0) scale(0.5); opacity: 0; }
79
+ 20% { opacity: 0.8; }
80
+ 100% { transform: translateY(-15px) scale(1.2); opacity: 0; }
81
+ }
82
+
83
+ @keyframes logo-pulse {
84
+ 0% { opacity: 0.4; }
85
+ 100% { opacity: 1; }
86
+ }
87
+ </style>
88
+
89
+ <!-- A small square to represent data/code -->
90
+ <g id="pixel-packet">
91
+ <rect x="0" y="0" width="1.5" height="1.5" />
92
+ </g>
93
+ </defs>
94
+
95
+ <!-- Ground Shadow -->
96
+ <rect id="ground-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
97
+
98
+ <!-- Data Particles floating up from behind the laptop -->
99
+ <g class="data-particles" fill="#40C4FF">
100
+ <use href="#pixel-packet" class="data-bit d1" x="-2" y="12" />
101
+ <use href="#pixel-packet" class="data-bit d2" x="5" y="11" />
102
+ <use href="#pixel-packet" class="data-bit d3" x="12" y="13" />
103
+ <use href="#pixel-packet" class="data-bit d4" x="17" y="11" />
104
+ <use href="#pixel-packet" class="data-bit d5" x="8" y="10" />
105
+ <use href="#pixel-packet" class="data-bit d6" x="1" y="11" />
106
+ <use href="#pixel-packet" class="data-bit d7" x="15" y="12" />
107
+ </g>
108
+
109
+ <!-- Animated Character Body -->
110
+ <g class="body-jitter">
111
+
112
+ <!-- Body Base Color Group -->
113
+ <g id="body-color-group" fill="#DE886D">
114
+ <!-- Static Legs -->
115
+ <rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
116
+ <rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
117
+ <rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
118
+ <rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
119
+
120
+ <!-- Main Torso -->
121
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
122
+
123
+ <!-- Typing Arms -->
124
+ <g class="arm-l-type">
125
+ <rect id="left-arm" x="0" y="9" width="2" height="2"/>
126
+ </g>
127
+ <g class="arm-r-type">
128
+ <rect id="right-arm" x="13" y="9" width="2" height="2"/>
129
+ </g>
130
+ </g>
131
+
132
+ <!-- Eyes Color Group (Squinting) -->
133
+ <g fill="#000000">
134
+ <g class="eyes-read">
135
+ <rect id="left-eye-squint" x="4" y="8.5" width="1" height="1"/>
136
+ <rect id="right-eye-squint" x="10" y="8.5" width="1" height="1"/>
137
+ </g>
138
+ </g>
139
+
140
+ </g>
141
+
142
+ <!-- Pixel Laptop (facing Clawd, so we see the back of the screen) -->
143
+ <g id="laptop" transform="translate(3, 9.5)">
144
+ <!-- Laptop Base -->
145
+ <rect x="-0.5" y="5" width="10" height="1" fill="#546E7A" rx="0.5"/>
146
+ <!-- Screen Back -->
147
+ <rect x="0" y="0" width="9" height="5.5" fill="#78909C" rx="0.5"/>
148
+ <!-- Glowing Logo (Pixel) -->
149
+ <circle cx="4.5" cy="2.5" r="1.5" fill="#40C4FF" opacity="0.2" class="logo-glow"/>
150
+ <rect x="4" y="2" width="1" height="1" fill="#FFFFFF" class="logo-glow"/>
151
+ </g>
152
+
153
+ </svg>
@@ -0,0 +1,166 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* Intense body trembling */
5
+ .body-shake {
6
+ transform-origin: 7.5px 15px;
7
+ animation: shake 0.15s infinite alternate ease-in-out;
8
+ }
9
+
10
+ /* Shadow vibration */
11
+ .shadow-shake {
12
+ transform-origin: 7.5px 15.5px;
13
+ animation: shadow-vib 0.15s infinite alternate ease-in-out;
14
+ }
15
+
16
+ /* Right arm tapping chin fast */
17
+ .arm-tap-fast {
18
+ transform-origin: 14px 10px;
19
+ animation: tap-fast 0.8s infinite ease-in-out;
20
+ }
21
+
22
+ /* Concentrated squint blink */
23
+ .eyes-focus {
24
+ transform-origin: 7.5px 9px;
25
+ animation: focus-blink 2s infinite;
26
+ }
27
+
28
+ /* Brain sparks rising from head */
29
+ .spark {
30
+ opacity: 0;
31
+ animation: spark-rise 1.2s infinite ease-out;
32
+ }
33
+ .sp1 { animation-delay: 0s; }
34
+ .sp2 { animation-delay: 0.3s; }
35
+ .sp3 { animation-delay: 0.6s; }
36
+ .sp4 { animation-delay: 0.9s; }
37
+
38
+ /* Loading dots spinning */
39
+ .load-dot {
40
+ opacity: 0;
41
+ animation: dot-pulse 1.6s infinite;
42
+ }
43
+ .d1 { animation-delay: 0s; }
44
+ .d2 { animation-delay: 0.4s; }
45
+ .d3 { animation-delay: 0.8s; }
46
+
47
+ /* Steam puffs */
48
+ .steam {
49
+ opacity: 0;
50
+ animation: steam-rise 2s infinite ease-out;
51
+ }
52
+ .st1 { animation-delay: 0s; }
53
+ .st2 { animation-delay: 0.7s; }
54
+ .st3 { animation-delay: 1.4s; }
55
+
56
+ /* Ultrathink letters individual pulse */
57
+ .ul { animation: text-pulse 1s infinite ease-in-out; }
58
+ .ul0 { animation-delay: 0s; }
59
+ .ul1 { animation-delay: 0.1s; }
60
+ .ul2 { animation-delay: 0.2s; }
61
+ .ul3 { animation-delay: 0.3s; }
62
+ .ul4 { animation-delay: 0.4s; }
63
+ .ul5 { animation-delay: 0.5s; }
64
+ .ul6 { animation-delay: 0.6s; }
65
+ .ul7 { animation-delay: 0.7s; }
66
+ .ul8 { animation-delay: 0.8s; }
67
+ .ul9 { animation-delay: 0.9s; }
68
+
69
+ @keyframes text-pulse {
70
+ 0%, 100% { opacity: 0.15; }
71
+ 50% { opacity: 1; }
72
+ }
73
+
74
+ @keyframes shake {
75
+ 0% { transform: translate(-0.3px, 0) rotate(-0.5deg); }
76
+ 100% { transform: translate(0.3px, 0) rotate(0.5deg); }
77
+ }
78
+
79
+ @keyframes shadow-vib {
80
+ 0% { transform: scaleX(0.98); }
81
+ 100% { transform: scaleX(1.02); }
82
+ }
83
+
84
+ @keyframes tap-fast {
85
+ 0%, 100% { transform: rotate(-125deg); }
86
+ 50% { transform: rotate(-145deg); }
87
+ }
88
+
89
+ @keyframes focus-blink {
90
+ 0%, 70%, 78%, 100% { transform: scaleY(1); }
91
+ 74% { transform: scaleY(0.1); }
92
+ }
93
+
94
+ @keyframes spark-rise {
95
+ 0% { transform: translate(0, 0) scale(1); opacity: 0; }
96
+ 15% { opacity: 1; }
97
+ 100% { transform: translate(2px, -12px) scale(0.3); opacity: 0; }
98
+ }
99
+
100
+ @keyframes dot-pulse {
101
+ 0%, 100% { opacity: 0.2; }
102
+ 25%, 75% { opacity: 1; }
103
+ }
104
+
105
+ @keyframes steam-rise {
106
+ 0% { transform: translate(0, 0) scale(0.8); opacity: 0; }
107
+ 20% { opacity: 0.6; }
108
+ 100% { transform: translate(-2px, -10px) scale(1.5); opacity: 0; }
109
+ }
110
+ </style>
111
+ </defs>
112
+
113
+ <!-- Ground Shadow -->
114
+ <rect class="shadow-shake" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
115
+
116
+ <!-- Brain Sparks (mirrored x positions around center 7.5) -->
117
+ <g fill="#FFD700">
118
+ <rect class="spark sp1" x="10" y="2" width="1" height="1"/>
119
+ <rect class="spark sp2" x="6" y="0" width="1" height="1"/>
120
+ <rect class="spark sp3" x="3" y="1" width="1" height="1"/>
121
+ <rect class="spark sp4" x="8" y="-1" width="1" height="1"/>
122
+ </g>
123
+
124
+ <!-- Steam Puffs -->
125
+ <g fill="#AAAAAA" opacity="0.5">
126
+ <g class="steam st1"><rect x="5" y="3" width="2" height="1" rx="0.5"/><rect x="4" y="2" width="1" height="1" rx="0.5"/></g>
127
+ <g class="steam st2"><rect x="9" y="2" width="2" height="1" rx="0.5"/><rect x="10" y="1" width="1" height="1" rx="0.5"/></g>
128
+ <g class="steam st3"><rect x="7" y="3" width="1" height="1" rx="0.5"/><rect x="6" y="2" width="2" height="1" rx="0.5"/></g>
129
+ </g>
130
+
131
+ <!-- Loading Dots above head -->
132
+ <g fill="#FF6B35">
133
+ <rect class="load-dot d1" x="4" y="4" width="1" height="1"/>
134
+ <rect class="load-dot d2" x="7" y="4" width="1" height="1"/>
135
+ <rect class="load-dot d3" x="10" y="4" width="1" height="1"/>
136
+ </g>
137
+
138
+ <!-- Mirrored: body + legs only -->
139
+ <g transform="translate(15, 0) scale(-1, 1)">
140
+ <g id="legs" fill="#DE886D">
141
+ <rect x="3" y="13" width="1" height="2"/>
142
+ <rect x="5" y="13" width="1" height="2"/>
143
+ <rect x="9" y="13" width="1" height="2"/>
144
+ <rect x="11" y="13" width="1" height="2"/>
145
+ </g>
146
+
147
+ <g class="body-shake">
148
+ <g fill="#DE886D">
149
+ <rect x="2" y="6" width="11" height="7"/>
150
+ <rect x="0" y="9" width="3" height="2" transform="rotate(25 1 10)"/>
151
+ <g class="arm-tap-fast">
152
+ <rect x="13" y="9" width="2" height="2"/>
153
+ </g>
154
+ </g>
155
+ <g class="eyes-focus" fill="#000000">
156
+ <rect x="5" y="7" width="1" height="2"/>
157
+ <rect x="11" y="7" width="1" height="2"/>
158
+ </g>
159
+ </g>
160
+ </g>
161
+
162
+ <!-- Ultrathink rainbow text (top layer, each letter pulses independently) -->
163
+ <text x="7.5" y="0" text-anchor="middle" font-family="'Söhne', 'Helvetica Neue', Arial, sans-serif" font-size="3.2" font-weight="600" letter-spacing="0.2">
164
+ <tspan class="ul ul0" fill="#FF5252">u</tspan><tspan class="ul ul1" fill="#FF9800">l</tspan><tspan class="ul ul2" fill="#FFC107">t</tspan><tspan class="ul ul3" fill="#4CAF50">r</tspan><tspan class="ul ul4" fill="#2196F3">a</tspan><tspan class="ul ul5" fill="#9C27B0">t</tspan><tspan class="ul ul6" fill="#FF5252">h</tspan><tspan class="ul ul7" fill="#FF9800">i</tspan><tspan class="ul ul8" fill="#4CAF50">n</tspan><tspan class="ul ul9" fill="#2196F3">k</tspan>
165
+ </text>
166
+ </svg>
@@ -0,0 +1,98 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ .body-magic {
5
+ transform-origin: 7.5px 15px;
6
+ animation: float-body 3s infinite ease-in-out;
7
+ }
8
+ .arm-wand {
9
+ transform-origin: 14px 10px;
10
+ animation: wave-wand 3s infinite ease-in-out;
11
+ }
12
+ .arm-l-magic {
13
+ transform-origin: 1px 10px;
14
+ animation: wave-magic 3s infinite ease-in-out;
15
+ }
16
+ .eyes-magic {
17
+ animation: blink-magic 3s infinite;
18
+ }
19
+ .magic-star {
20
+ opacity: 0;
21
+ animation: sparkle-magic 2s infinite ease-out;
22
+ }
23
+ .s1 { animation-delay: 0s; fill: #FFD700; }
24
+ .s2 { animation-delay: 0.5s; fill: #40C4FF; }
25
+ .s3 { animation-delay: 1s; fill: #B388FF; }
26
+ .s4 { animation-delay: 1.5s; fill: #FF8A80; }
27
+
28
+ @keyframes float-body {
29
+ 0%, 100% { transform: translateY(0); }
30
+ 50% { transform: translateY(-2px); }
31
+ }
32
+ @keyframes wave-wand {
33
+ 0%, 100% { transform: rotate(-20deg); }
34
+ 50% { transform: rotate(-120deg); }
35
+ }
36
+ @keyframes wave-magic {
37
+ 0%, 100% { transform: rotate(20deg); }
38
+ 50% { transform: rotate(120deg); }
39
+ }
40
+ @keyframes blink-magic {
41
+ 0%, 40% { transform: scaleY(0.1); }
42
+ 45%, 95% { transform: scaleY(1); }
43
+ 100% { transform: scaleY(0.1); }
44
+ }
45
+ @keyframes sparkle-magic {
46
+ 0% { transform: translate(14px, 4px) scale(0) rotate(0deg); opacity: 0; }
47
+ 20% { opacity: 1; }
48
+ 100% { transform: translate(14px, -15px) scale(1.5) rotate(180deg); opacity: 0; }
49
+ }
50
+ </style>
51
+ <g id="star">
52
+ <polygon points="0,-2 0.5,-0.5 2,0 0.5,0.5 0,2 -0.5,0.5 -2,0 -0.5,-0.5"/>
53
+ </g>
54
+ </defs>
55
+
56
+ <rect id="ground-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.4"/>
57
+
58
+ <!-- Magic Stars -->
59
+ <g>
60
+ <use href="#star" class="magic-star s1"/>
61
+ <use href="#star" class="magic-star s2" transform="translate(-10, 0)"/>
62
+ <use href="#star" class="magic-star s3" transform="translate(5, -5)"/>
63
+ <use href="#star" class="magic-star s4" transform="translate(-5, -10)"/>
64
+ </g>
65
+
66
+ <g class="body-magic">
67
+ <g id="legs" fill="#DE886D">
68
+ <rect x="3" y="13" width="1" height="2"/>
69
+ <rect x="5" y="13" width="1" height="2"/>
70
+ <rect x="9" y="13" width="1" height="2"/>
71
+ <rect x="11" y="13" width="1" height="2"/>
72
+ </g>
73
+
74
+ <g id="body-color-group" fill="#DE886D">
75
+ <rect x="2" y="6" width="11" height="7"/>
76
+ <g class="arm-l-magic"><rect x="0" y="9" width="2" height="2"/></g>
77
+ </g>
78
+
79
+ <g fill="#000000" class="eyes-magic" transform-origin="7.5px 9px">
80
+ <rect x="4" y="8" width="1" height="2"/>
81
+ <rect x="10" y="8" width="1" height="2"/>
82
+ </g>
83
+
84
+ <!-- Wizard Hat -->
85
+ <g transform="translate(7.5, 6)">
86
+ <polygon points="-4,0 4,0 0,-6" fill="#673AB7"/>
87
+ <rect x="-5" y="0" width="10" height="1" fill="#512DA8"/>
88
+ <polygon points="0,-3 0.5,-2.5 1.5,-2.5 0.75,-1.75 1,-0.5 0,-1.25 -1,-0.5 -0.75,-1.75 -1.5,-2.5 -0.5,-2.5" fill="#FFC107"/>
89
+ </g>
90
+
91
+ <!-- Wand arm (on top of hat and eyes) -->
92
+ <g class="arm-wand" fill="#DE886D">
93
+ <rect x="13" y="9" width="2" height="2"/>
94
+ <rect x="13.5" y="4" width="1" height="6" fill="#8D6E63"/>
95
+ <rect x="13.5" y="4" width="1" height="1" fill="#FFD700"/>
96
+ </g>
97
+ </g>
98
+ </svg>
Binary file
Binary file
Binary file
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <rss version="2.0">
3
+ <channel>
4
+ <title>Token Tracker Updates</title>
5
+ <link>https://www.tokentracker.cc/</link>
6
+ <description>Product updates for Token Tracker — the local-first token usage tracker for AI coding agent CLIs.</description>
7
+ <language>en-us</language>
8
+ <lastBuildDate>Thu, 07 May 2026 00:00:00 GMT</lastBuildDate>
9
+
10
+ <item>
11
+ <title>v0.6.4 — Project usage attribution and token formatting fixes</title>
12
+ <link>https://www.tokentracker.cc/</link>
13
+ <guid isPermaLink="false">https://www.tokentracker.cc/#v0.6.4</guid>
14
+ <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
15
+ <description>Auto-verify projects from canonical git owner/repo paths, align dev and production endpoints for project attribution, and format token numbers with thousands separators across the dashboard.</description>
16
+ </item>
17
+
18
+ <item>
19
+ <title>v0.6.3 — Domain migrated to www.tokentracker.cc</title>
20
+ <link>https://www.tokentracker.cc/</link>
21
+ <guid isPermaLink="false">https://www.tokentracker.cc/#v0.6.3</guid>
22
+ <pubDate>Sun, 04 May 2026 00:00:00 GMT</pubDate>
23
+ <description>Production domain migrated to www.tokentracker.cc with apex 307 redirect and updated canonical URLs.</description>
24
+ </item>
25
+
26
+ <item>
27
+ <title>13 AI coding agent CLIs supported</title>
28
+ <link>https://www.tokentracker.cc/</link>
29
+ <guid isPermaLink="false">https://www.tokentracker.cc/#providers-13</guid>
30
+ <pubDate>Mon, 28 Apr 2026 00:00:00 GMT</pubDate>
31
+ <description>Track Claude Code, Codex, Cursor, Gemini, OpenCode, OpenClaw, Every Code, Kiro, Hermes Agent, GitHub Copilot, Kimi Code, oh-my-pi, and CodeBuddy in one unified dashboard.</description>
32
+ </item>
33
+ </channel>
34
+ </rss>
Binary file
Binary file