tokentracker-cli 0.76.2 → 0.77.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 (78) hide show
  1. package/README.de.md +10 -0
  2. package/README.ja.md +9 -0
  3. package/README.ko.md +9 -0
  4. package/README.md +10 -0
  5. package/README.zh-CN.md +9 -0
  6. package/dashboard/dist/assets/{ActivityHeatmap-CPGN-WN1.js → ActivityHeatmap-DTZh551Z.js} +1 -1
  7. package/dashboard/dist/assets/{Card-Bw438EXT.js → Card-DP2HT77t.js} +1 -1
  8. package/dashboard/dist/assets/ClawdAnimated-ScYRJSG0.js +1 -0
  9. package/dashboard/dist/assets/{CommunityStatsModal--AuOLfq1.js → CommunityStatsModal-CU46JMkg.js} +1 -1
  10. package/dashboard/dist/assets/{ConfirmModal-DXV9mzMw.js → ConfirmModal-BYvz0dzg.js} +1 -1
  11. package/dashboard/dist/assets/{Controls-D0h-lPHC.js → Controls-DPElSq0S.js} +1 -1
  12. package/dashboard/dist/assets/DashboardPage-CN0buIso.js +19 -0
  13. package/dashboard/dist/assets/{DevicePage-CMa1l2sC.js → DevicePage-BL9ew9-m.js} +1 -1
  14. package/dashboard/dist/assets/{DialogClose-DBKCvZPm.js → DialogClose-cqXrG903.js} +1 -1
  15. package/dashboard/dist/assets/DialogDescription-Bo0iWtYz.js +1 -0
  16. package/dashboard/dist/assets/{DialogTitle-CuhKU10w.js → DialogTitle-Oqnn_dIL.js} +1 -1
  17. package/dashboard/dist/assets/{FadeIn-BoYq0Lpr.js → FadeIn-CFLwnHqt.js} +1 -1
  18. package/dashboard/dist/assets/{HeaderGithubStar-DD58NKiQ.js → HeaderGithubStar-B397ELF4.js} +1 -1
  19. package/dashboard/dist/assets/{IpCheckPage-Pw-_Uvsa.js → IpCheckPage-CamsHe6o.js} +1 -1
  20. package/dashboard/dist/assets/{LandingPage-D2t79SLx.js → LandingPage-D4ygTHwO.js} +1 -1
  21. package/dashboard/dist/assets/{LeaderboardAvatar-D_fl_xuD.js → LeaderboardAvatar-B39rNGCV.js} +1 -1
  22. package/dashboard/dist/assets/LeaderboardPage-BFUOxX6P.js +2 -0
  23. package/dashboard/dist/assets/{LeaderboardProfileModal-DSMTxieN.js → LeaderboardProfileModal-BIe6gBNu.js} +3 -3
  24. package/dashboard/dist/assets/{LeaderboardProfilePage-neatevKp.js → LeaderboardProfilePage-DeVBEYtg.js} +2 -2
  25. package/dashboard/dist/assets/{LimitsPage-DqaIA0Es.js → LimitsPage-6I5EU7qe.js} +1 -1
  26. package/dashboard/dist/assets/{LocalOnlyNotice-Ds7yPxS1.js → LocalOnlyNotice-AyYKZloH.js} +1 -1
  27. package/dashboard/dist/assets/{LoginPage-7dsJbTEb.js → LoginPage-D8smF1gU.js} +1 -1
  28. package/dashboard/dist/assets/PetPage-BlMYvJn2.js +1 -0
  29. package/dashboard/dist/assets/PopoverPopup-DRWhz-bY.js +1 -0
  30. package/dashboard/dist/assets/{ResetPasswordPage-Czaz9zzN.js → ResetPasswordPage-CzSqJfuA.js} +1 -1
  31. package/dashboard/dist/assets/{Select-Dk9uTtUI.js → Select-Cb8n7kQO.js} +1 -1
  32. package/dashboard/dist/assets/{SelectItemText-Dontd_dr.js → SelectItemText-DEYadcIK.js} +1 -1
  33. package/dashboard/dist/assets/{SettingsPage-CunCphUc.js → SettingsPage-DlHXcFdJ.js} +1 -1
  34. package/dashboard/dist/assets/SkillsPage--Kcv1pxG.js +1 -0
  35. package/dashboard/dist/assets/{WidgetsPage-CpAPhR3_.js → WidgetsPage-DwtJ9CKU.js} +1 -1
  36. package/dashboard/dist/assets/{WrappedPage-DikP22Sw.js → WrappedPage-BuP9KXqF.js} +1 -1
  37. package/dashboard/dist/assets/{agent-logos-D8OYqlhF.js → agent-logos-DbwDXgg1.js} +1 -1
  38. package/dashboard/dist/assets/{arrow-up-right-DsLWfytD.js → arrow-up-right-cFMBPEVS.js} +1 -1
  39. package/dashboard/dist/assets/check-t_ltRp2A.js +1 -0
  40. package/dashboard/dist/assets/{copy-BxHuZgA1.js → copy-DYx8X3ZO.js} +1 -1
  41. package/dashboard/dist/assets/{download-tXehSjsQ.js → download-B-hXZWKj.js} +1 -1
  42. package/dashboard/dist/assets/{format-tokens-ab57-P2J.js → format-tokens-CngV51wN.js} +1 -1
  43. package/dashboard/dist/assets/{info-Xcqww53Y.js → info-qVF2hV50.js} +1 -1
  44. package/dashboard/dist/assets/link-2-DR-yGZFS.js +1 -0
  45. package/dashboard/dist/assets/loader-circle-0k9uueb5.js +1 -0
  46. package/dashboard/dist/assets/main-B8lT0e78.css +1 -0
  47. package/dashboard/dist/assets/{main-BQdH4mOs.js → main-CU04bNYH.js} +15 -4
  48. package/dashboard/dist/assets/trash-2-DpxBaV_1.js +1 -0
  49. package/dashboard/dist/assets/{use-community-stats-DFBJP4bf.js → use-community-stats-Cbij-V8j.js} +1 -1
  50. package/dashboard/dist/assets/{use-limits-display-prefs-gmXXzoWe.js → use-limits-display-prefs-q0TuryM0.js} +1 -1
  51. package/dashboard/dist/assets/{use-native-settings-BNv4MqR-.js → use-native-settings-BCzogs1L.js} +1 -1
  52. package/dashboard/dist/assets/{use-ordered-list-Dl82Utll.js → use-ordered-list-CH-J7c04.js} +1 -1
  53. package/dashboard/dist/assets/{use-quality-per-dollar-pref-XOF93N4q.js → use-quality-per-dollar-pref-DKLmkwxe.js} +1 -1
  54. package/dashboard/dist/assets/{use-usage-limits-YUhemFAp.js → use-usage-limits-DrmF6I_t.js} +1 -1
  55. package/dashboard/dist/assets/{useCurrency-B6KHWgVk.js → useCurrency-DwygZqrs.js} +1 -1
  56. package/dashboard/dist/assets/{useScrollLock-BEZTkDaR.js → useScrollLock-DVCKuErg.js} +1 -1
  57. package/dashboard/dist/index.html +2 -2
  58. package/dashboard/dist/pets/byte/spritesheet.webp +0 -0
  59. package/dashboard/dist/pets/ember/spritesheet.webp +0 -0
  60. package/dashboard/dist/pets/sprout/spritesheet.webp +0 -0
  61. package/dashboard/dist/share.html +2 -2
  62. package/package.json +3 -2
  63. package/src/commands/status.js +44 -7
  64. package/src/commands/sync.js +83 -108
  65. package/src/lib/install-resolver.js +1 -1
  66. package/src/lib/local-api.js +97 -0
  67. package/src/lib/pet-packages.js +373 -0
  68. package/src/lib/pricing/seed-snapshot.json +1 -1
  69. package/src/lib/rollout.js +42 -28
  70. package/dashboard/dist/assets/ClawdAnimated-DuxB7qei.js +0 -1
  71. package/dashboard/dist/assets/DashboardPage-_9IPwhlZ.js +0 -19
  72. package/dashboard/dist/assets/DialogDescription-Dj5LvyRi.js +0 -1
  73. package/dashboard/dist/assets/LeaderboardPage-0jDDohE4.js +0 -2
  74. package/dashboard/dist/assets/PetPage-UWW1N1PL.js +0 -1
  75. package/dashboard/dist/assets/PopoverPopup-Bg8XtAJ5.js +0 -1
  76. package/dashboard/dist/assets/SkillsPage-BElcW79T.js +0 -1
  77. package/dashboard/dist/assets/check-CPB_1BeX.js +0 -1
  78. package/dashboard/dist/assets/main-zch5Z6OA.css +0 -1
