opencode-usage 0.2.3 → 0.2.4

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/dist/cli.d.ts CHANGED
@@ -8,5 +8,6 @@ export type CliArgs = {
8
8
  until?: string;
9
9
  json?: boolean;
10
10
  monthly?: boolean;
11
+ watch?: boolean;
11
12
  };
12
13
  export declare function parseArgs(): CliArgs;
package/dist/index.d.ts CHANGED
@@ -8,5 +8,6 @@
8
8
  * bunx opencode-usage --days 30
9
9
  * bunx opencode-usage --since 20251201 --until 20251231
10
10
  * bunx opencode-usage --monthly --json
11
+ * bunx opencode-usage --watch
11
12
  */
12
13
  export {};
package/dist/index.js CHANGED
@@ -45,6 +45,7 @@ function parseArgs() {
45
45
  until: { type: "string", short: "u" },
46
46
  json: { type: "boolean", short: "j" },
47
47
  monthly: { type: "boolean", short: "m" },
48
+ watch: { type: "boolean", short: "w" },
48
49
  help: { type: "boolean", short: "h" }
49
50
  },
50
51
  strict: true
@@ -59,7 +60,8 @@ function parseArgs() {
59
60
  since: parseDate(values.since ?? ""),
60
61
  until: parseDate(values.until ?? ""),
61
62
  json: values.json,
62
- monthly: values.monthly
63
+ monthly: values.monthly,
64
+ watch: values.watch
63
65
  };
64
66
  } catch (error) {
65
67
  if (error instanceof Error && error.message.includes("Unknown option")) {
@@ -84,6 +86,7 @@ Options:
84
86
  -u, --until <date> End date (YYYYMMDD, YYYY-MM-DD, or 7d/1w/1m)
85
87
  -j, --json Output as JSON
86
88
  -m, --monthly Aggregate by month instead of day
89
+ -w, --watch Watch mode - refresh every 5 seconds
87
90
  -h, --help Show this help message
88
91
 
89
92
  Examples:
@@ -93,6 +96,8 @@ Examples:
93
96
  bunx opencode-usage --since 20251201 --until 20251231
94
97
  bunx opencode-usage --since 7d
95
98
  bunx opencode-usage --monthly --json
99
+ bunx opencode-usage --watch
100
+ bunx opencode-usage -w -d 1
96
101
  `);
97
102
  }
98
103
 
@@ -610,9 +615,12 @@ No usage data found.
610
615
  }
611
616
 
612
617
  // src/index.ts
613
- async function main() {
614
- const { provider, days, since, until, json, monthly } = parseArgs();
615
- const storagePath = getOpenCodeStoragePath();
618
+ var WATCH_INTERVAL_MS = 5000;
619
+ function clearScreen() {
620
+ process.stdout.write("\x1B[2J\x1B[H");
621
+ }
622
+ async function renderUsage(options) {
623
+ const { storagePath, provider, days, since, until, json, monthly, watch } = options;
616
624
  if (!json) {
617
625
  console.log(`
618
626
  Loading OpenCode usage data from: ${storagePath}`);
@@ -650,9 +658,36 @@ Loading OpenCode usage data from: ${storagePath}`);
650
658
  renderJson(stats);
651
659
  } else {
652
660
  renderTable(stats);
661
+ if (watch) {
662
+ console.log(`[Watch mode] Refreshing every ${WATCH_INTERVAL_MS / 1000}s - Press Ctrl+C to exit`);
663
+ }
664
+ }
665
+ }
666
+ async function main() {
667
+ const { provider, days, since, until, json, monthly, watch } = parseArgs();
668
+ const storagePath = getOpenCodeStoragePath();
669
+ const options = {
670
+ storagePath,
671
+ provider,
672
+ days,
673
+ since,
674
+ until,
675
+ json,
676
+ monthly,
677
+ watch
678
+ };
679
+ if (watch) {
680
+ const runWatch = async () => {
681
+ clearScreen();
682
+ await renderUsage(options);
683
+ };
684
+ await runWatch();
685
+ setInterval(runWatch, WATCH_INTERVAL_MS);
686
+ } else {
687
+ await renderUsage(options);
653
688
  }
654
689
  }
655
690
  main().catch(console.error);
656
691
 
