@juliantanx/aiusage 1.0.1

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 (47) hide show
  1. package/dist/chunk-C6IKRE2P.js +458 -0
  2. package/dist/dist-XHYTXDVT.js +42 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +2734 -0
  5. package/dist/web/_app/env.js +1 -0
  6. package/dist/web/_app/immutable/assets/0.BTUc0PXb.css +1 -0
  7. package/dist/web/_app/immutable/assets/2.I4bgY8QS.css +1 -0
  8. package/dist/web/_app/immutable/assets/3.BmO4KrOR.css +1 -0
  9. package/dist/web/_app/immutable/assets/4.TAVgUi8b.css +1 -0
  10. package/dist/web/_app/immutable/assets/5.BeDwa7mS.css +1 -0
  11. package/dist/web/_app/immutable/assets/6.BYQidWiw.css +1 -0
  12. package/dist/web/_app/immutable/assets/7.8R_5Laqi.css +1 -0
  13. package/dist/web/_app/immutable/assets/8.BcbNCOTS.css +1 -0
  14. package/dist/web/_app/immutable/assets/9.QhlpTtkf.css +1 -0
  15. package/dist/web/_app/immutable/assets/ToolSelector.BKgB2QVk.css +1 -0
  16. package/dist/web/_app/immutable/assets/ToolSelector.HSbC8-q9.css +1 -0
  17. package/dist/web/_app/immutable/assets/_layout.DLyrrG29.css +1 -0
  18. package/dist/web/_app/immutable/assets/_page.8R_5Laqi.css +1 -0
  19. package/dist/web/_app/immutable/assets/_page.BYQidWiw.css +1 -0
  20. package/dist/web/_app/immutable/assets/_page.BcbNCOTS.css +1 -0
  21. package/dist/web/_app/immutable/assets/_page.BeDwa7mS.css +1 -0
  22. package/dist/web/_app/immutable/assets/_page.BmO4KrOR.css +1 -0
  23. package/dist/web/_app/immutable/assets/_page.I4bgY8QS.css +1 -0
  24. package/dist/web/_app/immutable/assets/_page.QhlpTtkf.css +1 -0
  25. package/dist/web/_app/immutable/assets/_page.TAVgUi8b.css +1 -0
  26. package/dist/web/_app/immutable/chunks/ToolSelector.kb97TteP.js +2 -0
  27. package/dist/web/_app/immutable/chunks/api.DyoIo4nG.js +1 -0
  28. package/dist/web/_app/immutable/chunks/entry.CVLbqi7C.js +3 -0
  29. package/dist/web/_app/immutable/chunks/index.CzqoKkoo.js +1 -0
  30. package/dist/web/_app/immutable/chunks/index.Dm-3G3np.js +1 -0
  31. package/dist/web/_app/immutable/chunks/scheduler.Dx1bs0RQ.js +1 -0
  32. package/dist/web/_app/immutable/chunks/stores.BSF99XdC.js +1 -0
  33. package/dist/web/_app/immutable/entry/app.Cb4qBU5I.js +2 -0
  34. package/dist/web/_app/immutable/entry/start.DPeK9dzE.js +1 -0
  35. package/dist/web/_app/immutable/nodes/0.Bzydyk3L.js +1 -0
  36. package/dist/web/_app/immutable/nodes/1.87xpHPtt.js +1 -0
  37. package/dist/web/_app/immutable/nodes/2.CJyBxUXd.js +1 -0
  38. package/dist/web/_app/immutable/nodes/3.Bqg88zQg.js +1 -0
  39. package/dist/web/_app/immutable/nodes/4.B3zrG0ip.js +1 -0
  40. package/dist/web/_app/immutable/nodes/5.C3h9wXyF.js +1 -0
  41. package/dist/web/_app/immutable/nodes/6.C8xhym7b.js +1 -0
  42. package/dist/web/_app/immutable/nodes/7.C950CTxa.js +1 -0
  43. package/dist/web/_app/immutable/nodes/8.BSeUhVCa.js +1 -0
  44. package/dist/web/_app/immutable/nodes/9.DJXBgSiY.js +1 -0
  45. package/dist/web/_app/version.json +1 -0
  46. package/dist/web/index.html +47 -0
  47. package/package.json +33 -0
