vibestats 1.3.13 → 1.4.1

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 (159) hide show
  1. package/README.md +15 -3
  2. package/dist/index.js +1010 -199
  3. package/dist/web/404.html +1 -0
  4. package/dist/web/_next/static/chunks/231.de8a9ee791ed9eef.js +1 -0
  5. package/dist/web/_next/static/chunks/498-74a3a367cb8442f0.js +1 -0
  6. package/dist/web/_next/static/chunks/562.a5731acd5543100e.js +1 -0
  7. package/dist/web/_next/static/chunks/816-8960921093d57453.js +1 -0
  8. package/dist/web/_next/static/chunks/832-93b990b7ceeaa2c5.js +1 -0
  9. package/dist/web/_next/static/chunks/971-0ab6a23b2af361a6.js +1 -0
  10. package/dist/web/_next/static/chunks/app/_not-found/page-91f35a114767b957.js +1 -0
  11. package/dist/web/_next/static/chunks/app/activity/[slug]/page-bd4706aecd453508.js +1 -0
  12. package/dist/web/_next/static/chunks/app/activity/page-5d0587c1d5910e68.js +1 -0
  13. package/dist/web/_next/static/chunks/app/changelog/page-5d0587c1d5910e68.js +1 -0
  14. package/dist/web/_next/static/chunks/app/compare/[slug]/page-5d0587c1d5910e68.js +1 -0
  15. package/dist/web/_next/static/chunks/app/compare/page-5d0587c1d5910e68.js +1 -0
  16. package/dist/web/_next/static/chunks/app/dashboard/activity/page-e84049538e03061e.js +1 -0
  17. package/dist/web/_next/static/chunks/app/dashboard/layout-bd4706aecd453508.js +1 -0
  18. package/dist/web/_next/static/chunks/app/dashboard/page-4834f263664e8663.js +1 -0
  19. package/dist/web/_next/static/chunks/app/dashboard/usage/page-b42b457b8fd3865c.js +1 -0
  20. package/dist/web/_next/static/chunks/app/dashboard/wrapped/page-268dced4ee2726f7.js +1 -0
  21. package/dist/web/_next/static/chunks/app/docs/commands/page-5d0587c1d5910e68.js +1 -0
  22. package/dist/web/_next/static/chunks/app/docs/page-5d0587c1d5910e68.js +1 -0
  23. package/dist/web/_next/static/chunks/app/features/[slug]/page-5d0587c1d5910e68.js +1 -0
  24. package/dist/web/_next/static/chunks/app/features/page-5d0587c1d5910e68.js +1 -0
  25. package/dist/web/_next/static/chunks/app/guides/[slug]/page-5d0587c1d5910e68.js +1 -0
  26. package/dist/web/_next/static/chunks/app/guides/page-5d0587c1d5910e68.js +1 -0
  27. package/dist/web/_next/static/chunks/app/images/[...slug]/route-bd4706aecd453508.js +1 -0
  28. package/dist/web/_next/static/chunks/app/layout-6ebd9b17af55ec02.js +1 -0
  29. package/dist/web/_next/static/chunks/app/page-dfb7bbdb5999dc75.js +1 -0
  30. package/dist/web/_next/static/chunks/app/robots.txt/route-bd4706aecd453508.js +1 -0
  31. package/dist/web/_next/static/chunks/app/s/[slug]/route-bd4706aecd453508.js +1 -0
  32. package/dist/web/_next/static/chunks/app/sitemap.xml/route-bd4706aecd453508.js +1 -0
  33. package/dist/web/_next/static/chunks/app/usage/[slug]/page-bd4706aecd453508.js +1 -0
  34. package/dist/web/_next/static/chunks/app/use-cases/[slug]/page-5d0587c1d5910e68.js +1 -0
  35. package/dist/web/_next/static/chunks/app/use-cases/page-5d0587c1d5910e68.js +1 -0
  36. package/dist/web/_next/static/chunks/app/wrapped/[slug]/page-bd4706aecd453508.js +1 -0
  37. package/dist/web/_next/static/chunks/app/wrapped/page-66b00de7736097db.js +1 -0
  38. package/dist/web/_next/static/chunks/c476d598-9099ed8b975ae1d6.js +1 -0
  39. package/dist/web/_next/static/chunks/framework-1c6a486f6592f084.js +1 -0
  40. package/dist/web/_next/static/chunks/main-app-6619364ab1f13fb7.js +1 -0
  41. package/dist/web/_next/static/chunks/main-f6fa273a9100cc16.js +1 -0
  42. package/dist/web/_next/static/chunks/pages/_app-55552e79b4ca5b96.js +1 -0
  43. package/dist/web/_next/static/chunks/pages/_error-da3c1b00689f457b.js +1 -0
  44. package/dist/web/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  45. package/dist/web/_next/static/chunks/webpack-175b2f5685d7557b.js +1 -0
  46. package/dist/web/_next/static/css/335de1248158d380.css +3 -0
  47. package/dist/web/_next/static/gPirvBMhpRSdtR0tsMj2H/_buildManifest.js +1 -0
  48. package/dist/web/_next/static/gPirvBMhpRSdtR0tsMj2H/_ssgManifest.js +1 -0
  49. package/dist/web/activity.html +1 -0
  50. package/dist/web/activity.txt +19 -0
  51. package/dist/web/changelog.html +1 -0
  52. package/dist/web/changelog.txt +60 -0
  53. package/dist/web/compare/claude-code-vs-codex-cli-tracking.html +1 -0
  54. package/dist/web/compare/claude-code-vs-codex-cli-tracking.txt +25 -0
  55. package/dist/web/compare/daily-vs-monthly-ai-usage-reports.html +1 -0
  56. package/dist/web/compare/daily-vs-monthly-ai-usage-reports.txt +24 -0
  57. package/dist/web/compare/local-vs-cloud-ai-analytics.html +1 -0
  58. package/dist/web/compare/local-vs-cloud-ai-analytics.txt +25 -0
  59. package/dist/web/compare/manual-tracking-vs-vibestats.html +1 -0
  60. package/dist/web/compare/manual-tracking-vs-vibestats.txt +24 -0
  61. package/dist/web/compare/querystring-shares-vs-stored-share-pages.html +1 -0
  62. package/dist/web/compare/querystring-shares-vs-stored-share-pages.txt +25 -0
  63. package/dist/web/compare/session-breakdown-vs-model-breakdown.html +1 -0
  64. package/dist/web/compare/session-breakdown-vs-model-breakdown.txt +25 -0
  65. package/dist/web/compare/single-source-vs-combined-tracking.html +1 -0
  66. package/dist/web/compare/single-source-vs-combined-tracking.txt +25 -0
  67. package/dist/web/compare/terminal-table-vs-json-output.html +1 -0
  68. package/dist/web/compare/terminal-table-vs-json-output.txt +24 -0
  69. package/dist/web/compare/token-volume-vs-cost-estimation.html +1 -0
  70. package/dist/web/compare/token-volume-vs-cost-estimation.txt +24 -0
  71. package/dist/web/compare/wrapped-vs-activity-heatmap.html +1 -0
  72. package/dist/web/compare/wrapped-vs-activity-heatmap.txt +25 -0
  73. package/dist/web/compare.html +1 -0
  74. package/dist/web/compare.txt +32 -0
  75. package/dist/web/dashboard/activity.html +1 -0
  76. package/dist/web/dashboard/activity.txt +20 -0
  77. package/dist/web/dashboard/usage.html +1 -0
  78. package/dist/web/dashboard/usage.txt +20 -0
  79. package/dist/web/dashboard/wrapped.html +1 -0
  80. package/dist/web/dashboard/wrapped.txt +20 -0
  81. package/dist/web/dashboard.html +1 -0
  82. package/dist/web/dashboard.txt +20 -0
  83. package/dist/web/docs/commands.html +1 -0
  84. package/dist/web/docs/commands.txt +33 -0
  85. package/dist/web/docs.html +1 -0
  86. package/dist/web/docs.txt +25 -0
  87. package/dist/web/features/ai-coding-activity-heatmap.html +1 -0
  88. package/dist/web/features/ai-coding-activity-heatmap.txt +25 -0
  89. package/dist/web/features/ai-coding-wrapped.html +1 -0
  90. package/dist/web/features/ai-coding-wrapped.txt +24 -0
  91. package/dist/web/features/claude-code-stats.html +1 -0
  92. package/dist/web/features/claude-code-stats.txt +24 -0
  93. package/dist/web/features/claude-diagnostics.html +1 -0
  94. package/dist/web/features/claude-diagnostics.txt +24 -0
  95. package/dist/web/features/codex-cli-stats.html +1 -0
  96. package/dist/web/features/codex-cli-stats.txt +24 -0
  97. package/dist/web/features/combined-ai-coding-stats.html +1 -0
  98. package/dist/web/features/combined-ai-coding-stats.txt +25 -0
  99. package/dist/web/features/json-and-automation-exports.html +1 -0
  100. package/dist/web/features/json-and-automation-exports.txt +25 -0
  101. package/dist/web/features/model-breakdown.html +1 -0
  102. package/dist/web/features/model-breakdown.txt +24 -0
  103. package/dist/web/features/privacy-first-analytics.html +1 -0
  104. package/dist/web/features/privacy-first-analytics.txt +25 -0
  105. package/dist/web/features/session-breakdown.html +1 -0
  106. package/dist/web/features/session-breakdown.txt +24 -0
  107. package/dist/web/features/share-pages.html +1 -0
  108. package/dist/web/features/share-pages.txt +24 -0
  109. package/dist/web/features/token-and-cost-tracking.html +1 -0
  110. package/dist/web/features/token-and-cost-tracking.txt +24 -0
  111. package/dist/web/features.html +1 -0
  112. package/dist/web/features.txt +33 -0
  113. package/dist/web/guides/how-to-build-ai-activity-heatmap.html +1 -0
  114. package/dist/web/guides/how-to-build-ai-activity-heatmap.txt +24 -0
  115. package/dist/web/guides/how-to-compare-model-usage.html +1 -0
  116. package/dist/web/guides/how-to-compare-model-usage.txt +24 -0
  117. package/dist/web/guides/how-to-create-ai-coding-wrapped.html +1 -0
  118. package/dist/web/guides/how-to-create-ai-coding-wrapped.txt +24 -0
  119. package/dist/web/guides/how-to-measure-ai-token-costs.html +1 -0
  120. package/dist/web/guides/how-to-measure-ai-token-costs.txt +24 -0
  121. package/dist/web/guides/how-to-read-claude-diagnostics.html +1 -0
  122. package/dist/web/guides/how-to-read-claude-diagnostics.txt +24 -0
  123. package/dist/web/guides/how-to-share-ai-coding-stats.html +1 -0
  124. package/dist/web/guides/how-to-share-ai-coding-stats.txt +24 -0
  125. package/dist/web/guides/how-to-track-claude-code-usage.html +1 -0
  126. package/dist/web/guides/how-to-track-claude-code-usage.txt +24 -0
  127. package/dist/web/guides/how-to-track-codex-cli-usage.html +1 -0
  128. package/dist/web/guides/how-to-track-codex-cli-usage.txt +24 -0
  129. package/dist/web/guides.html +1 -0
  130. package/dist/web/guides.txt +27 -0
  131. package/dist/web/index.html +1 -0
  132. package/dist/web/index.txt +23 -0
  133. package/dist/web/robots.txt +7 -0
  134. package/dist/web/sitemap.xml +279 -0
  135. package/dist/web/use-cases/ai-agencies.html +1 -0
  136. package/dist/web/use-cases/ai-agencies.txt +23 -0
  137. package/dist/web/use-cases/consultants.html +1 -0
  138. package/dist/web/use-cases/consultants.txt +23 -0
  139. package/dist/web/use-cases/engineering-managers.html +1 -0
  140. package/dist/web/use-cases/engineering-managers.txt +24 -0
  141. package/dist/web/use-cases/freelancers.html +1 -0
  142. package/dist/web/use-cases/freelancers.txt +23 -0
  143. package/dist/web/use-cases/indie-hackers.html +1 -0
  144. package/dist/web/use-cases/indie-hackers.txt +23 -0
  145. package/dist/web/use-cases/monthly-reporting.html +1 -0
  146. package/dist/web/use-cases/monthly-reporting.txt +23 -0
  147. package/dist/web/use-cases/open-source-maintainers.html +1 -0
  148. package/dist/web/use-cases/open-source-maintainers.txt +24 -0
  149. package/dist/web/use-cases/personal-retrospectives.html +1 -0
  150. package/dist/web/use-cases/personal-retrospectives.txt +24 -0
  151. package/dist/web/use-cases/researchers.html +1 -0
  152. package/dist/web/use-cases/researchers.txt +23 -0
  153. package/dist/web/use-cases/weekly-reviews.html +1 -0
  154. package/dist/web/use-cases/weekly-reviews.txt +23 -0
  155. package/dist/web/use-cases.html +1 -0
  156. package/dist/web/use-cases.txt +31 -0
  157. package/dist/web/wrapped.html +1 -0
  158. package/dist/web/wrapped.txt +20 -0
  159. package/package.json +7 -8
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><!--gPirvBMhpRSdtR0tsMj2H--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="https://images.unsplash.com/photo-1515879218367-8466d910aaa4?auto=format&amp;fit=crop&amp;w=900&amp;q=80"/><link rel="stylesheet" href="/_next/static/css/335de1248158d380.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-175b2f5685d7557b.js"/><script src="/_next/static/chunks/c476d598-9099ed8b975ae1d6.js" async=""></script><script src="/_next/static/chunks/498-74a3a367cb8442f0.js" async=""></script><script src="/_next/static/chunks/main-app-6619364ab1f13fb7.js" async=""></script><script src="/_next/static/chunks/app/layout-6ebd9b17af55ec02.js" async=""></script><script src="/_next/static/chunks/816-8960921093d57453.js" async=""></script><script src="/_next/static/chunks/app/changelog/page-5d0587c1d5910e68.js" async=""></script><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><title>Changelog | vibestats</title><meta name="description" content="Release history for vibestats across the CLI and hosted web experience."/><meta name="application-name" content="vibestats"/><meta name="keywords" content="vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,vibestats changelog,vibestats releases,Claude Code stats release notes"/><link rel="canonical" href="https://vibestats.wolfai.dev/changelog"/><meta property="og:title" content="Changelog | vibestats"/><meta property="og:description" content="Release history for vibestats across the CLI and hosted web experience."/><meta property="og:url" content="https://vibestats.wolfai.dev/changelog"/><meta property="og:site_name" content="vibestats"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="article"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="Changelog | vibestats"/><meta name="twitter:description" content="Release history for vibestats across the CLI and hosted web experience."/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};","id":"wolf-analytics-config"}])</script><script>(self.__next_s=self.__next_s||[]).push(["https://analytics.wolfai.dev/wolf-analytics.min.js",{"id":"wolf-analytics-script"}])</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="antialiased min-h-screen bg-background text-foreground"><div hidden=""><!--$--><!--/$--></div><main class="changelog-page"><script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","name":"vibestats changelog","description":"Release notes for vibestats CLI and web changes.","url":"https://vibestats.wolfai.dev/changelog","numberOfItems":43}</script><section class="changelog-hero" aria-labelledby="changelog-title"><div class="changelog-hero-copy"><nav class="changelog-nav" aria-label="Primary"><a href="/">Usage</a><a href="/wrapped">Wrapped</a><a href="/activity">Activity</a></nav><p class="changelog-label">Release log</p><h1 id="changelog-title">Every vibestats ship, in one place.</h1><p class="changelog-lede">CLI fixes, web changes, model support, and migration notes. Written for people who want the diff without reading the diff.</p><div class="changelog-actions"><a href="#v1.4.1" class="changelog-button">Latest release</a><a href="#release-history" class="changelog-link">Browse history</a></div></div><aside class="changelog-terminal" aria-label="Latest changelog status"><div class="changelog-terminal-bar"><span></span><span></span><span></span></div><div class="changelog-terminal-body"><p><span>$</span> npx vibestats --version</p><strong>v<!-- -->1.4.1</strong><p><span>$</span> open /changelog#<!-- -->v1.4.1</p><small>Apr 24, 2026</small></div><img src="https://images.unsplash.com/photo-1515879218367-8466d910aaa4?auto=format&amp;fit=crop&amp;w=900&amp;q=80" alt="A laptop showing source code in a dark editor"/></aside></section><section class="changelog-metrics" aria-label="Changelog summary"><article><span>Latest</span><strong>v<!-- -->1.4.1</strong><p>Dashboard port-conflict fix</p></article><article><span>Entries</span><strong>43</strong><p>Public releases tracked from package history.</p></article><article><span>Since</span><strong>Dec 31</strong><p>Launch-era notes stay visible for debugging old installs.</p></article><article><span>Current year</span><strong>2026</strong><p>4<!-- --> recent releases sit at the top.</p></article></section><section class="changelog-featured" aria-labelledby="latest-window-title"><div><p class="changelog-label">Current window</p><h2 id="latest-window-title">Recent work</h2><p>The top releases stay expanded so new CLI behavior, model naming, and hosted page changes are easy to scan.</p></div><div class="changelog-featured-list"><a href="#v1.4.1"><span>v<!-- -->1.4.1</span><strong>Dashboard port-conflict fix</strong><small>Apr 24</small></a><a href="#v1.4.0"><span>v<!-- -->1.4.0</span><strong>Local web dashboard</strong><small>Apr 23</small></a><a href="#v1.3.14"><span>v<!-- -->1.3.14</span><strong>Persistent usage cache</strong><small>Apr 20</small></a><a href="#v1.3.13"><span>v<!-- -->1.3.13</span><strong>Usage command aliases</strong><small>Apr 18</small></a></div></section><section id="release-history" class="changelog-history" aria-label="Release history"><div class="changelog-year-group"><div class="changelog-year"><span>2026</span></div><div class="changelog-entry-list"><article id="v1.4.1" class="changelog-entry is-recent"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.4.1</span><time dateTime="2026-04-24T00:00:00.000Z">Apr 24, 2026</time></div><h2>Dashboard port-conflict fix</h2><p>Fixed --dashboard silently claiming a port already taken by another local Node server on macOS.</p></header><ul class="changelog-highlights"><li>findFreePort now connect-probes each candidate before binding, catching the macOS IPv6-dual-stack quirk where a second loopback bind succeeds but connections land on the first listener.</li><li>Dashboard skips cleanly to the next free port (e.g. 8081) when 8080 is already occupied by another dev server.</li></ul></article><article id="v1.4.0" class="changelog-entry is-recent"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.4.0</span><time dateTime="2026-04-23T00:00:00.000Z">Apr 23, 2026</time></div><h2>Local web dashboard</h2><p>Added a local web dashboard for exploring usage stats, activity heatmaps, and wrapped summaries all in one place.</p></header><ul class="changelog-highlights"><li>Launched with --dashboard flag which spins up a local server, opens the browser, and exits cleanly on Ctrl+C.</li><li>Dashboard integrates usage stats, activity heatmaps, and wrapped summaries in an interactive web interface — fully offline against local JSONL data.</li><li>Supports all existing CLI filters (date ranges, models, sources) from the web interface.</li></ul></article><article id="v1.3.14" class="changelog-entry is-recent"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.14</span><time dateTime="2026-04-20T16:38:20.355Z">Apr 20, 2026</time></div><h2>Persistent usage cache</h2><p>Added a local persistent cache so repeated CLI stats commands reuse unchanged usage sources while keeping refresh and bypass controls available.</p></header><ul class="changelog-highlights"><li>Repeated usage, activity, wrapped, Codex, and combined stats runs now reuse cached file-level parses when source fingerprints are unchanged.</li><li>Added --no-cache and --refresh-cache for one-off bypasses or forced cache rebuilds.</li><li>Cache invalidation tracks Claude JSONL, Codex sessions, Factory pairs, and OpenCode database WAL files while using atomic best-effort writes.</li></ul></article><article id="v1.3.13" class="changelog-entry is-recent"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.13</span><time dateTime="2026-04-18T12:40:17.903Z">Apr 18, 2026</time></div><h2>Usage command aliases</h2><p>Made live limit commands easier to discover by routing bare usage scopes to the same local limit view and adding help for unknown commands.</p></header><ul class="changelog-highlights"><li>Bare usage scopes such as usage all and usage codex now open the local live limit view unless stats flags are provided.</li><li>Usage stats flags such as total, daily, and since still keep the token usage table behavior for combined or Codex-only stats.</li><li>Unknown positional commands now exit with a concise help message instead of silently scanning usage data.</li></ul></article><article id="v1.3.12" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.12</span><time dateTime="2026-04-18T12:29:52.114Z">Apr 18, 2026</time></div><h2>Local usage limits</h2><p>Added local CLI limit views for Claude and Codex with provider-colored progress bars and weekly pace signals.</p></header><ul class="changelog-highlights"><li>Added limits commands for Claude, Codex, and combined local rate-limit snapshots without provider API keys.</li><li>Claude usage now reads the interactive usage view through a temporary tmux session and cleans it up after capture.</li><li>Codex limits use the local app-server path and render alongside Claude with blue and green progress bars plus reserve or deficit pace output.</li></ul></article><article id="v1.3.11" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.11</span><time dateTime="2026-04-17T09:03:48.174Z">Apr 17, 2026</time></div><h2>Opus 4.7 model labels</h2><p>Updated model handling for the latest Opus release and added a Claude-only family filter.</p></header><ul class="changelog-highlights"><li>Generic Opus usage now displays as Opus 4.7 while existing Opus 4.6 usage remains versioned separately.</li><li>Added the o47 share token so CLI-generated links and hosted pages preserve the new Opus label.</li><li>Added a Claude family filter alongside the existing Kimi and MiniMax filters.</li></ul></article><article id="v1.3.10" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.10</span><time dateTime="2026-04-03T22:24:21.337Z">Apr 4, 2026</time></div><h2>Kimi and MiniMax usage filters</h2><p>Added first-class family filters for Kimi and MiniMax across usage, wrapped, activity, and share output.</p></header><ul class="changelog-highlights"><li>Added `--kimi` and `--minimax` filters that narrow local usage stats to just those model families across Claude-compatible, OpenCode, Factory, and Codex-backed sources.</li><li>Normalized Kimi-code and MiniMax-code aliases so local model labels and shared pages stay consistent.</li><li>Extended the web share and legacy views so filtered stats render with family-specific titles instead of generic Claude/Codex labels.</li></ul></article><article id="v1.3.9" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.9</span><time dateTime="2026-03-30T15:47:05.000Z">Mar 30, 2026</time></div><h2>MiniMax and Kimi multi-source stats</h2><p>Expanded Claude-compatible ingestion beyond raw Claude JSONL so MiniMax and Kimi usage now lands correctly in usage tables, wrapped stats, and hosted shares.</p></header><ul class="changelog-highlights"><li>Added local ingestion from Claude projects, OpenCode, and Droid/Factory sessions instead of relying on just one Claude-compatible store.</li><li>Fixed the Claude-compatible dedup logic that was dropping later usage-bearing assistant events and undercounting MiniMax and Kimi tokens.</li><li>Applied official routed pricing for Fireworks Kimi K2.5 Turbo and Fireworks MiniMax M2 family rates so the new models contribute real cost instead of $0.</li></ul></article><article id="v1.3.8" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.8</span><time dateTime="2026-03-23T18:05:36.216Z">Mar 23, 2026</time></div><h2>Subagent-aware stats and Claude diagnostics</h2><p>Fixed the biggest stats correctness issue in the CLI by separating canonical main sessions from subagents while keeping token and cost totals intact.</p></header><ul class="changelog-highlights"><li>Claude and Codex session counts now distinguish main sessions from subagents instead of inflating headline session totals.</li><li>Added `--claude-system` and `--claude-limits` commands for inspecting `~/.claude.json`, `~/.claude/usage-data`, cache freshness, and local rate-limit signals.</li><li>Refined the web share surfaces again with restored legacy usage/wrapped balance, tighter activity hover layout, and cleaner host-aware share behavior.</li></ul></article><article id="v1.3.7" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.7</span><time dateTime="2026-03-19T11:49:20.128Z">Mar 19, 2026</time></div><h2>Web-hosted share URLs</h2><p>Shifted the CLI to emit share links that stay on the vibestats web host instead of exposing backend endpoints.</p></header><ul class="changelog-highlights"><li>CLI share output now prefers user-facing web URLs.</li><li>Prepared the ground for the later share-page visual cleanups and host redirect fixes.</li></ul></article><article id="v1.3.6" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.6</span><time dateTime="2026-03-19T11:35:46.961Z">Mar 19, 2026</time></div><h2>Share publishing stabilisation</h2><p>Cleaned up release metadata and fixed the publishing path for vibestats shares.</p></header><ul class="changelog-highlights"><li>Resolved share publishing failures that could break generated share pages.</li><li>Tightened release metadata so the CLI and hosted share flow stayed in sync.</li></ul></article><article id="v1.3.5" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.5</span><time dateTime="2026-03-14T21:33:15.201Z">Mar 14, 2026</time></div><h2>Activity heatmap and hosted sharing</h2><p>Introduced the bigger second wave of web functionality: activity graphs, richer share artifacts, and deployment support.</p></header><ul class="changelog-highlights"><li>Added the GitHub-style activity heatmap view.</li><li>Introduced the share artifact system and hosted share pages.</li><li>Added Docker deployment support for the web app.</li></ul></article><article id="v1.3.4" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.4</span><time dateTime="2026-03-06T14:04:12.988Z">Mar 6, 2026</time></div><h2>Model naming cleanup</h2><p>Polished model naming and filtering so the Claude and Codex views read like product names instead of raw internals.</p></header><ul class="changelog-highlights"><li>Fixed Sonnet 4.6 to show the proper display name instead of a generic `Sonnet` label.</li><li>Filtered GPT-family models out of the Claude-only presentation and tightened footer copy.</li></ul></article><article id="v1.3.3" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.3</span><time dateTime="2026-02-14T15:14:59.930Z">Feb 14, 2026</time></div><h2>Codex names in share UI</h2><p>Made the hosted share pages understand and render Codex model names correctly.</p></header><ul class="changelog-highlights"><li>Web share UI now shows Codex model display names instead of awkward raw identifiers.</li><li>Synced the CLI package metadata for the 1.3.3 line.</li></ul></article><article id="v1.3.2" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.2</span><time dateTime="2026-02-12T20:57:21.735Z">Feb 12, 2026</time></div><h2>Release metadata sync</h2><p>Small release to align package metadata and published versioning.</p></header><ul class="changelog-highlights"><li>Synced package metadata to the intended release state.</li></ul></article><article id="v1.3.1" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.1</span><time dateTime="2026-02-12T20:56:49.962Z">Feb 12, 2026</time></div><h2>Full GPT-5.x Codex variant support</h2><p>Expanded Codex model detection so the CLI recognizes the broader GPT-5.3, 5.2, and 5.1 Codex variant set cleanly.</p></header><ul class="changelog-highlights"><li>Added support for GPT-5.3, GPT-5.2, and GPT-5.1 Codex naming variants.</li><li>Reduced raw-model fallbacks for Codex users.</li></ul></article><article id="v1.3.0" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.3.0</span><time dateTime="2026-02-12T18:42:28.868Z">Feb 12, 2026</time></div><h2>Rolling windows for usage views</h2><p>Added a cleaner way to inspect recent usage windows directly from the CLI.</p></header><ul class="changelog-highlights"><li>Added `--last N` date-window support for usage queries.</li><li>Started the 1.3 release line with a more flexible usage-report workflow.</li></ul></article><article id="v1.2.0" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.2.0</span><time dateTime="2026-02-05T22:25:39.749Z">Feb 5, 2026</time></div><h2>New model support</h2><p>Expanded model awareness for the newer Claude and Codex-era releases.</p></header><ul class="changelog-highlights"><li>Added Opus 4.6 and GPT-5.3 model support.</li></ul></article><article id="v1.1.0" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.1.0</span><time dateTime="2026-01-24T21:34:22.350Z">Jan 24, 2026</time></div><h2>Project and session drill-downs</h2><p>Made the CLI much more useful for day-to-day debugging by adding finer filters and a stronger landing-page presentation.</p></header><ul class="changelog-highlights"><li>Added `--project` and `--sessions` flags for per-project and per-chat breakdowns.</li><li>Added interactive visual effects to the landing pages.</li></ul></article><article id="v1.0.23" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.23</span><time dateTime="2026-01-01T23:44:04.846Z">Jan 2, 2026</time></div><h2>Local timezone grouping</h2><p>Corrected date bucketing so activity follows the user&#x27;s local day instead of UTC rollover edges.</p></header><ul class="changelog-highlights"><li>Switched usage grouping from UTC date boundaries to local timezone-aware grouping.</li></ul></article><article id="v1.0.22" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.22</span><time dateTime="2026-01-01T14:45:02.941Z">Jan 1, 2026</time></div><h2>Async loading and tier sorting</h2><p>Improved the CLI feel for larger histories by making loading more responsive and model ordering more intuitive.</p></header><ul class="changelog-highlights"><li>Added async file loading with an animated spinner.</li><li>Sorted Claude models by tier priority, keeping Opus above Sonnet and Haiku.</li></ul></article><article id="v1.0.21" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.21</span><time dateTime="2026-01-01T13:51:43.981Z">Jan 1, 2026</time></div><h2>Launch-day packaging refresh</h2><p>Small republish in the middle of the loading and spinner rollout.</p></header><ul class="changelog-highlights"><li>Stability release during the spinner/loading iteration cycle.</li></ul></article><article id="v1.0.20" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.20</span><time dateTime="2026-01-01T13:44:50.941Z">Jan 1, 2026</time></div><h2>Launch-day packaging refresh</h2><p>Another small republish while the CLI loading experience was being tuned.</p></header><ul class="changelog-highlights"><li>Intermediate release to keep the rollout moving during rapid CLI UX iteration.</li></ul></article></div></div><div class="changelog-year-group"><div class="changelog-year"><span>2025</span></div><div class="changelog-entry-list"><article id="v1.0.19" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.19</span><time dateTime="2025-12-31T16:41:21.234Z">Dec 31, 2025</time></div><h2>TTY-safe spinner behaviour</h2><p>Hardened the spinner logic so it still animates in more terminal environments.</p></header><ul class="changelog-highlights"><li>Forced spinner animation regardless of TTY detection quirks.</li></ul></article><article id="v1.0.18" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.18</span><time dateTime="2025-12-31T16:16:38.013Z">Dec 31, 2025</time></div><h2>Single-line spinner compatibility</h2><p>Reduced spinner complexity to improve terminal compatibility.</p></header><ul class="changelog-highlights"><li>Simplified the spinner to a single-line presentation for better compatibility.</li></ul></article><article id="v1.0.17" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.17</span><time dateTime="2025-12-31T16:13:48.403Z">Dec 31, 2025</time></div><h2>Spinner hold-time fix</h2><p>Kept the spinner visible long enough to feel intentional during quick operations.</p></header><ul class="changelog-highlights"><li>Forced a full minimum spinner display interval.</li></ul></article><article id="v1.0.16" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.16</span><time dateTime="2025-12-31T16:10:19.142Z">Dec 31, 2025</time></div><h2>Spinner dwell polish</h2><p>Smoothed the loading motion so it no longer flashes by too quickly.</p></header><ul class="changelog-highlights"><li>Added a minimum display time for the animated spinner.</li></ul></article><article id="v1.0.15" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.15</span><time dateTime="2025-12-31T16:07:24.669Z">Dec 31, 2025</time></div><h2>Immediate spinner render</h2><p>Removed the awkward initial pause before the loading indicator appeared.</p></header><ul class="changelog-highlights"><li>Rendered the first spinner frame immediately.</li></ul></article><article id="v1.0.14" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.14</span><time dateTime="2025-12-31T16:05:34.922Z">Dec 31, 2025</time></div><h2>Wave spinner</h2><p>Introduced the first branded CLI loading animation.</p></header><ul class="changelog-highlights"><li>Added the VIBESTATS wave animation spinner.</li></ul></article><article id="v1.0.13" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.13</span><time dateTime="2025-12-31T15:13:13.358Z">Dec 31, 2025</time></div><h2>Wrapped URL polish</h2><p>Cleaned up the wrapped share route and made the generated URL feel less brittle.</p></header><ul class="changelog-highlights"><li>Fixed wrapped shares to use the `/wrapped/` path correctly.</li><li>Improved full share URL UX.</li></ul></article><article id="v1.0.12" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.12</span><time dateTime="2025-12-31T12:06:52.537Z">Dec 31, 2025</time></div><h2>Orange share-link styling</h2><p>Small presentation release focused on matching the vibestats visual language.</p></header><ul class="changelog-highlights"><li>Added orange styling to the usage share link.</li></ul></article><article id="v1.0.11" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.11</span><time dateTime="2025-12-31T12:00:39.053Z">Dec 31, 2025</time></div><h2>Raw model normalization</h2><p>Reduced duplicate model rows caused by inconsistent raw IDs.</p></header><ul class="changelog-highlights"><li>Normalized raw model IDs to prevent duplicate entries.</li></ul></article><article id="v1.0.10" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.10</span><time dateTime="2025-12-31T11:58:11.448Z">Dec 31, 2025</time></div><h2>Parity fixes for usage decoding</h2><p>Closed some of the biggest mismatches between vibestats, ccusage, and the web decoder.</p></header><ul class="changelog-highlights"><li>Deduplicated messages to better match ccusage totals.</li><li>Added missing model-name mappings to the web decoder.</li></ul></article><article id="v1.0.9" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.9</span><time dateTime="2025-12-31T11:47:26.814Z">Dec 31, 2025</time></div><h2>Historical stats-cache support</h2><p>Added support for the Claude `stats-cache.json` path so older activity can be reconstructed more reliably.</p></header><ul class="changelog-highlights"><li>Loaded historical usage from `stats-cache.json`.</li></ul></article><article id="v1.0.8" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.8</span><time dateTime="2025-12-31T11:44:03.260Z">Dec 31, 2025</time></div><h2>Automatic long-range monthly view</h2><p>Made longer windows easier to scan without requiring manual aggregation switches.</p></header><ul class="changelog-highlights"><li>Automatically switched to monthly aggregation for long date ranges.</li></ul></article><article id="v1.0.7" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.7</span><time dateTime="2025-12-31T11:37:34.504Z">Dec 31, 2025</time></div><h2>Codex session parsing fix</h2><p>Brought Codex usage parsing in line with the real on-disk session format.</p></header><ul class="changelog-highlights"><li>Fixed Codex usage parsing to match actual session files.</li></ul></article><article id="v1.0.6" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.6</span><time dateTime="2025-12-31T03:23:02.722Z">Dec 31, 2025</time></div><h2>Share URL correctness fixes</h2><p>Resolved two of the most obvious share-flow routing issues.</p></header><ul class="changelog-highlights"><li>Fixed the shared usage window to show the last 31 days instead of the first 31.</li><li>Redirected usage shortlinks to `/` instead of `/wrapped`.</li></ul></article><article id="v1.0.5" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.5</span><time dateTime="2025-12-31T03:14:26.852Z">Dec 31, 2025</time></div><h2>Usage sharing foundations</h2><p>Started the first real sharing workflow for usage reports and tightened the web chrome around it.</p></header><ul class="changelog-highlights"><li>Added the `--share` flag for usage stats.</li><li>Added footer links on the web pages and refreshed vibestats branding docs.</li></ul></article><article id="v1.0.4" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.4</span><time dateTime="2025-12-31T02:44:54.023Z">Dec 31, 2025</time></div><h2>Domain and filtering cleanup</h2><p>Early polish release after the rename to vibestats.</p></header><ul class="changelog-highlights"><li>Updated URLs to `vibestats.wolfai.dev`.</li><li>Filtered synthetic models out of user-facing output.</li></ul></article><article id="v1.0.3" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.3</span><time dateTime="2025-12-31T02:38:29.421Z">Dec 31, 2025</time></div><h2>Sparkle logo and CLI typing animation</h2><p>Added some of the first branded UI details to the web experience.</p></header><ul class="changelog-highlights"><li>Introduced the sparkle logo treatment and command typing animation on the landing page.</li></ul></article><article id="v1.0.2" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.2</span><time dateTime="2025-12-31T02:36:05.926Z">Dec 31, 2025</time></div><h2>Token counting accuracy</h2><p>Corrected the early CLI math so totals lined up with the reference tooling.</p></header><ul class="changelog-highlights"><li>Matched token counting more closely to ccusage.</li></ul></article><article id="v1.0.1" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.1</span><time dateTime="2025-12-31T02:33:12.494Z">Dec 31, 2025</time></div><h2>Launch UI refresh</h2><p>Quick visual polish pass right after the initial release.</p></header><ul class="changelog-highlights"><li>Refined the web UI with a sleeker launch look.</li></ul></article><article id="v1.0.0" class="changelog-entry"><header class="changelog-entry-header"><div><span class="changelog-version">v<!-- -->1.0.0</span><time dateTime="2025-12-31T02:29:53.642Z">Dec 31, 2025</time></div><h2>Initial release</h2><p>The first public vibestats package, launched as Claude Code Wrapped.</p></header><ul class="changelog-highlights"><li>Shipped the initial Claude Code Wrapped CLI and web experience.</li></ul></article></div></div></section></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-175b2f5685d7557b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7437,[\"177\",\"static/chunks/app/layout-6ebd9b17af55ec02.js\"],\"\"]\n3:I[5965,[],\"\"]\n4:I[3609,[],\"\"]\n5:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"679\",\"static/chunks/app/changelog/page-5d0587c1d5910e68.js\"],\"\"]\nb:I[2207,[],\"\"]\n:HL[\"/_next/static/css/335de1248158d380.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"gPirvBMhpRSdtR0tsMj2H\",\"p\":\"\",\"c\":[\"\",\"changelog\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"changelog\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/335de1248158d380.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-config\",\"strategy\":\"beforeInteractive\",\"children\":\"window.WOLF_ANALYTICS_CONFIG = {\\\"apiUrl\\\":\\\"https://analapi.wolfai.dev\\\",\\\"projectApiKey\\\":\\\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\\\",\\\"mode\\\":\\\"intl\\\",\\\"sourceApp\\\":\\\"vibestats\\\"};\"}],[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-script\",\"src\":\"https://analytics.wolfai.dev/wolf-analytics.min.js\",\"strategy\":\"beforeInteractive\"}]]}],[\"$\",\"body\",null,{\"className\":\"antialiased min-h-screen bg-background text-foreground\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"changelog\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"main\",null,{\"className\":\"changelog-page\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"CollectionPage\\\",\\\"name\\\":\\\"vibestats changelog\\\",\\\"description\\\":\\\"Release notes for vibestats CLI and web changes.\\\",\\\"url\\\":\\\"https://vibestats.wolfai.dev/changelog\\\",\\\"numberOfItems\\\":43}\"}}],[\"$\",\"section\",null,{\"className\":\"changelog-hero\",\"aria-labelledby\":\"changelog-title\",\"children\":[[\"$\",\"div\",null,{\"className\":\"changelog-hero-copy\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"changelog-nav\",\"aria-label\":\"Primary\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"/\",\"children\":\"Usage\"}],[\"$\",\"$L5\",null,{\"href\":\"/wrapped\",\"children\":\"Wrapped\"}],[\"$\",\"$L5\",null,{\"href\":\"/activity\",\"children\":\"Activity\"}]]}],[\"$\",\"p\",null,{\"className\":\"changelog-label\",\"children\":\"Release log\"}],[\"$\",\"h1\",null,{\"id\":\"changelog-title\",\"children\":\"Every vibestats ship, in one place.\"}],[\"$\",\"p\",null,{\"className\":\"changelog-lede\",\"children\":\"CLI fixes, web changes, model support, and migration notes. Written for people who want the diff without reading the diff.\"}],[\"$\",\"div\",null,{\"className\":\"changelog-actions\",\"children\":[[\"$\",\"a\",null,{\"href\":\"#v1.4.1\",\"className\":\"changelog-button\",\"children\":\"Latest release\"}],[\"$\",\"a\",null,{\"href\":\"#release-history\",\"className\":\"changelog-link\",\"children\":\"Browse history\"}]]}]]}],[\"$\",\"aside\",null,{\"className\":\"changelog-terminal\",\"aria-label\":\"Latest changelog status\",\"children\":[[\"$\",\"div\",null,{\"className\":\"changelog-terminal-bar\",\"children\":[[\"$\",\"span\",null,{}],[\"$\",\"span\",null,{}],[\"$\",\"span\",null,{}]]}],[\"$\",\"div\",null,{\"className\":\"changelog-terminal-body\",\"children\":[[\"$\",\"p\",null,{\"children\":[[\"$\",\"span\",null,{\"children\":\"$$\"}],\" npx vibestats --version\"]}],[\"$\",\"strong\",null,{\"children\":[\"v\",\"1.4.1\"]}],[\"$\",\"p\",null,{\"children\":[[\"$\",\"span\",null,{\"children\":\"$$\"}],\" open /changelog#\",\"v1.4.1\"]}],[\"$\",\"small\",null,{\"children\":\"Apr 24, 2026\"}]]}],[\"$\",\"img\",null,{\"src\":\"https://images.unsplash.com/photo-1515879218367-8466d910aaa4?auto=format\u0026fit=crop\u0026w=900\u0026q=80\",\"alt\":\"A laptop showing source code in a dark editor\"}]]}]]}],\"$L6\",\"$L7\",\"$L8\"]}],null,\"$L9\"]}],{},null,false]},null,false]},null,false],\"$La\",false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"23:I[496,[],\"OutletBoundary\"]\n25:I[3737,[],\"AsyncMetadataOutlet\"]\n27:I[496,[],\"ViewportBoundary\"]\n29:I[496,[],\"MetadataBoundary\"]\n2a:\"$Sreact.suspense\"\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"section\",null,{\"className\":\"changelog-metrics\",\"aria-label\":\"Changelog summary\",\"children\":[[\"$\",\"article\",null,{\"children\":[[\"$\",\"span\",null,{\"children\":\"Latest\"}],[\"$\",\"strong\",null,{\"children\":[\"v\",\"1.4.1\"]}],[\"$\",\"p\",null,{\"children\":\"Dashboard port-conflict fix\"}]]}],[\"$\",\"article\",null,{\"children\":[[\"$\",\"span\",null,{\"children\":\"Entries\"}],[\"$\",\"strong\",null,{\"children\":43}],[\"$\",\"p\",null,{\"children\":\"Public releases tracked from package history.\"}]]}],[\"$\",\"article\",null,{\"children\":[[\"$\",\"span\",null,{\"children\":\"Since\"}],[\"$\",\"strong\",null,{\"children\":\"Dec 31\"}],[\"$\",\"p\",null,{\"children\":\"Launch-era notes stay visible for debugging old installs.\"}]]}],[\"$\",\"article\",null,{\"children\":[[\"$\",\"span\",null,{\"children\":\"Current year\"}],[\"$\",\"strong\",null,{\"children\":\"2026\"}],[\"$\",\"p\",null,{\"children\":[4,\" recent releases sit at the top.\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"7:[\"$\",\"section\",null,{\"className\":\"changelog-featured\",\"aria-labelledby\":\"latest-window-title\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"changelog-label\",\"children\":\"Current window\"}],[\"$\",\"h2\",null,{\"id\":\"latest-window-title\",\"children\":\"Recent work\"}],[\"$\",\"p\",null,{\"children\":\"The top releases stay expanded so new CLI behavior, model naming, and hosted page changes are easy to scan.\"}]]}],[\"$\",\"div\",null,{\"className\":\"changelog-featured-list\",\"children\":[[\"$\",\"a\",\"1.4.1\",{\"href\":\"#v1.4.1\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"v\",\"1.4.1\"]}],[\"$\",\"strong\",null,{\"children\":\"Dashboard port-conflict fix\"}],[\"$\",\"small\",null,{\"children\":\"Apr 24\"}]]}],[\"$\",\"a\",\"1.4.0\",{\"href\":\"#v1.4.0\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"v\",\"1.4.0\"]}],[\"$\",\"strong\",null,{\"children\":\"Local web dashboard\"}],[\"$\",\"small\",null,{\"children\":\"Apr 23\"}]]}],[\"$\",\"a\",\"1.3.14\",{\"href\":\"#v1.3.14\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"v\",\"1.3.14\"]}],[\"$\",\"strong\",null,{\"children\":\"Persistent usage cache\"}],[\"$\",\"small\",null,{\"children\":\"Apr 20\"}]]}],[\"$\",\"a\",\"1.3.13\",{\"href\":\"#v1.3.13\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"v\",\"1.3.13\"]}],[\"$\",\"strong\",null,{\"children\":\"Usage command aliases\"}],[\"$\",\"small\",null,{\"children\":\"Apr 18\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"section\",null,{\"id\":\"release-history\",\"className\":\"changelog-history\",\"aria-label\":\"Release history\",\"children\":[[\"$\",\"div\",\"2026\",{\"className\":\"changelog-year-group\",\"children\":[[\"$\",\"div\",null,{\"className\":\"changelog-year\",\"children\":[\"$\",\"span\",null,{\"children\":\"2026\"}]}],[\"$\",\"div\",null,{\"className\":\"changelog-entry-list\",\"children\":[[\"$\",\"article\",\"1.4.1\",{\"id\":\"v1.4.1\",\"className\":\"changelog-entry is-recent\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.4.1\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-24T00:00:00.000Z\",\"children\":\"Apr 24, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Dashboard port-conflict fix\"}],[\"$\",\"p\",null,{\"children\":\"Fixed --dashboard silently claiming a port already taken by another local Node server on macOS.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"findFreePort now connect-probes each candidate before binding, catching the macOS IPv6-dual-stack quirk where a second loopback bind succeeds but connections land on the first listener.\",{\"children\":\"findFreePort now connect-probes each candidate before binding, catching the macOS IPv6-dual-stack quirk where a second loopback bind succeeds but connections land on the first listener.\"}],[\"$\",\"li\",\"Dashboard skips cleanly to the next free port (e.g. 8081) when 8080 is already occupied by another dev server.\",{\"children\":\"Dashboard skips cleanly to the next free port (e.g. 8081) when 8080 is already occupied by another dev server.\"}]]}]]}],[\"$\",\"article\",\"1.4.0\",{\"id\":\"v1.4.0\",\"className\":\"changelog-entry is-recent\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.4.0\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-23T00:00:00.000Z\",\"children\":\"Apr 23, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Local web dashboard\"}],[\"$\",\"p\",null,{\"children\":\"Added a local web dashboard for exploring usage stats, activity heatmaps, and wrapped summaries all in one place.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Launched with --dashboard flag which spins up a local server, opens the browser, and exits cleanly on Ctrl+C.\",{\"children\":\"Launched with --dashboard flag which spins up a local server, opens the browser, and exits cleanly on Ctrl+C.\"}],[\"$\",\"li\",\"Dashboard integrates usage stats, activity heatmaps, and wrapped summaries in an interactive web interface — fully offline against local JSONL data.\",{\"children\":\"Dashboard integrates usage stats, activity heatmaps, and wrapped summaries in an interactive web interface — fully offline against local JSONL data.\"}],[\"$\",\"li\",\"Supports all existing CLI filters (date ranges, models, sources) from the web interface.\",{\"children\":\"Supports all existing CLI filters (date ranges, models, sources) from the web interface.\"}]]}]]}],[\"$\",\"article\",\"1.3.14\",{\"id\":\"v1.3.14\",\"className\":\"changelog-entry is-recent\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.14\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-20T16:38:20.355Z\",\"children\":\"Apr 20, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Persistent usage cache\"}],[\"$\",\"p\",null,{\"children\":\"Added a local persistent cache so repeated CLI stats commands reuse unchanged usage sources while keeping refresh and bypass controls available.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Repeated usage, activity, wrapped, Codex, and combined stats runs now reuse cached file-level parses when source fingerprints are unchanged.\",{\"children\":\"Repeated usage, activity, wrapped, Codex, and combined stats runs now reuse cached file-level parses when source fingerprints are unchanged.\"}],\"$Lc\",\"$Ld\"]}]]}],\"$Le\",\"$Lf\",\"$L10\",\"$L11\",\"$L12\",\"$L13\",\"$L14\",\"$L15\",\"$L16\",\"$L17\",\"$L18\",\"$L19\",\"$L1a\",\"$L1b\",\"$L1c\",\"$L1d\",\"$L1e\",\"$L1f\",\"$L20\",\"$L21\"]}]]}],\"$L22\"]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"$L23\",null,{\"children\":[\"$L24\",[\"$\",\"$L25\",null,{\"promise\":\"$@26\"}]]}]\na:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L27\",null,{\"children\":\"$L28\"}],null],[\"$\",\"$L29\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$2a\",null,{\"fallback\":null,\"children\":\"$L2b\"}]}]}]]}]\n"])</script><script>self.__next_f.push([1,"c:[\"$\",\"li\",\"Added --no-cache and --refresh-cache for one-off bypasses or forced cache rebuilds.\",{\"children\":\"Added --no-cache and --refresh-cache for one-off bypasses or forced cache rebuilds.\"}]\nd:[\"$\",\"li\",\"Cache invalidation tracks Claude JSONL, Codex sessions, Factory pairs, and OpenCode database WAL files while using atomic best-effort writes.\",{\"children\":\"Cache invalidation tracks Claude JSONL, Codex sessions, Factory pairs, and OpenCode database WAL files while using atomic best-effort writes.\"}]\n"])</script><script>self.__next_f.push([1,"e:[\"$\",\"article\",\"1.3.13\",{\"id\":\"v1.3.13\",\"className\":\"changelog-entry is-recent\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.13\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-18T12:40:17.903Z\",\"children\":\"Apr 18, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Usage command aliases\"}],[\"$\",\"p\",null,{\"children\":\"Made live limit commands easier to discover by routing bare usage scopes to the same local limit view and adding help for unknown commands.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Bare usage scopes such as usage all and usage codex now open the local live limit view unless stats flags are provided.\",{\"children\":\"Bare usage scopes such as usage all and usage codex now open the local live limit view unless stats flags are provided.\"}],[\"$\",\"li\",\"Usage stats flags such as total, daily, and since still keep the token usage table behavior for combined or Codex-only stats.\",{\"children\":\"Usage stats flags such as total, daily, and since still keep the token usage table behavior for combined or Codex-only stats.\"}],[\"$\",\"li\",\"Unknown positional commands now exit with a concise help message instead of silently scanning usage data.\",{\"children\":\"Unknown positional commands now exit with a concise help message instead of silently scanning usage data.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"article\",\"1.3.12\",{\"id\":\"v1.3.12\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.12\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-18T12:29:52.114Z\",\"children\":\"Apr 18, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Local usage limits\"}],[\"$\",\"p\",null,{\"children\":\"Added local CLI limit views for Claude and Codex with provider-colored progress bars and weekly pace signals.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added limits commands for Claude, Codex, and combined local rate-limit snapshots without provider API keys.\",{\"children\":\"Added limits commands for Claude, Codex, and combined local rate-limit snapshots without provider API keys.\"}],[\"$\",\"li\",\"Claude usage now reads the interactive usage view through a temporary tmux session and cleans it up after capture.\",{\"children\":\"Claude usage now reads the interactive usage view through a temporary tmux session and cleans it up after capture.\"}],[\"$\",\"li\",\"Codex limits use the local app-server path and render alongside Claude with blue and green progress bars plus reserve or deficit pace output.\",{\"children\":\"Codex limits use the local app-server path and render alongside Claude with blue and green progress bars plus reserve or deficit pace output.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"10:[\"$\",\"article\",\"1.3.11\",{\"id\":\"v1.3.11\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.11\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-17T09:03:48.174Z\",\"children\":\"Apr 17, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Opus 4.7 model labels\"}],[\"$\",\"p\",null,{\"children\":\"Updated model handling for the latest Opus release and added a Claude-only family filter.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Generic Opus usage now displays as Opus 4.7 while existing Opus 4.6 usage remains versioned separately.\",{\"children\":\"Generic Opus usage now displays as Opus 4.7 while existing Opus 4.6 usage remains versioned separately.\"}],[\"$\",\"li\",\"Added the o47 share token so CLI-generated links and hosted pages preserve the new Opus label.\",{\"children\":\"Added the o47 share token so CLI-generated links and hosted pages preserve the new Opus label.\"}],[\"$\",\"li\",\"Added a Claude family filter alongside the existing Kimi and MiniMax filters.\",{\"children\":\"Added a Claude family filter alongside the existing Kimi and MiniMax filters.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"article\",\"1.3.10\",{\"id\":\"v1.3.10\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.10\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-03T22:24:21.337Z\",\"children\":\"Apr 4, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Kimi and MiniMax usage filters\"}],[\"$\",\"p\",null,{\"children\":\"Added first-class family filters for Kimi and MiniMax across usage, wrapped, activity, and share output.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added `--kimi` and `--minimax` filters that narrow local usage stats to just those model families across Claude-compatible, OpenCode, Factory, and Codex-backed sources.\",{\"children\":\"Added `--kimi` and `--minimax` filters that narrow local usage stats to just those model families across Claude-compatible, OpenCode, Factory, and Codex-backed sources.\"}],[\"$\",\"li\",\"Normalized Kimi-code and MiniMax-code aliases so local model labels and shared pages stay consistent.\",{\"children\":\"Normalized Kimi-code and MiniMax-code aliases so local model labels and shared pages stay consistent.\"}],[\"$\",\"li\",\"Extended the web share and legacy views so filtered stats render with family-specific titles instead of generic Claude/Codex labels.\",{\"children\":\"Extended the web share and legacy views so filtered stats render with family-specific titles instead of generic Claude/Codex labels.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"12:[\"$\",\"article\",\"1.3.9\",{\"id\":\"v1.3.9\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.9\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-03-30T15:47:05.000Z\",\"children\":\"Mar 30, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"MiniMax and Kimi multi-source stats\"}],[\"$\",\"p\",null,{\"children\":\"Expanded Claude-compatible ingestion beyond raw Claude JSONL so MiniMax and Kimi usage now lands correctly in usage tables, wrapped stats, and hosted shares.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added local ingestion from Claude projects, OpenCode, and Droid/Factory sessions instead of relying on just one Claude-compatible store.\",{\"children\":\"Added local ingestion from Claude projects, OpenCode, and Droid/Factory sessions instead of relying on just one Claude-compatible store.\"}],[\"$\",\"li\",\"Fixed the Claude-compatible dedup logic that was dropping later usage-bearing assistant events and undercounting MiniMax and Kimi tokens.\",{\"children\":\"Fixed the Claude-compatible dedup logic that was dropping later usage-bearing assistant events and undercounting MiniMax and Kimi tokens.\"}],[\"$\",\"li\",\"Applied official routed pricing for Fireworks Kimi K2.5 Turbo and Fireworks MiniMax M2 family rates so the new models contribute real cost instead of $0.\",{\"children\":\"Applied official routed pricing for Fireworks Kimi K2.5 Turbo and Fireworks MiniMax M2 family rates so the new models contribute real cost instead of $0.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"article\",\"1.3.8\",{\"id\":\"v1.3.8\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.8\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-03-23T18:05:36.216Z\",\"children\":\"Mar 23, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Subagent-aware stats and Claude diagnostics\"}],[\"$\",\"p\",null,{\"children\":\"Fixed the biggest stats correctness issue in the CLI by separating canonical main sessions from subagents while keeping token and cost totals intact.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Claude and Codex session counts now distinguish main sessions from subagents instead of inflating headline session totals.\",{\"children\":\"Claude and Codex session counts now distinguish main sessions from subagents instead of inflating headline session totals.\"}],[\"$\",\"li\",\"Added `--claude-system` and `--claude-limits` commands for inspecting `~/.claude.json`, `~/.claude/usage-data`, cache freshness, and local rate-limit signals.\",{\"children\":\"Added `--claude-system` and `--claude-limits` commands for inspecting `~/.claude.json`, `~/.claude/usage-data`, cache freshness, and local rate-limit signals.\"}],[\"$\",\"li\",\"Refined the web share surfaces again with restored legacy usage/wrapped balance, tighter activity hover layout, and cleaner host-aware share behavior.\",{\"children\":\"Refined the web share surfaces again with restored legacy usage/wrapped balance, tighter activity hover layout, and cleaner host-aware share behavior.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"14:[\"$\",\"article\",\"1.3.7\",{\"id\":\"v1.3.7\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.7\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-03-19T11:49:20.128Z\",\"children\":\"Mar 19, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Web-hosted share URLs\"}],[\"$\",\"p\",null,{\"children\":\"Shifted the CLI to emit share links that stay on the vibestats web host instead of exposing backend endpoints.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"CLI share output now prefers user-facing web URLs.\",{\"children\":\"CLI share output now prefers user-facing web URLs.\"}],[\"$\",\"li\",\"Prepared the ground for the later share-page visual cleanups and host redirect fixes.\",{\"children\":\"Prepared the ground for the later share-page visual cleanups and host redirect fixes.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"article\",\"1.3.6\",{\"id\":\"v1.3.6\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.6\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-03-19T11:35:46.961Z\",\"children\":\"Mar 19, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Share publishing stabilisation\"}],[\"$\",\"p\",null,{\"children\":\"Cleaned up release metadata and fixed the publishing path for vibestats shares.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Resolved share publishing failures that could break generated share pages.\",{\"children\":\"Resolved share publishing failures that could break generated share pages.\"}],[\"$\",\"li\",\"Tightened release metadata so the CLI and hosted share flow stayed in sync.\",{\"children\":\"Tightened release metadata so the CLI and hosted share flow stayed in sync.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"16:[\"$\",\"article\",\"1.3.5\",{\"id\":\"v1.3.5\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.5\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-03-14T21:33:15.201Z\",\"children\":\"Mar 14, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Activity heatmap and hosted sharing\"}],[\"$\",\"p\",null,{\"children\":\"Introduced the bigger second wave of web functionality: activity graphs, richer share artifacts, and deployment support.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added the GitHub-style activity heatmap view.\",{\"children\":\"Added the GitHub-style activity heatmap view.\"}],[\"$\",\"li\",\"Introduced the share artifact system and hosted share pages.\",{\"children\":\"Introduced the share artifact system and hosted share pages.\"}],[\"$\",\"li\",\"Added Docker deployment support for the web app.\",{\"children\":\"Added Docker deployment support for the web app.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"17:[\"$\",\"article\",\"1.3.4\",{\"id\":\"v1.3.4\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.4\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-03-06T14:04:12.988Z\",\"children\":\"Mar 6, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Model naming cleanup\"}],[\"$\",\"p\",null,{\"children\":\"Polished model naming and filtering so the Claude and Codex views read like product names instead of raw internals.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Fixed Sonnet 4.6 to show the proper display name instead of a generic `Sonnet` label.\",{\"children\":\"Fixed Sonnet 4.6 to show the proper display name instead of a generic `Sonnet` label.\"}],[\"$\",\"li\",\"Filtered GPT-family models out of the Claude-only presentation and tightened footer copy.\",{\"children\":\"Filtered GPT-family models out of the Claude-only presentation and tightened footer copy.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"18:[\"$\",\"article\",\"1.3.3\",{\"id\":\"v1.3.3\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.3\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-02-14T15:14:59.930Z\",\"children\":\"Feb 14, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Codex names in share UI\"}],[\"$\",\"p\",null,{\"children\":\"Made the hosted share pages understand and render Codex model names correctly.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Web share UI now shows Codex model display names instead of awkward raw identifiers.\",{\"children\":\"Web share UI now shows Codex model display names instead of awkward raw identifiers.\"}],[\"$\",\"li\",\"Synced the CLI package metadata for the 1.3.3 line.\",{\"children\":\"Synced the CLI package metadata for the 1.3.3 line.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"19:[\"$\",\"article\",\"1.3.2\",{\"id\":\"v1.3.2\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.2\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-02-12T20:57:21.735Z\",\"children\":\"Feb 12, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Release metadata sync\"}],[\"$\",\"p\",null,{\"children\":\"Small release to align package metadata and published versioning.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Synced package metadata to the intended release state.\",{\"children\":\"Synced package metadata to the intended release state.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"article\",\"1.3.1\",{\"id\":\"v1.3.1\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.1\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-02-12T20:56:49.962Z\",\"children\":\"Feb 12, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Full GPT-5.x Codex variant support\"}],[\"$\",\"p\",null,{\"children\":\"Expanded Codex model detection so the CLI recognizes the broader GPT-5.3, 5.2, and 5.1 Codex variant set cleanly.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added support for GPT-5.3, GPT-5.2, and GPT-5.1 Codex naming variants.\",{\"children\":\"Added support for GPT-5.3, GPT-5.2, and GPT-5.1 Codex naming variants.\"}],[\"$\",\"li\",\"Reduced raw-model fallbacks for Codex users.\",{\"children\":\"Reduced raw-model fallbacks for Codex users.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1b:[\"$\",\"article\",\"1.3.0\",{\"id\":\"v1.3.0\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.3.0\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-02-12T18:42:28.868Z\",\"children\":\"Feb 12, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Rolling windows for usage views\"}],[\"$\",\"p\",null,{\"children\":\"Added a cleaner way to inspect recent usage windows directly from the CLI.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added `--last N` date-window support for usage queries.\",{\"children\":\"Added `--last N` date-window support for usage queries.\"}],[\"$\",\"li\",\"Started the 1.3 release line with a more flexible usage-report workflow.\",{\"children\":\"Started the 1.3 release line with a more flexible usage-report workflow.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1c:[\"$\",\"article\",\"1.2.0\",{\"id\":\"v1.2.0\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.2.0\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-02-05T22:25:39.749Z\",\"children\":\"Feb 5, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"New model support\"}],[\"$\",\"p\",null,{\"children\":\"Expanded model awareness for the newer Claude and Codex-era releases.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added Opus 4.6 and GPT-5.3 model support.\",{\"children\":\"Added Opus 4.6 and GPT-5.3 model support.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1d:[\"$\",\"article\",\"1.1.0\",{\"id\":\"v1.1.0\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.1.0\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-01-24T21:34:22.350Z\",\"children\":\"Jan 24, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Project and session drill-downs\"}],[\"$\",\"p\",null,{\"children\":\"Made the CLI much more useful for day-to-day debugging by adding finer filters and a stronger landing-page presentation.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added `--project` and `--sessions` flags for per-project and per-chat breakdowns.\",{\"children\":\"Added `--project` and `--sessions` flags for per-project and per-chat breakdowns.\"}],[\"$\",\"li\",\"Added interactive visual effects to the landing pages.\",{\"children\":\"Added interactive visual effects to the landing pages.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"article\",\"1.0.23\",{\"id\":\"v1.0.23\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.23\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-01-01T23:44:04.846Z\",\"children\":\"Jan 2, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Local timezone grouping\"}],[\"$\",\"p\",null,{\"children\":\"Corrected date bucketing so activity follows the user's local day instead of UTC rollover edges.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Switched usage grouping from UTC date boundaries to local timezone-aware grouping.\",{\"children\":\"Switched usage grouping from UTC date boundaries to local timezone-aware grouping.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1f:[\"$\",\"article\",\"1.0.22\",{\"id\":\"v1.0.22\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.22\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-01-01T14:45:02.941Z\",\"children\":\"Jan 1, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Async loading and tier sorting\"}],[\"$\",\"p\",null,{\"children\":\"Improved the CLI feel for larger histories by making loading more responsive and model ordering more intuitive.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added async file loading with an animated spinner.\",{\"children\":\"Added async file loading with an animated spinner.\"}],[\"$\",\"li\",\"Sorted Claude models by tier priority, keeping Opus above Sonnet and Haiku.\",{\"children\":\"Sorted Claude models by tier priority, keeping Opus above Sonnet and Haiku.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"20:[\"$\",\"article\",\"1.0.21\",{\"id\":\"v1.0.21\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.21\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-01-01T13:51:43.981Z\",\"children\":\"Jan 1, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Launch-day packaging refresh\"}],[\"$\",\"p\",null,{\"children\":\"Small republish in the middle of the loading and spinner rollout.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Stability release during the spinner/loading iteration cycle.\",{\"children\":\"Stability release during the spinner/loading iteration cycle.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"21:[\"$\",\"article\",\"1.0.20\",{\"id\":\"v1.0.20\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.20\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2026-01-01T13:44:50.941Z\",\"children\":\"Jan 1, 2026\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Launch-day packaging refresh\"}],[\"$\",\"p\",null,{\"children\":\"Another small republish while the CLI loading experience was being tuned.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Intermediate release to keep the rollout moving during rapid CLI UX iteration.\",{\"children\":\"Intermediate release to keep the rollout moving during rapid CLI UX iteration.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"22:[\"$\",\"div\",\"2025\",{\"className\":\"changelog-year-group\",\"children\":[[\"$\",\"div\",null,{\"className\":\"changelog-year\",\"children\":[\"$\",\"span\",null,{\"children\":\"2025\"}]}],[\"$\",\"div\",null,{\"className\":\"changelog-entry-list\",\"children\":[[\"$\",\"article\",\"1.0.19\",{\"id\":\"v1.0.19\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.19\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T16:41:21.234Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"TTY-safe spinner behaviour\"}],[\"$\",\"p\",null,{\"children\":\"Hardened the spinner logic so it still animates in more terminal environments.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Forced spinner animation regardless of TTY detection quirks.\",{\"children\":\"Forced spinner animation regardless of TTY detection quirks.\"}]]}]]}],[\"$\",\"article\",\"1.0.18\",{\"id\":\"v1.0.18\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.18\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T16:16:38.013Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Single-line spinner compatibility\"}],[\"$\",\"p\",null,{\"children\":\"Reduced spinner complexity to improve terminal compatibility.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Simplified the spinner to a single-line presentation for better compatibility.\",{\"children\":\"Simplified the spinner to a single-line presentation for better compatibility.\"}]]}]]}],[\"$\",\"article\",\"1.0.17\",{\"id\":\"v1.0.17\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.17\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T16:13:48.403Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Spinner hold-time fix\"}],[\"$\",\"p\",null,{\"children\":\"Kept the spinner visible long enough to feel intentional during quick operations.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Forced a full minimum spinner display interval.\",{\"children\":\"Forced a full minimum spinner display interval.\"}]]}]]}],[\"$\",\"article\",\"1.0.16\",{\"id\":\"v1.0.16\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.16\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T16:10:19.142Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Spinner dwell polish\"}],[\"$\",\"p\",null,{\"children\":\"Smoothed the loading motion so it no longer flashes by too quickly.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added a minimum display time for the animated spinner.\",{\"children\":\"Added a minimum display time for the animated spinner.\"}]]}]]}],[\"$\",\"article\",\"1.0.15\",{\"id\":\"v1.0.15\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.15\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T16:07:24.669Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Immediate spinner render\"}],[\"$\",\"p\",null,{\"children\":\"Removed the awkward initial pause before the loading indicator appeared.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Rendered the first spinner frame immediately.\",{\"children\":\"Rendered the first spinner frame immediately.\"}]]}]]}],[\"$\",\"article\",\"1.0.14\",{\"id\":\"v1.0.14\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.14\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T16:05:34.922Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Wave spinner\"}],[\"$\",\"p\",null,{\"children\":\"Introduced the first branded CLI loading animation.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[\"$L2c\"]}]]}],\"$L2d\",\"$L2e\",\"$L2f\",\"$L30\",\"$L31\",\"$L32\",\"$L33\",\"$L34\",\"$L35\",\"$L36\",\"$L37\",\"$L38\",\"$L39\",\"$L3a\"]}]]}]\n"])</script><script>self.__next_f.push([1,"2c:[\"$\",\"li\",\"Added the VIBESTATS wave animation spinner.\",{\"children\":\"Added the VIBESTATS wave animation spinner.\"}]\n"])</script><script>self.__next_f.push([1,"2d:[\"$\",\"article\",\"1.0.13\",{\"id\":\"v1.0.13\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.13\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T15:13:13.358Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Wrapped URL polish\"}],[\"$\",\"p\",null,{\"children\":\"Cleaned up the wrapped share route and made the generated URL feel less brittle.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Fixed wrapped shares to use the `/wrapped/` path correctly.\",{\"children\":\"Fixed wrapped shares to use the `/wrapped/` path correctly.\"}],[\"$\",\"li\",\"Improved full share URL UX.\",{\"children\":\"Improved full share URL UX.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"2e:[\"$\",\"article\",\"1.0.12\",{\"id\":\"v1.0.12\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.12\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T12:06:52.537Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Orange share-link styling\"}],[\"$\",\"p\",null,{\"children\":\"Small presentation release focused on matching the vibestats visual language.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added orange styling to the usage share link.\",{\"children\":\"Added orange styling to the usage share link.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"2f:[\"$\",\"article\",\"1.0.11\",{\"id\":\"v1.0.11\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.11\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T12:00:39.053Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Raw model normalization\"}],[\"$\",\"p\",null,{\"children\":\"Reduced duplicate model rows caused by inconsistent raw IDs.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Normalized raw model IDs to prevent duplicate entries.\",{\"children\":\"Normalized raw model IDs to prevent duplicate entries.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"30:[\"$\",\"article\",\"1.0.10\",{\"id\":\"v1.0.10\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.10\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T11:58:11.448Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Parity fixes for usage decoding\"}],[\"$\",\"p\",null,{\"children\":\"Closed some of the biggest mismatches between vibestats, ccusage, and the web decoder.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Deduplicated messages to better match ccusage totals.\",{\"children\":\"Deduplicated messages to better match ccusage totals.\"}],[\"$\",\"li\",\"Added missing model-name mappings to the web decoder.\",{\"children\":\"Added missing model-name mappings to the web decoder.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"31:[\"$\",\"article\",\"1.0.9\",{\"id\":\"v1.0.9\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.9\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T11:47:26.814Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Historical stats-cache support\"}],[\"$\",\"p\",null,{\"children\":\"Added support for the Claude `stats-cache.json` path so older activity can be reconstructed more reliably.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Loaded historical usage from `stats-cache.json`.\",{\"children\":\"Loaded historical usage from `stats-cache.json`.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"32:[\"$\",\"article\",\"1.0.8\",{\"id\":\"v1.0.8\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.8\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T11:44:03.260Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Automatic long-range monthly view\"}],[\"$\",\"p\",null,{\"children\":\"Made longer windows easier to scan without requiring manual aggregation switches.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Automatically switched to monthly aggregation for long date ranges.\",{\"children\":\"Automatically switched to monthly aggregation for long date ranges.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"33:[\"$\",\"article\",\"1.0.7\",{\"id\":\"v1.0.7\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.7\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T11:37:34.504Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Codex session parsing fix\"}],[\"$\",\"p\",null,{\"children\":\"Brought Codex usage parsing in line with the real on-disk session format.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Fixed Codex usage parsing to match actual session files.\",{\"children\":\"Fixed Codex usage parsing to match actual session files.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"34:[\"$\",\"article\",\"1.0.6\",{\"id\":\"v1.0.6\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.6\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T03:23:02.722Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Share URL correctness fixes\"}],[\"$\",\"p\",null,{\"children\":\"Resolved two of the most obvious share-flow routing issues.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Fixed the shared usage window to show the last 31 days instead of the first 31.\",{\"children\":\"Fixed the shared usage window to show the last 31 days instead of the first 31.\"}],[\"$\",\"li\",\"Redirected usage shortlinks to `/` instead of `/wrapped`.\",{\"children\":\"Redirected usage shortlinks to `/` instead of `/wrapped`.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"35:[\"$\",\"article\",\"1.0.5\",{\"id\":\"v1.0.5\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.5\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T03:14:26.852Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Usage sharing foundations\"}],[\"$\",\"p\",null,{\"children\":\"Started the first real sharing workflow for usage reports and tightened the web chrome around it.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Added the `--share` flag for usage stats.\",{\"children\":\"Added the `--share` flag for usage stats.\"}],[\"$\",\"li\",\"Added footer links on the web pages and refreshed vibestats branding docs.\",{\"children\":\"Added footer links on the web pages and refreshed vibestats branding docs.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"36:[\"$\",\"article\",\"1.0.4\",{\"id\":\"v1.0.4\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.4\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T02:44:54.023Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Domain and filtering cleanup\"}],[\"$\",\"p\",null,{\"children\":\"Early polish release after the rename to vibestats.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Updated URLs to `vibestats.wolfai.dev`.\",{\"children\":\"Updated URLs to `vibestats.wolfai.dev`.\"}],[\"$\",\"li\",\"Filtered synthetic models out of user-facing output.\",{\"children\":\"Filtered synthetic models out of user-facing output.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"37:[\"$\",\"article\",\"1.0.3\",{\"id\":\"v1.0.3\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.3\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T02:38:29.421Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Sparkle logo and CLI typing animation\"}],[\"$\",\"p\",null,{\"children\":\"Added some of the first branded UI details to the web experience.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Introduced the sparkle logo treatment and command typing animation on the landing page.\",{\"children\":\"Introduced the sparkle logo treatment and command typing animation on the landing page.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"38:[\"$\",\"article\",\"1.0.2\",{\"id\":\"v1.0.2\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.2\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T02:36:05.926Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Token counting accuracy\"}],[\"$\",\"p\",null,{\"children\":\"Corrected the early CLI math so totals lined up with the reference tooling.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Matched token counting more closely to ccusage.\",{\"children\":\"Matched token counting more closely to ccusage.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"39:[\"$\",\"article\",\"1.0.1\",{\"id\":\"v1.0.1\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.1\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T02:33:12.494Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Launch UI refresh\"}],[\"$\",\"p\",null,{\"children\":\"Quick visual polish pass right after the initial release.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Refined the web UI with a sleeker launch look.\",{\"children\":\"Refined the web UI with a sleeker launch look.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"3a:[\"$\",\"article\",\"1.0.0\",{\"id\":\"v1.0.0\",\"className\":\"changelog-entry\",\"children\":[[\"$\",\"header\",null,{\"className\":\"changelog-entry-header\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"changelog-version\",\"children\":[\"v\",\"1.0.0\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-12-31T02:29:53.642Z\",\"children\":\"Dec 31, 2025\"}]]}],[\"$\",\"h2\",null,{\"children\":\"Initial release\"}],[\"$\",\"p\",null,{\"children\":\"The first public vibestats package, launched as Claude Code Wrapped.\"}]]}],[\"$\",\"ul\",null,{\"className\":\"changelog-highlights\",\"children\":[[\"$\",\"li\",\"Shipped the initial Claude Code Wrapped CLI and web experience.\",{\"children\":\"Shipped the initial Claude Code Wrapped CLI and web experience.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"28:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n24:null\n"])</script><script>self.__next_f.push([1,"26:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Changelog | vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Release history for vibestats across the CLI and hosted web experience.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,vibestats changelog,vibestats releases,Claude Code stats release notes\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev/changelog\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"Changelog | vibestats\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Release history for vibestats across the CLI and hosted web experience.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev/changelog\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"Changelog | vibestats\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"Release history for vibestats across the CLI and hosted web experience.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"2b:\"$26:metadata\"\n"])</script></body></html>
@@ -0,0 +1,60 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[7437,["177","static/chunks/app/layout-6ebd9b17af55ec02.js"],""]
3
+ 3:I[5965,[],""]
4
+ 4:I[3609,[],""]
5
+ 5:I[4816,["816","static/chunks/816-8960921093d57453.js","679","static/chunks/app/changelog/page-5d0587c1d5910e68.js"],""]
6
+ b:I[2207,[],""]
7
+ :HL["/_next/static/css/335de1248158d380.css","style"]
8
+ 0:{"P":null,"b":"gPirvBMhpRSdtR0tsMj2H","p":"","c":["","changelog"],"i":false,"f":[[["",{"children":["changelog",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/335de1248158d380.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{"children":[["$","$L2",null,{"id":"wolf-analytics-config","strategy":"beforeInteractive","children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};"}],["$","$L2",null,{"id":"wolf-analytics-script","src":"https://analytics.wolfai.dev/wolf-analytics.min.js","strategy":"beforeInteractive"}]]}],["$","body",null,{"className":"antialiased min-h-screen bg-background text-foreground","children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":["changelog",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","main",null,{"className":"changelog-page","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"CollectionPage\",\"name\":\"vibestats changelog\",\"description\":\"Release notes for vibestats CLI and web changes.\",\"url\":\"https://vibestats.wolfai.dev/changelog\",\"numberOfItems\":43}"}}],["$","section",null,{"className":"changelog-hero","aria-labelledby":"changelog-title","children":[["$","div",null,{"className":"changelog-hero-copy","children":[["$","nav",null,{"className":"changelog-nav","aria-label":"Primary","children":[["$","$L5",null,{"href":"/","children":"Usage"}],["$","$L5",null,{"href":"/wrapped","children":"Wrapped"}],["$","$L5",null,{"href":"/activity","children":"Activity"}]]}],["$","p",null,{"className":"changelog-label","children":"Release log"}],["$","h1",null,{"id":"changelog-title","children":"Every vibestats ship, in one place."}],["$","p",null,{"className":"changelog-lede","children":"CLI fixes, web changes, model support, and migration notes. Written for people who want the diff without reading the diff."}],["$","div",null,{"className":"changelog-actions","children":[["$","a",null,{"href":"#v1.4.1","className":"changelog-button","children":"Latest release"}],["$","a",null,{"href":"#release-history","className":"changelog-link","children":"Browse history"}]]}]]}],["$","aside",null,{"className":"changelog-terminal","aria-label":"Latest changelog status","children":[["$","div",null,{"className":"changelog-terminal-bar","children":[["$","span",null,{}],["$","span",null,{}],["$","span",null,{}]]}],["$","div",null,{"className":"changelog-terminal-body","children":[["$","p",null,{"children":[["$","span",null,{"children":"$$"}]," npx vibestats --version"]}],["$","strong",null,{"children":["v","1.4.1"]}],["$","p",null,{"children":[["$","span",null,{"children":"$$"}]," open /changelog#","v1.4.1"]}],["$","small",null,{"children":"Apr 24, 2026"}]]}],["$","img",null,{"src":"https://images.unsplash.com/photo-1515879218367-8466d910aaa4?auto=format&fit=crop&w=900&q=80","alt":"A laptop showing source code in a dark editor"}]]}]]}],"$L6","$L7","$L8"]}],null,"$L9"]}],{},null,false]},null,false]},null,false],"$La",false]],"m":"$undefined","G":["$b",[]],"s":false,"S":true}
9
+ 23:I[496,[],"OutletBoundary"]
10
+ 25:I[3737,[],"AsyncMetadataOutlet"]
11
+ 27:I[496,[],"ViewportBoundary"]
12
+ 29:I[496,[],"MetadataBoundary"]
13
+ 2a:"$Sreact.suspense"
14
+ 6:["$","section",null,{"className":"changelog-metrics","aria-label":"Changelog summary","children":[["$","article",null,{"children":[["$","span",null,{"children":"Latest"}],["$","strong",null,{"children":["v","1.4.1"]}],["$","p",null,{"children":"Dashboard port-conflict fix"}]]}],["$","article",null,{"children":[["$","span",null,{"children":"Entries"}],["$","strong",null,{"children":43}],["$","p",null,{"children":"Public releases tracked from package history."}]]}],["$","article",null,{"children":[["$","span",null,{"children":"Since"}],["$","strong",null,{"children":"Dec 31"}],["$","p",null,{"children":"Launch-era notes stay visible for debugging old installs."}]]}],["$","article",null,{"children":[["$","span",null,{"children":"Current year"}],["$","strong",null,{"children":"2026"}],["$","p",null,{"children":[4," recent releases sit at the top."]}]]}]]}]
15
+ 7:["$","section",null,{"className":"changelog-featured","aria-labelledby":"latest-window-title","children":[["$","div",null,{"children":[["$","p",null,{"className":"changelog-label","children":"Current window"}],["$","h2",null,{"id":"latest-window-title","children":"Recent work"}],["$","p",null,{"children":"The top releases stay expanded so new CLI behavior, model naming, and hosted page changes are easy to scan."}]]}],["$","div",null,{"className":"changelog-featured-list","children":[["$","a","1.4.1",{"href":"#v1.4.1","children":[["$","span",null,{"children":["v","1.4.1"]}],["$","strong",null,{"children":"Dashboard port-conflict fix"}],["$","small",null,{"children":"Apr 24"}]]}],["$","a","1.4.0",{"href":"#v1.4.0","children":[["$","span",null,{"children":["v","1.4.0"]}],["$","strong",null,{"children":"Local web dashboard"}],["$","small",null,{"children":"Apr 23"}]]}],["$","a","1.3.14",{"href":"#v1.3.14","children":[["$","span",null,{"children":["v","1.3.14"]}],["$","strong",null,{"children":"Persistent usage cache"}],["$","small",null,{"children":"Apr 20"}]]}],["$","a","1.3.13",{"href":"#v1.3.13","children":[["$","span",null,{"children":["v","1.3.13"]}],["$","strong",null,{"children":"Usage command aliases"}],["$","small",null,{"children":"Apr 18"}]]}]]}]]}]
16
+ 8:["$","section",null,{"id":"release-history","className":"changelog-history","aria-label":"Release history","children":[["$","div","2026",{"className":"changelog-year-group","children":[["$","div",null,{"className":"changelog-year","children":["$","span",null,{"children":"2026"}]}],["$","div",null,{"className":"changelog-entry-list","children":[["$","article","1.4.1",{"id":"v1.4.1","className":"changelog-entry is-recent","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.4.1"]}],["$","time",null,{"dateTime":"2026-04-24T00:00:00.000Z","children":"Apr 24, 2026"}]]}],["$","h2",null,{"children":"Dashboard port-conflict fix"}],["$","p",null,{"children":"Fixed --dashboard silently claiming a port already taken by another local Node server on macOS."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","findFreePort now connect-probes each candidate before binding, catching the macOS IPv6-dual-stack quirk where a second loopback bind succeeds but connections land on the first listener.",{"children":"findFreePort now connect-probes each candidate before binding, catching the macOS IPv6-dual-stack quirk where a second loopback bind succeeds but connections land on the first listener."}],["$","li","Dashboard skips cleanly to the next free port (e.g. 8081) when 8080 is already occupied by another dev server.",{"children":"Dashboard skips cleanly to the next free port (e.g. 8081) when 8080 is already occupied by another dev server."}]]}]]}],["$","article","1.4.0",{"id":"v1.4.0","className":"changelog-entry is-recent","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.4.0"]}],["$","time",null,{"dateTime":"2026-04-23T00:00:00.000Z","children":"Apr 23, 2026"}]]}],["$","h2",null,{"children":"Local web dashboard"}],["$","p",null,{"children":"Added a local web dashboard for exploring usage stats, activity heatmaps, and wrapped summaries all in one place."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Launched with --dashboard flag which spins up a local server, opens the browser, and exits cleanly on Ctrl+C.",{"children":"Launched with --dashboard flag which spins up a local server, opens the browser, and exits cleanly on Ctrl+C."}],["$","li","Dashboard integrates usage stats, activity heatmaps, and wrapped summaries in an interactive web interface — fully offline against local JSONL data.",{"children":"Dashboard integrates usage stats, activity heatmaps, and wrapped summaries in an interactive web interface — fully offline against local JSONL data."}],["$","li","Supports all existing CLI filters (date ranges, models, sources) from the web interface.",{"children":"Supports all existing CLI filters (date ranges, models, sources) from the web interface."}]]}]]}],["$","article","1.3.14",{"id":"v1.3.14","className":"changelog-entry is-recent","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.14"]}],["$","time",null,{"dateTime":"2026-04-20T16:38:20.355Z","children":"Apr 20, 2026"}]]}],["$","h2",null,{"children":"Persistent usage cache"}],["$","p",null,{"children":"Added a local persistent cache so repeated CLI stats commands reuse unchanged usage sources while keeping refresh and bypass controls available."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Repeated usage, activity, wrapped, Codex, and combined stats runs now reuse cached file-level parses when source fingerprints are unchanged.",{"children":"Repeated usage, activity, wrapped, Codex, and combined stats runs now reuse cached file-level parses when source fingerprints are unchanged."}],"$Lc","$Ld"]}]]}],"$Le","$Lf","$L10","$L11","$L12","$L13","$L14","$L15","$L16","$L17","$L18","$L19","$L1a","$L1b","$L1c","$L1d","$L1e","$L1f","$L20","$L21"]}]]}],"$L22"]}]
17
+ 9:["$","$L23",null,{"children":["$L24",["$","$L25",null,{"promise":"$@26"}]]}]
18
+ a:["$","$1","h",{"children":[null,[["$","$L27",null,{"children":"$L28"}],null],["$","$L29",null,{"children":["$","div",null,{"hidden":true,"children":["$","$2a",null,{"fallback":null,"children":"$L2b"}]}]}]]}]
19
+ c:["$","li","Added --no-cache and --refresh-cache for one-off bypasses or forced cache rebuilds.",{"children":"Added --no-cache and --refresh-cache for one-off bypasses or forced cache rebuilds."}]
20
+ d:["$","li","Cache invalidation tracks Claude JSONL, Codex sessions, Factory pairs, and OpenCode database WAL files while using atomic best-effort writes.",{"children":"Cache invalidation tracks Claude JSONL, Codex sessions, Factory pairs, and OpenCode database WAL files while using atomic best-effort writes."}]
21
+ e:["$","article","1.3.13",{"id":"v1.3.13","className":"changelog-entry is-recent","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.13"]}],["$","time",null,{"dateTime":"2026-04-18T12:40:17.903Z","children":"Apr 18, 2026"}]]}],["$","h2",null,{"children":"Usage command aliases"}],["$","p",null,{"children":"Made live limit commands easier to discover by routing bare usage scopes to the same local limit view and adding help for unknown commands."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Bare usage scopes such as usage all and usage codex now open the local live limit view unless stats flags are provided.",{"children":"Bare usage scopes such as usage all and usage codex now open the local live limit view unless stats flags are provided."}],["$","li","Usage stats flags such as total, daily, and since still keep the token usage table behavior for combined or Codex-only stats.",{"children":"Usage stats flags such as total, daily, and since still keep the token usage table behavior for combined or Codex-only stats."}],["$","li","Unknown positional commands now exit with a concise help message instead of silently scanning usage data.",{"children":"Unknown positional commands now exit with a concise help message instead of silently scanning usage data."}]]}]]}]
22
+ f:["$","article","1.3.12",{"id":"v1.3.12","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.12"]}],["$","time",null,{"dateTime":"2026-04-18T12:29:52.114Z","children":"Apr 18, 2026"}]]}],["$","h2",null,{"children":"Local usage limits"}],["$","p",null,{"children":"Added local CLI limit views for Claude and Codex with provider-colored progress bars and weekly pace signals."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added limits commands for Claude, Codex, and combined local rate-limit snapshots without provider API keys.",{"children":"Added limits commands for Claude, Codex, and combined local rate-limit snapshots without provider API keys."}],["$","li","Claude usage now reads the interactive usage view through a temporary tmux session and cleans it up after capture.",{"children":"Claude usage now reads the interactive usage view through a temporary tmux session and cleans it up after capture."}],["$","li","Codex limits use the local app-server path and render alongside Claude with blue and green progress bars plus reserve or deficit pace output.",{"children":"Codex limits use the local app-server path and render alongside Claude with blue and green progress bars plus reserve or deficit pace output."}]]}]]}]
23
+ 10:["$","article","1.3.11",{"id":"v1.3.11","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.11"]}],["$","time",null,{"dateTime":"2026-04-17T09:03:48.174Z","children":"Apr 17, 2026"}]]}],["$","h2",null,{"children":"Opus 4.7 model labels"}],["$","p",null,{"children":"Updated model handling for the latest Opus release and added a Claude-only family filter."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Generic Opus usage now displays as Opus 4.7 while existing Opus 4.6 usage remains versioned separately.",{"children":"Generic Opus usage now displays as Opus 4.7 while existing Opus 4.6 usage remains versioned separately."}],["$","li","Added the o47 share token so CLI-generated links and hosted pages preserve the new Opus label.",{"children":"Added the o47 share token so CLI-generated links and hosted pages preserve the new Opus label."}],["$","li","Added a Claude family filter alongside the existing Kimi and MiniMax filters.",{"children":"Added a Claude family filter alongside the existing Kimi and MiniMax filters."}]]}]]}]
24
+ 11:["$","article","1.3.10",{"id":"v1.3.10","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.10"]}],["$","time",null,{"dateTime":"2026-04-03T22:24:21.337Z","children":"Apr 4, 2026"}]]}],["$","h2",null,{"children":"Kimi and MiniMax usage filters"}],["$","p",null,{"children":"Added first-class family filters for Kimi and MiniMax across usage, wrapped, activity, and share output."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added `--kimi` and `--minimax` filters that narrow local usage stats to just those model families across Claude-compatible, OpenCode, Factory, and Codex-backed sources.",{"children":"Added `--kimi` and `--minimax` filters that narrow local usage stats to just those model families across Claude-compatible, OpenCode, Factory, and Codex-backed sources."}],["$","li","Normalized Kimi-code and MiniMax-code aliases so local model labels and shared pages stay consistent.",{"children":"Normalized Kimi-code and MiniMax-code aliases so local model labels and shared pages stay consistent."}],["$","li","Extended the web share and legacy views so filtered stats render with family-specific titles instead of generic Claude/Codex labels.",{"children":"Extended the web share and legacy views so filtered stats render with family-specific titles instead of generic Claude/Codex labels."}]]}]]}]
25
+ 12:["$","article","1.3.9",{"id":"v1.3.9","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.9"]}],["$","time",null,{"dateTime":"2026-03-30T15:47:05.000Z","children":"Mar 30, 2026"}]]}],["$","h2",null,{"children":"MiniMax and Kimi multi-source stats"}],["$","p",null,{"children":"Expanded Claude-compatible ingestion beyond raw Claude JSONL so MiniMax and Kimi usage now lands correctly in usage tables, wrapped stats, and hosted shares."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added local ingestion from Claude projects, OpenCode, and Droid/Factory sessions instead of relying on just one Claude-compatible store.",{"children":"Added local ingestion from Claude projects, OpenCode, and Droid/Factory sessions instead of relying on just one Claude-compatible store."}],["$","li","Fixed the Claude-compatible dedup logic that was dropping later usage-bearing assistant events and undercounting MiniMax and Kimi tokens.",{"children":"Fixed the Claude-compatible dedup logic that was dropping later usage-bearing assistant events and undercounting MiniMax and Kimi tokens."}],["$","li","Applied official routed pricing for Fireworks Kimi K2.5 Turbo and Fireworks MiniMax M2 family rates so the new models contribute real cost instead of $0.",{"children":"Applied official routed pricing for Fireworks Kimi K2.5 Turbo and Fireworks MiniMax M2 family rates so the new models contribute real cost instead of $0."}]]}]]}]
26
+ 13:["$","article","1.3.8",{"id":"v1.3.8","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.8"]}],["$","time",null,{"dateTime":"2026-03-23T18:05:36.216Z","children":"Mar 23, 2026"}]]}],["$","h2",null,{"children":"Subagent-aware stats and Claude diagnostics"}],["$","p",null,{"children":"Fixed the biggest stats correctness issue in the CLI by separating canonical main sessions from subagents while keeping token and cost totals intact."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Claude and Codex session counts now distinguish main sessions from subagents instead of inflating headline session totals.",{"children":"Claude and Codex session counts now distinguish main sessions from subagents instead of inflating headline session totals."}],["$","li","Added `--claude-system` and `--claude-limits` commands for inspecting `~/.claude.json`, `~/.claude/usage-data`, cache freshness, and local rate-limit signals.",{"children":"Added `--claude-system` and `--claude-limits` commands for inspecting `~/.claude.json`, `~/.claude/usage-data`, cache freshness, and local rate-limit signals."}],["$","li","Refined the web share surfaces again with restored legacy usage/wrapped balance, tighter activity hover layout, and cleaner host-aware share behavior.",{"children":"Refined the web share surfaces again with restored legacy usage/wrapped balance, tighter activity hover layout, and cleaner host-aware share behavior."}]]}]]}]
27
+ 14:["$","article","1.3.7",{"id":"v1.3.7","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.7"]}],["$","time",null,{"dateTime":"2026-03-19T11:49:20.128Z","children":"Mar 19, 2026"}]]}],["$","h2",null,{"children":"Web-hosted share URLs"}],["$","p",null,{"children":"Shifted the CLI to emit share links that stay on the vibestats web host instead of exposing backend endpoints."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","CLI share output now prefers user-facing web URLs.",{"children":"CLI share output now prefers user-facing web URLs."}],["$","li","Prepared the ground for the later share-page visual cleanups and host redirect fixes.",{"children":"Prepared the ground for the later share-page visual cleanups and host redirect fixes."}]]}]]}]
28
+ 15:["$","article","1.3.6",{"id":"v1.3.6","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.6"]}],["$","time",null,{"dateTime":"2026-03-19T11:35:46.961Z","children":"Mar 19, 2026"}]]}],["$","h2",null,{"children":"Share publishing stabilisation"}],["$","p",null,{"children":"Cleaned up release metadata and fixed the publishing path for vibestats shares."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Resolved share publishing failures that could break generated share pages.",{"children":"Resolved share publishing failures that could break generated share pages."}],["$","li","Tightened release metadata so the CLI and hosted share flow stayed in sync.",{"children":"Tightened release metadata so the CLI and hosted share flow stayed in sync."}]]}]]}]
29
+ 16:["$","article","1.3.5",{"id":"v1.3.5","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.5"]}],["$","time",null,{"dateTime":"2026-03-14T21:33:15.201Z","children":"Mar 14, 2026"}]]}],["$","h2",null,{"children":"Activity heatmap and hosted sharing"}],["$","p",null,{"children":"Introduced the bigger second wave of web functionality: activity graphs, richer share artifacts, and deployment support."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added the GitHub-style activity heatmap view.",{"children":"Added the GitHub-style activity heatmap view."}],["$","li","Introduced the share artifact system and hosted share pages.",{"children":"Introduced the share artifact system and hosted share pages."}],["$","li","Added Docker deployment support for the web app.",{"children":"Added Docker deployment support for the web app."}]]}]]}]
30
+ 17:["$","article","1.3.4",{"id":"v1.3.4","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.4"]}],["$","time",null,{"dateTime":"2026-03-06T14:04:12.988Z","children":"Mar 6, 2026"}]]}],["$","h2",null,{"children":"Model naming cleanup"}],["$","p",null,{"children":"Polished model naming and filtering so the Claude and Codex views read like product names instead of raw internals."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Fixed Sonnet 4.6 to show the proper display name instead of a generic `Sonnet` label.",{"children":"Fixed Sonnet 4.6 to show the proper display name instead of a generic `Sonnet` label."}],["$","li","Filtered GPT-family models out of the Claude-only presentation and tightened footer copy.",{"children":"Filtered GPT-family models out of the Claude-only presentation and tightened footer copy."}]]}]]}]
31
+ 18:["$","article","1.3.3",{"id":"v1.3.3","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.3"]}],["$","time",null,{"dateTime":"2026-02-14T15:14:59.930Z","children":"Feb 14, 2026"}]]}],["$","h2",null,{"children":"Codex names in share UI"}],["$","p",null,{"children":"Made the hosted share pages understand and render Codex model names correctly."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Web share UI now shows Codex model display names instead of awkward raw identifiers.",{"children":"Web share UI now shows Codex model display names instead of awkward raw identifiers."}],["$","li","Synced the CLI package metadata for the 1.3.3 line.",{"children":"Synced the CLI package metadata for the 1.3.3 line."}]]}]]}]
32
+ 19:["$","article","1.3.2",{"id":"v1.3.2","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.2"]}],["$","time",null,{"dateTime":"2026-02-12T20:57:21.735Z","children":"Feb 12, 2026"}]]}],["$","h2",null,{"children":"Release metadata sync"}],["$","p",null,{"children":"Small release to align package metadata and published versioning."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Synced package metadata to the intended release state.",{"children":"Synced package metadata to the intended release state."}]]}]]}]
33
+ 1a:["$","article","1.3.1",{"id":"v1.3.1","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.1"]}],["$","time",null,{"dateTime":"2026-02-12T20:56:49.962Z","children":"Feb 12, 2026"}]]}],["$","h2",null,{"children":"Full GPT-5.x Codex variant support"}],["$","p",null,{"children":"Expanded Codex model detection so the CLI recognizes the broader GPT-5.3, 5.2, and 5.1 Codex variant set cleanly."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added support for GPT-5.3, GPT-5.2, and GPT-5.1 Codex naming variants.",{"children":"Added support for GPT-5.3, GPT-5.2, and GPT-5.1 Codex naming variants."}],["$","li","Reduced raw-model fallbacks for Codex users.",{"children":"Reduced raw-model fallbacks for Codex users."}]]}]]}]
34
+ 1b:["$","article","1.3.0",{"id":"v1.3.0","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.3.0"]}],["$","time",null,{"dateTime":"2026-02-12T18:42:28.868Z","children":"Feb 12, 2026"}]]}],["$","h2",null,{"children":"Rolling windows for usage views"}],["$","p",null,{"children":"Added a cleaner way to inspect recent usage windows directly from the CLI."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added `--last N` date-window support for usage queries.",{"children":"Added `--last N` date-window support for usage queries."}],["$","li","Started the 1.3 release line with a more flexible usage-report workflow.",{"children":"Started the 1.3 release line with a more flexible usage-report workflow."}]]}]]}]
35
+ 1c:["$","article","1.2.0",{"id":"v1.2.0","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.2.0"]}],["$","time",null,{"dateTime":"2026-02-05T22:25:39.749Z","children":"Feb 5, 2026"}]]}],["$","h2",null,{"children":"New model support"}],["$","p",null,{"children":"Expanded model awareness for the newer Claude and Codex-era releases."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added Opus 4.6 and GPT-5.3 model support.",{"children":"Added Opus 4.6 and GPT-5.3 model support."}]]}]]}]
36
+ 1d:["$","article","1.1.0",{"id":"v1.1.0","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.1.0"]}],["$","time",null,{"dateTime":"2026-01-24T21:34:22.350Z","children":"Jan 24, 2026"}]]}],["$","h2",null,{"children":"Project and session drill-downs"}],["$","p",null,{"children":"Made the CLI much more useful for day-to-day debugging by adding finer filters and a stronger landing-page presentation."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added `--project` and `--sessions` flags for per-project and per-chat breakdowns.",{"children":"Added `--project` and `--sessions` flags for per-project and per-chat breakdowns."}],["$","li","Added interactive visual effects to the landing pages.",{"children":"Added interactive visual effects to the landing pages."}]]}]]}]
37
+ 1e:["$","article","1.0.23",{"id":"v1.0.23","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.23"]}],["$","time",null,{"dateTime":"2026-01-01T23:44:04.846Z","children":"Jan 2, 2026"}]]}],["$","h2",null,{"children":"Local timezone grouping"}],["$","p",null,{"children":"Corrected date bucketing so activity follows the user's local day instead of UTC rollover edges."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Switched usage grouping from UTC date boundaries to local timezone-aware grouping.",{"children":"Switched usage grouping from UTC date boundaries to local timezone-aware grouping."}]]}]]}]
38
+ 1f:["$","article","1.0.22",{"id":"v1.0.22","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.22"]}],["$","time",null,{"dateTime":"2026-01-01T14:45:02.941Z","children":"Jan 1, 2026"}]]}],["$","h2",null,{"children":"Async loading and tier sorting"}],["$","p",null,{"children":"Improved the CLI feel for larger histories by making loading more responsive and model ordering more intuitive."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added async file loading with an animated spinner.",{"children":"Added async file loading with an animated spinner."}],["$","li","Sorted Claude models by tier priority, keeping Opus above Sonnet and Haiku.",{"children":"Sorted Claude models by tier priority, keeping Opus above Sonnet and Haiku."}]]}]]}]
39
+ 20:["$","article","1.0.21",{"id":"v1.0.21","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.21"]}],["$","time",null,{"dateTime":"2026-01-01T13:51:43.981Z","children":"Jan 1, 2026"}]]}],["$","h2",null,{"children":"Launch-day packaging refresh"}],["$","p",null,{"children":"Small republish in the middle of the loading and spinner rollout."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Stability release during the spinner/loading iteration cycle.",{"children":"Stability release during the spinner/loading iteration cycle."}]]}]]}]
40
+ 21:["$","article","1.0.20",{"id":"v1.0.20","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.20"]}],["$","time",null,{"dateTime":"2026-01-01T13:44:50.941Z","children":"Jan 1, 2026"}]]}],["$","h2",null,{"children":"Launch-day packaging refresh"}],["$","p",null,{"children":"Another small republish while the CLI loading experience was being tuned."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Intermediate release to keep the rollout moving during rapid CLI UX iteration.",{"children":"Intermediate release to keep the rollout moving during rapid CLI UX iteration."}]]}]]}]
41
+ 22:["$","div","2025",{"className":"changelog-year-group","children":[["$","div",null,{"className":"changelog-year","children":["$","span",null,{"children":"2025"}]}],["$","div",null,{"className":"changelog-entry-list","children":[["$","article","1.0.19",{"id":"v1.0.19","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.19"]}],["$","time",null,{"dateTime":"2025-12-31T16:41:21.234Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"TTY-safe spinner behaviour"}],["$","p",null,{"children":"Hardened the spinner logic so it still animates in more terminal environments."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Forced spinner animation regardless of TTY detection quirks.",{"children":"Forced spinner animation regardless of TTY detection quirks."}]]}]]}],["$","article","1.0.18",{"id":"v1.0.18","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.18"]}],["$","time",null,{"dateTime":"2025-12-31T16:16:38.013Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Single-line spinner compatibility"}],["$","p",null,{"children":"Reduced spinner complexity to improve terminal compatibility."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Simplified the spinner to a single-line presentation for better compatibility.",{"children":"Simplified the spinner to a single-line presentation for better compatibility."}]]}]]}],["$","article","1.0.17",{"id":"v1.0.17","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.17"]}],["$","time",null,{"dateTime":"2025-12-31T16:13:48.403Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Spinner hold-time fix"}],["$","p",null,{"children":"Kept the spinner visible long enough to feel intentional during quick operations."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Forced a full minimum spinner display interval.",{"children":"Forced a full minimum spinner display interval."}]]}]]}],["$","article","1.0.16",{"id":"v1.0.16","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.16"]}],["$","time",null,{"dateTime":"2025-12-31T16:10:19.142Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Spinner dwell polish"}],["$","p",null,{"children":"Smoothed the loading motion so it no longer flashes by too quickly."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added a minimum display time for the animated spinner.",{"children":"Added a minimum display time for the animated spinner."}]]}]]}],["$","article","1.0.15",{"id":"v1.0.15","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.15"]}],["$","time",null,{"dateTime":"2025-12-31T16:07:24.669Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Immediate spinner render"}],["$","p",null,{"children":"Removed the awkward initial pause before the loading indicator appeared."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Rendered the first spinner frame immediately.",{"children":"Rendered the first spinner frame immediately."}]]}]]}],["$","article","1.0.14",{"id":"v1.0.14","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.14"]}],["$","time",null,{"dateTime":"2025-12-31T16:05:34.922Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Wave spinner"}],["$","p",null,{"children":"Introduced the first branded CLI loading animation."}]]}],["$","ul",null,{"className":"changelog-highlights","children":["$L2c"]}]]}],"$L2d","$L2e","$L2f","$L30","$L31","$L32","$L33","$L34","$L35","$L36","$L37","$L38","$L39","$L3a"]}]]}]
42
+ 2c:["$","li","Added the VIBESTATS wave animation spinner.",{"children":"Added the VIBESTATS wave animation spinner."}]
43
+ 2d:["$","article","1.0.13",{"id":"v1.0.13","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.13"]}],["$","time",null,{"dateTime":"2025-12-31T15:13:13.358Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Wrapped URL polish"}],["$","p",null,{"children":"Cleaned up the wrapped share route and made the generated URL feel less brittle."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Fixed wrapped shares to use the `/wrapped/` path correctly.",{"children":"Fixed wrapped shares to use the `/wrapped/` path correctly."}],["$","li","Improved full share URL UX.",{"children":"Improved full share URL UX."}]]}]]}]
44
+ 2e:["$","article","1.0.12",{"id":"v1.0.12","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.12"]}],["$","time",null,{"dateTime":"2025-12-31T12:06:52.537Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Orange share-link styling"}],["$","p",null,{"children":"Small presentation release focused on matching the vibestats visual language."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added orange styling to the usage share link.",{"children":"Added orange styling to the usage share link."}]]}]]}]
45
+ 2f:["$","article","1.0.11",{"id":"v1.0.11","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.11"]}],["$","time",null,{"dateTime":"2025-12-31T12:00:39.053Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Raw model normalization"}],["$","p",null,{"children":"Reduced duplicate model rows caused by inconsistent raw IDs."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Normalized raw model IDs to prevent duplicate entries.",{"children":"Normalized raw model IDs to prevent duplicate entries."}]]}]]}]
46
+ 30:["$","article","1.0.10",{"id":"v1.0.10","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.10"]}],["$","time",null,{"dateTime":"2025-12-31T11:58:11.448Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Parity fixes for usage decoding"}],["$","p",null,{"children":"Closed some of the biggest mismatches between vibestats, ccusage, and the web decoder."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Deduplicated messages to better match ccusage totals.",{"children":"Deduplicated messages to better match ccusage totals."}],["$","li","Added missing model-name mappings to the web decoder.",{"children":"Added missing model-name mappings to the web decoder."}]]}]]}]
47
+ 31:["$","article","1.0.9",{"id":"v1.0.9","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.9"]}],["$","time",null,{"dateTime":"2025-12-31T11:47:26.814Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Historical stats-cache support"}],["$","p",null,{"children":"Added support for the Claude `stats-cache.json` path so older activity can be reconstructed more reliably."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Loaded historical usage from `stats-cache.json`.",{"children":"Loaded historical usage from `stats-cache.json`."}]]}]]}]
48
+ 32:["$","article","1.0.8",{"id":"v1.0.8","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.8"]}],["$","time",null,{"dateTime":"2025-12-31T11:44:03.260Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Automatic long-range monthly view"}],["$","p",null,{"children":"Made longer windows easier to scan without requiring manual aggregation switches."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Automatically switched to monthly aggregation for long date ranges.",{"children":"Automatically switched to monthly aggregation for long date ranges."}]]}]]}]
49
+ 33:["$","article","1.0.7",{"id":"v1.0.7","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.7"]}],["$","time",null,{"dateTime":"2025-12-31T11:37:34.504Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Codex session parsing fix"}],["$","p",null,{"children":"Brought Codex usage parsing in line with the real on-disk session format."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Fixed Codex usage parsing to match actual session files.",{"children":"Fixed Codex usage parsing to match actual session files."}]]}]]}]
50
+ 34:["$","article","1.0.6",{"id":"v1.0.6","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.6"]}],["$","time",null,{"dateTime":"2025-12-31T03:23:02.722Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Share URL correctness fixes"}],["$","p",null,{"children":"Resolved two of the most obvious share-flow routing issues."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Fixed the shared usage window to show the last 31 days instead of the first 31.",{"children":"Fixed the shared usage window to show the last 31 days instead of the first 31."}],["$","li","Redirected usage shortlinks to `/` instead of `/wrapped`.",{"children":"Redirected usage shortlinks to `/` instead of `/wrapped`."}]]}]]}]
51
+ 35:["$","article","1.0.5",{"id":"v1.0.5","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.5"]}],["$","time",null,{"dateTime":"2025-12-31T03:14:26.852Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Usage sharing foundations"}],["$","p",null,{"children":"Started the first real sharing workflow for usage reports and tightened the web chrome around it."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Added the `--share` flag for usage stats.",{"children":"Added the `--share` flag for usage stats."}],["$","li","Added footer links on the web pages and refreshed vibestats branding docs.",{"children":"Added footer links on the web pages and refreshed vibestats branding docs."}]]}]]}]
52
+ 36:["$","article","1.0.4",{"id":"v1.0.4","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.4"]}],["$","time",null,{"dateTime":"2025-12-31T02:44:54.023Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Domain and filtering cleanup"}],["$","p",null,{"children":"Early polish release after the rename to vibestats."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Updated URLs to `vibestats.wolfai.dev`.",{"children":"Updated URLs to `vibestats.wolfai.dev`."}],["$","li","Filtered synthetic models out of user-facing output.",{"children":"Filtered synthetic models out of user-facing output."}]]}]]}]
53
+ 37:["$","article","1.0.3",{"id":"v1.0.3","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.3"]}],["$","time",null,{"dateTime":"2025-12-31T02:38:29.421Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Sparkle logo and CLI typing animation"}],["$","p",null,{"children":"Added some of the first branded UI details to the web experience."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Introduced the sparkle logo treatment and command typing animation on the landing page.",{"children":"Introduced the sparkle logo treatment and command typing animation on the landing page."}]]}]]}]
54
+ 38:["$","article","1.0.2",{"id":"v1.0.2","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.2"]}],["$","time",null,{"dateTime":"2025-12-31T02:36:05.926Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Token counting accuracy"}],["$","p",null,{"children":"Corrected the early CLI math so totals lined up with the reference tooling."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Matched token counting more closely to ccusage.",{"children":"Matched token counting more closely to ccusage."}]]}]]}]
55
+ 39:["$","article","1.0.1",{"id":"v1.0.1","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.1"]}],["$","time",null,{"dateTime":"2025-12-31T02:33:12.494Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Launch UI refresh"}],["$","p",null,{"children":"Quick visual polish pass right after the initial release."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Refined the web UI with a sleeker launch look.",{"children":"Refined the web UI with a sleeker launch look."}]]}]]}]
56
+ 3a:["$","article","1.0.0",{"id":"v1.0.0","className":"changelog-entry","children":[["$","header",null,{"className":"changelog-entry-header","children":[["$","div",null,{"children":[["$","span",null,{"className":"changelog-version","children":["v","1.0.0"]}],["$","time",null,{"dateTime":"2025-12-31T02:29:53.642Z","children":"Dec 31, 2025"}]]}],["$","h2",null,{"children":"Initial release"}],["$","p",null,{"children":"The first public vibestats package, launched as Claude Code Wrapped."}]]}],["$","ul",null,{"className":"changelog-highlights","children":[["$","li","Shipped the initial Claude Code Wrapped CLI and web experience.",{"children":"Shipped the initial Claude Code Wrapped CLI and web experience."}]]}]]}]
57
+ 28:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
58
+ 24:null
59
+ 26:{"metadata":[["$","title","0",{"children":"Changelog | vibestats"}],["$","meta","1",{"name":"description","content":"Release history for vibestats across the CLI and hosted web experience."}],["$","meta","2",{"name":"application-name","content":"vibestats"}],["$","meta","3",{"name":"keywords","content":"vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,vibestats changelog,vibestats releases,Claude Code stats release notes"}],["$","link","4",{"rel":"canonical","href":"https://vibestats.wolfai.dev/changelog"}],["$","meta","5",{"property":"og:title","content":"Changelog | vibestats"}],["$","meta","6",{"property":"og:description","content":"Release history for vibestats across the CLI and hosted web experience."}],["$","meta","7",{"property":"og:url","content":"https://vibestats.wolfai.dev/changelog"}],["$","meta","8",{"property":"og:site_name","content":"vibestats"}],["$","meta","9",{"property":"og:locale","content":"en_US"}],["$","meta","10",{"property":"og:type","content":"article"}],["$","meta","11",{"name":"twitter:card","content":"summary"}],["$","meta","12",{"name":"twitter:title","content":"Changelog | vibestats"}],["$","meta","13",{"name":"twitter:description","content":"Release history for vibestats across the CLI and hosted web experience."}]],"error":null,"digest":"$undefined"}
60
+ 2b:"$26:metadata"