tokentracker-cli 1.1.8 → 1.1.10

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 (101) hide show
  1. package/dashboard/dist/assets/{AchievementBadge-xbiBA5i9.js → AchievementBadge-CH97d6cg.js} +1 -1
  2. package/dashboard/dist/assets/{AchievementsPage-Bas-dACH.js → AchievementsPage-Dwvj09sF.js} +2 -2
  3. package/dashboard/dist/assets/{AchievementsSection-NIkQkv1K.js → AchievementsSection-D6HHK1f-.js} +1 -1
  4. package/dashboard/dist/assets/{BadgeDetailModal-D3UgBwf8.js → BadgeDetailModal-Bpr6rY9l.js} +1 -1
  5. package/dashboard/dist/assets/{BotAnimated-BNyhe5RX.js → BotAnimated-srF64s63.js} +1 -1
  6. package/dashboard/dist/assets/{Card-B4qMgo_P.js → Card-38v0-L6e.js} +1 -1
  7. package/dashboard/dist/assets/{ClawdAnimated-B_6oXLru.js → ClawdAnimated-C9a1u9lq.js} +2 -2
  8. package/dashboard/dist/assets/{CommandPalette-DR50aykL.js → CommandPalette-Bj0e0ye0.js} +1 -1
  9. package/dashboard/dist/assets/{CommunityStatsModal-DbWZ2hX1.js → CommunityStatsModal-IoQLJCe2.js} +1 -1
  10. package/dashboard/dist/assets/{ConfirmModal-CApD9tLe.js → ConfirmModal-B7uK0Wjr.js} +1 -1
  11. package/dashboard/dist/assets/{Controls-UQr6lc0S.js → Controls-D5XuFAlI.js} +1 -1
  12. package/dashboard/dist/assets/{DashboardPage-38JMPZYD.js → DashboardPage-Ddb8k4DR.js} +1 -1
  13. package/dashboard/dist/assets/DevicePage-DE-NSyZg.js +1 -0
  14. package/dashboard/dist/assets/{DialogClose-BVYAi_Mb.js → DialogClose-DB6ZRDR3.js} +1 -1
  15. package/dashboard/dist/assets/DialogDescription-CaRzgdvP.js +1 -0
  16. package/dashboard/dist/assets/{DialogTitle-_gEgVrEF.js → DialogTitle-CgwmTJf3.js} +1 -1
  17. package/dashboard/dist/assets/{FadeIn-CqWPKBtn.js → FadeIn-CMjPtMSB.js} +1 -1
  18. package/dashboard/dist/assets/{HeaderGithubStar-nJV8kqj7.js → HeaderGithubStar-D5cSnbcg.js} +1 -1
  19. package/dashboard/dist/assets/{HoverTooltip-CkPO2nyc.js → HoverTooltip-CFV8yLxb.js} +1 -1
  20. package/dashboard/dist/assets/{IpCheckPage-CBPPbv12.js → IpCheckPage-Ctu-GWJQ.js} +1 -1
  21. package/dashboard/dist/assets/{LandingPage-B3kHRjIL.js → LandingPage-PAIF034o.js} +2 -2
  22. package/dashboard/dist/assets/{LeaderboardAvatar-C9UJap02.js → LeaderboardAvatar-D3CsY-nP.js} +1 -1
  23. package/dashboard/dist/assets/{LeaderboardPage-BaxbbkZ4.js → LeaderboardPage-qE8DD-Ia.js} +2 -2
  24. package/dashboard/dist/assets/{LeaderboardProfileModal-CSCpQGtj.js → LeaderboardProfileModal-BY3uaIdF.js} +3 -3
  25. package/dashboard/dist/assets/{LeaderboardProfilePage-Cr4oGPW3.js → LeaderboardProfilePage-CwX77U5Z.js} +1 -1
  26. package/dashboard/dist/assets/{LimitsPage-D80H3CN6.js → LimitsPage-BlJgvFay.js} +1 -1
  27. package/dashboard/dist/assets/{LocalOnlyNotice-B-IFH3nt.js → LocalOnlyNotice-CLFKSu0V.js} +1 -1
  28. package/dashboard/dist/assets/{LoginCard-D28bk46z.js → LoginCard-Bdp2gihl.js} +1 -1
  29. package/dashboard/dist/assets/{LoginModal-B3OIZlRl.js → LoginModal-o_t6uvYP.js} +1 -1
  30. package/dashboard/dist/assets/{LoginPage-BUZcOhur.js → LoginPage-Cc3ZHUU8.js} +1 -1
  31. package/dashboard/dist/assets/{PetPage-B1ID7Hn_.js → PetPage-DFaWnKsI.js} +1 -1
  32. package/dashboard/dist/assets/{PopoverPopup-C4y60FZN.js → PopoverPopup-CGJBBnIf.js} +1 -1
  33. package/dashboard/dist/assets/{ProviderIcon-DINSm4-U.js → ProviderIcon-1OG4Kbkl.js} +1 -1
  34. package/dashboard/dist/assets/{ResetPasswordPage-DuT61PlK.js → ResetPasswordPage-DbfS1gfH.js} +1 -1
  35. package/dashboard/dist/assets/{SegmentedControl-CI97Hzlt.js → SegmentedControl-DPKl-28R.js} +1 -1
  36. package/dashboard/dist/assets/{Select-Br0lETb5.js → Select-BTA6mSut.js} +1 -1
  37. package/dashboard/dist/assets/{SelectItemText-DkwRyFhO.js → SelectItemText-CX5Br8hd.js} +1 -1
  38. package/dashboard/dist/assets/{ServiceStatusPage-CXmaHXok.js → ServiceStatusPage-CaTOLkT7.js} +1 -1
  39. package/dashboard/dist/assets/{SessionsPage-D4QNmkZK.js → SessionsPage-Ixp6Fseo.js} +1 -1
  40. package/dashboard/dist/assets/{SettingsPage-B2m9w6u2.js → SettingsPage-BmeQse01.js} +2 -2
  41. package/dashboard/dist/assets/{SkillsPage-BgwQrJN5.js → SkillsPage-BUUfMFpU.js} +1 -1
  42. package/dashboard/dist/assets/{TokenGalaxy-Gu8Ow73w.js → TokenGalaxy-DnfKnQhr.js} +1 -1
  43. package/dashboard/dist/assets/{ToolbarRootContext-BQ1me9_q.js → ToolbarRootContext-D0wMtL6Z.js} +1 -1
  44. package/dashboard/dist/assets/{TrendMonitor-CvgRQWnP.js → TrendMonitor-D3WafvUS.js} +1 -1
  45. package/dashboard/dist/assets/{WidgetsPage-CUqcWQRH.js → WidgetsPage-Bfod5aSH.js} +1 -1
  46. package/dashboard/dist/assets/{WrappedPage-C3UN0ODa.js → WrappedPage-fYftPA8s.js} +1 -1
  47. package/dashboard/dist/assets/{__vite-browser-external-CU61PE6P.js → __vite-browser-external-B98Yok9C.js} +12 -12
  48. package/dashboard/dist/assets/{agent-logos-CqHJCc4t.js → agent-logos-C0O8Lnmv.js} +1 -1
  49. package/dashboard/dist/assets/{arrow-up-right-DOj31845.js → arrow-up-right-Bs0RpChC.js} +1 -1
  50. package/dashboard/dist/assets/{check-B3DcIhj-.js → check-Dj5Wi1I7.js} +1 -1
  51. package/dashboard/dist/assets/{composite-84597ykh.js → composite-BeHO1nUS.js} +1 -1
  52. package/dashboard/dist/assets/{copy-DHKp6LiG.js → copy-Dgp1NqhD.js} +1 -1
  53. package/dashboard/dist/assets/{download-8BXZUZ5E.js → download-D1JugY5p.js} +1 -1
  54. package/dashboard/dist/assets/{external-link-MMLkzpJo.js → external-link-ow0tAluE.js} +1 -1
  55. package/dashboard/dist/assets/{flame-CS31bpav.js → flame-Obus_5g4.js} +1 -1
  56. package/dashboard/dist/assets/{format-tokens-Db794xGj.js → format-tokens-yToZ6yvw.js} +1 -1
  57. package/dashboard/dist/assets/{icons-DbJFxYam.js → icons-Da1IxY6v.js} +1 -1
  58. package/dashboard/dist/assets/{index-C43slbyq.js → index-0hD-aFe2.js} +1 -1
  59. package/dashboard/dist/assets/{index-DxRNZBk8.js → index-BtmxTdj8.js} +1 -1
  60. package/dashboard/dist/assets/{index-zvktTnpL.js → index-DduY8rpi.js} +1 -1
  61. package/dashboard/dist/assets/{info-BBYVrlZQ.js → info-CQjQ1whr.js} +1 -1
  62. package/dashboard/dist/assets/{link-2-BAkJwRS7.js → link-2-BGYfWbPb.js} +1 -1
  63. package/dashboard/dist/assets/{loader-circle-qmDffs-C.js → loader-circle-WArW9cmn.js} +1 -1
  64. package/dashboard/dist/assets/{maximize-2-DsglOasI.js → maximize-2-Bhde1l0n.js} +1 -1
  65. package/dashboard/dist/assets/{modifiers.esm-EKtyGFrY.js → modifiers.esm-BRxUZvoy.js} +1 -1
  66. package/dashboard/dist/assets/{monitor-smartphone-i1wfcnRb.js → monitor-smartphone-2ZT8ACJS.js} +1 -1
  67. package/dashboard/dist/assets/{plus-Cu09y-uC.js → plus-C_cg6gJE.js} +1 -1
  68. package/dashboard/dist/assets/{provider-display-CqsH0Sl4.js → provider-display-CM8dzzcI.js} +1 -1
  69. package/dashboard/dist/assets/{react-BhNxIPTw.js → react-C3vDx5Sr.js} +1 -1
  70. package/dashboard/dist/assets/{search-CnD0oNqF.js → search-Vd9we7KU.js} +1 -1
  71. package/dashboard/dist/assets/{skills-api-BZjW22xy.js → skills-api-CHxubvN1.js} +1 -1
  72. package/dashboard/dist/assets/{sortable.esm-DKZHcMD3.js → sortable.esm-rLR8Wj9r.js} +1 -1
  73. package/dashboard/dist/assets/{store-DtFmZUKU.js → store-rdi5mnme.js} +1 -1
  74. package/dashboard/dist/assets/{terminal-Ci6VJSXB.js → terminal-xEPZhi6v.js} +1 -1
  75. package/dashboard/dist/assets/{trash-DFtauQXa.js → trash-Cad8nQc4.js} +1 -1
  76. package/dashboard/dist/assets/{use-community-stats-CtiK0rE3.js → use-community-stats-SMq01IVW.js} +1 -1
  77. package/dashboard/dist/assets/{use-latest-request-guard-AUvY3uHN.js → use-latest-request-guard-CSQ3Ypu3.js} +1 -1
  78. package/dashboard/dist/assets/{use-limits-display-prefs-BB8SjBZP.js → use-limits-display-prefs-DaaT6TL9.js} +1 -1
  79. package/dashboard/dist/assets/{use-ordered-list-CKNhZ510.js → use-ordered-list-g58JllvT.js} +1 -1
  80. package/dashboard/dist/assets/use-reduced-motion-Dgdv5SSP.js +1 -0
  81. package/dashboard/dist/assets/{use-session-efficiency-pref-C0qtk6TK.js → use-session-efficiency-pref-DyATLZ-L.js} +1 -1
  82. package/dashboard/dist/assets/{use-transform-DYicUvFj.js → use-transform-XYEzPgA-.js} +1 -1
  83. package/dashboard/dist/assets/use-usage-limits-DL260plD.js +1 -0
  84. package/dashboard/dist/assets/{useCurrency-LH_2wEBf.js → useCurrency-4xq0xUFx.js} +1 -1
  85. package/dashboard/dist/assets/{useTokenFormat-DKsWnBvy.js → useTokenFormat-B6fHArH6.js} +1 -1
  86. package/dashboard/dist/assets/{zap-CAoJCLuz.js → zap-InLQedtD.js} +1 -1
  87. package/dashboard/dist/index.html +1 -2
  88. package/dashboard/dist/ip-check.html +1 -2
  89. package/dashboard/dist/leaderboard.html +1 -2
  90. package/dashboard/dist/share.html +1 -1
  91. package/package.json +1 -1
  92. package/src/commands/sync.js +14 -1
  93. package/src/lib/cloud-account.js +23 -12
  94. package/src/lib/cloud-device-token.js +74 -0
  95. package/src/lib/local-api.js +87 -35
  96. package/src/lib/pricing/seed-snapshot.json +1 -1
  97. package/src/lib/upload-throttle.js +4 -1
  98. package/dashboard/dist/assets/DevicePage-B7n5TS6A.js +0 -1
  99. package/dashboard/dist/assets/DialogDescription-CD1rCYqD.js +0 -1
  100. package/dashboard/dist/assets/use-reduced-motion-BXh1HaOk.js +0 -1
  101. package/dashboard/dist/assets/use-usage-limits-CWRjxEix.js +0 -1
