@slkiser/opencode-quota 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -0
  3. package/dist/data/modelsdev-pricing.min.json +504 -0
  4. package/dist/index.d.ts +10 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +15 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/lib/cache.d.ts +49 -0
  9. package/dist/lib/cache.d.ts.map +1 -0
  10. package/dist/lib/cache.js +127 -0
  11. package/dist/lib/cache.js.map +1 -0
  12. package/dist/lib/config.d.ts +30 -0
  13. package/dist/lib/config.d.ts.map +1 -0
  14. package/dist/lib/config.js +154 -0
  15. package/dist/lib/config.js.map +1 -0
  16. package/dist/lib/copilot.d.ts +25 -0
  17. package/dist/lib/copilot.d.ts.map +1 -0
  18. package/dist/lib/copilot.js +306 -0
  19. package/dist/lib/copilot.js.map +1 -0
  20. package/dist/lib/entries.d.ts +60 -0
  21. package/dist/lib/entries.d.ts.map +1 -0
  22. package/dist/lib/entries.js +8 -0
  23. package/dist/lib/entries.js.map +1 -0
  24. package/dist/lib/firmware.d.ts +15 -0
  25. package/dist/lib/firmware.d.ts.map +1 -0
  26. package/dist/lib/firmware.js +79 -0
  27. package/dist/lib/firmware.js.map +1 -0
  28. package/dist/lib/format.d.ts +16 -0
  29. package/dist/lib/format.d.ts.map +1 -0
  30. package/dist/lib/format.js +99 -0
  31. package/dist/lib/format.js.map +1 -0
  32. package/dist/lib/google-token-cache.d.ts +30 -0
  33. package/dist/lib/google-token-cache.d.ts.map +1 -0
  34. package/dist/lib/google-token-cache.js +100 -0
  35. package/dist/lib/google-token-cache.js.map +1 -0
  36. package/dist/lib/google.d.ts +43 -0
  37. package/dist/lib/google.d.ts.map +1 -0
  38. package/dist/lib/google.js +399 -0
  39. package/dist/lib/google.js.map +1 -0
  40. package/dist/lib/markdown-table.d.ts +8 -0
  41. package/dist/lib/markdown-table.d.ts.map +1 -0
  42. package/dist/lib/markdown-table.js +56 -0
  43. package/dist/lib/markdown-table.js.map +1 -0
  44. package/dist/lib/modelsdev-pricing.d.ts +23 -0
  45. package/dist/lib/modelsdev-pricing.d.ts.map +1 -0
  46. package/dist/lib/modelsdev-pricing.js +32 -0
  47. package/dist/lib/modelsdev-pricing.js.map +1 -0
  48. package/dist/lib/openai.d.ts +33 -0
  49. package/dist/lib/openai.d.ts.map +1 -0
  50. package/dist/lib/openai.js +162 -0
  51. package/dist/lib/openai.js.map +1 -0
  52. package/dist/lib/opencode-auth.d.ts +11 -0
  53. package/dist/lib/opencode-auth.d.ts.map +1 -0
  54. package/dist/lib/opencode-auth.js +27 -0
  55. package/dist/lib/opencode-auth.js.map +1 -0
  56. package/dist/lib/opencode-storage.d.ts +45 -0
  57. package/dist/lib/opencode-storage.d.ts.map +1 -0
  58. package/dist/lib/opencode-storage.js +120 -0
  59. package/dist/lib/opencode-storage.js.map +1 -0
  60. package/dist/lib/quota-command-format.d.ts +14 -0
  61. package/dist/lib/quota-command-format.d.ts.map +1 -0
  62. package/dist/lib/quota-command-format.js +122 -0
  63. package/dist/lib/quota-command-format.js.map +1 -0
  64. package/dist/lib/quota-stats-format.d.ts +9 -0
  65. package/dist/lib/quota-stats-format.d.ts.map +1 -0
  66. package/dist/lib/quota-stats-format.js +244 -0
  67. package/dist/lib/quota-stats-format.js.map +1 -0
  68. package/dist/lib/quota-stats.d.ts +71 -0
  69. package/dist/lib/quota-stats.d.ts.map +1 -0
  70. package/dist/lib/quota-stats.js +270 -0
  71. package/dist/lib/quota-stats.js.map +1 -0
  72. package/dist/lib/quota-status.d.ts +23 -0
  73. package/dist/lib/quota-status.d.ts.map +1 -0
  74. package/dist/lib/quota-status.js +112 -0
  75. package/dist/lib/quota-status.js.map +1 -0
  76. package/dist/lib/toast-format-grouped.d.ts +25 -0
  77. package/dist/lib/toast-format-grouped.d.ts.map +1 -0
  78. package/dist/lib/toast-format-grouped.js +123 -0
  79. package/dist/lib/toast-format-grouped.js.map +1 -0
  80. package/dist/lib/types.d.ts +218 -0
  81. package/dist/lib/types.d.ts.map +1 -0
  82. package/dist/lib/types.js +39 -0
  83. package/dist/lib/types.js.map +1 -0
  84. package/dist/plugin.d.ts +13 -0
  85. package/dist/plugin.d.ts.map +1 -0
  86. package/dist/plugin.js +633 -0
  87. package/dist/plugin.js.map +1 -0
  88. package/dist/providers/copilot.d.ts +8 -0
  89. package/dist/providers/copilot.d.ts.map +1 -0
  90. package/dist/providers/copilot.js +50 -0
  91. package/dist/providers/copilot.js.map +1 -0
  92. package/dist/providers/firmware.d.ts +6 -0
  93. package/dist/providers/firmware.d.ts.map +1 -0
  94. package/dist/providers/firmware.js +52 -0
  95. package/dist/providers/firmware.js.map +1 -0
  96. package/dist/providers/google-antigravity.d.ts +6 -0
  97. package/dist/providers/google-antigravity.d.ts.map +1 -0
  98. package/dist/providers/google-antigravity.js +77 -0
  99. package/dist/providers/google-antigravity.js.map +1 -0
  100. package/dist/providers/openai.d.ts +6 -0
  101. package/dist/providers/openai.d.ts.map +1 -0
  102. package/dist/providers/openai.js +106 -0
  103. package/dist/providers/openai.js.map +1 -0
  104. package/dist/providers/registry.d.ts +8 -0
  105. package/dist/providers/registry.d.ts.map +1 -0
  106. package/dist/providers/registry.js +14 -0
  107. package/dist/providers/registry.js.map +1 -0
  108. package/package.json +71 -0
