ccusage 18.0.10 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ import{$ as e,A as t,At as n,B as r,Bt as i,C as a,Ct as o,D as s,Dt as c,E as l,Et as u,F as d,Ft as f,G as p,H as m,Ht as h,I as g,It as _,J as v,K as y,L as b,Lt as ee,M as x,Mt as S,N as te,Nt as C,O as w,Ot as ne,P as T,Pt as re,Q as ie,R as ae,Rt as oe,S as se,St as ce,T as le,Tt as ue,U as de,Ut as fe,V as pe,Vt as me,W as E,X as he,Y as ge,Z as _e,_ as ve,_t as ye,a as be,at as xe,b as Se,bt as Ce,ct as we,d as Te,dt as D,et as Ee,f as De,ft as O,gt as k,ht as Oe,it as ke,j as Ae,jt as A,k as j,kt as je,l as Me,lt as Ne,m as Pe,mt as Fe,n as Ie,nt as Le,ot as Re,p as ze,pt as Be,q as M,rt as Ve,st as He,t as Ue,tt as We,u as Ge,ut as N,v as Ke,vt as qe,w as P,wt as Je,x as Ye,xt as Xe,y as Ze,yt as Qe,z as F,zt as I}from"./data-loader-DT2qlJ97.js";import{createRequire as $e}from"node:module";import{existsSync as et,mkdirSync as tt,readFileSync as nt,readdirSync as rt,realpathSync as it,writeFileSync as at}from"node:fs";import L,{dirname as ot,join as st}from"node:path";import R from"node:process";import{readFile as ct,stat as lt}from"node:fs/promises";import ut,{homedir as dt,tmpdir as ft}from"node:os";import{isMainThread as z,parentPort as pt,workerData as B}from"node:worker_threads";import*as mt from"node:util";const ht=()=>{},gt={help:{type:`boolean`,short:`h`,description:`Display this help message`},version:{type:`boolean`,short:`v`,description:`Display this version`}},_t={name:void 0,description:void 0,version:void 0,cwd:void 0,usageSilent:!1,subCommands:void 0,leftMargin:2,middleMargin:10,usageOptionType:!1,usageOptionValue:!0,renderHeader:void 0,renderUsage:void 0,renderValidationErrors:void 0,translationAdapterFactory:void 0};function V(e){return typeof e==`function`&&`commandName`in e&&!!e.commandName}async function vt(e,t,n=!1){let r;if(V(e)){if(r=Object.assign(U(),{name:e.commandName,description:e.description,args:e.args,examples:e.examples,resource:e.resource}),n){let n=await e();if(typeof n==`function`)r.run=n;else if(typeof n==`object`){if(n.run==null)throw TypeError(`'run' is required in command: ${e.name||t}`);r.run=n.run,r.name=n.name,r.description=n.description,r.args=n.args,r.examples=n.examples,r.resource=n.resource}else throw TypeError(`Cannot resolve command: ${e.name||t}`)}}else r=Object.assign(U(),e);return r.name==null&&t&&(r.name=t),Ct(r)}function H(e){return`_:${e}`}function yt(e){return`arg:${e}`}async function bt(e,t){return typeof t==`string`?t:typeof t==`function`?await t(e):``}function xt(e){return Object.entries(e).reduce((e,[t,n])=>(e[H(t)]=n,e),U())}function U(e=null){return Object.create(e)}function St(...e){console.log(...e)}function Ct(e){if(typeof e!=`object`||!e)return e;for(let t of Object.keys(e)){let n=e[t];typeof n==`object`&&n&&Ct(n)}return Object.freeze(e)}var wt={COMMAND:`COMMAND`,COMMANDS:`COMMANDS`,SUBCOMMAND:`SUBCOMMAND`,USAGE:`USAGE`,ARGUMENTS:`ARGUMENTS`,OPTIONS:`OPTIONS`,EXAMPLES:`EXAMPLES`,FORMORE:"For more info, run any command with the `--help` flag:",NEGATABLE:`Negatable of`,DEFAULT:`default`,CHOICES:`choices`,help:`Display this help message`,version:`Display this version`};function Tt(e){return new Et(e)}var Et=class{#e=new Map;#t;constructor(e){this.#t=e,this.#e.set(e.locale,U()),e.locale!==e.fallbackLocale&&this.#e.set(e.fallbackLocale,U())}getResource(e){return this.#e.get(e)}setResource(e,t){this.#e.set(e,t)}getMessage(e,t){let n=this.getResource(e);if(n)return n[t]}translate(e,t,n=U()){let r=this.getMessage(e,t);if(r===void 0&&e!==this.#t.fallbackLocale&&(r=this.getMessage(this.#t.fallbackLocale,t)),r!==void 0)return r.replaceAll(/\{\{(\w+)\}\}/g,(e,t)=>n[t]==null?``:n[t].toString())}};const Dt=`_`.codePointAt(0);async function Ot({args:e,values:t,positionals:n,rest:r,argv:i,tokens:a,command:o,cliOptions:s,callMode:c=`entry`,omitted:l=!1}){let u=Object.entries(e).reduce((e,[t,n])=>(e[t]=Object.assign(U(),n),e),U()),d=Object.assign(U(),_t,s),f=At(s.locale),p=f.toString(),m=(s.translationAdapterFactory||Tt)({locale:p,fallbackLocale:`en-US`}),h=new Map,g;if(h.set(`en-US`,xt(wt)),p!==`en-US`)try{g=(await import(`./locales/${p}.json`,{with:{type:`json`}})).default,h.set(p,xt(g))}catch{}function _(e,t=U()){let n=e;return n.codePointAt(0)===Dt?(h.get(p)||h.get(`en-US`))[n]||n:m.translate(f.toString(),n,t)||``}let v;async function y(){if(v)return v;let e=[...s.subCommands||[]];return v=await Promise.all(e.map(async([e,t])=>await vt(t,e)))}let b=Ct(Object.assign(U(),{name:kt(o),description:o.description,omitted:l,callMode:c,locale:f,env:d,args:u,values:t,positionals:n,rest:r,_:i,tokens:a,toKebab:o.toKebab,log:s.usageSilent?ht:St,loadCommands:y,translate:_})),ee=Object.entries(e).map(([e,t])=>[e,t.description||``]).reduce((e,[t,n])=>(e[yt(t)]=n,e),U());ee.description=o.description||``,ee.examples=await bt(b,o.examples),m.setResource(`en-US`,ee);let x=await jt(b,o);if(x){let e=Object.assign(U(),x,{examples:await bt(b,x.examples)});g&&(e.help=g.help,e.version=g.version),m.setResource(p,e)}return b}function kt(e){return V(e)?e.commandName||e.name||`(anonymous)`:typeof e==`object`&&e.name||`(anonymous)`}function At(e){return e instanceof Intl.Locale?e:typeof e==`string`?new Intl.Locale(e):new Intl.Locale(`en-US`)}async function jt(e,t){let n;try{n=await t.resource?.(e)}catch{}return n}function W(e){return e}
2
+ /**
3
+ * @author kazuya kawaguchi (a.k.a. kazupon)
4
+ * @license MIT
5
+ */
6
+ function Mt(e){return e.replace(/[A-Z]/g,(e,t)=>(t>0?`-`:``)+e.toLowerCase())}function Nt(e){let t=e.env.description||e.env.name||``;return Promise.resolve(t&&`${t} (${e.env.name||``}${e.env.version?` v${e.env.version}`:``})`)}const Pt=Object.keys(gt);async function Ft(e){let t=[];if(!e.omitted){let n=Ut(e);n&&t.push(n,``)}t.push(...await zt(e),``),e.omitted&&await Gt(e)&&t.push(...await Bt(e),``),qt(e)&&t.push(...await It(e),``),Kt(e)&&t.push(...await Lt(e),``);let n=await Rt(e);return n.length>0&&t.push(...n,``),t.join(`
7
+ `)}async function It(e){let t=[];return t.push(`${e.translate(H(`ARGUMENTS`))}:`),t.push(await an(e)),t}async function Lt(e){let t=[];return t.push(`${e.translate(H(`OPTIONS`))}:`),t.push(await nn(e,Zt(e))),t}async function Rt(e){let t=[],n=await Wt(e);if(n){let r=n.split(`
8
+ `).map(t=>t.padStart(e.env.leftMargin+t.length));t.push(`${e.translate(H(`EXAMPLES`))}:`,...r)}return t}async function zt(e){let t=[`${e.translate(H(`USAGE`))}:`];if(e.omitted){let n=`${Vt(e)}${await Gt(e)?` [${Ht(e)}]`:``} ${[Yt(e),on(e)].filter(Boolean).join(` `)}`;if(t.push(n.padStart(e.env.leftMargin+n.length)),await Gt(e)){let n=`${Vt(e)} <${e.translate(H(`COMMANDS`))}>`;t.push(n.padStart(e.env.leftMargin+n.length))}}else{let n=`${Vt(e)} ${Ht(e)} ${[Yt(e),on(e)].filter(Boolean).join(` `)}`;t.push(n.padStart(e.env.leftMargin+n.length))}return t}async function Bt(e){let t=[`${e.translate(H(`COMMANDS`))}:`],n=await e.loadCommands(),r=Math.max(...n.map(e=>(e.name||``).length)),i=await Promise.all(n.map(t=>{let n=t.name||``,i=t.description||``,a=`${n.padEnd(r+e.env.middleMargin)}${i} `;return`${a.padStart(e.env.leftMargin+a.length)} `}));return t.push(...i,``,e.translate(H(`FORMORE`))),t.push(...n.map(t=>{let n=`${e.env.name} ${t.name} --help`;return`${n.padStart(e.env.leftMargin+n.length)}`})),t}function Vt(e){return e.env.name||e.translate(H(`COMMAND`))}function Ht(e){return e.name||e.translate(H(`SUBCOMMAND`))}function Ut(e){return e.translate(`description`)||e.description||``}async function Wt(e){let t=e.translate(`examples`);if(t)return t;let n=e.env.subCommands?.get(e.name||``);return await bt(e,n?.examples)}async function Gt(e){return(await e.loadCommands()).length>1}function Kt(e){return!!(e.args&&Object.values(e.args).some(e=>e.type!==`positional`))}function qt(e){return!!(e.args&&Object.values(e.args).some(e=>e.type===`positional`))}function Jt(e){return!!(e.args&&Object.values(e.args).every(e=>e.default))}function Yt(e){return Kt(e)?Jt(e)?`[${e.translate(H(`OPTIONS`))}]`:`<${e.translate(H(`OPTIONS`))}>`:``}function Xt(e,t,n){let r=`--${n||e.toKebab?Mt(t):t}`;return e.short&&(r=`-${e.short}, ${r}`),r}function Zt(e){return Object.entries(e.args).reduce((t,[n,r])=>{if(r.type===`positional`)return t;let i=Xt(r,n,e.toKebab);if(r.type!==`boolean`){let t=e.toKebab||r.toKebab?Mt(n):n;i=r.default?`${i} [${t}]`:`${i} <${t}>`}if(t[n]=i,r.type===`boolean`&&r.negatable&&!Pt.includes(n)){let i=e.toKebab||r.toKebab?Mt(n):n;t[`no-${n}`]=`--no-${i}`}return t},U())}const Qt=e=>e.split(`no-`)[1];function $t(e,t){return t.args[e.startsWith(`no-`)?Qt(e):e].type}function en(e,t){return`${e.translate(H(`DEFAULT`))}: ${t.default}`}function tn(e,t){if(Pt.includes(t))return``;let n=e.args[t];if((n.type===`boolean`||n.type===`number`||n.type===`string`||n.type===`custom`)&&n.default!==void 0)return`(${en(e,n)})`;if(n.type===`enum`){let t=n.default===void 0?``:en(e,n),r=`${e.translate(H(`CHOICES`))}: ${n.choices.join(` | `)}`;return`(${t?`${t}, ${r}`:r})`}return``}async function nn(e,t){let n=Math.max(...Object.entries(t).map(([e,t])=>t.length)),r=e.env.usageOptionType?Math.max(...Object.entries(t).map(([t])=>$t(t,e).length)):0;return(await Promise.all(Object.entries(t).map(([t,i])=>{let a=e.translate(yt(t));if(!a&&t.startsWith(`no-`)){let n=Qt(t),r=e.args[n],i=Xt(r,n,e.toKebab);a=`${e.translate(H(`NEGATABLE`))} ${i}`}let o=e.env.usageOptionType?`[${$t(t,e)}] `:``,s=t.startsWith(`no-`)?``:tn(e,t),c=`${o?o.padEnd(r+3):``}${a}`,l=`${i.padEnd(n+e.env.middleMargin)}${c}${s?` ${s}`:``}`;return`${l.padStart(e.env.leftMargin+l.length)}`}))).join(`
9
+ `)}function rn(e){return Object.entries(e.args).filter(([e,t])=>t.type===`positional`)}async function an(e){let t=rn(e),n=Math.max(...t.map(([e])=>e.length));return(await Promise.all(t.map(([t])=>{let r=e.translate(yt(t))||e.args[t].description||``,i=`${t.padEnd(n+e.env.middleMargin)} ${r}`;return`${i.padStart(e.env.leftMargin+i.length)}`}))).join(`
10
+ `)}function on(e){return qt(e)?rn(e).map(([e])=>`<${e}>`).join(` `):``}function sn(e,t){let n=[];for(let e of t.errors)n.push(e.message);return Promise.resolve(n.join(`
11
+ `))}const cn=`-`.codePointAt(0),ln=`=`.codePointAt(0);function un(e,t={}){let{allowCompatible:n=!1}=t,r=[],i=[...e],a=-1,o=0,s=!1;for(;i.length>0;){let e=i.shift();if(e==null)break;let t=i[0];if(o>0?o--:a++,e===`--`){r.push({kind:`option-terminator`,index:a});let e=i.map(e=>({kind:`positional`,index:++a,value:e}));r.push(...e);break}if(dn(e)){let n=e.charAt(1),c,l;o?(r.push({kind:`option`,name:n,rawName:e,index:a,value:c,inlineValue:l}),o===1&&gn(t)&&(c=i.shift(),s&&=(l=!0,!1),r.push({kind:`option`,index:a,value:c,inlineValue:l}))):r.push({kind:`option`,name:n,rawName:e,index:a,value:c,inlineValue:l}),c!=null&&++a;continue}if(fn(e)){let t=[],r=``;for(let i=1;i<e.length;i++){let a=e.charAt(i);s?r+=a:!n&&a.codePointAt(0)===ln?s=!0:t.push(`-${a}`)}r&&t.push(r),i.unshift(...t),o=t.length;continue}if(pn(e)){let t=e.slice(2);r.push({kind:`option`,name:t,rawName:e,index:a,value:void 0,inlineValue:void 0});continue}if(mn(e)){let t=e.indexOf(`=`),n=e.slice(2,t),i=e.slice(t+1);r.push({kind:`option`,name:n,rawName:`--${n}`,index:a,value:i,inlineValue:!0});continue}r.push({kind:`positional`,index:a,value:e})}return r}function dn(e){return e.length===2&&e.codePointAt(0)===cn&&e.codePointAt(1)!==cn}function fn(e){return!(e.length<=2||e.codePointAt(0)!==cn||e.codePointAt(1)===cn)}function pn(e){return hn(e)&&!e.includes(`=`,3)}function mn(e){return hn(e)&&e.includes(`=`,3)}function hn(e){return e.length>2&&~e.indexOf(`--`)}function gn(e){return e!=null&&e.codePointAt(0)!==cn}function _n(e,t,{shortGrouping:n=!1,skipPositional:r=-1,toKebab:i=!1}={}){let a=typeof r==`number`?Math.max(r,-1):-1,o=[],s=[],c=[],l,u,d=[];function f(){if(d.length!==0){let e=d.map(e=>e.name).join(``);return d.length=0,e}}function p(e=void 0){l&&=(l.value=e,s.push({...l}),void 0)}function m(e=void 0){u&&=(u.value=e||f(),s.push({...u}),void 0)}let h=Object.values(e),g=!1;for(let r=0;r<t.length;r++){let i=t[r];if(i.kind===`positional`){if(g&&i.value){o.push(i.value);continue}u?h.find(e=>e.short===u.name&&e.type===`boolean`)&&c.push({...i}):l?e[l.name]?.type===`boolean`&&c.push({...i}):c.push({...i}),p(i.value),m(i.value)}else i.kind===`option`?i.rawName?hn(i.rawName)?(p(),i.inlineValue?s.push({...i}):l={...i},m()):dn(i.rawName)&&(u?(u.index===i.index?n?(u.value=i.value,s.push({...u}),u={...i}):d.push({...i}):(u.value=f(),s.push({...u}),u={...i}),p()):(u={...i},p())):(u&&u.index==i.index&&i.inlineValue&&(u.value=i.value,s.push({...u}),u=void 0),p()):(i.kind===`option-terminator`&&(g=!0),p(),m())}p(),m();let _=Object.create(null),v=[];function y(e,t,n){return n.name===(t.type===`boolean`&&t.negatable&&n.name?.startsWith(`no-`)?`no-${e}`:e)}let b=t.filter(e=>e.kind===`positional`).length;function ee(){return Math.min(a,b)}let x=0;for(let[t,n]of Object.entries(e)){let e=i||n.toKebab?Mt(t):t;if(n.required&&!s.find(t=>n.short&&t.name===n.short||t.rawName&&hn(t.rawName)&&t.name===e)){v.push(yn(e,n));continue}if(n.type===`positional`){if(a>-1)for(;x<=ee();)x++;let r=c[x];r==null?v.push(yn(e,n)):_[t]=r.value,x++;continue}for(let r=0;r<s.length;r++){let i=s[r];if(y(e,n,i)&&i.rawName!=null&&hn(i.rawName)||n.short===i.name&&i.rawName!=null&&dn(i.rawName)){let r=xn(i,e,n);if(r){v.push(r);continue}n.type===`boolean`&&(i.value=void 0);let[a,o]=vn(i,e,n);o?v.push(o):n.multiple?(_[t]||=[],_[t].push(a)):_[t]=a}}_[t]==null&&n.default!=null&&(_[t]=n.default)}return{values:_,positionals:c.map(e=>e.value),rest:o,error:v.length>0?AggregateError(v):void 0}}function vn(e,t,n){switch(n.type){case`string`:return typeof e.value==`string`?[e.value||n.default,void 0]:[void 0,Cn(t,n)];case`boolean`:return e.value?[e.value||n.default,void 0]:[!(n.negatable&&e.name.startsWith(`no-`)),void 0];case`number`:return Sn(e.value)?e.value?[+e.value,void 0]:[+(n.default||``),void 0]:[void 0,Cn(t,n)];case`enum`:return n.choices&&!n.choices.includes(e.value)?[void 0,new bn(`Optional argument '--${t}' ${n.short?`or '-${n.short}' `:``}should be chosen from '${n.type}' [${n.choices.map(e=>JSON.stringify(e)).join(`, `)}] values`,t,`type`,n)]:[e.value||n.default,void 0];case`custom`:if(typeof n.parse!=`function`)throw TypeError(`argument '${t}' should have a 'parse' function`);try{return[n.parse(e.value||String(n.default||``)),void 0]}catch(e){return[void 0,e]}default:throw Error(`Unsupported argument type '${n.type}' for option '${t}'`)}}function yn(e,t){return new bn(t.type===`positional`?`Positional argument '${e}' is required`:`Optional argument '--${e}' ${t.short?`or '-${t.short}' `:``}is required`,e,`required`,t)}var bn=class extends Error{name;schema;type;constructor(e,t,n,r){super(e),this.name=t,this.type=n,this.schema=r}};function xn(e,t,n){if(n.required&&n.type!==`boolean`&&!e.value)return yn(t,n)}function Sn(e){return e.trim()!==``&&!isNaN(e)}function Cn(e,t){return new bn(`Optional argument '--${e}' ${t.short?`or '-${t.short}' `:``}should be '${t.type}'`,e,`type`,t)}async function wn(e,t,n={}){let r=Dn(n,t),i=un(e),a=On(i),{commandName:o,command:s,callMode:c}=await Pn(a,t,r);if(!s)throw Error(`Command not found: ${o||``}`);let l=En(Tn(s)),{values:u,positionals:d,rest:f,error:p}=_n(l,i,{shortGrouping:!0,toKebab:s.toKebab,skipPositional:r.subCommands.size>0?0:-1}),m=await Ot({args:l,values:u,positionals:d,rest:f,argv:e,tokens:i,omitted:!a,callMode:c,command:s,cliOptions:r});if(u.version){An(m);return}let h=[],g=await jn(m);if(g&&h.push(g),u.help){let e=await kn(m);return e&&h.push(e),h.join(`
12
+ `)}if(p){await Mn(m,p);return}await In(s,m,o||``)}function Tn(e){return V(e)?e.args||U():typeof e==`object`&&e.args||U()}function En(e){return Object.assign(U(),e,gt)}function Dn(e,t){let n=new Map(e.subCommands);return e.subCommands&&(V(t)?n.set(t.commandName,t):typeof t==`object`&&t.name&&n.set(t.name,t)),Object.assign(U(),_t,e,{subCommands:n})}function On(e){let t=e[0];return t&&t.kind===`positional`&&t.index===0&&t.value?t.value:``}async function kn(e){if(e.env.renderUsage===null)return;let t=await(e.env.renderUsage||Ft)(e);if(t)return e.log(t),t}function An(e){e.log(e.env.version)}async function jn(e){if(e.env.renderHeader===null)return;let t=await(e.env.renderHeader||Nt)(e);if(t)return e.log(t),e.log(),t}async function Mn(e,t){if(e.env.renderValidationErrors===null)return;let n=e.env.renderValidationErrors||sn;e.log(await n(e,t))}const Nn={callMode:`unexpected`};async function Pn(e,t,n){let r=!e;async function i(){return typeof t==`function`?`commandName`in t&&t.commandName?{commandName:t.commandName,command:t,callMode:`entry`}:{command:{run:t},callMode:`entry`}:typeof t==`object`?{commandName:Fn(t),command:t,callMode:`entry`}:Nn}if(r||n.subCommands?.size===0)return i();let a=n.subCommands?.get(e);return a==null?{commandName:e,callMode:`unexpected`}:(V(a)&&a.commandName==null?a.commandName=e:typeof a==`object`&&a.name==null&&(a.name=e),{commandName:e,command:a,callMode:`subCommand`})}function Fn(e){return e.name||`(anonymous)`}async function In(e,t,n){let r=V(e)?await vt(e,n,!0):e;if(r.run==null)throw Error(`'run' not found on Command \`${n}\``);await r.run(t)}function Ln(e){let t={};for(let n of e)if(typeof n==`object`&&n){let e=n;e.kind===`option`&&typeof e.name==`string`&&(t[e.name]=!0)}return t}const Rn=[`claude`,`codex`,`opencode`,`amp`,`pi`],zn=new Set([`__proto__`,`constructor`,`prototype`]);function Bn(e){return!zn.has(e)}function Vn(){return[st(R.cwd(),`.ccusage`),...i(be())].map(e=>st(e,`ccusage.json`))}function Hn(e){if(typeof e!=`object`||!e)return!1;let t=e;if(t.$schema!=null&&typeof t.$schema!=`string`||t.defaults!=null&&(typeof t.defaults!=`object`||t.defaults===null||Array.isArray(t.defaults))||t.commands!=null&&(typeof t.commands!=`object`||t.commands===null||Array.isArray(t.commands)||Object.values(t.commands).some(e=>typeof e!=`object`||!e||Array.isArray(e))))return!1;for(let e of Rn)if(!Un(t[e]))return!1;return!0}function Un(e){if(e==null)return!0;if(typeof e!=`object`||Array.isArray(e))return!1;let t=e;return!(t.defaults!=null&&(typeof t.defaults!=`object`||t.defaults===null||Array.isArray(t.defaults))||t.commands!=null&&(typeof t.commands!=`object`||t.commands===null||Array.isArray(t.commands)||Object.values(t.commands).some(e=>typeof e!=`object`||!e||Array.isArray(e))))}function Wn(e){if(e==null)return{};for(let t of Rn){let n=`${t}:`,r=`${t} `;if(e.startsWith(n))return{agent:t,report:e.slice(n.length),raw:e};if(e.startsWith(r))return{agent:t,report:e.slice(r.length),raw:e}}return{report:e,raw:e}}function Gn(e,t=!1){if(!et(e)){t&&w.info(` • Checking: ${e} (not found)`);return}return C(S({try:()=>{let t=nt(e,`utf-8`),n=JSON.parse(t);if(!Hn(n))throw Error(`Invalid configuration structure`);return n.source=e,n},catch:e=>e})(),_(()=>{w.debug(`Parsed configuration file: ${e}`),t&&w.info(` • Checking: ${e} (found ✓)`)}),f(n=>{let r=n instanceof Error?n.message:String(n);w.warn(`Error parsing configuration file at ${e}: ${r}`),t&&w.info(` • Checking: ${e} (error: ${r})`)}),A(void 0))}function G(e,t=!1){if(t&&w.info(`Debug mode enabled - showing config loading details
13
+ `),e!=null){t&&(w.info(`Using specified config file:`),w.info(` • Path: ${e}`));let n=Gn(e,t);return n==null?w.warn(`Configuration file not found or invalid: ${e}`):t&&(w.info(``),w.info(`Loaded config from: ${e}`),w.info(` • Schema: ${n.$schema??`none`}`),w.info(` • Has defaults: ${n.defaults==null?`no`:`yes`}${n.defaults==null?``:` (${Object.keys(n.defaults).length} options)`}`),w.info(` • Has command configs: ${n.commands==null?`no`:`yes`}${n.commands==null?``:` (${Object.keys(n.commands).join(`, `)})`}`)),n}t&&w.info(`Searching for config files:`);for(let e of Vn()){let n=Gn(e,t);if(n!=null)return t&&(w.info(``),w.info(`Loaded config from: ${e}`),w.info(` • Schema: ${n.$schema??`none`}`),w.info(` • Has defaults: ${n.defaults==null?`no`:`yes`}${n.defaults==null?``:` (${Object.keys(n.defaults).length} options)`}`),w.info(` • Has command configs: ${n.commands==null?`no`:`yes`}${n.commands==null?``:` (${Object.keys(n.commands).join(`, `)})`}`)),n}w.debug(`No valid configuration file found`),t&&(w.info(``),w.info(`No valid configuration file found`))}function K(e,t,n=!1){if(t==null)return n&&(w.info(``),w.info(`No config file loaded, using CLI args only for '${e.name??`unknown`}' command`)),e.values;let r=Object.create(null),i=e.name,a=Wn(i),o=Object.create(null),s=(e,t)=>{if(e!=null)for(let[n,i]of Object.entries(e))Bn(n)&&(r[n]=i,o[n]=t)};if(s(t.defaults,`defaults`),a.raw!=null&&s(t.commands?.[a.raw],`command config`),a.agent!=null&&a.report!=null){s(t.commands?.[a.report],`command config`),s(t.commands?.[`${a.agent}:${a.report}`],`command config`);let e=t[a.agent];s(e?.defaults,`${a.agent} defaults`),s(e?.commands?.[a.report],`${a.agent} command config`)}let c=Ln(e.tokens);for(let[t,n]of Object.entries(e.values))n!=null&&c[t]===!0&&Bn(t)&&(r[t]=n,o[t]=`CLI`);if(w.debug(`Merged config for ${i??`unknown`}:`,r),n){w.info(``),w.info(`Merging options for '${i??`unknown`}' command:`);let e={};for(let[t,n]of Object.entries(o))e[n]??=[],e[n].push(`${t}=${JSON.stringify(r[t])}`);let t=[`defaults`,`command config`,a.agent==null?void 0:`${a.agent} defaults`,a.agent==null?void 0:`${a.agent} command config`,`CLI`].filter(e=>e!=null);for(let n of t)e[n]==null||e[n].length===0||w.info(` • From ${n===`CLI`?`CLI args`:n}: ${e[n].join(`, `)}`);w.info(` • Final merged options: {`);for(let[e,t]of Object.entries(r)){let n=o[e]??`unknown`;w.info(` ${e}: ${JSON.stringify(t)} (from ${n}),`)}w.info(` }`)}return r}function Kn(e){return Be(he,e)}const q={since:{type:`custom`,short:`s`,description:`Filter from date (YYYYMMDD format)`,parse:Kn},until:{type:`custom`,short:`u`,description:`Filter until date (YYYYMMDD format)`,parse:Kn},json:{type:`boolean`,short:`j`,description:`Output in JSON format`,default:!1},mode:{type:`enum`,short:`m`,description:`Cost calculation mode: auto (use costUSD if exists, otherwise calculate), calculate (always calculate), display (always use costUSD)`,default:`auto`,choices:v},debug:{type:`boolean`,short:`d`,description:`Show pricing mismatch information for debugging`,default:!1},debugSamples:{type:`number`,description:`Number of sample discrepancies to show in debug output (default: 5)`,default:5},order:{type:`enum`,short:`o`,description:`Sort order: desc (newest first) or asc (oldest first)`,default:`asc`,choices:ge},breakdown:{type:`boolean`,short:`b`,description:`Show per-model cost breakdown`,default:!1},offline:{type:`boolean`,negatable:!0,short:`O`,description:`Use cached pricing data for Claude models instead of fetching from API`,default:!1},singleThread:{type:`boolean`,description:`Disable parallel JSONL file loading`,default:!1},color:{type:`boolean`,description:`Enable colored output (default: auto). FORCE_COLOR=1 has the same effect.`},noColor:{type:`boolean`,description:`Disable colored output (default: auto). NO_COLOR=1 has the same effect.`},timezone:{type:`string`,short:`z`,description:`Timezone for date grouping (e.g., UTC, America/New_York, Asia/Tokyo). Default: system timezone`},config:{type:`string`,description:`Path to configuration file (default: auto-discovery)`},compact:{type:`boolean`,description:`Force compact mode for narrow displays (better for screenshots)`,default:!1}},qn={args:q,toKebab:!0},Jn=[`claude`,`codex`,`opencode`,`amp`,`pi`],Yn={all:`All`,claude:`Claude`,codex:`Codex`,opencode:`OpenCode`,amp:`Amp`,pi:`pi-agent`},Xn=new Map,Zn=new Map,Qn=new Map,$n=new Map,er=new Map;let tr;const nr=/^\d{4}-\d{2}-\d{2}T.*Z$/u,rr=/^\d{4}-\d{2}-\d{2}$/u,ir=/^\d{4}-\d{2}$/u;function ar(e,t,n){return`${e.toString().padStart(4,`0`)}-${t.toString().padStart(2,`0`)}-${n.toString().padStart(2,`0`)}`}function or(e){return ar(e.getFullYear(),e.getMonth()+1,e.getDate())}function sr(e){return ar(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate())}function cr(e){return`${e.getFullYear().toString().padStart(4,`0`)}-${(e.getMonth()+1).toString().padStart(2,`0`)}`}function lr(e){return`${e.getUTCFullYear().toString().padStart(4,`0`)}-${(e.getUTCMonth()+1).toString().padStart(2,`0`)}`}function ur(e){if(e==null||e===``)return;let t=/^\d{8}$/u.test(e)?`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`:/^\d{4}-\d{2}-\d{2}$/u.test(e)?e:void 0;if(t!=null&&dr(t))return t;throw Error(`Invalid date: ${e}. Use YYYY-MM-DD or YYYYMMDD.`)}function dr(e){let[t,n,r]=e.split(`-`).map(Number);if(t==null||n==null||r==null)return!1;let i=new Date(Date.UTC(t,n-1,r));return i.getUTCFullYear()===t&&i.getUTCMonth()===n-1&&i.getUTCDate()===r}function fr(e){return e?.replaceAll(`-`,``)}function pr(e,t,n){return!(t!=null&&e<t||n!=null&&e>n)}function mr(){return tr??=Intl.DateTimeFormat().resolvedOptions().timeZone??`UTC`,tr}function hr(e){if(e==null||e.trim()===``)return mr();let t=e.trim(),n=Xn.get(t);if(n!=null)return n;try{return Intl.DateTimeFormat(`en-US`,{timeZone:t}),Xn.set(t,t),t}catch{return Xn.set(t,`UTC`),`UTC`}}function gr(e){let t=Zn.get(e);if(t!=null)return t;let n=new Intl.DateTimeFormat(`en-CA`,{year:`numeric`,month:`2-digit`,day:`2-digit`,timeZone:e});return Zn.set(e,n),n}function _r(e){let t=Qn.get(e);if(t!=null)return t;let n=new Intl.DateTimeFormat(`en-CA`,{year:`numeric`,month:`2-digit`,timeZone:e});return Qn.set(e,n),n}function vr(e,t){if(t==null||t.trim()===``){let t=`local:${e.slice(0,13)}`,n=$n.get(t);if(n!=null)return n;let r=or(new Date(e));return $n.set(t,r),r}let n=hr(t);if(n===`UTC`&&nr.test(e))return e.slice(0,10);let r=new Date(e);if(n===`UTC`)return sr(r);let i=br(gr(n),r),a=`${n}:${i}`;return $n.get(a)??($n.set(a,i),i)}function yr(e,t){if(t==null||t.trim()===``){let t=`local:${e.slice(0,13)}`,n=er.get(t);if(n!=null)return n;let r=cr(new Date(e));return er.set(t,r),r}let n=hr(t);if(n===`UTC`&&nr.test(e))return e.slice(0,7);let r=new Date(e);if(n===`UTC`)return lr(r);let i=xr(_r(n),r),a=`${n}:${i}`;return er.get(a)??(er.set(a,i),i)}function br(e,t){let n=e.format(t);if(rr.test(n))return n;let{year:r,month:i,day:a}=Sr(e,t);return`${r}-${i}-${a}`}function xr(e,t){let n=e.format(t);if(ir.test(n))return n;let{year:r,month:i}=Sr(e,t);return`${r}-${i}`}function Sr(e,t){let n,r,i;for(let a of e.formatToParts(t))a.type===`year`?n=a.value:a.type===`month`?r=a.value:a.type===`day`&&(i=a.value);if(n==null||r==null)throw Error(`Date year/month parts not found`);return{year:n,month:r,day:i}}function Cr(e,t){return{period:e,agent:t,modelsUsed:[],inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,totalTokens:0,totalCost:0}}function wr(e){let t=e.metadata?.agents;return Array.isArray(t)?t.filter(e=>Jn.includes(e)):e.agent===`all`?[]:[e.agent]}function Tr(e,t){if(e.pricingFetcher!=null)return{fetcher:e.pricingFetcher,dispose:()=>{}};let n=t();return{fetcher:n,dispose:()=>n[Symbol.dispose]()}}function Er(e){return async(t,r,i)=>{let a=ur(r.since),o=ur(r.until),s=await e.loadEntries(r,i),c=e.prepare==null?void 0:await e.prepare(r,i),l=new Map;try{for(let n of s){let s=vr(e.getTimestamp(n),r.timezone);if(!pr(s,a,o))continue;let u=t===`session`?e.getSessionId(n):t===`monthly`?yr(e.getTimestamp(n),r.timezone):s,d=l.get(u)??{row:Cr(u,e.agent),models:new Set,entries:[]};l.has(u)||l.set(u,d);let f=await e.getUsage(n,c,r,i);d.row.inputTokens+=f.inputTokens,d.row.outputTokens+=f.outputTokens,d.row.cacheCreationTokens+=f.cacheCreationTokens,d.row.cacheReadTokens+=f.cacheReadTokens,d.row.totalTokens+=f.totalTokens??f.inputTokens+f.outputTokens+f.cacheCreationTokens+f.cacheReadTokens,d.row.totalCost+=f.totalCost,Dr(d.models,e.getModels(n)),d.entries.push(n)}return Array.from(l.values(),({row:r,models:i,entries:a})=>({...r,modelsUsed:Array.from(i).sort(n),metadata:e.getMetadata?.(a,t)})).sort((e,t)=>n(e.period,t.period))}finally{c!==void 0&&e.disposePrepared?.(c)}}}function Dr(e,t){for(let n of t)e.add(n)}function Or(e,t){let n=(()=>{if(e==null||e.trim()===``)return t;let n=e.split(`,`).map(e=>e.trim()).filter(e=>e!==``);return n.length===0?t:n})(),r=new Set;for(let e of n)r.add(L.resolve(e));return Array.from(r)}function kr(e){return e.filter(e=>c(e))}const Ar=L.join(ut.homedir(),`.local/share/amp`);function jr(){return kr(Or(R.env.AMP_DATA_DIR,[Ar]))}async function Mr(){return(await Promise.all(jr().map(async e=>ue(L.join(e,`threads`),{extension:`.json`})))).flat()}async function Nr(){return(await Promise.all(jr().map(async e=>u(L.join(e,`threads`),{extension:`.json`})))).some(Boolean)}const Pr=D({timestamp:k(),model:k(),credits:N(),tokens:D({input:O(N()),output:O(N())}),operationType:O(k()),fromMessageId:O(N()),toMessageId:O(N())}),Fr=D({cacheCreationInputTokens:O(N()),cacheReadInputTokens:O(N())}),Ir=D({role:k(),messageId:N(),usage:O(Fr)}),Lr=D({id:k(),messages:O(Le(Ir)),usageLedger:O(D({events:O(Le(Pr))}))});function Rr(e,t){let n=e?.find(e=>e.role===`assistant`&&e.messageId===t);return{cacheCreationInputTokens:n?.usage?.cacheCreationInputTokens??0,cacheReadInputTokens:n?.usage?.cacheReadInputTokens??0}}function zr(e,t){let n=Rr(e.messages,t.toMessageId);return{timestamp:t.timestamp,threadId:e.id,model:t.model,credits:t.credits,inputTokens:t.tokens.input??0,outputTokens:t.tokens.output??0,...n}}async function Br(e){let t=await S({try:ne(e),catch:e=>e});if(I(t))return[];let n=S({try:()=>JSON.parse(t.value),catch:e=>e})();if(I(n))return[];let r=Oe(Lr,n.value);return r.success?(r.output.usageLedger?.events??[]).map(e=>zr(r.output,e)):[]}function Vr(e){return ce({itemCount:e,isMainThread:z,moduleUrl:import.meta.url,envValue:R.env.CCUSAGE_JSONL_WORKER_THREADS,isTest:!1,preferMoreWorkers:!0})}async function Hr(e){return Ce({items:e,workerCount:Vr(e.length),moduleUrl:import.meta.url,errorMessage:`ccusage amp worker exited with code {code}`,createWorkerData:e=>({kind:`ccusage:amp-worker`,items:e})})}async function Ur(){let e=await Mr();return(await Hr(e)??await o(e,Xe(e.length),Br)).flat().sort((e,t)=>n(e.timestamp,t.timestamp))}async function Wr(e){let t=[];for(let{index:n,item:r}of e.items)t.push({index:n,result:await Br(r)});pt?.postMessage({results:t})}function Gr(e){return typeof e==`object`&&!!e&&`kind`in e&&e.kind===`ccusage:amp-worker`}!z&&Gr(B)&&Wr(B).catch(()=>{R.exit(1)});const Kr=[`anthropic/`,`anthropic.`,`us.anthropic.`,`eu.anthropic.`],qr={"anthropic.claude-3-5-haiku-20241022-v1:0":{input_cost_per_token:8e-7,output_cost_per_token:4e-6,cache_creation_input_token_cost:1e-6,cache_read_input_token_cost:8e-8,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"anthropic.claude-haiku-4-5-20251001-v1:0":{input_cost_per_token:1e-6,output_cost_per_token:5e-6,cache_creation_input_token_cost:125e-8,cache_read_input_token_cost:1e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"anthropic.claude-haiku-4-5@20251001":{input_cost_per_token:1e-6,output_cost_per_token:5e-6,cache_creation_input_token_cost:125e-8,cache_read_input_token_cost:1e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"anthropic.claude-3-5-sonnet-20240620-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:1e6,max_output_tokens:4096,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:3e-5,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"anthropic.claude-3-5-sonnet-20241022-v2:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:8192,max_input_tokens:1e6,max_output_tokens:8192,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:3e-5,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"anthropic.claude-3-7-sonnet-20240620-v1:0":{input_cost_per_token:36e-7,output_cost_per_token:18e-6,cache_creation_input_token_cost:45e-7,cache_read_input_token_cost:36e-8,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"anthropic.claude-3-7-sonnet-20250219-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"anthropic.claude-3-haiku-20240307-v1:0":{input_cost_per_token:25e-8,output_cost_per_token:125e-8,cache_creation_input_token_cost:3.125e-7,cache_read_input_token_cost:25e-9,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"anthropic.claude-3-opus-20240229-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"anthropic.claude-3-sonnet-20240229-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"anthropic.claude-instant-v1":{input_cost_per_token:8e-7,output_cost_per_token:24e-7,max_tokens:8191,max_input_tokens:1e5,max_output_tokens:8191},"anthropic.claude-opus-4-1-20250805-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"anthropic.claude-opus-4-20250514-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"anthropic.claude-opus-4-5-20251101-v1:0":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"anthropic.claude-opus-4-6-v1":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3},"us.anthropic.claude-opus-4-6-v1":{input_cost_per_token:55e-7,output_cost_per_token:275e-7,cache_creation_input_token_cost:6875e-9,cache_read_input_token_cost:55e-8,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3},"eu.anthropic.claude-opus-4-6-v1":{input_cost_per_token:55e-7,output_cost_per_token:275e-7,cache_creation_input_token_cost:6875e-9,cache_read_input_token_cost:55e-8,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3},"anthropic.claude-opus-4-7":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3},"anthropic.claude-mythos-preview":{input_cost_per_token:0,output_cost_per_token:0,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3},"us.anthropic.claude-opus-4-7":{input_cost_per_token:55e-7,output_cost_per_token:275e-7,cache_creation_input_token_cost:6875e-9,cache_read_input_token_cost:55e-8,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3},"eu.anthropic.claude-opus-4-7":{input_cost_per_token:55e-7,output_cost_per_token:275e-7,cache_creation_input_token_cost:6875e-9,cache_read_input_token_cost:55e-8,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3},"anthropic.claude-sonnet-4-6":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3},"us.anthropic.claude-sonnet-4-6":{input_cost_per_token:33e-7,output_cost_per_token:165e-7,cache_creation_input_token_cost:4125e-9,cache_read_input_token_cost:33e-8,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3},"eu.anthropic.claude-sonnet-4-6":{input_cost_per_token:33e-7,output_cost_per_token:165e-7,cache_creation_input_token_cost:4125e-9,cache_read_input_token_cost:33e-8,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3},"anthropic.claude-sonnet-4-20250514-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"anthropic.claude-sonnet-4-5-20250929-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"anthropic.claude-v1":{input_cost_per_token:8e-6,output_cost_per_token:24e-6,max_tokens:8191,max_input_tokens:1e5,max_output_tokens:8191},"anthropic.claude-v2:1":{input_cost_per_token:8e-6,output_cost_per_token:24e-6,max_tokens:8191,max_input_tokens:1e5,max_output_tokens:8191},"claude-haiku-4-5-20251001":{input_cost_per_token:1e-6,output_cost_per_token:5e-6,cache_creation_input_token_cost:125e-8,cache_read_input_token_cost:1e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"claude-haiku-4-5":{input_cost_per_token:1e-6,output_cost_per_token:5e-6,cache_creation_input_token_cost:125e-8,cache_read_input_token_cost:1e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"claude-3-7-sonnet-20250219":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"claude-3-haiku-20240307":{input_cost_per_token:25e-8,output_cost_per_token:125e-8,cache_creation_input_token_cost:3e-7,cache_read_input_token_cost:3e-8,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"claude-3-opus-20240229":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"claude-4-opus-20250514":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"claude-4-sonnet-20250514":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"claude-sonnet-4-5":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"claude-sonnet-4-5-20250929":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"claude-sonnet-4-6":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3},"claude-sonnet-4-5-20250929-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"claude-opus-4-1":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"claude-opus-4-1-20250805":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"claude-opus-4-20250514":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"claude-opus-4-5-20251101":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"claude-opus-4-5":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"claude-opus-4-6":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3,provider_specific_entry:{fast:6}},"claude-opus-4-6-20260205":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3,provider_specific_entry:{fast:6}},"claude-opus-4-7":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3,provider_specific_entry:{fast:6}},"claude-opus-4-7-20260416":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:1e6,max_output_tokens:128e3,provider_specific_entry:{fast:6}},"claude-sonnet-4-20250514":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"eu.anthropic.claude-3-5-haiku-20241022-v1:0":{input_cost_per_token:25e-8,output_cost_per_token:125e-8,cache_creation_input_token_cost:3.125e-7,cache_read_input_token_cost:25e-9,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"eu.anthropic.claude-haiku-4-5-20251001-v1:0":{input_cost_per_token:11e-7,output_cost_per_token:55e-7,cache_creation_input_token_cost:1375e-9,cache_read_input_token_cost:11e-8,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"eu.anthropic.claude-3-5-sonnet-20240620-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"eu.anthropic.claude-3-5-sonnet-20241022-v2:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"eu.anthropic.claude-3-7-sonnet-20250219-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"eu.anthropic.claude-3-haiku-20240307-v1:0":{input_cost_per_token:25e-8,output_cost_per_token:125e-8,cache_creation_input_token_cost:3.125e-7,cache_read_input_token_cost:25e-9,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"eu.anthropic.claude-3-opus-20240229-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"eu.anthropic.claude-3-sonnet-20240229-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"eu.anthropic.claude-opus-4-1-20250805-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"eu.anthropic.claude-opus-4-20250514-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"eu.anthropic.claude-sonnet-4-20250514-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7},"eu.anthropic.claude-sonnet-4-5-20250929-v1:0":{input_cost_per_token:33e-7,output_cost_per_token:165e-7,cache_creation_input_token_cost:4125e-9,cache_read_input_token_cost:33e-8,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:66e-7,output_cost_per_token_above_200k_tokens:2475e-8,cache_creation_input_token_cost_above_200k_tokens:825e-8,cache_read_input_token_cost_above_200k_tokens:66e-8},"us.anthropic.claude-3-5-haiku-20241022-v1:0":{input_cost_per_token:8e-7,output_cost_per_token:4e-6,cache_creation_input_token_cost:1e-6,cache_read_input_token_cost:8e-8,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"us.anthropic.claude-haiku-4-5-20251001-v1:0":{input_cost_per_token:11e-7,output_cost_per_token:55e-7,cache_creation_input_token_cost:1375e-9,cache_read_input_token_cost:11e-8,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"us.anthropic.claude-3-5-sonnet-20240620-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"us.anthropic.claude-3-5-sonnet-20241022-v2:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"us.anthropic.claude-3-7-sonnet-20250219-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:8192,max_input_tokens:2e5,max_output_tokens:8192},"us.anthropic.claude-3-haiku-20240307-v1:0":{input_cost_per_token:25e-8,output_cost_per_token:125e-8,cache_creation_input_token_cost:3.125e-7,cache_read_input_token_cost:25e-9,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"us.anthropic.claude-3-opus-20240229-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"us.anthropic.claude-3-sonnet-20240229-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:2e5,max_output_tokens:4096},"us.anthropic.claude-opus-4-1-20250805-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"us.anthropic.claude-sonnet-4-5-20250929-v1:0":{input_cost_per_token:33e-7,output_cost_per_token:165e-7,cache_creation_input_token_cost:4125e-9,cache_read_input_token_cost:33e-8,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:66e-7,output_cost_per_token_above_200k_tokens:2475e-8,cache_creation_input_token_cost_above_200k_tokens:825e-8,cache_read_input_token_cost_above_200k_tokens:66e-8},"us.anthropic.claude-opus-4-20250514-v1:0":{input_cost_per_token:15e-6,output_cost_per_token:75e-6,cache_creation_input_token_cost:1875e-8,cache_read_input_token_cost:15e-7,max_tokens:32e3,max_input_tokens:2e5,max_output_tokens:32e3},"us.anthropic.claude-opus-4-5-20251101-v1:0":{input_cost_per_token:55e-7,output_cost_per_token:275e-7,cache_creation_input_token_cost:6875e-9,cache_read_input_token_cost:55e-8,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"eu.anthropic.claude-opus-4-5-20251101-v1:0":{input_cost_per_token:5e-6,output_cost_per_token:25e-6,cache_creation_input_token_cost:625e-8,cache_read_input_token_cost:5e-7,max_tokens:64e3,max_input_tokens:2e5,max_output_tokens:64e3},"us.anthropic.claude-sonnet-4-20250514-v1:0":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,cache_creation_input_token_cost:375e-8,cache_read_input_token_cost:3e-7,max_tokens:64e3,max_input_tokens:1e6,max_output_tokens:64e3,input_cost_per_token_above_200k_tokens:6e-6,output_cost_per_token_above_200k_tokens:225e-7,cache_creation_input_token_cost_above_200k_tokens:75e-7,cache_read_input_token_cost_above_200k_tokens:6e-7}};async function Jr(){return qr}async function Yr(e,t){let n=await e.getModelPricing(t.model);return I(n)||n.value==null?(I(n)&&w.warn(`Failed to load pricing for model ${t.model}:`,n.error),0):e.calculateCostFromPricing({input_tokens:t.inputTokens,output_tokens:t.outputTokens,cache_creation_input_tokens:t.cacheCreationInputTokens,cache_read_input_tokens:t.cacheReadInputTokens},n.value)}async function Xr(){return Nr()}function Zr(e,t){return Tr(t,()=>new l({offline:e.offline===!0,offlineLoader:Jr,logger:w,providerPrefixes:Kr}))}const Qr=Er({agent:`amp`,loadEntries:async()=>Ur(),prepare:Zr,disposePrepared:e=>{e.dispose()},getTimestamp:e=>e.timestamp,getSessionId:e=>e.threadId,getModels:e=>[e.model],getUsage:async(e,t)=>({inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationInputTokens,cacheReadTokens:e.cacheReadInputTokens,totalCost:await Yr(t.fetcher,e)}),getMetadata:e=>({credits:e.reduce((e,t)=>e+t.credits,0)})});function $r(){let e=(R.env.CLAUDE_CONFIG_DIR??``).trim();return(e===``?[Ke,L.join(Ee,`.claude`)]:e.split(`,`).map(e=>e.trim()).filter(e=>e!==``).map(e=>L.resolve(e))).map(e=>L.join(e,`projects`))}async function ei(e,t){return u(e,{extension:t})}async function ti(){return(await Promise.all($r().map(async e=>ei(e,`.jsonl`)))).some(Boolean)}async function ni(e,t){let n=fr(ur(t.since)),r=fr(ur(t.until)),i={offline:t.offline,since:n,until:r,timezone:t.timezone};return e===`session`?(await De(i)).map(e=>({period:e.sessionId,agent:`claude`,modelsUsed:e.modelsUsed,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:e.inputTokens+e.outputTokens+e.cacheCreationTokens+e.cacheReadTokens,totalCost:e.totalCost,metadata:{lastActivity:e.lastActivity}})):e===`monthly`?(await Ge(i)).map(e=>({period:e.month,agent:`claude`,modelsUsed:e.modelsUsed,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:e.inputTokens+e.outputTokens+e.cacheCreationTokens+e.cacheReadTokens,totalCost:e.totalCost})):(await Me(i)).map(e=>({period:e.date,agent:`claude`,modelsUsed:e.modelsUsed,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:e.inputTokens+e.outputTokens+e.cacheCreationTokens+e.cacheReadTokens,totalCost:e.totalCost}))}const ri=L.join(ut.homedir(),`.codex`);function ii(){return Or(R.env.CODEX_HOME,[ri])}function ai(){return ii().map(e=>L.join(e,`sessions`))}async function oi(){return(await Promise.all(ai().map(async e=>u(e,{extension:`.jsonl`})))).some(Boolean)}const si=[`turn_context`,`"type":"token_count"`,`"type": "token_count"`];function ci(e){if(!Ei(e))return null;let t=Di(e,`timestamp`);if(t==null)return null;let n=Oi(e,`info`);if(n==null)return null;let r=Oi(n,`last_token_usage`),i=Oi(n,`total_token_usage`);return r==null&&i==null?null:{timestamp:t,lastUsage:r==null?null:Ai(r),totalUsage:i==null?null:Ai(i),model:Y(Di(n,`model`))??Y(Di(n,`model_name`))}}function li(e){return typeof e==`number`&&Number.isFinite(e)?e:0}function ui(e,t,n){return e+t+n}function di(e){if(typeof e!=`object`||!e)return null;let t=e,n=li(t.input_tokens),r=li(t.cached_input_tokens??t.cache_read_input_tokens),i=li(t.output_tokens),a=li(t.reasoning_output_tokens),o=li(t.total_tokens);return{input_tokens:n,cached_input_tokens:r,output_tokens:i,reasoning_output_tokens:a,total_tokens:o>0?o:ui(n,i,a)}}function fi(e,t){return{input_tokens:Math.max(e.input_tokens-(t?.input_tokens??0),0),cached_input_tokens:Math.max(e.cached_input_tokens-(t?.cached_input_tokens??0),0),output_tokens:Math.max(e.output_tokens-(t?.output_tokens??0),0),reasoning_output_tokens:Math.max(e.reasoning_output_tokens-(t?.reasoning_output_tokens??0),0),total_tokens:Math.max(e.total_tokens-(t?.total_tokens??0),0)}}function pi(e){let t=Math.min(e.cached_input_tokens,e.input_tokens);return{inputTokens:e.input_tokens,cachedInputTokens:t,outputTokens:e.output_tokens,reasoningOutputTokens:e.reasoning_output_tokens,totalTokens:e.total_tokens>0?e.total_tokens:ui(e.input_tokens,e.output_tokens,e.reasoning_output_tokens)}}function mi(e){return`${e.timestamp}${e.model??``}${e.inputTokens}${e.cachedInputTokens}${e.outputTokens}${e.reasoningOutputTokens}${e.totalTokens}`}function hi(e){let t=new Set,n=[];for(let r of e){let e=mi(r);t.has(e)||(t.add(e),n.push(r))}return n}function J(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function gi(e){let t=J(e);if(t==null)return;let n=J(t.info);if(n!=null){let e=Y(n.model)??Y(n.model_name);if(e!=null)return e;let t=Y(J(n.metadata)?.model);if(t!=null)return t}return Y(t.model)??Y(J(t.metadata)?.model)}function _i(e){if(!e.includes(`"type":"turn_context"`)&&!e.includes(`"type": "turn_context"`))return;let t=Oi(e,`payload`);if(t!=null)return Y(Di(t,`model`))??Y(Di(t,`model_name`))}async function vi(e,t){let n=L.relative(e,t).split(L.sep).join(`/`).replace(/\.jsonl$/i,``),r=[],i=null,a,o=!1,s=e=>{let t=e.lastUsage;if(t==null&&e.totalUsage!=null&&(t=fi(e.totalUsage,i)),e.totalUsage!=null&&(i=e.totalUsage),t==null)return;let s=pi(t);if(s.inputTokens===0&&s.cachedInputTokens===0&&s.outputTokens===0&&s.reasoningOutputTokens===0)return;let c=!1;e.model!=null&&(a=e.model,o=!1);let l=e.model??a;l==null?(l=`gpt-5`,c=!0,a=l,o=!0):e.model==null&&o&&(c=!0),r.push({sessionId:n,timestamp:e.timestamp,model:l,...s,...c?{isFallbackModel:!0}:{}})};try{await Je(t,si,e=>{let t=_i(e);if(t!=null){a=t,o=!1;return}let n=ci(e);if(n!=null){s(n);return}try{let t=J(JSON.parse(e));if(t==null)return;let n=typeof t.type==`string`?t.type:void 0,r=t.payload,i=typeof t.timestamp==`string`?t.timestamp:void 0;if(n===`turn_context`){let e=gi(r);e!=null&&(a=e,o=!1);return}if(n!==`event_msg`||i==null)return;let c=J(r);if(c?.type!==`token_count`)return;let l=J(c.info);s({timestamp:i,lastUsage:di(l?.last_token_usage),totalUsage:di(l?.total_token_usage),model:gi({info:l,...c})})}catch{}},{bufferedEncoding:`latin1`,callbackMode:`sync`,scanMode:`line`})}catch(e){w.debug(`Failed to read Codex session file`,e)}return r}function yi(e){return ce({itemCount:e,isMainThread:z,moduleUrl:import.meta.url,envValue:R.env.CCUSAGE_JSONL_WORKER_THREADS,isTest:!1,preferMoreWorkers:!0})}async function bi(e,t){return(await Ce({items:t,workerCount:yi(t.length),moduleUrl:import.meta.url,errorMessage:`ccusage codex worker exited with code {code}`,createWorkerData:t=>({kind:`ccusage:codex-worker`,directoryPath:e,items:t})}))?.flatMap(Si)??null}function xi(e){let t=[],n=[],r=[],i=new Int32Array(e.length),a=new Float64Array(e.length*5),o=new Uint8Array(e.length),s=new Map;for(let c=0;c<e.length;c++){let l=e[c];if(t.push(l.timestamp),n.push(l.sessionId),l.model==null)i[c]=-1;else{let e=s.get(l.model);e??(e=r.length,s.set(l.model,e),r.push(l.model)),i[c]=e}let u=c*5;a[u]=l.inputTokens,a[u+1]=l.cachedInputTokens,a[u+2]=l.outputTokens,a[u+3]=l.reasoningOutputTokens,a[u+4]=l.totalTokens,o[c]=+(l.isFallbackModel===!0)}return{timestamps:t,sessionIds:n,models:r,modelIndexes:i,numbers:a,flags:o}}function Si(e){let t=[];for(let n=0;n<e.timestamps.length;n++){let r=n*5,i=e.modelIndexes[n]??-1;t.push({timestamp:e.timestamps[n],sessionId:e.sessionIds[n],...i>=0?{model:e.models[i]}:{},inputTokens:e.numbers[r]??0,cachedInputTokens:e.numbers[r+1]??0,outputTokens:e.numbers[r+2]??0,reasoningOutputTokens:e.numbers[r+3]??0,totalTokens:e.numbers[r+4]??0,...e.flags[n]===1?{isFallbackModel:!0}:{}})}return t}async function Ci(e){let t=await S({try:lt(e),catch:e=>e});if(I(t)||!t.value.isDirectory())return[];let r=await ue(e,{extension:`.jsonl`}),i=await bi(e,r);return i==null?(await Promise.all(r.map(async t=>vi(e,t)))).flat().sort((e,t)=>n(e.timestamp,t.timestamp)):i.sort((e,t)=>n(e.timestamp,t.timestamp))}async function wi(){return hi((await Promise.all(ai().map(Ci))).flat()).sort((e,t)=>n(e.timestamp,t.timestamp))}async function Ti(e){let t=[],n=[];for(let{index:r,item:i}of e.items){let a=xi(await vi(e.directoryPath,i));n.push(a.modelIndexes.buffer,a.numbers.buffer,a.flags.buffer),t.push({index:r,result:a})}pt.postMessage({results:t},n)}!z&&J(B)?.kind===`ccusage:codex-worker`&&Ti(B).catch(()=>{R.exit(1)});function Ei(e){return!e.includes(`"type":"event_msg"`)&&!e.includes(`"type": "event_msg"`)?!1:e.includes(`"type":"token_count"`)||e.includes(`"type": "token_count"`)}function Y(e){if(typeof e!=`string`)return;let t=e.trim();return t===``?void 0:t}function Di(e,t){let n=`"${t}":`,r=e.indexOf(n);if(r===-1)return;let i=r+n.length;for(;e.charCodeAt(i)===32||e.charCodeAt(i)===9;)i++;if(e.charCodeAt(i)!==34)return;let a=i+1;for(i=a;i<e.length;){let t=e.charCodeAt(i);if(t===92)return;if(t===34)return e.slice(a,i);i++}}function Oi(e,t){let n=`"${t}":`,r=e.indexOf(n);if(r===-1)return;let i=r+n.length;for(;e.charCodeAt(i)===32||e.charCodeAt(i)===9;)i++;if(e.charCodeAt(i)!==123)return;let a=i,o=0,s=!1,c=!1;for(;i<e.length;){let t=e.charCodeAt(i);if(s){c?c=!1:t===92?c=!0:t===34&&(s=!1),i++;continue}if(t===34)s=!0;else if(t===123)o++;else if(t===125&&(o--,o===0))return e.slice(a,i+1);i++}}function ki(e,t){let n=`"${t}":`,r=e.indexOf(n);if(r===-1)return;let i=r+n.length;for(;e.charCodeAt(i)===32||e.charCodeAt(i)===9;)i++;let a=i;for(;i<e.length;){let t=e.charCodeAt(i);if(t<48||t>57)break;i++}if(i===a)return;let o=Number(e.slice(a,i));return Number.isFinite(o)?o:void 0}function Ai(e){let t=ki(e,`input_tokens`)??0,n=ki(e,`cached_input_tokens`)??ki(e,`cache_read_input_tokens`)??0,r=ki(e,`output_tokens`)??0,i=ki(e,`reasoning_output_tokens`)??0,a=ki(e,`total_tokens`)??0;return{input_tokens:t,cached_input_tokens:n,output_tokens:r,reasoning_output_tokens:i,total_tokens:a>0?a:ui(t,r,i)}}const ji=1e6,Mi=[`openai/`,`azure/`,`openrouter/openai/`],Ni={"azure/ada":{input_cost_per_token:1e-7,output_cost_per_token:0,max_tokens:8191,max_input_tokens:8191},"azure/codex-mini":{input_cost_per_token:15e-7,output_cost_per_token:6e-6,cache_read_input_token_cost:375e-9,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/command-r-plus":{input_cost_per_token:3e-6,output_cost_per_token:15e-6,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/computer-use-preview":{input_cost_per_token:3e-6,output_cost_per_token:12e-6,max_tokens:1024,max_input_tokens:8192,max_output_tokens:1024},"azure/container":{},"azure/eu/gpt-4o-2024-08-06":{input_cost_per_token:275e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:1375e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/eu/gpt-4o-2024-11-20":{input_cost_per_token:275e-8,output_cost_per_token:11e-6,cache_creation_input_token_cost:138e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/eu/gpt-4o-mini-2024-07-18":{input_cost_per_token:165e-9,output_cost_per_token:66e-8,cache_read_input_token_cost:83e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/eu/gpt-4o-mini-realtime-preview-2024-12-17":{input_cost_per_token:66e-8,output_cost_per_token:264e-8,cache_read_input_token_cost:33e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/eu/gpt-4o-realtime-preview-2024-10-01":{input_cost_per_token:55e-7,output_cost_per_token:22e-6,cache_read_input_token_cost:275e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/eu/gpt-4o-realtime-preview-2024-12-17":{input_cost_per_token:55e-7,output_cost_per_token:22e-6,cache_read_input_token_cost:275e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/eu/gpt-5-2025-08-07":{input_cost_per_token:1375e-9,output_cost_per_token:11e-6,cache_read_input_token_cost:1.375e-7,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/eu/gpt-5-mini-2025-08-07":{input_cost_per_token:275e-9,output_cost_per_token:22e-7,cache_read_input_token_cost:2.75e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/eu/gpt-5.1":{input_cost_per_token:138e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:14e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/eu/gpt-5.1-chat":{input_cost_per_token:138e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:14e-8,max_tokens:128e3,max_input_tokens:128e3,max_output_tokens:128e3},"azure/eu/gpt-5.1-codex":{input_cost_per_token:138e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:14e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/eu/gpt-5.1-codex-mini":{input_cost_per_token:275e-9,output_cost_per_token:22e-7,cache_read_input_token_cost:28e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/eu/gpt-5-nano-2025-08-07":{input_cost_per_token:55e-9,output_cost_per_token:44e-8,cache_read_input_token_cost:5.5e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/eu/o1-2024-12-17":{input_cost_per_token:165e-7,output_cost_per_token:66e-6,cache_read_input_token_cost:825e-8,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/eu/o1-mini-2024-09-12":{input_cost_per_token:121e-8,output_cost_per_token:484e-8,cache_read_input_token_cost:605e-9,max_tokens:65536,max_input_tokens:128e3,max_output_tokens:65536},"azure/eu/o1-preview-2024-09-12":{input_cost_per_token:165e-7,output_cost_per_token:66e-6,cache_read_input_token_cost:825e-8,max_tokens:32768,max_input_tokens:128e3,max_output_tokens:32768},"azure/eu/o3-mini-2025-01-31":{input_cost_per_token:121e-8,output_cost_per_token:484e-8,cache_read_input_token_cost:605e-9,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/global-standard/gpt-4o-2024-08-06":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/global-standard/gpt-4o-2024-11-20":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/global-standard/gpt-4o-mini":{input_cost_per_token:15e-8,output_cost_per_token:6e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/global/gpt-4o-2024-08-06":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/global/gpt-4o-2024-11-20":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/global/gpt-5.1":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/global/gpt-5.1-chat":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:128e3,max_output_tokens:128e3},"azure/global/gpt-5.1-codex":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/global/gpt-5.1-codex-mini":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-3.5-turbo":{input_cost_per_token:5e-7,output_cost_per_token:15e-7,max_tokens:4096,max_input_tokens:4097,max_output_tokens:4096},"azure/gpt-3.5-turbo-0125":{input_cost_per_token:5e-7,output_cost_per_token:15e-7,max_tokens:4096,max_input_tokens:16384,max_output_tokens:4096},"azure/gpt-3.5-turbo-instruct-0914":{input_cost_per_token:15e-7,output_cost_per_token:2e-6,max_tokens:4097,max_input_tokens:4097},"azure/gpt-35-turbo":{input_cost_per_token:5e-7,output_cost_per_token:15e-7,max_tokens:4096,max_input_tokens:4097,max_output_tokens:4096},"azure/gpt-35-turbo-0125":{input_cost_per_token:5e-7,output_cost_per_token:15e-7,max_tokens:4096,max_input_tokens:16384,max_output_tokens:4096},"azure/gpt-35-turbo-1106":{input_cost_per_token:1e-6,output_cost_per_token:2e-6,max_tokens:4096,max_input_tokens:16384,max_output_tokens:4096},"azure/gpt-35-turbo-16k":{input_cost_per_token:3e-6,output_cost_per_token:4e-6,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"azure/gpt-35-turbo-16k-0613":{input_cost_per_token:3e-6,output_cost_per_token:4e-6,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"azure/gpt-35-turbo-instruct":{input_cost_per_token:15e-7,output_cost_per_token:2e-6,max_tokens:4097,max_input_tokens:4097},"azure/gpt-35-turbo-instruct-0914":{input_cost_per_token:15e-7,output_cost_per_token:2e-6,max_tokens:4097,max_input_tokens:4097},"azure/gpt-4":{input_cost_per_token:3e-5,output_cost_per_token:6e-5,max_tokens:4096,max_input_tokens:8192,max_output_tokens:4096},"azure/gpt-4-0125-preview":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4-0613":{input_cost_per_token:3e-5,output_cost_per_token:6e-5,max_tokens:4096,max_input_tokens:8192,max_output_tokens:4096},"azure/gpt-4-1106-preview":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4-32k":{input_cost_per_token:6e-5,output_cost_per_token:12e-5,max_tokens:4096,max_input_tokens:32768,max_output_tokens:4096},"azure/gpt-4-32k-0613":{input_cost_per_token:6e-5,output_cost_per_token:12e-5,max_tokens:4096,max_input_tokens:32768,max_output_tokens:4096},"azure/gpt-4-turbo":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4-turbo-2024-04-09":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4-turbo-vision-preview":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4.1":{input_cost_per_token:2e-6,output_cost_per_token:8e-6,cache_read_input_token_cost:5e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/gpt-4.1-2025-04-14":{input_cost_per_token:2e-6,output_cost_per_token:8e-6,cache_read_input_token_cost:5e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/gpt-4.1-mini":{input_cost_per_token:4e-7,output_cost_per_token:16e-7,cache_read_input_token_cost:1e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/gpt-4.1-mini-2025-04-14":{input_cost_per_token:4e-7,output_cost_per_token:16e-7,cache_read_input_token_cost:1e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/gpt-4.1-nano":{input_cost_per_token:1e-7,output_cost_per_token:4e-7,cache_read_input_token_cost:25e-9,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/gpt-4.1-nano-2025-04-14":{input_cost_per_token:1e-7,output_cost_per_token:4e-7,cache_read_input_token_cost:25e-9,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/gpt-4.5-preview":{input_cost_per_token:75e-6,output_cost_per_token:15e-5,cache_read_input_token_cost:375e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o-2024-05-13":{input_cost_per_token:5e-6,output_cost_per_token:15e-6,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4o-2024-08-06":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o-2024-11-20":{input_cost_per_token:275e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-audio-2025-08-28":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-audio-1.5-2026-02-23":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-audio-mini-2025-10-06":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o-audio-preview-2024-12-17":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o-mini":{input_cost_per_token:165e-9,output_cost_per_token:66e-8,cache_read_input_token_cost:75e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o-mini-2024-07-18":{input_cost_per_token:165e-9,output_cost_per_token:66e-8,cache_read_input_token_cost:75e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o-mini-audio-preview-2024-12-17":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-4o-mini-realtime-preview-2024-12-17":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-realtime-2025-08-28":{input_cost_per_token:4e-6,output_cost_per_token:16e-6,cache_read_input_token_cost:4e-6,max_tokens:4096,max_input_tokens:32e3,max_output_tokens:4096},"azure/gpt-realtime-1.5-2026-02-23":{input_cost_per_token:4e-6,output_cost_per_token:16e-6,cache_read_input_token_cost:4e-6,max_tokens:4096,max_input_tokens:32e3,max_output_tokens:4096},"azure/gpt-realtime-mini-2025-10-06":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,cache_read_input_token_cost:6e-8,max_tokens:4096,max_input_tokens:32e3,max_output_tokens:4096},"azure/gpt-4o-mini-transcribe":{input_cost_per_token:125e-8,output_cost_per_token:5e-6,max_input_tokens:16e3,max_output_tokens:2e3},"azure/gpt-4o-mini-tts":{input_cost_per_token:25e-7,output_cost_per_token:1e-5},"azure/gpt-4o-realtime-preview-2024-10-01":{input_cost_per_token:5e-6,output_cost_per_token:2e-5,cache_read_input_token_cost:25e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4o-realtime-preview-2024-12-17":{input_cost_per_token:5e-6,output_cost_per_token:2e-5,cache_read_input_token_cost:25e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/gpt-4o-transcribe":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_input_tokens:16e3,max_output_tokens:2e3},"azure/gpt-4o-transcribe-diarize":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_input_tokens:16e3,max_output_tokens:2e3},"azure/gpt-5.1-2025-11-13":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.1-chat-2025-11-13":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-5.1-codex-2025-11-13":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.1-codex-mini-2025-11-13":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5-2025-08-07":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5-chat":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-5-chat-latest":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-5-codex":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5-mini":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5-mini-2025-08-07":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5-nano":{input_cost_per_token:5e-8,output_cost_per_token:4e-7,cache_read_input_token_cost:5e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5-nano-2025-08-07":{input_cost_per_token:5e-8,output_cost_per_token:4e-7,cache_read_input_token_cost:5e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5-pro":{input_cost_per_token:15e-6,output_cost_per_token:12e-5,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.1":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.1-chat":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:128e3,max_output_tokens:128e3},"azure/gpt-5.1-codex":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.1-codex-max":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.1-codex-mini":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.2":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.2-2025-12-11":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.2-chat":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-5.2-chat-2025-12-11":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-5.2-codex":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.3-chat":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/gpt-5.3-codex":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.2-pro":{input_cost_per_token:21e-6,output_cost_per_token:168e-6,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.2-pro-2025-12-11":{input_cost_per_token:21e-6,output_cost_per_token:168e-6,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/gpt-5.4":{input_cost_per_token:25e-7,output_cost_per_token:15e-6,cache_read_input_token_cost:25e-8,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.4-2026-03-05":{input_cost_per_token:25e-7,output_cost_per_token:15e-6,cache_read_input_token_cost:25e-8,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.4-pro":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.4-pro-2026-03-05":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.5":{input_cost_per_token:5e-6,output_cost_per_token:3e-5,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.5-2026-04-23":{input_cost_per_token:5e-6,output_cost_per_token:3e-5,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.5-pro":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.5-pro-2026-04-23":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.4-mini":{input_cost_per_token:75e-8,output_cost_per_token:45e-7,cache_read_input_token_cost:75e-9,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.4-mini-2026-03-17":{input_cost_per_token:75e-8,output_cost_per_token:45e-7,cache_read_input_token_cost:75e-9,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.4-nano":{input_cost_per_token:2e-7,output_cost_per_token:125e-8,cache_read_input_token_cost:2e-8,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-5.4-nano-2026-03-17":{input_cost_per_token:2e-7,output_cost_per_token:125e-8,cache_read_input_token_cost:2e-8,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"azure/gpt-image-1":{input_cost_per_token:5e-6,cache_read_input_token_cost:125e-8},"azure/hd/1024-x-1024/dall-e-3":{output_cost_per_token:0},"azure/hd/1024-x-1792/dall-e-3":{output_cost_per_token:0},"azure/hd/1792-x-1024/dall-e-3":{output_cost_per_token:0},"azure/high/1024-x-1024/gpt-image-1":{},"azure/high/1024-x-1536/gpt-image-1":{},"azure/high/1536-x-1024/gpt-image-1":{},"azure/low/1024-x-1024/gpt-image-1":{},"azure/low/1024-x-1536/gpt-image-1":{},"azure/low/1536-x-1024/gpt-image-1":{},"azure/medium/1024-x-1024/gpt-image-1":{},"azure/medium/1024-x-1536/gpt-image-1":{},"azure/medium/1536-x-1024/gpt-image-1":{},"azure/gpt-image-1-mini":{input_cost_per_token:2e-6,cache_read_input_token_cost:2e-7},"azure/gpt-image-1.5":{input_cost_per_token:5e-6,cache_read_input_token_cost:125e-8},"azure/gpt-image-1.5-2025-12-16":{input_cost_per_token:5e-6,cache_read_input_token_cost:125e-8},"azure/gpt-image-2":{input_cost_per_token:5e-6,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8},"azure/gpt-image-2-2026-04-21":{input_cost_per_token:5e-6,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8},"azure/low/1024-x-1024/gpt-image-1-mini":{},"azure/low/1024-x-1536/gpt-image-1-mini":{},"azure/low/1536-x-1024/gpt-image-1-mini":{},"azure/medium/1024-x-1024/gpt-image-1-mini":{},"azure/medium/1024-x-1536/gpt-image-1-mini":{},"azure/medium/1536-x-1024/gpt-image-1-mini":{},"azure/high/1024-x-1024/gpt-image-1-mini":{},"azure/high/1024-x-1536/gpt-image-1-mini":{},"azure/high/1536-x-1024/gpt-image-1-mini":{},"azure/mistral-large-2402":{input_cost_per_token:8e-6,output_cost_per_token:24e-6,max_tokens:32e3,max_input_tokens:32e3},"azure/mistral-large-latest":{input_cost_per_token:8e-6,output_cost_per_token:24e-6,max_tokens:32e3,max_input_tokens:32e3},"azure/o1":{input_cost_per_token:15e-6,output_cost_per_token:6e-5,cache_read_input_token_cost:75e-7,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o1-2024-12-17":{input_cost_per_token:15e-6,output_cost_per_token:6e-5,cache_read_input_token_cost:75e-7,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o1-mini":{input_cost_per_token:121e-8,output_cost_per_token:484e-8,cache_read_input_token_cost:605e-9,max_tokens:65536,max_input_tokens:128e3,max_output_tokens:65536},"azure/o1-mini-2024-09-12":{input_cost_per_token:11e-7,output_cost_per_token:44e-7,cache_read_input_token_cost:55e-8,max_tokens:65536,max_input_tokens:128e3,max_output_tokens:65536},"azure/o1-preview":{input_cost_per_token:15e-6,output_cost_per_token:6e-5,cache_read_input_token_cost:75e-7,max_tokens:32768,max_input_tokens:128e3,max_output_tokens:32768},"azure/o1-preview-2024-09-12":{input_cost_per_token:15e-6,output_cost_per_token:6e-5,cache_read_input_token_cost:75e-7,max_tokens:32768,max_input_tokens:128e3,max_output_tokens:32768},"azure/o3":{input_cost_per_token:2e-6,output_cost_per_token:8e-6,cache_read_input_token_cost:5e-7,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o3-2025-04-16":{input_cost_per_token:2e-6,output_cost_per_token:8e-6,cache_read_input_token_cost:5e-7,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o3-deep-research":{input_cost_per_token:1e-5,output_cost_per_token:4e-5,cache_read_input_token_cost:25e-7,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o3-mini":{input_cost_per_token:11e-7,output_cost_per_token:44e-7,cache_read_input_token_cost:55e-8,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o3-mini-2025-01-31":{input_cost_per_token:11e-7,output_cost_per_token:44e-7,cache_read_input_token_cost:55e-8,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o3-pro":{input_cost_per_token:2e-5,output_cost_per_token:8e-5,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o3-pro-2025-06-10":{input_cost_per_token:2e-5,output_cost_per_token:8e-5,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o4-mini":{input_cost_per_token:11e-7,output_cost_per_token:44e-7,cache_read_input_token_cost:275e-9,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/o4-mini-2025-04-16":{input_cost_per_token:11e-7,output_cost_per_token:44e-7,cache_read_input_token_cost:275e-9,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/standard/1024-x-1024/dall-e-2":{output_cost_per_token:0},"azure/standard/1024-x-1024/dall-e-3":{output_cost_per_token:0},"azure/standard/1024-x-1792/dall-e-3":{output_cost_per_token:0},"azure/standard/1792-x-1024/dall-e-3":{output_cost_per_token:0},"azure/text-embedding-3-large":{input_cost_per_token:13e-8,output_cost_per_token:0,max_tokens:8191,max_input_tokens:8191},"azure/text-embedding-3-small":{input_cost_per_token:2e-8,output_cost_per_token:0,max_tokens:8191,max_input_tokens:8191},"azure/text-embedding-ada-002":{input_cost_per_token:1e-7,output_cost_per_token:0,max_tokens:8191,max_input_tokens:8191},"azure/speech/azure-tts":{},"azure/speech/azure-tts-hd":{},"azure/tts-1":{},"azure/tts-1-hd":{},"azure/us/gpt-4.1-2025-04-14":{input_cost_per_token:22e-7,output_cost_per_token:88e-7,cache_read_input_token_cost:55e-8,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/us/gpt-4.1-mini-2025-04-14":{input_cost_per_token:44e-8,output_cost_per_token:176e-8,cache_read_input_token_cost:11e-8,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/us/gpt-4.1-nano-2025-04-14":{input_cost_per_token:11e-8,output_cost_per_token:44e-8,cache_read_input_token_cost:25e-9,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"azure/us/gpt-4o-2024-08-06":{input_cost_per_token:275e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:1375e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/us/gpt-4o-2024-11-20":{input_cost_per_token:275e-8,output_cost_per_token:11e-6,cache_creation_input_token_cost:138e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/us/gpt-4o-mini-2024-07-18":{input_cost_per_token:165e-9,output_cost_per_token:66e-8,cache_read_input_token_cost:83e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"azure/us/gpt-4o-mini-realtime-preview-2024-12-17":{input_cost_per_token:66e-8,output_cost_per_token:264e-8,cache_read_input_token_cost:33e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/us/gpt-4o-realtime-preview-2024-10-01":{input_cost_per_token:55e-7,output_cost_per_token:22e-6,cache_read_input_token_cost:275e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/us/gpt-4o-realtime-preview-2024-12-17":{input_cost_per_token:55e-7,output_cost_per_token:22e-6,cache_read_input_token_cost:275e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"azure/us/gpt-5-2025-08-07":{input_cost_per_token:1375e-9,output_cost_per_token:11e-6,cache_read_input_token_cost:1.375e-7,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/us/gpt-5-mini-2025-08-07":{input_cost_per_token:275e-9,output_cost_per_token:22e-7,cache_read_input_token_cost:2.75e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/us/gpt-5-nano-2025-08-07":{input_cost_per_token:55e-9,output_cost_per_token:44e-8,cache_read_input_token_cost:5.5e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/us/gpt-5.1":{input_cost_per_token:138e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:14e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/us/gpt-5.1-chat":{input_cost_per_token:138e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:14e-8,max_tokens:128e3,max_input_tokens:128e3,max_output_tokens:128e3},"azure/us/gpt-5.1-codex":{input_cost_per_token:138e-8,output_cost_per_token:11e-6,cache_read_input_token_cost:14e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/us/gpt-5.1-codex-mini":{input_cost_per_token:275e-9,output_cost_per_token:22e-7,cache_read_input_token_cost:28e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"azure/us/o1-2024-12-17":{input_cost_per_token:165e-7,output_cost_per_token:66e-6,cache_read_input_token_cost:825e-8,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/us/o1-mini-2024-09-12":{input_cost_per_token:121e-8,output_cost_per_token:484e-8,cache_read_input_token_cost:605e-9,max_tokens:65536,max_input_tokens:128e3,max_output_tokens:65536},"azure/us/o1-preview-2024-09-12":{input_cost_per_token:165e-7,output_cost_per_token:66e-6,cache_read_input_token_cost:825e-8,max_tokens:32768,max_input_tokens:128e3,max_output_tokens:32768},"azure/us/o3-2025-04-16":{input_cost_per_token:22e-7,output_cost_per_token:88e-7,cache_read_input_token_cost:55e-8,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/us/o3-mini-2025-01-31":{input_cost_per_token:121e-8,output_cost_per_token:484e-8,cache_read_input_token_cost:605e-9,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/us/o4-mini-2025-04-16":{input_cost_per_token:121e-8,output_cost_per_token:484e-8,cache_read_input_token_cost:31e-8,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"azure/whisper-1":{},"gpt-4o-transcribe-diarize":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_input_tokens:16e3,max_output_tokens:2e3},"gpt-3.5-turbo":{input_cost_per_token:5e-7,output_cost_per_token:15e-7,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"gpt-3.5-turbo-0125":{input_cost_per_token:5e-7,output_cost_per_token:15e-7,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"gpt-3.5-turbo-1106":{input_cost_per_token:1e-6,output_cost_per_token:2e-6,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"gpt-3.5-turbo-16k":{input_cost_per_token:3e-6,output_cost_per_token:4e-6,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"gpt-3.5-turbo-instruct":{input_cost_per_token:15e-7,output_cost_per_token:2e-6,max_tokens:4096,max_input_tokens:8192,max_output_tokens:4096},"gpt-3.5-turbo-instruct-0914":{input_cost_per_token:15e-7,output_cost_per_token:2e-6,max_tokens:4097,max_input_tokens:8192,max_output_tokens:4097},"gpt-4":{input_cost_per_token:3e-5,output_cost_per_token:6e-5,max_tokens:4096,max_input_tokens:8192,max_output_tokens:4096},"gpt-4-0125-preview":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4-0314":{input_cost_per_token:3e-5,output_cost_per_token:6e-5,max_tokens:4096,max_input_tokens:8192,max_output_tokens:4096},"gpt-4-0613":{input_cost_per_token:3e-5,output_cost_per_token:6e-5,max_tokens:4096,max_input_tokens:8192,max_output_tokens:4096},"gpt-4-1106-preview":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4-turbo":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4-turbo-2024-04-09":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4-turbo-preview":{input_cost_per_token:1e-5,output_cost_per_token:3e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4.1":{input_cost_per_token:2e-6,output_cost_per_token:8e-6,cache_read_input_token_cost:5e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"gpt-4.1-2025-04-14":{input_cost_per_token:2e-6,output_cost_per_token:8e-6,cache_read_input_token_cost:5e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"gpt-4.1-mini":{input_cost_per_token:4e-7,output_cost_per_token:16e-7,cache_read_input_token_cost:1e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"gpt-4.1-mini-2025-04-14":{input_cost_per_token:4e-7,output_cost_per_token:16e-7,cache_read_input_token_cost:1e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"gpt-4.1-nano":{input_cost_per_token:1e-7,output_cost_per_token:4e-7,cache_read_input_token_cost:25e-9,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"gpt-4.1-nano-2025-04-14":{input_cost_per_token:1e-7,output_cost_per_token:4e-7,cache_read_input_token_cost:25e-9,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"gpt-4o":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-2024-05-13":{input_cost_per_token:5e-6,output_cost_per_token:15e-6,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4o-2024-08-06":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-2024-11-20":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-audio-preview":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-audio-preview-2024-12-17":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-audio-preview-2025-06-03":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-audio":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-audio-1.5":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-audio-2025-08-28":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-audio-mini":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-audio-mini-2025-10-06":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-audio-mini-2025-12-15":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-mini":{input_cost_per_token:15e-8,output_cost_per_token:6e-7,cache_read_input_token_cost:75e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-mini-2024-07-18":{input_cost_per_token:15e-8,output_cost_per_token:6e-7,cache_read_input_token_cost:75e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-mini-audio-preview":{input_cost_per_token:15e-8,output_cost_per_token:6e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-mini-audio-preview-2024-12-17":{input_cost_per_token:15e-8,output_cost_per_token:6e-7,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-mini-realtime-preview":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4o-mini-realtime-preview-2024-12-17":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,cache_read_input_token_cost:3e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4o-mini-search-preview":{input_cost_per_token:15e-8,output_cost_per_token:6e-7,cache_read_input_token_cost:75e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-mini-search-preview-2025-03-11":{input_cost_per_token:15e-8,output_cost_per_token:6e-7,cache_read_input_token_cost:75e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-mini-transcribe":{input_cost_per_token:125e-8,output_cost_per_token:5e-6,max_input_tokens:16e3,max_output_tokens:2e3},"gpt-4o-mini-tts":{input_cost_per_token:25e-7,output_cost_per_token:1e-5},"gpt-4o-realtime-preview":{input_cost_per_token:5e-6,output_cost_per_token:2e-5,cache_read_input_token_cost:25e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4o-realtime-preview-2024-12-17":{input_cost_per_token:5e-6,output_cost_per_token:2e-5,cache_read_input_token_cost:25e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4o-realtime-preview-2025-06-03":{input_cost_per_token:5e-6,output_cost_per_token:2e-5,cache_read_input_token_cost:25e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-4o-search-preview":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-search-preview-2025-03-11":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-4o-transcribe":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_input_tokens:16e3,max_output_tokens:2e3},"gpt-image-1.5":{input_cost_per_token:5e-6,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8},"gpt-image-1.5-2025-12-16":{input_cost_per_token:5e-6,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8},"gpt-image-2":{input_cost_per_token:5e-6,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8},"gpt-image-2-2026-04-21":{input_cost_per_token:5e-6,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-8},"gpt-5":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.1":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.1-2025-11-13":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.1-chat-latest":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-5.2":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.2-2025-12-11":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.2-chat-latest":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-5.3-chat-latest":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-5.2-pro":{input_cost_per_token:21e-6,output_cost_per_token:168e-6,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.2-pro-2025-12-11":{input_cost_per_token:21e-6,output_cost_per_token:168e-6,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.5":{input_cost_per_token:5e-6,output_cost_per_token:3e-5,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.5-2026-04-23":{input_cost_per_token:5e-6,output_cost_per_token:3e-5,cache_read_input_token_cost:5e-7,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.5-pro":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.5-pro-2026-04-23":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.4":{input_cost_per_token:25e-7,output_cost_per_token:15e-6,cache_read_input_token_cost:25e-8,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.4-2026-03-05":{input_cost_per_token:25e-7,output_cost_per_token:15e-6,cache_read_input_token_cost:25e-8,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.4-pro":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.4-pro-2026-03-05":{input_cost_per_token:3e-5,output_cost_per_token:18e-5,cache_read_input_token_cost:3e-6,max_tokens:128e3,max_input_tokens:105e4,max_output_tokens:128e3},"gpt-5.4-mini":{input_cost_per_token:75e-8,output_cost_per_token:45e-7,cache_read_input_token_cost:75e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.4-mini-2026-03-17":{input_cost_per_token:75e-8,output_cost_per_token:45e-7,cache_read_input_token_cost:75e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.4-nano":{input_cost_per_token:2e-7,output_cost_per_token:125e-8,cache_read_input_token_cost:2e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.4-nano-2026-03-17":{input_cost_per_token:2e-7,output_cost_per_token:125e-8,cache_read_input_token_cost:2e-8,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5-pro":{input_cost_per_token:15e-6,output_cost_per_token:12e-5,max_tokens:272e3,max_input_tokens:128e3,max_output_tokens:272e3},"gpt-5-pro-2025-10-06":{input_cost_per_token:15e-6,output_cost_per_token:12e-5,max_tokens:272e3,max_input_tokens:128e3,max_output_tokens:272e3},"gpt-5-2025-08-07":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5-chat":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-5-chat-latest":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"gpt-5-codex":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.1-codex":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.1-codex-max":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.1-codex-mini":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.2-codex":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5.3-codex":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5-mini":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5-mini-2025-08-07":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5-nano":{input_cost_per_token:5e-8,output_cost_per_token:4e-7,cache_read_input_token_cost:5e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5-nano-2025-08-07":{input_cost_per_token:5e-8,output_cost_per_token:4e-7,cache_read_input_token_cost:5e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-image-1":{input_cost_per_token:5e-6,cache_read_input_token_cost:125e-8},"gpt-image-1-mini":{input_cost_per_token:2e-6,cache_read_input_token_cost:2e-7},"gpt-realtime":{input_cost_per_token:4e-6,output_cost_per_token:16e-6,cache_read_input_token_cost:4e-7,max_tokens:4096,max_input_tokens:32e3,max_output_tokens:4096},"gpt-realtime-1.5":{input_cost_per_token:4e-6,output_cost_per_token:16e-6,cache_read_input_token_cost:4e-7,max_tokens:4096,max_input_tokens:32e3,max_output_tokens:4096},"gpt-realtime-2":{input_cost_per_token:4e-6,output_cost_per_token:16e-6,cache_read_input_token_cost:4e-7,max_tokens:4096,max_input_tokens:32e3,max_output_tokens:4096},"gpt-realtime-mini":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-realtime-2025-08-28":{input_cost_per_token:4e-6,output_cost_per_token:16e-6,cache_read_input_token_cost:4e-7,max_tokens:4096,max_input_tokens:32e3,max_output_tokens:4096},"openrouter/openai/gpt-3.5-turbo":{input_cost_per_token:15e-7,output_cost_per_token:2e-6,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"openrouter/openai/gpt-3.5-turbo-16k":{input_cost_per_token:3e-6,output_cost_per_token:4e-6,max_tokens:4096,max_input_tokens:16385,max_output_tokens:4096},"openrouter/openai/gpt-4":{input_cost_per_token:3e-5,output_cost_per_token:6e-5,max_tokens:4096,max_input_tokens:8191,max_output_tokens:4096},"openrouter/openai/gpt-4.1":{input_cost_per_token:2e-6,output_cost_per_token:8e-6,cache_read_input_token_cost:5e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"openrouter/openai/gpt-4.1-mini":{input_cost_per_token:4e-7,output_cost_per_token:16e-7,cache_read_input_token_cost:1e-7,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"openrouter/openai/gpt-4.1-nano":{input_cost_per_token:1e-7,output_cost_per_token:4e-7,cache_read_input_token_cost:25e-9,max_tokens:32768,max_input_tokens:1047576,max_output_tokens:32768},"openrouter/openai/gpt-4o":{input_cost_per_token:25e-7,output_cost_per_token:1e-5,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"openrouter/openai/gpt-4o-2024-05-13":{input_cost_per_token:5e-6,output_cost_per_token:15e-6,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"openrouter/openai/gpt-5-chat":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"openrouter/openai/gpt-5-codex":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"openrouter/openai/gpt-5.2-codex":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"openrouter/openai/gpt-5":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"openrouter/openai/gpt-5-mini":{input_cost_per_token:25e-8,output_cost_per_token:2e-6,cache_read_input_token_cost:25e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"openrouter/openai/gpt-5-nano":{input_cost_per_token:5e-8,output_cost_per_token:4e-7,cache_read_input_token_cost:5e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"openrouter/openai/gpt-5.1-codex-max":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:4e5,max_output_tokens:128e3},"openrouter/openai/gpt-5.2":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"openrouter/openai/gpt-5.2-chat":{input_cost_per_token:175e-8,output_cost_per_token:14e-6,cache_read_input_token_cost:175e-9,max_tokens:16384,max_input_tokens:128e3,max_output_tokens:16384},"openrouter/openai/gpt-5.2-pro":{input_cost_per_token:21e-6,output_cost_per_token:168e-6,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"openrouter/openai/gpt-oss-120b":{input_cost_per_token:18e-8,output_cost_per_token:8e-7,max_tokens:32768,max_input_tokens:131072,max_output_tokens:32768},"openrouter/openai/gpt-oss-20b":{input_cost_per_token:2e-8,output_cost_per_token:1e-7,max_tokens:32768,max_input_tokens:131072,max_output_tokens:32768},"openrouter/openai/o1":{input_cost_per_token:15e-6,output_cost_per_token:6e-5,cache_read_input_token_cost:75e-7,max_tokens:1e5,max_input_tokens:2e5,max_output_tokens:1e5},"openrouter/openai/o3-mini":{input_cost_per_token:11e-7,output_cost_per_token:44e-7,max_tokens:65536,max_input_tokens:128e3,max_output_tokens:65536},"openrouter/openai/o3-mini-high":{input_cost_per_token:11e-7,output_cost_per_token:44e-7,max_tokens:65536,max_input_tokens:128e3,max_output_tokens:65536},"openai/container":{},"openai/sora-2":{},"openai/sora-2-pro":{},"openai/sora-2-pro-high-res":{},"azure/sora-2":{},"azure/sora-2-pro":{},"azure/sora-2-pro-high-res":{},"gpt-4o-mini-tts-2025-03-20":{input_cost_per_token:25e-7,output_cost_per_token:1e-5},"gpt-4o-mini-tts-2025-12-15":{input_cost_per_token:25e-7,output_cost_per_token:1e-5},"gpt-4o-mini-transcribe-2025-03-20":{input_cost_per_token:125e-8,output_cost_per_token:5e-6,max_input_tokens:16e3,max_output_tokens:2e3},"gpt-4o-mini-transcribe-2025-12-15":{input_cost_per_token:125e-8,output_cost_per_token:5e-6,max_input_tokens:16e3,max_output_tokens:2e3},"gpt-5-search-api":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-5-search-api-2025-10-14":{input_cost_per_token:125e-8,output_cost_per_token:1e-5,cache_read_input_token_cost:125e-9,max_tokens:128e3,max_input_tokens:272e3,max_output_tokens:128e3},"gpt-realtime-mini-2025-10-06":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,cache_read_input_token_cost:6e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096},"gpt-realtime-mini-2025-12-15":{input_cost_per_token:6e-7,output_cost_per_token:24e-7,cache_read_input_token_cost:6e-8,max_tokens:4096,max_input_tokens:128e3,max_output_tokens:4096}},Pi=new Map([[`gpt-5-codex`,`gpt-5`],[`gpt-5.3-codex`,`gpt-5.2-codex`]]);function Fi(e,t){return(e??t??0)*ji}async function Ii(){return Ni}function Li(e){return(e.input_cost_per_token??0)>0||(e.output_cost_per_token??0)>0||(e.cache_read_input_token_cost??0)>0}function Ri(e,t){return Math.max(e.inputTokens-e.cachedInputTokens,0)/ji*t.inputCostPerMToken+e.cachedInputTokens/ji*t.cachedInputCostPerMToken+e.outputTokens/ji*t.outputCostPerMToken}function zi(e){if(e==null||e===``||e===`auto`)return`auto`;if(e===`standard`||e===`fast`)return e;throw Error(`Invalid speed option: ${e}. Use auto, standard, or fast.`)}async function Bi(e){let t=zi(e);if(t!==`auto`)return t;for(let e of ii().map(e=>L.join(e,`config.toml`))){let t=await S({try:ne(e),catch:e=>e});if(!I(t)&&/(?:^|\n)\s*service_tier\s*=\s*["']?(?:fast|priority)["']?/iu.test(t.value))return`fast`}return`standard`}async function Vi(e,t,n){let r=await t.getModelPricing(e);if(I(r))throw r.error;let i=r.value,a=Pi.get(e);if(a!=null&&(i==null||!Li(i))){let e=await t.getModelPricing(a);if(I(e))throw e.error;e.value!=null&&Li(e.value)&&(i=e.value)}if(i==null)return{inputCostPerMToken:0,cachedInputCostPerMToken:0,outputCostPerMToken:0};let o=n===`fast`?i.provider_specific_entry?.fast??2:1;return{inputCostPerMToken:Fi(i.input_cost_per_token)*o,cachedInputCostPerMToken:Fi(i.cache_read_input_token_cost,i.input_cost_per_token)*o,outputCostPerMToken:Fi(i.output_cost_per_token)*o}}function Hi(e,t){e.inputTokens+=t.inputTokens,e.cachedInputTokens+=t.cachedInputTokens,e.outputTokens+=t.outputTokens,e.reasoningOutputTokens+=t.reasoningOutputTokens,e.totalTokens+=t.totalTokens}function Ui(){return{inputTokens:0,cachedInputTokens:0,outputTokens:0,reasoningOutputTokens:0,totalTokens:0,isFallback:!1}}async function Wi(e,t,n){let r=ur(t.since),i=ur(t.until),a=await Bi(t.speed),o=await wi(),s=n.pricingFetcher==null?new l({offline:t.offline===!0,offlineLoader:Ii,logger:n.progress?.pricingLogger??w,providerPrefixes:Mi}):void 0,c=n.pricingFetcher??s;try{let n=new Map;for(let a of o){let o=a.model?.trim();if(o==null||o===``)continue;let s=vr(a.timestamp,t.timezone);if(!pr(s,r,i))continue;let c=e===`session`?a.sessionId:e===`monthly`?yr(a.timestamp,t.timezone):s,l=n.get(c)??{row:Cr(c,`codex`),models:new Map,reasoningOutputTokens:0,lastActivity:a.timestamp};n.has(c)||n.set(c,l),l.row.inputTokens+=a.inputTokens,l.row.outputTokens+=a.outputTokens,l.row.cacheReadTokens+=a.cachedInputTokens,l.row.totalTokens+=a.totalTokens,l.reasoningOutputTokens+=a.reasoningOutputTokens,a.timestamp>l.lastActivity&&(l.lastActivity=a.timestamp);let u=l.models.get(o)??Ui();l.models.has(o)||l.models.set(o,u),Hi(u,a),a.isFallbackModel===!0&&(u.isFallback=!0)}let s=new Map;for(let e of n.values())for(let t of e.models.keys())s.has(t)||s.set(t,await Vi(t,c,a));return{groups:n,pricingByModel:s}}finally{s?.[Symbol.dispose]()}}function Gi(e,t){let n=0;for(let[r,i]of e){let e=t.get(r);e!=null&&(n+=Ri(i,e))}return n}async function Ki(e,t,r){let{groups:i,pricingByModel:a}=await Wi(e,t,r);return Array.from(i.values(),({row:e,models:t,reasoningOutputTokens:r,lastActivity:i})=>({...e,totalCost:Gi(t,a),modelsUsed:Array.from(t.keys()).sort(n),metadata:{lastActivity:i,reasoningOutputTokens:r}})).sort((e,t)=>n(e.period,t.period))}async function qi(e,t,r){let{groups:i,pricingByModel:a}=await Wi(e,t,r);return Array.from(i.entries(),([t,n])=>{let{row:r,reasoningOutputTokens:i,lastActivity:o}=n,s={};for(let[e,t]of n.models)s[e]={...t};let c={inputTokens:r.inputTokens,cachedInputTokens:r.cacheReadTokens,outputTokens:r.outputTokens,reasoningOutputTokens:i,totalTokens:r.totalTokens,costUSD:Gi(n.models,a),models:s};if(e===`daily`)return{date:t,...c};if(e===`monthly`)return{month:t,...c};let l=t.lastIndexOf(`/`);return{sessionId:t,lastActivity:o,sessionFile:l>=0?t.slice(l+1):t,directory:l>=0?t.slice(0,l):``,...c}}).sort((e,t)=>n(`date`in e?e.date:`month`in e?e.month:e.lastActivity,`date`in t?t.date:`month`in t?t.month:t.lastActivity))}const Ji=$e(import.meta.url);let Yi;function Xi(e){return typeof e==`object`&&e&&`code`in e?e.code:null}function Zi(e){let t=Xi(e);return t===`ERR_UNKNOWN_BUILTIN_MODULE`||t===`MODULE_NOT_FOUND`}function Qi(e){return(typeof e==`string`?e:e.message).includes(`SQLite is an experimental feature`)}function $i(e){try{let e=Ji(`bun:sqlite`);return(t,n)=>new e.Database(t,{readonly:n?.readOnly})}catch(t){return Zi(t)||e?.(`Failed to load bun:sqlite:`,t),null}}function ea(e){let t=R.emitWarning.bind(R);try{R.emitWarning=((e,...n)=>{if(!Qi(e))return t(e,...n)});let e=Ji(`node:sqlite`);return(t,n)=>new e.DatabaseSync(t,n??{})}catch(t){return Zi(t)||e?.(`Failed to load node:sqlite:`,t),null}finally{R.emitWarning=t}}function ta(e){return Yi===void 0&&(Yi=$i(e)??ea(e)),Yi}function na(e,t,n,r){let i=ta(r);if(i==null)return null;let a=i(e,t);try{return n(a)}finally{a.close()}}const ra=L.join(dt(),`.local/share/opencode`),ia=/^opencode-[\w-]+\.db$/u;function aa(){return kr(Or(R.env.OPENCODE_DATA_DIR,[ra]))}function oa(e,t){let n=L.relative(t,e);return n===``||!n.startsWith(`..`)&&!L.isAbsolute(n)}function sa(e,t){let n=S({try:()=>it(e),catch:e=>e})();return I(n)||!oa(n.value,t)?null:n.value}function ca(e){let t=S({try:()=>it(e),catch:e=>e})();if(I(t))return w.warn(`Failed to resolve OpenCode data directory:`,t.error),null;let n=L.join(e,`opencode.db`);if(et(n)){let e=sa(n,t.value);if(e!=null)return e}let r=S({try:()=>rt(e),catch:e=>e})();if(I(r))return w.warn(`Failed to read OpenCode data directory:`,r.error),null;for(let n of r.value.filter(e=>ia.test(e)).sort()){let r=sa(L.join(e,n),t.value);if(r!=null)return r}return null}function la(e){if(et(L.join(e,`opencode.db`)))return!0;try{return rt(e).some(e=>ia.test(e))}catch{return!1}}async function ua(e){let t=L.join(e,`storage`,`message`);return c(t)?ue(t,{extension:`.json`}):[]}async function da(e){let t=L.join(e,`storage`,`message`);return la(e)||await u(t,{extension:`.json`})}const fa=Fe(k(),we(1),Ve(`ModelName`)),pa=Fe(k(),we(1),Ve(`SessionId`)),ma=D({input:O(N()),output:O(N()),reasoning:O(N()),cache:O(D({read:O(N()),write:O(N())}))}),ha=D({id:k(),sessionID:O(pa),providerID:O(k()),modelID:O(fa),time:D({created:O(N()),completed:O(N())}),tokens:O(ma),cost:O(N())}),ga=D({id:k(),session_id:k(),data:k()});function _a(e){let t=S({try:()=>JSON.parse(e),catch:e=>e})();return I(t)||typeof t.value!=`object`||t.value==null||Array.isArray(t.value)?null:t.value}function va(e){return(e.input??0)>0||(e.output??0)>0||(e.reasoning??0)>0||(e.cache?.read??0)>0||(e.cache?.write??0)>0}function ya(e){return e.tokens!=null&&va(e.tokens)&&e.providerID!=null&&e.modelID!=null}function ba(e){return{timestamp:new Date(e.time.created??Date.now()),sessionID:e.sessionID??`unknown`,usage:{inputTokens:e.tokens?.input??0,outputTokens:e.tokens?.output??0,cacheCreationInputTokens:e.tokens?.cache?.write??0,cacheReadInputTokens:e.tokens?.cache?.read??0},model:e.modelID??`unknown`,providerID:e.providerID??`unknown`,costUSD:e.cost??null}}function xa(e){let t=Oe(ha,e);return!t.success||!ya(t.output)?null:{id:t.output.id,entry:ba(t.output)}}function Sa(e){let t=_a(e);return t==null?null:xa(t)}async function Ca(e){let t=await S({try:ne(e),catch:e=>e});return I(t)?null:Sa(t.value)}function wa(e){return ce({itemCount:e,isMainThread:z,moduleUrl:import.meta.url,envValue:R.env.CCUSAGE_JSONL_WORKER_THREADS,isTest:!1,preferMoreWorkers:!0})}async function Ta(e){return Ce({items:e,workerCount:wa(e.length),moduleUrl:import.meta.url,errorMessage:`ccusage opencode worker exited with code {code}`,createWorkerData:e=>({kind:`ccusage:opencode-worker`,items:e})})}function Ea(e){let t=ca(e);if(t==null||ta()==null)return[];let n=S({try:()=>na(t,{readOnly:!0},e=>{let t=e.prepare(`SELECT id, session_id, data FROM message`).all(),n=[];for(let e of t){let t=Oe(ga,e);if(!t.success)continue;let r=_a(t.output.data);if(r==null)continue;let i=xa({...r,id:t.output.id,sessionID:t.output.session_id});i!=null&&n.push(i)}return n},w.warn),catch:e=>e})();return I(n)?(w.warn(`Failed to load OpenCode messages from DB:`,n.error),[]):n.value??[]}async function Da(){let e=aa();if(e.length===0)return[];let t=[],n=new Set;for(let r of e){let e=Ea(r);for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r.entry));let i=await ua(r),a=await Ta(i)??await Promise.all(i.map(Ca));for(let e of a)e==null||n.has(e.id)||(n.add(e.id),t.push(e.entry))}return t}async function Oa(e){let t=[];for(let{index:n,item:r}of e.items)t.push({index:n,result:await Ca(r)});pt?.postMessage({results:t})}function ka(e){return typeof e==`object`&&!!e&&`kind`in e&&e.kind===`ccusage:opencode-worker`}!z&&ka(B)&&Oa(B).catch(()=>{R.exit(1)});const Aa={"gemini-3-pro-high":`gemini-3-pro-preview`};function ja(e){return Aa[e]??e}function Ma(e){return e.replaceAll(`-`,`_`)}function Na(e){return ja(e).replace(/^(claude-(?:haiku|opus|sonnet)-\d+)\.(\d+)(-.*)?$/u,`$1-$2$3`).replace(/^(claude-(?:haiku|opus|sonnet)-\d)(\d)(-.*)?$/u,`$1-$2$3`)}function Pa(e){let t=ja(e.model),n=Na(t),r=n===t?[t]:[t,n],i=[...r];if(e.providerID!==`unknown`){let t=Ma(e.providerID);i.push(...r.map(e=>`${t}/${e}`))}return Array.from(new Set(i))}async function Fa(e,t){if(e.costUSD!=null&&e.costUSD>0)return e.costUSD;let n={input_tokens:e.usage.inputTokens,output_tokens:e.usage.outputTokens,cache_creation_input_tokens:e.usage.cacheCreationInputTokens,cache_read_input_tokens:e.usage.cacheReadInputTokens};for(let r of Pa(e)){let e=await t.calculateCostFromTokens(n,r);if(oe(e)&&e.value>0)return e.value}return 0}async function Ia(){return(await Promise.all(aa().map(da))).some(Boolean)}function La(e,t){return Tr(t,()=>new l({offline:e.offline===!0,logger:w}))}const Ra=Er({agent:`opencode`,loadEntries:async()=>Da(),prepare:La,disposePrepared:e=>{e.dispose()},getTimestamp:e=>e.timestamp.toISOString(),getSessionId:e=>e.sessionID,getModels:e=>[e.model],getUsage:async(e,t)=>({inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheCreationTokens:e.usage.cacheCreationInputTokens,cacheReadTokens:e.usage.cacheReadInputTokens,totalCost:await Fa(e,t.fetcher)})}),za=L.join(`.pi`,`agent`);function Ba(e){if(e!=null&&e.trim()!==``)return kr(Or(e,[]));if((R.env.PI_AGENT_DIR??``).trim()!==``)return kr(Or(R.env.PI_AGENT_DIR,[]));let t=L.join(Ee,za,`sessions`);return c(t)?[t]:[]}const Va=D({input:N(),output:N(),cacheRead:O(N()),cacheWrite:O(N()),totalTokens:O(N()),cost:O(D({total:O(N())}))}),Ha=D({type:O(k()),timestamp:_e,message:D({role:O(k()),model:O(k()),usage:O(Va)})});function Ua(e){return(e.type==null||e.type===`message`)&&e.message.role===`assistant`&&e.message.usage!=null&&typeof e.message.usage.input==`number`&&typeof e.message.usage.output==`number`}function Wa(e){let t=L.basename(e,`.jsonl`),n=t.indexOf(`_`);return n===-1?t:t.slice(n+1)}function Ga(e){let t=e.replace(/[/\\]/g,L.sep).split(L.sep),n=t.findIndex(e=>e===`sessions`);return n===-1||n+1>=t.length?`unknown`:t[n+1]??`unknown`}function Ka(e){if(!Ua(e))return null;let t=e.message.usage,n=t.cacheWrite??0,r=t.cacheRead??0,i=t.totalTokens??t.input+t.output+r+n;return{model:e.message.model==null?void 0:`[pi] ${e.message.model}`,inputTokens:t.input,outputTokens:t.output,cacheCreationTokens:n,cacheReadTokens:r,cost:t.cost?.total??0,tokenTotal:i}}const qa=[`"usage"`];async function Ja(e){let t=[];for(let n of e){let e=await ue(n,{extension:`.jsonl`});t.push(...e)}return t}function Ya(e){return ce({itemCount:e,isMainThread:z,moduleUrl:import.meta.url,envValue:R.env.CCUSAGE_JSONL_WORKER_THREADS,isTest:!1,preferMoreWorkers:!0})}async function Xa(e){let t=Ga(e),n=Wa(e),r=[];return I(await S({try:Je(e,qa,e=>{if(!e.includes(`"message"`))return;let i=S({try:()=>JSON.parse(e),catch:e=>e})();if(I(i))return;let a=Oe(Ha,i.value);if(!a.success)return;let o=Ka(a.output);o!=null&&r.push({timestamp:a.output.timestamp,project:t,sessionId:n,...o})}),catch:e=>e}))?[]:r}async function Za(e){return Ce({items:e,workerCount:Ya(e.length),moduleUrl:import.meta.url,errorMessage:`pi-agent usage worker exited with code {code}`,createWorkerData:e=>({kind:`ccusage:pi-usage-worker`,items:e})})}async function Qa(e){let t=Ba(e);if(t.length===0)return[];let n=await Ja(t);if(n.length===0)return[];let r=new Set,i=[],a=await Za(n)??await o(n,Xe(n.length),Xa);for(let e of a)for(let t of e){let e=[`pi`,t.project,t.sessionId,t.timestamp,t.model,t.inputTokens,t.outputTokens,t.cacheCreationTokens,t.cacheReadTokens,t.cost,t.tokenTotal].join(`:`);r.has(e)||(r.add(e),i.push(t))}return i}async function $a(e){let t=[];for(let{index:n,item:r}of e.items)t.push({index:n,result:await Xa(r)});pt?.postMessage({results:t})}function eo(e){return typeof e==`object`&&!!e&&`kind`in e&&e.kind===`ccusage:pi-usage-worker`}!z&&eo(B)&&$a(B).catch(()=>{R.exit(1)});async function to(e,t){return u(e,{extension:t})}async function no(){return(await Promise.all(Ba().map(async e=>to(e,`.jsonl`)))).some(Boolean)}const ro=Er({agent:`pi`,loadEntries:async e=>Qa(e.piPath),getTimestamp:e=>e.timestamp,getSessionId:e=>e.sessionId,getModels:e=>[e.model??`unknown`],getUsage:e=>({inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:e.tokenTotal,totalCost:e.cost}),getMetadata:(e,t)=>{if(t!==`session`)return;let r=e.map(e=>e.timestamp).sort(n).at(-1);return{lastActivity:r==null?void 0:vr(r),projectPath:e[0]?.project}}});async function io(e,t){return ro(e,t,{})}function ao(e,t){for(let n of t)e.add(n)}async function oo(e){let[t,n,r,i,a]=so(await Promise.allSettled([ti(),oi(),Ia(),Xr(),no()])),o=[];return t&&o.push(`claude`),n&&o.push(`codex`),r&&o.push(`opencode`),i&&o.push(`amp`),a&&o.push(`pi`),o}function so(e){return[e[0]?.status===`fulfilled`?e[0].value:!1,e[1]?.status===`fulfilled`?e[1].value:!1,e[2]?.status===`fulfilled`?e[2].value:!1,e[3]?.status===`fulfilled`?e[3].value:!1,e[4]?.status===`fulfilled`?e[4].value:!1]}function co(e,t){let r=new Map;for(let n of e){let e=t(n),i=r.get(e)??{row:Cr(e,`all`),models:new Set,agents:new Set,agentBreakdowns:[]};r.has(e)||r.set(e,i),i.row.inputTokens+=n.inputTokens,i.row.outputTokens+=n.outputTokens,i.row.cacheCreationTokens+=n.cacheCreationTokens,i.row.cacheReadTokens+=n.cacheReadTokens,i.row.totalTokens+=n.totalTokens,i.row.totalCost+=n.totalCost,ao(i.models,n.modelsUsed);for(let e of wr(n))i.agents.add(e);i.agentBreakdowns.push({...n,period:e})}return Array.from(r.values(),({row:e,models:t,agents:r,agentBreakdowns:i})=>({...e,modelsUsed:Array.from(t).sort(n),metadata:{...e.metadata,agents:Array.from(r).sort(n)},agentBreakdowns:i.sort((e,t)=>n(e.agent,t.agent))})).sort((e,t)=>n(e.period,t.period)||n(e.agent,t.agent))}async function lo(e,t,n,r){r.progress?.start(e);let i=await S({try:uo(e,t,n,r),catch:e=>e});if(I(i))throw r.progress?.fail(e,i.error),i.error;return r.progress?.succeed(e,i.value.length),i.value}async function uo(e,t,n,r){switch(e){case`claude`:return ni(t,n);case`codex`:return Ki(t,n,r);case`opencode`:return Ra(t,n,r);case`amp`:return Qr(t,n,r);case`pi`:return io(t,n)}return e}const fo=[`⠋`,`⠙`,`⠹`,`⠸`,`⠼`,`⠴`,`⠦`,`⠧`,`⠇`,`⠏`],po={succeed:`✔`,fail:`✖`,warn:`!`,info:`ℹ`},mo={succeed:`green`,fail:`red`,warn:`yellow`,info:`blue`,spinner:`cyan`},ho=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531],[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],go=/(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F)(?:\u200d(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F))*/uy,_o=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,vo=/\p{M}+/uy;function yo(e,t){let n=0,r,i=t.length-1;if(e<t[0][0]||e>t[i][1])return!1;for(;i>=n;)if(r=Math.floor((n+i)/2),e>t[r][1])n=r+1;else if(e<t[r][0])i=r-1;else return!0;return!1}function bo(e){return e===0||e<32||e>=127&&e<160||yo(e,ho)?0:e>=4352&&(e<=4447||e==9001||e==9002||e>=11904&&e<=42191&&e!=12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072&&e<=196605||e>=196608&&e<=262141)?2:1}function xo(e){let t=0,n=0;for(let r=0;r<e.length;r++){if(n=e[r].charCodeAt(0),n>=32&&n<127){t++;continue}if(_o.lastIndex=r,_o.test(e)){r=_o.lastIndex-1;continue}if(go.lastIndex=r,go.test(e)){r=go.lastIndex-1,t+=2;continue}if(vo.lastIndex=r,vo.test(e)){r=vo.lastIndex-1;continue}t+=bo(n)}return t}function So(e,t){let n=e.split(`
14
+ `).length;if(t===1/0)return n;for(let r of e.split(`
15
+ `))n+=Math.max(Math.ceil(xo(r)/t)-1,0);return n}var Co=class{text;onChange;onFinish;finished=!1;newLineEnding=!0;constructor(e){this.text=e}setText(e){this.text=e,typeof this.onChange==`function`&&this.onChange()}finish(){!this.finished&&typeof this.onFinish==`function`&&this.onFinish(),this.finished=!0}output(){return this.text}disableNewLineEnding(){this.newLineEnding=!1}};const wo=new class{hideCursor;components=[];lastLinesAmt=0;terminalWidth=1/0;finishedComponents=0;outputBuffer=``;constructor(e=!0){this.hideCursor=e}addComponent(e){this.components.push(e),e.onChange=this.render.bind(this),e.onFinish=this.onComponentFinish.bind(this),process.stdout.getWindowSize&&(this.terminalWidth=process.stdout.getWindowSize()[0]),this.render()}onComponentFinish(){this.finishedComponents++,this.finishedComponents===this.components.length&&(this._reset(),process.stdout.write(`\x1B[?25h`))}removeComponent(e){this.components=this.components.filter(t=>t!==e),e.onChange=void 0,e.finished&&this.finishedComponents--,this.render()}render(){if(this.outputBuffer=``,this.clear(),this.components.length===0){process.stdout.write(this.outputBuffer),this.hideCursor&&process.stdout.write(`\x1B[?25h`),this.lastLinesAmt=0;return}this.hideCursor&&(this.outputBuffer+=`\x1B[?25l`);let e=``,t=!0;for(let n=0;n<this.components.length;n++){let r=this.components[n];e+=r.output()+(n!==this.components.length-1||r.newLineEnding?`
16
+ `:``),r.finished||(t=!1)}this.lastLinesAmt=So(e,this.terminalWidth),this.outputBuffer+=e,t&&(this._reset(),this.outputBuffer+=`\x1B[?25h`),process.stdout.write(this.outputBuffer)}clear(){for(let e=0;e<this.lastLinesAmt-1;e++)this.outputBuffer+=`\r\x1B[K\x1B[1A`;this.outputBuffer+=`\r\x1B[K`}_reset(){this.components=[],this.lastLinesAmt=0,this.terminalWidth=1/0,this.finishedComponents=0}};var To=class{running=!1;text=``;currentSymbol;symbolFormatter;interval;frameIndex=0;symbols;frames;component=new Co(``);colors;constructor(e=``,{disableNewLineEnding:t,colors:n,frames:r=fo,symbols:i={}}={}){this.symbols={...po,...i},typeof n==`object`?this.colors={...mo,...n}:n!==!1&&(this.colors=mo),t===!0&&this.component.disableNewLineEnding(),typeof e==`string`&&(e={text:e}),delete e.symbol,this.setDisplay(e,!1),this.frames=r,this.currentSymbol=r[0]}start(e=50){if(this.running)throw Error(`Spinner is already running.`);this.component.finished&&(this.component.finished=!1),this.interval=setInterval(this.tick.bind(this),e),this.running=!0,this.currentSymbol=this.frames[0],this.tick(),wo.addComponent(this.component),this.addListeners()}tick(){this.currentSymbol=this.format(this.frames[this.frameIndex++],`spinner`),this.frameIndex===this.frames.length&&(this.frameIndex=0),this.refresh()}onProcessExit=e=>{this.stop();let t;t=e===`SIGTERM`?143:e===`SIGINT`?130:Number(e),process.exit(t)};addListeners(){process.once(`SIGTERM`,this.onProcessExit),process.once(`SIGINT`,this.onProcessExit),process.once(`exit`,this.onProcessExit)}clearListeners(){process.off(`SIGTERM`,this.onProcessExit),process.off(`SIGINT`,this.onProcessExit),process.off(`exit`,this.onProcessExit)}refresh(){let e=this.currentSymbol;this.symbolFormatter&&(e=this.symbolFormatter(e));let t=(e?e+` `:``)+this.text;this.component.setText(t)}setDisplay(e={},t=!0){typeof e.symbol==`string`&&(typeof e.symbolType==`string`?this.currentSymbol=this.format(e.symbol,e.symbolType):this.currentSymbol=e.symbol),typeof e.text==`string`&&this.setText(e.text,!1),e.symbolFormatter&&(this.symbolFormatter=e.symbolFormatter),t&&this.refresh(),typeof e.symbol==`string`&&this.end()}setText(e,t=!0){this.text=this.format(e,`text`),this.running&&t&&this.refresh()}succeed(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.succeed,symbolType:`succeed`}):this.setDisplay({...e,symbol:this.symbols.succeed,symbolType:`succeed`})}fail(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.fail,symbolType:`fail`}):this.setDisplay({...e,symbol:this.symbols.fail,symbolType:`fail`})}warn(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.warn,symbolType:`warn`}):this.setDisplay({...e,symbol:this.symbols.warn,symbolType:`warn`})}info(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.info,symbolType:`info`}):this.setDisplay({...e,symbol:this.symbols.info,symbolType:`info`})}stop(){this.end(!1)}end(e=!0){clearInterval(this.interval),this.clearListeners(),e?this.component.finish():wo.removeComponent(this.component),this.running=!1}format(e,t){if(this.colors===void 0)return e;let n=this.colors[t];return n&&mt.styleText!==void 0?mt.styleText(n,e):e}};function X(e,t){return e.json!==!0&&t.isTTY===!0}function Eo(e){return e.map(e=>e instanceof Error?e.message:String(e)).join(` `)}function Do(e,t){let n=e.size===0?`Loading usage logs`:(()=>{let t=Array.from(e.values()).filter(e=>e!==`loading`).length,n=Array.from(e.entries()).filter(([,e])=>e===`loading`).map(([e])=>Yn[e]).join(`, `),r=n===``?``:` :: ${n}`;return`Loading usage logs (${t}/${e.size})${r}`})();return t==null?n:`${t} :: ${n}`}function Z(e){if(!e)return;let t,n,r=new Map;function i(){t?.setText(Do(r,n))}return{pricingLogger:{debug:()=>{},error(...e){n=Eo(e),i()},info(...e){n=Eo(e),i()},warn(...e){n=Eo(e),i()}},start(e){if(r.set(e,`loading`),t==null){t=new To(Do(r,n)),t.start();return}i()},succeed(e){r.set(e,`succeeded`),i()},fail(e){r.set(e,`failed`),i()},stop(){t?.running===!0&&t.stop(),t=void 0,n=void 0,r.clear()}}}const Oo={json:{type:`boolean`,short:`j`,description:`Output in JSON format`,default:!1},since:{type:`string`,short:`s`,description:`Filter from date (YYYY-MM-DD or YYYYMMDD)`},until:{type:`string`,short:`u`,description:`Filter until date (inclusive)`},timezone:{type:`string`,short:`z`,description:`Timezone for date grouping (IANA)`},offline:{type:`boolean`,negatable:!0,short:`O`,description:`Use cached pricing data instead of fetching from LiteLLM`,default:!1},compact:{type:`boolean`,description:`Force compact table layout for narrow terminals`,default:!1},color:{type:`boolean`,description:`Enable colored output (default: auto). FORCE_COLOR=1 has the same effect.`},noColor:{type:`boolean`,description:`Disable colored output (default: auto). NO_COLOR=1 has the same effect.`}},ko={...Oo,piPath:{type:`string`,description:`Path or comma-separated paths to pi-agent sessions directories`}};function Ao(e){return e===`session`?`sessions`:e}function jo(e){switch(e){case`daily`:return`date`;case`weekly`:return`week`;case`monthly`:return`month`;case`session`:return`sessionId`}}function Mo(e){let t=e.metadata?.credits;return typeof t==`number`?t:void 0}function No(e,t){let n=t.reduce((t,n)=>(t.inputTokens+=n.inputTokens,t.outputTokens+=n.outputTokens,t.cacheCreationTokens+=n.cacheCreationTokens,t.cacheReadTokens+=n.cacheReadTokens,t.totalTokens+=n.totalTokens,t.totalCost+=n.totalCost,e===`amp`&&(t.credits=(t.credits??0)+(Mo(n)??0)),t),{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,totalTokens:0,credits:e===`amp`?0:void 0,totalCost:0});return e===`amp`?{inputTokens:n.inputTokens,outputTokens:n.outputTokens,cacheCreationTokens:n.cacheCreationTokens,cacheReadTokens:n.cacheReadTokens,totalTokens:n.totalTokens,credits:n.credits??0,totalCost:n.totalCost}:{inputTokens:n.inputTokens,outputTokens:n.outputTokens,cacheCreationTokens:n.cacheCreationTokens,cacheReadTokens:n.cacheReadTokens,totalTokens:n.totalTokens,totalCost:n.totalCost}}function Po(e,t,n){let r=jo(t);return{[Ao(t)]:n.map(n=>{let i={inputTokens:n.inputTokens,outputTokens:n.outputTokens,cacheCreationTokens:n.cacheCreationTokens,cacheReadTokens:n.cacheReadTokens,totalTokens:n.totalTokens},a=Mo(n),o=e===`amp`?{[r]:n.period,...i,credits:a??0,totalCost:n.totalCost,modelsUsed:n.modelsUsed}:{[r]:n.period,...i,totalCost:n.totalCost,modelsUsed:n.modelsUsed};return t===`session`&&(n.metadata?.lastActivity!=null&&(o.lastActivity=n.metadata.lastActivity),n.metadata?.projectPath!=null&&(o.projectPath=n.metadata.projectPath)),o}),totals:n.length===0?null:No(e,n)}}async function Fo(e,t,n,r){try{var i=je();return n.offline===!0||e===`pi`?lo(e,t,n,{progress:r}):await lo(e,t,n,{pricingFetcher:i.u(new l({offline:!1,logger:r?.pricingLogger??w})),progress:r})}catch(e){i.e=e}finally{i.d()}}function Io(e){return e[0].toUpperCase()+e.slice(1)}function Lo(e){switch(e){case`daily`:return`Date`;case`weekly`:return`Week`;case`monthly`:return`Month`;case`session`:return`Session`}}function Ro(e){return`No ${Yn[e]} usage data found.`}function zo(e,t,n,r){let i=new Ae({head:[Lo(e),`Models`,`Input`,`Output`,`Cache Create`,`Cache Read`,`Total Tokens`,`Credits`,`Cost (USD)`],colAligns:[`left`,`left`,`right`,`right`,`right`,`right`,`right`,`right`,`right`],compactHead:[Lo(e),`Models`,`Input`,`Output`,`Credits`,`Cost (USD)`],compactColAligns:[`left`,`left`,`right`,`right`,`right`,`right`],minColumnWidths:[12,14,11,11,11,11,11,9,14],compactMinColumnWidths:[12,14,11,11,9,14],flexibleColumnIndex:1,compactFlexibleColumnIndex:1,compactThreshold:100,forceCompact:r.compact===!0,style:{head:[`cyan`]},dateFormatter:e=>d(e,r.timezone)});for(let e of t)i.push([e.period,g(e.modelsUsed),b(e.inputTokens),b(e.outputTokens),b(e.cacheCreationTokens),b(e.cacheReadTokens),b(e.totalTokens),(Mo(e)??0).toFixed(2),T(e.totalCost)]);return x(i,9),i.push([M(`Total`),``,M(b(n.inputTokens)),M(b(n.outputTokens)),M(b(n.cacheCreationTokens)),M(b(n.cacheReadTokens)),M(b(n.totalTokens)),M((n.credits??0).toFixed(2)),M(T(n.totalCost))]),i}function Bo(e,t,n,r){let i=te({firstColumnName:Lo(e),forceCompact:r.compact===!0,dateFormatter:e=>d(e,r.timezone)});for(let e of t)i.push(F(e.period,{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.totalCost,modelsUsed:e.modelsUsed}));return x(i,8),i.push(ae(n)),i}async function Vo(e,t,n){let r=w.level;n.json===!0&&(w.level=0);let i,a=Z(X(n,R.stdout));try{a!=null&&(w.level=0),i=await Fo(e,t,n,a)}catch(e){a?.stop(),w.level=r,w.error(String(e)),R.exitCode=1;return}finally{w.level=r}if(a?.stop(),i.length===0){await j(n.json===!0?JSON.stringify(Po(e,t,[])):Ro(e));return}if(n.json===!0){await j(JSON.stringify(Po(e,t,i),null,2));return}w.box(`${Yn[e]} Token Usage Report - ${Io(t)}`);let o=No(e,i),s=e===`amp`?zo(t,i,o,n):Bo(t,i,o,n);await j(s.toString()),s.isCompactMode()&&(await j(),w.info(`Running in Compact Mode`),w.info(`Expand terminal width to see cache metrics and total tokens`))}function Ho(e,t,n){return W({name:t,description:n,args:Oo,toKebab:!0,async run(n){await Vo(e,t,n.values)}})}function Uo(e,t){return W({name:e,description:t,args:ko,toKebab:!0,async run(t){await Vo(`pi`,e,t.values)}})}function Q(e,t,n){return e===`pi`?Uo(t,n):Ho(e,t,n)}const Wo={json:{type:`boolean`,short:`j`,description:`Output in JSON format`,default:!1},since:{type:`string`,short:`s`,description:`Filter from date (YYYY-MM-DD or YYYYMMDD)`},until:{type:`string`,short:`u`,description:`Filter until date (inclusive)`},timezone:{type:`string`,short:`z`,description:`Timezone for date grouping (IANA)`},all:{type:`boolean`,description:`Accepted for compatibility; all detected supported agents are included by default`,default:!1},compact:{type:`boolean`,description:`Force compact table layout for narrow terminals`,default:!1},offline:{type:`boolean`,negatable:!0,short:`O`,description:`Use cached pricing data where supported`,default:!1},config:q.config};function Go(e,t,n){let r=K(t,n),i=Object.fromEntries(Jn.map(r=>[r,K({values:t.values,tokens:t.tokens,name:`${r} ${e}`},n)]));return{...r,agentOptions:i}}async function Ko(e,r,i,a){let o=(await Promise.all(a.map(async t=>lo(t,e,r.agentOptions?.[t]??r,i)))).flat();return e===`weekly`?co(o,e=>t(e.period,1)):e===`daily`||e===`monthly`?co(o,e=>e.period):o.sort((e,t)=>n(e.period,t.period)||n(e.agent,t.agent))}async function qo(e,t,n,r){try{var i=je();return t.offline===!0?Ko(e,t,{progress:r},n):await Ko(e,t,{pricingFetcher:i.u(new l({logger:r?.pricingLogger??w})),progress:r},n)}catch(e){i.e=e}finally{i.d()}}function Jo(e){return e.reduce((e,t)=>(e.inputTokens+=t.inputTokens,e.outputTokens+=t.outputTokens,e.cacheCreationTokens+=t.cacheCreationTokens,e.cacheReadTokens+=t.cacheReadTokens,e.totalTokens+=t.totalTokens,e.totalCost+=t.totalCost,e),{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,totalTokens:0,totalCost:0,metadata:void 0})}function Yo(e){return e.map(({agentBreakdowns:e,...t})=>t)}async function Xo(e,t){let r=w.level;t.json===!0&&(w.level=0);let i=`Coding (Agent) CLI Usage Report - ${e[0].toUpperCase()}${e.slice(1)}`,a=await oo(t);if(t.json!==!0){let e=a.sort(n).map(e=>Yn[e]).join(`, `);w.box(`${i}\nDetected: ${e===``?`None`:e}`)}let o,s=Z(X(t,R.stdout));try{s!=null&&(w.level=0),o=await qo(e,t,a,s)}catch(e){s?.stop(),w.level=r,w.error(String(e)),R.exitCode=1;return}finally{w.level=r}s?.stop();let c=Jo(o);if(t.json===!0){await j(JSON.stringify({[e]:Yo(o),totals:c},null,2));return}if(o.length===0){w.warn(`No usage data found.`);return}let l=te({firstColumnName:e===`monthly`?`Month`:e===`weekly`?`Week`:e===`session`?`Session`:`Date`,includeAgent:!0,dateFormatter:e=>d(e,t.timezone),forceCompact:t.compact===!0});for(let e of o)if(l.push(F(e.period,{agent:e.agentBreakdowns==null?Yn[e.agent]:`All`,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.totalCost,modelsUsed:e.agentBreakdowns==null?e.modelsUsed:[]})),e.agentBreakdowns!=null)for(let t of e.agentBreakdowns)l.push(F(``,{agent:`- ${Yn[t.agent]}`,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheCreationTokens:t.cacheCreationTokens,cacheReadTokens:t.cacheReadTokens,totalCost:t.totalCost,modelsUsed:t.modelsUsed}));x(l,9),l.push(ae({inputTokens:c.inputTokens,outputTokens:c.outputTokens,cacheCreationTokens:c.cacheCreationTokens,cacheReadTokens:c.cacheReadTokens,totalCost:c.totalCost},!1,!0)),await j(l.toString()),l.isCompactMode()&&(await j(),w.info(`Running in Compact Mode`),w.info(`Expand terminal width to see cache metrics and total tokens`))}function Zo(e,t){return W({name:e,description:t,args:Wo,toKebab:!0,async run(t){let n=G(typeof t.values.config==`string`?t.values.config:void 0);await Xo(e,Go(e,{values:t.values,tokens:t.tokens,name:e},n))}})}const Qo=Zo(`daily`,`Show all detected coding (agent) CLI usage grouped by date`),$o=Zo(`weekly`,`Show all detected coding (agent) CLI usage grouped by week`),es=Zo(`monthly`,`Show all detected coding (agent) CLI usage grouped by month`),ts=Zo(`session`,`Show all detected coding (agent) CLI usage grouped by session`);function ns(e,t=!1){let n=t?e.startTime.toLocaleString(void 0,{month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`}):e.startTime.toLocaleString();if(e.isGap??!1){let r=t?e.endTime.toLocaleString(void 0,{hour:`2-digit`,minute:`2-digit`}):e.endTime.toLocaleString(),i=Math.round((e.endTime.getTime()-e.startTime.getTime())/(1e3*60*60));return t?`${n}-${r}\n(${i}h gap)`:`${n} - ${r} (${i}h gap)`}let r=e.actualEndTime==null?0:Math.round((e.actualEndTime.getTime()-e.startTime.getTime())/(1e3*60));if(e.isActive){let r=new Date,i=Math.round((r.getTime()-e.startTime.getTime())/(1e3*60)),a=Math.round((e.endTime.getTime()-r.getTime())/(1e3*60)),o=Math.floor(i/60),s=i%60,c=Math.floor(a/60),l=a%60;return t?`${n}\n(${o}h${s}m/${c}h${l}m)`:`${n} (${o}h ${s}m elapsed, ${c}h ${l}m remaining)`}let i=Math.floor(r/60),a=r%60;return t?i>0?`${n}\n(${i}h${a}m)`:`${n}\n(${a}m)`:i>0?`${n} (${i}h ${a}m)`:`${n} (${a}m)`}function rs(e){return e.length===0?`-`:g(e)}function is(e,t){if(e==null||e===``||e===`max`)return t>0?t:void 0;let n=Number.parseInt(e,10);return Number.isNaN(n)?void 0:n}const as=W({name:`blocks`,description:`Show usage report grouped by session billing blocks`,args:{...qn.args,active:{type:`boolean`,short:`a`,description:`Show only active block with projections`,default:!1},recent:{type:`boolean`,short:`r`,description:`Show blocks from last 3 days (including active)`,default:!1},tokenLimit:{type:`string`,short:`t`,description:`Token limit for quota warnings (e.g., 500000 or "max")`},sessionLength:{type:`number`,short:`n`,description:`Session block duration in hours (default: 5)`,default:5}},toKebab:!0,async run(e){let t=K(e,G(e.values.config,e.values.debug),e.values.debug).json;t&&(w.level=0),e.values.sessionLength<=0&&(w.error(`Session length must be a positive number`),R.exit(1));let n=await Te({since:e.values.since,until:e.values.until,mode:e.values.mode,order:e.values.order,offline:e.values.offline,singleThread:e.values.singleThread,sessionDurationHours:e.values.sessionLength,timezone:e.values.timezone});n.length===0&&(t?await j(JSON.stringify({blocks:[]})):w.warn(`No Claude usage data found.`),R.exit(0));let r=0;if(e.values.tokenLimit===`max`||e.values.tokenLimit==null||e.values.tokenLimit===``){for(let e of n)if(!(e.isGap??!1)&&!e.isActive){let t=P(e.tokenCounts);t>r&&(r=t)}!t&&r>0&&w.info(`Using max tokens from previous sessions: ${b(r)}`)}if(e.values.recent&&(n=se(n,3)),e.values.active&&(n=n.filter(e=>e.isActive),n.length===0&&(t?await j(JSON.stringify({blocks:[],message:`No active block`})):w.info(`No active session block found.`),R.exit(0))),t){let t={blocks:n.map(t=>{let n=t.isActive?Ye(t):null,i=t.isActive?a(t):null;return{id:t.id,startTime:t.startTime.toISOString(),endTime:t.endTime.toISOString(),actualEndTime:t.actualEndTime?.toISOString()??null,isActive:t.isActive,isGap:t.isGap??!1,entries:t.entries.length,tokenCounts:t.tokenCounts,totalTokens:P(t.tokenCounts),costUSD:t.costUSD,models:t.models,burnRate:n,projection:i,tokenLimitStatus:i!=null&&e.values.tokenLimit!=null?(()=>{let t=is(e.values.tokenLimit,r);return t==null?void 0:{limit:t,projectedUsage:i.totalTokens,percentUsed:i.totalTokens/t*100,status:i.totalTokens>t?`exceeds`:i.totalTokens>t*.8?`warning`:`ok`}})():void 0,usageLimitResetTime:t.usageLimitResetTime}})};await j(JSON.stringify(t,null,2))}else if(e.values.active&&n.length===1){let t=n[0];t??(w.warn(`No active block found.`),R.exit(0));let i=Ye(t),o=a(t);w.box(`Current Session Block Status`);let c=new Date,l=Math.round((c.getTime()-t.startTime.getTime())/(1e3*60)),u=Math.round((t.endTime.getTime()-c.getTime())/(1e3*60));if(s(`Block Started: ${de(t.startTime.toLocaleString())} (${M(`${Math.floor(l/60)}h ${l%60}m`)} ago)`),s(`Time Remaining: ${p(`${Math.floor(u/60)}h ${u%60}m`)}\n`),s(m(`Current Usage:`)),s(` Input Tokens: ${b(t.tokenCounts.inputTokens)}`),s(` Output Tokens: ${b(t.tokenCounts.outputTokens)}`),s(` Total Cost: ${T(t.costUSD)}\n`),i!=null&&(s(m(`Burn Rate:`)),s(` Tokens/minute: ${b(i.tokensPerMinute)}`),s(` Cost/hour: ${T(i.costPerHour)}\n`)),o!=null&&(s(m(`Projected Usage (if current rate continues):`)),s(` Total Tokens: ${b(o.totalTokens)}`),s(` Total Cost: ${T(o.totalCost)}\n`),e.values.tokenLimit!=null)){let n=is(e.values.tokenLimit,r);if(n!=null&&n>0){let e=P(t.tokenCounts),r=Math.max(0,n-e),i=o.totalTokens/n*100,a=i>100?y(`EXCEEDS LIMIT`):i>.8*100?M(`WARNING`):p(`OK`);s(m(`Token Limit Status:`)),s(` Limit: ${b(n)} tokens`),s(` Current Usage: ${b(e)} (${(e/n*100).toFixed(1)}%)`),s(` Remaining: ${b(r)} tokens`),s(` Projected Usage: ${i.toFixed(1)}% ${a}`)}}}else{w.box(`Claude Code Token Usage Report - Session Blocks`);let t=is(e.values.tokenLimit,r),i=[`Block Start`,`Duration/Status`,`Models`,`Tokens`],o=[`left`,`left`,`left`,`right`];t!=null&&t>0&&(i.push(`%`),o.push(`right`)),i.push(`Cost`),o.push(`right`);let s=new Ae({head:i,style:{head:[`cyan`]},colAligns:o}),c=(R.stdout.columns||120)<120,l=e.values.compact||c;for(let e of n)if(e.isGap??!1){let n=[E(ns(e,l)),E(`(inactive)`),E(`-`),E(`-`)];t!=null&&t>0&&n.push(E(`-`)),n.push(E(`-`)),s.push(n)}else{let n=P(e.tokenCounts),r=e.isActive?p(`ACTIVE`):``,i=[ns(e,l),r,rs(e.models),b(n)];if(t!=null&&t>0){let e=n/t*100,r=`${e.toFixed(1)}%`;i.push(e>100?y(r):r)}if(i.push(T(e.costUSD)),s.push(i),e.isActive){if(t!=null&&t>0){let n=P(e.tokenCounts),r=Math.max(0,t-n),i=r>0?b(r):y(`0`),a=(t-n)/t*100,o=a>0?`${a.toFixed(1)}%`:y(`0.0%`),c=[{content:E(`(assuming ${b(t)} token limit)`),hAlign:`right`},pe(`REMAINING`),``,i,o,``];s.push(c)}let n=a(e);if(n!=null){let e=b(n.totalTokens),r=t!=null&&t>0&&n.totalTokens>t?y(e):e,i=[{content:E(`(assuming current burn rate)`),hAlign:`right`},M(`PROJECTED`),``,r];if(t!=null&&t>0){let e=`${(n.totalTokens/t*100).toFixed(1)}%`;i.push(e)}i.push(T(n.totalCost)),s.push(i)}}}await j(s.toString())}}}),os={json:{type:`boolean`,short:`j`,description:`Output report as JSON`,default:!1},since:{type:`string`,short:`s`,description:`Filter from date (YYYY-MM-DD or YYYYMMDD)`},until:{type:`string`,short:`u`,description:`Filter until date (inclusive)`},timezone:{type:`string`,short:`z`,description:`Timezone for date grouping (IANA)`},offline:{type:`boolean`,negatable:!0,short:`O`,description:`Use cached pricing data instead of fetching from LiteLLM`,default:!1},speed:{type:`string`,description:`Cost speed tier: auto reads Codex config.toml service_tier; use standard or fast to override`,default:`auto`},compact:{type:`boolean`,description:`Force compact table layout for narrow terminals`,default:!1},color:{type:`boolean`,description:`Enable colored output (default: auto). FORCE_COLOR=1 has the same effect.`},noColor:{type:`boolean`,description:`Disable colored output (default: auto). NO_COLOR=1 has the same effect.`}};function ss(e){return`date`in e?e.date:`month`in e?e.month:e.sessionId}function cs(e){return e===`session`?`sessions`:e}function ls(e){return e.reduce((e,t)=>(e.inputTokens+=t.inputTokens,e.cachedInputTokens+=t.cachedInputTokens,e.outputTokens+=t.outputTokens,e.reasoningOutputTokens+=t.reasoningOutputTokens,e.totalTokens+=t.totalTokens,e.costUSD+=t.costUSD,e),{inputTokens:0,cachedInputTokens:0,outputTokens:0,reasoningOutputTokens:0,totalTokens:0,costUSD:0})}async function us(e,t){let n=w.level;t.json===!0&&(w.level=0);let r=Z(X(t,R.stdout)),i;try{r!=null&&(w.level=0),r?.start(`codex`),i=await qi(e,t,{progress:r}),r?.succeed(`codex`,i.length)}catch(e){r?.fail(`codex`,e),r?.stop(),w.level=n,w.error(String(e)),R.exitCode=1;return}finally{w.level=n}r?.stop();let a=cs(e);if(i.length===0){await j(t.json===!0?JSON.stringify({[a]:[],totals:null}):`No Codex usage data found.`);return}let o=ls(i);if(t.json===!0){await j(JSON.stringify({[a]:i,totals:o},null,2));return}let s=e[0].toUpperCase()+e.slice(1);w.box(`Codex Token Usage Report - ${s}`);let c=new Ae({head:[e===`monthly`?`Month`:e===`session`?`Session`:`Date`,`Models`,`Input`,`Output`,`Reasoning`,`Cache Read`,`Total Tokens`,`Cost (USD)`],colAligns:[`left`,`left`,`right`,`right`,`right`,`right`,`right`,`right`],compactHead:[e===`monthly`?`Month`:e===`session`?`Session`:`Date`,`Models`,`Input`,`Output`,`Cost (USD)`],compactColAligns:[`left`,`left`,`right`,`right`,`right`],minColumnWidths:[12,14,11,11,11,11,11,14],compactMinColumnWidths:[12,14,11,11,14],flexibleColumnIndex:1,compactFlexibleColumnIndex:1,compactThreshold:100,dateFormatter:e=>d(e,t.timezone),forceCompact:t.compact===!0,style:{head:[`cyan`]}});for(let e of i){let t=ss(e),n=g(Object.keys(e.models));c.isCompactMode()?c.push([t,n,b(e.inputTokens),b(e.outputTokens),T(e.costUSD)]):c.push([t,n,b(e.inputTokens),b(e.outputTokens),b(e.reasoningOutputTokens),b(e.cachedInputTokens),b(e.totalTokens),T(e.costUSD)])}x(c,8),c.isCompactMode()?c.push([`Total`,``,b(o.inputTokens),b(o.outputTokens),T(o.costUSD)]):c.push([`Total`,``,b(o.inputTokens),b(o.outputTokens),b(o.reasoningOutputTokens),b(o.cachedInputTokens),b(o.totalTokens),T(o.costUSD)]),await j(c.toString()),c.isCompactMode()&&(await j(),w.info(`Running in Compact Mode`),w.info(`Expand terminal width to see reasoning, cache, and total token metrics`))}function ds(e,t){return W({name:e,description:t,args:os,toKebab:!0,async run(t){await us(e,t.values)}})}const fs=ds(`daily`,`Show Codex token usage grouped by day`),ps=ds(`monthly`,`Show Codex token usage grouped by month`),ms=ds(`session`,`Show Codex token usage grouped by session`);function hs(e){return e.reduce((e,t)=>({inputTokens:e.inputTokens+t.inputTokens,outputTokens:e.outputTokens+t.outputTokens,cacheCreationTokens:e.cacheCreationTokens+t.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens+t.cacheReadTokens,totalCost:e.totalCost+t.totalCost}),{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,totalCost:0})}function gs(e){return{...e,totalTokens:P(e)}}function _s(e){let t={};for(let n of e){let e=n.project??`unknown`;t[e]??(t[e]=[]),t[e].push({date:n.date,inputTokens:n.inputTokens,outputTokens:n.outputTokens,cacheCreationTokens:n.cacheCreationTokens,cacheReadTokens:n.cacheReadTokens,totalTokens:P(n),totalCost:n.totalCost,modelsUsed:n.modelsUsed,modelBreakdowns:n.modelBreakdowns})}return t}function vs(e){let t={};for(let n of e){let e=n.project??`unknown`;t[e]??(t[e]=[]),t[e].push(n)}return t}async function ys(e){try{var t=je();let n;if(e!=null&&e!==``)n=e;else{let e=be();if(e.length===0)throw Error(`No valid Claude data directory found`);n=L.join(e[0],`projects`)}let r=await Ie(n),i=t.u(new le),a={totalEntries:0,entriesWithBoth:0,matches:0,mismatches:0,discrepancies:[],modelStats:new Map,versionStats:new Map};for(let e of r){let t=(await ct(e,`utf-8`)).trim().split(`
17
+ `).filter(e=>e.length>0);for(let n of t){let t=S({try:()=>JSON.parse(n),catch:()=>Error(`Invalid JSON`)})();if(I(t))continue;let r=Oe(ve,t.value);if(!r.success)continue;let o=r.output;if(a.totalEntries++,o.costUSD!==void 0&&o.message.model!=null&&o.message.model!==`<synthetic>`){a.entriesWithBoth++;let t=o.message.model,n=await A(i.calculateCostFromTokens(o.message.usage,t)),r=Math.abs(o.costUSD-n),s=o.costUSD>0?r/o.costUSD*100:0,c=a.modelStats.get(t)??{total:0,matches:0,mismatches:0,avgPercentDiff:0};if(c.total++,o.version!=null){let e=a.versionStats.get(o.version)??{total:0,matches:0,mismatches:0,avgPercentDiff:0};e.total++,s<.1?e.matches++:e.mismatches++,e.avgPercentDiff=(e.avgPercentDiff*(e.total-1)+s)/e.total,a.versionStats.set(o.version,e)}s<.1?(a.matches++,c.matches++):(a.mismatches++,c.mismatches++,a.discrepancies.push({file:L.basename(e),timestamp:o.timestamp,model:t,originalCost:o.costUSD,calculatedCost:n,difference:r,percentDiff:s,usage:o.message.usage})),c.avgPercentDiff=(c.avgPercentDiff*(c.total-1)+s)/c.total,a.modelStats.set(t,c)}}}return a}catch(e){t.e=e}finally{t.d()}}function bs(e,t=5){if(e.entriesWithBoth===0){w.info(`No pricing data found to analyze.`);return}let n=e.matches/e.entriesWithBoth*100;if(w.info(`
18
+ === Pricing Mismatch Debug Report ===`),w.info(`Total entries processed: ${e.totalEntries.toLocaleString()}`),w.info(`Entries with both costUSD and model: ${e.entriesWithBoth.toLocaleString()}`),w.info(`Matches (within 0.1%): ${e.matches.toLocaleString()}`),w.info(`Mismatches: ${e.mismatches.toLocaleString()}`),w.info(`Match rate: ${n.toFixed(2)}%`),e.mismatches>0&&e.modelStats.size>0){w.info(`
19
+ === Model Statistics ===`);let t=Array.from(e.modelStats.entries()).sort((e,t)=>t[1].mismatches-e[1].mismatches);for(let[e,n]of t)if(n.mismatches>0){let t=n.matches/n.total*100;w.info(`${e}:`),w.info(` Total entries: ${n.total.toLocaleString()}`),w.info(` Matches: ${n.matches.toLocaleString()} (${t.toFixed(1)}%)`),w.info(` Mismatches: ${n.mismatches.toLocaleString()}`),w.info(` Avg % difference: ${n.avgPercentDiff.toFixed(1)}%`)}}if(e.mismatches>0&&e.versionStats.size>0){w.info(`
20
+ === Version Statistics ===`);let t=Array.from(e.versionStats.entries()).filter(([e,t])=>t.mismatches>0).sort((e,t)=>t[1].mismatches-e[1].mismatches);for(let[e,n]of t){let t=n.matches/n.total*100;w.info(`${e}:`),w.info(` Total entries: ${n.total.toLocaleString()}`),w.info(` Matches: ${n.matches.toLocaleString()} (${t.toFixed(1)}%)`),w.info(` Mismatches: ${n.mismatches.toLocaleString()}`),w.info(` Avg % difference: ${n.avgPercentDiff.toFixed(1)}%`)}}if(e.discrepancies.length>0&&t>0){w.info(`\n=== Sample Discrepancies (first ${t}) ===`);let n=e.discrepancies.slice(0,t);for(let e of n)w.info(`File: ${e.file}`),w.info(`Timestamp: ${e.timestamp}`),w.info(`Model: ${e.model}`),w.info(`Original cost: $${e.originalCost.toFixed(6)}`),w.info(`Calculated cost: $${e.calculatedCost.toFixed(6)}`),w.info(`Difference: $${e.difference.toFixed(6)} (${e.percentDiff.toFixed(2)}%)`),w.info(`Tokens: ${JSON.stringify(e.usage)}`),w.info(`---`)}}function xs(e){if(e===`unknown`||e===``)return`Unknown Project`;let t=e;if(t.match(/^[A-Z]:\\Users\\|^\\Users\\/)!=null){let e=t.split(`\\`),n=e.findIndex(e=>e===`Users`);n!==-1&&n+3<e.length&&(t=e.slice(n+3).join(`-`))}if(t.startsWith(`-Users-`)||t.startsWith(`/Users/`)){let e=t.startsWith(`-Users-`)?`-`:`/`,n=t.split(e).filter(e=>e.length>0),r=n.findIndex(e=>e===`Users`);r!==-1&&r+3<n.length&&(t=n.slice(r+3).join(`-`))}if(t===e&&(t=e.replace(/^[/\\-]+|[/\\-]+$/g,``)),t.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/i)!=null){let e=t.split(`-`);e.length>=5&&(t=e.slice(-2).join(`-`))}if(t.includes(`--`)){let e=t.split(`--`);e.length>=2&&e[0]!=null&&(t=e[0])}if(t.includes(`-`)&&t.length>20){let e=t.split(`-`).filter(e=>e.length>2&&e.match(/^(?:dev|development|feat|feature|fix|bug|test|staging|prod|production|main|master|branch)$/i)==null);if(e.length>=2){let n=e.slice(-2);n.join(`-`).length>=6?t=n.join(`-`):e.length>=3&&(t=e.slice(-3).join(`-`))}}return t=t.replace(/^[/\\-]+|[/\\-]+$/g,``),t===``?e===``?`Unknown Project`:e:t}function Ss(e,t){if(t!=null&&t.has(e))return t.get(e);let n=xs(e);return t!=null&&t.has(n)?t.get(n):n}const Cs=W({name:`daily`,description:`Show usage report grouped by date`,...qn,args:{...qn.args,instances:{type:`boolean`,short:`i`,description:`Show usage breakdown by project/instance`,default:!1},project:{type:`string`,short:`p`,description:`Filter to specific project name`},projectAliases:{type:`string`,description:`Comma-separated project aliases (e.g., 'ccusage=Usage Tracker,myproject=My Project')`,hidden:!0}},async run(e){let t=K(e,G(e.values.config,e.values.debug),e.values.debug),n;if(t.projectAliases!=null&&typeof t.projectAliases==`string`){n=new Map;let e=t.projectAliases.split(`,`).map(e=>e.trim()).filter(e=>e!==``);for(let t of e){let e=t.split(`=`).map(e=>e.trim()),r=e[0],i=e[1];r!=null&&i!=null&&r!==``&&i!==``&&n.set(r,i)}}let i=!!t.json,a=w.level;i&&(w.level=0);let o=Z(X(t,R.stdout)),s;try{o!=null&&(w.level=0),o?.start(`claude`),s=await Me({...t,groupByProject:t.instances}),o?.succeed(`claude`,s.length)}catch(e){throw o?.fail(`claude`,e),e}finally{o?.stop(),w.level=a}s.length===0&&(i?await j(JSON.stringify([])):w.warn(`No Claude usage data found.`),R.exit(0));let c=hs(s);if(t.debug&&!i&&bs(await ys(void 0),t.debugSamples),i){let e=t.instances&&s.some(e=>e.project!=null)?{projects:_s(s),totals:gs(c)}:{daily:s.map(e=>({date:e.date,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:P(e),totalCost:e.totalCost,modelsUsed:e.modelsUsed,modelBreakdowns:e.modelBreakdowns,...e.project!=null&&{project:e.project}})),totals:gs(c)};await j(JSON.stringify(e,null,2))}else{w.box(`Claude Code Token Usage Report - Daily`);let i=te({firstColumnName:`Date`,dateFormatter:e=>d(e,t.timezone),forceCompact:e.values.compact});if(t.instances&&s.some(e=>e.project!=null)){let e=vs(s),a=!0;for(let[o,s]of Object.entries(e)){a||i.push([``,``,``,``,``,``,``,``]),i.push([de(`Project: ${Ss(o,n)}`),``,``,``,``,``,``,``]);for(let e of s){let n=F(e.date,{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.totalCost,modelsUsed:e.modelsUsed});i.push(n),t.breakdown&&r(i,e.modelBreakdowns)}a=!1}}else for(let e of s){let n=F(e.date,{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.totalCost,modelsUsed:e.modelsUsed});i.push(n),t.breakdown&&r(i,e.modelBreakdowns)}x(i,8);let a=ae({inputTokens:c.inputTokens,outputTokens:c.outputTokens,cacheCreationTokens:c.cacheCreationTokens,cacheReadTokens:c.cacheReadTokens,totalCost:c.totalCost});i.push(a),await j(i.toString()),i.isCompactMode()&&(await j(),w.info(`Running in Compact Mode`),w.info(`Expand terminal width to see cache metrics and total tokens`))}}}),ws=W({name:`monthly`,description:`Show usage report grouped by month`,...qn,async run(e){let t=K(e,G(e.values.config,e.values.debug),e.values.debug),n=!!t.json,i=w.level;n&&(w.level=0);let a=Z(X(t,R.stdout)),o;try{a!=null&&(w.level=0),a?.start(`claude`),o=await Ge(t),a?.succeed(`claude`,o.length)}catch(e){throw a?.fail(`claude`,e),e}finally{a?.stop(),w.level=i}o.length===0&&(n?await j(JSON.stringify({monthly:[],totals:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,totalTokens:0,totalCost:0}},null,2)):w.warn(`No Claude usage data found.`),R.exit(0));let s=hs(o);if(t.debug&&!n&&bs(await ys(void 0),t.debugSamples),n){let e={monthly:o.map(e=>({month:e.month,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:P(e),totalCost:e.totalCost,modelsUsed:e.modelsUsed,modelBreakdowns:e.modelBreakdowns})),totals:gs(s)};await j(JSON.stringify(e,null,2))}else{w.box(`Claude Code Token Usage Report - Monthly`);let n=te({firstColumnName:`Month`,dateFormatter:e=>d(e,t.timezone),forceCompact:e.values.compact});for(let e of o){let i=F(e.month,{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.totalCost,modelsUsed:e.modelsUsed});n.push(i),t.breakdown&&r(n,e.modelBreakdowns)}x(n,8);let i=ae({inputTokens:s.inputTokens,outputTokens:s.outputTokens,cacheCreationTokens:s.cacheCreationTokens,cacheReadTokens:s.cacheReadTokens,totalCost:s.totalCost});n.push(i),await j(n.toString()),n.isCompactMode()&&(await j(),w.info(`Running in Compact Mode`),w.info(`Expand terminal width to see cache metrics and total tokens`))}}});async function Ts(e,t){let n=await ze(e.values.id,{mode:e.values.mode,offline:e.values.offline});if(n??(t?await j(JSON.stringify(null)):w.warn(`No session found with ID: ${e.values.id}`),R.exit(0)),t){let t={sessionId:e.values.id,totalCost:n.totalCost,totalTokens:Es(n.entries),entries:n.entries.map(e=>({timestamp:e.timestamp,inputTokens:e.message.usage.input_tokens,outputTokens:e.message.usage.output_tokens,cacheCreationTokens:e.message.usage.cache_creation_input_tokens??0,cacheReadTokens:e.message.usage.cache_read_input_tokens??0,model:e.message.model??`unknown`,costUSD:e.costUSD??0}))};await j(JSON.stringify(t,null,2))}else{w.box(`Claude Code Session Usage - ${e.values.id}`);let t=Es(n.entries);if(s(`Total Cost: ${T(n.totalCost)}`),s(`Total Tokens: ${b(t)}`),s(`Total Entries: ${n.entries.length}`),s(``),n.entries.length>0){let t=new Ae({head:[`Timestamp`,`Model`,`Input`,`Output`,`Cache Create`,`Cache Read`,`Cost (USD)`],style:{head:[`cyan`]},colAligns:[`left`,`left`,`right`,`right`,`right`,`right`,`right`]});for(let r of n.entries)t.push([d(r.timestamp,e.values.timezone),r.message.model??`unknown`,b(r.message.usage.input_tokens),b(r.message.usage.output_tokens),b(r.message.usage.cache_creation_input_tokens??0),b(r.message.usage.cache_read_input_tokens??0),T(r.costUSD??0)]);await j(t.toString())}}}function Es(e){return e.reduce((e,t)=>{let n=t.message.usage;return e+n.input_tokens+n.output_tokens+(n.cache_creation_input_tokens??0)+(n.cache_read_input_tokens??0)},0)}const{order:Ds,...Os}=qn.args,ks=W({name:`session`,description:`Show usage report grouped by conversation session`,...qn,args:{...Os,id:{type:`string`,short:`i`,description:`Load usage data for a specific session ID`}},toKebab:!0,async run(e){let t=K(e,G(e.values.config,e.values.debug),e.values.debug),n=t.json,i=w.level;if(n&&(w.level=0),t.id!=null)return Ts({values:{id:t.id,mode:t.mode,offline:t.offline,timezone:t.timezone}},n);let a=Z(X(t,R.stdout)),o;try{a!=null&&(w.level=0),a?.start(`claude`),o=await De({since:t.since,until:t.until,mode:t.mode,offline:t.offline,singleThread:t.singleThread,timezone:t.timezone}),a?.succeed(`claude`,o.length)}catch(e){throw a?.fail(`claude`,e),e}finally{a?.stop(),w.level=i}o.length===0&&(n?await j(JSON.stringify([])):w.warn(`No Claude usage data found.`),R.exit(0));let s=hs(o);if(t.debug&&!n&&bs(await ys(void 0),t.debugSamples),n){let e={sessions:o.map(e=>({sessionId:e.sessionId,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:P(e),totalCost:e.totalCost,lastActivity:e.lastActivity,modelsUsed:e.modelsUsed,modelBreakdowns:e.modelBreakdowns,projectPath:e.projectPath})),totals:gs(s)};await j(JSON.stringify(e,null,2))}else{w.box(`Claude Code Token Usage Report - By Session`);let t=te({firstColumnName:`Session`,includeLastActivity:!0,dateFormatter:t=>d(t,e.values.timezone),forceCompact:e.values.compact}),n=0;for(let i of o){let a=i.sessionId.split(`-`).slice(-2).join(`-`);n=Math.max(n,a.length);let o=F(a,{inputTokens:i.inputTokens,outputTokens:i.outputTokens,cacheCreationTokens:i.cacheCreationTokens,cacheReadTokens:i.cacheReadTokens,totalCost:i.totalCost,modelsUsed:i.modelsUsed},i.lastActivity);t.push(o),e.values.breakdown&&r(t,i.modelBreakdowns,1,1)}x(t,9);let i=ae({inputTokens:s.inputTokens,outputTokens:s.outputTokens,cacheCreationTokens:s.cacheCreationTokens,cacheReadTokens:s.cacheReadTokens,totalCost:s.totalCost},!0);t.push(i),await j(t.toString()),t.isCompactMode()&&(await j(),w.info(`Running in Compact Mode`),w.info(`Expand terminal width to see cache metrics and total tokens`))}}});function As(e){tt(ot(e),{recursive:!0});let t;if(et(e)){let n=nt(e,`utf8`);n.trim()!==``&&(t=JSON.parse(n))}return{data:t,[Symbol.dispose](){this.data!=null&&at(e,JSON.stringify(this.data,null,2))}}}const{stdin:js}=process;async function Ms(){let e=``;if(js.isTTY)return e;js.setEncoding(`utf8`);for await(let t of js)e+=t;return e}Ms.buffer=async()=>{let e=[],t=0;if(js.isTTY)return Buffer.concat([]);for await(let n of js)e.push(n),t+=n.length;return Buffer.concat(e,t)};function Ns(e){let t=Math.floor(e/60),n=e%60;return t>0?`${t}h ${n}m left`:`${n}m left`}function Ps(e){return As(st(ft(),`ccusage-semaphore`,`${e}.lock`))}const Fs=[`off`,`emoji`,`text`,`emoji-text`],Is=[`auto`,`ccusage`,`cc`,`both`],Ls=Fe(Qe([N(),Fe(k(),qe(),ke(e=>/^-?\d+$/u.test(e),`Context threshold must be an integer`),ye(e=>Number.parseInt(e,10)))]),N(`Context threshold must be a number`),Re(`Context threshold must be an integer`),Ne(0,`Context threshold must be at least 0`),He(100,`Context threshold must be at most 100`));function Rs(e){return Be(Ls,e)}function zs(e,t,n,r){let i=Math.round(e/t*100),a=Bs(i,n,r)(`${i}%`);return`${e.toLocaleString()} (${a})`}function Bs(e,t,n){return e<t?p:e<n?M:y}const Vs=W({name:`statusline`,description:`Display compact status line for Claude Code hooks with hybrid time+file caching (Beta)`,toKebab:!0,args:{offline:{...q.offline,default:!0},visualBurnRate:{type:`enum`,choices:Fs,description:`Controls the visualization of the burn rate status`,default:`off`,short:`B`,negatable:!1,toKebab:!0},costSource:{type:`enum`,choices:Is,description:`Session cost source: auto (prefer CC then ccusage), ccusage (always calculate), cc (always use Claude Code cost), both (show both costs)`,default:`auto`,negatable:!1,toKebab:!0},cache:{type:`boolean`,description:`Enable cache for status line output (default: true)`,negatable:!0,default:!0},refreshInterval:{type:`number`,description:`Refresh interval in seconds for cache expiry (default: 1)`,default:1},contextLowThreshold:{type:`number`,description:`Context usage percentage below which status is shown in green (0-100)`,default:e.LOW},contextMediumThreshold:{type:`number`,description:`Context usage percentage below which status is shown in yellow (0-100)`,default:e.MEDIUM},config:q.config,debug:q.debug},async run(e){w.level=0;let t=Rs(e.values.contextLowThreshold),n=Rs(e.values.contextMediumThreshold);if(t>=n)throw Error(`Context low threshold (${t}) must be less than medium threshold (${n})`);let r=K(e,G(e.values.config,e.values.debug),e.values.debug),i=r.refreshInterval,a=await Ms();a.length===0&&(s(`❌ No input provided`),R.exit(1));let o=Oe(ie,JSON.parse(a.trim()));o.success||(s(`❌ Invalid input format:`,xe(o.issues)),R.exit(1));let c=o.output,l=c.session_id,u=C(ee(Ps(l)),re(e=>e.data),A(void 0)),d=await Ze(c.transcript_path);if(r.cache&&u!=null){let e=Date.now()-(u.lastUpdateTime??0)>=i*1e3,t=u.transcriptMtime!==d;if(!e&&!t){s(u.lastOutput);return}if(u.isUpdating===!0){let e=u.pid,t=!1;if(e!=null)try{R.kill(e,0),t=!0}catch{t=!1}if(t){s(u.lastOutput);return}}}try{var m=je();let e=R.pid,t=m.u(Ps(l));if(t.data!=null)t.data={...t.data,isUpdating:!0,pid:e};else{let n=await Ze(c.transcript_path);t.data={date:new Date().toISOString(),lastOutput:``,lastUpdateTime:0,transcriptPath:c.transcript_path,transcriptMtime:n,isUpdating:!0,pid:e}}}catch(e){m.e=e}finally{m.d()}let h=C(await S({try:async()=>{let{sessionCost:i,ccCost:a,ccusageCost:o}=await(async()=>{let t=e.values.costSource,n=async()=>C(S({try:async()=>ze(l,{mode:`auto`,offline:r.offline}),catch:e=>e})(),re(e=>e?.totalCost),f(e=>w.error(`Failed to load session data:`,e)),A(void 0));return t===`both`?{ccCost:c.cost?.total_cost_usd,ccusageCost:await n()}:t===`cc`?{sessionCost:c.cost?.total_cost_usd}:t===`ccusage`?{sessionCost:await n()}:t===`auto`?c.cost?.total_cost_usd==null?{sessionCost:await n()}:{sessionCost:c.cost.total_cost_usd}:(Se(t),{})})(),s=new Date().toISOString().split(`T`)[0]?.replace(/-/g,``)??``,u=new Date;u.setHours(0,0,0,0);let d=await C(S({try:async()=>Me({since:s,until:s,mode:`auto`,offline:r.offline,minUpdateTime:u}),catch:e=>e})(),re(e=>e.length>0?hs(e).totalCost:0),f(e=>w.error(`Failed to load daily data:`,e)),A(0)),m=new Date(Date.now()-1440*60*1e3),{blockInfo:h,burnRateInfo:g}=await C(S({try:async()=>Te({mode:`auto`,offline:r.offline,minUpdateTime:m}),catch:e=>e})(),re(t=>{if(t.length===0)return{blockInfo:`No active block`,burnRateInfo:``};let n=t.find(e=>!!e.isActive);if(n!=null){let t=new Date,r=Math.round((n.endTime.getTime()-t.getTime())/(1e3*60)),i=n.costUSD,a=`${T(i)} block (${Ns(r)})`,o=Ye(n);return{blockInfo:a,burnRateInfo:o==null?``:(()=>{let t=e.values.visualBurnRate===`emoji`||e.values.visualBurnRate===`emoji-text`,n=e.values.visualBurnRate===`text`||e.values.visualBurnRate===`emoji-text`,r=o.costPerHour,i=`${T(r)}/hr`,a=o.tokensPerMinuteForIndicator<2e3?`normal`:o.tokensPerMinuteForIndicator<5e3?`moderate`:`high`,{emoji:s,textValue:c,coloredString:l}={normal:{emoji:`🟢`,textValue:`Normal`,coloredString:p},moderate:{emoji:`⚠️`,textValue:`Moderate`,coloredString:M},high:{emoji:`🚨`,textValue:`High`,coloredString:y}}[a],u=[l(i)];return t&&u.push(s),n&&u.push(l(`(${c})`)),` | 🔥 ${u.join(` `)}`})()}}return{blockInfo:`No active block`,burnRateInfo:``}}),f(e=>w.error(`Failed to load block data:`,e)),A({blockInfo:`No active block`,burnRateInfo:``})),_=C(c.context_window==null?await S({try:async()=>Ue(c.transcript_path,c.model.id,r.offline),catch:e=>e})():ee({inputTokens:c.context_window.total_input_tokens,contextLimit:c.context_window.context_window_size}),f(e=>w.debug(`Failed to calculate context tokens: ${e instanceof Error?e.message:String(e)}`)),re(e=>{if(e!=null)return zs(e.inputTokens,e.contextLimit,t,n)}),A(void 0));return`🤖 ${c.model.display_name} | 💰 ${a!=null||o!=null?`(${a==null?`N/A`:T(a)} cc / ${o==null?`N/A`:T(o)} ccusage)`:i==null?`N/A`:T(i)} session / ${T(d)} today / ${h}${g} | 🧠 ${_??`N/A`}`},catch:e=>e})());if(oe(h))try{var g=je();let e=h.value;if(s(e),!r.cache)return;let t=g.u(Ps(l));t.data={date:new Date().toISOString(),lastOutput:e,lastUpdateTime:Date.now(),transcriptPath:c.transcript_path,transcriptMtime:d,isUpdating:!1,pid:void 0};return}catch(e){g.e=e}finally{g.d()}if(I(h))try{var _=je();if(u?.lastOutput!=null&&u.lastOutput!==``?s(u.lastOutput):s(`❌ Error generating status`),w.error(`Error in statusline command:`,h.error),!r.cache)return;let e=_.u(Ps(l));e.data!=null&&(e.data.isUpdating=!1,e.data.pid=void 0)}catch(e){_.e=e}finally{_.d()}}}),Hs=W({name:`weekly`,description:`Show usage report grouped by week`,args:{...q,startOfWeek:{type:`enum`,short:`w`,description:`Day to start the week on`,default:`sunday`,choices:We}},toKebab:!0,async run(e){let t=K(e,G(e.values.config,e.values.debug),e.values.debug),n=!!t.json,i=w.level;n&&(w.level=0);let a=Z(X(t,R.stdout)),o;try{a!=null&&(w.level=0),a?.start(`claude`),o=await Pe(t),a?.succeed(`claude`,o.length)}catch(e){throw a?.fail(`claude`,e),e}finally{a?.stop(),w.level=i}o.length===0&&(n?await j(JSON.stringify({weekly:[],totals:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,totalTokens:0,totalCost:0}},null,2)):w.warn(`No Claude usage data found.`),R.exit(0));let s=hs(o);if(t.debug&&!n&&bs(await ys(void 0),t.debugSamples),n){let e={weekly:o.map(e=>({week:e.week,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalTokens:P(e),totalCost:e.totalCost,modelsUsed:e.modelsUsed,modelBreakdowns:e.modelBreakdowns})),totals:gs(s)};await j(JSON.stringify(e,null,2))}else{w.box(`Claude Code Token Usage Report - Weekly`);let n=te({firstColumnName:`Week`,dateFormatter:e=>d(e,t.timezone),forceCompact:e.values.compact});for(let e of o){let i=F(e.week,{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheCreationTokens:e.cacheCreationTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.totalCost,modelsUsed:e.modelsUsed});n.push(i),t.breakdown&&r(n,e.modelBreakdowns)}x(n,8);let i=ae({inputTokens:s.inputTokens,outputTokens:s.outputTokens,cacheCreationTokens:s.cacheCreationTokens,cacheReadTokens:s.cacheReadTokens,totalCost:s.totalCost});n.push(i),await j(n.toString()),n.isCompactMode()&&(await j(),w.info(`Running in Compact Mode`),w.info(`Expand terminal width to see cache metrics and total tokens`))}}});function Us(e,t){return{...e,name:t}}function $(e,t){let n={...e.args??{},config:q.config};return{name:t,description:e.description,args:n,toKebab:e.toKebab,async run(n){let r=n.values,i=typeof r.config==`string`?r.config:void 0,a=typeof r.debug==`boolean`?r.debug:!1,o=G(i,a),s=K({values:r,tokens:n.tokens,name:t},o,a);await e.run?.({...n,values:s})}}}const Ws=Q(`opencode`,`daily`,`Show OpenCode token usage grouped by day`),Gs=Q(`opencode`,`weekly`,`Show OpenCode token usage grouped by week`),Ks=Q(`opencode`,`monthly`,`Show OpenCode token usage grouped by month`),qs=Q(`opencode`,`session`,`Show OpenCode token usage grouped by session`),Js=Q(`amp`,`daily`,`Show Amp token usage grouped by day`),Ys=Q(`amp`,`monthly`,`Show Amp token usage grouped by month`),Xs=Q(`amp`,`session`,`Show Amp token usage grouped by session`),Zs=Q(`pi`,`daily`,`Show pi-agent usage grouped by date`),Qs=Q(`pi`,`monthly`,`Show pi-agent usage grouped by month`),$s=Q(`pi`,`session`,`Show pi-agent usage grouped by session`),ec=[[`daily`,Qo],[`monthly`,es],[`weekly`,$o],[`session`,ts],[`blocks`,as],[`statusline`,Vs],[`claude:daily`,Us(Cs,`claude daily`)],[`claude:monthly`,Us(ws,`claude monthly`)],[`claude:weekly`,Us(Hs,`claude weekly`)],[`claude:session`,Us(ks,`claude session`)],[`claude:blocks`,Us(as,`claude blocks`)],[`claude:statusline`,Us(Vs,`claude statusline`)],[`codex:daily`,$(fs,`codex daily`)],[`codex:monthly`,$(ps,`codex monthly`)],[`codex:session`,$(ms,`codex session`)],[`opencode:daily`,$(Ws,`opencode daily`)],[`opencode:weekly`,$(Gs,`opencode weekly`)],[`opencode:monthly`,$(Ks,`opencode monthly`)],[`opencode:session`,$(qs,`opencode session`)],[`amp:daily`,$(Js,`amp daily`)],[`amp:monthly`,$(Ys,`amp monthly`)],[`amp:session`,$(Xs,`amp session`)],[`pi:daily`,$(Zs,`pi daily`)],[`pi:monthly`,$(Qs,`pi monthly`)],[`pi:session`,$($s,`pi session`)]],tc=new Map;for(let[e,t]of ec)tc.set(e,t);const nc=Qo,rc=new Set([`claude`,`codex`,`opencode`,`amp`,`pi`]),ic=new Set([`daily`,`weekly`,`monthly`,`session`,`blocks`,`statusline`]),ac=new Map([[`claude`,new Set([`daily`,`weekly`,`monthly`,`session`,`blocks`,`statusline`])],[`codex`,new Set([`daily`,`monthly`,`session`])],[`opencode`,new Set([`daily`,`weekly`,`monthly`,`session`])],[`amp`,new Set([`daily`,`monthly`,`session`])],[`pi`,new Set([`daily`,`monthly`,`session`])]]),oc=new Map([[`claude`,`Claude Code`],[`codex`,`Codex`],[`opencode`,`OpenCode`],[`amp`,`Amp`],[`pi`,`pi-agent`]]),sc=new Set([`--daily`,`--weekly`,`--monthly`,`--session`,`--blocks`,`--statusline`]),cc=new Set([`--agent`,`-a`]);function lc(e){let[t,n,...r]=e;return t==null||!rc.has(t)?e:n!=null&&ic.has(n)?[`${t}:${n}`,...r]:[`${t}:daily`,...e.slice(1)]}function uc(e){let t=e.find(e=>sc.has(e));if(t!=null)return`Report flags like ${t} are not supported. Use "ccusage ${t.slice(2)}" instead.`}function dc(e){let t=e.find(e=>cc.has(e)?!0:e.startsWith(`--agent=`)||e.startsWith(`-a=`));if(t!=null)return`Agent filters like ${t} are not supported. Use "ccusage <agent> <report>", for example "ccusage codex daily".`}function fc(e){let[t,n]=e;if(t==null||n==null||!rc.has(t)||!ic.has(n)||ac.get(t)?.has(n)===!0)return;let r=oc.get(t)??t;return n===`blocks`||n===`statusline`?`The "${n}" report is only available for Claude Code usage.\nUse "ccusage ${t} daily" for ${r} usage reports.`:`The "${n}" report is not available for ${r} usage.\nUse "ccusage ${t} daily" for ${r} usage reports.`}async function pc(){let e=R.argv.slice(2);e[0]===`ccusage`&&(e=e.slice(1));let t=uc(e);if(t!=null){R.stderr.write(`${t}\n`),R.exitCode=1;return}let n=dc(e);if(n!=null){R.stderr.write(`${n}\n`),R.exitCode=1;return}let r=fc(e);if(r!=null){R.stderr.write(`${r}\n`),R.exitCode=1;return}e=lc(e),await wn(e,nc,{name:h,version:fe,description:me,subCommands:tc,renderHeader:null})}async function mc(){await pc()}export{mc as t};
21
+ //# sourceMappingURL=main-CoxUe6C7.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ import{t as e}from"./main-CoxUe6C7.js";await e();export{};
3
+ //# sourceMappingURL=main.bun.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./main-CoxUe6C7.js";await e();export{};
3
+ //# sourceMappingURL=main.node.js.map
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "ccusage",
3
3
  "type": "module",
4
- "version": "18.0.10",
5
- "description": "Usage analysis tool for Claude Code",
4
+ "version": "19.0.0",
5
+ "description": "Analyze coding (agent) CLI token usage and costs from local data",
6
6
  "author": "ryoppippi",
7
7
  "license": "MIT",
8
8
  "funding": "https://github.com/ryoppippi/ccusage?sponsor=1",
@@ -17,23 +17,18 @@
17
17
  },
18
18
  "exports": {
19
19
  ".": "./dist/index.js",
20
- "./calculate-cost": "./dist/calculate-cost.js",
21
- "./data-loader": "./dist/data-loader.js",
22
- "./debug": "./dist/debug.js",
23
- "./logger": "./dist/logger.js",
24
20
  "./package.json": "./package.json"
25
21
  },
26
22
  "main": "./dist/index.js",
27
23
  "module": "./dist/index.js",
28
- "types": "./dist/index.d.ts",
29
24
  "bin": {
30
- "ccusage": "./dist/index.js"
25
+ "ccusage": "./dist/cli.js"
31
26
  },
32
27
  "files": [
33
28
  "config-schema.json",
34
- "dist"
29
+ "dist/**/*.js"
35
30
  ],
36
31
  "engines": {
37
- "node": ">=20.19.4"
32
+ "node": ">=22.0.0"
38
33
  }
39
34
  }