@@ -3116,37 +3116,51 @@ async function walkOpencodeMessages(dir, out) {
3116
3116
  function readOpencodeDbMessages(dbPath, sqliteOptions = {}) {
3117
3117
  if (!dbPath || !fssync.existsSync(dbPath)) return [];
3118
3118
  const sql = `SELECT id, session_id, time_updated, data FROM message WHERE json_extract(data, '$.role') = 'assistant' ORDER BY time_created ASC`;
3119
- const rows = readSqliteJsonRows(dbPath, sql, {
3120
- label: "OpenCode",
3121
- maxBuffer: 50 * 1024 * 1024,
3122
- timeout: 30_000,
3123
- ...sqliteOptions,
3124
- });
3125
- const out = [];
3126
- for (const row of rows) {
3127
- if (!row || typeof row.data !== "string") continue;
3128
- let data;
3119
+
3120
+ let snapshot = null;
3121
+ let effectiveDbPath = dbPath;
3122
+ if (isUncPath(dbPath)) {
3129
3123
  try {
3130
- data = JSON.parse(row.data);
3131
- } catch (_e) {
3132
- continue;
3133
- }
3134
- const tokens = data?.tokens;
3135
- if (!tokens || typeof tokens !== "object") continue;
3136
- // Skip messages with no meaningful token data
3137
- const hasTokens =
3138
- toNonNegativeInt(tokens.input) > 0 ||
3139
- toNonNegativeInt(tokens.output) > 0 ||
3140
- toNonNegativeInt(tokens.reasoning) > 0;
3141
- if (!hasTokens) continue;
3142
- out.push({
3143
- id: row.id || data.id,
3144
- sessionID: row.session_id || data.sessionID,
3145
- timeUpdated: row.time_updated || 0,
3146
- data,
3124
+ snapshot = snapshotSqliteDb(dbPath);
3125
+ effectiveDbPath = snapshot.path;
3126
+ } catch (_e) { }
3127
+ }
3128
+
3129
+ try {
3130
+ const rows = readSqliteJsonRows(effectiveDbPath, sql, {
3131
+ label: "OpenCode",
3132
+ maxBuffer: 50 * 1024 * 1024,
3133
+ timeout: 30_000,
3134
+ ...sqliteOptions,
3147
3135
  });
3136
+ const out = [];
3137
+ for (const row of rows) {
3138
+ if (!row || typeof row.data !== "string") continue;
3139
+ let data;
3140
+ try {
3141
+ data = JSON.parse(row.data);
3142
+ } catch (_e) {
3143
+ continue;
3144
+ }
3145
+ const tokens = data?.tokens;
3146
+ if (!tokens || typeof tokens !== "object") continue;
3147
+ // Skip messages with no meaningful token data
3148
+ const hasTokens =
3149
+ toNonNegativeInt(tokens.input) > 0 ||
3150
+ toNonNegativeInt(tokens.output) > 0 ||
3151
+ toNonNegativeInt(tokens.reasoning) > 0;
3152
+ if (!hasTokens) continue;
3153
+ out.push({
3154
+ id: row.id || data.id,
3155
+ sessionID: row.session_id || data.sessionID,
3156
+ timeUpdated: row.time_updated || 0,
3157
+ data,
3158
+ });
3159
+ }
3160
+ return out;
3161
+ } finally {
3162
+ if (snapshot) snapshot.cleanup();
3148
3163
  }
3149
- return out;
3150
3164
  }
3151
3165
 
3152
3166
  // mimocode mirrors the user's Claude Code + claude-mem history into its own
@@ -1 +0,0 @@
1
- import{r as o,j as l}from"./main-BQdH4mOs.js";const S=["clawd","sprout","byte","ember"];function f(e){const n=String(e||"").trim().toLowerCase();return S.includes(n)?n:"clawd"}const E=.84;function x(e){return f(e)==="clawd"?E:1}const M={idle:{row:0,durations:[280,110,110,140,140,320]},"running-right":{row:1,durations:[120,120,120,120,120,120,120,220]},"running-left":{row:2,durations:[120,120,120,120,120,120,120,220]},waving:{row:3,durations:[140,140,140,280]},jumping:{row:4,durations:[140,140,140,140,280]},failed:{row:5,durations:[140,140,140,140,140,140,140,240]},waiting:{row:6,durations:[150,150,150,150,150,260]},running:{row:7,durations:[120,120,120,120,120,220]},review:{row:8,durations:[150,150,150,150,150,280]}};function j(e){return["error","disconnected","working-overheated"].includes(e)?"failed":["happy","waking","mini-happy","jumping"].includes(e)?"jumping":["working-typing","working-ultrathink","working-juggling","running"].includes(e)?"running":["working-thinking","working-wizard","review"].includes(e)?"review":["sleeping","idle-doze","mini-sleep","waiting"].includes(e)?"waiting":["mini-peek","waving"].includes(e)?"waving":e==="running-left"||e==="running-right"?e:"idle"}function A(){const[e,n]=o.useState(()=>typeof document>"u"?!0:document.visibilityState!=="hidden");return o.useEffect(()=>{if(typeof document>"u")return;const i=()=>n(document.visibilityState!=="hidden");return document.addEventListener("visibilitychange",i),()=>document.removeEventListener("visibilitychange",i)},[]),e}function C(){const[e,n]=o.useState(()=>typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches);return o.useEffect(()=>{if(typeof window.matchMedia!="function")return;const i=window.matchMedia("(prefers-reduced-motion: reduce)"),t=r=>n(r.matches);return i.addEventListener("change",t),()=>i.removeEventListener("change",t)},[]),e}function R({character:e,state:n="idle-living",size:i=48,className:t=""}){const r=f(e),c=j(n),a=M[c],g=C(),u=A(),[d,s]=o.useState(0);o.useEffect(()=>{if(s(0),g||!u)return;let p=!1,h=0;const m=k=>{h=window.setTimeout(()=>{if(p)return;const y=(k+1)%a.durations.length;s(y),m(y)},a.durations[k])};return m(0),()=>{p=!0,window.clearTimeout(h)}},[g,u,a]);const v=o.useMemo(()=>({width:i*(192/208),height:i,backgroundImage:`url(/pets/${r}/spritesheet.webp)`,backgroundRepeat:"no-repeat",backgroundSize:"800% 900%",backgroundPosition:`${d/7*100}% ${a.row/8*100}%`,imageRendering:"pixelated"}),[d,r,a.row,i]);return l.jsx("div",{"aria-hidden":"true",className:`pet-atlas-animated ${t}`,style:v})}const b={"idle-living":"idle/living.svg","idle-doze":"idle/doze.svg","idle-follow":"idle/follow.svg","idle-look":"idle/look.svg","idle-yawn":"idle/yawn.svg","idle-collapse":"idle/collapse.svg","working-building":"working/building.svg","working-carrying":"working/carrying.svg","working-conducting":"working/conducting.svg","working-confused":"working/confused.svg","working-debugger":"working/debugger.svg","working-juggling":"working/juggling.svg","working-overheated":"working/overheated.svg","working-pushing":"working/pushing.svg","working-sweeping":"working/sweeping.svg","working-thinking":"working/thinking.svg","working-typing":"working/typing.svg","working-ultrathink":"working/ultrathink.svg","working-wizard":"working/wizard.svg","mini-alert":"mini/alert.svg","mini-crabwalk":"mini/crabwalk.svg","mini-enter":"mini/enter.svg","mini-enter-sleep":"mini/enter-sleep.svg","mini-happy":"mini/happy.svg","mini-idle":"mini/idle.svg","mini-peek":"mini/peek.svg","mini-sleep":"mini/sleep.svg","react-double":"react/double.svg","react-drag":"react/drag.svg","react-left":"react/left.svg","react-right":"react/right.svg","collapse-sleep":"sleep/collapse-sleep.svg",sleeping:"sleep/sleeping.svg",wake:"sleep/wake.svg",disconnected:"status/disconnected.svg",error:"status/error.svg",notification:"status/notification.svg",happy:"happy.svg","static-base":"static-base.svg"},w=new Map;async function $(e){if(w.has(e))return w.get(e);if(typeof fetch!="function")return null;let n;try{n=await fetch(`/clawd/${e}`)}catch{return null}if(!n.ok)return null;const t=(await n.text()).replace(/<svg([^>]*)>/,(r,c)=>`<svg${c.replace(/\s+width="[^"]*"/g,"").replace(/\s+height="[^"]*"/g,"")} width="100%" height="100%">`);return w.set(e,t),t}function L({state:e="idle-living",size:n=48,className:i=""}){const[t,r]=o.useState(""),c=o.useRef(null),g=T()?"static-base":e,u=b[g]||b["static-base"];return o.useEffect(()=>{let d=!1;return $(u).then(s=>{!d&&s&&r(s)}),()=>{d=!0}},[u]),o.useEffect(()=>{const d=c.current?.querySelector("svg");if(d)try{const s=d.getBBox();s.width>0&&s.height>0&&d.setAttribute("viewBox",`${s.x-2} ${s.y-2} ${s.width+4} ${s.height+4}`)}catch{}},[t]),l.jsx("div",{ref:c,"aria-hidden":"true",className:`clawd-animated ${i}`,style:{width:n,height:n,display:"inline-flex",alignItems:"center",justifyContent:"center",overflow:"hidden"},dangerouslySetInnerHTML:{__html:t}})}function I({state:e="idle-living",size:n=48,className:i="",character:t="clawd"}){const r=f(t);return r!=="clawd"?l.jsx(R,{character:r,state:e,size:n,className:i}):l.jsx(L,{state:e,size:n*x(r),className:i})}function T(){const[e,n]=o.useState(()=>typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches);return o.useEffect(()=>{if(typeof window.matchMedia!="function")return;const i=window.matchMedia("(prefers-reduced-motion: reduce)"),t=r=>n(r.matches);return i.addEventListener("change",t),()=>i.removeEventListener("change",t)},[]),e}export{I as C,f as n};