@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.
Files changed (201) hide show
  1. package/README.md +23 -1
  2. package/dist/api/services/profile-writer.d.ts.map +1 -1
  3. package/dist/api/services/profile-writer.js +33 -0
  4. package/dist/api/services/profile-writer.js.map +1 -1
  5. package/dist/auth/profile-continuity-inheritance.d.ts +20 -0
  6. package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -0
  7. package/dist/auth/profile-continuity-inheritance.js +137 -0
  8. package/dist/auth/profile-continuity-inheritance.js.map +1 -0
  9. package/dist/ccs.js +41 -3
  10. package/dist/ccs.js.map +1 -1
  11. package/dist/cliproxy/auth/oauth-process.d.ts +1 -0
  12. package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -1
  13. package/dist/cliproxy/auth/oauth-process.js +63 -4
  14. package/dist/cliproxy/auth/oauth-process.js.map +1 -1
  15. package/dist/cliproxy/catalog-cache.d.ts.map +1 -1
  16. package/dist/cliproxy/catalog-cache.js +10 -3
  17. package/dist/cliproxy/catalog-cache.js.map +1 -1
  18. package/dist/cliproxy/composite-validator.d.ts.map +1 -1
  19. package/dist/cliproxy/composite-validator.js +9 -0
  20. package/dist/cliproxy/composite-validator.js.map +1 -1
  21. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  22. package/dist/cliproxy/config/env-builder.js +74 -16
  23. package/dist/cliproxy/config/env-builder.js.map +1 -1
  24. package/dist/cliproxy/config/generator.d.ts +3 -1
  25. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  26. package/dist/cliproxy/config/generator.js +17 -6
  27. package/dist/cliproxy/config/generator.js.map +1 -1
  28. package/dist/cliproxy/executor/env-resolver.d.ts +2 -0
  29. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  30. package/dist/cliproxy/executor/env-resolver.js +2 -1
  31. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  32. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  33. package/dist/cliproxy/executor/index.js +15 -0
  34. package/dist/cliproxy/executor/index.js.map +1 -1
  35. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  36. package/dist/cliproxy/model-catalog.js +11 -39
  37. package/dist/cliproxy/model-catalog.js.map +1 -1
  38. package/dist/cliproxy/model-config.d.ts.map +1 -1
  39. package/dist/cliproxy/model-config.js +12 -11
  40. package/dist/cliproxy/model-config.js.map +1 -1
  41. package/dist/cliproxy/model-id-normalizer.d.ts +37 -2
  42. package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -1
  43. package/dist/cliproxy/model-id-normalizer.js +132 -7
  44. package/dist/cliproxy/model-id-normalizer.js.map +1 -1
  45. package/dist/cliproxy/services/variant-service.d.ts.map +1 -1
  46. package/dist/cliproxy/services/variant-service.js +22 -6
  47. package/dist/cliproxy/services/variant-service.js.map +1 -1
  48. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
  49. package/dist/cliproxy/services/variant-settings.js +5 -3
  50. package/dist/cliproxy/services/variant-settings.js.map +1 -1
  51. package/dist/cliproxy/stats-fetcher.d.ts +41 -0
  52. package/dist/cliproxy/stats-fetcher.d.ts.map +1 -1
  53. package/dist/cliproxy/stats-fetcher.js +32 -1
  54. package/dist/cliproxy/stats-fetcher.js.map +1 -1
  55. package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +1 -1
  56. package/dist/cliproxy/tool-sanitization-proxy.js +6 -0
  57. package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
  58. package/dist/cliproxy/types.d.ts +2 -0
  59. package/dist/cliproxy/types.d.ts.map +1 -1
  60. package/dist/commands/api-command.d.ts.map +1 -1
  61. package/dist/commands/api-command.js +2 -0
  62. package/dist/commands/api-command.js.map +1 -1
  63. package/dist/commands/config-command.js +2 -2
  64. package/dist/commands/config-command.js.map +1 -1
  65. package/dist/commands/help-command.d.ts.map +1 -1
  66. package/dist/commands/help-command.js +9 -1
  67. package/dist/commands/help-command.js.map +1 -1
  68. package/dist/config/unified-config-loader.d.ts +5 -0
  69. package/dist/config/unified-config-loader.d.ts.map +1 -1
  70. package/dist/config/unified-config-loader.js +62 -1
  71. package/dist/config/unified-config-loader.js.map +1 -1
  72. package/dist/config/unified-config-types.d.ts +10 -0
  73. package/dist/config/unified-config-types.d.ts.map +1 -1
  74. package/dist/config/unified-config-types.js.map +1 -1
  75. package/dist/copilot/copilot-executor.d.ts +2 -2
  76. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  77. package/dist/copilot/copilot-executor.js +4 -3
  78. package/dist/copilot/copilot-executor.js.map +1 -1
  79. package/dist/delegation/headless-executor.d.ts.map +1 -1
  80. package/dist/delegation/headless-executor.js +4 -1
  81. package/dist/delegation/headless-executor.js.map +1 -1
  82. package/dist/errors/error-types.d.ts +8 -0
  83. package/dist/errors/error-types.d.ts.map +1 -1
  84. package/dist/errors/error-types.js +13 -1
  85. package/dist/errors/error-types.js.map +1 -1
  86. package/dist/shared/provider-preset-catalog.d.ts +1 -1
  87. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  88. package/dist/shared/provider-preset-catalog.js +19 -1
  89. package/dist/shared/provider-preset-catalog.js.map +1 -1
  90. package/dist/types/config.d.ts +2 -0
  91. package/dist/types/config.d.ts.map +1 -1
  92. package/dist/types/config.js.map +1 -1
  93. package/dist/ui/assets/accounts-szAllF_0.js +1 -0
  94. package/dist/ui/assets/{alert-dialog-CetY4Iww.js → alert-dialog-DPdKlUG9.js} +1 -1
  95. package/dist/ui/assets/api-Bq7TnM0v.js +1 -0
  96. package/dist/ui/assets/auth-section-DYPWbNRj.js +1 -0
  97. package/dist/ui/assets/backups-section-gIWfCGmR.js +1 -0
  98. package/dist/ui/assets/{checkbox-Dhm5Fzkb.js → checkbox-CcX8-GfD.js} +1 -1
  99. package/dist/ui/assets/cliproxy-SS8eRAX0.js +3 -0
  100. package/dist/ui/assets/cliproxy-control-panel-Bu0TtDft.js +1 -0
  101. package/dist/ui/assets/{confirm-dialog-Dn3SrwNV.js → confirm-dialog-BZj0PYFs.js} +1 -1
  102. package/dist/ui/assets/copilot-DnJj3frU.js +3 -0
  103. package/dist/ui/assets/cursor-rS1S0i_y.js +1 -0
  104. package/dist/ui/assets/droid-Dfc2QwbE.js +2 -0
  105. package/dist/ui/assets/globalenv-section-BrHb5lRq.js +1 -0
  106. package/dist/ui/assets/health-B0WQPDXb.js +1 -0
  107. package/dist/ui/assets/icons-BYZM_9Gm.js +1 -0
  108. package/dist/ui/assets/index-BFTIN2qO.js +1 -0
  109. package/dist/ui/assets/index-BVBXszJi.js +1 -0
  110. package/dist/ui/assets/index-DCQkhmoo.js +47 -0
  111. package/dist/ui/assets/index-DxKsP0Ke.js +1 -0
  112. package/dist/ui/assets/index-LHbr_5SB.js +1 -0
  113. package/dist/ui/assets/index-WBo504Wu.css +1 -0
  114. package/dist/ui/assets/providers/alibabacloud-color.svg +1 -0
  115. package/dist/ui/assets/proxy-status-widget-DPXgRGkB.js +1 -0
  116. package/dist/ui/assets/{radix-ui-C1Gpgz6I.js → radix-ui-BR1vy4kf.js} +3 -3
  117. package/dist/ui/assets/{separator-BLVyAGAm.js → separator-DtcqgZIS.js} +1 -1
  118. package/dist/ui/assets/shared-DPJ_z23p.js +8 -0
  119. package/dist/ui/assets/{switch-CwLyB4JK.js → switch-BL5xZtnr.js} +1 -1
  120. package/dist/ui/assets/{tanstack-DDJIhNJd.js → tanstack-e99Cjjy2.js} +1 -1
  121. package/dist/ui/assets/updates-B3HKUp7y.js +1 -0
  122. package/dist/ui/index.html +5 -5
  123. package/dist/utils/shell-executor.d.ts +5 -0
  124. package/dist/utils/shell-executor.d.ts.map +1 -1
  125. package/dist/utils/shell-executor.js +22 -3
  126. package/dist/utils/shell-executor.js.map +1 -1
  127. package/dist/web-server/index.d.ts.map +1 -1
  128. package/dist/web-server/index.js +2 -0
  129. package/dist/web-server/index.js.map +1 -1
  130. package/dist/web-server/model-pricing.d.ts.map +1 -1
  131. package/dist/web-server/model-pricing.js +50 -1
  132. package/dist/web-server/model-pricing.js.map +1 -1
  133. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +1 -0
  134. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  135. package/dist/web-server/routes/cliproxy-auth-routes.js +13 -13
  136. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  137. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  138. package/dist/web-server/routes/cliproxy-stats-routes.js +107 -101
  139. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  140. package/dist/web-server/routes/misc-routes.d.ts.map +1 -1
  141. package/dist/web-server/routes/misc-routes.js +17 -17
  142. package/dist/web-server/routes/misc-routes.js.map +1 -1
  143. package/dist/web-server/routes/profile-routes.d.ts +0 -2
  144. package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
  145. package/dist/web-server/routes/profile-routes.js +8 -18
  146. package/dist/web-server/routes/profile-routes.js.map +1 -1
  147. package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
  148. package/dist/web-server/routes/proxy-routes.js +40 -38
  149. package/dist/web-server/routes/proxy-routes.js.map +1 -1
  150. package/dist/web-server/routes/route-helpers.d.ts +15 -0
  151. package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
  152. package/dist/web-server/routes/route-helpers.js +145 -15
  153. package/dist/web-server/routes/route-helpers.js.map +1 -1
  154. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  155. package/dist/web-server/routes/settings-routes.js +143 -42
  156. package/dist/web-server/routes/settings-routes.js.map +1 -1
  157. package/dist/web-server/routes/variant-routes.d.ts +0 -2
  158. package/dist/web-server/routes/variant-routes.d.ts.map +1 -1
  159. package/dist/web-server/routes/variant-routes.js +3 -17
  160. package/dist/web-server/routes/variant-routes.js.map +1 -1
  161. package/dist/web-server/usage/aggregator.d.ts +9 -0
  162. package/dist/web-server/usage/aggregator.d.ts.map +1 -1
  163. package/dist/web-server/usage/aggregator.js +71 -7
  164. package/dist/web-server/usage/aggregator.js.map +1 -1
  165. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts +34 -0
  166. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -0
  167. package/dist/web-server/usage/cliproxy-usage-syncer.js +158 -0
  168. package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -0
  169. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts +26 -0
  170. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -0
  171. package/dist/web-server/usage/cliproxy-usage-transformer.js +141 -0
  172. package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -0
  173. package/dist/web-server/usage/disk-cache.d.ts.map +1 -1
  174. package/dist/web-server/usage/disk-cache.js +4 -1
  175. package/dist/web-server/usage/disk-cache.js.map +1 -1
  176. package/dist/web-server/usage/handlers.d.ts +1 -1
  177. package/dist/web-server/usage/handlers.d.ts.map +1 -1
  178. package/dist/web-server/usage/handlers.js +8 -3
  179. package/dist/web-server/usage/handlers.js.map +1 -1
  180. package/package.json +1 -1
  181. package/dist/ui/assets/accounts-y2u0CVK8.js +0 -1
  182. package/dist/ui/assets/api-5q1FT1uL.js +0 -1
  183. package/dist/ui/assets/auth-section-CaQeee-F.js +0 -1
  184. package/dist/ui/assets/backups-section-hF88BjYJ.js +0 -1
  185. package/dist/ui/assets/cliproxy-BeYNWmY_.js +0 -3
  186. package/dist/ui/assets/cliproxy-control-panel-CJELeI80.js +0 -1
  187. package/dist/ui/assets/copilot-vwT-4_V4.js +0 -3
  188. package/dist/ui/assets/cursor-CN3lIX63.js +0 -1
  189. package/dist/ui/assets/droid-DBP2yCY7.js +0 -2
  190. package/dist/ui/assets/globalenv-section-DNKAJasL.js +0 -1
  191. package/dist/ui/assets/health-C7tNiLzc.js +0 -1
  192. package/dist/ui/assets/icons-DrewC9c3.js +0 -1
  193. package/dist/ui/assets/index-C8-ef-r7.js +0 -1
  194. package/dist/ui/assets/index-MGh88HoC.js +0 -1
  195. package/dist/ui/assets/index-QBUSDLTx.js +0 -1
  196. package/dist/ui/assets/index-k-HuyjpO.js +0 -47
  197. package/dist/ui/assets/index-s-oTl3hW.css +0 -1
  198. package/dist/ui/assets/index-uYnNU6Ut.js +0 -1
  199. package/dist/ui/assets/proxy-status-widget-CIm5vKY7.js +0 -1
  200. package/dist/ui/assets/shared-CHH09ZNi.js +0 -8
  201. 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 (0, data_aggregator_1.loadDailyUsageData)();
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 (0, data_aggregator_1.loadMonthlyUsageData)();
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 (0, data_aggregator_1.loadSessionData)();
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 (0, data_aggregator_1.loadHourlyUsageData)();
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
- refreshFromSource()
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 refreshFromSource();
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":";AAAA;;;;;GAKG;;;AAGH,oDAAiD;AAoBjD,yDAAyD;AACzD,SAAS,mBAAmB,CAAC,SAAiB,EAAE,GAAqB;IACnE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAA,6BAAa,EACxB,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,EAAE,eAAe,EAAE,EACtE,SAAS,CACV,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;AACjG,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,QAAkC;IACvE,MAAM,IAAI,GAAG,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,YAAY,EAAE,MAAM,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,SAAS,EAAE,OAAO,CAAC;YACnC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,MAAM;oBAAE,SAAS;gBAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAlBD,wDAkBC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,wFAAwF;AACxF,SAAS,cAAc,CACrB,IAAkB,EAClB,KAAoC,EACpC,WAA6D,EAC7D,MAA8B;IAE9B,8CAA8C;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEjE,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAkC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAqB,CAAC;QACpD,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC;QACpD,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC;QACtD,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;QACxD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CACpE,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAC/B,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,4CAA4C;AAC5C,SAAS,QAAQ,CAAC,UAA4B,EAAE,KAA2B;IACzE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAI,CAAC,CAAC,KAAK,CAAY,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,0FAA0F;AAC1F,SAAgB,6BAA6B,CAAC,QAAkC;IAC9E,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,cAAc,CACnB,IAAI,EACJ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EACvB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;QACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;YAChD,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;YAClD,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;YACxD,IAAI,EAAE,SAAS;YACf,SAAS;YACT,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9C,eAAe,EAAE,UAAU;SAC5B,CAAC;IACJ,CAAC,EACD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACvC,CAAC;AACJ,CAAC;AAtBD,sEAsBC;AAED,2FAA2F;AAC3F,SAAgB,8BAA8B,CAAC,QAAkC;IAC/E,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,cAAc,CACnB,IAAI,EACJ,CAAC,EAAE,EAAE,EAAE;QACL,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;QACtC,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC;IAC9B,CAAC,EACD,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;QACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;YAChD,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;YAClD,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;YACxD,IAAI,EAAE,SAAS;YACf,SAAS;YACT,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9C,eAAe,EAAE,UAAU;SAC5B,CAAC;IACJ,CAAC,EACD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACvC,CAAC;AACJ,CAAC;AA1BD,wEA0BC;AAED,6FAA6F;AAC7F,SAAgB,+BAA+B,CAC7C,QAAkC;IAElC,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,cAAc,CACnB,IAAI,EACJ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACtB,KAAK;QACL,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;QAChD,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;QAClD,mBAAmB,EAAE,CAAC;QACtB,eAAe,EAAE,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACxD,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QACvC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9C,eAAe,EAAE,UAAU;KAC5B,CAAC,EACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CACzC,CAAC;AACJ,CAAC;AApBD,0EAoBC"}