@kaitranntt/ccs 7.51.0 → 7.52.0-dev.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.
- package/README.md +23 -1
- package/dist/api/services/profile-writer.d.ts.map +1 -1
- package/dist/api/services/profile-writer.js +33 -0
- package/dist/api/services/profile-writer.js.map +1 -1
- package/dist/auth/profile-continuity-inheritance.d.ts +20 -0
- package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -0
- package/dist/auth/profile-continuity-inheritance.js +137 -0
- package/dist/auth/profile-continuity-inheritance.js.map +1 -0
- package/dist/ccs.js +41 -3
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/auth/oauth-process.d.ts +1 -0
- package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-process.js +63 -4
- package/dist/cliproxy/auth/oauth-process.js.map +1 -1
- package/dist/cliproxy/catalog-cache.d.ts.map +1 -1
- package/dist/cliproxy/catalog-cache.js +10 -3
- package/dist/cliproxy/catalog-cache.js.map +1 -1
- package/dist/cliproxy/composite-validator.d.ts.map +1 -1
- package/dist/cliproxy/composite-validator.js +9 -0
- package/dist/cliproxy/composite-validator.js.map +1 -1
- package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
- package/dist/cliproxy/config/env-builder.js +74 -16
- package/dist/cliproxy/config/env-builder.js.map +1 -1
- package/dist/cliproxy/config/generator.d.ts +3 -1
- package/dist/cliproxy/config/generator.d.ts.map +1 -1
- package/dist/cliproxy/config/generator.js +17 -6
- package/dist/cliproxy/config/generator.js.map +1 -1
- package/dist/cliproxy/executor/env-resolver.d.ts +2 -0
- package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
- package/dist/cliproxy/executor/env-resolver.js +2 -1
- package/dist/cliproxy/executor/env-resolver.js.map +1 -1
- package/dist/cliproxy/executor/index.d.ts.map +1 -1
- package/dist/cliproxy/executor/index.js +15 -0
- package/dist/cliproxy/executor/index.js.map +1 -1
- package/dist/cliproxy/model-catalog.d.ts.map +1 -1
- package/dist/cliproxy/model-catalog.js +11 -39
- package/dist/cliproxy/model-catalog.js.map +1 -1
- package/dist/cliproxy/model-config.d.ts.map +1 -1
- package/dist/cliproxy/model-config.js +12 -11
- package/dist/cliproxy/model-config.js.map +1 -1
- package/dist/cliproxy/model-id-normalizer.d.ts +37 -2
- package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -1
- package/dist/cliproxy/model-id-normalizer.js +132 -7
- package/dist/cliproxy/model-id-normalizer.js.map +1 -1
- package/dist/cliproxy/services/variant-service.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-service.js +22 -6
- package/dist/cliproxy/services/variant-service.js.map +1 -1
- package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-settings.js +5 -3
- package/dist/cliproxy/services/variant-settings.js.map +1 -1
- package/dist/cliproxy/stats-fetcher.d.ts +41 -0
- package/dist/cliproxy/stats-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/stats-fetcher.js +32 -1
- package/dist/cliproxy/stats-fetcher.js.map +1 -1
- package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +1 -1
- package/dist/cliproxy/tool-sanitization-proxy.js +6 -0
- package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
- package/dist/cliproxy/types.d.ts +2 -0
- package/dist/cliproxy/types.d.ts.map +1 -1
- package/dist/commands/api-command.d.ts.map +1 -1
- package/dist/commands/api-command.js +2 -0
- package/dist/commands/api-command.js.map +1 -1
- package/dist/commands/config-command.js +2 -2
- package/dist/commands/config-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +9 -1
- package/dist/commands/help-command.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts +5 -0
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +62 -1
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +10 -0
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/copilot/copilot-executor.d.ts +2 -2
- package/dist/copilot/copilot-executor.d.ts.map +1 -1
- package/dist/copilot/copilot-executor.js +4 -3
- package/dist/copilot/copilot-executor.js.map +1 -1
- package/dist/delegation/headless-executor.d.ts.map +1 -1
- package/dist/delegation/headless-executor.js +4 -1
- package/dist/delegation/headless-executor.js.map +1 -1
- package/dist/errors/error-types.d.ts +8 -0
- package/dist/errors/error-types.d.ts.map +1 -1
- package/dist/errors/error-types.js +13 -1
- package/dist/errors/error-types.js.map +1 -1
- package/dist/shared/provider-preset-catalog.d.ts +1 -1
- package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
- package/dist/shared/provider-preset-catalog.js +19 -1
- package/dist/shared/provider-preset-catalog.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/ui/assets/accounts-szAllF_0.js +1 -0
- package/dist/ui/assets/{alert-dialog-CetY4Iww.js → alert-dialog-DPdKlUG9.js} +1 -1
- package/dist/ui/assets/api-Bq7TnM0v.js +1 -0
- package/dist/ui/assets/auth-section-DYPWbNRj.js +1 -0
- package/dist/ui/assets/backups-section-gIWfCGmR.js +1 -0
- package/dist/ui/assets/{checkbox-Dhm5Fzkb.js → checkbox-CcX8-GfD.js} +1 -1
- package/dist/ui/assets/cliproxy-SS8eRAX0.js +3 -0
- package/dist/ui/assets/cliproxy-control-panel-Bu0TtDft.js +1 -0
- package/dist/ui/assets/{confirm-dialog-Dn3SrwNV.js → confirm-dialog-BZj0PYFs.js} +1 -1
- package/dist/ui/assets/copilot-DnJj3frU.js +3 -0
- package/dist/ui/assets/cursor-rS1S0i_y.js +1 -0
- package/dist/ui/assets/droid-Dfc2QwbE.js +2 -0
- package/dist/ui/assets/globalenv-section-BrHb5lRq.js +1 -0
- package/dist/ui/assets/health-B0WQPDXb.js +1 -0
- package/dist/ui/assets/icons-BYZM_9Gm.js +1 -0
- package/dist/ui/assets/index-BFTIN2qO.js +1 -0
- package/dist/ui/assets/index-BVBXszJi.js +1 -0
- package/dist/ui/assets/index-DCQkhmoo.js +47 -0
- package/dist/ui/assets/index-DxKsP0Ke.js +1 -0
- package/dist/ui/assets/index-LHbr_5SB.js +1 -0
- package/dist/ui/assets/index-WBo504Wu.css +1 -0
- package/dist/ui/assets/providers/alibabacloud-color.svg +1 -0
- package/dist/ui/assets/proxy-status-widget-DPXgRGkB.js +1 -0
- package/dist/ui/assets/{radix-ui-C1Gpgz6I.js → radix-ui-BR1vy4kf.js} +3 -3
- package/dist/ui/assets/{separator-BLVyAGAm.js → separator-DtcqgZIS.js} +1 -1
- package/dist/ui/assets/shared-DPJ_z23p.js +8 -0
- package/dist/ui/assets/{switch-CwLyB4JK.js → switch-BL5xZtnr.js} +1 -1
- package/dist/ui/assets/{tanstack-DDJIhNJd.js → tanstack-e99Cjjy2.js} +1 -1
- package/dist/ui/assets/updates-B3HKUp7y.js +1 -0
- package/dist/ui/index.html +5 -5
- package/dist/utils/shell-executor.d.ts +5 -0
- package/dist/utils/shell-executor.d.ts.map +1 -1
- package/dist/utils/shell-executor.js +22 -3
- package/dist/utils/shell-executor.js.map +1 -1
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +2 -0
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/model-pricing.d.ts.map +1 -1
- package/dist/web-server/model-pricing.js +50 -1
- package/dist/web-server/model-pricing.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts +1 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +13 -13
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.js +107 -101
- package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
- package/dist/web-server/routes/misc-routes.d.ts.map +1 -1
- package/dist/web-server/routes/misc-routes.js +17 -17
- package/dist/web-server/routes/misc-routes.js.map +1 -1
- package/dist/web-server/routes/profile-routes.d.ts +0 -2
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
- package/dist/web-server/routes/profile-routes.js +8 -18
- package/dist/web-server/routes/profile-routes.js.map +1 -1
- package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
- package/dist/web-server/routes/proxy-routes.js +40 -38
- package/dist/web-server/routes/proxy-routes.js.map +1 -1
- package/dist/web-server/routes/route-helpers.d.ts +15 -0
- package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
- package/dist/web-server/routes/route-helpers.js +145 -15
- package/dist/web-server/routes/route-helpers.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +143 -42
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/dist/web-server/routes/variant-routes.d.ts +0 -2
- package/dist/web-server/routes/variant-routes.d.ts.map +1 -1
- package/dist/web-server/routes/variant-routes.js +3 -17
- package/dist/web-server/routes/variant-routes.js.map +1 -1
- package/dist/web-server/usage/aggregator.d.ts +9 -0
- package/dist/web-server/usage/aggregator.d.ts.map +1 -1
- package/dist/web-server/usage/aggregator.js +71 -7
- package/dist/web-server/usage/aggregator.js.map +1 -1
- package/dist/web-server/usage/cliproxy-usage-syncer.d.ts +34 -0
- package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -0
- package/dist/web-server/usage/cliproxy-usage-syncer.js +158 -0
- package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -0
- package/dist/web-server/usage/cliproxy-usage-transformer.d.ts +26 -0
- package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -0
- package/dist/web-server/usage/cliproxy-usage-transformer.js +141 -0
- package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -0
- package/dist/web-server/usage/disk-cache.d.ts.map +1 -1
- package/dist/web-server/usage/disk-cache.js +4 -1
- package/dist/web-server/usage/disk-cache.js.map +1 -1
- package/dist/web-server/usage/handlers.d.ts +1 -1
- package/dist/web-server/usage/handlers.d.ts.map +1 -1
- package/dist/web-server/usage/handlers.js +8 -3
- package/dist/web-server/usage/handlers.js.map +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/accounts-y2u0CVK8.js +0 -1
- package/dist/ui/assets/api-5q1FT1uL.js +0 -1
- package/dist/ui/assets/auth-section-CaQeee-F.js +0 -1
- package/dist/ui/assets/backups-section-hF88BjYJ.js +0 -1
- package/dist/ui/assets/cliproxy-BeYNWmY_.js +0 -3
- package/dist/ui/assets/cliproxy-control-panel-CJELeI80.js +0 -1
- package/dist/ui/assets/copilot-vwT-4_V4.js +0 -3
- package/dist/ui/assets/cursor-CN3lIX63.js +0 -1
- package/dist/ui/assets/droid-DBP2yCY7.js +0 -2
- package/dist/ui/assets/globalenv-section-DNKAJasL.js +0 -1
- package/dist/ui/assets/health-C7tNiLzc.js +0 -1
- package/dist/ui/assets/icons-DrewC9c3.js +0 -1
- package/dist/ui/assets/index-C8-ef-r7.js +0 -1
- package/dist/ui/assets/index-MGh88HoC.js +0 -1
- package/dist/ui/assets/index-QBUSDLTx.js +0 -1
- package/dist/ui/assets/index-k-HuyjpO.js +0 -47
- package/dist/ui/assets/index-s-oTl3hW.css +0 -1
- package/dist/ui/assets/index-uYnNU6Ut.js +0 -1
- package/dist/ui/assets/proxy-status-widget-CIm5vKY7.js +0 -1
- package/dist/ui/assets/shared-CHH09ZNi.js +0 -8
- package/dist/ui/assets/updates-VlxL3aum.js +0 -1
|
@@ -29,13 +29,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
29
29
|
return result;
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.prewarmUsageCache = exports.clearUsageCache = exports.getCachedHourlyData = exports.getCachedSessionData = exports.getCachedMonthlyData = exports.getCachedDailyData = exports.getLastFetchTimestamp = exports.mergeSessionData = exports.mergeHourlyData = exports.mergeMonthlyData = exports.mergeDailyData = void 0;
|
|
32
|
+
exports.refreshUsageCache = exports.shutdownUsageAggregator = exports.prewarmUsageCache = exports.clearUsageCache = exports.getCachedHourlyData = exports.getCachedSessionData = exports.getCachedMonthlyData = exports.getCachedDailyData = exports.getLastFetchTimestamp = exports.mergeSessionData = exports.mergeHourlyData = exports.mergeMonthlyData = exports.mergeDailyData = void 0;
|
|
33
33
|
const fs = __importStar(require("fs"));
|
|
34
34
|
const path = __importStar(require("path"));
|
|
35
35
|
const data_aggregator_1 = require("./data-aggregator");
|
|
36
36
|
const disk_cache_1 = require("./disk-cache");
|
|
37
37
|
const ui_1 = require("../../utils/ui");
|
|
38
38
|
const config_manager_1 = require("../../utils/config-manager");
|
|
39
|
+
const cliproxy_usage_syncer_1 = require("./cliproxy-usage-syncer");
|
|
39
40
|
// ============================================================================
|
|
40
41
|
// Multi-Instance Support - Aggregate usage from CCS profiles
|
|
41
42
|
// ============================================================================
|
|
@@ -240,6 +241,8 @@ const pendingRequests = new Map();
|
|
|
240
241
|
let diskCacheInitialized = false;
|
|
241
242
|
// Track if background refresh is in progress
|
|
242
243
|
let isRefreshing = false;
|
|
244
|
+
// Coalesced full refresh promise shared across all usage loaders
|
|
245
|
+
let pendingFullRefresh = null;
|
|
243
246
|
/**
|
|
244
247
|
* Persist cache to disk when we have enough data to be useful.
|
|
245
248
|
*/
|
|
@@ -258,6 +261,9 @@ function persistCacheIfComplete() {
|
|
|
258
261
|
* Aggregates data from default ~/.claude/ AND all CCS instances
|
|
259
262
|
*/
|
|
260
263
|
async function refreshFromSource() {
|
|
264
|
+
// Try to sync CLIProxy snapshot before reading it.
|
|
265
|
+
// Non-fatal: syncer handles unavailability and stale fallback.
|
|
266
|
+
await (0, cliproxy_usage_syncer_1.syncCliproxyUsage)();
|
|
261
267
|
// Load default data (from ~/.claude/projects/ or CLAUDE_CONFIG_DIR)
|
|
262
268
|
const defaultData = await (0, data_aggregator_1.loadAllUsageData)();
|
|
263
269
|
// Load data from all CCS instances sequentially
|
|
@@ -287,6 +293,19 @@ async function refreshFromSource() {
|
|
|
287
293
|
if (instanceDataResults.length > 0) {
|
|
288
294
|
console.log((0, ui_1.info)(`Aggregated usage data from ${instanceDataResults.length} CCS instance(s)`));
|
|
289
295
|
}
|
|
296
|
+
// Load CLIProxy usage data (from local snapshot cache)
|
|
297
|
+
try {
|
|
298
|
+
const cliproxyData = await (0, cliproxy_usage_syncer_1.loadCachedCliproxyData)();
|
|
299
|
+
if (cliproxyData.daily.length > 0) {
|
|
300
|
+
allDailySources.push(cliproxyData.daily);
|
|
301
|
+
allHourlySources.push(cliproxyData.hourly);
|
|
302
|
+
allMonthlySources.push(cliproxyData.monthly);
|
|
303
|
+
console.log((0, ui_1.info)('Included CLIProxy usage data'));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
console.error((0, ui_1.fail)(`Failed to load CLIProxy usage data: ${err}`));
|
|
308
|
+
}
|
|
290
309
|
// Merge all data sources
|
|
291
310
|
const daily = mergeDailyData(allDailySources);
|
|
292
311
|
const hourly = mergeHourlyData(allHourlySources);
|
|
@@ -303,10 +322,33 @@ async function refreshFromSource() {
|
|
|
303
322
|
(0, disk_cache_1.writeDiskCache)(daily, hourly, monthly, session);
|
|
304
323
|
return { daily, hourly, monthly, session };
|
|
305
324
|
}
|
|
325
|
+
async function refreshFromSourceCoalesced(force = false) {
|
|
326
|
+
// Wait for any in-flight refresh to finish before starting a forced one
|
|
327
|
+
// to prevent concurrent refreshes competing for the same resources
|
|
328
|
+
if (force && pendingFullRefresh) {
|
|
329
|
+
await pendingFullRefresh.catch(() => { });
|
|
330
|
+
}
|
|
331
|
+
if (force) {
|
|
332
|
+
pendingFullRefresh = refreshFromSource().finally(() => {
|
|
333
|
+
pendingFullRefresh = null;
|
|
334
|
+
});
|
|
335
|
+
return pendingFullRefresh;
|
|
336
|
+
}
|
|
337
|
+
if (pendingFullRefresh) {
|
|
338
|
+
return pendingFullRefresh;
|
|
339
|
+
}
|
|
340
|
+
pendingFullRefresh = refreshFromSource().finally(() => {
|
|
341
|
+
pendingFullRefresh = null;
|
|
342
|
+
});
|
|
343
|
+
return pendingFullRefresh;
|
|
344
|
+
}
|
|
306
345
|
/**
|
|
307
346
|
* Initialize in-memory cache from disk cache (lazy - called on first API request).
|
|
308
347
|
*/
|
|
309
348
|
function ensureDiskCacheLoaded() {
|
|
349
|
+
// Start sync when usage APIs are actually accessed.
|
|
350
|
+
// startCliproxySync() is idempotent.
|
|
351
|
+
(0, cliproxy_usage_syncer_1.startCliproxySync)();
|
|
310
352
|
if (diskCacheInitialized)
|
|
311
353
|
return;
|
|
312
354
|
diskCacheInitialized = true;
|
|
@@ -375,28 +417,28 @@ async function getCachedData(key, ttl, loader) {
|
|
|
375
417
|
/** Cached loader for daily usage data */
|
|
376
418
|
async function getCachedDailyData() {
|
|
377
419
|
return getCachedData('daily', CACHE_TTL.daily, async () => {
|
|
378
|
-
return await (
|
|
420
|
+
return (await refreshFromSourceCoalesced()).daily;
|
|
379
421
|
});
|
|
380
422
|
}
|
|
381
423
|
exports.getCachedDailyData = getCachedDailyData;
|
|
382
424
|
/** Cached loader for monthly usage data */
|
|
383
425
|
async function getCachedMonthlyData() {
|
|
384
426
|
return getCachedData('monthly', CACHE_TTL.monthly, async () => {
|
|
385
|
-
return await (
|
|
427
|
+
return (await refreshFromSourceCoalesced()).monthly;
|
|
386
428
|
});
|
|
387
429
|
}
|
|
388
430
|
exports.getCachedMonthlyData = getCachedMonthlyData;
|
|
389
431
|
/** Cached loader for session data */
|
|
390
432
|
async function getCachedSessionData() {
|
|
391
433
|
return getCachedData('session', CACHE_TTL.session, async () => {
|
|
392
|
-
return await (
|
|
434
|
+
return (await refreshFromSourceCoalesced()).session;
|
|
393
435
|
});
|
|
394
436
|
}
|
|
395
437
|
exports.getCachedSessionData = getCachedSessionData;
|
|
396
438
|
/** Cached loader for hourly usage data */
|
|
397
439
|
async function getCachedHourlyData() {
|
|
398
440
|
return getCachedData('hourly', CACHE_TTL.daily, async () => {
|
|
399
|
-
return await (
|
|
441
|
+
return (await refreshFromSourceCoalesced()).hourly;
|
|
400
442
|
});
|
|
401
443
|
}
|
|
402
444
|
exports.getCachedHourlyData = getCachedHourlyData;
|
|
@@ -405,9 +447,12 @@ exports.getCachedHourlyData = getCachedHourlyData;
|
|
|
405
447
|
*/
|
|
406
448
|
function clearUsageCache() {
|
|
407
449
|
cache.clear();
|
|
450
|
+
pendingRequests.clear();
|
|
451
|
+
pendingFullRefresh = null;
|
|
408
452
|
(0, disk_cache_1.clearDiskCache)();
|
|
409
453
|
// Reset so next API call will try to reload from disk/source
|
|
410
454
|
diskCacheInitialized = false;
|
|
455
|
+
lastFetchTimestamp = null;
|
|
411
456
|
}
|
|
412
457
|
exports.clearUsageCache = clearUsageCache;
|
|
413
458
|
/**
|
|
@@ -422,6 +467,8 @@ async function prewarmUsageCache() {
|
|
|
422
467
|
const start = Date.now();
|
|
423
468
|
console.log((0, ui_1.info)('Pre-warming usage cache...'));
|
|
424
469
|
try {
|
|
470
|
+
// Start CLIProxy usage syncer early (runs in background every 5 min)
|
|
471
|
+
(0, cliproxy_usage_syncer_1.startCliproxySync)();
|
|
425
472
|
const diskCache = (0, disk_cache_1.readDiskCache)();
|
|
426
473
|
// Fresh disk cache - use it directly
|
|
427
474
|
if (diskCache && (0, disk_cache_1.isDiskCacheFresh)(diskCache)) {
|
|
@@ -448,7 +495,7 @@ async function prewarmUsageCache() {
|
|
|
448
495
|
// Background refresh
|
|
449
496
|
if (!isRefreshing) {
|
|
450
497
|
isRefreshing = true;
|
|
451
|
-
|
|
498
|
+
refreshFromSourceCoalesced()
|
|
452
499
|
.then(() => console.log((0, ui_1.ok)('Background refresh complete')))
|
|
453
500
|
.catch((err) => console.error((0, ui_1.fail)(`Background refresh failed: ${err}`)))
|
|
454
501
|
.finally(() => {
|
|
@@ -459,7 +506,7 @@ async function prewarmUsageCache() {
|
|
|
459
506
|
}
|
|
460
507
|
// No usable disk cache - refresh from source (blocking for first startup only)
|
|
461
508
|
console.log((0, ui_1.info)('No disk cache, loading from source...'));
|
|
462
|
-
await
|
|
509
|
+
await refreshFromSourceCoalesced();
|
|
463
510
|
const elapsed = Date.now() - start;
|
|
464
511
|
console.log((0, ui_1.ok)(`Usage cache ready (${elapsed}ms)`));
|
|
465
512
|
return { timestamp: Date.now(), elapsed, source: 'fresh' };
|
|
@@ -470,4 +517,21 @@ async function prewarmUsageCache() {
|
|
|
470
517
|
}
|
|
471
518
|
}
|
|
472
519
|
exports.prewarmUsageCache = prewarmUsageCache;
|
|
520
|
+
/**
|
|
521
|
+
* Shutdown usage aggregator cleanly (stops background syncer)
|
|
522
|
+
*/
|
|
523
|
+
function shutdownUsageAggregator() {
|
|
524
|
+
(0, cliproxy_usage_syncer_1.stopCliproxySync)();
|
|
525
|
+
}
|
|
526
|
+
exports.shutdownUsageAggregator = shutdownUsageAggregator;
|
|
527
|
+
/**
|
|
528
|
+
* Force refresh usage cache from all sources.
|
|
529
|
+
* Used by manual refresh endpoint.
|
|
530
|
+
*/
|
|
531
|
+
async function refreshUsageCache() {
|
|
532
|
+
// Ensure periodic sync is running for subsequent updates.
|
|
533
|
+
(0, cliproxy_usage_syncer_1.startCliproxySync)();
|
|
534
|
+
await refreshFromSourceCoalesced(true);
|
|
535
|
+
}
|
|
536
|
+
exports.refreshUsageCache = refreshUsageCache;
|
|
473
537
|
//# sourceMappingURL=aggregator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../../src/web-server/usage/aggregator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../../src/web-server/usage/aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLIProxy Usage Syncer
|
|
3
|
+
*
|
|
4
|
+
* Periodically fetches CLIProxy usage data, transforms it, and persists
|
|
5
|
+
* snapshots locally so analytics data survives CLIProxy restarts.
|
|
6
|
+
*
|
|
7
|
+
* Snapshot location: ~/.ccs/cache/cliproxy-usage/latest.json
|
|
8
|
+
* Sync interval: 5 minutes
|
|
9
|
+
*/
|
|
10
|
+
import type { DailyUsage, HourlyUsage, MonthlyUsage } from './types';
|
|
11
|
+
/**
|
|
12
|
+
* Read the latest CLIProxy usage snapshot from disk.
|
|
13
|
+
* Returns empty arrays on failure (file not found, parse error, version mismatch).
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadCachedCliproxyData(): Promise<{
|
|
16
|
+
daily: DailyUsage[];
|
|
17
|
+
hourly: HourlyUsage[];
|
|
18
|
+
monthly: MonthlyUsage[];
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch latest CLIProxy usage data and persist a snapshot to disk.
|
|
22
|
+
* Non-fatal: logs warning and returns early if CLIProxy is unavailable.
|
|
23
|
+
*/
|
|
24
|
+
export declare function syncCliproxyUsage(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Start periodic CLIProxy usage sync (every 5 minutes).
|
|
27
|
+
* Performs an immediate sync on startup.
|
|
28
|
+
*/
|
|
29
|
+
export declare function startCliproxySync(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Stop periodic CLIProxy usage sync.
|
|
32
|
+
*/
|
|
33
|
+
export declare function stopCliproxySync(): void;
|
|
34
|
+
//# sourceMappingURL=cliproxy-usage-syncer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliproxy-usage-syncer.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/cliproxy-usage-syncer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAkDrE;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC,CAsBD;AAMD;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCvD;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAcxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLIProxy Usage Syncer
|
|
4
|
+
*
|
|
5
|
+
* Periodically fetches CLIProxy usage data, transforms it, and persists
|
|
6
|
+
* snapshots locally so analytics data survives CLIProxy restarts.
|
|
7
|
+
*
|
|
8
|
+
* Snapshot location: ~/.ccs/cache/cliproxy-usage/latest.json
|
|
9
|
+
* Sync interval: 5 minutes
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.stopCliproxySync = exports.startCliproxySync = exports.syncCliproxyUsage = exports.loadCachedCliproxyData = void 0;
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const stats_fetcher_1 = require("../../cliproxy/stats-fetcher");
|
|
39
|
+
const cliproxy_usage_transformer_1 = require("./cliproxy-usage-transformer");
|
|
40
|
+
const config_manager_1 = require("../../utils/config-manager");
|
|
41
|
+
const ui_1 = require("../../utils/ui");
|
|
42
|
+
const SNAPSHOT_VERSION = 1;
|
|
43
|
+
/** Sync interval in ms, configurable via CCS_CLIPROXY_SYNC_INTERVAL env var (default: 5 min) */
|
|
44
|
+
const SYNC_INTERVAL_MS = Math.max(30000, parseInt(process.env.CCS_CLIPROXY_SYNC_INTERVAL ?? '300000', 10) || 300000);
|
|
45
|
+
// Module-level interval ID
|
|
46
|
+
let syncIntervalId = null;
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Cache directory helpers
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
function getCliproxyCacheDir() {
|
|
51
|
+
return path.join((0, config_manager_1.getCcsDir)(), 'cache', 'cliproxy-usage');
|
|
52
|
+
}
|
|
53
|
+
function getLatestSnapshotPath() {
|
|
54
|
+
return path.join(getCliproxyCacheDir(), 'latest.json');
|
|
55
|
+
}
|
|
56
|
+
function ensureCliproxyCacheDir() {
|
|
57
|
+
const dir = getCliproxyCacheDir();
|
|
58
|
+
if (!fs.existsSync(dir)) {
|
|
59
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Load cached data
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
/**
|
|
66
|
+
* Read the latest CLIProxy usage snapshot from disk.
|
|
67
|
+
* Returns empty arrays on failure (file not found, parse error, version mismatch).
|
|
68
|
+
*/
|
|
69
|
+
async function loadCachedCliproxyData() {
|
|
70
|
+
const empty = { daily: [], hourly: [], monthly: [] };
|
|
71
|
+
try {
|
|
72
|
+
const snapshotPath = getLatestSnapshotPath();
|
|
73
|
+
if (!fs.existsSync(snapshotPath)) {
|
|
74
|
+
return empty;
|
|
75
|
+
}
|
|
76
|
+
const raw = fs.readFileSync(snapshotPath, 'utf-8');
|
|
77
|
+
const snapshot = JSON.parse(raw);
|
|
78
|
+
if (snapshot.version !== SNAPSHOT_VERSION) {
|
|
79
|
+
console.log((0, ui_1.info)('CLIProxy snapshot version mismatch, will refresh on next sync'));
|
|
80
|
+
return empty;
|
|
81
|
+
}
|
|
82
|
+
return { daily: snapshot.daily, hourly: snapshot.hourly, monthly: snapshot.monthly };
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.log((0, ui_1.warn)('Failed to read CLIProxy snapshot:') + ` ${err.message}`);
|
|
86
|
+
return empty;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.loadCachedCliproxyData = loadCachedCliproxyData;
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Sync
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
/**
|
|
94
|
+
* Fetch latest CLIProxy usage data and persist a snapshot to disk.
|
|
95
|
+
* Non-fatal: logs warning and returns early if CLIProxy is unavailable.
|
|
96
|
+
*/
|
|
97
|
+
async function syncCliproxyUsage() {
|
|
98
|
+
const raw = await (0, stats_fetcher_1.fetchCliproxyUsageRaw)();
|
|
99
|
+
if (raw === null) {
|
|
100
|
+
console.log((0, ui_1.warn)('CLIProxy usage sync skipped: proxy unavailable'));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
ensureCliproxyCacheDir();
|
|
105
|
+
const daily = (0, cliproxy_usage_transformer_1.transformCliproxyToDailyUsage)(raw);
|
|
106
|
+
const hourly = (0, cliproxy_usage_transformer_1.transformCliproxyToHourlyUsage)(raw);
|
|
107
|
+
const monthly = (0, cliproxy_usage_transformer_1.transformCliproxyToMonthlyUsage)(raw);
|
|
108
|
+
const snapshot = {
|
|
109
|
+
version: SNAPSHOT_VERSION,
|
|
110
|
+
timestamp: Date.now(),
|
|
111
|
+
daily,
|
|
112
|
+
hourly,
|
|
113
|
+
monthly,
|
|
114
|
+
};
|
|
115
|
+
// Atomic write: temp file + rename
|
|
116
|
+
const snapshotPath = getLatestSnapshotPath();
|
|
117
|
+
const tempFile = snapshotPath + '.tmp';
|
|
118
|
+
fs.writeFileSync(tempFile, JSON.stringify(snapshot), 'utf-8');
|
|
119
|
+
fs.renameSync(tempFile, snapshotPath);
|
|
120
|
+
console.log((0, ui_1.ok)('CLIProxy usage snapshot updated'));
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
// Non-fatal - stale snapshot will continue to be served
|
|
124
|
+
console.log((0, ui_1.warn)('Failed to write CLIProxy snapshot:') + ` ${err.message}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.syncCliproxyUsage = syncCliproxyUsage;
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// Interval management
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
/**
|
|
132
|
+
* Start periodic CLIProxy usage sync (every 5 minutes).
|
|
133
|
+
* Performs an immediate sync on startup.
|
|
134
|
+
*/
|
|
135
|
+
function startCliproxySync() {
|
|
136
|
+
if (syncIntervalId !== null) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const intervalMin = Math.round(SYNC_INTERVAL_MS / 60000);
|
|
140
|
+
console.log((0, ui_1.info)(`Starting CLIProxy usage sync (interval: ${intervalMin} min)`));
|
|
141
|
+
// Fire-and-forget initial sync
|
|
142
|
+
void syncCliproxyUsage();
|
|
143
|
+
syncIntervalId = setInterval(() => {
|
|
144
|
+
void syncCliproxyUsage();
|
|
145
|
+
}, SYNC_INTERVAL_MS);
|
|
146
|
+
}
|
|
147
|
+
exports.startCliproxySync = startCliproxySync;
|
|
148
|
+
/**
|
|
149
|
+
* Stop periodic CLIProxy usage sync.
|
|
150
|
+
*/
|
|
151
|
+
function stopCliproxySync() {
|
|
152
|
+
if (syncIntervalId !== null) {
|
|
153
|
+
clearInterval(syncIntervalId);
|
|
154
|
+
syncIntervalId = null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.stopCliproxySync = stopCliproxySync;
|
|
158
|
+
//# sourceMappingURL=cliproxy-usage-syncer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliproxy-usage-syncer.js","sourceRoot":"","sources":["../../../src/web-server/usage/cliproxy-usage-syncer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLIProxy Usage Transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms CLIProxy's usage API response into DailyUsage/HourlyUsage/MonthlyUsage
|
|
5
|
+
* types compatible with the CCS analytics dashboard.
|
|
6
|
+
*/
|
|
7
|
+
import type { CliproxyUsageApiResponse, CliproxyRequestDetail } from '../../cliproxy/stats-fetcher';
|
|
8
|
+
import type { DailyUsage, HourlyUsage, MonthlyUsage } from './types';
|
|
9
|
+
/** Flat entry pairing a model name with its request detail */
|
|
10
|
+
interface FlatDetail {
|
|
11
|
+
model: string;
|
|
12
|
+
detail: CliproxyRequestDetail;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Flatten the nested response.usage.apis[provider].models[model].details[]
|
|
16
|
+
* structure into a flat array. Failed requests are skipped.
|
|
17
|
+
*/
|
|
18
|
+
export declare function flattenCliproxyDetails(response: CliproxyUsageApiResponse): FlatDetail[];
|
|
19
|
+
/** Transform CLIProxy usage response into DailyUsage array (sorted descending by date) */
|
|
20
|
+
export declare function transformCliproxyToDailyUsage(response: CliproxyUsageApiResponse): DailyUsage[];
|
|
21
|
+
/** Transform CLIProxy usage response into HourlyUsage array (sorted descending by hour) */
|
|
22
|
+
export declare function transformCliproxyToHourlyUsage(response: CliproxyUsageApiResponse): HourlyUsage[];
|
|
23
|
+
/** Transform CLIProxy usage response into MonthlyUsage array (sorted descending by month) */
|
|
24
|
+
export declare function transformCliproxyToMonthlyUsage(response: CliproxyUsageApiResponse): MonthlyUsage[];
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=cliproxy-usage-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliproxy-usage-transformer.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/cliproxy-usage-transformer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAEpG,OAAO,KAAK,EAAkB,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAMrF,8DAA8D;AAC9D,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAuBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,UAAU,EAAE,CAkBvF;AAiDD,0FAA0F;AAC1F,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,UAAU,EAAE,CAsB9F;AAED,2FAA2F;AAC3F,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,WAAW,EAAE,CA0BhG;AAED,6FAA6F;AAC7F,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,wBAAwB,GACjC,YAAY,EAAE,CAkBhB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLIProxy Usage Transformer
|
|
4
|
+
*
|
|
5
|
+
* Transforms CLIProxy's usage API response into DailyUsage/HourlyUsage/MonthlyUsage
|
|
6
|
+
* types compatible with the CCS analytics dashboard.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.transformCliproxyToMonthlyUsage = exports.transformCliproxyToHourlyUsage = exports.transformCliproxyToDailyUsage = exports.flattenCliproxyDetails = void 0;
|
|
10
|
+
const model_pricing_1 = require("../model-pricing");
|
|
11
|
+
/** Build ModelBreakdown from accumulated token counts */
|
|
12
|
+
function buildModelBreakdown(modelName, acc) {
|
|
13
|
+
const { inputTokens, outputTokens, cacheReadTokens } = acc;
|
|
14
|
+
const cost = (0, model_pricing_1.calculateCost)({ inputTokens, outputTokens, cacheCreationTokens: 0, cacheReadTokens }, modelName);
|
|
15
|
+
return { modelName, inputTokens, outputTokens, cacheCreationTokens: 0, cacheReadTokens, cost };
|
|
16
|
+
}
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// FLATTEN
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Flatten the nested response.usage.apis[provider].models[model].details[]
|
|
22
|
+
* structure into a flat array. Failed requests are skipped.
|
|
23
|
+
*/
|
|
24
|
+
function flattenCliproxyDetails(response) {
|
|
25
|
+
const apis = response?.usage?.apis;
|
|
26
|
+
if (!apis)
|
|
27
|
+
return [];
|
|
28
|
+
const results = [];
|
|
29
|
+
for (const providerData of Object.values(apis)) {
|
|
30
|
+
const models = providerData?.models;
|
|
31
|
+
if (!models)
|
|
32
|
+
continue;
|
|
33
|
+
for (const [model, modelData] of Object.entries(models)) {
|
|
34
|
+
const details = modelData?.details;
|
|
35
|
+
if (!details)
|
|
36
|
+
continue;
|
|
37
|
+
for (const detail of details) {
|
|
38
|
+
if (detail.failed)
|
|
39
|
+
continue;
|
|
40
|
+
results.push({ model, detail });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return results;
|
|
45
|
+
}
|
|
46
|
+
exports.flattenCliproxyDetails = flattenCliproxyDetails;
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// GENERIC AGGREGATOR
|
|
49
|
+
// ============================================================================
|
|
50
|
+
/** Group flat details by a time key extractor, return sorted DailyUsage-like records */
|
|
51
|
+
function aggregateByKey(flat, keyFn, buildRecord, sortFn) {
|
|
52
|
+
// bucket: timeKey -> modelName -> accumulator
|
|
53
|
+
const buckets = new Map();
|
|
54
|
+
for (const { model, detail } of flat) {
|
|
55
|
+
const key = keyFn(detail.timestamp);
|
|
56
|
+
if (!buckets.has(key))
|
|
57
|
+
buckets.set(key, new Map());
|
|
58
|
+
const modelMap = buckets.get(key);
|
|
59
|
+
if (!modelMap.has(model)) {
|
|
60
|
+
modelMap.set(model, { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0 });
|
|
61
|
+
}
|
|
62
|
+
const acc = modelMap.get(model);
|
|
63
|
+
acc.inputTokens += detail.tokens?.input_tokens ?? 0;
|
|
64
|
+
acc.outputTokens += detail.tokens?.output_tokens ?? 0;
|
|
65
|
+
acc.cacheReadTokens += detail.tokens?.cached_tokens ?? 0;
|
|
66
|
+
}
|
|
67
|
+
const records = [];
|
|
68
|
+
Array.from(buckets.entries()).forEach(([key, modelMap]) => {
|
|
69
|
+
const breakdowns = Array.from(modelMap.entries()).map(([name, acc]) => buildModelBreakdown(name, acc));
|
|
70
|
+
records.push(buildRecord(key, breakdowns));
|
|
71
|
+
});
|
|
72
|
+
return records.sort(sortFn);
|
|
73
|
+
}
|
|
74
|
+
/** Sum token field across all breakdowns */
|
|
75
|
+
function sumField(breakdowns, field) {
|
|
76
|
+
return breakdowns.reduce((acc, b) => acc + b[field], 0);
|
|
77
|
+
}
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// TRANSFORMS
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/** Transform CLIProxy usage response into DailyUsage array (sorted descending by date) */
|
|
82
|
+
function transformCliproxyToDailyUsage(response) {
|
|
83
|
+
const flat = flattenCliproxyDetails(response);
|
|
84
|
+
return aggregateByKey(flat, (ts) => ts.slice(0, 10), (date, breakdowns) => {
|
|
85
|
+
const totalCost = sumField(breakdowns, 'cost');
|
|
86
|
+
return {
|
|
87
|
+
date,
|
|
88
|
+
source: 'cliproxy',
|
|
89
|
+
inputTokens: sumField(breakdowns, 'inputTokens'),
|
|
90
|
+
outputTokens: sumField(breakdowns, 'outputTokens'),
|
|
91
|
+
cacheCreationTokens: 0,
|
|
92
|
+
cacheReadTokens: sumField(breakdowns, 'cacheReadTokens'),
|
|
93
|
+
cost: totalCost,
|
|
94
|
+
totalCost,
|
|
95
|
+
modelsUsed: breakdowns.map((b) => b.modelName),
|
|
96
|
+
modelBreakdowns: breakdowns,
|
|
97
|
+
};
|
|
98
|
+
}, (a, b) => b.date.localeCompare(a.date));
|
|
99
|
+
}
|
|
100
|
+
exports.transformCliproxyToDailyUsage = transformCliproxyToDailyUsage;
|
|
101
|
+
/** Transform CLIProxy usage response into HourlyUsage array (sorted descending by hour) */
|
|
102
|
+
function transformCliproxyToHourlyUsage(response) {
|
|
103
|
+
const flat = flattenCliproxyDetails(response);
|
|
104
|
+
return aggregateByKey(flat, (ts) => {
|
|
105
|
+
const date = ts.slice(0, 10);
|
|
106
|
+
const hour = ts.slice(11, 13) || '00';
|
|
107
|
+
return `${date} ${hour}:00`;
|
|
108
|
+
}, (hour, breakdowns) => {
|
|
109
|
+
const totalCost = sumField(breakdowns, 'cost');
|
|
110
|
+
return {
|
|
111
|
+
hour,
|
|
112
|
+
source: 'cliproxy',
|
|
113
|
+
inputTokens: sumField(breakdowns, 'inputTokens'),
|
|
114
|
+
outputTokens: sumField(breakdowns, 'outputTokens'),
|
|
115
|
+
cacheCreationTokens: 0,
|
|
116
|
+
cacheReadTokens: sumField(breakdowns, 'cacheReadTokens'),
|
|
117
|
+
cost: totalCost,
|
|
118
|
+
totalCost,
|
|
119
|
+
modelsUsed: breakdowns.map((b) => b.modelName),
|
|
120
|
+
modelBreakdowns: breakdowns,
|
|
121
|
+
};
|
|
122
|
+
}, (a, b) => b.hour.localeCompare(a.hour));
|
|
123
|
+
}
|
|
124
|
+
exports.transformCliproxyToHourlyUsage = transformCliproxyToHourlyUsage;
|
|
125
|
+
/** Transform CLIProxy usage response into MonthlyUsage array (sorted descending by month) */
|
|
126
|
+
function transformCliproxyToMonthlyUsage(response) {
|
|
127
|
+
const flat = flattenCliproxyDetails(response);
|
|
128
|
+
return aggregateByKey(flat, (ts) => ts.slice(0, 7), (month, breakdowns) => ({
|
|
129
|
+
month,
|
|
130
|
+
source: 'cliproxy',
|
|
131
|
+
inputTokens: sumField(breakdowns, 'inputTokens'),
|
|
132
|
+
outputTokens: sumField(breakdowns, 'outputTokens'),
|
|
133
|
+
cacheCreationTokens: 0,
|
|
134
|
+
cacheReadTokens: sumField(breakdowns, 'cacheReadTokens'),
|
|
135
|
+
totalCost: sumField(breakdowns, 'cost'),
|
|
136
|
+
modelsUsed: breakdowns.map((b) => b.modelName),
|
|
137
|
+
modelBreakdowns: breakdowns,
|
|
138
|
+
}), (a, b) => b.month.localeCompare(a.month));
|
|
139
|
+
}
|
|
140
|
+
exports.transformCliproxyToMonthlyUsage = transformCliproxyToMonthlyUsage;
|
|
141
|
+
//# sourceMappingURL=cliproxy-usage-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliproxy-usage-transformer.js","sourceRoot":"","sources":["../../../src/web-server/usage/cliproxy-usage-transformer.ts"],"names":[],"mappings":"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"}
|