657
- //# debugId=7C3502176104518264756E2164756E21
692
+ //# debugId=8F9875F65C88E74C64756E2164756E21
658
693
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -2,14 +2,14 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/cli.ts", "../src/loader.ts", "../src/pricing.ts", "../src/aggregator.ts", "../src/renderer.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * CLI argument parser using Node.js parseArgs (works with both Bun and Node.js)\n */\n\nimport { parseArgs as nodeParseArgs } from \"node:util\";\n\nexport type CliArgs = {\n provider?: string;\n days?: number;\n since?: string;\n until?: string;\n json?: boolean;\n monthly?: boolean;\n};\n\n// Get CLI args - works with both Bun and Node.js\nfunction getArgs(): string[] {\n if (typeof globalThis.Bun !== \"undefined\") {\n return Bun.argv.slice(2);\n }\n return process.argv.slice(2);\n}\n\n/**\n * Parse date string in formats: YYYYMMDD, YYYY-MM-DD, or relative like \"7d\", \"1w\", \"1m\"\n */\nfunction parseDate(value: string): string | undefined {\n if (!value) return undefined;\n\n // Relative date: 7d, 1w, 1m\n const relativeMatch = value.match(/^(\\d+)([dwm])$/);\n if (relativeMatch) {\n const num = parseInt(relativeMatch[1], 10);\n const unit = relativeMatch[2];\n const date = new Date();\n if (unit === \"d\") date.setDate(date.getDate() - num);\n else if (unit === \"w\") date.setDate(date.getDate() - num * 7);\n else if (unit === \"m\") date.setMonth(date.getMonth() - num);\n return date.toISOString().split(\"T\")[0];\n }\n\n // YYYYMMDD format\n if (/^\\d{8}$/.test(value)) {\n return `${value.slice(0, 4)}-${value.slice(4, 6)}-${value.slice(6, 8)}`;\n }\n\n // YYYY-MM-DD format\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n return value;\n }\n\n console.error(\n `Invalid date format: ${value}. Use YYYYMMDD, YYYY-MM-DD, or relative (7d, 1w, 1m)`\n );\n process.exit(1);\n}\n\nexport function parseArgs(): CliArgs {\n try {\n const { values } = nodeParseArgs({\n args: getArgs(),\n options: {\n provider: { type: \"string\", short: \"p\" },\n days: { type: \"string\", short: \"d\" },\n since: { type: \"string\", short: \"s\" },\n until: { type: \"string\", short: \"u\" },\n json: { type: \"boolean\", short: \"j\" },\n monthly: { type: \"boolean\", short: \"m\" },\n help: { type: \"boolean\", short: \"h\" },\n },\n strict: true,\n });\n\n if (values.help) {\n printHelp();\n process.exit(0);\n }\n\n return {\n provider: values.provider?.toLowerCase(),\n days: values.days ? parseInt(values.days, 10) : undefined,\n since: parseDate(values.since ?? \"\"),\n until: parseDate(values.until ?? \"\"),\n json: values.json,\n monthly: values.monthly,\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Unknown option\")) {\n console.error(`Error: ${error.message}`);\n printHelp();\n process.exit(1);\n }\n throw error;\n }\n}\n\nfunction printHelp(): void {\n console.log(`\nopencode-usage - Track OpenCode AI coding assistant usage and costs\n\nUsage:\n bunx opencode-usage [options]\n\nOptions:\n -p, --provider <name> Filter by provider (anthropic, openai, google, opencode)\n -d, --days <n> Show only last N days\n -s, --since <date> Start date (YYYYMMDD, YYYY-MM-DD, or 7d/1w/1m)\n -u, --until <date> End date (YYYYMMDD, YYYY-MM-DD, or 7d/1w/1m)\n -j, --json Output as JSON\n -m, --monthly Aggregate by month instead of day\n -h, --help Show this help message\n\nExamples:\n bunx opencode-usage\n bunx opencode-usage --provider anthropic\n bunx opencode-usage -p openai -d 30\n bunx opencode-usage --since 20251201 --until 20251231\n bunx opencode-usage --since 7d\n bunx opencode-usage --monthly --json\n`);\n}\n",
5
+ "/**\n * CLI argument parser using Node.js parseArgs (works with both Bun and Node.js)\n */\n\nimport { parseArgs as nodeParseArgs } from \"node:util\";\n\nexport type CliArgs = {\n provider?: string;\n days?: number;\n since?: string;\n until?: string;\n json?: boolean;\n monthly?: boolean;\n watch?: boolean;\n};\n\n// Get CLI args - works with both Bun and Node.js\nfunction getArgs(): string[] {\n if (typeof globalThis.Bun !== \"undefined\") {\n return Bun.argv.slice(2);\n }\n return process.argv.slice(2);\n}\n\n/**\n * Parse date string in formats: YYYYMMDD, YYYY-MM-DD, or relative like \"7d\", \"1w\", \"1m\"\n */\nfunction parseDate(value: string): string | undefined {\n if (!value) return undefined;\n\n // Relative date: 7d, 1w, 1m\n const relativeMatch = value.match(/^(\\d+)([dwm])$/);\n if (relativeMatch) {\n const num = parseInt(relativeMatch[1], 10);\n const unit = relativeMatch[2];\n const date = new Date();\n if (unit === \"d\") date.setDate(date.getDate() - num);\n else if (unit === \"w\") date.setDate(date.getDate() - num * 7);\n else if (unit === \"m\") date.setMonth(date.getMonth() - num);\n return date.toISOString().split(\"T\")[0];\n }\n\n // YYYYMMDD format\n if (/^\\d{8}$/.test(value)) {\n return `${value.slice(0, 4)}-${value.slice(4, 6)}-${value.slice(6, 8)}`;\n }\n\n // YYYY-MM-DD format\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n return value;\n }\n\n console.error(\n `Invalid date format: ${value}. Use YYYYMMDD, YYYY-MM-DD, or relative (7d, 1w, 1m)`\n );\n process.exit(1);\n}\n\nexport function parseArgs(): CliArgs {\n try {\n const { values } = nodeParseArgs({\n args: getArgs(),\n options: {\n provider: { type: \"string\", short: \"p\" },\n days: { type: \"string\", short: \"d\" },\n since: { type: \"string\", short: \"s\" },\n until: { type: \"string\", short: \"u\" },\n json: { type: \"boolean\", short: \"j\" },\n monthly: { type: \"boolean\", short: \"m\" },\n watch: { type: \"boolean\", short: \"w\" },\n help: { type: \"boolean\", short: \"h\" },\n },\n strict: true,\n });\n\n if (values.help) {\n printHelp();\n process.exit(0);\n }\n\n return {\n provider: values.provider?.toLowerCase(),\n days: values.days ? parseInt(values.days, 10) : undefined,\n since: parseDate(values.since ?? \"\"),\n until: parseDate(values.until ?? \"\"),\n json: values.json,\n monthly: values.monthly,\n watch: values.watch,\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Unknown option\")) {\n console.error(`Error: ${error.message}`);\n printHelp();\n process.exit(1);\n }\n throw error;\n }\n}\n\nfunction printHelp(): void {\n console.log(`\nopencode-usage - Track OpenCode AI coding assistant usage and costs\n\nUsage:\n bunx opencode-usage [options]\n\nOptions:\n -p, --provider <name> Filter by provider (anthropic, openai, google, opencode)\n -d, --days <n> Show only last N days\n -s, --since <date> Start date (YYYYMMDD, YYYY-MM-DD, or 7d/1w/1m)\n -u, --until <date> End date (YYYYMMDD, YYYY-MM-DD, or 7d/1w/1m)\n -j, --json Output as JSON\n -m, --monthly Aggregate by month instead of day\n -w, --watch Watch mode - refresh every 5 seconds\n -h, --help Show this help message\n\nExamples:\n bunx opencode-usage\n bunx opencode-usage --provider anthropic\n bunx opencode-usage -p openai -d 30\n bunx opencode-usage --since 20251201 --until 20251231\n bunx opencode-usage --since 7d\n bunx opencode-usage --monthly --json\n bunx opencode-usage --watch\n bunx opencode-usage -w -d 1\n`);\n}\n",
6
6
  "import { readdir, stat, readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { MessageJson } from \"./types.js\";\n\nconst isBun = typeof globalThis.Bun !== \"undefined\";\nconst BATCH_SIZE = 10000;\n\nexport function getOpenCodeStoragePath(): string {\n const xdgDataHome =\n process.env.XDG_DATA_HOME ?? join(homedir(), \".local\", \"share\");\n return join(xdgDataHome, \"opencode\", \"storage\");\n}\n\nasync function readJsonFile(filePath: string): Promise<MessageJson> {\n const content = isBun\n ? await Bun.file(filePath).text()\n : await readFile(filePath, \"utf-8\");\n return JSON.parse(content) as MessageJson;\n}\n\nasync function collectFilePaths(messagesDir: string): Promise<string[]> {\n const sessionDirs = await readdir(messagesDir);\n\n const pathArrays = await Promise.all(\n sessionDirs.map(async (sessionDir) => {\n const sessionPath = join(messagesDir, sessionDir);\n const st = await stat(sessionPath);\n if (!st.isDirectory()) return [];\n\n const files = await readdir(sessionPath);\n return files\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => join(sessionPath, f));\n })\n );\n\n return pathArrays.flat();\n}\n\nasync function processInBatches<T, R>(\n items: T[],\n fn: (item: T) => Promise<R>,\n batchSize: number\n): Promise<R[]> {\n const results: R[] = [];\n for (let i = 0; i < items.length; i += batchSize) {\n const batch = items.slice(i, i + batchSize);\n const batchResults = await Promise.all(batch.map(fn));\n results.push(...batchResults);\n }\n return results;\n}\n\nexport async function loadMessages(\n storagePath: string,\n providerFilter?: string\n): Promise<MessageJson[]> {\n const messagesDir = join(storagePath, \"message\");\n\n try {\n const filePaths = await collectFilePaths(messagesDir);\n\n const results = await processInBatches(\n filePaths,\n async (filePath) => {\n try {\n return await readJsonFile(filePath);\n } catch {\n return null;\n }\n },\n BATCH_SIZE\n );\n\n return results.filter((msg): msg is MessageJson => {\n if (!msg) return false;\n if (msg.role === \"user\") return false;\n if (!msg.tokens) return false;\n\n if (providerFilter) {\n const providerId = msg.model?.providerID ?? msg.providerID ?? \"unknown\";\n if (providerId.toLowerCase() !== providerFilter) return false;\n }\n\n return true;\n });\n } catch (err) {\n console.error(`Error reading messages directory: ${err}`);\n return [];\n }\n}\n",
