estela 0.1.39 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -0
- package/dist/billing/assign.d.ts +45 -0
- package/dist/billing/assign.d.ts.map +1 -0
- package/dist/billing/assign.js +159 -0
- package/dist/billing/assign.js.map +1 -0
- package/dist/billing/assign.test.d.ts +2 -0
- package/dist/billing/assign.test.d.ts.map +1 -0
- package/dist/billing/assign.test.js +153 -0
- package/dist/billing/assign.test.js.map +1 -0
- package/dist/bin.js +23 -1
- package/dist/bin.js.map +1 -1
- package/dist/cli-import-recover.test.d.ts +2 -0
- package/dist/cli-import-recover.test.d.ts.map +1 -0
- package/dist/cli-import-recover.test.js +191 -0
- package/dist/cli-import-recover.test.js.map +1 -0
- package/dist/cli-quota.test.d.ts +2 -0
- package/dist/cli-quota.test.d.ts.map +1 -0
- package/dist/cli-quota.test.js +281 -0
- package/dist/cli-quota.test.js.map +1 -0
- package/dist/cli-statusline.test.d.ts +2 -0
- package/dist/cli-statusline.test.d.ts.map +1 -0
- package/dist/cli-statusline.test.js +333 -0
- package/dist/cli-statusline.test.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +350 -49
- package/dist/cli.js.map +1 -1
- package/dist/db/store.d.ts +12 -1
- package/dist/db/store.d.ts.map +1 -1
- package/dist/db/store.js +52 -0
- package/dist/db/store.js.map +1 -1
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +53 -0
- package/dist/demo.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +68 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/metrics/quota.d.ts +226 -0
- package/dist/metrics/quota.d.ts.map +1 -0
- package/dist/metrics/quota.js +291 -0
- package/dist/metrics/quota.js.map +1 -0
- package/dist/metrics/quota.test.d.ts +2 -0
- package/dist/metrics/quota.test.d.ts.map +1 -0
- package/dist/metrics/quota.test.js +325 -0
- package/dist/metrics/quota.test.js.map +1 -0
- package/dist/project-of.d.ts +52 -0
- package/dist/project-of.d.ts.map +1 -0
- package/dist/project-of.js +124 -0
- package/dist/project-of.js.map +1 -0
- package/dist/project-of.test.d.ts +2 -0
- package/dist/project-of.test.d.ts.map +1 -0
- package/dist/project-of.test.js +203 -0
- package/dist/project-of.test.js.map +1 -0
- package/dist/quota.d.ts +27 -0
- package/dist/quota.d.ts.map +1 -0
- package/dist/quota.js +79 -0
- package/dist/quota.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +17 -26
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +37 -0
- package/dist/server.test.js.map +1 -1
- package/dist/statusline-cache.d.ts +35 -0
- package/dist/statusline-cache.d.ts.map +1 -0
- package/dist/statusline-cache.js +57 -0
- package/dist/statusline-cache.js.map +1 -0
- package/dist/statusline-install.d.ts +52 -0
- package/dist/statusline-install.d.ts.map +1 -0
- package/dist/statusline-install.js +115 -0
- package/dist/statusline-install.js.map +1 -0
- package/dist/statusline-run.d.ts +8 -0
- package/dist/statusline-run.d.ts.map +1 -0
- package/dist/statusline-run.js +256 -0
- package/dist/statusline-run.js.map +1 -0
- package/dist/statusline.d.ts +71 -0
- package/dist/statusline.d.ts.map +1 -0
- package/dist/statusline.js +139 -0
- package/dist/statusline.js.map +1 -0
- package/dist/statusline.test.d.ts +2 -0
- package/dist/statusline.test.d.ts.map +1 -0
- package/dist/statusline.test.js +197 -0
- package/dist/statusline.test.js.map +1 -0
- package/dist/watchers/claude.d.ts +11 -1
- package/dist/watchers/claude.d.ts.map +1 -1
- package/dist/watchers/claude.js +32 -15
- package/dist/watchers/claude.js.map +1 -1
- package/package.json +1 -1
- package/web/app.css +36 -0
- package/web/app.js +61 -1
- package/web/i18n.js +28 -0
- package/web/index.html +4 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/metrics/quota.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HISTORY_WEEKS = exports.WINDOW_HOURS = exports.QUOTA_AGENTS = void 0;
|
|
4
|
+
exports.isQuotaAgent = isQuotaAgent;
|
|
5
|
+
exports.breakdown = breakdown;
|
|
6
|
+
exports.fiveHourWindows = fiveHourWindows;
|
|
7
|
+
exports.windowAt = windowAt;
|
|
8
|
+
exports.weekStart = weekStart;
|
|
9
|
+
exports.sameStretch = sameStretch;
|
|
10
|
+
exports.compareWithHistory = compareWithHistory;
|
|
11
|
+
exports.buildQuota = buildQuota;
|
|
12
|
+
exports.officialWindow = officialWindow;
|
|
13
|
+
exports.quotaRange = quotaRange;
|
|
14
|
+
exports.quotaToJson = quotaToJson;
|
|
15
|
+
const cost_js_1 = require("../pricing/cost.js");
|
|
16
|
+
/**
|
|
17
|
+
* "¿Qué proyecto se come mi cuota?"
|
|
18
|
+
*
|
|
19
|
+
* Quien paga Claude Max/Pro o Codex con suscripción agota la cuota antes de
|
|
20
|
+
* tiempo y no sabe en qué. Estela ya tiene cada turno con su carpeta, así que
|
|
21
|
+
* puede repartir el consumo por proyecto. Funciones puras, como el resto de
|
|
22
|
+
* `metrics/`: entran turnos, salen cifras, y cada cifra tiene un test.
|
|
23
|
+
*
|
|
24
|
+
* Lo que esto NO hace, a propósito: decir cuánto te queda. Ni Anthropic ni
|
|
25
|
+
* OpenAI publican los límites exactos de cada plan, y la cuota se comparte con
|
|
26
|
+
* lo que uses fuera de esta máquina (claude.ai, el móvil, otro portátil), que
|
|
27
|
+
* Estela no ve. Un "te quedan X tokens" sería inventado. Lo único que se puede
|
|
28
|
+
* defender es el consumo real y la comparación con tu propio historial.
|
|
29
|
+
*
|
|
30
|
+
* Los turnos llegan ya deduplicados: los lectores de `watchers/` descartan las
|
|
31
|
+
* filas repetidas (Claude Code por `message.id`, Codex por su ordinal sobre
|
|
32
|
+
* `last_token_usage`) y `agent_turns` los guarda con `turn_id` como clave
|
|
33
|
+
* primaria. Aquí no se repite esa lógica.
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Los agentes que cuentan para la cuota.
|
|
37
|
+
*
|
|
38
|
+
* Copilot no: guarda `promptTokens`/`completionTokens` sin caché ni nada que
|
|
39
|
+
* permita fiarse de ellos (ver `watchers/copilot.ts`), y además se paga por
|
|
40
|
+
* peticiones, no por tokens. Cursor y Gemini CLI no tienen lector todavía.
|
|
41
|
+
*
|
|
42
|
+
* Cada agente va por separado y no se suman nunca: Claude Code gasta la cuota
|
|
43
|
+
* de Anthropic y Codex la de OpenAI. Un "% del total" mezclando los dos no
|
|
44
|
+
* describiría ninguna cuota que exista.
|
|
45
|
+
*/
|
|
46
|
+
exports.QUOTA_AGENTS = ["claude-code", "codex"];
|
|
47
|
+
function isQuotaAgent(agent) {
|
|
48
|
+
return exports.QUOTA_AGENTS.includes(agent);
|
|
49
|
+
}
|
|
50
|
+
const ZERO = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };
|
|
51
|
+
function add(u, t) {
|
|
52
|
+
const cacheWrite = t.cacheWrite5m + t.cacheWrite1h;
|
|
53
|
+
return {
|
|
54
|
+
input: u.input + t.input,
|
|
55
|
+
output: u.output + t.output,
|
|
56
|
+
cacheRead: u.cacheRead + t.cacheRead,
|
|
57
|
+
cacheWrite: u.cacheWrite + cacheWrite,
|
|
58
|
+
total: u.total + t.input + t.output + t.cacheRead + cacheWrite,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function bucketKey(b) {
|
|
62
|
+
return b.kind === "project" ? `p:${b.projectId}` : b.kind === "folder" ? `f:${b.path}` : "-";
|
|
63
|
+
}
|
|
64
|
+
/** Precio de lista de un turno, en micro-USD, o null si su modelo no tiene precio. */
|
|
65
|
+
function listCostOf(t) {
|
|
66
|
+
if (!t.model)
|
|
67
|
+
return null;
|
|
68
|
+
return (0, cost_js_1.costOfTurn)(t.tokens, t.model, t.at)?.microUsd ?? null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Reparto por proyecto de los turnos con `from <= at < to`, de mayor a menor.
|
|
72
|
+
* Un proyecto sin actividad en el periodo no sale: una fila a cero en una
|
|
73
|
+
* tabla de "quién se come la cuota" es ruido.
|
|
74
|
+
*/
|
|
75
|
+
function breakdown(turns, from, to, bucketOf, options = {}) {
|
|
76
|
+
const acc = new Map();
|
|
77
|
+
let total = ZERO;
|
|
78
|
+
let listCost = 0;
|
|
79
|
+
let unpriced = 0;
|
|
80
|
+
for (const t of turns) {
|
|
81
|
+
if (t.at < from || t.at >= to)
|
|
82
|
+
continue;
|
|
83
|
+
const bucket = bucketOf(t.repoPath);
|
|
84
|
+
const key = bucketKey(bucket);
|
|
85
|
+
const cost = listCostOf(t);
|
|
86
|
+
if (cost === null)
|
|
87
|
+
unpriced++;
|
|
88
|
+
const prev = acc.get(key) ?? { bucket, usage: ZERO, listCost: 0 };
|
|
89
|
+
acc.set(key, { bucket, usage: add(prev.usage, t.tokens), listCost: prev.listCost + (cost ?? 0) });
|
|
90
|
+
total = add(total, t.tokens);
|
|
91
|
+
listCost += cost ?? 0;
|
|
92
|
+
}
|
|
93
|
+
const weighted = options.weighted === true;
|
|
94
|
+
const base = (r) => (weighted ? r.listCost : r.usage.total);
|
|
95
|
+
const whole = weighted ? listCost : total.total;
|
|
96
|
+
const rows = [...acc.values()]
|
|
97
|
+
.map((r) => ({ ...r, share: whole > 0 ? base(r) / whole : 0 }))
|
|
98
|
+
.sort((a, b) => base(b) - base(a));
|
|
99
|
+
return { rows, total, listCost, unpriced, weighted };
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// La ventana de 5 horas
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
exports.WINDOW_HOURS = 5;
|
|
105
|
+
const WINDOW_MS = exports.WINDOW_HOURS * 3600_000;
|
|
106
|
+
/**
|
|
107
|
+
* Las ventanas de 5 h que se deducen de unos turnos ordenados en el tiempo.
|
|
108
|
+
*
|
|
109
|
+
* Es una ESTIMACIÓN, y por eso se dice en la ayuda y en la salida:
|
|
110
|
+
*
|
|
111
|
+
* - Una ventana empieza con el primer mensaje después de que acabe la
|
|
112
|
+
* anterior, y dura 5 horas. Es lo que describen Anthropic y OpenAI, pero
|
|
113
|
+
* ninguno publica cómo redondea el inicio (ccusage, por ejemplo, lo lleva a
|
|
114
|
+
* la hora en punto). Aquí se usa la hora exacta del primer turno: no
|
|
115
|
+
* inventar un redondeo es preferible a acertar por casualidad.
|
|
116
|
+
* - La cuota se comparte con lo que uses fuera de esta máquina. Un mensaje en
|
|
117
|
+
* claude.ai puede haber abierto la ventana antes, y Estela no lo ve: la
|
|
118
|
+
* ventana real puede empezar antes, nunca después, de la que sale aquí.
|
|
119
|
+
*/
|
|
120
|
+
function fiveHourWindows(times) {
|
|
121
|
+
const sorted = [...times].sort((a, b) => a.getTime() - b.getTime());
|
|
122
|
+
const out = [];
|
|
123
|
+
for (const at of sorted) {
|
|
124
|
+
const last = out[out.length - 1];
|
|
125
|
+
if (last && at < last.end)
|
|
126
|
+
continue;
|
|
127
|
+
out.push({ start: at, end: new Date(at.getTime() + WINDOW_MS) });
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
/** La ventana abierta ahora, o null. Y si no hay, cuándo acabó la última. */
|
|
132
|
+
function windowAt(times, now) {
|
|
133
|
+
const windows = fiveHourWindows(times.filter((t) => t <= now));
|
|
134
|
+
const last = windows[windows.length - 1];
|
|
135
|
+
if (!last)
|
|
136
|
+
return { current: null, lastEnded: null };
|
|
137
|
+
return last.end > now ? { current: last, lastEnded: null } : { current: null, lastEnded: last.end };
|
|
138
|
+
}
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// La semana y el historial
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
/**
|
|
143
|
+
* El lunes de esta semana a las 00:00, en la hora de quien pregunta.
|
|
144
|
+
*
|
|
145
|
+
* Con el calendario local (`new Date(año, mes, día)`) y no restando
|
|
146
|
+
* milisegundos: la semana del cambio de hora tiene 167 o 169 horas, y restar
|
|
147
|
+
* 7 × 24 h dejaría el "lunes" a las 23:00 del domingo.
|
|
148
|
+
*/
|
|
149
|
+
function weekStart(now) {
|
|
150
|
+
const back = (now.getDay() + 6) % 7; // lunes = 0, domingo = 6
|
|
151
|
+
return new Date(now.getFullYear(), now.getMonth(), now.getDate() - back);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* El mismo tramo de la semana, `weeksBack` semanas atrás: si hoy es miércoles a
|
|
155
|
+
* las 15:00, de lunes 00:00 a miércoles 15:00 de aquella semana. Así se compara
|
|
156
|
+
* lo comparable: un miércoles no puede llevar lo que lleva una semana entera.
|
|
157
|
+
*/
|
|
158
|
+
function sameStretch(now, weeksBack) {
|
|
159
|
+
const monday = weekStart(now);
|
|
160
|
+
const day = (now.getDay() + 6) % 7;
|
|
161
|
+
const start = new Date(monday.getFullYear(), monday.getMonth(), monday.getDate() - 7 * weeksBack);
|
|
162
|
+
const end = new Date(start.getFullYear(), start.getMonth(), start.getDate() + day, now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
|
|
163
|
+
return { start, end };
|
|
164
|
+
}
|
|
165
|
+
/** Las semanas completas con las que se compara. */
|
|
166
|
+
exports.HISTORY_WEEKS = 4;
|
|
167
|
+
/**
|
|
168
|
+
* Esta semana frente a la media de las cuatro anteriores, en el mismo tramo.
|
|
169
|
+
*
|
|
170
|
+
* Una semana pasada solo cuenta como historial si empezó el día del primer
|
|
171
|
+
* turno de ese agente o después: antes de eso no había nada que medir, y
|
|
172
|
+
* meter un cero inventado bajaría la media y haría parecer excesiva una semana
|
|
173
|
+
* normal. Una semana posterior sin uso sí cuenta como cero: es real.
|
|
174
|
+
*/
|
|
175
|
+
function compareWithHistory(times, firstTurnAt, now) {
|
|
176
|
+
const sum = (w) => times.reduce((s, t) => (t.at >= w.start && t.at < w.end ? s + t.total : s), 0);
|
|
177
|
+
const firstDay = firstTurnAt
|
|
178
|
+
? new Date(firstTurnAt.getFullYear(), firstTurnAt.getMonth(), firstTurnAt.getDate())
|
|
179
|
+
: null;
|
|
180
|
+
const past = Array.from({ length: exports.HISTORY_WEEKS }, (_, i) => sameStretch(now, i + 1));
|
|
181
|
+
const covered = past.filter((w) => firstDay !== null && w.start >= firstDay);
|
|
182
|
+
if (covered.length < exports.HISTORY_WEEKS) {
|
|
183
|
+
return { status: "insufficient", completeWeeks: covered.length, weeks: exports.HISTORY_WEEKS };
|
|
184
|
+
}
|
|
185
|
+
const current = sum({ start: weekStart(now), end: new Date(now.getTime() + 1) });
|
|
186
|
+
const average = past.reduce((s, w) => s + sum(w), 0) / exports.HISTORY_WEEKS;
|
|
187
|
+
return { status: "ok", current, average, ratio: average > 0 ? current / average : null, weeks: exports.HISTORY_WEEKS };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Monta el informe. `turns` debe cubrir al menos las cuatro semanas anteriores
|
|
191
|
+
* a esta (ver `quotaRange`); `firstTurnAt`, el primer turno que hay guardado de
|
|
192
|
+
* cada agente, sea de cuando sea.
|
|
193
|
+
*/
|
|
194
|
+
function buildQuota(input) {
|
|
195
|
+
const { now, bucketOf } = input;
|
|
196
|
+
const opts = { weighted: input.weighted === true };
|
|
197
|
+
const monday = weekStart(now);
|
|
198
|
+
const until = new Date(now.getTime() + 1);
|
|
199
|
+
const turns = input.turns.filter((t) => t.at <= now);
|
|
200
|
+
const agents = [];
|
|
201
|
+
for (const agent of exports.QUOTA_AGENTS) {
|
|
202
|
+
const own = turns.filter((t) => t.agent === agent);
|
|
203
|
+
const official = agent === "claude-code" && input.claudeWindow &&
|
|
204
|
+
input.claudeWindow.start <= now && now < input.claudeWindow.end ? input.claudeWindow : null;
|
|
205
|
+
const estimate = windowAt(own.map((t) => t.at), now);
|
|
206
|
+
const current = official ?? estimate.current;
|
|
207
|
+
const week = breakdown(own, monday, until, bucketOf, opts);
|
|
208
|
+
if (!current && week.rows.length === 0)
|
|
209
|
+
continue;
|
|
210
|
+
agents.push({
|
|
211
|
+
agent,
|
|
212
|
+
window: current
|
|
213
|
+
? { ...current, ...breakdown(own, current.start, until, bucketOf, opts), estimated: !official }
|
|
214
|
+
: null,
|
|
215
|
+
lastWindowEnded: current ? null : estimate.lastEnded,
|
|
216
|
+
week,
|
|
217
|
+
comparison: compareWithHistory(own.map((t) => ({ at: t.at, total: add(ZERO, t.tokens).total })), input.firstTurnAt.get(agent) ?? null, now),
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
generatedAt: now,
|
|
222
|
+
weekStart: monday,
|
|
223
|
+
agents,
|
|
224
|
+
copilotExcluded: turns.some((t) => t.agent === "copilot" && t.at >= monday),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* La ventana de 5 h que dio Claude Code, a partir del último `resets_at` que
|
|
229
|
+
* vio la status line: empieza 5 h antes de su reinicio.
|
|
230
|
+
*
|
|
231
|
+
* Solo vale si el dato tiene menos de 5 h (uno más viejo puede ser de otra
|
|
232
|
+
* ventana) y si el reinicio aún no ha llegado (pasado ese momento, la ventana
|
|
233
|
+
* en curso es otra que nadie ha visto). Si no, null: se estima como siempre.
|
|
234
|
+
*/
|
|
235
|
+
function officialWindow(seen, now) {
|
|
236
|
+
if (!seen)
|
|
237
|
+
return null;
|
|
238
|
+
const age = now.getTime() - seen.seenAt.getTime();
|
|
239
|
+
if (age < 0 || age >= WINDOW_MS)
|
|
240
|
+
return null;
|
|
241
|
+
if (seen.resetsAt <= now)
|
|
242
|
+
return null;
|
|
243
|
+
const start = new Date(seen.resetsAt.getTime() - WINDOW_MS);
|
|
244
|
+
return start <= now ? { start, end: seen.resetsAt } : null;
|
|
245
|
+
}
|
|
246
|
+
/** Desde cuándo hay que leer turnos para montar el informe de `now`. */
|
|
247
|
+
function quotaRange(now) {
|
|
248
|
+
return { start: sameStretch(now, exports.HISTORY_WEEKS).start, end: new Date(now.getTime() + 1) };
|
|
249
|
+
}
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
// Salida para máquinas
|
|
252
|
+
// ---------------------------------------------------------------------------
|
|
253
|
+
/**
|
|
254
|
+
* El informe como JSON estable, para `--json` y para el panel web. Fechas en
|
|
255
|
+
* ISO, y las filas con `projectId`/`projectName`/`folder` a null cuando no
|
|
256
|
+
* aplican, para que un script no tenga que mirar de qué tipo es cada una.
|
|
257
|
+
*/
|
|
258
|
+
function quotaToJson(report) {
|
|
259
|
+
const rows = (b) => b.rows.map((r) => ({
|
|
260
|
+
projectId: r.bucket.kind === "project" ? r.bucket.projectId : null,
|
|
261
|
+
projectName: r.bucket.kind === "project" ? r.bucket.projectName : null,
|
|
262
|
+
folder: r.bucket.kind === "folder" ? r.bucket.folder : null,
|
|
263
|
+
...r.usage,
|
|
264
|
+
listCostMicroUsd: r.listCost,
|
|
265
|
+
share: Math.round(r.share * 10_000) / 10_000,
|
|
266
|
+
}));
|
|
267
|
+
const weighted = report.agents.some((a) => a.week.weighted);
|
|
268
|
+
return {
|
|
269
|
+
generatedAt: report.generatedAt.toISOString(),
|
|
270
|
+
weekStart: report.weekStart.toISOString(),
|
|
271
|
+
// Para que ningún script lo trate como un dato exacto sin haberlo leído:
|
|
272
|
+
// false solo si todas las ventanas que salen las dio Claude Code.
|
|
273
|
+
windowIsEstimate: report.agents.some((a) => !a.window || a.window.estimated),
|
|
274
|
+
windowHours: exports.WINDOW_HOURS,
|
|
275
|
+
shareBasis: weighted ? "list-price" : "tokens",
|
|
276
|
+
agents: report.agents.map((a) => ({
|
|
277
|
+
agent: a.agent,
|
|
278
|
+
window: a.window
|
|
279
|
+
? { start: a.window.start.toISOString(), end: a.window.end.toISOString(),
|
|
280
|
+
estimated: a.window.estimated, projects: rows(a.window), total: a.window.total }
|
|
281
|
+
: null,
|
|
282
|
+
lastWindowEnded: a.lastWindowEnded?.toISOString() ?? null,
|
|
283
|
+
week: { projects: rows(a.week), total: a.week.total },
|
|
284
|
+
comparison: a.comparison.status === "ok"
|
|
285
|
+
? { ...a.comparison, ratio: a.comparison.ratio === null ? null : Math.round(a.comparison.ratio * 1000) / 1000 }
|
|
286
|
+
: a.comparison,
|
|
287
|
+
})),
|
|
288
|
+
excluded: report.copilotExcluded ? [{ agent: "copilot", reason: "no-reliable-tokens" }] : [],
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=quota.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/metrics/quota.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota.test.d.ts","sourceRoot":"","sources":["../../src/metrics/quota.test.ts"],"names":[],"mappings":""}
|