@cortexkit/opencode-anthropic-auth 2.4.7 → 2.4.8
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/dist/cli.js +43 -43
- package/dist/tui/claude-sidebar.d.ts +1 -1
- package/dist/v2/server.js +5 -5
- package/package.json +2 -2
- package/src/tui/claude-sidebar.tsx +321 -274
- package/src/tui/quota-sidebar.d.ts +11 -0
- package/src/tui/quota-sidebar.js +879 -0
- package/src/tui-compiled/quota-sidebar.js +879 -0
- package/src/tui-compiled/tui/claude-sidebar.tsx +431 -539
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { memo as _$memo } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
2
|
-
import { createComponent as _$createComponent } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
3
1
|
import { createTextNode as _$createTextNode } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
2
|
+
import { memo as _$memo } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
4
3
|
import { use as _$use } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
4
|
+
import { createComponent as _$createComponent } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
5
5
|
import { effect as _$effect } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
6
6
|
import { insertNode as _$insertNode } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
7
7
|
import { insert as _$insert } from "opentui:runtime-module:%40opentui%2Fsolid";
|
|
@@ -17,10 +17,11 @@ import { readFileSync } from "node:fs";
|
|
|
17
17
|
import { dirname, join } from "node:path";
|
|
18
18
|
import { fileURLToPath } from "node:url";
|
|
19
19
|
import { formatCreditAmounts, quotaDisplayProjection, quotaWindowParts } from "@cortexkit/anthropic-auth-core";
|
|
20
|
-
import { TextAttributes } from "opentui:runtime-module:%40opentui%2Fcore";
|
|
21
20
|
import { createEffect, createMemo, createSignal, For, Index, onCleanup, Show } from "opentui:runtime-module:solid-js";
|
|
22
|
-
import {
|
|
21
|
+
import { createStore, reconcile } from "opentui:runtime-module:solid-js%2Fstore";
|
|
22
|
+
import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, FIVE_HOUR_MS, fitPaceLine, fitQuotaRow, formatPrimeAccountValue, getCollapsedAccounts, getCollapsedQuotaSummary, getFableRecoverySummary, quotaLabelColumnWidth, resolveActiveAccount, SEVEN_DAY_MS, scopedQuotaShortNames } from "../sidebar-state.js";
|
|
23
23
|
import { PLUGIN_KEY, queueTuiPreferenceUpdate, readTuiPreferencesFile, resolveAnthropicAuthPrefs, watchTuiPreferences } from "../tui-preferences.js";
|
|
24
|
+
import { SidebarFrame, SidebarTextRow } from "./../quota-sidebar.js";
|
|
24
25
|
|
|
25
26
|
// Read package metadata from either the raw src/ entry or its generated
|
|
26
27
|
// src/tui-compiled/tui/ counterpart. Avoid a JSON import because package.json sits
|
|
@@ -64,6 +65,9 @@ function usageTone(usedPct, appearance) {
|
|
|
64
65
|
if (usedPct < appearance.errorThreshold) return 'warn';
|
|
65
66
|
return 'err';
|
|
66
67
|
}
|
|
68
|
+
function sharedTone(tone) {
|
|
69
|
+
return tone === 'ok' ? 'success' : tone === 'warn' ? 'warning' : tone === 'err' ? 'error' : tone === 'muted' ? 'textMuted' : tone;
|
|
70
|
+
}
|
|
67
71
|
const PACE_RESERVE_CHAR = '\u2592';
|
|
68
72
|
const PACE_DEFICIT_CHAR = '\u2593';
|
|
69
73
|
|
|
@@ -198,111 +202,26 @@ function CollapsedRow(props) {
|
|
|
198
202
|
return _el$8;
|
|
199
203
|
})();
|
|
200
204
|
}
|
|
201
|
-
function CollapsedAccountRow(props) {
|
|
202
|
-
const [width, setWidth] = createSignal(40);
|
|
203
|
-
let row;
|
|
204
|
-
const summary = () => getCollapsedQuotaSummary(props.account.quota, props.now);
|
|
205
|
-
const value = () => summary().text ?? '—';
|
|
206
|
-
// Keep the quota and its two-cell status suffix intact; only the label shrinks.
|
|
207
|
-
const labelWidth = () => Math.max(0, width() - 1 - Bun.stringWidth(value()) - 2);
|
|
208
|
-
const dim = () => !props.account.active || props.account.quotaDated || summary().stale;
|
|
209
|
-
const attributes = () => dim() ? TextAttributes.DIM : TextAttributes.BOLD;
|
|
210
|
-
const color = () => dim() ? props.theme.textMuted : toneColor(props.theme, props.tone);
|
|
211
|
-
return (() => {
|
|
212
|
-
var _el$0 = _$createElement("box"),
|
|
213
|
-
_el$12 = _$createElement("text"),
|
|
214
|
-
_el$13 = _$createElement("text");
|
|
215
|
-
_$insertNode(_el$0, _el$12);
|
|
216
|
-
_$insertNode(_el$0, _el$13);
|
|
217
|
-
_$use(element => {
|
|
218
|
-
row = element;
|
|
219
|
-
setWidth(element.width || 40);
|
|
220
|
-
}, _el$0);
|
|
221
|
-
_$setProp(_el$0, "width", '100%');
|
|
222
|
-
_$setProp(_el$0, "height", 1);
|
|
223
|
-
_$setProp(_el$0, "flexDirection", 'row');
|
|
224
|
-
_$setProp(_el$0, "onSizeChange", () => setWidth(row?.width || 40));
|
|
225
|
-
_$insert(_el$0, _$createComponent(Show, {
|
|
226
|
-
get when() {
|
|
227
|
-
return labelWidth() > 0;
|
|
228
|
-
},
|
|
229
|
-
get children() {
|
|
230
|
-
return [(() => {
|
|
231
|
-
var _el$1 = _$createElement("text");
|
|
232
|
-
_$setProp(_el$1, "flexShrink", 0);
|
|
233
|
-
_$setProp(_el$1, "wrapMode", 'none');
|
|
234
|
-
_$insert(_el$1, () => formatQuotaRowLabel(props.account.name, labelWidth()));
|
|
235
|
-
_$effect(_p$ => {
|
|
236
|
-
var _v$5 = labelWidth(),
|
|
237
|
-
_v$6 = color(),
|
|
238
|
-
_v$7 = attributes();
|
|
239
|
-
_v$5 !== _p$.e && (_p$.e = _$setProp(_el$1, "width", _v$5, _p$.e));
|
|
240
|
-
_v$6 !== _p$.t && (_p$.t = _$setProp(_el$1, "fg", _v$6, _p$.t));
|
|
241
|
-
_v$7 !== _p$.a && (_p$.a = _$setProp(_el$1, "attributes", _v$7, _p$.a));
|
|
242
|
-
return _p$;
|
|
243
|
-
}, {
|
|
244
|
-
e: undefined,
|
|
245
|
-
t: undefined,
|
|
246
|
-
a: undefined
|
|
247
|
-
});
|
|
248
|
-
return _el$1;
|
|
249
|
-
})(), (() => {
|
|
250
|
-
var _el$10 = _$createElement("text");
|
|
251
|
-
_$insertNode(_el$10, _$createTextNode(` `));
|
|
252
|
-
_$setProp(_el$10, "width", 1);
|
|
253
|
-
_$setProp(_el$10, "flexShrink", 0);
|
|
254
|
-
return _el$10;
|
|
255
|
-
})()];
|
|
256
|
-
}
|
|
257
|
-
}), _el$12);
|
|
258
|
-
_$setProp(_el$12, "flexShrink", 0);
|
|
259
|
-
_$setProp(_el$12, "wrapMode", 'none');
|
|
260
|
-
_$insert(_el$12, value);
|
|
261
|
-
_$setProp(_el$13, "width", 2);
|
|
262
|
-
_$setProp(_el$13, "flexShrink", 0);
|
|
263
|
-
_$insert(_el$13, () => props.account.blocked ? ' ⊘' : ' ●');
|
|
264
|
-
_$effect(_p$ => {
|
|
265
|
-
var _v$8 = Bun.stringWidth(value()),
|
|
266
|
-
_v$9 = color(),
|
|
267
|
-
_v$0 = attributes(),
|
|
268
|
-
_v$1 = toneColor(props.theme, props.account.blocked ? 'warn' : props.account.active ? 'ok' : 'muted'),
|
|
269
|
-
_v$10 = attributes();
|
|
270
|
-
_v$8 !== _p$.e && (_p$.e = _$setProp(_el$12, "width", _v$8, _p$.e));
|
|
271
|
-
_v$9 !== _p$.t && (_p$.t = _$setProp(_el$12, "fg", _v$9, _p$.t));
|
|
272
|
-
_v$0 !== _p$.a && (_p$.a = _$setProp(_el$12, "attributes", _v$0, _p$.a));
|
|
273
|
-
_v$1 !== _p$.o && (_p$.o = _$setProp(_el$13, "fg", _v$1, _p$.o));
|
|
274
|
-
_v$10 !== _p$.i && (_p$.i = _$setProp(_el$13, "attributes", _v$10, _p$.i));
|
|
275
|
-
return _p$;
|
|
276
|
-
}, {
|
|
277
|
-
e: undefined,
|
|
278
|
-
t: undefined,
|
|
279
|
-
a: undefined,
|
|
280
|
-
o: undefined,
|
|
281
|
-
i: undefined
|
|
282
|
-
});
|
|
283
|
-
return _el$0;
|
|
284
|
-
})();
|
|
285
|
-
}
|
|
286
205
|
|
|
287
206
|
// One cell run of a single-line row: drawn at its own width, never shrunk and
|
|
288
207
|
// never wrapped, so the row's layout is exactly what `fitQuotaRow` measured.
|
|
289
208
|
function Cell(props) {
|
|
290
209
|
return (() => {
|
|
291
|
-
var _el$
|
|
292
|
-
_$setProp(_el$
|
|
293
|
-
_$setProp(_el$
|
|
294
|
-
_$insert(_el$
|
|
210
|
+
var _el$0 = _$createElement("text");
|
|
211
|
+
_$setProp(_el$0, "flexShrink", 0);
|
|
212
|
+
_$setProp(_el$0, "wrapMode", 'none');
|
|
213
|
+
_$insert(_el$0, () => props.text);
|
|
295
214
|
_$effect(_p$ => {
|
|
296
|
-
var _v$
|
|
297
|
-
_v$
|
|
298
|
-
_v$
|
|
299
|
-
_v$
|
|
215
|
+
var _v$5 = Bun.stringWidth(props.text),
|
|
216
|
+
_v$6 = props.fg;
|
|
217
|
+
_v$5 !== _p$.e && (_p$.e = _$setProp(_el$0, "width", _v$5, _p$.e));
|
|
218
|
+
_v$6 !== _p$.t && (_p$.t = _$setProp(_el$0, "fg", _v$6, _p$.t));
|
|
300
219
|
return _p$;
|
|
301
220
|
}, {
|
|
302
221
|
e: undefined,
|
|
303
222
|
t: undefined
|
|
304
223
|
});
|
|
305
|
-
return _el$
|
|
224
|
+
return _el$0;
|
|
306
225
|
})();
|
|
307
226
|
}
|
|
308
227
|
|
|
@@ -332,11 +251,11 @@ function QuotaRow(props) {
|
|
|
332
251
|
},
|
|
333
252
|
get fallback() {
|
|
334
253
|
return (() => {
|
|
335
|
-
var _el$
|
|
336
|
-
_$setProp(_el$
|
|
337
|
-
_$setProp(_el$
|
|
338
|
-
_$setProp(_el$
|
|
339
|
-
_$insert(_el$
|
|
254
|
+
var _el$11 = _$createElement("box");
|
|
255
|
+
_$setProp(_el$11, "width", '100%');
|
|
256
|
+
_$setProp(_el$11, "height", 1);
|
|
257
|
+
_$setProp(_el$11, "flexDirection", 'row');
|
|
258
|
+
_$insert(_el$11, _$createComponent(Cell, {
|
|
340
259
|
get fg() {
|
|
341
260
|
return props.theme.textMuted;
|
|
342
261
|
},
|
|
@@ -344,26 +263,26 @@ function QuotaRow(props) {
|
|
|
344
263
|
return `${labelCell()}\u2014`;
|
|
345
264
|
}
|
|
346
265
|
}));
|
|
347
|
-
return _el$
|
|
266
|
+
return _el$11;
|
|
348
267
|
})();
|
|
349
268
|
},
|
|
350
269
|
get children() {
|
|
351
270
|
return [(() => {
|
|
352
|
-
var _el$
|
|
353
|
-
_el$
|
|
354
|
-
_$insertNode(_el$
|
|
355
|
-
_$setProp(_el$
|
|
356
|
-
_$setProp(_el$
|
|
357
|
-
_$setProp(_el$
|
|
358
|
-
_$insert(_el$
|
|
271
|
+
var _el$1 = _$createElement("box"),
|
|
272
|
+
_el$10 = _$createElement("box");
|
|
273
|
+
_$insertNode(_el$1, _el$10);
|
|
274
|
+
_$setProp(_el$1, "width", '100%');
|
|
275
|
+
_$setProp(_el$1, "height", 1);
|
|
276
|
+
_$setProp(_el$1, "flexDirection", 'row');
|
|
277
|
+
_$insert(_el$1, _$createComponent(Cell, {
|
|
359
278
|
get fg() {
|
|
360
279
|
return props.theme.textMuted;
|
|
361
280
|
},
|
|
362
281
|
get text() {
|
|
363
282
|
return labelCell();
|
|
364
283
|
}
|
|
365
|
-
}), _el$
|
|
366
|
-
_$insert(_el$
|
|
284
|
+
}), _el$10);
|
|
285
|
+
_$insert(_el$1, _$createComponent(Index, {
|
|
367
286
|
get each() {
|
|
368
287
|
return quotaBarSegments(used(), props.appearance, props.pacing, fit().barCells);
|
|
369
288
|
},
|
|
@@ -375,17 +294,17 @@ function QuotaRow(props) {
|
|
|
375
294
|
return segment().text;
|
|
376
295
|
}
|
|
377
296
|
})
|
|
378
|
-
}), _el$
|
|
379
|
-
_$insert(_el$
|
|
297
|
+
}), _el$10);
|
|
298
|
+
_$insert(_el$1, _$createComponent(Cell, {
|
|
380
299
|
get fg() {
|
|
381
300
|
return toneColor(props.theme, usageTone(used(), props.appearance));
|
|
382
301
|
},
|
|
383
302
|
get text() {
|
|
384
303
|
return `${fit().barCells > 0 ? ' ' : ''}${figure()}`;
|
|
385
304
|
}
|
|
386
|
-
}), _el$
|
|
387
|
-
_$setProp(_el$
|
|
388
|
-
_$insert(_el$
|
|
305
|
+
}), _el$10);
|
|
306
|
+
_$setProp(_el$10, "flexGrow", 1);
|
|
307
|
+
_$insert(_el$1, _$createComponent(Show, {
|
|
389
308
|
get when() {
|
|
390
309
|
return fit().reset;
|
|
391
310
|
},
|
|
@@ -398,17 +317,17 @@ function QuotaRow(props) {
|
|
|
398
317
|
}
|
|
399
318
|
})
|
|
400
319
|
}), null);
|
|
401
|
-
return _el$
|
|
320
|
+
return _el$1;
|
|
402
321
|
})(), _$createComponent(Show, {
|
|
403
322
|
get when() {
|
|
404
323
|
return paceLine();
|
|
405
324
|
},
|
|
406
325
|
children: line => (() => {
|
|
407
|
-
var _el$
|
|
408
|
-
_$setProp(_el$
|
|
409
|
-
_$setProp(_el$
|
|
410
|
-
_$setProp(_el$
|
|
411
|
-
_$insert(_el$
|
|
326
|
+
var _el$12 = _$createElement("box");
|
|
327
|
+
_$setProp(_el$12, "width", '100%');
|
|
328
|
+
_$setProp(_el$12, "height", 1);
|
|
329
|
+
_$setProp(_el$12, "flexDirection", 'row');
|
|
330
|
+
_$insert(_el$12, _$createComponent(Cell, {
|
|
412
331
|
get fg() {
|
|
413
332
|
return props.theme.textMuted;
|
|
414
333
|
},
|
|
@@ -416,7 +335,7 @@ function QuotaRow(props) {
|
|
|
416
335
|
return ' '.repeat(props.labelWidth + 1);
|
|
417
336
|
}
|
|
418
337
|
}), null);
|
|
419
|
-
_$insert(_el$
|
|
338
|
+
_$insert(_el$12, _$createComponent(Cell, {
|
|
420
339
|
get fg() {
|
|
421
340
|
return toneColor(props.theme, props.pacing?.state === 'deficit' ? 'warn' : 'muted');
|
|
422
341
|
},
|
|
@@ -424,7 +343,7 @@ function QuotaRow(props) {
|
|
|
424
343
|
return line();
|
|
425
344
|
}
|
|
426
345
|
}), null);
|
|
427
|
-
return _el$
|
|
346
|
+
return _el$12;
|
|
428
347
|
})()
|
|
429
348
|
})];
|
|
430
349
|
}
|
|
@@ -464,50 +383,50 @@ export function AccountBlock(props) {
|
|
|
464
383
|
const [width, setWidth] = createSignal();
|
|
465
384
|
let block;
|
|
466
385
|
return (() => {
|
|
467
|
-
var _el$
|
|
468
|
-
_el$
|
|
469
|
-
_el$
|
|
470
|
-
_el$
|
|
471
|
-
_el$
|
|
472
|
-
_el$
|
|
473
|
-
_$insertNode(_el$
|
|
386
|
+
var _el$13 = _$createElement("box"),
|
|
387
|
+
_el$14 = _$createElement("box"),
|
|
388
|
+
_el$15 = _$createElement("text"),
|
|
389
|
+
_el$16 = _$createElement("b"),
|
|
390
|
+
_el$17 = _$createElement("text"),
|
|
391
|
+
_el$18 = _$createElement("b");
|
|
392
|
+
_$insertNode(_el$13, _el$14);
|
|
474
393
|
_$use(element => {
|
|
475
394
|
block = element;
|
|
476
395
|
setWidth(element.width || undefined);
|
|
477
|
-
}, _el$
|
|
478
|
-
_$setProp(_el$
|
|
479
|
-
_$setProp(_el$
|
|
480
|
-
_$setProp(_el$
|
|
481
|
-
_$insertNode(_el$
|
|
482
|
-
_$insertNode(_el$
|
|
483
|
-
_$setProp(_el$
|
|
484
|
-
_$setProp(_el$
|
|
485
|
-
_$setProp(_el$
|
|
486
|
-
_$insertNode(_el$
|
|
487
|
-
_$insert(_el$
|
|
488
|
-
_$insertNode(_el$
|
|
489
|
-
_$insert(_el$
|
|
490
|
-
_$insert(_el$
|
|
396
|
+
}, _el$13);
|
|
397
|
+
_$setProp(_el$13, "width", '100%');
|
|
398
|
+
_$setProp(_el$13, "flexDirection", 'column');
|
|
399
|
+
_$setProp(_el$13, "onSizeChange", () => setWidth(block?.width || undefined));
|
|
400
|
+
_$insertNode(_el$14, _el$15);
|
|
401
|
+
_$insertNode(_el$14, _el$17);
|
|
402
|
+
_$setProp(_el$14, "width", '100%');
|
|
403
|
+
_$setProp(_el$14, "flexDirection", 'row');
|
|
404
|
+
_$setProp(_el$14, "justifyContent", 'space-between');
|
|
405
|
+
_$insertNode(_el$15, _el$16);
|
|
406
|
+
_$insert(_el$16, () => `${props.name}${props.tierLabel ? ` · ${props.tierLabel}` : ''}`);
|
|
407
|
+
_$insertNode(_el$17, _el$18);
|
|
408
|
+
_$insert(_el$18, statusWord);
|
|
409
|
+
_$insert(_el$13, _$createComponent(Show, {
|
|
491
410
|
get when() {
|
|
492
411
|
return props.stateLine;
|
|
493
412
|
},
|
|
494
413
|
get children() {
|
|
495
|
-
var _el$
|
|
496
|
-
_$insert(_el$
|
|
497
|
-
_$effect(_$p => _$setProp(_el$
|
|
498
|
-
return _el$
|
|
414
|
+
var _el$19 = _$createElement("text");
|
|
415
|
+
_$insert(_el$19, () => props.stateLine);
|
|
416
|
+
_$effect(_$p => _$setProp(_el$19, "fg", props.theme.textMuted, _$p));
|
|
417
|
+
return _el$19;
|
|
499
418
|
}
|
|
500
419
|
}), null);
|
|
501
|
-
_$insert(_el$
|
|
420
|
+
_$insert(_el$13, _$createComponent(Show, {
|
|
502
421
|
get when() {
|
|
503
422
|
return props.quota;
|
|
504
423
|
},
|
|
505
424
|
get fallback() {
|
|
506
425
|
return (() => {
|
|
507
|
-
var _el$
|
|
508
|
-
_$insertNode(_el$
|
|
509
|
-
_$effect(_$p => _$setProp(_el$
|
|
510
|
-
return _el$
|
|
426
|
+
var _el$23 = _$createElement("text");
|
|
427
|
+
_$insertNode(_el$23, _$createTextNode(`checking…`));
|
|
428
|
+
_$effect(_$p => _$setProp(_el$23, "fg", props.theme.textMuted, _$p));
|
|
429
|
+
return _el$23;
|
|
511
430
|
})();
|
|
512
431
|
},
|
|
513
432
|
get children() {
|
|
@@ -626,54 +545,99 @@ export function AccountBlock(props) {
|
|
|
626
545
|
children: budget => // One line in the block's width: amounts drop their cents rather
|
|
627
546
|
// than wrap, and keep them until the first layout.
|
|
628
547
|
(() => {
|
|
629
|
-
var _el$
|
|
630
|
-
_el$
|
|
631
|
-
_$insertNode(_el$
|
|
632
|
-
_$setProp(_el$
|
|
633
|
-
_$setProp(_el$
|
|
634
|
-
_$setProp(_el$
|
|
635
|
-
_$setProp(_el$
|
|
636
|
-
_$insert(_el$
|
|
637
|
-
_$effect(_$p => _$setProp(_el$
|
|
638
|
-
return _el$
|
|
548
|
+
var _el$25 = _$createElement("box"),
|
|
549
|
+
_el$26 = _$createElement("text");
|
|
550
|
+
_$insertNode(_el$25, _el$26);
|
|
551
|
+
_$setProp(_el$25, "width", '100%');
|
|
552
|
+
_$setProp(_el$25, "height", 1);
|
|
553
|
+
_$setProp(_el$25, "flexDirection", 'row');
|
|
554
|
+
_$setProp(_el$26, "wrapMode", 'none');
|
|
555
|
+
_$insert(_el$26, () => creditLine(budget().figure, props.quota?.extraUsage, width()));
|
|
556
|
+
_$effect(_$p => _$setProp(_el$26, "fg", toneColor(props.theme, props.quota?.extraUsage?.severity === 'critical' ? 'err' : props.quota?.extraUsage?.severity === 'warning' || props.quota?.extraUsage?.exhausted ? 'warn' : 'muted'), _$p));
|
|
557
|
+
return _el$25;
|
|
639
558
|
})()
|
|
640
559
|
}), _$createComponent(Show, {
|
|
641
560
|
get when() {
|
|
642
561
|
return parts().age;
|
|
643
562
|
},
|
|
644
563
|
get children() {
|
|
645
|
-
var _el$
|
|
646
|
-
_$insert(_el$
|
|
647
|
-
_$effect(_$p => _$setProp(_el$
|
|
648
|
-
return _el$
|
|
564
|
+
var _el$20 = _$createElement("text");
|
|
565
|
+
_$insert(_el$20, () => parts().age);
|
|
566
|
+
_$effect(_$p => _$setProp(_el$20, "fg", props.theme.textMuted, _$p));
|
|
567
|
+
return _el$20;
|
|
649
568
|
}
|
|
650
569
|
}), _$createComponent(Show, {
|
|
651
570
|
get when() {
|
|
652
571
|
return props.quota?.fallbackAdvised === true;
|
|
653
572
|
},
|
|
654
573
|
get children() {
|
|
655
|
-
var _el$
|
|
656
|
-
_$insertNode(_el$
|
|
657
|
-
_$effect(_$p => _$setProp(_el$
|
|
658
|
-
return _el$
|
|
574
|
+
var _el$21 = _$createElement("text");
|
|
575
|
+
_$insertNode(_el$21, _$createTextNode(`→ fallback advised`));
|
|
576
|
+
_$effect(_$p => _$setProp(_el$21, "fg", props.theme.textMuted, _$p));
|
|
577
|
+
return _el$21;
|
|
659
578
|
}
|
|
660
579
|
})];
|
|
661
580
|
}
|
|
662
581
|
}), null);
|
|
663
582
|
_$effect(_p$ => {
|
|
664
|
-
var _v$
|
|
665
|
-
_v$
|
|
666
|
-
_v$
|
|
667
|
-
_v$
|
|
668
|
-
_v$
|
|
669
|
-
_v$
|
|
583
|
+
var _v$7 = props.marginTop ?? 0,
|
|
584
|
+
_v$8 = props.theme.text,
|
|
585
|
+
_v$9 = toneColor(props.theme, statusTone());
|
|
586
|
+
_v$7 !== _p$.e && (_p$.e = _$setProp(_el$13, "marginTop", _v$7, _p$.e));
|
|
587
|
+
_v$8 !== _p$.t && (_p$.t = _$setProp(_el$15, "fg", _v$8, _p$.t));
|
|
588
|
+
_v$9 !== _p$.a && (_p$.a = _$setProp(_el$17, "fg", _v$9, _p$.a));
|
|
670
589
|
return _p$;
|
|
671
590
|
}, {
|
|
672
591
|
e: undefined,
|
|
673
592
|
t: undefined,
|
|
674
593
|
a: undefined
|
|
675
594
|
});
|
|
676
|
-
return _el$
|
|
595
|
+
return _el$13;
|
|
596
|
+
})();
|
|
597
|
+
}
|
|
598
|
+
function AccountExtras(props) {
|
|
599
|
+
const [width, setWidth] = createSignal();
|
|
600
|
+
let block;
|
|
601
|
+
const budget = () => quotaWindowParts(quotaDisplayProjection(props.quota, props.now), {
|
|
602
|
+
now: props.now
|
|
603
|
+
}).windows.find(part => part.kind === 'budget');
|
|
604
|
+
return (() => {
|
|
605
|
+
var _el$27 = _$createElement("box");
|
|
606
|
+
_$use(element => {
|
|
607
|
+
block = element;
|
|
608
|
+
setWidth(element.width || undefined);
|
|
609
|
+
}, _el$27);
|
|
610
|
+
_$setProp(_el$27, "width", '100%');
|
|
611
|
+
_$setProp(_el$27, "flexDirection", 'column');
|
|
612
|
+
_$setProp(_el$27, "onSizeChange", () => setWidth(block?.width || undefined));
|
|
613
|
+
_$insert(_el$27, _$createComponent(Show, {
|
|
614
|
+
get when() {
|
|
615
|
+
return budget();
|
|
616
|
+
},
|
|
617
|
+
children: part => (() => {
|
|
618
|
+
var _el$28 = _$createElement("box"),
|
|
619
|
+
_el$29 = _$createElement("text");
|
|
620
|
+
_$insertNode(_el$28, _el$29);
|
|
621
|
+
_$setProp(_el$28, "width", '100%');
|
|
622
|
+
_$setProp(_el$28, "height", 1);
|
|
623
|
+
_$setProp(_el$28, "flexDirection", 'row');
|
|
624
|
+
_$setProp(_el$29, "wrapMode", 'none');
|
|
625
|
+
_$insert(_el$29, () => creditLine(part().figure, props.quota?.extraUsage, width()));
|
|
626
|
+
_$effect(_$p => _$setProp(_el$29, "fg", toneColor(props.theme, props.quota?.extraUsage?.severity === 'critical' ? 'err' : props.quota?.extraUsage?.severity === 'warning' || props.quota?.extraUsage?.exhausted ? 'warn' : 'muted'), _$p));
|
|
627
|
+
return _el$28;
|
|
628
|
+
})()
|
|
629
|
+
}), null);
|
|
630
|
+
_$insert(_el$27, _$createComponent(Show, {
|
|
631
|
+
get when() {
|
|
632
|
+
return props.quota?.fallbackAdvised === true;
|
|
633
|
+
},
|
|
634
|
+
get children() {
|
|
635
|
+
return _$createComponent(SidebarTextRow, {
|
|
636
|
+
text: "\u2192 fallback advised"
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
}), null);
|
|
640
|
+
return _el$27;
|
|
677
641
|
})();
|
|
678
642
|
}
|
|
679
643
|
// The TUI may unmount and remount sidebar_content when the user switches
|
|
@@ -747,12 +711,6 @@ export function ClaudeSidebar(props) {
|
|
|
747
711
|
});
|
|
748
712
|
const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled || f.custodyState && f.custodyState !== 'off');
|
|
749
713
|
const hasData = () => state().main?.quota != null || state().main?.stateLine != null || enabledFallbacks().length > 0;
|
|
750
|
-
// One label column for every expanded account, so all their bars line up.
|
|
751
|
-
const quotaLabelWidth = () => quotaLabelColumnWidth([state().main?.quota, ...(prefs().sections.fallbackAccounts ? enabledFallbacks().map(fallback => fallback.quota) : [])], now());
|
|
752
|
-
const headerLabel = () => {
|
|
753
|
-
const name = prefs().header.label;
|
|
754
|
-
return !hasData() ? name : collapsed() ? `\u25b6 ${name}` : `\u25bc ${name}`;
|
|
755
|
-
};
|
|
756
714
|
const activeAccount = () => resolveActiveAccount(state());
|
|
757
715
|
const activeQuotaSummary = () => getCollapsedQuotaSummary(activeAccount().quota, now());
|
|
758
716
|
const activePacingDeficit = () => {
|
|
@@ -790,420 +748,354 @@ export function ClaudeSidebar(props) {
|
|
|
790
748
|
if (!r) return '\u2014';
|
|
791
749
|
return `${r.transport} \u00b7 ${r.enabled ? 'on' : 'off'}`;
|
|
792
750
|
};
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
751
|
+
const accountDetail = id => id === 'main' ? state().main : state().fallbacks?.find(account => account.id === id);
|
|
752
|
+
const accountViews = createMemo(() => {
|
|
753
|
+
if (!hasData()) return [];
|
|
754
|
+
return getCollapsedAccounts(state(), prefs().sections.fallbackAccounts).map(account => {
|
|
755
|
+
const detail = accountDetail(account.id);
|
|
756
|
+
const quota = quotaDisplayProjection(account.quota, now());
|
|
757
|
+
const needsReauth = detail && 'needsReauth' in detail && detail.needsReauth;
|
|
758
|
+
const vaultReauth = detail && 'vaultReauth' in detail && detail.vaultReauth;
|
|
759
|
+
const active = state().activeId === account.id;
|
|
760
|
+
const status = account.quotaDated && account.quota ? 'dated' : needsReauth ? 're-login' : vaultReauth ? 'needs sign-in in the vault' : active ? 'active' : 'idle';
|
|
761
|
+
const groups = [{
|
|
762
|
+
rows: quotaWindowParts(quota, {
|
|
763
|
+
now: now()
|
|
764
|
+
}).windows.filter(part => part.kind === 'window').map(part => {
|
|
765
|
+
const scoped = account.quota?.scoped?.find(window => window.title === part.name);
|
|
766
|
+
const window = part.name === '5h' ? account.quota?.five_hour : part.name === '7d' ? account.quota?.seven_day : scoped;
|
|
767
|
+
const pacing = prefs().sections.pacing && !account.quotaDated && window ? computeQuotaPacing(window, part.name === '5h' ? FIVE_HOUR_MS : SEVEN_DAY_MS, now()) : null;
|
|
768
|
+
const text = fitPaceLine(pacing, undefined, pacing?.runsOutAt ? formatResetIn(pacing.runsOutAt, now()) : undefined, part.resetIn, part.remainingPercent);
|
|
769
|
+
const pace = pacing ? {
|
|
770
|
+
text: text ?? '',
|
|
771
|
+
tone: pacing.state === 'deficit' ? 'warning' : 'textMuted',
|
|
772
|
+
overlay: {
|
|
773
|
+
kind: pacing.deltaPercent > 0 ? 'deficit' : 'reserve',
|
|
774
|
+
percent: pacing.pacePercent
|
|
775
|
+
}
|
|
776
|
+
} : undefined;
|
|
777
|
+
const binding = account.quota?.bindingWindow === (part.name === '5h' ? 'five_hour' : part.name === '7d' ? 'seven_day' : scoped?.id);
|
|
778
|
+
return {
|
|
779
|
+
part: {
|
|
780
|
+
...part,
|
|
781
|
+
name: part.short,
|
|
782
|
+
figure: `${part.figure}${binding ? ' •' : ''}`
|
|
783
|
+
},
|
|
784
|
+
pace
|
|
785
|
+
};
|
|
786
|
+
})
|
|
787
|
+
}];
|
|
788
|
+
return {
|
|
789
|
+
id: account.id,
|
|
790
|
+
label: account.name,
|
|
791
|
+
titleSuffix: detail?.tierLabel,
|
|
792
|
+
quota,
|
|
793
|
+
groups,
|
|
794
|
+
status: {
|
|
795
|
+
text: status,
|
|
796
|
+
tone: needsReauth || vaultReauth || detail?.stateLine ? 'warning' : active ? 'success' : 'textMuted'
|
|
797
|
+
},
|
|
798
|
+
blocked: Boolean(account.blocked),
|
|
799
|
+
indicatorTone: account.blocked ? 'warning' : account.active ? 'success' : 'textMuted',
|
|
800
|
+
collapsed: {
|
|
801
|
+
muted: Boolean(!account.active || account.quotaDated || getCollapsedQuotaSummary(account.quota, now()).stale),
|
|
802
|
+
quotaTone: sharedTone(activeQuotaTone())
|
|
803
|
+
},
|
|
804
|
+
emptyQuotaText: {
|
|
805
|
+
expanded: 'checking…',
|
|
806
|
+
collapsed: '—'
|
|
807
|
+
}
|
|
808
|
+
};
|
|
809
809
|
});
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
810
|
+
});
|
|
811
|
+
// Polls rebuild snapshots, but account ids keep the shared frame's rows mounted.
|
|
812
|
+
const [accounts, setAccounts] = createStore([]);
|
|
813
|
+
createEffect(() => setAccounts(reconcile(accountViews(), {
|
|
814
|
+
key: 'id'
|
|
815
|
+
})));
|
|
816
|
+
return _$createComponent(SidebarFrame, {
|
|
817
|
+
get header() {
|
|
818
|
+
return {
|
|
819
|
+
badge: prefs().header.label,
|
|
820
|
+
version: prefs().header.showVersion && PLUGIN_VERSION !== '' ? `v${PLUGIN_VERSION}` : undefined
|
|
821
|
+
};
|
|
822
|
+
},
|
|
823
|
+
accounts: accounts,
|
|
824
|
+
get theme() {
|
|
825
|
+
return theme();
|
|
826
|
+
},
|
|
827
|
+
get appearance() {
|
|
828
|
+
return prefs().appearance;
|
|
829
|
+
},
|
|
830
|
+
get showQuota() {
|
|
831
|
+
return prefs().sections.quota;
|
|
832
|
+
},
|
|
833
|
+
get now() {
|
|
834
|
+
return now();
|
|
835
|
+
},
|
|
836
|
+
get collapsed() {
|
|
837
|
+
return collapsed();
|
|
838
|
+
},
|
|
839
|
+
get onToggle() {
|
|
840
|
+
return props.controller.toggleCollapsed;
|
|
841
|
+
},
|
|
842
|
+
beforeQuota: account => _$createComponent(Show, {
|
|
816
843
|
get when() {
|
|
817
|
-
return
|
|
844
|
+
return accountDetail(account.id)?.stateLine;
|
|
845
|
+
},
|
|
846
|
+
children: text => _$createComponent(SidebarTextRow, {
|
|
847
|
+
get text() {
|
|
848
|
+
return text();
|
|
849
|
+
}
|
|
850
|
+
})
|
|
851
|
+
}),
|
|
852
|
+
afterQuota: account => _$createComponent(AccountExtras, {
|
|
853
|
+
get quota() {
|
|
854
|
+
return accountDetail(account.id)?.quota ?? null;
|
|
855
|
+
},
|
|
856
|
+
get now() {
|
|
857
|
+
return now();
|
|
858
|
+
},
|
|
859
|
+
get theme() {
|
|
860
|
+
return theme();
|
|
861
|
+
}
|
|
862
|
+
}),
|
|
863
|
+
collapsedSections: () => [_$createComponent(Show, {
|
|
864
|
+
get when() {
|
|
865
|
+
return state().fastMode;
|
|
818
866
|
},
|
|
819
867
|
get children() {
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
868
|
+
return _$createComponent(CollapsedRow, {
|
|
869
|
+
get theme() {
|
|
870
|
+
return theme();
|
|
871
|
+
},
|
|
872
|
+
label: "Mode",
|
|
873
|
+
get children() {
|
|
874
|
+
var _el$30 = _$createElement("text"),
|
|
875
|
+
_el$31 = _$createElement("b");
|
|
876
|
+
_$insertNode(_el$30, _el$31);
|
|
877
|
+
_$insertNode(_el$31, _$createTextNode(`fast`));
|
|
878
|
+
_$effect(_$p => _$setProp(_el$30, "fg", toneColor(theme(), 'accent'), _$p));
|
|
879
|
+
return _el$30;
|
|
880
|
+
}
|
|
881
|
+
});
|
|
824
882
|
}
|
|
825
|
-
}),
|
|
826
|
-
|
|
883
|
+
}), _$createComponent(Show, {
|
|
884
|
+
get when() {
|
|
885
|
+
return fableRecoverySummary();
|
|
886
|
+
},
|
|
887
|
+
children: summary => _$createComponent(CollapsedRow, {
|
|
888
|
+
get theme() {
|
|
889
|
+
return theme();
|
|
890
|
+
},
|
|
891
|
+
label: "Recovery",
|
|
892
|
+
get children() {
|
|
893
|
+
var _el$33 = _$createElement("text"),
|
|
894
|
+
_el$34 = _$createElement("b");
|
|
895
|
+
_$insertNode(_el$33, _el$34);
|
|
896
|
+
_$insert(_el$34, summary);
|
|
897
|
+
_$effect(_$p => _$setProp(_el$33, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
|
|
898
|
+
return _el$33;
|
|
899
|
+
}
|
|
900
|
+
})
|
|
901
|
+
})],
|
|
902
|
+
sections: () => [_$createComponent(Show, {
|
|
827
903
|
get when() {
|
|
828
|
-
return
|
|
904
|
+
return !hasData();
|
|
829
905
|
},
|
|
830
906
|
get children() {
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
907
|
+
var _el$35 = _$createElement("box"),
|
|
908
|
+
_el$36 = _$createElement("text");
|
|
909
|
+
_$insertNode(_el$35, _el$36);
|
|
910
|
+
_$setProp(_el$35, "marginTop", 1);
|
|
911
|
+
_$setProp(_el$35, "width", '100%');
|
|
912
|
+
_$insertNode(_el$36, _$createTextNode(`Waiting for quota…`));
|
|
913
|
+
_$effect(_$p => _$setProp(_el$36, "fg", theme().textMuted, _$p));
|
|
914
|
+
return _el$35;
|
|
915
|
+
}
|
|
916
|
+
}), _$createComponent(Show, {
|
|
917
|
+
get when() {
|
|
918
|
+
return prefs().sections.routing;
|
|
919
|
+
},
|
|
920
|
+
get children() {
|
|
921
|
+
return [_$createComponent(SectionHeader, {
|
|
922
|
+
get theme() {
|
|
923
|
+
return theme();
|
|
834
924
|
},
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
get account() {
|
|
840
|
-
return account();
|
|
841
|
-
},
|
|
842
|
-
get tone() {
|
|
843
|
-
return activeQuotaTone();
|
|
844
|
-
},
|
|
845
|
-
get now() {
|
|
846
|
-
return now();
|
|
847
|
-
}
|
|
848
|
-
})
|
|
849
|
-
}), _$createComponent(Show, {
|
|
850
|
-
get when() {
|
|
851
|
-
return state().fastMode;
|
|
925
|
+
title: "Routing"
|
|
926
|
+
}), _$createComponent(StatRow, {
|
|
927
|
+
get theme() {
|
|
928
|
+
return theme();
|
|
852
929
|
},
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
930
|
+
label: "Route",
|
|
931
|
+
get value() {
|
|
932
|
+
return state().route;
|
|
933
|
+
},
|
|
934
|
+
tone: "accent"
|
|
935
|
+
}), _$createComponent(StatRow, {
|
|
936
|
+
get theme() {
|
|
937
|
+
return theme();
|
|
938
|
+
},
|
|
939
|
+
label: "Mode",
|
|
940
|
+
get value() {
|
|
941
|
+
return state().fastMode ? 'fast' : 'std';
|
|
942
|
+
},
|
|
943
|
+
get tone() {
|
|
944
|
+
return state().fastMode ? 'accent' : 'muted';
|
|
868
945
|
}
|
|
869
|
-
}), _$createComponent(
|
|
870
|
-
get
|
|
871
|
-
return
|
|
946
|
+
}), _$createComponent(StatRow, {
|
|
947
|
+
get theme() {
|
|
948
|
+
return theme();
|
|
872
949
|
},
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
_el$43 = _$createElement("b");
|
|
881
|
-
_$insertNode(_el$42, _el$43);
|
|
882
|
-
_$insert(_el$43, summary);
|
|
883
|
-
_$effect(_$p => _$setProp(_el$42, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
|
|
884
|
-
return _el$42;
|
|
885
|
-
}
|
|
886
|
-
})
|
|
950
|
+
label: "Relay",
|
|
951
|
+
get value() {
|
|
952
|
+
return relayValue();
|
|
953
|
+
},
|
|
954
|
+
get tone() {
|
|
955
|
+
return state().relay?.enabled ? 'ok' : 'muted';
|
|
956
|
+
}
|
|
887
957
|
})];
|
|
888
958
|
}
|
|
889
|
-
}),
|
|
890
|
-
_$insert(_el$33, _$createComponent(Show, {
|
|
959
|
+
}), _$createComponent(Show, {
|
|
891
960
|
get when() {
|
|
892
|
-
return
|
|
961
|
+
return fableRecoverySummary();
|
|
962
|
+
},
|
|
963
|
+
children: summary => _$createComponent(StatRow, {
|
|
964
|
+
get theme() {
|
|
965
|
+
return theme();
|
|
966
|
+
},
|
|
967
|
+
label: "Recovery",
|
|
968
|
+
get value() {
|
|
969
|
+
return summary();
|
|
970
|
+
},
|
|
971
|
+
get tone() {
|
|
972
|
+
return fableRecoveryTone();
|
|
973
|
+
}
|
|
974
|
+
})
|
|
975
|
+
}), _$createComponent(Show, {
|
|
976
|
+
get when() {
|
|
977
|
+
return showCache();
|
|
893
978
|
},
|
|
894
979
|
get children() {
|
|
895
|
-
return [_$createComponent(
|
|
896
|
-
get
|
|
897
|
-
return
|
|
980
|
+
return [_$createComponent(SectionHeader, {
|
|
981
|
+
get theme() {
|
|
982
|
+
return theme();
|
|
898
983
|
},
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
_$insertNode(_el$44, _el$45);
|
|
904
|
-
_$setProp(_el$44, "marginTop", 1);
|
|
905
|
-
_$setProp(_el$44, "width", '100%');
|
|
906
|
-
_$insertNode(_el$45, _$createTextNode(`Waiting for quota…`));
|
|
907
|
-
_$effect(_$p => _$setProp(_el$45, "fg", theme().textMuted, _$p));
|
|
908
|
-
return _el$44;
|
|
909
|
-
})();
|
|
984
|
+
title: "Cache"
|
|
985
|
+
}), _$createComponent(StatRow, {
|
|
986
|
+
get theme() {
|
|
987
|
+
return theme();
|
|
910
988
|
},
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
return [_$createComponent(SectionHeader, {
|
|
918
|
-
get theme() {
|
|
919
|
-
return theme();
|
|
920
|
-
},
|
|
921
|
-
title: "Quota"
|
|
922
|
-
}), _$createComponent(AccountBlock, {
|
|
923
|
-
get theme() {
|
|
924
|
-
return theme();
|
|
925
|
-
},
|
|
926
|
-
get appearance() {
|
|
927
|
-
return prefs().appearance;
|
|
928
|
-
},
|
|
929
|
-
name: "main",
|
|
930
|
-
get quota() {
|
|
931
|
-
return state().main?.quota;
|
|
932
|
-
},
|
|
933
|
-
get active() {
|
|
934
|
-
return state().activeId === 'main';
|
|
935
|
-
},
|
|
936
|
-
get pacingEnabled() {
|
|
937
|
-
return prefs().sections.pacing;
|
|
938
|
-
},
|
|
939
|
-
get tierLabel() {
|
|
940
|
-
return state().main?.tierLabel;
|
|
941
|
-
},
|
|
942
|
-
get labelWidth() {
|
|
943
|
-
return quotaLabelWidth();
|
|
944
|
-
},
|
|
945
|
-
get stateLine() {
|
|
946
|
-
return state().main?.stateLine;
|
|
947
|
-
},
|
|
948
|
-
get quotaDated() {
|
|
949
|
-
return state().main?.quotaDated;
|
|
950
|
-
},
|
|
951
|
-
get now() {
|
|
952
|
-
return now();
|
|
953
|
-
}
|
|
954
|
-
}), _$createComponent(Show, {
|
|
955
|
-
get when() {
|
|
956
|
-
return prefs().sections.fallbackAccounts;
|
|
957
|
-
},
|
|
958
|
-
get children() {
|
|
959
|
-
return _$createComponent(For, {
|
|
960
|
-
get each() {
|
|
961
|
-
return enabledFallbacks();
|
|
962
|
-
},
|
|
963
|
-
children: fb => _$createComponent(AccountBlock, {
|
|
964
|
-
get theme() {
|
|
965
|
-
return theme();
|
|
966
|
-
},
|
|
967
|
-
get appearance() {
|
|
968
|
-
return prefs().appearance;
|
|
969
|
-
},
|
|
970
|
-
get name() {
|
|
971
|
-
return fb.label ?? fb.id;
|
|
972
|
-
},
|
|
973
|
-
get quota() {
|
|
974
|
-
return fb.quota;
|
|
975
|
-
},
|
|
976
|
-
get active() {
|
|
977
|
-
return state().activeId === fb.id;
|
|
978
|
-
},
|
|
979
|
-
get pacingEnabled() {
|
|
980
|
-
return prefs().sections.pacing;
|
|
981
|
-
},
|
|
982
|
-
get tierLabel() {
|
|
983
|
-
return fb.tierLabel;
|
|
984
|
-
},
|
|
985
|
-
get labelWidth() {
|
|
986
|
-
return quotaLabelWidth();
|
|
987
|
-
},
|
|
988
|
-
get needsReauth() {
|
|
989
|
-
return fb.needsReauth;
|
|
990
|
-
},
|
|
991
|
-
get vaultReauth() {
|
|
992
|
-
return fb.vaultReauth;
|
|
993
|
-
},
|
|
994
|
-
get stateLine() {
|
|
995
|
-
return fb.stateLine;
|
|
996
|
-
},
|
|
997
|
-
get quotaDated() {
|
|
998
|
-
return fb.quotaDated;
|
|
999
|
-
},
|
|
1000
|
-
marginTop: 1,
|
|
1001
|
-
get now() {
|
|
1002
|
-
return now();
|
|
1003
|
-
}
|
|
1004
|
-
})
|
|
1005
|
-
});
|
|
1006
|
-
}
|
|
1007
|
-
})];
|
|
1008
|
-
}
|
|
1009
|
-
});
|
|
989
|
+
label: "1h cache",
|
|
990
|
+
get value() {
|
|
991
|
+
return `${cacheKeep()?.window} \u00b7 ${cacheKeep()?.enabled ? 'on' : 'off'}`;
|
|
992
|
+
},
|
|
993
|
+
get tone() {
|
|
994
|
+
return cacheKeep()?.enabled ? 'ok' : 'muted';
|
|
1010
995
|
}
|
|
1011
996
|
}), _$createComponent(Show, {
|
|
1012
997
|
get when() {
|
|
1013
|
-
return
|
|
998
|
+
return (cacheKeep()?.trackedSessions ?? 0) > 0;
|
|
1014
999
|
},
|
|
1015
1000
|
get children() {
|
|
1016
|
-
return
|
|
1001
|
+
return _$createComponent(StatRow, {
|
|
1017
1002
|
get theme() {
|
|
1018
1003
|
return theme();
|
|
1019
1004
|
},
|
|
1020
|
-
|
|
1021
|
-
}), _$createComponent(StatRow, {
|
|
1022
|
-
get theme() {
|
|
1023
|
-
return theme();
|
|
1024
|
-
},
|
|
1025
|
-
label: "Route",
|
|
1026
|
-
get value() {
|
|
1027
|
-
return state().route;
|
|
1028
|
-
},
|
|
1029
|
-
tone: "accent"
|
|
1030
|
-
}), _$createComponent(StatRow, {
|
|
1031
|
-
get theme() {
|
|
1032
|
-
return theme();
|
|
1033
|
-
},
|
|
1034
|
-
label: "Mode",
|
|
1035
|
-
get value() {
|
|
1036
|
-
return state().fastMode ? 'fast' : 'std';
|
|
1037
|
-
},
|
|
1038
|
-
get tone() {
|
|
1039
|
-
return state().fastMode ? 'accent' : 'muted';
|
|
1040
|
-
}
|
|
1041
|
-
}), _$createComponent(StatRow, {
|
|
1042
|
-
get theme() {
|
|
1043
|
-
return theme();
|
|
1044
|
-
},
|
|
1045
|
-
label: "Relay",
|
|
1005
|
+
label: "Tracked",
|
|
1046
1006
|
get value() {
|
|
1047
|
-
return
|
|
1007
|
+
return String(cacheKeep()?.trackedSessions);
|
|
1048
1008
|
},
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
}
|
|
1052
|
-
})];
|
|
1009
|
+
tone: "text"
|
|
1010
|
+
});
|
|
1053
1011
|
}
|
|
1054
|
-
})
|
|
1055
|
-
|
|
1056
|
-
|
|
1012
|
+
})];
|
|
1013
|
+
}
|
|
1014
|
+
}), _$createComponent(Show, {
|
|
1015
|
+
get when() {
|
|
1016
|
+
return showPrime();
|
|
1017
|
+
},
|
|
1018
|
+
get children() {
|
|
1019
|
+
return [_$createComponent(StatRow, {
|
|
1020
|
+
get theme() {
|
|
1021
|
+
return theme();
|
|
1057
1022
|
},
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
},
|
|
1062
|
-
label: "Recovery",
|
|
1063
|
-
get value() {
|
|
1064
|
-
return summary();
|
|
1065
|
-
},
|
|
1066
|
-
get tone() {
|
|
1067
|
-
return fableRecoveryTone();
|
|
1068
|
-
}
|
|
1069
|
-
})
|
|
1070
|
-
}), _$createComponent(Show, {
|
|
1071
|
-
get when() {
|
|
1072
|
-
return showCache();
|
|
1023
|
+
label: "Prime",
|
|
1024
|
+
get value() {
|
|
1025
|
+
return primeHasError() ? 'err' : 'on';
|
|
1073
1026
|
},
|
|
1074
|
-
get
|
|
1075
|
-
return
|
|
1027
|
+
get tone() {
|
|
1028
|
+
return primeHasError() ? 'warn' : 'ok';
|
|
1029
|
+
}
|
|
1030
|
+
}), _$createComponent(For, {
|
|
1031
|
+
get each() {
|
|
1032
|
+
return prime()?.accounts ?? [];
|
|
1033
|
+
},
|
|
1034
|
+
children: account => {
|
|
1035
|
+
const value = () => formatPrimeAccountValue(account, now());
|
|
1036
|
+
return _$createComponent(StatRow, {
|
|
1076
1037
|
get theme() {
|
|
1077
1038
|
return theme();
|
|
1078
1039
|
},
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
get theme() {
|
|
1082
|
-
return theme();
|
|
1040
|
+
get label() {
|
|
1041
|
+
return account.label;
|
|
1083
1042
|
},
|
|
1084
|
-
label: "1h cache",
|
|
1085
1043
|
get value() {
|
|
1086
|
-
return
|
|
1044
|
+
return value().text;
|
|
1087
1045
|
},
|
|
1088
1046
|
get tone() {
|
|
1089
|
-
return
|
|
1047
|
+
return value().hasError ? 'warn' : 'text';
|
|
1090
1048
|
}
|
|
1091
|
-
})
|
|
1092
|
-
get when() {
|
|
1093
|
-
return (cacheKeep()?.trackedSessions ?? 0) > 0;
|
|
1094
|
-
},
|
|
1095
|
-
get children() {
|
|
1096
|
-
return _$createComponent(StatRow, {
|
|
1097
|
-
get theme() {
|
|
1098
|
-
return theme();
|
|
1099
|
-
},
|
|
1100
|
-
label: "Tracked",
|
|
1101
|
-
get value() {
|
|
1102
|
-
return String(cacheKeep()?.trackedSessions);
|
|
1103
|
-
},
|
|
1104
|
-
tone: "text"
|
|
1105
|
-
});
|
|
1106
|
-
}
|
|
1107
|
-
})];
|
|
1049
|
+
});
|
|
1108
1050
|
}
|
|
1051
|
+
})];
|
|
1052
|
+
}
|
|
1053
|
+
}), _$createComponent(Show, {
|
|
1054
|
+
get when() {
|
|
1055
|
+
return _$memo(() => !!degraded())() && prefs().sections.health;
|
|
1056
|
+
},
|
|
1057
|
+
get children() {
|
|
1058
|
+
return [_$createComponent(SectionHeader, {
|
|
1059
|
+
get theme() {
|
|
1060
|
+
return theme();
|
|
1061
|
+
},
|
|
1062
|
+
title: "Health"
|
|
1109
1063
|
}), _$createComponent(Show, {
|
|
1110
1064
|
get when() {
|
|
1111
|
-
return
|
|
1065
|
+
return quotaBackedOff();
|
|
1112
1066
|
},
|
|
1113
1067
|
get children() {
|
|
1114
|
-
return
|
|
1068
|
+
return _$createComponent(StatRow, {
|
|
1115
1069
|
get theme() {
|
|
1116
1070
|
return theme();
|
|
1117
1071
|
},
|
|
1118
|
-
label: "
|
|
1072
|
+
label: "Quota API",
|
|
1119
1073
|
get value() {
|
|
1120
|
-
return
|
|
1121
|
-
},
|
|
1122
|
-
get tone() {
|
|
1123
|
-
return primeHasError() ? 'warn' : 'ok';
|
|
1124
|
-
}
|
|
1125
|
-
}), _$createComponent(For, {
|
|
1126
|
-
get each() {
|
|
1127
|
-
return prime()?.accounts ?? [];
|
|
1074
|
+
return `backoff ${formatUntil(state().main?.quotaBackoffUntil, now())}`;
|
|
1128
1075
|
},
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
return _$createComponent(StatRow, {
|
|
1132
|
-
get theme() {
|
|
1133
|
-
return theme();
|
|
1134
|
-
},
|
|
1135
|
-
get label() {
|
|
1136
|
-
return account.label;
|
|
1137
|
-
},
|
|
1138
|
-
get value() {
|
|
1139
|
-
return value().text;
|
|
1140
|
-
},
|
|
1141
|
-
get tone() {
|
|
1142
|
-
return value().hasError ? 'warn' : 'text';
|
|
1143
|
-
}
|
|
1144
|
-
});
|
|
1145
|
-
}
|
|
1146
|
-
})];
|
|
1076
|
+
tone: "warn"
|
|
1077
|
+
});
|
|
1147
1078
|
}
|
|
1148
1079
|
}), _$createComponent(Show, {
|
|
1149
1080
|
get when() {
|
|
1150
|
-
return
|
|
1081
|
+
return refreshBackedOff();
|
|
1151
1082
|
},
|
|
1152
1083
|
get children() {
|
|
1153
|
-
return
|
|
1084
|
+
return _$createComponent(StatRow, {
|
|
1154
1085
|
get theme() {
|
|
1155
1086
|
return theme();
|
|
1156
1087
|
},
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
return quotaBackedOff();
|
|
1161
|
-
},
|
|
1162
|
-
get children() {
|
|
1163
|
-
return _$createComponent(StatRow, {
|
|
1164
|
-
get theme() {
|
|
1165
|
-
return theme();
|
|
1166
|
-
},
|
|
1167
|
-
label: "Quota API",
|
|
1168
|
-
get value() {
|
|
1169
|
-
return `backoff ${formatUntil(state().main?.quotaBackoffUntil, now())}`;
|
|
1170
|
-
},
|
|
1171
|
-
tone: "warn"
|
|
1172
|
-
});
|
|
1173
|
-
}
|
|
1174
|
-
}), _$createComponent(Show, {
|
|
1175
|
-
get when() {
|
|
1176
|
-
return refreshBackedOff();
|
|
1088
|
+
label: "Token refresh",
|
|
1089
|
+
get value() {
|
|
1090
|
+
return `backoff ${formatUntil(state().main?.refreshBackoffUntil, now())}`;
|
|
1177
1091
|
},
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
get theme() {
|
|
1181
|
-
return theme();
|
|
1182
|
-
},
|
|
1183
|
-
label: "Token refresh",
|
|
1184
|
-
get value() {
|
|
1185
|
-
return `backoff ${formatUntil(state().main?.refreshBackoffUntil, now())}`;
|
|
1186
|
-
},
|
|
1187
|
-
tone: "warn"
|
|
1188
|
-
});
|
|
1189
|
-
}
|
|
1190
|
-
})];
|
|
1092
|
+
tone: "warn"
|
|
1093
|
+
});
|
|
1191
1094
|
}
|
|
1192
1095
|
})];
|
|
1193
1096
|
}
|
|
1194
|
-
})
|
|
1195
|
-
|
|
1196
|
-
var _v$16 = theme().accent,
|
|
1197
|
-
_v$17 = theme().background;
|
|
1198
|
-
_v$16 !== _p$.e && (_p$.e = _$setProp(_el$35, "backgroundColor", _v$16, _p$.e));
|
|
1199
|
-
_v$17 !== _p$.t && (_p$.t = _$setProp(_el$36, "fg", _v$17, _p$.t));
|
|
1200
|
-
return _p$;
|
|
1201
|
-
}, {
|
|
1202
|
-
e: undefined,
|
|
1203
|
-
t: undefined
|
|
1204
|
-
});
|
|
1205
|
-
return _el$33;
|
|
1206
|
-
})();
|
|
1097
|
+
})]
|
|
1098
|
+
});
|
|
1207
1099
|
}
|
|
1208
1100
|
|
|
1209
1101
|
// --- OpenCode 2 -------------------------------------------------------------
|