7
7
  "/**\n * Model pricing configuration (per million tokens)\n */\n\nimport type { ModelPricing, TokenUsage } from \"./types\";\n\nexport const MODEL_PRICING: Record<string, ModelPricing> = {\n // Anthropic - Current Models\n \"claude-opus-4-5\": {\n input: 5,\n output: 25,\n cacheWrite: 6.25,\n cacheRead: 0.5,\n },\n \"claude-sonnet-4-5\": {\n input: 3,\n output: 15,\n cacheWrite: 3.75,\n cacheRead: 0.3,\n },\n \"claude-haiku-4-5\": {\n input: 1,\n output: 5,\n cacheWrite: 1.25,\n cacheRead: 0.1,\n },\n \"claude-opus-4\": {\n input: 15,\n output: 75,\n cacheWrite: 18.75,\n cacheRead: 1.5,\n },\n \"claude-sonnet-4\": {\n input: 3,\n output: 15,\n cacheWrite: 3.75,\n cacheRead: 0.3,\n },\n \"claude-opus-4-1\": {\n input: 15,\n output: 75,\n cacheWrite: 18.75,\n cacheRead: 1.5,\n },\n \"claude-opus-3\": {\n input: 15,\n output: 75,\n cacheWrite: 18.75,\n cacheRead: 1.5,\n },\n \"claude-haiku-3\": {\n input: 0.25,\n output: 1.25,\n cacheWrite: 0.3,\n cacheRead: 0.03,\n },\n\n // OpenAI Models\n \"gpt-4o\": {\n input: 2.5,\n output: 10,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"gpt-4o-mini\": {\n input: 0.15,\n output: 0.6,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"gpt-4-turbo\": {\n input: 10,\n output: 30,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"gpt-5\": {\n input: 5,\n output: 15,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"gpt-5.2\": {\n input: 5,\n output: 15,\n cacheWrite: 0,\n cacheRead: 0,\n },\n o1: {\n input: 15,\n output: 60,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"o1-mini\": {\n input: 3,\n output: 12,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"o1-pro\": {\n input: 150,\n output: 600,\n cacheWrite: 0,\n cacheRead: 0,\n },\n o3: {\n input: 10,\n output: 40,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"o3-mini\": {\n input: 1.1,\n output: 4.4,\n cacheWrite: 0,\n cacheRead: 0,\n },\n\n // Google Models\n \"gemini-2.0-flash\": {\n input: 0.1,\n output: 0.4,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"gemini-2.5-pro\": {\n input: 1.25,\n output: 10,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"gemini-2.5-flash\": {\n input: 0.15,\n output: 0.6,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"gemini-3-flash-preview\": {\n input: 0.15,\n output: 0.6,\n cacheWrite: 0,\n cacheRead: 0,\n },\n\n // Free/OpenCode hosted models\n \"qwen3-coder\": {\n input: 0,\n output: 0,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"glm-4.7-free\": {\n input: 0,\n output: 0,\n cacheWrite: 0,\n cacheRead: 0,\n },\n \"minimax-m2.1-free\": {\n input: 0,\n output: 0,\n cacheWrite: 0,\n cacheRead: 0,\n },\n};\n\nconst DEFAULT_PRICING: ModelPricing = {\n input: 3,\n output: 15,\n cacheWrite: 3.75,\n cacheRead: 0.3,\n};\n\nexport function getModelPricing(modelId: string): ModelPricing {\n const normalized = modelId.toLowerCase().replace(/_/g, \"-\");\n\n if (MODEL_PRICING[normalized]) {\n return MODEL_PRICING[normalized];\n }\n\n for (const [key, pricing] of Object.entries(MODEL_PRICING)) {\n if (normalized.includes(key) || key.includes(normalized)) {\n return pricing;\n }\n }\n\n return DEFAULT_PRICING;\n}\n\nexport function calculateCost(tokens: TokenUsage, modelId: string): number {\n const pricing = getModelPricing(modelId);\n\n const inputCost = (tokens.input / 1_000_000) * pricing.input;\n const outputCost = (tokens.output / 1_000_000) * pricing.output;\n const cacheWriteCost = (tokens.cache.write / 1_000_000) * pricing.cacheWrite;\n const cacheReadCost = (tokens.cache.read / 1_000_000) * pricing.cacheRead;\n const reasoningCost = (tokens.reasoning / 1_000_000) * pricing.output;\n\n return (\n inputCost + outputCost + cacheWriteCost + cacheReadCost + reasoningCost\n );\n}\n",
