@jsonstudio/rcc 0.89.935 → 0.89.1083

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 (96) hide show
  1. package/README.md +1 -42
  2. package/dist/build-info.js +2 -2
  3. package/dist/build-info.js.map +1 -1
  4. package/dist/cli.js +120 -16
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/quota-daemon.d.ts +2 -0
  7. package/dist/commands/quota-daemon.js +89 -0
  8. package/dist/commands/quota-daemon.js.map +1 -0
  9. package/dist/commands/token-daemon.js +1 -1
  10. package/dist/commands/token-daemon.js.map +1 -1
  11. package/dist/docs/daemon-admin-ui.html +958 -0
  12. package/dist/index.js +54 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/manager/modules/quota/index.d.ts +34 -0
  15. package/dist/manager/modules/quota/index.js +291 -0
  16. package/dist/manager/modules/quota/index.js.map +1 -1
  17. package/dist/manager/modules/token/index.js +14 -3
  18. package/dist/manager/modules/token/index.js.map +1 -1
  19. package/dist/manager/quota/provider-quota-center.d.ts +48 -0
  20. package/dist/manager/quota/provider-quota-center.js +239 -0
  21. package/dist/manager/quota/provider-quota-center.js.map +1 -0
  22. package/dist/manager/quota/provider-quota-store.d.ts +17 -0
  23. package/dist/manager/quota/provider-quota-store.js +88 -0
  24. package/dist/manager/quota/provider-quota-store.js.map +1 -0
  25. package/dist/providers/auth/token-scanner/index.js +11 -3
  26. package/dist/providers/auth/token-scanner/index.js.map +1 -1
  27. package/dist/providers/core/runtime/http-request-executor.js +24 -7
  28. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  29. package/dist/providers/core/runtime/http-transport-provider.js +11 -3
  30. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  31. package/dist/providers/core/runtime/responses-provider.js +9 -3
  32. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  33. package/dist/providers/core/utils/http-client.d.ts +1 -0
  34. package/dist/providers/core/utils/http-client.js +139 -4
  35. package/dist/providers/core/utils/http-client.js.map +1 -1
  36. package/dist/providers/core/utils/snapshot-writer.d.ts +12 -0
  37. package/dist/providers/core/utils/snapshot-writer.js +99 -18
  38. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  39. package/dist/providers/mock/mock-provider-runtime.d.ts +3 -0
  40. package/dist/providers/mock/mock-provider-runtime.js +176 -4
  41. package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
  42. package/dist/server/handlers/chat-handler.js +13 -1
  43. package/dist/server/handlers/chat-handler.js.map +1 -1
  44. package/dist/server/handlers/handler-utils.js +5 -0
  45. package/dist/server/handlers/handler-utils.js.map +1 -1
  46. package/dist/server/handlers/messages-handler.js +13 -1
  47. package/dist/server/handlers/messages-handler.js.map +1 -1
  48. package/dist/server/handlers/responses-handler.js +73 -1
  49. package/dist/server/handlers/responses-handler.js.map +1 -1
  50. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +174 -2
  51. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  52. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +519 -0
  53. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  54. package/dist/server/runtime/http-server/executor-response.js +6 -0
  55. package/dist/server/runtime/http-server/executor-response.js.map +1 -1
  56. package/dist/server/runtime/http-server/index.d.ts +5 -0
  57. package/dist/server/runtime/http-server/index.js +205 -4
  58. package/dist/server/runtime/http-server/index.js.map +1 -1
  59. package/dist/server/runtime/http-server/middleware.d.ts +2 -0
  60. package/dist/server/runtime/http-server/middleware.js +63 -0
  61. package/dist/server/runtime/http-server/middleware.js.map +1 -1
  62. package/dist/server/runtime/http-server/request-executor.d.ts +2 -0
  63. package/dist/server/runtime/http-server/request-executor.js +57 -10
  64. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  65. package/dist/server/runtime/http-server/routes.js +38 -1
  66. package/dist/server/runtime/http-server/routes.js.map +1 -1
  67. package/dist/server/runtime/http-server/stats-manager.d.ts +55 -0
  68. package/dist/server/runtime/http-server/stats-manager.js +462 -4
  69. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  70. package/dist/server/runtime/http-server/types.d.ts +1 -0
  71. package/dist/token-daemon/token-daemon.d.ts +3 -1
  72. package/dist/token-daemon/token-daemon.js +130 -8
  73. package/dist/token-daemon/token-daemon.js.map +1 -1
  74. package/dist/token-daemon/token-utils.d.ts +1 -0
  75. package/dist/token-daemon/token-utils.js +9 -1
  76. package/dist/token-daemon/token-utils.js.map +1 -1
  77. package/dist/tools/semantic-replay.js +29 -0
  78. package/dist/tools/semantic-replay.js.map +1 -1
  79. package/dist/utils/snapshot-writer.d.ts +2 -0
  80. package/dist/utils/snapshot-writer.js +47 -4
  81. package/dist/utils/snapshot-writer.js.map +1 -1
  82. package/package.json +2 -3
  83. package/scripts/analyze-apply-patch-exec-failures.mjs +153 -0
  84. package/scripts/analyze-apply-patch-samples.mjs +242 -0
  85. package/scripts/analyze-codex-error-failures.mjs +24 -14
  86. package/scripts/classify-codex-samples.mjs +0 -35
  87. package/scripts/copy-modules-config.mjs +17 -1
  88. package/scripts/generate-snapshot-data.mjs +41 -11
  89. package/scripts/mock-provider/extract.mjs +254 -21
  90. package/scripts/mock-provider/run-regressions.mjs +97 -16
  91. package/scripts/quota-dryrun.mjs +124 -0
  92. package/scripts/tests/apply-patch-loop.mjs +5 -1
  93. package/scripts/tests/exec-command-loop.mjs +16 -19
  94. package/scripts/verify-apply-patch.mjs +335 -5
  95. package/scripts/verify-e2e-toolcall.mjs +49 -10
  96. package/scripts/toon-suite.mjs +0 -141