@@ -21,6 +21,7 @@ function normalizeState(raw) {
21
21
  lastError: typeof s.lastError === "string" ? s.lastError : null,
22
22
  lastErrorStatus: toSafeInt(s.lastErrorStatus),
23
23
  lastErrorCode: typeof s.lastErrorCode === "string" ? s.lastErrorCode : null,
24
+ lastErrorAttemptId: typeof s.lastErrorAttemptId === "string" ? s.lastErrorAttemptId : null,
24
25
  updatedAt: typeof s.updatedAt === "string" ? s.updatedAt : null,
25
26
  };
26
27
  }
@@ -78,11 +79,12 @@ function recordUploadSuccess({ nowMs, state, config, randInt }) {
78
79
  lastError: null,
79
80
  lastErrorStatus: 0,
80
81
  lastErrorCode: null,
82
+ lastErrorAttemptId: null,
81
83
  updatedAt: new Date(nowMs).toISOString(),
82
84
  };
83
85
  }
84
86
 
85
- function recordUploadFailure({ nowMs, state, error, config }) {
87
+ function recordUploadFailure({ nowMs, state, error, config, attemptId }) {
86
88
  const cfg = { ...DEFAULTS, ...(config || {}) };
87
89
  const s = normalizeState(state);
88
90
 
@@ -109,6 +111,7 @@ function recordUploadFailure({ nowMs, state, error, config }) {
109
111
  lastError: truncate(String(error?.message || "upload failed"), 200),
110
112
  lastErrorStatus: status,
111
113
  lastErrorCode: typeof error?.code === "string" ? error.code : null,
114
+ lastErrorAttemptId: typeof attemptId === "string" && attemptId ? attemptId : null,
112
115
  updatedAt: new Date(nowMs).toISOString(),
113
116
  };
114
117
  }
@@ -1 +0,0 @@
1
- import{a as b,r as l,j as r,c as e,i as v}from"./__vite-browser-external-CU61PE6P.js";const x={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_APP_VERSION:"1.1.8",VITE_INSFORGE_ANON_KEY:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3OC0xMjM0LTU2NzgtOTBhYi1jZGVmMTIzNDU2NzgiLCJlbWFpbCI6ImFub25AaW5zZm9yZ2UuY29tIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODExNDU5NDd9.T0auta_IrVIh0uXW1bob5QSnzvsnJmN28r5XkSGEuQY",VITE_INSFORGE_BASE_URL:"https://srctyff5.us-east.insforge.app"};function f(){return v(),`${(x&&"https://srctyff5.us-east.insforge.app"||"https://srctyff5.us-east.insforge.app").replace(/\/$/,"")}/functions/tokentracker-device-flow-grant`}function p(s){return(s||"").toUpperCase().replace(/\s+/g,"").replace(/[^A-Z0-9-]/g,"")}function h(){const s=b(),[m,g]=l.useState(""),[i,a]=l.useState({kind:"idle",message:""});l.useEffect(()=>{try{const d=new URLSearchParams(window.location.search).get("user_code");d&&g(p(d))}catch{}},[]);async function u(c){if(c?.preventDefault?.(),!s?.signedIn){a({kind:"error",message:e("device.approval.error.sign_in")});return}const d=p(m);if(!/^[A-HJKMNP-Z2-9]{4}-[A-HJKMNP-Z2-9]{4}$/.test(d)){a({kind:"error",message:e("device.approval.error.invalid_code")});return}a({kind:"working",message:e("device.approval.action.approving")});try{const n=await s.getAccessToken?.();if(!n){a({kind:"error",message:e("device.approval.error.no_token")});return}const o=await fetch(f(),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({user_code:d})}),t=await o.json().catch(()=>({}));o.ok?a({kind:"success",message:t.status==="already_approved"?t.client_info?e("device.approval.success.already_client",{client:t.client_info}):e("device.approval.success.already"):t.client_info?e("device.approval.success.approved_client",{client:t.client_info}):e("device.approval.success.approved")}):o.status===404?a({kind:"error",message:e("device.approval.error.not_found")}):o.status===410?a({kind:"error",message:e("device.approval.error.expired")}):o.status===401?a({kind:"error",message:e("device.approval.error.session_expired")}):a({kind:"error",message:t?.error?e("device.approval.error.server_detail",{message:t.error}):e("device.approval.error.server",{status:o.status})})}catch(n){a({kind:"error",message:e("device.approval.error.network",{message:n?.message||n})})}}return r.jsx("div",{className:"min-h-screen flex items-center justify-center bg-white dark:bg-oai-gray-950 px-6 py-12",children:r.jsxs("div",{className:"w-full max-w-md rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-900 p-8",children:[r.jsx("h1",{className:"text-2xl font-semibold text-oai-gray-900 dark:text-white mb-2",children:e("device.approval.title")}),r.jsx("p",{className:"text-sm text-oai-gray-500 dark:text-oai-gray-400 mb-6",children:e("device.approval.description")}),s?.signedIn?null:r.jsx("div",{className:"rounded-md border border-amber-200 bg-amber-50 dark:bg-amber-900/20 dark:border-amber-800 p-4 mb-4",children:r.jsx("p",{className:"text-sm text-amber-700 dark:text-amber-300",children:e("device.approval.sign_in_banner")})}),r.jsxs("form",{onSubmit:u,className:"space-y-4",children:[r.jsxs("label",{className:"block",children:[r.jsx("span",{className:"block text-xs font-medium uppercase tracking-wide text-oai-gray-500 dark:text-oai-gray-400 mb-1",children:e("device.approval.code_label")}),r.jsx("input",{type:"text",value:m,onChange:c=>g(p(c.target.value)),placeholder:"XXXX-XXXX",spellCheck:!1,autoCapitalize:"characters",maxLength:9,className:"w-full font-mono text-xl tracking-widest text-center rounded-md border border-oai-gray-300 dark:border-oai-gray-700 bg-white dark:bg-oai-gray-900 text-oai-gray-900 dark:text-white px-4 py-3 focus:outline-none focus:ring-inset focus:ring-2 focus:ring-emerald-600"})]}),r.jsx("button",{type:"submit",disabled:i.kind==="working"||!s?.signedIn,className:"w-full rounded-md bg-emerald-600 hover:bg-emerald-500 disabled:bg-oai-gray-300 disabled:cursor-not-allowed text-white font-medium py-3 transition-colors",children:i.kind==="working"?e("device.approval.action.approving"):e("device.approval.action.approve")})]}),i.kind==="success"&&r.jsx("div",{className:"mt-4 rounded-md border border-emerald-200 bg-emerald-50 dark:bg-emerald-900/20 dark:border-emerald-800 p-4",children:r.jsx("p",{className:"text-sm text-emerald-700 dark:text-emerald-300",children:i.message})}),i.kind==="error"&&r.jsx("div",{className:"mt-4 rounded-md border border-red-200 bg-red-50 dark:bg-red-900/20 dark:border-red-800 p-4",children:r.jsx("p",{className:"text-sm text-red-700 dark:text-red-300",children:i.message})})]})})}export{h as default};
@@ -1 +0,0 @@
1
- import{r as n,v as a}from"./__vite-browser-external-CU61PE6P.js";import{u as p}from"./DialogTitle-_gEgVrEF.js";import{u as c}from"./composite-84597ykh.js";const x=n.forwardRef(function(e,r){const{render:l,className:u,style:m,id:s,...t}=e,i=p(),o=c(s);return i.useSyncedValueWithCleanup("descriptionElementId",o),a("p",e,{ref:r,props:[{id:o},t]})});export{x as D};
@@ -1 +0,0 @@
1
- import{r as o}from"./__vite-browser-external-CU61PE6P.js";import{h as r,i as t,p as s}from"./react-BhNxIPTw.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};
@@ -1 +0,0 @@
1
- import{J as S,ae as x,r as w,c as N,af as C,ag as O,ah as g}from"./__vite-browser-external-CU61PE6P.js";import{l as R,i as _,L as P,a as q}from"./use-limits-display-prefs-BB8SjBZP.js";import{u as z}from"./use-latest-request-guard-AUvY3uHN.js";const F="native:notificationPermission";let M=null;function I(){return typeof window<"u"&&!!window.chrome?.webview}function L(){return S()?M||"unknown":I()?"granted":typeof Notification>"u"?"unsupported":Notification.permission}function j(e){if(typeof window>"u")return()=>{};const n=i=>{const a=i?.detail?.status;typeof a=="string"&&(M=a),e(L())};return window.addEventListener(F,n),e(L()),S()&&x({type:"getNotificationStatus"}),()=>window.removeEventListener(F,n)}async function T(){if(S()){x({type:"requestNotificationPermission"});return}I()||typeof Notification<"u"&&Notification.permission==="default"&&await Notification.requestPermission().catch(()=>"denied")}const v="tt.limitAlerts.enabled";function $(){try{return window.localStorage.getItem(v)==="1"}catch{return!1}}function te(){const[e,n]=w.useState($),[i,a]=w.useState("unknown");w.useEffect(()=>j(a),[]);const y=w.useCallback(async o=>{const r=!!o;r&&await T();try{window.localStorage.setItem(v,r?"1":"0")}catch{}n(r)},[]);return{enabled:e,setEnabled:y,permissionBlocked:i==="denied"}}function B(e,n){if(!(e>0))return null;const i=(e-n)/e;return Number.isFinite(i)?Math.min(Math.max(i,0),1):null}function G(e,n,i=.03){return e>n+i}function V(e){const n=Math.max(0,Math.floor(e)),i=Math.floor(n/3600);return i>24?`${Math.floor(i/24)}d`:i>0?`${i}h`:`${Math.floor(n/60)}m`}function J(e,n){if(typeof e.windowSeconds=="number")return e.windowSeconds;if(e.windowSecondsField&&n){const i=n[e.windowSecondsField];return typeof i=="number"&&i>0?i:null}return null}function U(e){return e==null?NaN:typeof e=="number"?e*1e3:Date.parse(e)}function H({usedPercent:e,windowSeconds:n,resetMs:i,mode:a,now:y=Date.now()}){const o=Math.min(Math.max(Number(e)||0,0),100)/100,r={pacePercent:null,paceOver:!1,expectedPercent:null,runsOutEta:null,projectedEnd:null};if(!(n>0)||!Number.isFinite(i))return r;const l=Math.max(0,(i-y)/1e3),d=B(n,l);if(d==null)return r;if(r.expectedPercent=Math.round(d*100),r.paceOver=G(o,d),o>0){const c=a==="remaining"?1-d:d;r.pacePercent=c*100}if(d>.02&&o>0){const c=n*d,m=o/c,f=o/d;f>=1&&m>0?r.runsOutEta=V((1-o)/m):r.projectedEnd=Math.round(Math.min(f,1)*100)}return r}const W={claude:{windows(e){const n=Array.isArray(e.weekly_scoped)?e.weekly_scoped.map(i=>({key:`scoped-${i.label}`,label:i.label,window:i,pctField:"utilization",resetField:"resets_at",windowSeconds:604800})):[];return[{key:"5h",labelKey:"limits.label.claude_5h",window:e.five_hour,pctField:"utilization",resetField:"resets_at",windowSeconds:5*3600},{key:"7d",labelKey:"limits.label.claude_7d",window:e.seven_day,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},{key:"opus",labelKey:"limits.label.claude_opus",window:e.seven_day_opus,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},...n]}},codex:{extra:"codex_meta",windows(e){return[{key:"5h",labelKey:"limits.label.codex_5h",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"7d",labelKey:"limits.label.codex_7d",window:e.secondary_window,windowSecondsField:"limit_window_seconds"},{key:"credits",labelKey:"limits.label.codex_credits",window:e.credit_window},{key:"spark-5h",labelKey:"limits.label.codex_spark_5h",window:e.spark_primary_window,windowSecondsField:"limit_window_seconds"},{key:"spark-7d",labelKey:"limits.label.codex_spark_7d",window:e.spark_secondary_window,windowSecondsField:"limit_window_seconds"}]}},cursor:{windows(e){return[{key:"plan",labelKey:"limits.label.cursor_plan",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"auto",labelKey:"limits.label.cursor_auto",window:e.secondary_window,windowSecondsField:"limit_window_seconds"},{key:"api",labelKey:"limits.label.cursor_api",window:e.tertiary_window,windowSecondsField:"limit_window_seconds"},{key:"grok-bot",labelKey:"limits.label.cursor_grok_bot",window:e.quaternary_window,windowSecondsField:"limit_window_seconds"}]}},gemini:{windows(e){return[{key:"pro",labelKey:"limits.label.gemini_pro",window:e.primary_window},{key:"flash",labelKey:"limits.label.gemini_flash",window:e.secondary_window},{key:"lite",labelKey:"limits.label.gemini_lite",window:e.tertiary_window}]}},kimi:{extra:"kimi_parallel",windows(e){return[{key:"weekly",labelKey:"limits.label.kimi_weekly",window:e.primary_window,windowSeconds:7*86400},{key:"5h",labelKey:"limits.label.kimi_5h",window:e.secondary_window,windowSeconds:5*3600},{key:"total",labelKey:"limits.label.kimi_total",window:e.tertiary_window}]}},kiro:{extra:"kiro_credits",windows(e){return[{key:"month",labelKey:"limits.label.kiro_month",window:e.primary_window},{key:"bonus",labelKey:"limits.label.kiro_bonus",window:e.secondary_window}]}},grok:{windows(e){const n=typeof e.period_type=="string"?e.period_type:null,i=n==="weekly"?"limits.label.grok_week":n==="daily"?"limits.label.grok_day":"limits.label.grok_month",a=n==="weekly"?7*86400:n==="daily"?86400:void 0;return[{key:n==="weekly"?"week":n==="daily"?"day":"month",labelKey:i,window:e.primary_window,windowSeconds:a},{key:"ondemand",labelKey:"limits.label.grok_ondemand",window:e.secondary_window}]}},antigravity:{windows(e){return[{key:"claude-weekly",labelKey:"limits.label.antigravity_claude_weekly",window:e.primary_window},{key:"claude-5h",labelKey:"limits.label.antigravity_claude_5h",window:e.secondary_window},{key:"gemini-weekly",labelKey:"limits.label.antigravity_gemini_weekly",window:e.tertiary_window},{key:"gemini-5h",labelKey:"limits.label.antigravity_gemini_5h",window:e.quaternary_window}]}},copilot:{extra:"copilot_otel",windows(e){return[{key:"premium",labelKey:"limits.label.copilot_premium",window:e.primary_window},{key:"chat",labelKey:"limits.label.copilot_chat",window:e.secondary_window}]}},zcode:{windows(e){if(e.plan_kind==="coding-plan")return[{key:"5h",labelKey:"limits.label.zcode_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.zcode_weekly",window:e.secondary_window},{key:"tools",labelKey:"limits.label.zcode_tools",window:e.tertiary_window}];const n=Array.isArray(e.buckets)?e.buckets.filter(i=>i?.label&&i.window):[];return n.length?n.map((i,a)=>({key:`bucket-${i.entitlement_id||a}`,label:i.label,window:i.window})):[{key:"glm52",labelKey:"limits.label.zcode_glm52",window:e.primary_window},{key:"glm5t",labelKey:"limits.label.zcode_glm5t",window:e.secondary_window}]}},opencodeGo:{windows(e){return[{key:"5h",labelKey:"limits.label.opencode_go_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.opencode_go_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.opencode_go_monthly",window:e.tertiary_window}]}},qoder:{windows(e){return[{key:"credits",labelKey:"limits.label.qoder_credits",window:e.primary_window},{key:"ultimate",labelKey:"limits.label.qoder_ultimate",window:e.secondary_window,timeKind:"expiry"}]}},qoderCn:{windows(e){return[{key:"credits",labelKey:"limits.label.qoder_cn_credits",window:e.primary_window},{key:"ultimate",labelKey:"limits.label.qoder_cn_ultimate",window:e.secondary_window,timeKind:"expiry"}]}},codingPlan:{windows(e){return[{key:"5h",labelKey:"limits.label.ark_coding_plan_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.ark_coding_plan_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.ark_coding_plan_monthly",window:e.tertiary_window}]}},commandCode:{windows(e){return[{key:"5h",labelKey:"limits.label.command_code_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.command_code_weekly",window:e.secondary_window}]}},agentPlan:{windows(e){return[{key:"5h",labelKey:"limits.label.ark_agent_plan_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.ark_agent_plan_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.ark_agent_plan_monthly",window:e.tertiary_window}]}},devin:{windows(e){return[{key:"daily",labelKey:"limits.label.devin_daily",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"weekly",labelKey:"limits.label.devin_weekly",window:e.secondary_window,windowSecondsField:"limit_window_seconds"}]}}},D="tt.limitAlerts.cycles.v1";function Y(){try{return JSON.parse(window.localStorage.getItem(D)||"{}")}catch{return{}}}function Q(e){try{window.localStorage.setItem(D,JSON.stringify(e))}catch{}}function X(e,{now:n=Date.now()}={}){const i=[],a=W;for(const[y,o]of Object.entries(e||{})){const r=a[y];if(!(!o?.configured||o.error||!r))for(const l of r.windows(o)){if(!l.window)continue;const d=Number(l.pctField==="utilization"?l.window.utilization:l.window.used_percent),c=l.resetField==="resets_at"?l.window.resets_at:l.window.reset_at,m=U(c),f=H({usedPercent:d,windowSeconds:J(l,l.window),resetMs:m,mode:"used",now:n});!f.runsOutEta||!f.paceOver||d<20||!(m>n)||i.push({id:`${y}:${l.key}:${m}`,providerId:y,windowKey:l.key,resetMs:m,usedPercent:d,runsOutEta:f.runsOutEta})}}return i}function Z(e){const n=Y(),i=X(e);for(const o of i){if(n[o.id])continue;const r=R(o.providerId),l=N("limits.alert.title",{provider:r}),d=N("limits.alert.body",{eta:o.runsOutEta,percent:Math.round(o.usedPercent)});let c=C({title:l,body:d,id:o.id});!c&&typeof Notification<"u"&&Notification.permission==="granted"&&(new Notification(l,{body:d,tag:o.id}),c=!0),c&&(n[o.id]=Date.now())}const a=Date.now()-864e5,y=Object.fromEntries(Object.entries(n).filter(([o,r])=>{const l=Number(o.split(":").at(-1));return Number.isFinite(l)?l>=a:Number(r)>=a}).slice(-100));return Q(y),i.length}function k(e,n){return!e||n||!e.devin||e.devin.configured===!1&&Object.keys(e.devin).length===1?e:{...e,devin:{configured:!1}}}function oe(e){const n=!!e?.initialState,[i,a]=w.useState(_),[y,o]=w.useState(()=>n?k(e?.initialState?.data??null,_()):null),[r,l]=w.useState(()=>n?e?.initialState?.error??null:null),[d,c]=w.useState(!n),m=!!e?.initialRefresh,f=!!e?.publishToPreloadCache,b=z([i]);w.useEffect(()=>{if(typeof window>"u")return;const s=()=>a(_()),t=u=>{q(u.key)&&s()};return window.addEventListener(P,s),window.addEventListener("storage",t),()=>{window.removeEventListener(P,s),window.removeEventListener("storage",t)}},[]),w.useEffect(()=>{if(!(!y||typeof window>"u"))try{window.localStorage.getItem(v)==="1"&&Z(y)}catch{}},[y]);const p=w.useCallback((s,t)=>{!f||!s||typeof s!="object"||O(k(s,_()),{source:t})},[f]),A=w.useCallback(async()=>{const s=b();try{const t=await g({refresh:!0,devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),c(!1),p(u,"manual-refresh")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]),h=w.useCallback(async()=>{const s=b();try{const t=await g({devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),c(!1),p(u,"page-load")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]);w.useEffect(()=>{if(typeof window>"u"||typeof document>"u")return;const s=15e3;let t=Date.now();const u=()=>{if(document.visibilityState!=="visible")return;const E=Date.now();E-t<s||(t=E,h())};return window.addEventListener("focus",u),document.addEventListener("visibilitychange",u),()=>{window.removeEventListener("focus",u),document.removeEventListener("visibilitychange",u)}},[h]);const K=w.useRef(i);return w.useEffect(()=>{K.current!==i&&(K.current=i,i||o(s=>k(s,!1)),h())},[i,h]),w.useEffect(()=>{if(n&&!m)return;const s=b();(async()=>{try{const t=await g({devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),p(u,"page-load")}catch(t){if(!s())return;l(t?.message||String(t))}finally{s()&&c(!1)}})()},[b,n,m,p]),{data:y,error:r,isLoading:d,refresh:A}}export{W as P,J as a,te as b,H as c,U as r,Z as s,oe as u};