8
8
  "/**\n * Data aggregation functions\n */\n\nimport type { DailyStats, MessageJson } from \"./types.js\";\nimport { calculateCost } from \"./pricing\";\n\nfunction timestampToDate(timestamp: number): string {\n return new Date(timestamp).toISOString().split(\"T\")[0];\n}\n\nexport function aggregateByDate(\n messages: MessageJson[]\n): Map<string, DailyStats> {\n const dailyStats = new Map<string, DailyStats>();\n\n for (const msg of messages) {\n const timestamp = msg.time?.created ?? msg.time?.completed;\n if (!timestamp) continue;\n\n const date = timestampToDate(timestamp);\n const modelId = msg.model?.modelID ?? msg.modelID ?? \"unknown\";\n const providerId = msg.model?.providerID ?? msg.providerID ?? \"unknown\";\n const tokens = msg.tokens!;\n const msgCost = calculateCost(tokens, modelId);\n\n let stats = dailyStats.get(date);\n if (!stats) {\n stats = {\n date,\n models: new Set(),\n providers: new Set(),\n providerStats: new Map(),\n input: 0,\n output: 0,\n cacheWrite: 0,\n cacheRead: 0,\n reasoning: 0,\n cost: 0,\n };\n dailyStats.set(date, stats);\n }\n\n // Update daily totals\n stats.models.add(modelId);\n stats.providers.add(providerId);\n stats.input += tokens.input ?? 0;\n stats.output += tokens.output ?? 0;\n stats.cacheWrite += tokens.cache?.write ?? 0;\n stats.cacheRead += tokens.cache?.read ?? 0;\n stats.reasoning += tokens.reasoning ?? 0;\n stats.cost += msgCost;\n\n // Update provider-specific stats\n let providerStat = stats.providerStats.get(providerId);\n if (!providerStat) {\n providerStat = {\n input: 0,\n output: 0,\n cacheWrite: 0,\n cacheRead: 0,\n reasoning: 0,\n cost: 0,\n models: new Set(),\n };\n stats.providerStats.set(providerId, providerStat);\n }\n providerStat.models.add(modelId);\n providerStat.input += tokens.input ?? 0;\n providerStat.output += tokens.output ?? 0;\n providerStat.cacheWrite += tokens.cache?.write ?? 0;\n providerStat.cacheRead += tokens.cache?.read ?? 0;\n providerStat.reasoning += tokens.reasoning ?? 0;\n providerStat.cost += msgCost;\n }\n\n return dailyStats;\n}\n\nexport function filterByDays(\n dailyStats: Map<string, DailyStats>,\n days: number\n): Map<string, DailyStats> {\n const cutoffDate = new Date();\n cutoffDate.setDate(cutoffDate.getDate() - days);\n const cutoffStr = cutoffDate.toISOString().split(\"T\")[0];\n\n const filtered = new Map<string, DailyStats>();\n for (const [date, stats] of dailyStats) {\n if (date >= cutoffStr) {\n filtered.set(date, stats);\n }\n }\n return filtered;\n}\n\nexport function filterByDateRange(\n dailyStats: Map<string, DailyStats>,\n since?: string,\n until?: string\n): Map<string, DailyStats> {\n const filtered = new Map<string, DailyStats>();\n for (const [date, stats] of dailyStats) {\n if (since && date < since) continue;\n if (until && date > until) continue;\n filtered.set(date, stats);\n }\n return filtered;\n}\n\nfunction dateToMonth(date: string): string {\n return date.slice(0, 7); // YYYY-MM\n}\n\nexport function aggregateByMonth(\n dailyStats: Map<string, DailyStats>\n): Map<string, DailyStats> {\n const monthlyStats = new Map<string, DailyStats>();\n\n for (const [date, stats] of dailyStats) {\n const month = dateToMonth(date);\n\n let monthStats = monthlyStats.get(month);\n if (!monthStats) {\n monthStats = {\n date: month,\n models: new Set(),\n providers: new Set(),\n providerStats: new Map(),\n input: 0,\n output: 0,\n cacheWrite: 0,\n cacheRead: 0,\n reasoning: 0,\n cost: 0,\n };\n monthlyStats.set(month, monthStats);\n }\n\n // Merge models and providers\n for (const model of stats.models) monthStats.models.add(model);\n for (const provider of stats.providers) monthStats.providers.add(provider);\n\n // Sum totals\n monthStats.input += stats.input;\n monthStats.output += stats.output;\n monthStats.cacheWrite += stats.cacheWrite;\n monthStats.cacheRead += stats.cacheRead;\n monthStats.reasoning += stats.reasoning;\n monthStats.cost += stats.cost;\n\n // Merge provider stats\n for (const [providerId, providerStat] of stats.providerStats) {\n let monthProviderStat = monthStats.providerStats.get(providerId);\n if (!monthProviderStat) {\n monthProviderStat = {\n input: 0,\n output: 0,\n cacheWrite: 0,\n cacheRead: 0,\n reasoning: 0,\n cost: 0,\n models: new Set(),\n };\n monthStats.providerStats.set(providerId, monthProviderStat);\n }\n for (const model of providerStat.models)\n monthProviderStat.models.add(model);\n monthProviderStat.input += providerStat.input;\n monthProviderStat.output += providerStat.output;\n monthProviderStat.cacheWrite += providerStat.cacheWrite;\n monthProviderStat.cacheRead += providerStat.cacheRead;\n monthProviderStat.reasoning += providerStat.reasoning;\n monthProviderStat.cost += providerStat.cost;\n }\n }\n\n return monthlyStats;\n}\n",