@@ -0,0 +1,458 @@
1
+ // ../core/dist/index.js
2
+ import { createHash } from "crypto";
3
+ var MODEL_PROVIDER_MAP = [
4
+ ["claude-", "anthropic"],
5
+ ["gpt-", "openai"],
6
+ ["o1-", "openai"],
7
+ ["o3-", "openai"],
8
+ ["o4-", "openai"],
9
+ ["o-", "openai"],
10
+ ["deepseek-", "deepseek"],
11
+ ["gemini-", "google"],
12
+ ["glm-", "zhipu"],
13
+ ["mimo-", "xiaomi"],
14
+ ["minimax-", "minimax"],
15
+ ["kimi-", "moonshot"],
16
+ ["qianfan-", "baidu"],
17
+ ["qwen", "alibaba"],
18
+ ["z-ai/", "zhipu"],
19
+ ["accounts/fireworks/", "fireworks"],
20
+ ["frank/", "zhipu"],
21
+ ["nvidia/", "nvidia"],
22
+ ["moonshotai/", "moonshot"],
23
+ ["zai-org/", "zhipu"]
24
+ ];
25
+ function inferProvider(model) {
26
+ for (const [prefix, provider] of MODEL_PROVIDER_MAP) {
27
+ if (model.startsWith(prefix)) return provider;
28
+ }
29
+ return "unknown";
30
+ }
31
+ var DEFAULT_PRICE_TABLE = {
32
+ // Anthropic — https://platform.claude.com/docs/en/about-claude/pricing
33
+ "claude-opus-4-7": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
34
+ "claude-opus-4-6": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
35
+ "claude-sonnet-4-6": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
36
+ "claude-sonnet-4-5": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
37
+ "claude-haiku-4-5": { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
38
+ // OpenAI — https://developers.openai.com/api/docs/pricing
39
+ "gpt-5.5-pro": { input: 30, output: 180 },
40
+ "gpt-5.5": { input: 5, output: 30 },
41
+ "gpt-5.4-pro": { input: 30, output: 180 },
42
+ "gpt-5.4-mini": { input: 0.75, output: 4.5 },
43
+ "gpt-5.4-nano": { input: 0.2, output: 1.25 },
44
+ "gpt-5.4": { input: 2.5, output: 15 },
45
+ "gpt-5.3-codex": { input: 1.75, output: 14 },
46
+ "gpt-4o-mini": { input: 0.15, output: 0.6 },
47
+ "gpt-4o": { input: 2.5, output: 10 },
48
+ "gpt-4.1": { input: 2, output: 8 },
49
+ "o4-mini": { input: 1.1, output: 4.4 },
50
+ "o3": { input: 2, output: 8 },
51
+ // Google Gemini — https://ai.google.dev/gemini-api/docs/pricing
52
+ "gemini-3.1-pro": { input: 2, output: 12 },
53
+ "gemini-3.1-flash-lite": { input: 0.25, output: 1.5 },
54
+ "gemini-3-flash": { input: 0.5, output: 3 },
55
+ "gemini-2.5-pro": { input: 1.25, output: 10 },
56
+ "gemini-2.5-flash-lite": { input: 0.1, output: 0.4 },
57
+ "gemini-2.5-flash": { input: 0.3, output: 2.5 },
58
+ "gemini-2.0-flash": { input: 0.1, output: 0.4 },
59
+ // DeepSeek — https://api-docs.deepseek.com/quick_start/pricing
60
+ "deepseek-v4-pro": { input: 1.74, output: 3.48, cacheRead: 0.0145 },
61
+ "deepseek-v4-flash": { input: 0.14, output: 0.28, cacheRead: 28e-4 }
62
+ };
63
+ var userOverrides = {};
64
+ var PRICE_TABLE = { ...DEFAULT_PRICE_TABLE };
65
+ function getPriceTable() {
66
+ return { ...DEFAULT_PRICE_TABLE, ...userOverrides };
67
+ }
68
+ function setPriceOverride(model, entry) {
69
+ userOverrides[model] = entry;
70
+ PRICE_TABLE[model] = entry;
71
+ }
72
+ function removePriceOverride(model) {
73
+ delete userOverrides[model];
74
+ if (DEFAULT_PRICE_TABLE[model]) {
75
+ PRICE_TABLE[model] = DEFAULT_PRICE_TABLE[model];
76
+ } else {
77
+ delete PRICE_TABLE[model];
78
+ }
79
+ }
80
+ function getUserOverrides() {
81
+ return { ...userOverrides };
82
+ }
83
+ var PROVIDER_PREFIXES = [
84
+ "accounts/fireworks/models/",
85
+ "moonshotai/",
86
+ "z-ai/",
87
+ "zai-org/",
88
+ "frank/",
89
+ "nvidia/"
90
+ ];
91
+ function resolvePrice(model) {
92
+ if (PRICE_TABLE[model]) return PRICE_TABLE[model];
93
+ let stripped = model;
94
+ for (const prefix of PROVIDER_PREFIXES) {
95
+ if (stripped.startsWith(prefix)) {
96
+ stripped = stripped.slice(prefix.length);
97
+ break;
98
+ }
99
+ }
100
+ if (stripped !== model) {
101
+ const lc = stripped.toLowerCase();
102
+ if (PRICE_TABLE[lc]) return PRICE_TABLE[lc];
103
+ if (PRICE_TABLE[stripped]) return PRICE_TABLE[stripped];
104
+ }
105
+ let bestPrefix = "";
106
+ let bestEntry;
107
+ const candidates = [model, stripped, stripped.toLowerCase()];
108
+ for (const c of candidates) {
109
+ for (const [prefix, entry] of Object.entries(PRICE_TABLE)) {
110
+ if (c.startsWith(prefix) && prefix.length > bestPrefix.length) {
111
+ bestPrefix = prefix;
112
+ bestEntry = entry;
113
+ }
114
+ }
115
+ }
116
+ return bestEntry;
117
+ }
118
+ function calculateCost(model, tokens) {
119
+ const price = resolvePrice(model);
120
+ if (!price) return 0;
121
+ const inputCost = tokens.inputTokens / 1e6 * price.input;
122
+ const outputCost = tokens.outputTokens / 1e6 * price.output;
123
+ const cacheReadCost = tokens.cacheReadTokens / 1e6 * (price.cacheRead ?? 0);
124
+ const cacheWriteCost = tokens.cacheWriteTokens / 1e6 * (price.cacheWrite ?? 0);
125
+ const thinkingPrice = price.thinking ?? price.output;
126
+ const thinkingCost = tokens.thinkingTokens / 1e6 * thinkingPrice;
127
+ return inputCost + outputCost + cacheReadCost + cacheWriteCost + thinkingCost;
128
+ }
129
+ function generateRecordId(deviceInstanceId, sourceFile, lineOffset) {
130
+ const hash = createHash("sha256").update(deviceInstanceId + sourceFile + lineOffset).digest("hex");
131
+ return hash.slice(0, 16);
132
+ }
133
+ function generateSyncRecordId(deviceInstanceId, sourceFile, lineOffset) {
134
+ return generateRecordId(deviceInstanceId, sourceFile, lineOffset);
135
+ }
136
+ function generateToolCallId(recordId, name, ts, callIndex) {
137
+ const hash = createHash("sha256").update(recordId + name + ts + callIndex).digest("hex");
138
+ return hash.slice(0, 16);
139
+ }
140
+ function generateOrphanToolCallId(tool, name, ts, callIndex) {
141
+ const hash = createHash("sha256").update(tool + ":" + name + ":" + ts + ":" + callIndex).digest("hex");
142
+ return hash.slice(0, 16);
143
+ }
144
+ function generateSessionKey(device, sessionId) {
145
+ const hash = createHash("sha256").update(device + sessionId).digest("hex");
146
+ return hash.slice(0, 24);
147
+ }
148
+ var ClaudeCodeParser = class {
149
+ tool = "claude-code";
150
+ parseLine(line, context) {
151
+ let parsed;
152
+ try {
153
+ parsed = JSON.parse(line);
154
+ } catch {
155
+ return null;
156
+ }
157
+ if (!parsed.message?.usage) return null;
158
+ const usage = parsed.message.usage;
159
+ const model = parsed.message.model ?? "unknown";
160
+ if (model === "<synthetic>") return null;
161
+ const rawTs = parsed.message.timestamp ?? parsed.timestamp ?? context.now;
162
+ const ts = typeof rawTs === "number" ? rawTs : new Date(rawTs).getTime();
163
+ const inputTokens = usage.input_tokens ?? 0;
164
+ const outputTokens = usage.output_tokens ?? 0;
165
+ const cacheWriteTokens = usage.cache_creation_input_tokens ?? 0;
166
+ const cacheReadTokens = usage.cache_read_input_tokens ?? 0;
167
+ const thinkingTokens = usage.thinking_tokens ?? 0;
168
+ const cost = model === "unknown" ? 0 : calculateCost(model, {
169
+ inputTokens,
170
+ outputTokens,
171
+ cacheReadTokens,
172
+ cacheWriteTokens,
173
+ thinkingTokens
174
+ });
175
+ const costSource = model === "unknown" ? "unknown" : "pricing";
176
+ const provider = inferProvider(model);
177
+ const record = {
178
+ id: generateRecordId(context.deviceInstanceId, context.sourceFile, context.lineOffset),
179
+ ts,
180
+ ingestedAt: context.now,
181
+ updatedAt: context.now,
182
+ lineOffset: context.lineOffset,
183
+ tool: this.tool,
184
+ model,
185
+ provider,
186
+ inputTokens,
187
+ outputTokens,
188
+ cacheReadTokens,
189
+ cacheWriteTokens,
190
+ thinkingTokens,
191
+ cost,
192
+ costSource,
193
+ sessionId: context.sessionId,
194
+ sourceFile: context.sourceFile,
195
+ device: context.device,
196
+ deviceInstanceId: context.deviceInstanceId,
197
+ platform: context.platform
198
+ };
199
+ const toolCalls = [];
200
+ if (Array.isArray(parsed.message.content)) {
201
+ let callIndex = 0;
202
+ for (const block of parsed.message.content) {
203
+ if (block.type === "tool_use") {
204
+ const rawName = block.name ?? "";
205
+ const cleanName = rawName.replace(/[=:"'{\[\s].*$/s, "").replace(/[^a-zA-Z0-9_-]/g, "");
206
+ if (!cleanName) {
207
+ callIndex++;
208
+ continue;
209
+ }
210
+ toolCalls.push({
211
+ id: generateToolCallId(record.id, cleanName, ts, callIndex),
212
+ recordId: record.id,
213
+ name: cleanName,
214
+ ts,
215
+ callIndex
216
+ });
217
+ callIndex++;
218
+ }
219
+ }
220
+ }
221
+ return { record, toolCalls };
222
+ }
223
+ };
224
+ var CodexParser = class {
225
+ tool = "codex";
226
+ pendingToolCalls = [];
227
+ currentModel = null;
228
+ parseLine(line, context) {
229
+ let parsed;
230
+ try {
231
+ parsed = JSON.parse(line);
232
+ } catch {
233
+ return null;
234
+ }
235
+ const payload = parsed.event_msg?.payload ?? (parsed.type === "event_msg" ? parsed.payload : void 0);
236
+ const turnCtx = parsed.type === "turn_context" ? parsed.payload : void 0;
237
+ if (turnCtx?.model) {
238
+ this.currentModel = turnCtx.model;
239
+ }
240
+ if (payload?.type === "turn_context" && payload.model) {
241
+ this.currentModel = payload.model;
242
+ }
243
+ if (!payload) return null;
244
+ if (payload.type !== "token_count" && payload.type !== "function_call") return null;
245
+ if (payload.type === "function_call") {
246
+ const rawFcTs = parsed.event_msg?.timestamp ?? parsed.timestamp ?? context.now;
247
+ this.pendingToolCalls.push({
248
+ name: payload.function?.name ?? "unknown",
249
+ ts: typeof rawFcTs === "number" ? rawFcTs : new Date(rawFcTs).getTime()
250
+ });
251
+ return null;
252
+ }
253
+ const usage = payload.last_token_usage ?? payload.info?.last_token_usage;
254
+ if (!usage) {
255
+ return null;
256
+ }
257
+ const model = payload.model ?? parsed.model ?? this.currentModel ?? "unknown";
258
+ const rawTs = parsed.event_msg?.timestamp ?? parsed.timestamp ?? context.now;
259
+ const ts = typeof rawTs === "number" ? rawTs : new Date(rawTs).getTime();
260
+ const inputTokens = usage.input_tokens ?? 0;
261
+ const outputTokens = usage.output_tokens ?? 0;
262
+ const cacheReadTokens = usage.cached_input_tokens ?? 0;
263
+ const thinkingTokens = usage.reasoning_output_tokens ?? 0;
264
+ const cacheWriteTokens = 0;
265
+ const cost = model === "unknown" ? 0 : calculateCost(model, {
266
+ inputTokens,
267
+ outputTokens,
268
+ cacheReadTokens,
269
+ cacheWriteTokens,
270
+ thinkingTokens
271
+ });
272
+ const costSource = model === "unknown" ? "unknown" : "pricing";
273
+ const provider = inferProvider(model);
274
+ const recordId = generateRecordId(context.deviceInstanceId, context.sourceFile, context.lineOffset);
275
+ const record = {
276
+ id: recordId,
277
+ ts,
278
+ ingestedAt: context.now,
279
+ updatedAt: context.now,
280
+ lineOffset: context.lineOffset,
281
+ tool: this.tool,
282
+ model,
283
+ provider,
284
+ inputTokens,
285
+ outputTokens,
286
+ cacheReadTokens,
287
+ cacheWriteTokens,
288
+ thinkingTokens,
289
+ cost,
290
+ costSource,
291
+ sessionId: context.sessionId,
292
+ sourceFile: context.sourceFile,
293
+ device: context.device,
294
+ deviceInstanceId: context.deviceInstanceId,
295
+ platform: context.platform
296
+ };
297
+ const toolCalls = this.pendingToolCalls.map((tc, callIndex) => ({
298
+ id: generateToolCallId(recordId, tc.name, tc.ts, callIndex),
299
+ recordId,
300
+ name: tc.name,
301
+ ts: tc.ts,
302
+ callIndex
303
+ }));
304
+ this.pendingToolCalls = [];
305
+ return { record, toolCalls };
306
+ }
307
+ finalize() {
308
+ if (this.pendingToolCalls.length === 0) return [];
309
+ const toolCalls = this.pendingToolCalls.map((tc, callIndex) => ({
310
+ id: generateOrphanToolCallId(this.tool, tc.name, tc.ts, callIndex),
311
+ recordId: null,
312
+ name: tc.name,
313
+ ts: tc.ts,
314
+ callIndex
315
+ }));
316
+ this.pendingToolCalls = [];
317
+ return [{ record: null, toolCalls }];
318
+ }
319
+ };
320
+ var OpenClawParser = class {
321
+ tool = "openclaw";
322
+ parseLine(line, context) {
323
+ let parsed;
324
+ try {
325
+ parsed = JSON.parse(line);
326
+ } catch {
327
+ return null;
328
+ }
329
+ if (!parsed.message?.usage) return null;
330
+ const usage = parsed.message.usage;
331
+ const model = parsed.message.model ?? "unknown";
332
+ const rawTs = parsed.message.timestamp ?? context.now;
333
+ const ts = typeof rawTs === "number" ? rawTs : new Date(rawTs).getTime();
334
+ const inputTokens = usage.input ?? 0;
335
+ const outputTokens = usage.output ?? 0;
336
+ const cacheReadTokens = usage.cacheRead ?? 0;
337
+ const cacheWriteTokens = usage.cacheWrite ?? 0;
338
+ const thinkingTokens = 0;
339
+ let cost;
340
+ let costSource;
341
+ if (usage.cost != null && typeof usage.cost === "object") {
342
+ cost = usage.cost.total ?? 0;
343
+ costSource = "log";
344
+ } else if (typeof usage.cost === "number") {
345
+ cost = usage.cost;
346
+ costSource = "log";
347
+ } else if (model === "unknown") {
348
+ cost = 0;
349
+ costSource = "unknown";
350
+ } else {
351
+ cost = calculateCost(model, {
352
+ inputTokens,
353
+ outputTokens,
354
+ cacheReadTokens,
355
+ cacheWriteTokens,
356
+ thinkingTokens
357
+ });
358
+ costSource = "pricing";
359
+ }
360
+ const provider = parsed.message.provider ?? inferProvider(model);
361
+ const record = {
362
+ id: generateRecordId(context.deviceInstanceId, context.sourceFile, context.lineOffset),
363
+ ts,
364
+ ingestedAt: context.now,
365
+ updatedAt: context.now,
366
+ lineOffset: context.lineOffset,
367
+ tool: this.tool,
368
+ model,
369
+ provider,
370
+ inputTokens,
371
+ outputTokens,
372
+ cacheReadTokens,
373
+ cacheWriteTokens,
374
+ thinkingTokens,
375
+ cost,
376
+ costSource,
377
+ sessionId: context.sessionId,
378
+ sourceFile: context.sourceFile,
379
+ device: context.device,
380
+ deviceInstanceId: context.deviceInstanceId,
381
+ platform: context.platform
382
+ };
383
+ const toolCalls = [];
384
+ if (Array.isArray(parsed.message.content)) {
385
+ let callIndex = 0;
386
+ for (const block of parsed.message.content) {
387
+ if (block.type === "tool_use") {
388
+ toolCalls.push({
389
+ id: generateToolCallId(record.id, block.name, ts, callIndex),
390
+ recordId: record.id,
391
+ name: block.name,
392
+ ts,
393
+ callIndex
394
+ });
395
+ callIndex++;
396
+ }
397
+ }
398
+ }
399
+ return { record, toolCalls };
400
+ }
401
+ };
402
+ var Aggregator = class {
403
+ parsers;
404
+ activeParser = null;
405
+ constructor() {
406
+ this.parsers = /* @__PURE__ */ new Map([
407
+ ["claude-code", new ClaudeCodeParser()],
408
+ ["codex", new CodexParser()],
409
+ ["openclaw", new OpenClawParser()]
410
+ ]);
411
+ }
412
+ createContext(options) {
413
+ return {
414
+ ...options,
415
+ now: Date.now()
416
+ };
417
+ }
418
+ parseLine(line, context) {
419
+ if (!this.activeParser || this.activeParser.tool !== context.tool) {
420
+ this.activeParser = this.parsers.get(context.tool) ?? null;
421
+ }
422
+ if (!this.activeParser) {
423
+ return null;
424
+ }
425
+ return this.activeParser.parseLine(line, context);
426
+ }
427
+ finalize() {
428
+ const results = [];
429
+ for (const parser of this.parsers.values()) {
430
+ if (parser.finalize) {
431
+ results.push(...parser.finalize());
432
+ }
433
+ }
434
+ return results;
435
+ }
436
+ };
437
+
438
+ export {
439
+ MODEL_PROVIDER_MAP,
440
+ inferProvider,
441
+ DEFAULT_PRICE_TABLE,
442
+ PRICE_TABLE,
443
+ getPriceTable,
444
+ setPriceOverride,
445
+ removePriceOverride,
446
+ getUserOverrides,
447
+ resolvePrice,
448
+ calculateCost,
449
+ generateRecordId,
450
+ generateSyncRecordId,
451
+ generateToolCallId,
452
+ generateOrphanToolCallId,
453
+ generateSessionKey,
454
+ ClaudeCodeParser,
455
+ CodexParser,
456
+ OpenClawParser,
457
+ Aggregator
458
+ };
@@ -0,0 +1,42 @@
1
+ import {
2
+ Aggregator,
3
+ ClaudeCodeParser,
4
+ CodexParser,
5
+ DEFAULT_PRICE_TABLE,
6
+ MODEL_PROVIDER_MAP,
7
+ OpenClawParser,
8
+ PRICE_TABLE,
9
+ calculateCost,
10
+ generateOrphanToolCallId,
11
+ generateRecordId,
12
+ generateSessionKey,
13
+ generateSyncRecordId,
14
+ generateToolCallId,
15
+ getPriceTable,
16
+ getUserOverrides,
17
+ inferProvider,
18
+ removePriceOverride,
19
+ resolvePrice,
20
+ setPriceOverride
21
+ } from "./chunk-C6IKRE2P.js";
22
+ export {
23
+ Aggregator,
24
+ ClaudeCodeParser,
25
+ CodexParser,
26
+ DEFAULT_PRICE_TABLE,
27
+ MODEL_PROVIDER_MAP,
28
+ OpenClawParser,
29
+ PRICE_TABLE,
30
+ calculateCost,
31
+ generateOrphanToolCallId,
32
+ generateRecordId,
33
+ generateSessionKey,
34
+ generateSyncRecordId,
35
+ generateToolCallId,
36
+ getPriceTable,
37
+ getUserOverrides,
38
+ inferProvider,
39
+ removePriceOverride,
40
+ resolvePrice,
41
+ setPriceOverride
42
+ };
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node