@kaitranntt/ccs 7.77.1-dev.2 → 7.77.1-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/auth/account-profile-diagnostics.d.ts +21 -0
  2. package/dist/auth/account-profile-diagnostics.d.ts.map +1 -0
  3. package/dist/auth/account-profile-diagnostics.js +130 -0
  4. package/dist/auth/account-profile-diagnostics.js.map +1 -0
  5. package/dist/auth/auth-commands.d.ts.map +1 -1
  6. package/dist/auth/auth-commands.js +12 -8
  7. package/dist/auth/auth-commands.js.map +1 -1
  8. package/dist/auth/commands/create-command.d.ts.map +1 -1
  9. package/dist/auth/commands/create-command.js +7 -1
  10. package/dist/auth/commands/create-command.js.map +1 -1
  11. package/dist/auth/commands/show-command.d.ts.map +1 -1
  12. package/dist/auth/commands/show-command.js +42 -0
  13. package/dist/auth/commands/show-command.js.map +1 -1
  14. package/dist/auth/commands/types.d.ts +20 -0
  15. package/dist/auth/commands/types.d.ts.map +1 -1
  16. package/dist/auth/commands/types.js.map +1 -1
  17. package/dist/cliproxy/services/oauth-usage-log-transformer.d.ts +4 -0
  18. package/dist/cliproxy/services/oauth-usage-log-transformer.d.ts.map +1 -0
  19. package/dist/cliproxy/services/oauth-usage-log-transformer.js +162 -0
  20. package/dist/cliproxy/services/oauth-usage-log-transformer.js.map +1 -0
  21. package/dist/cliproxy/services/stats-fetcher.d.ts +4 -0
  22. package/dist/cliproxy/services/stats-fetcher.d.ts.map +1 -1
  23. package/dist/cliproxy/services/stats-fetcher.js +133 -25
  24. package/dist/cliproxy/services/stats-fetcher.js.map +1 -1
  25. package/dist/cliproxy/services/stats-transformer.d.ts.map +1 -1
  26. package/dist/cliproxy/services/stats-transformer.js +85 -13
  27. package/dist/cliproxy/services/stats-transformer.js.map +1 -1
  28. package/dist/cliproxy/services/usage-compatibility-transformer.d.ts +12 -0
  29. package/dist/cliproxy/services/usage-compatibility-transformer.d.ts.map +1 -0
  30. package/dist/cliproxy/services/usage-compatibility-transformer.js +458 -0
  31. package/dist/cliproxy/services/usage-compatibility-transformer.js.map +1 -0
  32. package/dist/ui/assets/accounts-PYdWScEG.js +1 -0
  33. package/dist/ui/assets/{alert-dialog-hGKLLafj.js → alert-dialog-C5km8Mr2.js} +1 -1
  34. package/dist/ui/assets/{api-DKvIxLdW.js → api-DyqNEbc3.js} +1 -1
  35. package/dist/ui/assets/{auth-section-BOvKd0Sl.js → auth-section-bEevgiYG.js} +1 -1
  36. package/dist/ui/assets/{backups-section-BktH4gXP.js → backups-section-D2xYCD_5.js} +1 -1
  37. package/dist/ui/assets/{channels-Cu60Cd8-.js → channels-BC2C8bYa.js} +1 -1
  38. package/dist/ui/assets/{checkbox-CvFR8Vac.js → checkbox-DgzstwxZ.js} +1 -1
  39. package/dist/ui/assets/{claude-extension-yBbUoGj_.js → claude-extension-BcKfLTXZ.js} +1 -1
  40. package/dist/ui/assets/{cliproxy-ai-providers-BKTmYHel.js → cliproxy-ai-providers-BjoutZZO.js} +1 -1
  41. package/dist/ui/assets/{cliproxy-control-panel-BhZWHeYe.js → cliproxy-control-panel-lYLoiV9f.js} +1 -1
  42. package/dist/ui/assets/{cliproxy-B4OFi937.js → cliproxy-fm0VYc-7.js} +1 -1
  43. package/dist/ui/assets/{codex-Dl4vlmaB.js → codex-Bdvmcwzt.js} +1 -1
  44. package/dist/ui/assets/{confirm-dialog-DC-s0Lza.js → confirm-dialog-BvtBhg50.js} +1 -1
  45. package/dist/ui/assets/{copilot-Cl3Kj_ql.js → copilot-D4noBxJX.js} +1 -1
  46. package/dist/ui/assets/{cursor-CNjO4Z44.js → cursor-CSVuplSL.js} +1 -1
  47. package/dist/ui/assets/{droid-DTjmkIyQ.js → droid-BU4DgcGo.js} +1 -1
  48. package/dist/ui/assets/{globalenv-section-CId2zBTe.js → globalenv-section-DpY3-sT2.js} +1 -1
  49. package/dist/ui/assets/{health-BudwIkEr.js → health-DNtnCuU2.js} +1 -1
  50. package/dist/ui/assets/{icons-DQFHtVq5.js → icons-Ce9So20E.js} +1 -1
  51. package/dist/ui/assets/{index-D9dQkYrN.js → index-BtXFodks.js} +1 -1
  52. package/dist/ui/assets/{index-G4oOKx1a.js → index-CCOT49QL.js} +1 -1
  53. package/dist/ui/assets/{index-QAYRGqq3.js → index-CMGQKWf9.js} +1 -1
  54. package/dist/ui/assets/index-Cm0qoAXb.css +1 -0
  55. package/dist/ui/assets/{index-DXnvUKiV.js → index-DCzk2IIO.js} +1 -1
  56. package/dist/ui/assets/{index-DS_mOUz0.js → index-DVwLJ_IR.js} +1 -1
  57. package/dist/ui/assets/{index-DinHmYv0.js → index-PqtYNGNs.js} +19 -19
  58. package/dist/ui/assets/{index-BGuD2ZzA.js → index-eLlSQvI4.js} +1 -1
  59. package/dist/ui/assets/{logs-BkEGnqlr.js → logs-zi0sqSKN.js} +1 -1
  60. package/dist/ui/assets/{masked-input-auFe8ZWs.js → masked-input-BZNVruOb.js} +1 -1
  61. package/dist/ui/assets/{proxy-status-widget-CtR9rShF.js → proxy-status-widget-is1EjfwJ.js} +1 -1
  62. package/dist/ui/assets/{raw-json-settings-editor-panel-BL9CRBUf.js → raw-json-settings-editor-panel-B1-yuQmO.js} +1 -1
  63. package/dist/ui/assets/{searchable-select-DFa4XBEG.js → searchable-select-RdyLh0wy.js} +1 -1
  64. package/dist/ui/assets/{separator-BdwlLg_X.js → separator-DPjqb8vr.js} +1 -1
  65. package/dist/ui/assets/{shared-CaCM5JhJ.js → shared-RoP2uryw.js} +1 -1
  66. package/dist/ui/assets/{table-cBvaa4dp.js → table-M-kDRvQt.js} +1 -1
  67. package/dist/ui/assets/{updates-CPLM0pNI.js → updates-BWU5VmTL.js} +1 -1
  68. package/dist/ui/index.html +3 -3
  69. package/package.json +1 -1
  70. package/dist/ui/assets/accounts-TsSkNVen.js +0 -1
  71. package/dist/ui/assets/index-6xrth3Oz.css +0 -1
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.buildUsageResponseFromCliproxyMainLog = exports.buildUsageResponseFromCliproxyLogLines = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const path_resolver_1 = require("../config/path-resolver");
30
+ const usage_compatibility_transformer_1 = require("./usage-compatibility-transformer");
31
+ function unquote(value) {
32
+ return value.trim().replace(/^['"]|['"]$/g, '');
33
+ }
34
+ function extractTimestamp(line) {
35
+ const isoTimestamp = line.match(/\d{4}-\d{2}-\d{2}T[^\s\]]+/)?.[0];
36
+ if (isoTimestamp) {
37
+ return isoTimestamp.replace(/[,\]]+$/, '');
38
+ }
39
+ const bracketedTimestamp = line
40
+ .match(/^\[(\d{4}-\d{2}-\d{2})[ T](\d{2}:\d{2}:\d{2})\]/)
41
+ ?.slice(1, 3);
42
+ if (!bracketedTimestamp) {
43
+ return undefined;
44
+ }
45
+ const [datePart, timePart] = bracketedTimestamp;
46
+ const [year, month, day] = datePart.split('-').map(Number);
47
+ const [hour, minute, second] = timePart.split(':').map(Number);
48
+ return new Date(year, month - 1, day, hour, minute, second).toISOString();
49
+ }
50
+ function extractRequestId(line) {
51
+ const explicitRequestId = line.match(/\b(?:request[_-]?id|req[_-]?id|rid)[=:]\s*([A-Za-z0-9._:-]+)/i)?.[1];
52
+ if (explicitRequestId) {
53
+ return explicitRequestId;
54
+ }
55
+ const bracketedRequestId = line.match(/^\[[^\]]+\]\s+\[([^\]]+)\]/)?.[1]?.trim();
56
+ return bracketedRequestId && bracketedRequestId !== '--------' ? bracketedRequestId : undefined;
57
+ }
58
+ function parseOAuthSelection(line) {
59
+ const match = line.match(/Use OAuth\s+provider=([^\s]+)\s+auth_file=("[^"]+"|'[^']+'|[^\s]+)\s+for model\s+("[^"]+"|'[^']+'|[^\s]+)/i);
60
+ if (!match) {
61
+ return null;
62
+ }
63
+ return {
64
+ timestamp: extractTimestamp(line),
65
+ provider: unquote(match[1] ?? 'unknown'),
66
+ authFile: unquote(match[2] ?? 'unknown'),
67
+ model: unquote(match[3] ?? 'unknown'),
68
+ requestId: extractRequestId(line),
69
+ };
70
+ }
71
+ function parseProviderCompletion(line) {
72
+ const match = line.match(/\b(?:POST|GET)\s+"?\/api\/provider\/([^/"\s]+)\//i);
73
+ if (!match) {
74
+ return null;
75
+ }
76
+ return {
77
+ timestamp: extractTimestamp(line),
78
+ provider: unquote(match[1] ?? 'unknown'),
79
+ requestId: extractRequestId(line),
80
+ failed: /\b(?:failed|failure|error)\b/i.test(line) ||
81
+ /\bstatus[=:]\s*[45]\d\d\b/i.test(line) ||
82
+ /\s[45]\d\d(?:\s|$)/.test(line),
83
+ };
84
+ }
85
+ function addPendingRequest(pending, byRequestId, byProvider) {
86
+ if (pending.requestId) {
87
+ const previous = byRequestId.get(pending.requestId);
88
+ if (previous) {
89
+ const previousProviderQueue = byProvider.get(previous.provider) ?? [];
90
+ byProvider.set(previous.provider, previousProviderQueue.filter((entry) => entry !== previous));
91
+ }
92
+ byRequestId.set(pending.requestId, pending);
93
+ }
94
+ const providerQueue = byProvider.get(pending.provider) ?? [];
95
+ providerQueue.push(pending);
96
+ byProvider.set(pending.provider, providerQueue);
97
+ }
98
+ function takePendingRequest(completion, byRequestId, byProvider) {
99
+ const byId = completion.requestId ? byRequestId.get(completion.requestId) : undefined;
100
+ if (byId) {
101
+ byRequestId.delete(completion.requestId ?? '');
102
+ const providerQueue = byProvider.get(byId.provider) ?? [];
103
+ byProvider.set(byId.provider, providerQueue.filter((entry) => entry !== byId));
104
+ return byId;
105
+ }
106
+ const providerQueue = byProvider.get(completion.provider) ?? [];
107
+ const next = providerQueue.shift();
108
+ byProvider.set(completion.provider, providerQueue);
109
+ if (next?.requestId) {
110
+ byRequestId.delete(next.requestId);
111
+ }
112
+ return next ?? null;
113
+ }
114
+ function buildUsageResponseFromCliproxyLogLines(lines) {
115
+ const pendingByRequestId = new Map();
116
+ const pendingByProvider = new Map();
117
+ const records = [];
118
+ for (const line of lines) {
119
+ const selection = parseOAuthSelection(line);
120
+ if (selection) {
121
+ addPendingRequest(selection, pendingByRequestId, pendingByProvider);
122
+ continue;
123
+ }
124
+ const completion = parseProviderCompletion(line);
125
+ if (!completion) {
126
+ continue;
127
+ }
128
+ const pending = takePendingRequest(completion, pendingByRequestId, pendingByProvider);
129
+ if (!pending) {
130
+ continue;
131
+ }
132
+ records.push({
133
+ timestamp: completion.timestamp ?? pending.timestamp ?? '1970-01-01T00:00:00.000Z',
134
+ provider: pending.provider,
135
+ model: pending.model,
136
+ source: `provider=${pending.provider} auth_file=${pending.authFile}`,
137
+ auth_index: pending.authFile,
138
+ request_id: completion.requestId ?? pending.requestId,
139
+ failed: completion.failed,
140
+ tokens: {},
141
+ });
142
+ }
143
+ return (0, usage_compatibility_transformer_1.buildUsageResponseFromQueueRecords)(records);
144
+ }
145
+ exports.buildUsageResponseFromCliproxyLogLines = buildUsageResponseFromCliproxyLogLines;
146
+ function readLogFile(filePath) {
147
+ if (!fs.existsSync(filePath)) {
148
+ return null;
149
+ }
150
+ return fs.readFileSync(filePath, 'utf-8');
151
+ }
152
+ function buildUsageResponseFromCliproxyMainLog() {
153
+ const logPath = path.join((0, path_resolver_1.getCliproxyWritablePath)(), 'logs', 'main.log');
154
+ const contents = readLogFile(logPath);
155
+ if (!contents) {
156
+ return null;
157
+ }
158
+ const response = buildUsageResponseFromCliproxyLogLines(contents.split(/\r?\n/));
159
+ return (0, usage_compatibility_transformer_1.hasUsageDetails)(response) ? response : null;
160
+ }
161
+ exports.buildUsageResponseFromCliproxyMainLog = buildUsageResponseFromCliproxyMainLog;
162
+ //# sourceMappingURL=oauth-usage-log-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-usage-log-transformer.js","sourceRoot":"","sources":["../../../src/cliproxy/services/oauth-usage-log-transformer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,2DAAkE;AAElE,uFAG2C;AAiB3C,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI;SAC5B,KAAK,CAAC,iDAAiD,CAAC;QACzD,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,kBAAkB,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAClC,+DAA+D,CAChE,EAAE,CAAC,CAAC,CAAC,CAAC;IACP,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACjF,OAAO,kBAAkB,IAAI,kBAAkB,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;AAClG,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,4GAA4G,CAC7G,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;QACjC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACxC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACxC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACrC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;QACjC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACxC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;QACjC,MAAM,EACJ,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;YACvC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,OAA4B,EAC5B,WAA6C,EAC7C,UAA8C;IAE9C,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,qBAAqB,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtE,UAAU,CAAC,GAAG,CACZ,QAAQ,CAAC,QAAQ,EACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAC5D,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7D,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB,CACzB,UAA8B,EAC9B,WAA6C,EAC7C,UAA8C;IAE9C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,IAAI,IAAI,EAAE,CAAC;QACT,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1D,UAAU,CAAC,GAAG,CACZ,IAAI,CAAC,QAAQ,EACb,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAChD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;IACnC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACnD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACpB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAED,SAAgB,sCAAsC,CAAC,KAAe;IACpE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA+B,CAAC;IAClE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAiC,CAAC;IACnE,MAAM,OAAO,GAAc,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;YACpE,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;QACtF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,0BAA0B;YAClF,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,YAAY,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,QAAQ,EAAE;YACpE,UAAU,EAAE,OAAO,CAAC,QAAQ;YAC5B,UAAU,EAAE,UAAU,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;YACrD,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAA,oEAAkC,EAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAnCD,wFAmCC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,qCAAqC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAA,uCAAuB,GAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,sCAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjF,OAAO,IAAA,iDAAe,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AATD,sFASC"}
@@ -53,6 +53,7 @@ export interface CliproxyRequestDetail {
53
53
  timestamp: string;
54
54
  source: string;
55
55
  auth_index: string | number;
56
+ request_id?: string;
56
57
  tokens: {
57
58
  input_tokens: number;
58
59
  output_tokens: number;
@@ -101,6 +102,9 @@ export declare function fetchCliproxyStats(port?: number): Promise<CliproxyStats
101
102
  * Returns the unprocessed API response for transformation by cliproxy-usage-transformer
102
103
  */
103
104
  export declare function fetchCliproxyUsageRaw(port?: number): Promise<CliproxyUsageApiResponse | null>;
105
+ export declare const __testExports: {
106
+ clearCachedUsageQueueResponse(): void;
107
+ };
104
108
  /** OpenAI-compatible model object from /v1/models endpoint */
105
109
  export interface CliproxyModel {
106
110
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stats-fetcher.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/services/stats-fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats-fetcher.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/services/stats-fetcher.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,16 @@
6
6
  * Requires usage-statistics-enabled: true in config.yaml.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.isCliproxyRunning = exports.fetchCliproxyErrorLogContent = exports.fetchCliproxyErrorLogs = exports.fetchCliproxyModels = exports.fetchCliproxyUsageRaw = exports.fetchCliproxyStats = void 0;
9
+ exports.isCliproxyRunning = exports.fetchCliproxyErrorLogContent = exports.fetchCliproxyErrorLogs = exports.fetchCliproxyModels = exports.__testExports = exports.fetchCliproxyUsageRaw = exports.fetchCliproxyStats = void 0;
10
10
  const auth_token_manager_1 = require("../auth/auth-token-manager");
11
11
  const proxy_target_resolver_1 = require("../proxy/proxy-target-resolver");
12
12
  const stats_transformer_1 = require("./stats-transformer");
13
+ const oauth_usage_log_transformer_1 = require("./oauth-usage-log-transformer");
14
+ const usage_compatibility_transformer_1 = require("./usage-compatibility-transformer");
15
+ const cachedUsageQueueResponses = new Map();
16
+ const USAGE_QUEUE_BATCH_SIZE = 1000;
17
+ const USAGE_QUEUE_MAX_BATCHES = 100;
18
+ const USAGE_QUEUE_DRAIN_TIMEOUT_MS = 30000;
13
19
  /**
14
20
  * Fetch usage statistics from CLIProxyAPI management API
15
21
  * @param port CLIProxyAPI port (default: 8317)
@@ -37,14 +43,119 @@ exports.fetchCliproxyStats = fetchCliproxyStats;
37
43
  * Returns the unprocessed API response for transformation by cliproxy-usage-transformer
38
44
  */
39
45
  async function fetchCliproxyUsageRaw(port) {
46
+ let localLogUsage;
47
+ const getLocalLogUsage = () => {
48
+ if (localLogUsage !== undefined) {
49
+ return localLogUsage;
50
+ }
51
+ localLogUsage = (0, proxy_target_resolver_1.getProxyTarget)().isRemote ? null : (0, oauth_usage_log_transformer_1.buildUsageResponseFromCliproxyMainLog)();
52
+ return localLogUsage;
53
+ };
54
+ const mergeLocalLogUsage = (response) => (0, usage_compatibility_transformer_1.mergeUsageResponseWithMissingDetails)(response, getLocalLogUsage());
55
+ const mergeAggregateWithDetails = (aggregate, details) => (0, usage_compatibility_transformer_1.mergeUsageResponseWithMissingDetails)(aggregate, details, { appendExtraDetails: false });
56
+ let legacyAggregateUsage = null;
57
+ const legacyUsage = await fetchManagementJson('/v0/management/usage', port);
58
+ if (legacyUsage?.ok && legacyUsage.data) {
59
+ if ((0, usage_compatibility_transformer_1.hasUsageDetails)(legacyUsage.data)) {
60
+ return mergeLocalLogUsage(legacyUsage.data);
61
+ }
62
+ legacyAggregateUsage = legacyUsage.data;
63
+ }
64
+ let cachedUsageQueueResponse;
65
+ const usageQueue = await fetchUsageQueueRecords(port);
66
+ if (usageQueue?.cacheKey) {
67
+ cachedUsageQueueResponse = cachedUsageQueueResponses.get(usageQueue.cacheKey);
68
+ }
69
+ if (usageQueue && Array.isArray(usageQueue.data)) {
70
+ const queueResponse = (0, usage_compatibility_transformer_1.buildUsageResponseFromQueueRecords)(usageQueue.data);
71
+ if ((0, usage_compatibility_transformer_1.hasUsageDetails)(queueResponse)) {
72
+ const mergedUsageQueueResponse = cachedUsageQueueResponse
73
+ ? (0, usage_compatibility_transformer_1.mergeUsageResponses)(cachedUsageQueueResponse, queueResponse)
74
+ : queueResponse;
75
+ cachedUsageQueueResponses.set(usageQueue.cacheKey, mergedUsageQueueResponse);
76
+ cachedUsageQueueResponse = mergedUsageQueueResponse;
77
+ if (usageQueue.ok) {
78
+ const response = legacyAggregateUsage
79
+ ? mergeAggregateWithDetails(legacyAggregateUsage, mergedUsageQueueResponse)
80
+ : mergedUsageQueueResponse;
81
+ return mergeLocalLogUsage(response);
82
+ }
83
+ }
84
+ }
85
+ if (legacyAggregateUsage) {
86
+ const response = cachedUsageQueueResponse
87
+ ? mergeAggregateWithDetails(legacyAggregateUsage, cachedUsageQueueResponse)
88
+ : legacyAggregateUsage;
89
+ return mergeLocalLogUsage(response);
90
+ }
91
+ const apiKeyUsage = await fetchManagementJson('/v0/management/api-key-usage', port);
92
+ if (apiKeyUsage?.ok && apiKeyUsage.data) {
93
+ const apiKeyResponseWithCachedDetails = cachedUsageQueueResponse
94
+ ? mergeAggregateWithDetails((0, usage_compatibility_transformer_1.buildUsageResponseFromApiKeyUsage)(apiKeyUsage.data), cachedUsageQueueResponse)
95
+ : (0, usage_compatibility_transformer_1.buildUsageResponseFromApiKeyUsage)(apiKeyUsage.data);
96
+ const apiKeyResponse = mergeLocalLogUsage(apiKeyResponseWithCachedDetails);
97
+ if ((0, usage_compatibility_transformer_1.hasUsageTotals)(apiKeyResponse)) {
98
+ return apiKeyResponse;
99
+ }
100
+ }
101
+ if (cachedUsageQueueResponse) {
102
+ return mergeLocalLogUsage(cachedUsageQueueResponse);
103
+ }
104
+ const logUsage = getLocalLogUsage();
105
+ if (logUsage && (0, usage_compatibility_transformer_1.hasUsageDetails)(logUsage)) {
106
+ return logUsage;
107
+ }
108
+ if (usageQueue?.ok) {
109
+ return (0, usage_compatibility_transformer_1.buildUsageResponseFromQueueRecords)([]);
110
+ }
111
+ return null;
112
+ }
113
+ exports.fetchCliproxyUsageRaw = fetchCliproxyUsageRaw;
114
+ async function fetchUsageQueueRecords(port) {
115
+ const records = [];
116
+ const seenFullBatchSignatures = new Set();
117
+ let cacheKey = '';
118
+ let status = 0;
119
+ const drainStartedAt = Date.now();
120
+ for (let batchCount = 0; batchCount < USAGE_QUEUE_MAX_BATCHES; batchCount++) {
121
+ const result = await fetchManagementJson(`/v0/management/usage-queue?count=${USAGE_QUEUE_BATCH_SIZE}`, port);
122
+ if (!result) {
123
+ return records.length > 0 ? { ok: false, status, data: records, cacheKey } : null;
124
+ }
125
+ cacheKey || (cacheKey = result.cacheKey);
126
+ status = result.status;
127
+ if (!result.ok || !Array.isArray(result.data)) {
128
+ return records.length > 0 ? { ok: false, status, data: records, cacheKey } : result;
129
+ }
130
+ if (result.data.length === USAGE_QUEUE_BATCH_SIZE) {
131
+ const batchSignature = createUsageQueueBatchSignature(result.data);
132
+ if (seenFullBatchSignatures.has(batchSignature)) {
133
+ return { ok: false, status, data: records, cacheKey };
134
+ }
135
+ seenFullBatchSignatures.add(batchSignature);
136
+ }
137
+ records.push(...result.data);
138
+ if (result.data.length < USAGE_QUEUE_BATCH_SIZE) {
139
+ return { ok: true, status, data: records, cacheKey };
140
+ }
141
+ if (Date.now() - drainStartedAt >= USAGE_QUEUE_DRAIN_TIMEOUT_MS) {
142
+ return { ok: false, status, data: records, cacheKey };
143
+ }
144
+ }
145
+ return { ok: false, status, data: records, cacheKey };
146
+ }
147
+ function createUsageQueueBatchSignature(records) {
148
+ return JSON.stringify(records);
149
+ }
150
+ async function fetchManagementJson(endpointPath, port, timeoutMs = 5000) {
151
+ const controller = new AbortController();
152
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
40
153
  try {
41
- const controller = new AbortController();
42
- const timeoutId = setTimeout(() => controller.abort(), 5000);
43
154
  const target = (0, proxy_target_resolver_1.getProxyTarget)();
44
155
  if (port !== undefined && !target.isRemote) {
45
156
  target.port = port;
46
157
  }
47
- const url = (0, proxy_target_resolver_1.buildProxyUrl)(target, '/v0/management/usage');
158
+ const url = (0, proxy_target_resolver_1.buildProxyUrl)(target, endpointPath);
48
159
  const headers = target.isRemote
49
160
  ? (0, proxy_target_resolver_1.buildManagementHeaders)(target)
50
161
  : { Accept: 'application/json', Authorization: `Bearer ${(0, auth_token_manager_1.getEffectiveManagementSecret)()}` };
@@ -52,44 +163,41 @@ async function fetchCliproxyUsageRaw(port) {
52
163
  signal: controller.signal,
53
164
  headers,
54
165
  });
55
- clearTimeout(timeoutId);
56
166
  if (!response.ok) {
57
- return null;
167
+ return { ok: false, status: response.status, data: null, cacheKey: url };
58
168
  }
59
- return (await response.json());
169
+ return {
170
+ ok: true,
171
+ status: response.status,
172
+ data: (await response.json()),
173
+ cacheKey: url,
174
+ };
60
175
  }
61
176
  catch {
62
177
  return null;
63
178
  }
179
+ finally {
180
+ clearTimeout(timeoutId);
181
+ }
64
182
  }
65
- exports.fetchCliproxyUsageRaw = fetchCliproxyUsageRaw;
66
183
  async function fetchCliproxyAuthFiles(port) {
67
184
  try {
68
- const controller = new AbortController();
69
- const timeoutId = setTimeout(() => controller.abort(), 5000);
70
- const target = (0, proxy_target_resolver_1.getProxyTarget)();
71
- if (port !== undefined && !target.isRemote) {
72
- target.port = port;
73
- }
74
- const url = (0, proxy_target_resolver_1.buildProxyUrl)(target, '/v0/management/auth-files');
75
- const headers = target.isRemote
76
- ? (0, proxy_target_resolver_1.buildManagementHeaders)(target)
77
- : { Accept: 'application/json', Authorization: `Bearer ${(0, auth_token_manager_1.getEffectiveManagementSecret)()}` };
78
- const response = await fetch(url, {
79
- signal: controller.signal,
80
- headers,
81
- });
82
- clearTimeout(timeoutId);
83
- if (!response.ok) {
185
+ const result = await fetchManagementJson('/v0/management/auth-files', port);
186
+ if (!result?.ok || !result.data) {
84
187
  return null;
85
188
  }
86
- const data = (await response.json());
189
+ const data = result.data;
87
190
  return Array.isArray(data.files) ? data.files : null;
88
191
  }
89
192
  catch {
90
193
  return null;
91
194
  }
92
195
  }
196
+ exports.__testExports = {
197
+ clearCachedUsageQueueResponse() {
198
+ cachedUsageQueueResponses.clear();
199
+ },
200
+ };
93
201
  /**
94
202
  * Fetch available models from CLIProxyAPI /v1/models endpoint
95
203
  * @param port CLIProxyAPI port (default: 8317)
@@ -1 +1 @@
1
- {"version":3,"file":"stats-fetcher.js","sourceRoot":"","sources":["../../../src/cliproxy/services/stats-fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats-fetcher.js","sourceRoot":"","sources":["../../../src/cliproxy/services/stats-fetcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats-transformer.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/services/stats-transformer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,0BAA0B,EAE1B,aAAa,EACb,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,UAAU,yBAAyB;IACjC,SAAS,CAAC,EAAE,0BAA0B,EAAE,CAAC;CAC1C;AAqGD,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,wBAAwB,EAC9B,OAAO,GAAE,yBAA8B,GACtC,aAAa,CAyFf"}
1
+ {"version":3,"file":"stats-transformer.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/services/stats-transformer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,0BAA0B,EAE1B,aAAa,EACb,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,UAAU,yBAAyB;IACjC,SAAS,CAAC,EAAE,0BAA0B,EAAE,CAAC;CAC1C;AAqKD,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,wBAAwB,EAC9B,OAAO,GAAE,yBAA8B,GACtC,aAAa,CAqHf"}
@@ -11,6 +11,38 @@ function normalizeProvider(provider) {
11
11
  }
12
12
  return (0, provider_capabilities_1.mapExternalProviderName)(normalized) ?? normalized;
13
13
  }
14
+ function extractAuthFilenameFromSource(source) {
15
+ const authFileMatch = source.match(/(?:^|\s)auth_file=("[^"]+"|'[^']+'|[^\s]+)/i);
16
+ const rawValue = authFileMatch?.[1] ?? source;
17
+ const value = rawValue.trim().replace(/^['"]|['"]$/g, '');
18
+ const filenameCandidate = value.split('|').pop() ?? value;
19
+ return filenameCandidate.split(/[\\/]/).pop() ?? filenameCandidate.trim();
20
+ }
21
+ function stripKnownAuthPlanSuffix(value) {
22
+ return value.replace(/-(?:free|plus|pro|team|business|enterprise)$/i, '');
23
+ }
24
+ function normalizeAuthFilenameSource(provider, source) {
25
+ const filename = extractAuthFilenameFromSource(source);
26
+ const normalizedProvider = normalizeProvider(provider);
27
+ const hadJsonExtension = /\.json$/i.test(filename);
28
+ let candidate = filename.replace(/\.json$/i, '');
29
+ const providerPrefix = `${normalizedProvider}-`;
30
+ if (candidate.toLowerCase().startsWith(providerPrefix)) {
31
+ candidate = candidate.slice(providerPrefix.length);
32
+ }
33
+ candidate = candidate.replace(/^[a-f0-9]{8}[-_]/i, '');
34
+ if (hadJsonExtension) {
35
+ candidate = stripKnownAuthPlanSuffix(candidate);
36
+ }
37
+ const parts = candidate.split('@');
38
+ if (parts.length < 2) {
39
+ return null;
40
+ }
41
+ const localPart = parts[0]?.trim();
42
+ const domainPart = parts.slice(1).join('@').trim();
43
+ const email = `${localPart}@${domainPart}`;
44
+ return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email) ? email.toLowerCase() : null;
45
+ }
14
46
  function buildAuthIndexLookup(authFiles) {
15
47
  const lookup = new Map();
16
48
  const duplicateEmailCounts = new Map();
@@ -61,10 +93,30 @@ function resolveSourceForDetail(resolvedProvider, detail, authIndexLookup) {
61
93
  }
62
94
  const source = detail.source?.trim();
63
95
  if (source) {
64
- return source;
96
+ return normalizeAuthFilenameSource(resolvedProvider, source) ?? source;
65
97
  }
66
98
  return resolvedAuthFile?.source ?? 'unknown';
67
99
  }
100
+ function resolveCountWithDetails(aggregateCount, detailCount) {
101
+ if (aggregateCount === undefined) {
102
+ return detailCount;
103
+ }
104
+ return aggregateCount < detailCount ? detailCount : aggregateCount;
105
+ }
106
+ function shouldReplaceLastUsedAt(current, next) {
107
+ if (!next) {
108
+ return false;
109
+ }
110
+ const nextTime = Date.parse(next);
111
+ if (!Number.isFinite(nextTime)) {
112
+ return false;
113
+ }
114
+ if (!current) {
115
+ return true;
116
+ }
117
+ const currentTime = Date.parse(current);
118
+ return !Number.isFinite(currentTime) || nextTime > currentTime;
119
+ }
68
120
  function buildCliproxyStatsFromUsageResponse(data, options = {}) {
69
121
  const usage = data.usage;
70
122
  const requestsByModel = {};
@@ -78,7 +130,7 @@ function buildCliproxyStatsFromUsageResponse(data, options = {}) {
78
130
  let sawAnyDetail = false;
79
131
  if (usage?.apis) {
80
132
  for (const [provider, providerData] of Object.entries(usage.apis)) {
81
- let sawProviderDetail = false;
133
+ let providerDetailCount = 0;
82
134
  if (!providerData.models) {
83
135
  const normalizedProvider = normalizeProvider(provider);
84
136
  requestsByProvider[normalizedProvider] =
@@ -86,13 +138,15 @@ function buildCliproxyStatsFromUsageResponse(data, options = {}) {
86
138
  continue;
87
139
  }
88
140
  for (const [model, modelData] of Object.entries(providerData.models)) {
89
- requestsByModel[model] = modelData.total_requests ?? 0;
141
+ let modelDetailCount = 0;
90
142
  if (!modelData.details) {
143
+ requestsByModel[model] = (requestsByModel[model] ?? 0) + (modelData.total_requests ?? 0);
91
144
  continue;
92
145
  }
93
146
  for (const detail of modelData.details) {
94
147
  sawAnyDetail = true;
95
- sawProviderDetail = true;
148
+ providerDetailCount++;
149
+ modelDetailCount++;
96
150
  const resolvedProvider = resolveProviderForDetail(provider, detail, authIndexLookup);
97
151
  const source = resolveSourceForDetail(resolvedProvider, detail, authIndexLookup);
98
152
  const accountKey = (0, account_stats_key_1.buildQualifiedAccountStatsKey)(resolvedProvider, source);
@@ -117,24 +171,42 @@ function buildCliproxyStatsFromUsageResponse(data, options = {}) {
117
171
  }
118
172
  const tokens = detail.tokens?.total_tokens ?? 0;
119
173
  accountStats[accountKey].totalTokens += tokens;
120
- accountStats[accountKey].lastUsedAt = detail.timestamp;
174
+ if (shouldReplaceLastUsedAt(accountStats[accountKey].lastUsedAt, detail.timestamp)) {
175
+ accountStats[accountKey].lastUsedAt = detail.timestamp;
176
+ }
121
177
  totalInputTokens += detail.tokens?.input_tokens ?? 0;
122
178
  totalOutputTokens += detail.tokens?.output_tokens ?? 0;
123
179
  }
180
+ requestsByModel[model] =
181
+ (requestsByModel[model] ?? 0) +
182
+ resolveCountWithDetails(modelData.total_requests, modelDetailCount);
124
183
  }
125
- if (!sawProviderDetail) {
184
+ const providerTotal = providerData.total_requests ?? 0;
185
+ if (providerDetailCount === 0) {
126
186
  const normalizedProvider = normalizeProvider(provider);
127
187
  requestsByProvider[normalizedProvider] =
128
- (requestsByProvider[normalizedProvider] ?? 0) + (providerData.total_requests ?? 0);
188
+ (requestsByProvider[normalizedProvider] ?? 0) + providerTotal;
189
+ }
190
+ else if (providerTotal > providerDetailCount) {
191
+ const normalizedProvider = normalizeProvider(provider);
192
+ requestsByProvider[normalizedProvider] =
193
+ (requestsByProvider[normalizedProvider] ?? 0) + (providerTotal - providerDetailCount);
129
194
  }
130
195
  }
131
196
  }
197
+ const aggregateFailureCount = usage?.failure_count ?? data.failed_requests;
198
+ const successCount = sawAnyDetail
199
+ ? resolveCountWithDetails(usage?.success_count, totalSuccessCount)
200
+ : (usage?.success_count ?? 0);
201
+ const failureCount = sawAnyDetail
202
+ ? resolveCountWithDetails(aggregateFailureCount, totalFailureCount)
203
+ : (aggregateFailureCount ?? 0);
204
+ const providerTotalRequests = Object.values(requestsByProvider).reduce((total, count) => total + count, 0);
205
+ const totalRequests = Math.max(usage?.total_requests ?? 0, successCount + failureCount, providerTotalRequests);
132
206
  return {
133
- totalRequests: usage?.total_requests ?? 0,
134
- successCount: sawAnyDetail ? totalSuccessCount : (usage?.success_count ?? 0),
135
- failureCount: sawAnyDetail
136
- ? totalFailureCount
137
- : (usage?.failure_count ?? data.failed_requests ?? 0),
207
+ totalRequests,
208
+ successCount,
209
+ failureCount,
138
210
  tokens: {
139
211
  input: totalInputTokens,
140
212
  output: totalOutputTokens,
@@ -143,7 +215,7 @@ function buildCliproxyStatsFromUsageResponse(data, options = {}) {
143
215
  requestsByModel,
144
216
  requestsByProvider,
145
217
  accountStats,
146
- quotaExceededCount: usage?.failure_count ?? data.failed_requests ?? 0,
218
+ quotaExceededCount: failureCount,
147
219
  retryCount: 0,
148
220
  collectedAt: new Date().toISOString(),
149
221
  };