9
9
  "/**\n * Terminal table renderer\n */\n\nimport type { DailyStats } from \"./types\";\n\nfunction formatNumber(num: number): string {\n return num.toLocaleString(\"en-US\");\n}\n\nfunction formatCost(cost: number): string {\n return `$${cost.toFixed(2)}`;\n}\n\nfunction padRight(str: string, len: number): string {\n return str.padEnd(len);\n}\n\nfunction padLeft(str: string, len: number): string {\n return str.padStart(len);\n}\n\nexport type JsonOutput = {\n periods: Array<{\n date: string;\n models: string[];\n providers: Array<{\n id: string;\n models: string[];\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n reasoning: number;\n cost: number;\n }>;\n totals: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n reasoning: number;\n cost: number;\n };\n }>;\n totals: {\n input: number;\n output: number;\n cost: number;\n };\n};\n\nexport function renderJson(dailyStats: Map<string, DailyStats>): void {\n const sortedDates = Array.from(dailyStats.keys()).sort((a, b) =>\n a.localeCompare(b)\n );\n\n let totalInput = 0;\n let totalOutput = 0;\n let totalCost = 0;\n\n const periods = sortedDates.map((date) => {\n const stats = dailyStats.get(date)!;\n const combinedInput = stats.input + stats.cacheRead + stats.cacheWrite;\n\n totalInput += combinedInput;\n totalOutput += stats.output;\n totalCost += stats.cost;\n\n const providers = Array.from(stats.providerStats.entries())\n .sort((a, b) => b[1].cost - a[1].cost)\n .map(([id, ps]) => ({\n id,\n models: Array.from(ps.models).sort(),\n input: ps.input,\n output: ps.output,\n cacheRead: ps.cacheRead,\n cacheWrite: ps.cacheWrite,\n reasoning: ps.reasoning,\n cost: Math.round(ps.cost * 100) / 100,\n }));\n\n return {\n date,\n models: Array.from(stats.models).sort(),\n providers,\n totals: {\n input: stats.input,\n output: stats.output,\n cacheRead: stats.cacheRead,\n cacheWrite: stats.cacheWrite,\n reasoning: stats.reasoning,\n cost: Math.round(stats.cost * 100) / 100,\n },\n };\n });\n\n const output: JsonOutput = {\n periods,\n totals: {\n input: totalInput,\n output: totalOutput,\n cost: Math.round(totalCost * 100) / 100,\n },\n };\n\n console.log(JSON.stringify(output, null, 2));\n}\n\nexport function renderTable(dailyStats: Map<string, DailyStats>): void {\n const sortedDates = Array.from(dailyStats.keys()).sort((a, b) =>\n a.localeCompare(b)\n );\n\n if (sortedDates.length === 0) {\n console.log(\"\\nNo usage data found.\\n\");\n return;\n }\n\n // Column widths\n const colDate = 12;\n const colModels = 35;\n const colInput = 16;\n const colOutput = 14;\n const colTotal = 16;\n const colCost = 12;\n\n // Border characters\n const h = \"\\u2500\";\n const v = \"\\u2502\";\n const tl = \"\\u250C\";\n const tr = \"\\u2510\";\n const bl = \"\\u2514\";\n const br = \"\\u2518\";\n const ml = \"\\u251C\";\n const mr = \"\\u2524\";\n const mt = \"\\u252C\";\n const mb = \"\\u2534\";\n const mm = \"\\u253C\";\n\n const topLine =\n tl +\n h.repeat(colDate) +\n mt +\n h.repeat(colModels) +\n mt +\n h.repeat(colInput) +\n mt +\n h.repeat(colOutput) +\n mt +\n h.repeat(colTotal) +\n mt +\n h.repeat(colCost) +\n tr;\n\n const midLine =\n ml +\n h.repeat(colDate) +\n mm +\n h.repeat(colModels) +\n mm +\n h.repeat(colInput) +\n mm +\n h.repeat(colOutput) +\n mm +\n h.repeat(colTotal) +\n mm +\n h.repeat(colCost) +\n mr;\n\n const bottomLine =\n bl +\n h.repeat(colDate) +\n mb +\n h.repeat(colModels) +\n mb +\n h.repeat(colInput) +\n mb +\n h.repeat(colOutput) +\n mb +\n h.repeat(colTotal) +\n mb +\n h.repeat(colCost) +\n br;\n\n const header =\n v +\n padRight(\" Date\", colDate) +\n v +\n padRight(\" Models\", colModels) +\n v +\n padLeft(\"Input \", colInput) +\n v +\n padLeft(\"Output \", colOutput) +\n v +\n padLeft(\"Total Tokens \", colTotal) +\n v +\n padLeft(\"Cost \", colCost) +\n v;\n\n console.log(\"\\n\" + topLine);\n console.log(header);\n console.log(midLine);\n\n let totalInput = 0;\n let totalOutput = 0;\n let totalCost = 0;\n\n for (const date of sortedDates) {\n const stats = dailyStats.get(date)!;\n const models = Array.from(stats.models).sort();\n\n const combinedInput = stats.input + stats.cacheRead + stats.cacheWrite;\n const totalTokens = combinedInput + stats.output;\n\n totalInput += combinedInput;\n totalOutput += stats.output;\n totalCost += stats.cost;\n\n const firstModel = models[0] ? `- ${models[0]}` : \"\";\n console.log(\n v +\n padRight(` ${date}`, colDate) +\n v +\n padRight(` ${firstModel}`, colModels) +\n v +\n padLeft(`${formatNumber(combinedInput)} `, colInput) +\n v +\n padLeft(`${formatNumber(stats.output)} `, colOutput) +\n v +\n padLeft(`${formatNumber(totalTokens)} `, colTotal) +\n v +\n padLeft(`${formatCost(stats.cost)} `, colCost) +\n v\n );\n\n for (let i = 1; i < models.length; i++) {\n console.log(\n v +\n \" \".repeat(colDate) +\n v +\n padRight(` - ${models[i]}`, colModels) +\n v +\n \" \".repeat(colInput) +\n v +\n \" \".repeat(colOutput) +\n v +\n \" \".repeat(colTotal) +\n v +\n \" \".repeat(colCost) +\n v\n );\n }\n\n const providers = Array.from(stats.providerStats.entries()).sort(\n (a, b) => b[1].cost - a[1].cost\n );\n\n for (const [providerId, providerStat] of providers) {\n const providerInput =\n providerStat.input + providerStat.cacheRead + providerStat.cacheWrite;\n const providerTokens = providerInput + providerStat.output;\n console.log(\n v +\n \" \".repeat(colDate) +\n v +\n padRight(` [${providerId}]`, colModels) +\n v +\n padLeft(`${formatNumber(providerInput)} `, colInput) +\n v +\n padLeft(`${formatNumber(providerStat.output)} `, colOutput) +\n v +\n padLeft(`${formatNumber(providerTokens)} `, colTotal) +\n v +\n padLeft(`${formatCost(providerStat.cost)} `, colCost) +\n v\n );\n }\n\n console.log(midLine);\n }\n\n const grandTotal = totalInput + totalOutput;\n console.log(\n v +\n padRight(\" Total\", colDate) +\n v +\n \" \".repeat(colModels) +\n v +\n padLeft(`${formatNumber(totalInput)} `, colInput) +\n v +\n padLeft(`${formatNumber(totalOutput)} `, colOutput) +\n v +\n padLeft(`${formatNumber(grandTotal)} `, colTotal) +\n v +\n padLeft(`${formatCost(totalCost)} `, colCost) +\n v\n );\n console.log(bottomLine);\n console.log();\n}\n",