@@ -1,10 +1,27 @@
1
1
  import fs from 'node:fs/promises';
2
+ import fsSync from 'node:fs';
2
3
  import path from 'node:path';
3
4
  import os from 'node:os';
4
5
  const DEFAULT_STATS_LOG_PATH = path.join(os.homedir(), '.routecodex', 'logs', 'provider-stats.jsonl');
5
6
  export class StatsManager {
6
7
  inflight = new Map();
7
8
  buckets = new Map();
9
+ toolBuckets = new Map();
10
+ toolBucketsByProvider = new Map();
11
+ toolProviderTotals = new Map();
12
+ totalToolCalls = 0;
13
+ totalToolResponses = 0;
14
+ statsLogPath;
15
+ historicalBuckets = new Map();
16
+ historicalToolAggregate = new Map();
17
+ historicalToolByProvider = new Map();
18
+ historicalSnapshotCount = 0;
19
+ historicalSampleCount = 0;
20
+ historicalLoaded = false;
21
+ constructor() {
22
+ this.statsLogPath = this.resolveLogPath();
23
+ this.loadHistoricalFromDisk(this.statsLogPath, true);
24
+ }
8
25
  recordRequestStart(requestId) {
9
26
  if (!requestId) {
10
27
  return;
@@ -74,6 +91,71 @@ export class StatsManager {
74
91
  bucket.totalOutputTokens += usage.total_tokens ?? 0;
75
92
  }
76
93
  }
94
+ recordToolUsage(meta, payload) {
95
+ const providerKey = typeof meta.providerKey === 'string' && meta.providerKey.trim() ? meta.providerKey.trim() : '';
96
+ if (!providerKey) {
97
+ return;
98
+ }
99
+ const toolCalls = this.extractToolCalls(payload);
100
+ if (!toolCalls.length) {
101
+ return;
102
+ }
103
+ const now = Date.now();
104
+ this.totalToolCalls += toolCalls.length;
105
+ this.totalToolResponses += 1;
106
+ const providerBucketKey = this.composeBucketKey(providerKey, meta.model);
107
+ const providerTotals = this.toolProviderTotals.get(providerBucketKey) ?? {
108
+ providerKey,
109
+ model: meta.model,
110
+ totalCalls: 0,
111
+ totalResponses: 0
112
+ };
113
+ providerTotals.totalCalls += toolCalls.length;
114
+ providerTotals.totalResponses += 1;
115
+ this.toolProviderTotals.set(providerBucketKey, providerTotals);
116
+ const providerTools = this.toolBucketsByProvider.get(providerBucketKey) ?? new Map();
117
+ this.toolBucketsByProvider.set(providerBucketKey, providerTools);
118
+ const uniqueNames = new Set();
119
+ for (const tool of toolCalls) {
120
+ const name = tool.name;
121
+ if (!name) {
122
+ continue;
123
+ }
124
+ uniqueNames.add(name);
125
+ const globalBucket = this.toolBuckets.get(name) ?? {
126
+ toolName: name,
127
+ callCount: 0,
128
+ responseCount: 0,
129
+ firstSeenAt: now,
130
+ lastSeenAt: now
131
+ };
132
+ globalBucket.callCount += 1;
133
+ globalBucket.lastSeenAt = now;
134
+ this.toolBuckets.set(name, globalBucket);
135
+ const providerBucket = providerTools.get(name) ?? {
136
+ toolName: name,
137
+ callCount: 0,
138
+ responseCount: 0,
139
+ firstSeenAt: now,
140
+ lastSeenAt: now
141
+ };
142
+ providerBucket.callCount += 1;
143
+ providerBucket.lastSeenAt = now;
144
+ providerTools.set(name, providerBucket);
145
+ }
146
+ for (const name of uniqueNames) {
147
+ const globalBucket = this.toolBuckets.get(name);
148
+ if (globalBucket) {
149
+ globalBucket.responseCount += 1;
150
+ globalBucket.lastSeenAt = now;
151
+ }
152
+ const providerBucket = providerTools.get(name);
153
+ if (providerBucket) {
154
+ providerBucket.responseCount += 1;
155
+ providerBucket.lastSeenAt = now;
156
+ }
157
+ }
158
+ }
77
159
  snapshot(uptimeMs) {
78
160
  const totals = Array.from(this.buckets.values()).map(bucket => ({
79
161
  ...bucket,
@@ -82,27 +164,35 @@ export class StatsManager {
82
164
  averageCompletionTokens: bucket.requestCount ? bucket.totalCompletionTokens / bucket.requestCount : 0,
83
165
  averageOutputTokens: bucket.requestCount ? bucket.totalOutputTokens / bucket.requestCount : 0
84
166
  }));
167
+ const tools = this.snapshotTools();
85
168
  return {
86
169
  generatedAt: Date.now(),
87
170
  uptimeMs,
88
- totals
171
+ totals,
172
+ ...(tools ? { tools } : {})
89
173
  };
90
174
  }
91
175
  logSummary(uptimeMs) {
176
+ this.ensureHistoricalLoaded();
92
177
  const snapshot = this.snapshot(uptimeMs);
93
178
  if (!snapshot.totals.length) {
94
179
  console.log('[Stats] No provider activity recorded');
95
180
  return snapshot;
96
181
  }
97
- console.log('[Stats] Provider summary (uptime=%d ms, samples=%d)', Math.round(snapshot.uptimeMs), snapshot.totals.reduce((sum, bucket) => sum + bucket.requestCount, 0));
182
+ console.log('\n[Stats][session] Provider summary (uptime=%d ms · samples=%d)', Math.round(snapshot.uptimeMs), snapshot.totals.reduce((sum, bucket) => sum + bucket.requestCount, 0));
98
183
  for (const bucket of snapshot.totals) {
99
- console.log(' %s / %s → requests=%d errors=%d avgLatency=%s ms avgTokens(in=%s/out=%s/total=%s)', bucket.providerKey, bucket.model ?? '-', bucket.requestCount, bucket.errorCount, bucket.averageLatencyMs.toFixed(1), bucket.averagePromptTokens.toFixed(1), bucket.averageCompletionTokens.toFixed(1), bucket.averageOutputTokens.toFixed(1));
184
+ const label = this.formatProviderLabel(bucket.providerKey, bucket.model);
185
+ const okCount = bucket.requestCount - bucket.errorCount;
186
+ console.log(' - %s | requests=%d (%d ok / %d err) | avgLatency=%s ms | avgTokens in/out/total=%s/%s/%s', label, bucket.requestCount, okCount, bucket.errorCount, bucket.averageLatencyMs.toFixed(1), bucket.averagePromptTokens.toFixed(1), bucket.averageCompletionTokens.toFixed(1), bucket.averageOutputTokens.toFixed(1));
187
+ console.log(' totals tokens in/out/total=%s/%s/%s', bucket.totalPromptTokens, bucket.totalCompletionTokens, bucket.totalOutputTokens);
100
188
  }
189
+ this.logToolSummary(snapshot.tools);
190
+ this.mergeSnapshotIntoHistorical(snapshot);
101
191
  return snapshot;
102
192
  }
103
193
  async persistSnapshot(snapshot, options) {
104
194
  try {
105
- const logPath = this.resolveLogPath(options?.logPath);
195
+ const logPath = this.normalizeLogPath(options?.logPath);
106
196
  await fs.mkdir(path.dirname(logPath), { recursive: true });
107
197
  const record = {
108
198
  ...snapshot,
@@ -115,9 +205,377 @@ export class StatsManager {
115
205
  console.warn('[Stats] Failed to persist provider stats snapshot', error);
116
206
  }
117
207
  }
208
+ /**
209
+ * 打印历史 provider-stats 聚合(内存中实时维护,异常退出前也能看到历史)。
210
+ */
211
+ async logHistoricalSummary(options) {
212
+ if (options?.logPath && options.logPath.trim()) {
213
+ this.normalizeLogPath(options.logPath);
214
+ }
215
+ else {
216
+ this.ensureHistoricalLoaded();
217
+ }
218
+ this.logHistoricalFromMemory();
219
+ }
118
220
  composeBucketKey(providerKey, model) {
119
221
  return `${providerKey}|${model ?? '-'}`;
120
222
  }
223
+ snapshotTools() {
224
+ if (this.totalToolCalls <= 0 && this.totalToolResponses <= 0) {
225
+ return undefined;
226
+ }
227
+ const byToolName = {};
228
+ for (const [name, bucket] of this.toolBuckets.entries()) {
229
+ byToolName[name] = { ...bucket };
230
+ }
231
+ const byProviderKey = {};
232
+ for (const [providerKey, providerTools] of this.toolBucketsByProvider.entries()) {
233
+ const totals = this.toolProviderTotals.get(providerKey);
234
+ const byTool = {};
235
+ for (const [name, bucket] of providerTools.entries()) {
236
+ byTool[name] = { ...bucket };
237
+ }
238
+ byProviderKey[providerKey] = {
239
+ providerKey: totals?.providerKey ?? providerKey,
240
+ model: totals?.model,
241
+ totalCalls: totals?.totalCalls ?? 0,
242
+ totalResponses: totals?.totalResponses ?? 0,
243
+ byToolName: byTool
244
+ };
245
+ }
246
+ return {
247
+ totalCalls: this.totalToolCalls,
248
+ totalResponses: this.totalToolResponses,
249
+ byToolName,
250
+ byProviderKey
251
+ };
252
+ }
253
+ logToolSummary(snapshot) {
254
+ if (!snapshot || snapshot.totalCalls <= 0) {
255
+ return;
256
+ }
257
+ console.log('\n[Stats] Tools:');
258
+ console.log(' total tool calls : %d (responses with tools=%d)', snapshot.totalCalls, snapshot.totalResponses);
259
+ const sorted = Object.values(snapshot.byToolName)
260
+ .sort((a, b) => b.callCount - a.callCount)
261
+ .slice(0, 10);
262
+ if (sorted.length) {
263
+ console.log(' top tools:');
264
+ for (const bucket of sorted) {
265
+ console.log(' %s → calls=%d responses=%d', bucket.toolName, bucket.callCount, bucket.responseCount);
266
+ }
267
+ }
268
+ const providerEntries = Object.values(snapshot.byProviderKey ?? {});
269
+ if (providerEntries.length) {
270
+ console.log(' by provider:');
271
+ const sortedProviders = providerEntries
272
+ .slice()
273
+ .sort((a, b) => b.totalCalls - a.totalCalls)
274
+ .slice(0, 10);
275
+ for (const provider of sortedProviders) {
276
+ const label = this.formatProviderLabel(provider.providerKey, provider.model);
277
+ console.log(' %s → calls=%d responses=%d', label, provider.totalCalls, provider.totalResponses);
278
+ }
279
+ }
280
+ }
281
+ logHistoricalToolSummary(toolAggregate, toolByProvider) {
282
+ if (toolAggregate.size === 0) {
283
+ return;
284
+ }
285
+ const totalCalls = Array.from(toolAggregate.values()).reduce((sum, bucket) => sum + bucket.callCount, 0);
286
+ const totalResponses = Array.from(toolAggregate.values()).reduce((sum, bucket) => sum + bucket.responseCount, 0);
287
+ console.log('\n[Stats] Historical tools summary (total calls=%d, responses with tools=%d)', totalCalls, totalResponses);
288
+ const sorted = Array.from(toolAggregate.values())
289
+ .sort((a, b) => b.callCount - a.callCount)
290
+ .slice(0, 10);
291
+ if (sorted.length) {
292
+ console.log(' top tools:');
293
+ for (const bucket of sorted) {
294
+ console.log(' %s → calls=%d responses=%d', bucket.toolName, bucket.callCount, bucket.responseCount);
295
+ }
296
+ }
297
+ if (toolByProvider.size) {
298
+ console.log(' by provider:');
299
+ const entries = Array.from(toolByProvider.entries()).sort((a, b) => a[0].localeCompare(b[0]));
300
+ for (const [, bucket] of entries) {
301
+ const label = this.formatProviderLabel(bucket.providerKey, bucket.model);
302
+ console.log(' %s → calls=%d responses=%d', label, bucket.totalCalls, bucket.totalResponses);
303
+ }
304
+ }
305
+ }
306
+ mergeToolAggregate(toolAggregate, toolByProvider, tools) {
307
+ for (const bucket of Object.values(tools.byToolName ?? {})) {
308
+ if (!bucket || !bucket.toolName) {
309
+ continue;
310
+ }
311
+ const existing = toolAggregate.get(bucket.toolName);
312
+ if (!existing) {
313
+ toolAggregate.set(bucket.toolName, { ...bucket });
314
+ }
315
+ else {
316
+ existing.callCount += bucket.callCount;
317
+ existing.responseCount += bucket.responseCount;
318
+ if (bucket.firstSeenAt < existing.firstSeenAt) {
319
+ existing.firstSeenAt = bucket.firstSeenAt;
320
+ }
321
+ if (bucket.lastSeenAt > existing.lastSeenAt) {
322
+ existing.lastSeenAt = bucket.lastSeenAt;
323
+ }
324
+ }
325
+ }
326
+ for (const providerRecord of Object.values(tools.byProviderKey ?? {})) {
327
+ if (!providerRecord || !providerRecord.providerKey) {
328
+ continue;
329
+ }
330
+ const providerKey = providerRecord.providerKey;
331
+ const bucketKey = this.composeBucketKey(providerKey, providerRecord.model);
332
+ const entry = toolByProvider.get(bucketKey) ?? {
333
+ providerKey,
334
+ model: providerRecord.model,
335
+ totalCalls: 0,
336
+ totalResponses: 0,
337
+ byToolName: new Map()
338
+ };
339
+ entry.totalCalls += providerRecord.totalCalls ?? 0;
340
+ entry.totalResponses += providerRecord.totalResponses ?? 0;
341
+ for (const toolBucket of Object.values(providerRecord.byToolName ?? {})) {
342
+ if (!toolBucket || !toolBucket.toolName) {
343
+ continue;
344
+ }
345
+ const existing = entry.byToolName.get(toolBucket.toolName);
346
+ if (!existing) {
347
+ entry.byToolName.set(toolBucket.toolName, { ...toolBucket });
348
+ }
349
+ else {
350
+ existing.callCount += toolBucket.callCount;
351
+ existing.responseCount += toolBucket.responseCount;
352
+ if (toolBucket.firstSeenAt < existing.firstSeenAt) {
353
+ existing.firstSeenAt = toolBucket.firstSeenAt;
354
+ }
355
+ if (toolBucket.lastSeenAt > existing.lastSeenAt) {
356
+ existing.lastSeenAt = toolBucket.lastSeenAt;
357
+ }
358
+ }
359
+ }
360
+ toolByProvider.set(bucketKey, entry);
361
+ }
362
+ }
363
+ extractToolCalls(payload) {
364
+ if (!payload || typeof payload !== 'object') {
365
+ return [];
366
+ }
367
+ const record = payload;
368
+ const calls = [];
369
+ const seenIds = new Set();
370
+ const addCall = (nameRaw, idRaw) => {
371
+ const name = typeof nameRaw === 'string' && nameRaw.trim() ? nameRaw.trim() : '';
372
+ if (!name) {
373
+ return;
374
+ }
375
+ const id = typeof idRaw === 'string' && idRaw.trim() ? idRaw.trim() : undefined;
376
+ if (id && seenIds.has(id)) {
377
+ return;
378
+ }
379
+ if (id) {
380
+ seenIds.add(id);
381
+ }
382
+ calls.push({ name, ...(id ? { id } : {}) });
383
+ };
384
+ const toolCalls = (record.tool_calls ?? record.required_action?.submit_tool_outputs?.tool_calls);
385
+ if (Array.isArray(toolCalls)) {
386
+ for (const toolCall of toolCalls) {
387
+ if (!toolCall || typeof toolCall !== 'object') {
388
+ continue;
389
+ }
390
+ const toolRec = toolCall;
391
+ const fn = toolRec.function;
392
+ addCall(fn?.name ?? toolRec.name, toolRec.id ?? toolRec.call_id ?? toolRec.tool_call_id);
393
+ }
394
+ }
395
+ const output = record.output;
396
+ if (Array.isArray(output)) {
397
+ for (const entry of output) {
398
+ if (!entry || typeof entry !== 'object') {
399
+ continue;
400
+ }
401
+ const node = entry;
402
+ const type = typeof node.type === 'string' ? node.type.trim().toLowerCase() : '';
403
+ if (type === 'function_call' || type === 'tool_call' || type === 'function') {
404
+ addCall(node.name ?? node.tool_name ?? node.function?.name, node.call_id ?? node.id);
405
+ }
406
+ if (Array.isArray(node.content)) {
407
+ for (const contentItem of node.content) {
408
+ if (!contentItem || typeof contentItem !== 'object') {
409
+ continue;
410
+ }
411
+ const contentNode = contentItem;
412
+ const contentType = typeof contentNode.type === 'string' ? contentNode.type.trim().toLowerCase() : '';
413
+ if (contentType === 'tool_call' || contentType === 'function_call') {
414
+ addCall(contentNode.name ?? contentNode.tool_name ?? contentNode.function?.name, contentNode.call_id ?? contentNode.id);
415
+ }
416
+ }
417
+ }
418
+ }
419
+ }
420
+ const choices = record.choices;
421
+ if (Array.isArray(choices)) {
422
+ for (const choice of choices) {
423
+ if (!choice || typeof choice !== 'object') {
424
+ continue;
425
+ }
426
+ const message = choice.message;
427
+ if (!message || typeof message !== 'object') {
428
+ continue;
429
+ }
430
+ const toolCallsNode = message.tool_calls;
431
+ if (Array.isArray(toolCallsNode)) {
432
+ for (const toolCall of toolCallsNode) {
433
+ if (!toolCall || typeof toolCall !== 'object') {
434
+ continue;
435
+ }
436
+ const toolRec = toolCall;
437
+ const fn = toolRec.function;
438
+ addCall(fn?.name ?? toolRec.name, toolRec.id ?? toolRec.tool_call_id);
439
+ }
440
+ }
441
+ }
442
+ }
443
+ return calls;
444
+ }
445
+ mergeSnapshotIntoHistorical(snapshot) {
446
+ if (!snapshot) {
447
+ return;
448
+ }
449
+ this.historicalSnapshotCount += 1;
450
+ const totals = Array.isArray(snapshot.totals) ? snapshot.totals : [];
451
+ let snapshotSamples = 0;
452
+ for (const bucket of totals) {
453
+ const key = this.composeBucketKey(bucket.providerKey, bucket.model);
454
+ const existing = this.historicalBuckets.get(key);
455
+ const promptTokens = bucket.totalPromptTokens ?? 0;
456
+ const completionTokens = bucket.totalCompletionTokens ?? 0;
457
+ const outputTokens = bucket.totalOutputTokens ?? 0;
458
+ const latency = bucket.totalLatencyMs ?? 0;
459
+ const firstAt = typeof bucket.firstRequestAt === 'number' ? bucket.firstRequestAt : Date.now();
460
+ const lastAt = typeof bucket.lastRequestAt === 'number' ? bucket.lastRequestAt : Date.now();
461
+ if (!existing) {
462
+ this.historicalBuckets.set(key, {
463
+ providerKey: bucket.providerKey,
464
+ providerType: bucket.providerType,
465
+ model: bucket.model,
466
+ requestCount: bucket.requestCount ?? 0,
467
+ errorCount: bucket.errorCount ?? 0,
468
+ totalLatencyMs: latency,
469
+ totalPromptTokens: promptTokens,
470
+ totalCompletionTokens: completionTokens,
471
+ totalOutputTokens: outputTokens,
472
+ firstRequestAt: firstAt,
473
+ lastRequestAt: lastAt
474
+ });
475
+ }
476
+ else {
477
+ existing.requestCount += bucket.requestCount ?? 0;
478
+ existing.errorCount += bucket.errorCount ?? 0;
479
+ existing.totalLatencyMs += latency;
480
+ existing.totalPromptTokens += promptTokens;
481
+ existing.totalCompletionTokens += completionTokens;
482
+ existing.totalOutputTokens += outputTokens;
483
+ if (firstAt < existing.firstRequestAt) {
484
+ existing.firstRequestAt = firstAt;
485
+ }
486
+ if (lastAt > existing.lastRequestAt) {
487
+ existing.lastRequestAt = lastAt;
488
+ }
489
+ }
490
+ snapshotSamples += bucket.requestCount ?? 0;
491
+ }
492
+ this.historicalSampleCount += snapshotSamples;
493
+ if (snapshot.tools && typeof snapshot.tools === 'object') {
494
+ this.mergeToolAggregate(this.historicalToolAggregate, this.historicalToolByProvider, snapshot.tools);
495
+ }
496
+ }
497
+ logHistoricalFromMemory() {
498
+ if (!this.historicalBuckets.size) {
499
+ console.log('[Stats] No historical provider activity recorded');
500
+ return;
501
+ }
502
+ console.log('\n[Stats][historical] Provider summary (snapshots=%d · samples=%d)', this.historicalSnapshotCount, this.historicalSampleCount);
503
+ const sorted = Array.from(this.historicalBuckets.values()).sort((a, b) => a.providerKey.localeCompare(b.providerKey));
504
+ for (const bucket of sorted) {
505
+ const label = this.formatProviderLabel(bucket.providerKey, bucket.model);
506
+ const okCount = bucket.requestCount - bucket.errorCount;
507
+ const avgLatency = bucket.requestCount ? bucket.totalLatencyMs / bucket.requestCount : 0;
508
+ const avgPrompt = bucket.requestCount ? bucket.totalPromptTokens / bucket.requestCount : 0;
509
+ const avgCompletion = bucket.requestCount ? bucket.totalCompletionTokens / bucket.requestCount : 0;
510
+ const avgTotal = bucket.requestCount ? bucket.totalOutputTokens / bucket.requestCount : 0;
511
+ console.log(' - %s | requests=%d (%d ok / %d err) | avgLatency=%s ms | avgTokens in/out/total=%s/%s/%s', label, bucket.requestCount, okCount, bucket.errorCount, avgLatency.toFixed(1), avgPrompt.toFixed(1), avgCompletion.toFixed(1), avgTotal.toFixed(1));
512
+ console.log(' totals tokens in/out/total=%s/%s/%s | window=%s → %s', bucket.totalPromptTokens, bucket.totalCompletionTokens, bucket.totalOutputTokens, this.formatIso(bucket.firstRequestAt), this.formatIso(bucket.lastRequestAt));
513
+ }
514
+ this.logHistoricalToolSummary(this.historicalToolAggregate, this.historicalToolByProvider);
515
+ }
516
+ ensureHistoricalLoaded() {
517
+ if (this.historicalLoaded) {
518
+ return;
519
+ }
520
+ this.loadHistoricalFromDisk(this.statsLogPath, true);
521
+ }
522
+ loadHistoricalFromDisk(logPath, reset) {
523
+ if (reset) {
524
+ this.historicalBuckets.clear();
525
+ this.historicalToolAggregate.clear();
526
+ this.historicalToolByProvider.clear();
527
+ this.historicalSnapshotCount = 0;
528
+ this.historicalSampleCount = 0;
529
+ }
530
+ try {
531
+ const raw = fsSync.readFileSync(logPath, 'utf-8');
532
+ const lines = raw.split(/\r?\n/).filter(Boolean);
533
+ for (const line of lines) {
534
+ try {
535
+ const record = JSON.parse(line);
536
+ this.mergeSnapshotIntoHistorical(record);
537
+ }
538
+ catch {
539
+ continue;
540
+ }
541
+ }
542
+ }
543
+ catch {
544
+ // File missing or unreadable → treat as empty history.
545
+ }
546
+ this.historicalLoaded = true;
547
+ }
548
+ normalizeLogPath(override) {
549
+ if (override && override.trim()) {
550
+ const normalized = override.trim();
551
+ if (normalized !== this.statsLogPath) {
552
+ this.statsLogPath = normalized;
553
+ this.historicalLoaded = false;
554
+ this.loadHistoricalFromDisk(this.statsLogPath, true);
555
+ }
556
+ return normalized;
557
+ }
558
+ return this.statsLogPath;
559
+ }
560
+ formatProviderLabel(providerKey, model) {
561
+ const key = typeof providerKey === 'string' && providerKey.trim() ? providerKey.trim() : '-';
562
+ const modelId = typeof model === 'string' && model.trim() ? model.trim() : undefined;
563
+ if (modelId) {
564
+ return `${key} / ${modelId}`;
565
+ }
566
+ return key;
567
+ }
568
+ formatIso(value) {
569
+ if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
570
+ return '-';
571
+ }
572
+ try {
573
+ return new Date(value).toISOString();
574
+ }
575
+ catch {
576
+ return '-';
577
+ }
578
+ }
121
579
  resolveLogPath(explicit) {
122
580
  if (explicit && explicit.trim()) {
123
581
  return explicit.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"stats-manager.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/stats-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats-manager.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/stats-manager.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export interface ServerConfigV2 {
5
5
  server: {
6
6
  port: number;
7
7
  host: string;
8
+ apikey?: string;
8
9
  timeout?: number;
9
10
  useV2?: boolean;
10
11
  };
@@ -11,9 +11,10 @@ export declare class TokenDaemon {
11
11
  private timer;
12
12
  private lastRefreshAttempt;
13
13
  private antigravityMetadataEnsureTimestamps;
14
+ private sessionStatsByProvider;
14
15
  constructor(options?: Partial<TokenDaemonOptions>);
15
16
  start(): Promise<void>;
16
- stop(): void;
17
+ stop(): Promise<void>;
17
18
  private tick;
18
19
  private trySilentRefresh;
19
20
  private runIflowAutoAuthorization;
@@ -28,4 +29,5 @@ export declare class TokenDaemon {
28
29
  private logDebug;
29
30
  private ensurePortalEnvironment;
30
31
  private recordHistoryEvent;
32
+ private printSessionAndHistorySummary;
31
33
  }