ccusage 19.0.0 → 19.0.2
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.
- package/README.md +1 -28
- package/dist/{data-loader-DT2qlJ97.js → data-loader-CIF4fWUu.js} +2 -2
- package/dist/data-loader.js +1 -1
- package/dist/index.js +1 -1
- package/dist/{main-CoxUe6C7.js → main-CJa_EO_y.js} +2 -7
- package/dist/main.bun.js +1 -1
- package/dist/main.node.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,28 +23,10 @@
|
|
|
23
23
|
|
|
24
24
|
> Analyze coding (agent) CLI token usage and costs from local data.
|
|
25
25
|
|
|
26
|
-
##
|
|
27
|
-
|
|
28
|
-
### 📊 [ccusage](https://www.npmjs.com/package/ccusage) - Coding (Agent) CLI Usage Analyzer
|
|
26
|
+
## Supported Sources
|
|
29
27
|
|
|
30
28
|
The main CLI tool for analyzing Claude Code, Codex, OpenCode, Amp, and pi-agent usage from local data. Track daily, weekly, monthly, and session-based usage with beautiful tables.
|
|
31
29
|
|
|
32
|
-
### 🤖 [@ccusage/codex](https://www.npmjs.com/package/@ccusage/codex) - Codex Compatibility Wrapper
|
|
33
|
-
|
|
34
|
-
Compatibility wrapper for OpenAI Codex usage. Prefer `ccusage codex` or `ccusage codex daily`.
|
|
35
|
-
|
|
36
|
-
### 🚀 [@ccusage/opencode](https://www.npmjs.com/package/@ccusage/opencode) - OpenCode Compatibility Wrapper
|
|
37
|
-
|
|
38
|
-
Compatibility wrapper for [OpenCode](https://github.com/opencode-ai/opencode) usage. Prefer `ccusage opencode`.
|
|
39
|
-
|
|
40
|
-
### 🥧 [@ccusage/pi](https://www.npmjs.com/package/@ccusage/pi) - pi-agent Compatibility Wrapper
|
|
41
|
-
|
|
42
|
-
Compatibility wrapper for [pi-agent](https://github.com/badlogic/pi-mono) usage. Prefer `ccusage pi`.
|
|
43
|
-
|
|
44
|
-
### ⚡ [@ccusage/amp](https://www.npmjs.com/package/@ccusage/amp) - Amp Compatibility Wrapper
|
|
45
|
-
|
|
46
|
-
Compatibility wrapper for [Amp](https://ampcode.com/) usage. Prefer `ccusage amp`.
|
|
47
|
-
|
|
48
30
|
## Installation
|
|
49
31
|
|
|
50
32
|
### Quick Start (Recommended)
|
|
@@ -64,15 +46,6 @@ npx ccusage@latest
|
|
|
64
46
|
> 💡 **Runtime**: `bunx ccusage` is recommended for everyday use. If you use `npx`, include `@latest` and use Node.js 22+.
|
|
65
47
|
> Because the published CLI shebang targets Node.js, package runners can start ccusage under Node.js even when launched through `bunx`. When ccusage finds `bun` in `PATH`, it automatically re-runs the bundled entrypoint with Bun for better warm runtime performance. Set `CCUSAGE_BUN_AUTO_RUN=0` to force Node.js.
|
|
66
48
|
|
|
67
|
-
### Compatibility Packages
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
npx @ccusage/codex@latest # Deprecated wrapper for: ccusage codex
|
|
71
|
-
npx @ccusage/opencode@latest # Deprecated wrapper for: ccusage opencode
|
|
72
|
-
npx @ccusage/pi@latest # Deprecated wrapper for: ccusage pi
|
|
73
|
-
npx @ccusage/amp@latest # Deprecated wrapper for: ccusage amp
|
|
74
|
-
```
|
|
75
|
-
|
|
76
49
|
## Usage
|
|
77
50
|
|
|
78
51
|
```bash
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createReadStream as e,statSync as t}from"node:fs";import n from"node:path";import r from"node:process";import{readFile as i,readdir as a,stat as o}from"node:fs/promises";import s,{homedir as c}from"node:os";import{Buffer as l}from"node:buffer";import{Worker as u,isMainThread as d,parentPort as f,workerData as p}from"node:worker_threads";import{createInterface as m}from"node:readline";import{inspect as h,styleText as g}from"node:util";var _=`ccusage`,ee=`19.0.
|
|
1
|
+
import{createReadStream as e,statSync as t}from"node:fs";import n from"node:path";import r from"node:process";import{readFile as i,readdir as a,stat as o}from"node:fs/promises";import s,{homedir as c}from"node:os";import{Buffer as l}from"node:buffer";import{Worker as u,isMainThread as d,parentPort as f,workerData as p}from"node:worker_threads";import{createInterface as m}from"node:readline";import{inspect as h,styleText as g}from"node:util";var _=`ccusage`,ee=`19.0.2`,te=`Analyze coding (agent) CLI token usage and costs from local data`;function ne(e){return e??=[],Array.isArray(e)?e:[e]}const v=e=>e.type===`Failure`,y=e=>typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`&&`catch`in e&&typeof e.catch==`function`,re=e=>t=>{let n=t=>v(t)?t:e(t.value);return y(t)?t.then(n):n(t)},ie=e=>t=>{let n=t=>{if(v(t))return t;let n=e(t.value);return y(n)?n.then(e=>v(e)?e:t):v(n)?n:t};return y(t)?t.then(n):n(t)},ae=e=>e.type===`Success`,b=(...e)=>{if(e.length<=0)return{type:`Success`};let t=e[0];return y(t)?t.then(e=>({type:`Success`,value:e})):{type:`Success`,value:t}},x=(...e)=>{if(e.length<=0)return{type:`Failure`};let t=e[0];return y(t)?t.then(e=>({type:`Failure`,error:e})):{type:`Failure`,error:t}},oe=e=>t=>{let n=t=>(ae(t)&&e(t.value),t);return y(t)?t.then(n):n(t)},se=e=>t=>{let n=t=>(v(t)&&e(t.error),t);return y(t)?t.then(n):n(t)},ce=e=>typeof e==`object`&&!!e&&`type`in e&&(e.type===`Success`&&`value`in e||e.type===`Failure`&&`error`in e),S=e=>t=>{let n=t=>v(t)?t:b(e(t.value));return y(t)?t.then(n):n(t)},le=e=>t=>{let n=t=>ae(t)?t:e(t.error);return y(t)?t.then(n):n(t)},C=(e,...t)=>{let n=e;for(let e of t)n=e(n);return n},w=e=>y(e.try)?`safe`in e&&e.safe?b(e.try):e.try.then(e=>b(e),t=>x(e.catch(t))):(...t)=>{try{let n=e.try(...t);if(y(n)){let t=b(n);return`safe`in e&&e.safe?t:t.catch(t=>x(e.catch(t)))}return b(n)}catch(t){if(`safe`in e&&e.safe)throw t;return x(e.catch(t))}},ue=(...e)=>{let t=e[0];if(ce(t)||y(t)){let n=t,r=e.length===2,i=r?e[1]:void 0,a=e=>{if(v(e)){if(r)return i;throw e.error}return e.value};return y(n)?n.then(a):a(n)}let n=e.length===1,r=n?e[0]:void 0;return e=>{let t=e=>{if(v(e)){if(n)return r;throw e.error}return e.value};return y(e)?e.then(t):t(e)}};function de(e){let t=[];return t.length=e,t}function fe(e,t){return e<t?-1:+(e>t)}function pe(e,t,n=`desc`){let r=e.map((e,n)=>{let r=t(e);return{index:n,item:e,time:typeof r==`string`?Date.parse(r):r.getTime()}}),i=n===`asc`?1:-1;return r.sort((e,t)=>(e.time-t.time)*i||e.index-t.index).map(({item:e})=>e)}function T(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}function me(){let e=globalThis.Bun;return typeof e?.file==`function`?e:null}async function he(e){let t=me();return t==null?i(e,`utf8`):t.file(e).text()}async function ge(e,t){let n=me();if(n!=null){let r=n.file(e);return r.size<=t.maxBufferedBytes?r.text():null}return(await o(e)).size<=t.maxBufferedBytes?i(e,`utf8`):null}async function _e(e,t){let n=me();if(n!=null){let r=n.file(e);if(typeof r.bytes==`function`)return r.size<=t.maxBufferedBytes?r.bytes():null}return(await o(e)).size<=t.maxBufferedBytes?i(e):null}async function ve(e,t={}){let r=[],i=async e=>{let o;try{o=await a(e,{withFileTypes:!0})}catch(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;if(t===`ENOENT`||t===`ENOTDIR`||t===`EACCES`||t===`EPERM`)return;throw e}let s=[];for(let a of o){let o=n.join(e,a.name);if(a.isDirectory()){s.push(i(o));continue}a.isFile()&&(t.extension!=null&&!a.name.endsWith(t.extension)||r.push(o))}await Promise.all(s)};return await i(e),r.sort(fe)}async function ye(e,t={}){let r=async e=>{let i;try{i=await a(e,{withFileTypes:!0})}catch(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;if(t===`ENOENT`||t===`ENOTDIR`||t===`EACCES`||t===`EPERM`)return!1;throw e}for(let a of i){let i=n.join(e,a.name);if(a.isDirectory()&&await r(i)||a.isFile()&&(t.extension==null||a.name.endsWith(t.extension)))return!0}return!1};return r(e)}function be(e){try{return t(e).isDirectory()}catch{return!1}}const xe=128*1024*1024;function Se(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n!==32&&n!==9&&n!==10&&n!==13)return!0}return!1}async function Ce(e,t){let n=0,r=0;for(;n<e.length;){let i=e.indexOf(`
|
|
2
2
|
`,n);i===-1&&(i=e.length),r++;let a=e.slice(n,i);if(a.endsWith(`\r`)&&(a=a.slice(0,-1)),Se(a)){let e=t(a,r);e!=null&&await e}n=i+1}}function we(e){return Se(e)?e:null}function Te(e,t,n){return n.markerIndex===`byte`?l.byteLength(e.slice(0,t),n.bufferedEncoding??`utf8`):t}async function Ee(e,t,n,r={}){let i=l.isBuffer(e)?e:l.from(e.buffer,e.byteOffset,e.byteLength);if(r.scanMode===`line`){await Oe(i.toString(r.bufferedEncoding??`utf8`),t,n,r);return}let a=t.map(e=>l.from(e));if(a.length===1){await De(i,a[0],t[0],n,r);return}let o=new Map;for(let e=0;e<a.length;e++){let n=a[e],r=t[e],s=i.indexOf(n,0);for(;s!==-1;){let e=(s===0?-1:i.lastIndexOf(10,s-1))+1,t=i.indexOf(10,s);t===-1&&(t=i.length);let a=s-e,c=o.get(e);(c==null||a<c.markerIndex)&&o.set(e,{lineEnd:t,markerIndex:a,marker:r}),s=i.indexOf(n,s+n.length)}}let s=Array.from(o.keys()).sort((e,t)=>e-t);if(r.callbackMode===`sync`){for(let e of s){let t=o.get(e),a=t.lineEnd,s=a>e&&i[a-1]===13?a-1:a,c=i.toString(r.bufferedEncoding??`utf8`,e,s);n(c,r.markerIndex===`byte`?t.markerIndex:c.indexOf(t.marker),t.marker)}return}for(let e of s){let t=o.get(e),a=t.lineEnd,s=a>e&&i[a-1]===13?a-1:a,c=i.toString(r.bufferedEncoding??`utf8`,e,s),l=n(c,r.markerIndex===`byte`?t.markerIndex:c.indexOf(t.marker),t.marker);l!=null&&await l}}async function De(e,t,n,r,i){let a=0,o=e.indexOf(t,a);if(i.callbackMode===`sync`){for(;o!==-1;){for(;;){let t=e.indexOf(10,a);if(t===-1||t>=o)break;a=t+1}let s=e.indexOf(10,o);s===-1&&(s=e.length);let c=s>a&&e[s-1]===13?s-1:s,l=e.toString(i.bufferedEncoding??`utf8`,a,c),u=o-a;r(l,i.markerIndex===`byte`?u:l.indexOf(n),n),a=s+1,o=e.indexOf(t,a)}return}for(;o!==-1;){for(;;){let t=e.indexOf(10,a);if(t===-1||t>=o)break;a=t+1}let s=e.indexOf(10,o);s===-1&&(s=e.length);let c=s>a&&e[s-1]===13?s-1:s,l=e.toString(i.bufferedEncoding??`utf8`,a,c),u=o-a,d=r(l,i.markerIndex===`byte`?u:l.indexOf(n),n);d!=null&&await d,a=s+1,o=e.indexOf(t,a)}}async function Oe(e,t,n,r={}){let i=0;for(;i<e.length;){let a=e.indexOf(`
|
|
3
3
|
`,i);a===-1&&(a=e.length);let o=e.slice(i,a);if(o.endsWith(`\r`)&&(o=o.slice(0,-1)),Se(o)){let e=-1,s;for(let n of t){let t=o.indexOf(n);t!==-1&&(e===-1||t<e)&&(e=t,s=n)}if(s!=null){let t=Te(o,e,r);if(r.callbackMode===`sync`){n(o,t,s),i=a+1;continue}let c=n(o,t,s);c!=null&&await c}}i=a+1}}async function ke(e){return ge(e,{maxBufferedBytes:xe})}async function Ae(e){return _e(e,{maxBufferedBytes:xe})}async function je(t,n){let r=await ke(t);if(r!=null){await Ce(r,n);return}let i=m({input:e(t,{encoding:`utf-8`}),crlfDelay:1/0}),a=0;for await(let e of i){if(a++,!Se(e))continue;let t=n(e,a);t!=null&&await t}}async function Me(t,n,r,i={}){let a=n.map(we).filter(e=>e!=null);if(a.length===0)return;let o=await Ae(t);if(o!=null){await Ee(o,a,r,i);return}let s=await ke(t);if(s!=null){await Oe(s,a,r,i);return}let c=m({input:e(t,{encoding:`utf-8`}),crlfDelay:1/0});for await(let e of c){let t=-1,n;for(let r of a){let i=e.indexOf(r);i!==-1&&(t===-1||i<t)&&(t=i,n=r)}if(n==null)continue;let o=Te(e,t,i);if(i.callbackMode===`sync`){r(e,o,n);continue}let s=r(e,o,n);s!=null&&await s}}function Ne(e,t={}){let n=Math.max(1,s.availableParallelism()-(t.reserveParallelism??1)),r=Math.min(t.preferMoreWorkers===!0?Math.ceil(n*.75):Math.ceil(n/2),t.maxWorkers??12);return Math.min(e,Math.max(1,r))}function Pe(e){if(e.itemCount<(e.minItems??64)||!e.isMainThread||e.isTest===!0||!e.moduleUrl.includes(`/dist/`))return 0;let t=Number.parseInt(e.envValue??``,10);return Number.isFinite(t)?t<=0?0:Math.min(e.itemCount,t):Ne(e.itemCount,{maxWorkers:e.maxWorkers,preferMoreWorkers:e.preferMoreWorkers,reserveParallelism:e.reserveParallelism})}async function Fe(e,t,n){if(!Number.isInteger(t)||t<=0||e.length===0)return[];let r=await Promise.all(e.map(async e=>{try{return{item:e,weight:(await o(n(e.item))).size}}catch{return{item:e,weight:0}}}));r.sort((e,t)=>t.weight-e.weight||e.item.index-t.item.index);let i=Array.from({length:t},()=>[]),a=Array.from({length:t}).fill(0);for(let{item:e,weight:t}of r){let n=0;for(let e=1;e<a.length;e++)a[e]<a[n]&&(n=e);i[n].push(e),a[n]+=t}return i.filter(e=>e.length>0)}async function Ie(e,t,n){if(e.length===0)return[];let r=Math.floor(t),i=Number.isFinite(r)?Math.max(1,Math.min(e.length,r)):1,a=e.map((e,t)=>({item:e,index:t})),o=de(e.length),s=0;return await Promise.all(Array.from({length:i},async()=>{for(;;){let e=a[s++];if(e==null)return;o[e.index]=await n(e.item,e.index)}})),o}async function Le(e){if(e.workerCount===0)return null;let t=await Fe(e.items.map((e,t)=>({index:t,item:e})),e.workerCount,e.getFilePath??String),n=e.createWorker??((e,t)=>new u(e,{workerData:t})),r=await Promise.all(t.map(async t=>new Promise((r,i)=>{let a=n(new URL(e.moduleUrl),e.createWorkerData(t)),o=!1;a.once(`message`,e=>{o=!0,r(e.results)}),a.once(`error`,i),a.once(`exit`,t=>{t===0?o||i(Error(`Worker exited before sending results`)):i(Error(e.errorMessage.replace(`{code}`,String(t))))})}))),i=de(e.items.length);for(let e of r)for(let{index:t,result:n}of e)i[t]=n;return i}var Re;function ze(e){return{lang:e?.lang??Re?.lang,message:e?.message,abortEarly:e?.abortEarly??Re?.abortEarly,abortPipeEarly:e?.abortPipeEarly??Re?.abortPipeEarly}}var Be;function Ve(e){return Be?.get(e)}var He;function Ue(e){return He?.get(e)}var We;function Ge(e,t){return We?.get(e)?.get(t)}function E(e){let t=typeof e;return t===`string`?`"${e}"`:t===`number`||t===`bigint`||t===`boolean`?`${e}`:t===`object`||t===`function`?(e&&Object.getPrototypeOf(e)?.constructor?.name)??`null`:t}function D(e,t,n,r,i){let a=i&&`input`in i?i.input:n.value,o=i?.expected??e.expects??null,s=i?.received??E(a),c={kind:e.kind,type:e.type,input:a,expected:o,received:s,message:`Invalid ${t}: ${o?`Expected ${o} but r`:`R`}eceived ${s}`,requirement:e.requirement,path:i?.path,issues:i?.issues,lang:r.lang,abortEarly:r.abortEarly,abortPipeEarly:r.abortPipeEarly},l=e.kind===`schema`,u=i?.message??e.message??Ge(e.reference,c.lang)??(l?Ue(c.lang):null)??r.message??Ve(c.lang);u!==void 0&&(c.message=typeof u==`function`?u(c):u),l&&(n.typed=!1),n.issues?n.issues.push(c):n.issues=[c]}function O(e){return{version:1,vendor:`valibot`,validate(t){return e[`~run`]({value:t},ze())}}}function Ke(e,t){let n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??`never`}function qe(e){if(e.path){let t=``;for(let n of e.path)if(typeof n.key==`string`||typeof n.key==`number`)t?t+=`.${n.key}`:t+=n.key;else return null;return t}return null}var Je=class extends Error{constructor(e){super(e[0].message),this.name=`ValiError`,this.issues=e}};function k(e){return{kind:`transformation`,type:`brand`,reference:k,async:!1,name:e,"~run"(e){return e}}}function Ye(e,t){return{kind:`validation`,type:`check`,reference:Ye,async:!1,expects:null,requirement:e,message:t,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&D(this,`input`,e,t),e}}}function Xe(e){return{kind:`validation`,type:`integer`,reference:Xe,async:!1,expects:null,requirement:Number.isInteger,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&D(this,`integer`,e,t),e}}}function Ze(e,t){return{kind:`validation`,type:`max_value`,reference:Ze,async:!1,expects:`<=${e instanceof Date?e.toJSON():E(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value<=this.requirement)&&D(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():E(e.value)}),e}}}function A(e,t){return{kind:`validation`,type:`min_length`,reference:A,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&D(this,`length`,e,t,{received:`${e.value.length}`}),e}}}function Qe(e,t){return{kind:`validation`,type:`min_value`,reference:Qe,async:!1,expects:`>=${e instanceof Date?e.toJSON():E(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value>=this.requirement)&&D(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():E(e.value)}),e}}}function j(e,t){return{kind:`validation`,type:`regex`,reference:j,async:!1,expects:`${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!this.requirement.test(e.value)&&D(this,`format`,e,t),e}}}function $e(e){return{kind:`transformation`,type:`transform`,reference:$e,async:!1,operation:e,"~run"(e){return e.value=this.operation(e.value),e}}}function et(){return{kind:`transformation`,type:`trim`,reference:et,async:!1,"~run"(e){return e.value=e.value.trim(),e}}}function tt(e,t,n){return typeof e.fallback==`function`?e.fallback(t,n):e.fallback}function nt(e){let t={};for(let n of e)if(n.path){let e=qe(n);e?(t.nested||={},t.nested[e]?t.nested[e].push(n.message):t.nested[e]=[n.message]):t.other?t.other.push(n.message):t.other=[n.message]}else t.root?t.root.push(n.message):t.root=[n.message];return t}function rt(e,t,n){return typeof e.default==`function`?e.default(t,n):e.default}function it(e,t){return{kind:`schema`,type:`array`,reference:it,expects:`Array`,async:!1,item:e,message:t,get"~standard"(){return O(this)},"~run"(e,t){let n=e.value;if(Array.isArray(n)){e.typed=!0,e.value=[];for(let r=0;r<n.length;r++){let i=n[r],a=this.item[`~run`]({value:i},t);if(a.issues){let o={type:`array`,origin:`value`,input:n,key:r,value:i};for(let t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||=a.issues,t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value.push(a.value)}}else D(this,`type`,e,t);return e}}}function at(e){return{kind:`schema`,type:`boolean`,reference:at,expects:`boolean`,async:!1,message:e,get"~standard"(){return O(this)},"~run"(e,t){return typeof e.value==`boolean`?e.typed=!0:D(this,`type`,e,t),e}}}function M(e){return{kind:`schema`,type:`number`,reference:M,expects:`number`,async:!1,message:e,get"~standard"(){return O(this)},"~run"(e,t){return typeof e.value==`number`&&!isNaN(e.value)?e.typed=!0:D(this,`type`,e,t),e}}}function N(e,t){return{kind:`schema`,type:`object`,reference:N,expects:`Object`,async:!1,entries:e,message:t,get"~standard"(){return O(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let i=this.entries[r];if(r in n||(i.type===`exact_optional`||i.type===`optional`||i.type===`nullish`)&&i.default!==void 0){let a=r in n?n[r]:rt(i),o=i[`~run`]({value:a},t);if(o.issues){let i={type:`object`,origin:`value`,input:n,key:r,value:a};for(let t of o.issues)t.path?t.path.unshift(i):t.path=[i],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(i.fallback!==void 0)e.value[r]=tt(i);else if(i.type!==`exact_optional`&&i.type!==`optional`&&i.type!==`nullish`&&(D(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}}else D(this,`type`,e,t);return e}}}function P(e,t){return{kind:`schema`,type:`optional`,reference:P,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return O(this)},"~run"(e,t){return e.value===void 0&&(this.default!==void 0&&(e.value=rt(this,e,t)),e.value===void 0)?(e.typed=!0,e):this.wrapped[`~run`](e,t)}}}function ot(e,t){return{kind:`schema`,type:`picklist`,reference:ot,expects:Ke(e.map(E),`|`),async:!1,options:e,message:t,get"~standard"(){return O(this)},"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:D(this,`type`,e,t),e}}}function F(e){return{kind:`schema`,type:`string`,reference:F,expects:`string`,async:!1,message:e,get"~standard"(){return O(this)},"~run"(e,t){return typeof e.value==`string`?e.typed=!0:D(this,`type`,e,t),e}}}function st(e){let t;if(e)for(let n of e)t?t.push(...n.issues):t=n.issues;return t}function ct(e,t){return{kind:`schema`,type:`union`,reference:ct,expects:Ke(e.map(e=>e.expects),`|`),async:!1,options:e,message:t,get"~standard"(){return O(this)},"~run"(e,t){let n,r,i;for(let a of this.options){let o=a[`~run`]({value:e.value},t);if(o.typed)if(o.issues)r?r.push(o):r=[o];else{n=o;break}else i?i.push(o):i=[o]}if(n)return n;if(r){if(r.length===1)return r[0];D(this,`type`,e,t,{issues:st(r)}),e.typed=!0}else if(i?.length===1)return i[0];else D(this,`type`,e,t,{issues:st(i)});return e}}}function lt(e,t,n){let r=e[`~run`]({value:t},ze(n));if(r.issues)throw new Je(r.issues);return r.value}function I(...e){return{...e[0],pipe:e,get"~standard"(){return O(this)},"~run"(t,n){for(let r of e)if(r.kind!==`metadata`){if(t.issues&&(r.kind===`schema`||r.kind===`transformation`)){t.typed=!1;break}(!t.issues||!n.abortEarly&&!n.abortPipeEarly)&&(t=r[`~run`](t,n))}return t}}}function ut(e,t,n){let r=e[`~run`]({value:t},ze(n));return{typed:r.typed,success:!r.issues,output:r.value,issues:r.issues}}const L=s.homedir(),{env:R}=process,dt=R.XDG_DATA_HOME||(L?n.join(L,`.local`,`share`):void 0),ft=R.XDG_CONFIG_HOME||(L?n.join(L,`.config`):void 0);R.XDG_STATE_HOME||L&&n.join(L,`.local`,`state`),R.XDG_CACHE_HOME||L&&n.join(L,`.cache`),R.XDG_RUNTIME_DIR;const pt=(R.XDG_DATA_DIRS||`/usr/local/share/:/usr/share/`).split(`:`);dt&&pt.unshift(dt);const mt=(R.XDG_CONFIG_DIRS||`/etc/xdg`).split(`:`);ft&&mt.unshift(ft);const ht=c(),gt=ft??n.join(ht,`.config`),_t={LOW:50,MEDIUM:80},vt=[`sunday`,`monday`,`tuesday`,`wednesday`,`thursday`,`friday`,`saturday`],yt=I(F(),A(1,`Model name cannot be empty`),k(`ModelName`)),bt=I(F(),A(1,`Session ID cannot be empty`),k(`SessionId`)),xt=I(F(),A(1,`Request ID cannot be empty`),k(`RequestId`)),St=I(F(),A(1,`Message ID cannot be empty`),k(`MessageId`)),Ct=I(F(),j(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/,`Invalid ISO timestamp`),k(`ISOTimestamp`)),wt=/^\d{4}-\d{2}-\d{2}$/,Tt=I(F(),j(/^\d{4}-\d{2}$/,`Date must be in YYYY-MM format`),k(`MonthlyDate`)),Et=I(F(),j(wt,`Date must be in YYYY-MM-DD format`),k(`WeeklyDate`)),Dt=I(F(),j(/^\d{8}$/,`Date must be in YYYYMMDD format`),k(`FilterDate`)),Ot=I(F(),j(/^\d+\.\d+\.\d+/,`Invalid version format`),k(`Version`)),kt=e=>lt(bt,e),At=e=>lt(Tt,e),jt=e=>lt(Et,e);function Mt(e){let t=ut(Et,e);return t.success?t.output:At(e)}const Nt=[`auto`,`calculate`,`display`],Pt=[`desc`,`asc`],Ft=N({session_id:F(),transcript_path:F(),cwd:F(),model:N({id:F(),display_name:F()}),workspace:N({current_dir:F(),project_dir:F()}),version:P(F()),cost:P(N({total_cost_usd:M(),total_duration_ms:P(M()),total_api_duration_ms:P(M()),total_lines_added:P(M()),total_lines_removed:P(M())})),context_window:P(N({total_input_tokens:M(),total_output_tokens:P(M()),context_window_size:M()}))});function It(e){return r.env.FORCE_COLOR==null?r.env.NO_COLOR!=null&&r.env.NO_COLOR!==``?!1:e.isTTY===!0:r.env.FORCE_COLOR!==`0`}function z(e,t,n=r.stdout){return It(n)?g(e,t,{validateStream:!1}):t}function Lt(e,t){return z(`blue`,e,t)}function Rt(e,t){return z(`bold`,e,t)}function zt(e,t){return z(`cyan`,e,t)}function B(e,t){return z(`gray`,e,t)}function Bt(e,t){return z(`green`,e,t)}function Vt(e,t){return z(`red`,e,t)}function V(e,t){return z(`yellow`,e,t)}let Ht;function Ut(){return globalThis.Bun}function Wt(e){return e.includes(`\x1B7`)||e.includes(`\x1B8`)}function Gt(e){let t=``;for(let n=0;n<e.length;n++){if(e.charCodeAt(n)!==27){t+=e[n];continue}let r=e.charCodeAt(n+1);if(r===55||r===56){n++;continue}if(r===91)for(n+=2;n<e.length;){let t=e.charCodeAt(n);if(t>=64&&t<=126)break;n++}}return t}function Kt(e){let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r===27){if(e.charCodeAt(n+1)!==91)return;for(n+=2;n<e.length;){let t=e.charCodeAt(n);if(t>=64&&t<=126)break;n++}if(n>=e.length)return;continue}if(r>126)return;r>=32&&t++}return t}function qt(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65024&&e<=65039||e===8205}function Jt(e){return e===9001||e===9002||e===12288||e>=4352&&e<=4447||e>=8986&&e<=8987||e>=9193&&e<=9196||e>=9725&&e<=9726||e===9889||e===9989||e===10060||e>=10067&&e<=10069||e>=10133&&e<=10135||e===10160||e===10175||e>=11904&&e<=42191||e===11088||e===11093||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>=127744&&e<=129791||e>=131072&&e<=262141}function Yt(e){let t=Gt(e);Ht??=new Intl.Segmenter(void 0,{granularity:`grapheme`});let n=0;for(let{segment:e}of Ht.segment(t)){let t=0,r=!1;for(let n of e){let e=n.codePointAt(0);e===65039&&(r=!0),!(e<32||qt(e))&&(t=Math.max(t,Jt(e)?2:1))}r&&(t=Math.max(t,2)),n+=t}return n}function H(e){let t=Kt(e);if(t!=null)return t;let n=Ut()?.stringWidth;return n==null?Yt(e):n(Wt(e)?Gt(e):e,{ambiguousIsNarrow:!1,countAnsiEscapeCodes:!1})}let Xt;const Zt=new Map,U=new Map;function Qt(){return Xt??=new Intl.NumberFormat(`en-US`),Xt}function $t(e,t){if(e.charCodeAt(t)!==27||e.charCodeAt(t+1)!==91)return null;let n=t+2;for(;n<e.length;){let r=e.charCodeAt(n);if(r>=64&&r<=126)return e.slice(t,n+1);n++}return null}function en(e,t){return tn(e,t).text}function tn(e,t){let n=H(e);if(n<=t)return{text:e,width:n};if(t<=1)return{text:`…`,width:1};let r=t-1,i=0,a=``,o=!1;for(let t=0;t<e.length;){let n=$t(e,t);if(n!=null){a+=n,t+=n.length,o=!0;continue}let s=e.codePointAt(t);if(s==null)break;let c=String.fromCodePoint(s),l=s<128?1:H(c);if(i+l>r)break;a+=c,i+=l,t+=c.length}return{text:`${a}…${o?`\x1B[39m`:``}`,width:t}}function nn(e,t,n){let r=tn(e,t),i=Math.max(0,t-r.width);switch(n){case`right`:return`${` `.repeat(i)}${r.text}`;case`center`:{let e=Math.floor(i/2);return`${` `.repeat(e)}${r.text}${` `.repeat(i-e)}`}case`left`:return`${r.text}${` `.repeat(i)}`}}function rn(e,t){if(H(e)<=t)return[e];let n=e.split(` `);if(n.length<=1)return[en(e,t)];let r=[],i=``;for(let e of n){let n=i===``?e:`${i} ${e}`;H(n)<=t?i=n:(i!==``&&r.push(i),i=H(e)<=t?e:en(e,t))}return i!==``&&r.push(i),r}function an(e,t){if(H(e)<=t)return[e];let n=e.split(` `);if(n.length<=1)return[en(e,t)];let r=[],i=``;for(let e of n){let n=i===``?e:`${i} ${e}`;if(H(n)<=t){i=n;continue}i!==``&&r.push(i),i=e===``?``:H(e)<=t?e:en(e,t)}return i!==``&&r.push(i),r.length===0?[``]:r}function on(e){return e.split(`
|
|
4
4
|
`)}function sn(e){return typeof e==`object`&&e&&`content`in e?String(e.content):String(e??``)}function cn(e,t,n){return`${e.toString().padStart(4,`0`)}\n${t.toString().padStart(2,`0`)}-${n.toString().padStart(2,`0`)}`}function ln(e){return new Intl.DateTimeFormat(`en-CA`,{year:`numeric`,month:`2-digit`,day:`2-digit`,timeZone:e})}function un(e,t){let n=/^\d{4}-\d{2}-\d{2}$/.test(e);if(n&&(t==null||t===`UTC`))return`${e.slice(0,4)}\n${e.slice(5)}`;let r=n?t==null?new Date(`${e}T00:00:00`):new Date(`${e}T00:00:00Z`):new Date(e);if(t==null)return cn(r.getFullYear(),r.getMonth()+1,r.getDate());if(t===`UTC`)return cn(r.getUTCFullYear(),r.getUTCMonth()+1,r.getUTCDate());let i=ln(t).formatToParts(r);return`${i.find(e=>e.type===`year`)?.value??``}\n${i.find(e=>e.type===`month`)?.value??``}-${i.find(e=>e.type===`day`)?.value??``}`}var dn=class{head;rows=[];colAligns;dateFormatter;compactHead;compactColAligns;minColumnWidths;compactMinColumnWidths;flexibleColumnIndex;compactFlexibleColumnIndex;compactThreshold;compactMode=!1;forceCompact;logger;constructor(e){this.head=e.head,this.colAligns=e.colAligns??Array.from({length:this.head.length},()=>`left`),this.dateFormatter=e.dateFormatter,this.compactHead=e.compactHead,this.compactColAligns=e.compactColAligns,this.minColumnWidths=e.minColumnWidths,this.compactMinColumnWidths=e.compactMinColumnWidths,this.flexibleColumnIndex=e.flexibleColumnIndex,this.compactFlexibleColumnIndex=e.compactFlexibleColumnIndex,this.compactThreshold=e.compactThreshold??100,this.forceCompact=e.forceCompact??!1,this.logger=e.logger??console.warn}push(e){this.rows.push(e)}filterRowToCompact(e,t){return t.map(t=>e[t]??``)}getCurrentTableConfig(){return this.compactMode&&this.compactHead!=null?{head:this.compactHead,colAligns:this.compactColAligns??Array.from({length:this.compactHead.length},()=>`left`),minColumnWidths:this.compactMinColumnWidths,flexibleColumnIndex:this.compactFlexibleColumnIndex}:{head:this.head,colAligns:this.colAligns,minColumnWidths:this.minColumnWidths,flexibleColumnIndex:this.flexibleColumnIndex}}getCompactIndices(){return this.compactHead==null||!this.compactMode?Array.from({length:this.head.length},(e,t)=>t):this.compactHead.map(e=>{let t=this.head.indexOf(e);return t<0?(this.logger(`Warning: Compact header "${e}" not found in table headers [${this.head.join(`, `)}]. Using first column as fallback.`),0):t})}isCompactMode(){return this.compactMode}toString(){let e=r.stdout.columns||Number.parseInt(r.env.COLUMNS??``,10)||120;for(this.compactMode=this.forceCompact||e<this.compactThreshold&&this.compactHead!=null;;){let{head:t,colAligns:n,minColumnWidths:r,flexibleColumnIndex:i}=this.getCurrentTableConfig(),a=this.getCompactIndices(),o=this.rows.filter(e=>!this.isSeparatorRow(e)),s=this.compactMode?o.map(e=>this.filterRowToCompact(e,a)):o,c=t.map(e=>H(e));for(let e of s)for(let n=0;n<t.length;n++){let t=Math.max(...on(sn(e[n])).map(e=>H(e)));t>c[n]&&(c[n]=t)}let l=t.length+1,u=e-l,d=c.map((e,t)=>{let a=n[t],o=r?.[t];return a===`right`?Math.max(e+2,o??11):t===i?Math.max(e+2,o??15):Math.max(e+2,o??10)}),f=d.reduce((e,t)=>e+t,0)+l;if(i!=null&&f>e&&d[i]!=null){let e=d.reduce((e,t,n)=>e+(n===i?0:t),0),t=r?.[i]??12,n=Math.max(t,u-e);d[i]=Math.min(d[i],n),f=d.reduce((e,t)=>e+t,0)+l}if(!this.compactMode&&this.compactHead!=null&&f>e){this.compactMode=!0;continue}if(f<=e)return this.renderFastTable(t,n,d,this.getRenderableRows(o,a,!1));let p=d.reduce((e,t,n)=>n===i?e:e+Math.min(t,r?.[n]??t),0),m=i==null?void 0:Math.max(r?.[i]??12,u-p),h=u/d.reduce((e,t)=>e+t,0),g=d.map((e,t)=>{let a=n[t],o=Math.floor(e*h),s=r?.[t];return t===i&&m!=null?Math.min(e,m):(o=a===`right`?Math.max(o,s??10):t===0?Math.max(o,s??12):Math.max(o,s??8),o)});return this.renderFastTable(t,n,g,this.getRenderableRows(o,a,!0))}}getRenderableRows(e,t,n){return!this.compactMode&&!n?e:e.map(e=>{let r=n?e.map((e,t)=>t===0&&this.dateFormatter!=null&&typeof e==`string`&&this.isDateString(e)?this.dateFormatter(e):e):e;return this.compactMode?this.filterRowToCompact(r,t):r})}isSeparatorRow(e){return e.every(e=>typeof e==`object`&&e&&`content`in e?e.content===``||/^─+$/.test(e.content):typeof e==`string`&&(e===``||/^─+$/.test(e)))}isDateString(e){return/^\d{4}-\d{2}-\d{2}$/.test(e)}renderFastTable(e,t,n,r=this.rows.filter(e=>!this.isSeparatorRow(e))){let i=n.map(e=>Math.max(1,e-2)),a={top:this.renderBorder(`┌`,`┬`,`┐`,i),mid:this.renderBorder(`├`,`┼`,`┤`,i),bottom:this.renderBorder(`└`,`┴`,`┘`,i)},o=[a.top];o.push(...this.renderFastRow(e,i,t,!0,!1)),o.push(a.mid);for(let e=0;e<r.length;e++)o.push(...this.renderFastRow(r[e],i,t,!1,this.compactMode)),o.push(e===r.length-1?a.bottom:a.mid);return o.join(`
|
|
@@ -10,4 +10,4 @@ import{createReadStream as e,statSync as t}from"node:fs";import n from"node:path
|
|
|
10
10
|
- ${n.join(ht,`.claude`,`projects`)}
|
|
11
11
|
- Or set CLAUDE_CONFIG_DIR environment variable to valid directory path(s) containing a 'projects' subdirectory`.trim());return e}function mr(e){let t=e.replace(/[/\\]/g,n.sep).split(n.sep),r=t.findIndex(e=>e===`projects`);if(r===-1||r+1>=t.length)return`unknown`;let i=t[r+1];return i!=null&&i.trim()!==``?i:`unknown`}const hr=N({cwd:P(F()),sessionId:P(bt),timestamp:Ct,version:P(Ot),message:N({usage:N({input_tokens:M(),output_tokens:M(),cache_creation_input_tokens:P(M()),cache_read_input_tokens:P(M()),speed:P(ot([`standard`,`fast`]))}),model:P(yt),id:P(St),content:P(it(N({text:P(F())})))}),costUSD:P(M()),requestId:P(xt),isApiErrorMessage:P(at())});function gr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _r(e){return e===void 0||typeof e==`string`}function vr(e){return e===void 0||typeof e==`string`&&e.length>0}function yr(e){return e===void 0||typeof e==`number`}function br(e){return e===void 0||typeof e==`boolean`}function xr(e){return e.input_tokens+e.output_tokens+(e.cache_creation_input_tokens??0)+(e.cache_read_input_tokens??0)}function Sr(e,t){return e==null?void 0:t===`fast`?`${e}-fast`:e}function Cr(e,t){return Sr(e,t)??`unknown`}function wr(e){if(!gr(e)||!_r(e.cwd)||!vr(e.sessionId)||!vr(e.requestId)||!yr(e.costUSD)||!br(e.isApiErrorMessage)||e.version!==void 0&&(typeof e.version!=`string`||!sr.test(e.version))||typeof e.timestamp!=`string`||!or.test(e.timestamp)||!gr(e.message)||!vr(e.message.model)||!vr(e.message.id))return null;if(e.message.content!==void 0){if(!Array.isArray(e.message.content))return null;for(let t of e.message.content)if(!gr(t)||!_r(t.text))return null}if(!gr(e.message.usage))return null;let{usage:t}=e.message;return typeof t.input_tokens!=`number`||typeof t.output_tokens!=`number`||!yr(t.cache_creation_input_tokens)||!yr(t.cache_read_input_tokens)||t.speed!==void 0&&t.speed!==`standard`&&t.speed!==`fast`?null:e}function Z(e,t,n=0){let r=e.indexOf(t,n);if(r===-1)return;let i=r+t.length,a=e.indexOf(`"`,i);return a===-1?void 0:e.slice(i,a)}function Tr(e,t,n=0){let r=e.indexOf(t,n);if(r===-1)return;let i=r+t.length,a=1,o=e.charCodeAt(i);o===45?(a=-1,i++):o===43&&i++;let s=0,c=0;for(;i<e.length;){let t=e.charCodeAt(i)-48;if(t<0||t>9)break;s=s*10+t,i++,c++}if(e.charCodeAt(i)===46){i++;let t=.1;for(;i<e.length;){let n=e.charCodeAt(i)-48;if(n<0||n>9)break;s+=n*t,t*=.1,i++,c++}}if(c===0)return;let l=e.charCodeAt(i);if(l===69||l===101){i++;let t=1,n=e.charCodeAt(i);n===45?(t=-1,i++):n===43&&i++;let r=0,a=0;for(;i<e.length;){let t=e.charCodeAt(i)-48;if(t<0||t>9)break;r=r*10+t,i++,a++}if(a===0)return;s*=10**(t*r)}return s*=a,Number.isFinite(s)?s:void 0}function Er(e,t,n=0){let r=e.indexOf(t,n);if(r===-1)return;let i=r+t.length,a=0,o=!1;for(;i<e.length;){let t=e.charCodeAt(i)-48;if(t<0||t>9)break;a=a*10+t,i++,o=!0}return o?a:void 0}function Dr(e,t=!1,n){let r=e.indexOf(`"message":{`),i=n!=null&&n>=r?n:e.indexOf(ar,r);if(r===-1||i===-1)return null;let a=e.indexOf(`"content":`,r);if(a!==-1&&(!t||e.charCodeAt(a+10)!==91)||e.includes(`"isApiErrorMessage":true`)||Or(e))return null;let o=Z(e,`"timestamp":"`);if(o==null||!or.test(o))return null;let s=e.indexOf(`"role":"assistant"`,r);if(s===-1||s>i)return null;let c=Er(e,`"input_tokens":`,i),l=Er(e,`"output_tokens":`,i);if(c==null||l==null)return null;let u=Z(e,`"speed":"`,i);if(u!=null&&u!==`standard`&&u!==`fast`)return null;let d=Z(e,`"version":"`,i);if(d!=null&&!sr.test(d))return null;let f=Z(e,`"model":"`,r),p=Z(e,`"id":"`,r),m=Z(e,`"requestId":"`,i);return f===``||p===``||m===``?null:{timestamp:o,message:{usage:{input_tokens:c,output_tokens:l,cache_creation_input_tokens:Er(e,`"cache_creation_input_tokens":`,i),cache_read_input_tokens:Er(e,`"cache_read_input_tokens":`,i),speed:u},model:f,id:p},costUSD:Tr(e,`"costUSD":`,i),requestId:m,version:d}}function Or(e){let t=e.indexOf(`:null`);for(;t!==-1;){let n=t-1;if(e.charCodeAt(n)!==34)for(;n>=0&&e.charCodeAt(n)!==34;)n--;if(n!==-1){let t=n-1;for(;t>=0&&e.charCodeAt(t)!==34;)t--;if(t!==-1&&kr(e,t+1,n))return!0}t=e.indexOf(`:null`,t+5)}return!1}function Q(e,t,n,r){return n-t===r.length&&e.startsWith(r,t)}function kr(e,t,n){switch(n-t){case 2:return Q(e,t,n,`id`);case 3:return Q(e,t,n,`cwd`);case 5:return Q(e,t,n,`model`)||Q(e,t,n,`speed`);case 7:return Q(e,t,n,`costUSD`)||Q(e,t,n,`version`);case 9:return Q(e,t,n,`sessionId`)||Q(e,t,n,`requestId`);case 17:return Q(e,t,n,`isApiErrorMessage`);case 23:return Q(e,t,n,`cache_read_input_tokens`);case 27:return Q(e,t,n,`cache_creation_input_tokens`);default:return!1}}function Ar(e,t){return Dr(e,t?.allowContentFast!==!1,t?.usageMarkerIndex)??wr(JSON.parse(e))}const jr=N({input_tokens:P(M()),cache_creation_input_tokens:P(M()),cache_read_input_tokens:P(M()),output_tokens:P(M())}),Mr=N({type:P(F()),message:P(N({usage:P(jr)}))});function Nr(){return{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,cost:0}}function Pr(){return Object.create(null)}function Fr(e,t){e.modelSeen[t]??(e.modelSeen[t]=!0,e.modelsUsed.push(t))}function Ir(){return{totals:{...Nr(),totalCost:0},modelAggregates:Pr(),modelSeen:Object.create(null),modelsUsed:[]}}function Lr(e,t,n,r){let i=t??`unknown`;if(e.totals.inputTokens+=n.inputTokens,e.totals.outputTokens+=n.outputTokens,e.totals.cacheCreationTokens+=n.cacheCreationTokens,e.totals.cacheReadTokens+=n.cacheReadTokens,e.totals.cost+=r,e.totals.totalCost+=r,i===`<synthetic>`)return;t!=null&&Fr(e,i);let a=e.modelAggregates[i];a??(a=Nr(),e.modelAggregates[i]=a),a.inputTokens+=n.inputTokens,a.outputTokens+=n.outputTokens,a.cacheCreationTokens+=n.cacheCreationTokens,a.cacheReadTokens+=n.cacheReadTokens,a.cost+=r}function Rr(e){return{...e.totals,modelsUsed:e.modelsUsed,modelBreakdowns:zr(e.modelAggregates)}}function zr(e){let t=Object.keys(e),n=[];for(let r=0;r<t.length;r++){let i=t[r];n.push({modelName:i,...e[i]})}return n.sort((e,t)=>t.cost-e.cost)}function Br(e,t,n){return n==null?e:e.filter(e=>t(e)===n)}function Vr(e){if(e==null||!/^\d{8}$/.test(e))return null;let t=Number.parseInt(e.slice(0,4),10),n=Number.parseInt(e.slice(4,6),10),r=Number.parseInt(e.slice(6,8),10),i=new Date(Date.UTC(t,n-1,r));return i.getUTCFullYear()!==t||i.getUTCMonth()!==n-1||i.getUTCDate()!==r?null:i}async function Hr(e,t,n,r){let i=Vr(n),a=[];if(i!=null&&(i.setUTCDate(i.getUTCDate()-1),a.push(i.getTime())),r!=null&&!Number.isNaN(r.getTime())&&a.push(r.getTime()),a.length===0)return e;let s=Math.max(...a),c=await Promise.all(e.map(async e=>{try{return(await o(t(e))).mtimeMs>=s}catch{return!0}}));return e.filter((e,t)=>c[t]===!0)}function Ur(e){let t=e.message.id;if(t==null)return null;let n=e.requestId;return n==null?t:`${t}:${n}`}async function Wr(e,t){await Me(e,[ar],(e,n)=>{t(e,n)},{bufferedEncoding:`latin1`,callbackMode:`sync`,markerIndex:`byte`})}function Gr(e,t){if(t===`display`)return e.costUSD??0;if(t===`auto`&&e.costUSD!=null)return e.costUSD}async function Kr(e,t,n){if(e===`display`)return e=>e.costUSD??0;if(t==null&&n==null)return()=>0;let r=n??ue(await t.fetchModelPricing(),new Map),i=t??new J(!0),a=new Map,o=e=>{if(a.has(e))return a.get(e)??null;let t=r.get(e);if(t!=null)return a.set(e,t),t;for(let t of Gn){let n=r.get(`${t}${e}`);if(n!=null)return a.set(e,n),n}let n=e.toLowerCase();for(let[t,i]of r){let r=t.toLowerCase();if(r.includes(n)||n.includes(r))return a.set(e,i),i}return a.set(e,null),null};return t=>{if(e===`auto`&&t.costUSD!=null)return t.costUSD;let n=t.message.model;if(n==null||n===``)return 0;let r=o(n);return r==null?0:i.calculateCostFromPricing(t.message.usage,r)*(t.message.usage.speed===`fast`?r.provider_specific_entry?.fast??1:1)}}function qr(e){let t=null;if(e.isApiErrorMessage===!0){let n=e.message?.content?.find(e=>e.text!=null&&e.text.includes(`Claude AI usage limit reached`))?.text?.match(/\|(\d+)/)??null;if(n?.[1]!=null){let e=Number.parseInt(n[1]);t=e>0?new Date(e*1e3):null}}return t}async function Jr(e){let t=[],r=async e=>{let i;try{i=await a(e,{withFileTypes:!0})}catch{return}let o;for(let a of i){let i=n.join(e,a.name);a.isDirectory()?(o??=[],o.push(r(i))):a.isFile()&&a.name.endsWith(`.jsonl`)&&t.push(i)}o!=null&&await Promise.all(o)};return await r(e),t.sort(fe)}async function Yr(e){let t=e.map(async e=>{let t=n.join(e,`projects`);return(await Jr(t)).map(e=>({file:e,baseDir:t}))});return(await Promise.all(t)).flat()}function Xr(){return Object.create(null)}function Zr(){return Object.create(null)}function $(e,t){return e.tokenTotal===t.tokenTotal?e.hasSpeed&&!t.hasSpeed:e.tokenTotal>t.tokenTotal}function Qr(e,t,n){t.uniqueHash!=null&&(e[t.uniqueHash]=n)}function $r(e){let t=e.length,n=new Float64Array(t*6),r=new Uint8Array(t),i=[];i.length=t*3;let a=e[0];for(let a=0;a<t;a++){let t=e[a],o=a*6;n[o]=t.cost,n[o+1]=t.inputTokens,n[o+2]=t.outputTokens,n[o+3]=t.cacheCreationTokens,n[o+4]=t.cacheReadTokens,n[o+5]=t.tokenTotal,r[a]=+!!t.hasSpeed;let s=a*3;i[s]=t.date,i[s+1]=t.model??null,i[s+2]=t.uniqueHash}return{kind:`daily-columns`,count:t,numbers:n,flags:r,project:a?.project??``,strings:i}}function ei(e,t){let r=e.split(n.sep).filter(e=>e!==``),i=r.at(-1)??``,a=i.endsWith(`.jsonl`)?n.basename(i,`.jsonl`):``;if(t!=null&&t.trim()!==``){let e=r.findIndex(e=>e===t);if(e>0){let i=r.slice(0,e).join(n.sep);return{sessionId:t,projectPath:i===``?`Unknown Project`:i}}if(a===t){let e=r.slice(0,-1).join(n.sep);return{sessionId:t,projectPath:e===``?`Unknown Project`:e}}}if(r.length===2&&a!==``)return{sessionId:a,projectPath:r[0]??`Unknown Project`};if(r.at(-2)===`subagents`&&r.length>=4){let e=r.slice(0,-3).join(n.sep);return{sessionId:r.at(-3)??`unknown`,projectPath:e===``?`Unknown Project`:e}}let o=r.at(-2)??`unknown`,s=r.slice(0,-2).join(n.sep);return{sessionId:o,projectPath:s===``?`Unknown Project`:s}}function ti(e,t){for(let n=0;n<e.count;n++){let r=n*6,i=n*3;t({date:e.strings[i],cost:e.numbers[r],inputTokens:e.numbers[r+1],outputTokens:e.numbers[r+2],cacheCreationTokens:e.numbers[r+3],cacheReadTokens:e.numbers[r+4],model:e.strings[i+1]??void 0,project:e.project,uniqueHash:e.strings[i+2]??null,tokenTotal:e.numbers[r+5],hasSpeed:e.flags[n]===1})}}function ni(e){let t=e.length,n=new Float64Array(t*6),r=new Uint8Array(t),i=[];i.length=t*4;let a=e[0];for(let a=0;a<t;a++){let t=e[a],o=a*6;n[o]=t.cost,n[o+1]=t.inputTokens,n[o+2]=t.outputTokens,n[o+3]=t.cacheCreationTokens,n[o+4]=t.cacheReadTokens,n[o+5]=t.tokenTotal,r[a]=+!!t.hasSpeed;let s=a*4;i[s]=t.timestamp,i[s+1]=t.model??null,i[s+2]=t.uniqueHash,i[s+3]=t.version??null}return{kind:`session-columns`,count:t,numbers:n,flags:r,sessionKey:a?.sessionKey??``,sessionId:a?.sessionId??``,projectPath:a?.projectPath??``,strings:i}}function ri(e,t){for(let n=0;n<e.count;n++){let r=n*6,i=n*4;t({sessionKey:e.sessionKey,sessionId:e.sessionId,projectPath:e.projectPath,cost:e.numbers[r],timestamp:e.strings[i],model:e.strings[i+1]??void 0,inputTokens:e.numbers[r+1],outputTokens:e.numbers[r+2],cacheCreationTokens:e.numbers[r+3],cacheReadTokens:e.numbers[r+4],uniqueHash:e.strings[i+2]??null,tokenTotal:e.numbers[r+5],hasSpeed:e.flags[n]===1,version:e.strings[i+3]??void 0})}}function ii(e){let t=e.entries.length,n=new Float64Array(t*8),r=new Uint8Array(t),i=[];i.length=t*3;for(let a=0;a<t;a++){let t=e.entries[a],o=a*8;n[o]=t.entry.timestampMs??t.entry.timestamp.getTime(),n[o+1]=t.entry.costUSD??0,n[o+2]=t.entry.usage.inputTokens,n[o+3]=t.entry.usage.outputTokens,n[o+4]=t.entry.usage.cacheCreationInputTokens,n[o+5]=t.entry.usage.cacheReadInputTokens,n[o+6]=t.tokenTotal,n[o+7]=t.entry.usageLimitResetTime?.getTime()??NaN,r[a]=+!!t.hasSpeed;let s=a*3;i[s]=t.entry.model,i[s+1]=t.uniqueHash,i[s+2]=t.entry.version??null}return{kind:`block-columns`,file:e.file,timestampMs:e.timestampMs,count:t,numbers:n,flags:r,strings:i}}function ai(e,t){for(let n=0;n<e.count;n++){let r=n*8,i=n*3,a=e.numbers[r],o=e.numbers[r+7];t({entry:{timestamp:new Date(a),timestampMs:a,usage:{inputTokens:e.numbers[r+2],outputTokens:e.numbers[r+3],cacheCreationInputTokens:e.numbers[r+4],cacheReadInputTokens:e.numbers[r+5]},costUSD:e.numbers[r+1],model:e.strings[i]??`unknown`,version:e.strings[i+2]??void 0,usageLimitResetTime:Number.isNaN(o)?void 0:new Date(o)},uniqueHash:e.strings[i+1]??null,tokenTotal:e.numbers[r+6],hasSpeed:e.flags[n]===1})}}function oi(e,t=!1,n=!1){return t?0:Pe({itemCount:e,isMainThread:d,moduleUrl:import.meta.url,envValue:r.env.CCUSAGE_JSONL_WORKER_THREADS,isTest:!1,maxWorkers:9,preferMoreWorkers:n,reserveParallelism:0})}function si(e,t){let n=Array.from({length:t},()=>[]);for(let r=0;r<e.length;r++)n[r%t].push(e[r]);return n.filter(e=>e.length>0)}async function ci(e,t,n){let r=oi(t.length,n.singleThread,e===`daily`||e===`session`);if(r===0)return null;let i=t.map((e,t)=>({index:t,item:e})),a=n.getFilePath==null?si(i,r):await Fe(i,r,n.getFilePath),o;if(n.mode!==`display`&&n.offline!==!0)try{var s=T();o=ue(await s.u(new J(n.offline)).fetchModelPricing(),new Map)}catch(e){s.e=e}finally{s.d()}let c=[];for(let t of a)c.push(new Promise((r,i)=>{let a=new u(new URL(import.meta.url),{workerData:{kind:`ccusage:usage-worker`,task:e,items:t,mode:n.mode,offline:n.offline,timezone:n.timezone,pricing:o}});a.once(`message`,e=>{r(e.results)}),a.once(`error`,i),a.once(`exit`,e=>{e!==0&&i(Error(`ccusage worker exited with code ${e}`))})}));let l=await Promise.all(c),d=de(t.length);for(let e of l)for(let{index:t,result:n}of e)d[t]=n;return d}async function li(e,t,n){let r=mr(e),i=[],a=Xr();return await Wr(e,(e,o)=>{try{let s=Ar(e,{usageMarkerIndex:o});if(s==null)return;let c=n(s.timestamp),l=Ur(s),u=s.message.usage,d=xr(u),f=u.speed!=null,p;if(l!=null&&(p=a[l],p!=null&&!$({tokenTotal:d,hasSpeed:f},i[p])))return;let m=s.message.model,h={date:c,cost:t(s),inputTokens:u.input_tokens,outputTokens:u.output_tokens,cacheCreationTokens:u.cache_creation_input_tokens??0,cacheReadTokens:u.cache_read_input_tokens??0,model:Sr(m,u.speed),project:r,uniqueHash:l,tokenTotal:d,hasSpeed:f};p==null?(i.push(h),Qr(a,h,i.length-1)):i[p]=h}catch{}}),i}async function ui(e,t,r){let{file:i,baseDir:a}=e,o=n.relative(a,i),s=[],c=Xr();return await Wr(i,(e,n)=>{try{let i=Ar(e,{usageMarkerIndex:n});if(i==null)return;let a=Gr(i,t),l=Ur(i),u=i.message.usage,d=xr(u),f=u.speed!=null,p;if(l!=null&&(p=c[l],p!=null&&!$({tokenTotal:d,hasSpeed:f},s[p])))return;let m=i.message.model,{projectPath:h,sessionId:g}=ei(o,i.sessionId),_={sessionKey:`${h}/${g}`,sessionId:g,projectPath:h,cost:a??r(i),timestamp:i.timestamp,model:Sr(m,u.speed),inputTokens:u.input_tokens,outputTokens:u.output_tokens,cacheCreationTokens:u.cache_creation_input_tokens??0,cacheReadTokens:u.cache_read_input_tokens??0,version:i.version,uniqueHash:l,tokenTotal:d,hasSpeed:f};p==null?(s.push(_),Qr(c,_,s.length-1)):s[p]=_}catch{}}),s}async function di(e,t){let n=null,r=[],i=Xr(),a=(e,t)=>{!Number.isNaN(t)&&(n==null||t<n)&&(n=t)};return await Wr(e,(e,n)=>{try{let o=Ar(e,{usageMarkerIndex:n});if(o==null)return;let s=dr(o.timestamp),c=Number.isNaN(s)?new Date(o.timestamp):new Date(s);a(c,Number.isNaN(s)?c.getTime():s);let l=Ur(o),u=o.message.usage,d=xr(u),f=u.speed!=null,p;if(l!=null&&(p=i[l],p!=null&&!$({tokenTotal:d,hasSpeed:f},r[p])))return;let m=qr(o),h=o.message.model,g={entry:{timestamp:c,timestampMs:Number.isNaN(s)?c.getTime():s,usage:{inputTokens:u.input_tokens,outputTokens:u.output_tokens,cacheCreationInputTokens:u.cache_creation_input_tokens??0,cacheReadInputTokens:u.cache_read_input_tokens??0},costUSD:t(o),model:Cr(h,u.speed),version:o.version,usageLimitResetTime:m??void 0},uniqueHash:l,tokenTotal:d,hasSpeed:f};p==null?(r.push(g),Qr(i,g,r.length-1)):r[p]=g}catch(e){q.debug(`Skipping invalid JSON line in 5-hour blocks: ${e instanceof Error?e.message:String(e)}`)}}),{file:e,timestampMs:n,entries:r}}async function fi(e){let t=(await Yr(ne(e?.claudePath??pr()))).map(e=>e.file);if(t.length===0)return[];let n=await Hr(Br(t,e=>mr(e),e?.project),e=>e,e?.since,e?.minUpdateTime),r=e?.mode??`auto`,i=Tn(e?.timezone),a=[],o=0,s=Xr(),c=e=>{if(e.uniqueHash!=null){let t=s[e.uniqueHash];if(t!=null){if(!$(e,a[t]))return;a[t]=e;return}s[e.uniqueHash]=o}a[o++]=e},l=await ci(`daily`,n,{mode:r,offline:e?.offline,timezone:e?.timezone,singleThread:e?.singleThread,getFilePath:e=>e});if(l==null)try{var u=T();let t=await Kr(r,u.u(r===`display`?null:new J(e?.offline))),a=await Ie(n,fr(n.length,e?.singleThread),async e=>li(e,t,i));for(let e of a)for(let t of e)c(t)}catch(e){u.e=e}finally{u.d()}else for(let e of l)ti(e,c);let d=e?.groupByProject===!0||e?.project!=null,f=new Map;for(let e of a){let t=d?`${e.date}\x00${e.project}`:e.date,n=f.get(t);n??(n={date:e.date,project:d?e.project:void 0,summary:Ir()},f.set(t,n)),Lr(n.summary,e.model,e,e.cost)}return pe(Br(En(Array.from(f.values(),e=>({date:e.date,...Rr(e.summary),...e.project!=null&&{project:e.project}})),e=>e.date,e?.since,e?.until),e=>e.project,e?.project),e=>e.date,e?.order)}async function pi(e){let t=await Yr(ne(e?.claudePath??pr()));if(t.length===0)return[];let n=await Hr(Br(t,e=>mr(e.file),e?.project),e=>e.file,e?.since,e?.minUpdateTime),r=e?.mode??`auto`,i=Tn(e?.timezone),a=[],o=0,s=Xr(),c=e=>{if(e.uniqueHash!=null){let t=s[e.uniqueHash];if(t!=null){if(!$(e,a[t]))return;a[t]=e;return}s[e.uniqueHash]=o}a[o++]=e},l=await ci(`session`,n,{mode:r,offline:e?.offline,timezone:e?.timezone,singleThread:e?.singleThread,getFilePath:e=>e.file});if(l==null)try{var u=T();let t=await Kr(r,u.u(r===`display`?null:new J(e?.offline))),i=await Ie(n,fr(n.length,e?.singleThread),async e=>ui(e,r,t));for(let e of i)for(let t of e)c(t)}catch(e){u.e=e}finally{u.d()}else for(let e of l)ri(e,c);let d=new Map;for(let e of a){let t=d.get(e.sessionKey);t==null?(t={latestEntry:e,summary:Ir(),versions:new Set},d.set(e.sessionKey,t)):e.timestamp>t.latestEntry.timestamp&&(t.latestEntry=e),e.version!=null&&t.versions.add(e.version),Lr(t.summary,e.model,e,e.cost)}let f=Br(En(Array.from(d.values(),e=>({sessionId:kt(e.latestEntry.sessionId),projectPath:e.latestEntry.projectPath,...Rr(e.summary),lastActivity:i(e.latestEntry.timestamp),versions:Array.from(e.versions).sort()})),e=>e.lastActivity,e?.since,e?.until),e=>e.projectPath,e?.project),p=e?.order??`desc`;switch(p){case`asc`:return f.toSorted((e,t)=>e.totalCost-t.totalCost);case`desc`:return f.toSorted((e,t)=>t.totalCost-e.totalCost);default:nr(p)}}async function mi(e){return _i(e=>e.date.slice(0,7),e).then(e=>e.map(({bucket:e,...t})=>({month:e,...t})))}async function hi(e){let t=e?.startOfWeek==null?On(`sunday`):On(e.startOfWeek);return _i(e=>Dn(e.date,t),e).then(e=>e.map(({bucket:e,...t})=>({week:e,...t})))}async function gi(e,t){try{var r=T();let i=pr(),a=`${e}.jsonl`,o;for(let e of i)if(o=(await Jr(n.join(e,`projects`))).find(e=>n.basename(e)===a),o!=null)break;if(o==null)return null;let s=t?.mode??`auto`,c=await Kr(s,r.u(s===`display`?null:new J(t?.offline))),l=[],u=0;return await je(o,e=>{try{if(!e.includes(ar))return;let t=Ar(e);if(t==null)return;let n=Gr(t,s);u+=n??c(t),l.push(t)}catch{}}),{totalCost:u,entries:l.filter(e=>e!=null)}}catch(e){r.e=e}finally{r.d()}}async function _i(e,t){let n=await fi(t),r=t?.groupByProject===!0||t?.project!=null,i=new Map;for(let t of n){let n=e(t),a=r?t.project??`unknown`:void 0,o=a==null?n:`${n}\x00${a}`,s=i.get(o);s??(s={bucket:n,project:a,summary:Ir()},i.set(o,s)),s.summary.totals.inputTokens+=t.inputTokens,s.summary.totals.outputTokens+=t.outputTokens,s.summary.totals.cacheCreationTokens+=t.cacheCreationTokens,s.summary.totals.cacheReadTokens+=t.cacheReadTokens,s.summary.totals.cost+=t.totalCost,s.summary.totals.totalCost+=t.totalCost;for(let e of t.modelsUsed)e!==`<synthetic>`&&Fr(s.summary,e);for(let e of t.modelBreakdowns){if(e.modelName===`<synthetic>`)continue;let t=s.summary.modelAggregates[e.modelName];t??(t=Nr(),s.summary.modelAggregates[e.modelName]=t),t.inputTokens+=e.inputTokens,t.outputTokens+=e.outputTokens,t.cacheCreationTokens+=e.cacheCreationTokens,t.cacheReadTokens+=e.cacheReadTokens,t.cost+=e.cost}}return pe(Array.from(i.values(),e=>{let t=Rr(e.summary);return{bucket:Mt(e.bucket),inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheCreationTokens:t.cacheCreationTokens,cacheReadTokens:t.cacheReadTokens,totalCost:t.totalCost,modelsUsed:t.modelsUsed,modelBreakdowns:t.modelBreakdowns,...e.project!=null&&{project:e.project}}}),e=>e.bucket,t?.order)}async function vi(e,t,n=!1){let r;try{r=await he(e)}catch(e){return q.debug(`Failed to read transcript file: ${String(e)}`),null}let i=r.split(`
|
|
12
12
|
`).reverse();for(let e of i){let r=e.trim();if(r!==``)try{let e=ut(Mr,JSON.parse(r));if(!e.success)continue;let i=e.output;if(i.type===`assistant`&&i.message!=null&&i.message.usage!=null&&i.message.usage.input_tokens!=null){let e=i.message.usage,r=e.input_tokens+(e.cache_creation_input_tokens??0)+(e.cache_read_input_tokens??0),o=2e5;if(t!=null&&t!==``)try{var a=T();let e=await a.u(new J(n)).getModelContextLimit(t);ae(e)&&e.value!=null?o=e.value:ae(e)?q.debug(`No context limit data available for model ${t} in LiteLLM`):q.debug(`Failed to get context limit for model ${t}: ${e.error.message}`)}catch(e){a.e=e}finally{a.d()}return{inputTokens:r,percentage:Math.min(100,Math.max(0,Math.round(r/o*100))),contextLimit:o}}}catch{continue}}return q.debug(`No usage information found in transcript`),null}function yi(e,t){if(e.timestampMs==null&&t.timestampMs==null)return fe(e.file,t.file);if(e.timestampMs==null)return 1;if(t.timestampMs==null)return-1;let n=e.timestampMs-t.timestampMs;return n===0?fe(e.file,t.file):n}async function bi(e){let t=(await Yr(ne(e?.claudePath??pr()))).map(e=>e.file);if(t.length===0)return[];let n=await Hr(Br(t,e=>mr(e),e?.project),e=>e,e?.since,e?.minUpdateTime),r=e?.mode??`auto`,i=Tn(e?.timezone),a=[],o=0,s=Zr(),c=({entry:e,uniqueHash:t,tokenTotal:n,hasSpeed:r})=>{if(t==null){a[o++]=e;return}let i=s[t];if(i==null){let i=o++;a[i]=e,s[t]={tokenTotal:n,hasSpeed:r,index:i};return}$({tokenTotal:n,hasSpeed:r},i)&&(a[i.index]=e,s[t]={tokenTotal:n,hasSpeed:r,index:i.index})},l=await ci(`blocks`,n,{mode:r,offline:e?.offline,timezone:e?.timezone,singleThread:e?.singleThread});if(l==null)try{var u=T();let t=await Kr(r,u.u(r===`display`?null:new J(e?.offline))),i=await Ie(n,fr(n.length,e?.singleThread),async e=>di(e,t));i.sort(yi);for(let{entries:e}of i)for(let t of e)c(t)}catch(e){u.e=e}finally{u.d()}else{l.sort(yi);for(let e of l)ai(e,c)}let d=Xn(a,e?.sessionDurationHours);return pe(e?.since!=null&&e.since!==``||e?.until!=null&&e.until!==``?d.filter(t=>{let n=i(t.startTime.toISOString()).replace(/-/g,``);return!(e.since!=null&&e.since!==``&&n<e.since||e.until!=null&&e.until!==``&&n>e.until)}):d,e=>e.startTime,e?.order)}async function xi(e){try{var t=T();let n=t.u(e.mode===`display`?null:new J(e.offline)),r=await Kr(e.mode,n,e.pricing),i=Tn(e.timezone);switch(e.task){case`daily`:{let t=[],n=[];for(let{index:a,item:o}of e.items){let e=$r(await li(o,r,i));n.push(e.numbers.buffer,e.flags.buffer),t.push({index:a,result:e})}f.postMessage({results:t},n);return}case`session`:{let t=[],n=[];for(let{index:i,item:a}of e.items){let o=ni(await ui(a,e.mode,r));n.push(o.numbers.buffer,o.flags.buffer),t.push({index:i,result:o})}f.postMessage({results:t},n);return}case`blocks`:{let t=[],n=[];for(let{index:i,item:a}of e.items){let e=ii(await di(a,r));n.push(e.numbers.buffer,e.flags.buffer),t.push({index:i,result:e})}f.postMessage({results:t},n);return}default:nr(e.task)}}catch(e){t.e=e}finally{t.d()}}!d&&gr(p)&&p.kind===`ccusage:usage-worker`&&xi(p).catch(()=>{r.exit(1)});export{_t as $,Dn as A,fe as At,hn as B,ne as Bt,er as C,Ie as Ct,Ln as D,be as Dt,Wn as E,ye as Et,un as F,se as Ft,Bt as G,Rt as H,_ as Ht,mn as I,oe as It,Nt as J,Vt as K,W as L,b as Lt,yn as M,w as Mt,gn as N,C as Nt,q as O,he as Ot,fn as P,S as Pt,Ft as Q,vn as R,ae as Rt,tr as S,Pe as St,J as T,ve as Tt,zt as U,ee as Ut,Lt as V,te as Vt,B as W,Dt as X,Pt as Y,Ct as Z,hr as _,$e as _t,pr as a,nt as at,nr as b,Le as bt,_i as c,A as ct,bi as d,N as dt,ht as et,pi as f,P as ft,jr as g,F as gt,Mr as h,ut as ht,mr as i,Ye as it,dn as j,ue as jt,Rn as k,T as kt,fi as l,Qe as lt,hi as m,I as mt,Jr as n,it as nt,qr as o,Xe as ot,gi as p,lt as pt,V as q,Ur as r,k as rt,Yr as s,Ze as st,vi as t,vt as tt,mi as u,M as ut,ir as v,et as vt,qn as w,Me as wt,$n as x,Ne as xt,rr as y,ct as yt,_n as z,v as zt};
|
|
13
|
-
//# sourceMappingURL=data-loader-
|
|
13
|
+
//# sourceMappingURL=data-loader-CIF4fWUu.js.map
|
package/dist/data-loader.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./data-loader-
|
|
1
|
+
import"./data-loader-CIF4fWUu.js";export{};
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
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-
|
|
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(`
|
|
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-CIF4fWUu.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}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
2
|
`)}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
3
|
`).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
4
|
`)}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(`
|
|
@@ -18,4 +13,4 @@ function Mt(e){return e.replace(/[A-Z]/g,(e,t)=>(t>0?`-`:``)+e.toLowerCase())}fu
|
|
|
18
13
|
=== 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
14
|
=== 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
15
|
=== 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-
|
|
16
|
+
//# sourceMappingURL=main-CJa_EO_y.js.map
|
package/dist/main.bun.js
CHANGED
package/dist/main.node.js
CHANGED