10
- "#!/usr/bin/env node\n/**\n * OpenCode Usage - CLI tool for tracking OpenCode AI usage and costs\n *\n * Usage:\n * bunx opencode-usage\n * bunx opencode-usage --provider anthropic\n * bunx opencode-usage --days 30\n * bunx opencode-usage --since 20251201 --until 20251231\n * bunx opencode-usage --monthly --json\n */\n\nimport { parseArgs } from \"./cli.js\";\nimport { getOpenCodeStoragePath, loadMessages } from \"./loader.js\";\nimport {\n aggregateByDate,\n aggregateByMonth,\n filterByDays,\n filterByDateRange,\n} from \"./aggregator.js\";\nimport { renderTable, renderJson } from \"./renderer.js\";\n\nasync function main(): Promise<void> {\n const { provider, days, since, until, json, monthly } = parseArgs();\n const storagePath = getOpenCodeStoragePath();\n\n if (!json) {\n console.log(`\\nLoading OpenCode usage data from: ${storagePath}`);\n if (provider) {\n console.log(`Filtering: ${provider} provider only`);\n }\n }\n\n const messages = await loadMessages(storagePath, provider);\n\n if (!json) {\n console.log(`Found ${messages.length} assistant messages with token data`);\n }\n\n let stats = aggregateByDate(messages);\n\n // Apply date filters\n if (days) {\n stats = filterByDays(stats, days);\n if (!json) console.log(`Showing last ${days} days`);\n }\n\n if (since || until) {\n stats = filterByDateRange(stats, since, until);\n if (!json) {\n if (since && until) console.log(`Date range: ${since} to ${until}`);\n else if (since) console.log(`From: ${since}`);\n else if (until) console.log(`Until: ${until}`);\n }\n }\n\n // Aggregate by month if requested\n if (monthly) {\n stats = aggregateByMonth(stats);\n if (!json) console.log(`Aggregated by month`);\n }\n\n // Render output\n if (json) {\n renderJson(stats);\n } else {\n renderTable(stats);\n }\n}\n\nmain().catch(console.error);\n"
10
+ "#!/usr/bin/env node\n/**\n * OpenCode Usage - CLI tool for tracking OpenCode AI usage and costs\n *\n * Usage:\n * bunx opencode-usage\n * bunx opencode-usage --provider anthropic\n * bunx opencode-usage --days 30\n * bunx opencode-usage --since 20251201 --until 20251231\n * bunx opencode-usage --monthly --json\n * bunx opencode-usage --watch\n */\n\nimport { parseArgs } from \"./cli.js\";\nimport { getOpenCodeStoragePath, loadMessages } from \"./loader.js\";\nimport {\n aggregateByDate,\n aggregateByMonth,\n filterByDays,\n filterByDateRange,\n} from \"./aggregator.js\";\nimport { renderTable, renderJson } from \"./renderer.js\";\n\nconst WATCH_INTERVAL_MS = 5000;\n\nfunction clearScreen(): void {\n process.stdout.write(\"\\x1b[2J\\x1b[H\");\n}\n\nasync function renderUsage(options: {\n storagePath: string;\n provider?: string;\n days?: number;\n since?: string;\n until?: string;\n json?: boolean;\n monthly?: boolean;\n watch?: boolean;\n}): Promise<void> {\n const { storagePath, provider, days, since, until, json, monthly, watch } =\n options;\n\n if (!json) {\n console.log(`\\nLoading OpenCode usage data from: ${storagePath}`);\n if (provider) {\n console.log(`Filtering: ${provider} provider only`);\n }\n }\n\n const messages = await loadMessages(storagePath, provider);\n\n if (!json) {\n console.log(`Found ${messages.length} assistant messages with token data`);\n }\n\n let stats = aggregateByDate(messages);\n\n // Apply date filters\n if (days) {\n stats = filterByDays(stats, days);\n if (!json) console.log(`Showing last ${days} days`);\n }\n\n if (since || until) {\n stats = filterByDateRange(stats, since, until);\n if (!json) {\n if (since && until) console.log(`Date range: ${since} to ${until}`);\n else if (since) console.log(`From: ${since}`);\n else if (until) console.log(`Until: ${until}`);\n }\n }\n\n // Aggregate by month if requested\n if (monthly) {\n stats = aggregateByMonth(stats);\n if (!json) console.log(`Aggregated by month`);\n }\n\n // Render output\n if (json) {\n renderJson(stats);\n } else {\n renderTable(stats);\n if (watch) {\n console.log(\n `[Watch mode] Refreshing every ${WATCH_INTERVAL_MS / 1000}s - Press Ctrl+C to exit`\n );\n }\n }\n}\n\nasync function main(): Promise<void> {\n const { provider, days, since, until, json, monthly, watch } = parseArgs();\n const storagePath = getOpenCodeStoragePath();\n\n const options = {\n storagePath,\n provider,\n days,\n since,\n until,\n json,\n monthly,\n watch,\n };\n\n if (watch) {\n const runWatch = async () => {\n clearScreen();\n await renderUsage(options);\n };\n\n await runWatch();\n setInterval(runWatch, WATCH_INTERVAL_MS);\n } else {\n await renderUsage(options);\n }\n}\n\nmain().catch(console.error);\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "7C3502176104518264756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "8F9875F65C88E74C64756E2164756E21",
14
14
  "names": []
15
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-usage",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "CLI tool for tracking OpenCode AI coding assistant usage and costs",
5
5
  "keywords": [
6
6
  "ai",