@@ -0,0 +1,9 @@
1
+ import type { AggregateResult } from "./quota-stats.js";
2
+ export declare function formatQuotaStatsReport(params: {
3
+ title: string;
4
+ result: AggregateResult;
5
+ topModels?: number;
6
+ topSessions?: number;
7
+ focusSessionID?: string;
8
+ }): string;
9
+ //# sourceMappingURL=quota-stats-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-stats-format.d.ts","sourceRoot":"","sources":["../../src/lib/quota-stats-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,kBAAkB,CAAC;AAoEtE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAgMT"}
@@ -0,0 +1,244 @@
1
+ import { renderMarkdownTable } from "./markdown-table.js";
2
+ function fmtUsd(n) {
3
+ if (!Number.isFinite(n))
4
+ return "$0.00";
5
+ return `$${n.toFixed(2)}`;
6
+ }
7
+ function totalTokens(t) {
8
+ return t.input + t.output + t.reasoning + t.cache_read + t.cache_write;
9
+ }
10
+ function fmtWindow(params) {
11
+ if (!params.sinceMs && !params.untilMs)
12
+ return "all time";
13
+ const since = typeof params.sinceMs === "number" ? new Date(params.sinceMs).toISOString() : "-";
14
+ const until = typeof params.untilMs === "number" ? new Date(params.untilMs).toISOString() : "now";
15
+ return `${since} .. ${until}`;
16
+ }
17
+ function fmtCompact(n) {
18
+ if (!Number.isFinite(n))
19
+ return "0";
20
+ const abs = Math.abs(n);
21
+ const sign = n < 0 ? "-" : "";
22
+ const units = [
23
+ { v: 1_000_000_000, s: "B" },
24
+ { v: 1_000_000, s: "M" },
25
+ { v: 1_000, s: "K" },
26
+ ];
27
+ for (const u of units) {
28
+ if (abs >= u.v) {
29
+ const x = abs / u.v;
30
+ // Keep output stable and compact: 1 decimal unless very large.
31
+ const digits = x >= 100 ? 0 : 1;
32
+ return `${sign}${x.toFixed(digits)}${u.s}`;
33
+ }
34
+ }
35
+ return `${Math.trunc(n)}`;
36
+ }
37
+ function normalizeSourceName(providerID) {
38
+ const p = (providerID ?? "unknown").toLowerCase();
39
+ if (p === "opencode" || p.includes("opencode"))
40
+ return "OpenCode";
41
+ if (p.includes("cursor"))
42
+ return "Cursor";
43
+ if (p.includes("claude") || p.includes("anthropic"))
44
+ return "Claude";
45
+ if (p.includes("github") || p.includes("copilot"))
46
+ return "Copilot";
47
+ if (p.includes("openai") || p.includes("chatgpt") || p.includes("codex"))
48
+ return "OpenAI";
49
+ if (p.includes("google") || p.includes("antigravity") || p.includes("gemini"))
50
+ return "Google";
51
+ // Common OpenCode provider ids people use
52
+ if (p.includes("azure"))
53
+ return "Azure";
54
+ return providerID || "Unknown";
55
+ }
56
+ function normalizeSourceModelId(modelID) {
57
+ return (modelID ?? "unknown").trim();
58
+ }
59
+ function sourceSortKey(source) {
60
+ const s = source.toLowerCase();
61
+ if (s === "opencode")
62
+ return 1;
63
+ if (s === "claude")
64
+ return 2;
65
+ if (s === "cursor")
66
+ return 3;
67
+ if (s === "copilot")
68
+ return 4;
69
+ if (s === "openai")
70
+ return 5;
71
+ if (s === "google")
72
+ return 6;
73
+ if (s === "azure")
74
+ return 7;
75
+ return 99;
76
+ }
77
+ export function formatQuotaStatsReport(params) {
78
+ const topModels = params.topModels ?? 12;
79
+ const topSessions = params.topSessions ?? 8;
80
+ const r = params.result;
81
+ const lines = [];
82
+ lines.push(`# ${params.title}`);
83
+ lines.push("");
84
+ lines.push(renderMarkdownTable({
85
+ headers: ["Window", "Messages", "Sessions", "Tokens", "Cost"],
86
+ aligns: ["left", "right", "right", "right", "right"],
87
+ rows: [
88
+ [
89
+ fmtWindow(r.window),
90
+ fmtCompact(r.totals.messageCount),
91
+ fmtCompact(r.totals.sessionCount),
92
+ fmtCompact(totalTokens(r.totals.priced) + totalTokens(r.totals.unknown)),
93
+ fmtUsd(r.totals.costUsd),
94
+ ],
95
+ ],
96
+ }));
97
+ const hasAnyReasoning = r.totals.priced.reasoning > 0 || r.totals.unknown.reasoning > 0;
98
+ const headers = ["Source", "Model", "Input", "Output", "C.Read", "C.Write"];
99
+ const aligns = ["left", "left", "right", "right", "right", "right"];
100
+ if (hasAnyReasoning) {
101
+ headers.push("Reasoning");
102
+ aligns.push("right");
103
+ }
104
+ headers.push("Total", "Cost");
105
+ aligns.push("right", "right");
106
+ const rows = [];
107
+ const grouped = new Map();
108
+ for (const row of r.bySourceModel) {
109
+ const src = normalizeSourceName(row.sourceProviderID);
110
+ const list = grouped.get(src);
111
+ if (list)
112
+ list.push(row);
113
+ else
114
+ grouped.set(src, [row]);
115
+ }
116
+ const sources = Array.from(grouped.keys()).sort((a, b) => {
117
+ const ka = sourceSortKey(a);
118
+ const kb = sourceSortKey(b);
119
+ if (ka !== kb)
120
+ return ka - kb;
121
+ return a.localeCompare(b);
122
+ });
123
+ for (let i = 0; i < sources.length; i++) {
124
+ const src = sources[i];
125
+ const list = grouped.get(src);
126
+ list.sort((a, b) => b.costUsd - a.costUsd);
127
+ for (const row of list.slice(0, topModels)) {
128
+ const t = row.tokens;
129
+ const out = [
130
+ src,
131
+ normalizeSourceModelId(row.sourceModelID),
132
+ fmtCompact(t.input),
133
+ fmtCompact(t.output),
134
+ fmtCompact(t.cache_read),
135
+ fmtCompact(t.cache_write),
136
+ ];
137
+ if (hasAnyReasoning)
138
+ out.push(fmtCompact(t.reasoning));
139
+ out.push(fmtCompact(totalTokens(t)), fmtUsd(row.costUsd));
140
+ rows.push(out);
141
+ }
142
+ // blank separator row between source groups
143
+ if (i !== sources.length - 1) {
144
+ rows.push(new Array(headers.length).fill(""));
145
+ }
146
+ }
147
+ if (rows.length > 0) {
148
+ lines.push("");
149
+ lines.push(`## Models`);
150
+ lines.push("");
151
+ lines.push(renderMarkdownTable({ headers, rows, aligns }));
152
+ }
153
+ // A narrower summary table that matches the common "Models (cost)" view.
154
+ // This is intentionally redundant: it reads well in narrow terminals.
155
+ if (r.bySourceModel.length > 0) {
156
+ const summaryRows = [];
157
+ for (let i = 0; i < sources.length; i++) {
158
+ const src = sources[i];
159
+ const list = grouped.get(src);
160
+ list.sort((a, b) => b.costUsd - a.costUsd);
161
+ for (const row of list.slice(0, topModels)) {
162
+ summaryRows.push([
163
+ src,
164
+ normalizeSourceModelId(row.sourceModelID),
165
+ fmtCompact(totalTokens(row.tokens)),
166
+ fmtUsd(row.costUsd),
167
+ ]);
168
+ }
169
+ if (i !== sources.length - 1) {
170
+ summaryRows.push(["", "", "", ""]);
171
+ }
172
+ }
173
+ lines.push("");
174
+ lines.push(`## Model Breakdown`);
175
+ lines.push("");
176
+ lines.push(renderMarkdownTable({
177
+ headers: ["Source", "Model", "Tokens", "Cost"],
178
+ aligns: ["left", "left", "right", "right"],
179
+ rows: summaryRows,
180
+ }));
181
+ }
182
+ if (r.bySession.length > 0) {
183
+ lines.push("");
184
+ lines.push(`## Top Sessions`);
185
+ lines.push("");
186
+ const sessionRows = [];
187
+ const focus = params.focusSessionID
188
+ ? r.bySession.find((s) => s.sessionID === params.focusSessionID)
189
+ : undefined;
190
+ if (focus) {
191
+ sessionRows.push([
192
+ "current",
193
+ focus.sessionID,
194
+ fmtUsd(focus.costUsd),
195
+ fmtCompact(totalTokens(focus.tokens)),
196
+ fmtCompact(focus.messageCount),
197
+ focus.title ? `${focus.title}` : "(untitled)",
198
+ ]);
199
+ }
200
+ const rest = params.focusSessionID
201
+ ? r.bySession.filter((s) => s.sessionID !== params.focusSessionID)
202
+ : r.bySession;
203
+ for (const row of rest.slice(0, topSessions)) {
204
+ sessionRows.push([
205
+ "",
206
+ row.sessionID,
207
+ fmtUsd(row.costUsd),
208
+ fmtCompact(totalTokens(row.tokens)),
209
+ fmtCompact(row.messageCount),
210
+ row.title ? `${row.title}` : "(untitled)",
211
+ ]);
212
+ }
213
+ lines.push(renderMarkdownTable({
214
+ headers: ["", "Session", "Cost", "Tokens", "Msgs", "Title"],
215
+ aligns: ["left", "left", "right", "right", "right", "left"],
216
+ rows: sessionRows,
217
+ }));
218
+ }
219
+ if (r.unknown.length > 0) {
220
+ lines.push("");
221
+ lines.push(`## Unknown Pricing`);
222
+ lines.push("");
223
+ lines.push(renderMarkdownTable({
224
+ headers: ["Source", "Model", "Mapped", "Tokens", "Msgs"],
225
+ aligns: ["left", "left", "left", "right", "right"],
226
+ rows: r.unknown.slice(0, 20).map((u) => {
227
+ const mapped = u.key.mappedProvider && u.key.mappedModel
228
+ ? `${u.key.mappedProvider}/${u.key.mappedModel}`
229
+ : "-";
230
+ return [
231
+ normalizeSourceName(u.key.sourceProviderID),
232
+ u.key.sourceModelID,
233
+ mapped,
234
+ fmtCompact(totalTokens(u.tokens)),
235
+ fmtCompact(u.messageCount),
236
+ ];
237
+ }),
238
+ }));
239
+ lines.push("");
240
+ lines.push(`Run /tool quota_status to see the full unknown pricing report.`);
241
+ }
242
+ return lines.join("\n");
243
+ }
244
+ //# sourceMappingURL=quota-stats-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-stats-format.js","sourceRoot":"","sources":["../../src/lib/quota-stats-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export type TokenBuckets = {
2
+ input: number;
3
+ output: number;
4
+ reasoning: number;
5
+ cache_read: number;
6
+ cache_write: number;
7
+ };
8
+ export type PricedKey = {
9
+ provider: string;
10
+ model: string;
11
+ };
12
+ export type UnknownKey = {
13
+ sourceProviderID: string;
14
+ sourceModelID: string;
15
+ mappedProvider?: string;
16
+ mappedModel?: string;
17
+ };
18
+ export type AggregateRow = {
19
+ key: PricedKey;
20
+ tokens: TokenBuckets;
21
+ costUsd: number;
22
+ messageCount: number;
23
+ };
24
+ export type SessionRow = {
25
+ sessionID: string;
26
+ title?: string;
27
+ tokens: TokenBuckets;
28
+ costUsd: number;
29
+ messageCount: number;
30
+ };
31
+ export type SourceProviderRow = {
32
+ providerID: string;
33
+ tokens: TokenBuckets;
34
+ costUsd: number;
35
+ messageCount: number;
36
+ };
37
+ export type SourceModelRow = {
38
+ sourceProviderID: string;
39
+ sourceModelID: string;
40
+ tokens: TokenBuckets;
41
+ costUsd: number;
42
+ messageCount: number;
43
+ };
44
+ export type UnknownRow = {
45
+ key: UnknownKey;
46
+ tokens: TokenBuckets;
47
+ messageCount: number;
48
+ };
49
+ export type AggregateResult = {
50
+ window: {
51
+ sinceMs?: number;
52
+ untilMs?: number;
53
+ };
54
+ totals: {
55
+ priced: TokenBuckets;
56
+ unknown: TokenBuckets;
57
+ costUsd: number;
58
+ messageCount: number;
59
+ sessionCount: number;
60
+ };
61
+ bySourceProvider: SourceProviderRow[];
62
+ bySourceModel: SourceModelRow[];
63
+ byModel: AggregateRow[];
64
+ bySession: SessionRow[];
65
+ unknown: UnknownRow[];
66
+ };
67
+ export declare function aggregateUsage(params: {
68
+ sinceMs?: number;
69
+ untilMs?: number;
70
+ }): Promise<AggregateResult>;
71
+ //# sourceMappingURL=quota-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-stats.d.ts","sourceRoot":"","sources":["../../src/lib/quota-stats.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,MAAM,EAAE;QACN,MAAM,EAAE,YAAY,CAAC;QACrB,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC;AA4IF,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqJ3B"}
@@ -0,0 +1,270 @@
1
+ import { iterAssistantMessages, readAllSessionsIndex } from "./opencode-storage.js";
2
+ import { lookupCost } from "./modelsdev-pricing.js";
3
+ function emptyBuckets() {
4
+ return { input: 0, output: 0, reasoning: 0, cache_read: 0, cache_write: 0 };
5
+ }
6
+ function addBuckets(a, b) {
7
+ return {
8
+ input: a.input + b.input,
9
+ output: a.output + b.output,
10
+ reasoning: a.reasoning + b.reasoning,
11
+ cache_read: a.cache_read + b.cache_read,
12
+ cache_write: a.cache_write + b.cache_write,
13
+ };
14
+ }
15
+ function messageBuckets(msg) {
16
+ const t = msg.tokens;
17
+ if (!t)
18
+ return emptyBuckets();
19
+ return {
20
+ input: typeof t.input === "number" ? t.input : 0,
21
+ output: typeof t.output === "number" ? t.output : 0,
22
+ reasoning: typeof t.reasoning === "number" ? t.reasoning : 0,
23
+ cache_read: typeof t.cache?.read === "number" ? t.cache.read : 0,
24
+ cache_write: typeof t.cache?.write === "number" ? t.cache.write : 0,
25
+ };
26
+ }
27
+ function normalizeModelId(raw) {
28
+ let s = raw.trim();
29
+ // routing prefixes
30
+ if (s.toLowerCase().startsWith("antigravity-"))
31
+ s = s.slice("antigravity-".length);
32
+ // common subscription variants
33
+ if (s.toLowerCase().endsWith("-thinking"))
34
+ s = s.slice(0, -"-thinking".length);
35
+ // claude 4.5 -> 4-5 (models.dev uses dash)
36
+ s = s.replace(/claude-([a-z-]+)-4\.5\b/i, "claude-$1-4-5");
37
+ // special: "glm-4.7-free" -> "glm-4.7"
38
+ s = s.replace(/\bglm-(\d+)\.(\d+)-free\b/i, "glm-$1.$2");
39
+ // internal OpenCode alias (Zen)
40
+ if (s.toLowerCase() === "big-pickle")
41
+ s = "glm-4.7";
42
+ return s;
43
+ }
44
+ function inferOfficialProviderFromModelId(modelId) {
45
+ const lower = modelId.toLowerCase();
46
+ if (lower.startsWith("claude"))
47
+ return "anthropic";
48
+ if (lower.startsWith("gpt") || lower.startsWith("o"))
49
+ return "openai";
50
+ if (lower.startsWith("gemini"))
51
+ return "google";
52
+ if (lower.startsWith("kimi"))
53
+ return "moonshotai";
54
+ if (lower.startsWith("glm"))
55
+ return "zai";
56
+ // heuristics
57
+ if (lower.includes("claude"))
58
+ return "anthropic";
59
+ if (lower.includes("gemini"))
60
+ return "google";
61
+ if (lower.includes("gpt"))
62
+ return "openai";
63
+ if (lower.includes("kimi"))
64
+ return "moonshotai";
65
+ if (lower.includes("glm"))
66
+ return "zai";
67
+ return null;
68
+ }
69
+ function mapToOfficialPricingKey(source) {
70
+ const srcProvider = source.providerID ?? "unknown";
71
+ const srcModel = source.modelID ?? "unknown";
72
+ if (!source.modelID || typeof source.modelID !== "string") {
73
+ return { ok: false, unknown: { sourceProviderID: srcProvider, sourceModelID: srcModel } };
74
+ }
75
+ const normalizedModel = normalizeModelId(source.modelID);
76
+ const inferredProvider = inferOfficialProviderFromModelId(normalizedModel);
77
+ if (!inferredProvider) {
78
+ return {
79
+ ok: false,
80
+ unknown: {
81
+ sourceProviderID: srcProvider,
82
+ sourceModelID: srcModel,
83
+ mappedProvider: undefined,
84
+ mappedModel: normalizedModel,
85
+ },
86
+ };
87
+ }
88
+ // Kimi naming: some logs use kimi-k2-thinking, but models.dev doesn't have kimi-k2.
89
+ // Treat kimi-k2 as kimi-k2-thinking for pricing.
90
+ if (inferredProvider === "moonshotai") {
91
+ if (normalizedModel === "kimi-k2") {
92
+ if (lookupCost("moonshotai", "kimi-k2-thinking")) {
93
+ return { ok: true, key: { provider: "moonshotai", model: "kimi-k2-thinking" } };
94
+ }
95
+ }
96
+ }
97
+ // Gemini naming fallback: some logs omit -preview
98
+ if (inferredProvider === "google") {
99
+ if (normalizedModel === "gemini-3-pro" && lookupCost("google", "gemini-3-pro") == null) {
100
+ if (lookupCost("google", "gemini-3-pro-preview")) {
101
+ return { ok: true, key: { provider: "google", model: "gemini-3-pro-preview" } };
102
+ }
103
+ }
104
+ if (normalizedModel === "gemini-3-flash" &&
105
+ lookupCost("google", "gemini-3-flash") == null) {
106
+ if (lookupCost("google", "gemini-3-flash-preview")) {
107
+ return { ok: true, key: { provider: "google", model: "gemini-3-flash-preview" } };
108
+ }
109
+ }
110
+ }
111
+ return { ok: true, key: { provider: inferredProvider, model: normalizedModel } };
112
+ }
113
+ function calculateCostUsd(params) {
114
+ const cost = lookupCost(params.provider, params.model);
115
+ if (!cost)
116
+ return { ok: false };
117
+ // models.dev costs are USD per 1M tokens
118
+ const perToken = (usdPer1M) => (typeof usdPer1M === "number" ? usdPer1M / 1_000_000 : 0);
119
+ const inRate = perToken(cost.input);
120
+ const outRate = perToken(cost.output);
121
+ const cacheReadRate = perToken(cost.cache_read ?? cost.input);
122
+ const cacheWriteRate = perToken(cost.cache_write ?? cost.input);
123
+ const reasoningRate = perToken(cost.reasoning ?? cost.output);
124
+ const usd = params.tokens.input * inRate +
125
+ params.tokens.output * outRate +
126
+ params.tokens.cache_read * cacheReadRate +
127
+ params.tokens.cache_write * cacheWriteRate +
128
+ params.tokens.reasoning * reasoningRate;
129
+ return { ok: true, costUsd: usd };
130
+ }
131
+ export async function aggregateUsage(params) {
132
+ const messages = await iterAssistantMessages({ sinceMs: params.sinceMs, untilMs: params.untilMs });
133
+ const sessionsIdx = await readAllSessionsIndex();
134
+ const byModel = new Map();
135
+ const bySession = new Map();
136
+ const bySourceProvider = new Map();
137
+ const bySourceModel = new Map();
138
+ const unknown = new Map();
139
+ let pricedTotals = emptyBuckets();
140
+ let unknownTotals = emptyBuckets();
141
+ let costTotal = 0;
142
+ for (const msg of messages) {
143
+ const tokens = messageBuckets(msg);
144
+ const mapping = mapToOfficialPricingKey({ providerID: msg.providerID, modelID: msg.modelID });
145
+ if (!mapping.ok) {
146
+ unknownTotals = addBuckets(unknownTotals, tokens);
147
+ const k = JSON.stringify(mapping.unknown);
148
+ const row = unknown.get(k);
149
+ if (row) {
150
+ row.tokens = addBuckets(row.tokens, tokens);
151
+ row.messageCount += 1;
152
+ }
153
+ else {
154
+ unknown.set(k, { key: mapping.unknown, tokens, messageCount: 1 });
155
+ }
156
+ continue;
157
+ }
158
+ const priced = calculateCostUsd({ provider: mapping.key.provider, model: mapping.key.model, tokens });
159
+ if (!priced.ok) {
160
+ // Mapping succeeded but pricing missing.
161
+ unknownTotals = addBuckets(unknownTotals, tokens);
162
+ const unk = {
163
+ sourceProviderID: msg.providerID ?? "unknown",
164
+ sourceModelID: msg.modelID ?? "unknown",
165
+ mappedProvider: mapping.key.provider,
166
+ mappedModel: mapping.key.model,
167
+ };
168
+ const k = JSON.stringify(unk);
169
+ const row = unknown.get(k);
170
+ if (row) {
171
+ row.tokens = addBuckets(row.tokens, tokens);
172
+ row.messageCount += 1;
173
+ }
174
+ else {
175
+ unknown.set(k, { key: unk, tokens, messageCount: 1 });
176
+ }
177
+ continue;
178
+ }
179
+ pricedTotals = addBuckets(pricedTotals, tokens);
180
+ costTotal += priced.costUsd;
181
+ // Tokscale-style: key by OpenCode source provider + source model id.
182
+ const srcProviderID = msg.providerID ?? "unknown";
183
+ const srcModelID = msg.modelID ?? "unknown";
184
+ const srcModelKey = `${srcProviderID}\n${srcModelID}`;
185
+ const sm = bySourceModel.get(srcModelKey);
186
+ if (sm) {
187
+ sm.tokens = addBuckets(sm.tokens, tokens);
188
+ sm.costUsd += priced.costUsd;
189
+ sm.messageCount += 1;
190
+ }
191
+ else {
192
+ bySourceModel.set(srcModelKey, {
193
+ sourceProviderID: srcProviderID,
194
+ sourceModelID: srcModelID,
195
+ tokens,
196
+ costUsd: priced.costUsd,
197
+ messageCount: 1,
198
+ });
199
+ }
200
+ const srcProvider = srcProviderID;
201
+ const src = bySourceProvider.get(srcProvider);
202
+ if (src) {
203
+ src.tokens = addBuckets(src.tokens, tokens);
204
+ src.costUsd += priced.costUsd;
205
+ src.messageCount += 1;
206
+ }
207
+ else {
208
+ bySourceProvider.set(srcProvider, {
209
+ providerID: srcProvider,
210
+ tokens,
211
+ costUsd: priced.costUsd,
212
+ messageCount: 1,
213
+ });
214
+ }
215
+ const modelKey = `${mapping.key.provider}/${mapping.key.model}`;
216
+ const existing = byModel.get(modelKey);
217
+ if (existing) {
218
+ existing.tokens = addBuckets(existing.tokens, tokens);
219
+ existing.costUsd += priced.costUsd;
220
+ existing.messageCount += 1;
221
+ }
222
+ else {
223
+ byModel.set(modelKey, {
224
+ key: mapping.key,
225
+ tokens,
226
+ costUsd: priced.costUsd,
227
+ messageCount: 1,
228
+ });
229
+ }
230
+ const sid = msg.sessionID;
231
+ const s = bySession.get(sid);
232
+ const title = sessionsIdx[sid]?.title;
233
+ if (s) {
234
+ s.tokens = addBuckets(s.tokens, tokens);
235
+ s.costUsd += priced.costUsd;
236
+ s.messageCount += 1;
237
+ }
238
+ else {
239
+ bySession.set(sid, {
240
+ sessionID: sid,
241
+ title,
242
+ tokens,
243
+ costUsd: priced.costUsd,
244
+ messageCount: 1,
245
+ });
246
+ }
247
+ }
248
+ const byModelRows = Array.from(byModel.values()).sort((a, b) => b.costUsd - a.costUsd);
249
+ const bySessionRows = Array.from(bySession.values()).sort((a, b) => b.costUsd - a.costUsd);
250
+ const bySourceProviderRows = Array.from(bySourceProvider.values()).sort((a, b) => b.costUsd - a.costUsd);
251
+ const bySourceModelRows = Array.from(bySourceModel.values()).sort((a, b) => b.costUsd - a.costUsd);
252
+ const unknownRows = Array.from(unknown.values()).sort((a, b) => (b.tokens.input + b.tokens.output + b.tokens.reasoning + b.tokens.cache_read + b.tokens.cache_write) -
253
+ (a.tokens.input + a.tokens.output + a.tokens.reasoning + a.tokens.cache_read + a.tokens.cache_write));
254
+ return {
255
+ window: { sinceMs: params.sinceMs, untilMs: params.untilMs },
256
+ totals: {
257
+ priced: pricedTotals,
258
+ unknown: unknownTotals,
259
+ costUsd: costTotal,
260
+ messageCount: messages.length,
261
+ sessionCount: new Set(messages.map((m) => m.sessionID)).size,
262
+ },
263
+ bySourceProvider: bySourceProviderRows,
264
+ bySourceModel: bySourceModelRows,
265
+ byModel: byModelRows,
266
+ bySession: bySessionRows,
267
+ unknown: unknownRows,
268
+ };
269
+ }
270
+ //# sourceMappingURL=quota-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-stats.js","sourceRoot":"","sources":["../../src/lib/quota-stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export declare function buildQuotaStatusReport(params: {
2
+ configSource: string;
3
+ configPaths: string[];
4
+ enabledProviders: string[];
5
+ onlyCurrentModel: boolean;
6
+ currentModel?: string;
7
+ providerAvailability: Array<{
8
+ id: string;
9
+ enabled: boolean;
10
+ available: boolean;
11
+ matchesCurrentModel?: boolean;
12
+ }>;
13
+ googleRefresh?: {
14
+ attempted: boolean;
15
+ total?: number;
16
+ successCount?: number;
17
+ failures?: Array<{
18
+ email?: string;
19
+ error: string;
20
+ }>;
21
+ };
22
+ }): Promise<string>;
23
+ //# sourceMappingURL=quota-status.d.ts.map