@cortexkit/opencode-anthropic-auth 2.4.6 → 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/{index-zxyjjr82.js → index-61yvrgwy.js} +25 -25
- package/dist/index.js +1 -1
- package/dist/tui/claude-sidebar.d.ts +1 -1
- package/dist/v2/server.js +7 -7
- package/package.json +2 -2
- package/src/tui/claude-sidebar.tsx +349 -298
- 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 +499 -593
|
@@ -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,110 +383,124 @@ 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() {
|
|
514
|
-
return [_$createComponent(
|
|
515
|
-
get
|
|
516
|
-
return props.
|
|
517
|
-
},
|
|
518
|
-
get appearance() {
|
|
519
|
-
return props.appearance;
|
|
520
|
-
},
|
|
521
|
-
label: "5h",
|
|
522
|
-
get labelWidth() {
|
|
523
|
-
return labelWidth();
|
|
524
|
-
},
|
|
525
|
-
get width() {
|
|
526
|
-
return width();
|
|
527
|
-
},
|
|
528
|
-
get part() {
|
|
529
|
-
return partFor('5h');
|
|
530
|
-
},
|
|
531
|
-
get usedPercent() {
|
|
532
|
-
return props.quota?.five_hour?.usedPercent;
|
|
533
|
-
},
|
|
534
|
-
get pacing() {
|
|
535
|
-
return pacingFor(props.quota?.five_hour, FIVE_HOUR_MS);
|
|
536
|
-
},
|
|
537
|
-
get binding() {
|
|
538
|
-
return props.quota?.bindingWindow === 'five_hour';
|
|
433
|
+
return [_$createComponent(Show, {
|
|
434
|
+
get when() {
|
|
435
|
+
return props.quota?.five_hour;
|
|
539
436
|
},
|
|
540
|
-
get
|
|
541
|
-
return
|
|
437
|
+
get children() {
|
|
438
|
+
return _$createComponent(QuotaRow, {
|
|
439
|
+
get theme() {
|
|
440
|
+
return props.theme;
|
|
441
|
+
},
|
|
442
|
+
get appearance() {
|
|
443
|
+
return props.appearance;
|
|
444
|
+
},
|
|
445
|
+
label: "5h",
|
|
446
|
+
get labelWidth() {
|
|
447
|
+
return labelWidth();
|
|
448
|
+
},
|
|
449
|
+
get width() {
|
|
450
|
+
return width();
|
|
451
|
+
},
|
|
452
|
+
get part() {
|
|
453
|
+
return partFor('5h');
|
|
454
|
+
},
|
|
455
|
+
get usedPercent() {
|
|
456
|
+
return props.quota?.five_hour?.usedPercent;
|
|
457
|
+
},
|
|
458
|
+
get pacing() {
|
|
459
|
+
return pacingFor(props.quota?.five_hour, FIVE_HOUR_MS);
|
|
460
|
+
},
|
|
461
|
+
get binding() {
|
|
462
|
+
return props.quota?.bindingWindow === 'five_hour';
|
|
463
|
+
},
|
|
464
|
+
get now() {
|
|
465
|
+
return props.now;
|
|
466
|
+
}
|
|
467
|
+
});
|
|
542
468
|
}
|
|
543
|
-
}), _$createComponent(
|
|
544
|
-
get
|
|
545
|
-
return props.
|
|
546
|
-
},
|
|
547
|
-
get appearance() {
|
|
548
|
-
return props.appearance;
|
|
549
|
-
},
|
|
550
|
-
label: "7d",
|
|
551
|
-
get labelWidth() {
|
|
552
|
-
return labelWidth();
|
|
553
|
-
},
|
|
554
|
-
get width() {
|
|
555
|
-
return width();
|
|
556
|
-
},
|
|
557
|
-
get part() {
|
|
558
|
-
return partFor('7d');
|
|
559
|
-
},
|
|
560
|
-
get usedPercent() {
|
|
561
|
-
return props.quota?.seven_day?.usedPercent;
|
|
562
|
-
},
|
|
563
|
-
get pacing() {
|
|
564
|
-
return pacingFor(props.quota?.seven_day, SEVEN_DAY_MS);
|
|
565
|
-
},
|
|
566
|
-
get binding() {
|
|
567
|
-
return props.quota?.bindingWindow === 'seven_day';
|
|
469
|
+
}), _$createComponent(Show, {
|
|
470
|
+
get when() {
|
|
471
|
+
return props.quota?.seven_day;
|
|
568
472
|
},
|
|
569
|
-
get
|
|
570
|
-
return
|
|
473
|
+
get children() {
|
|
474
|
+
return _$createComponent(QuotaRow, {
|
|
475
|
+
get theme() {
|
|
476
|
+
return props.theme;
|
|
477
|
+
},
|
|
478
|
+
get appearance() {
|
|
479
|
+
return props.appearance;
|
|
480
|
+
},
|
|
481
|
+
label: "7d",
|
|
482
|
+
get labelWidth() {
|
|
483
|
+
return labelWidth();
|
|
484
|
+
},
|
|
485
|
+
get width() {
|
|
486
|
+
return width();
|
|
487
|
+
},
|
|
488
|
+
get part() {
|
|
489
|
+
return partFor('7d');
|
|
490
|
+
},
|
|
491
|
+
get usedPercent() {
|
|
492
|
+
return props.quota?.seven_day?.usedPercent;
|
|
493
|
+
},
|
|
494
|
+
get pacing() {
|
|
495
|
+
return pacingFor(props.quota?.seven_day, SEVEN_DAY_MS);
|
|
496
|
+
},
|
|
497
|
+
get binding() {
|
|
498
|
+
return props.quota?.bindingWindow === 'seven_day';
|
|
499
|
+
},
|
|
500
|
+
get now() {
|
|
501
|
+
return props.now;
|
|
502
|
+
}
|
|
503
|
+
});
|
|
571
504
|
}
|
|
572
505
|
}), _$createComponent(For, {
|
|
573
506
|
get each() {
|
|
@@ -612,54 +545,99 @@ export function AccountBlock(props) {
|
|
|
612
545
|
children: budget => // One line in the block's width: amounts drop their cents rather
|
|
613
546
|
// than wrap, and keep them until the first layout.
|
|
614
547
|
(() => {
|
|
615
|
-
var _el$
|
|
616
|
-
_el$
|
|
617
|
-
_$insertNode(_el$
|
|
618
|
-
_$setProp(_el$
|
|
619
|
-
_$setProp(_el$
|
|
620
|
-
_$setProp(_el$
|
|
621
|
-
_$setProp(_el$
|
|
622
|
-
_$insert(_el$
|
|
623
|
-
_$effect(_$p => _$setProp(_el$
|
|
624
|
-
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;
|
|
625
558
|
})()
|
|
626
559
|
}), _$createComponent(Show, {
|
|
627
560
|
get when() {
|
|
628
561
|
return parts().age;
|
|
629
562
|
},
|
|
630
563
|
get children() {
|
|
631
|
-
var _el$
|
|
632
|
-
_$insert(_el$
|
|
633
|
-
_$effect(_$p => _$setProp(_el$
|
|
634
|
-
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;
|
|
635
568
|
}
|
|
636
569
|
}), _$createComponent(Show, {
|
|
637
570
|
get when() {
|
|
638
571
|
return props.quota?.fallbackAdvised === true;
|
|
639
572
|
},
|
|
640
573
|
get children() {
|
|
641
|
-
var _el$
|
|
642
|
-
_$insertNode(_el$
|
|
643
|
-
_$effect(_$p => _$setProp(_el$
|
|
644
|
-
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;
|
|
645
578
|
}
|
|
646
579
|
})];
|
|
647
580
|
}
|
|
648
581
|
}), null);
|
|
649
582
|
_$effect(_p$ => {
|
|
650
|
-
var _v$
|
|
651
|
-
_v$
|
|
652
|
-
_v$
|
|
653
|
-
_v$
|
|
654
|
-
_v$
|
|
655
|
-
_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));
|
|
656
589
|
return _p$;
|
|
657
590
|
}, {
|
|
658
591
|
e: undefined,
|
|
659
592
|
t: undefined,
|
|
660
593
|
a: undefined
|
|
661
594
|
});
|
|
662
|
-
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;
|
|
663
641
|
})();
|
|
664
642
|
}
|
|
665
643
|
// The TUI may unmount and remount sidebar_content when the user switches
|
|
@@ -733,12 +711,6 @@ export function ClaudeSidebar(props) {
|
|
|
733
711
|
});
|
|
734
712
|
const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled || f.custodyState && f.custodyState !== 'off');
|
|
735
713
|
const hasData = () => state().main?.quota != null || state().main?.stateLine != null || enabledFallbacks().length > 0;
|
|
736
|
-
// One label column for every expanded account, so all their bars line up.
|
|
737
|
-
const quotaLabelWidth = () => quotaLabelColumnWidth([state().main?.quota, ...(prefs().sections.fallbackAccounts ? enabledFallbacks().map(fallback => fallback.quota) : [])], now());
|
|
738
|
-
const headerLabel = () => {
|
|
739
|
-
const name = prefs().header.label;
|
|
740
|
-
return !hasData() ? name : collapsed() ? `\u25b6 ${name}` : `\u25bc ${name}`;
|
|
741
|
-
};
|
|
742
714
|
const activeAccount = () => resolveActiveAccount(state());
|
|
743
715
|
const activeQuotaSummary = () => getCollapsedQuotaSummary(activeAccount().quota, now());
|
|
744
716
|
const activePacingDeficit = () => {
|
|
@@ -776,420 +748,354 @@ export function ClaudeSidebar(props) {
|
|
|
776
748
|
if (!r) return '\u2014';
|
|
777
749
|
return `${r.transport} \u00b7 ${r.enabled ? 'on' : 'off'}`;
|
|
778
750
|
};
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
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
|
+
};
|
|
795
809
|
});
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
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, {
|
|
802
843
|
get when() {
|
|
803
|
-
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;
|
|
804
866
|
},
|
|
805
867
|
get children() {
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
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
|
+
});
|
|
810
882
|
}
|
|
811
|
-
}),
|
|
812
|
-
|
|
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, {
|
|
813
903
|
get when() {
|
|
814
|
-
return
|
|
904
|
+
return !hasData();
|
|
815
905
|
},
|
|
816
906
|
get children() {
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
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();
|
|
820
924
|
},
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
get account() {
|
|
826
|
-
return account();
|
|
827
|
-
},
|
|
828
|
-
get tone() {
|
|
829
|
-
return activeQuotaTone();
|
|
830
|
-
},
|
|
831
|
-
get now() {
|
|
832
|
-
return now();
|
|
833
|
-
}
|
|
834
|
-
})
|
|
835
|
-
}), _$createComponent(Show, {
|
|
836
|
-
get when() {
|
|
837
|
-
return state().fastMode;
|
|
925
|
+
title: "Routing"
|
|
926
|
+
}), _$createComponent(StatRow, {
|
|
927
|
+
get theme() {
|
|
928
|
+
return theme();
|
|
838
929
|
},
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
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';
|
|
854
945
|
}
|
|
855
|
-
}), _$createComponent(
|
|
856
|
-
get
|
|
857
|
-
return
|
|
946
|
+
}), _$createComponent(StatRow, {
|
|
947
|
+
get theme() {
|
|
948
|
+
return theme();
|
|
858
949
|
},
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
_el$43 = _$createElement("b");
|
|
867
|
-
_$insertNode(_el$42, _el$43);
|
|
868
|
-
_$insert(_el$43, summary);
|
|
869
|
-
_$effect(_$p => _$setProp(_el$42, "fg", toneColor(theme(), fableRecoveryTone()), _$p));
|
|
870
|
-
return _el$42;
|
|
871
|
-
}
|
|
872
|
-
})
|
|
950
|
+
label: "Relay",
|
|
951
|
+
get value() {
|
|
952
|
+
return relayValue();
|
|
953
|
+
},
|
|
954
|
+
get tone() {
|
|
955
|
+
return state().relay?.enabled ? 'ok' : 'muted';
|
|
956
|
+
}
|
|
873
957
|
})];
|
|
874
958
|
}
|
|
875
|
-
}),
|
|
876
|
-
_$insert(_el$33, _$createComponent(Show, {
|
|
959
|
+
}), _$createComponent(Show, {
|
|
877
960
|
get when() {
|
|
878
|
-
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();
|
|
879
978
|
},
|
|
880
979
|
get children() {
|
|
881
|
-
return [_$createComponent(
|
|
882
|
-
get
|
|
883
|
-
return
|
|
980
|
+
return [_$createComponent(SectionHeader, {
|
|
981
|
+
get theme() {
|
|
982
|
+
return theme();
|
|
884
983
|
},
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
_$insertNode(_el$44, _el$45);
|
|
890
|
-
_$setProp(_el$44, "marginTop", 1);
|
|
891
|
-
_$setProp(_el$44, "width", '100%');
|
|
892
|
-
_$insertNode(_el$45, _$createTextNode(`Waiting for quota…`));
|
|
893
|
-
_$effect(_$p => _$setProp(_el$45, "fg", theme().textMuted, _$p));
|
|
894
|
-
return _el$44;
|
|
895
|
-
})();
|
|
984
|
+
title: "Cache"
|
|
985
|
+
}), _$createComponent(StatRow, {
|
|
986
|
+
get theme() {
|
|
987
|
+
return theme();
|
|
896
988
|
},
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
return [_$createComponent(SectionHeader, {
|
|
904
|
-
get theme() {
|
|
905
|
-
return theme();
|
|
906
|
-
},
|
|
907
|
-
title: "Quota"
|
|
908
|
-
}), _$createComponent(AccountBlock, {
|
|
909
|
-
get theme() {
|
|
910
|
-
return theme();
|
|
911
|
-
},
|
|
912
|
-
get appearance() {
|
|
913
|
-
return prefs().appearance;
|
|
914
|
-
},
|
|
915
|
-
name: "main",
|
|
916
|
-
get quota() {
|
|
917
|
-
return state().main?.quota;
|
|
918
|
-
},
|
|
919
|
-
get active() {
|
|
920
|
-
return state().activeId === 'main';
|
|
921
|
-
},
|
|
922
|
-
get pacingEnabled() {
|
|
923
|
-
return prefs().sections.pacing;
|
|
924
|
-
},
|
|
925
|
-
get tierLabel() {
|
|
926
|
-
return state().main?.tierLabel;
|
|
927
|
-
},
|
|
928
|
-
get labelWidth() {
|
|
929
|
-
return quotaLabelWidth();
|
|
930
|
-
},
|
|
931
|
-
get stateLine() {
|
|
932
|
-
return state().main?.stateLine;
|
|
933
|
-
},
|
|
934
|
-
get quotaDated() {
|
|
935
|
-
return state().main?.quotaDated;
|
|
936
|
-
},
|
|
937
|
-
get now() {
|
|
938
|
-
return now();
|
|
939
|
-
}
|
|
940
|
-
}), _$createComponent(Show, {
|
|
941
|
-
get when() {
|
|
942
|
-
return prefs().sections.fallbackAccounts;
|
|
943
|
-
},
|
|
944
|
-
get children() {
|
|
945
|
-
return _$createComponent(For, {
|
|
946
|
-
get each() {
|
|
947
|
-
return enabledFallbacks();
|
|
948
|
-
},
|
|
949
|
-
children: fb => _$createComponent(AccountBlock, {
|
|
950
|
-
get theme() {
|
|
951
|
-
return theme();
|
|
952
|
-
},
|
|
953
|
-
get appearance() {
|
|
954
|
-
return prefs().appearance;
|
|
955
|
-
},
|
|
956
|
-
get name() {
|
|
957
|
-
return fb.label ?? fb.id;
|
|
958
|
-
},
|
|
959
|
-
get quota() {
|
|
960
|
-
return fb.quota;
|
|
961
|
-
},
|
|
962
|
-
get active() {
|
|
963
|
-
return state().activeId === fb.id;
|
|
964
|
-
},
|
|
965
|
-
get pacingEnabled() {
|
|
966
|
-
return prefs().sections.pacing;
|
|
967
|
-
},
|
|
968
|
-
get tierLabel() {
|
|
969
|
-
return fb.tierLabel;
|
|
970
|
-
},
|
|
971
|
-
get labelWidth() {
|
|
972
|
-
return quotaLabelWidth();
|
|
973
|
-
},
|
|
974
|
-
get needsReauth() {
|
|
975
|
-
return fb.needsReauth;
|
|
976
|
-
},
|
|
977
|
-
get vaultReauth() {
|
|
978
|
-
return fb.vaultReauth;
|
|
979
|
-
},
|
|
980
|
-
get stateLine() {
|
|
981
|
-
return fb.stateLine;
|
|
982
|
-
},
|
|
983
|
-
get quotaDated() {
|
|
984
|
-
return fb.quotaDated;
|
|
985
|
-
},
|
|
986
|
-
marginTop: 1,
|
|
987
|
-
get now() {
|
|
988
|
-
return now();
|
|
989
|
-
}
|
|
990
|
-
})
|
|
991
|
-
});
|
|
992
|
-
}
|
|
993
|
-
})];
|
|
994
|
-
}
|
|
995
|
-
});
|
|
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';
|
|
996
995
|
}
|
|
997
996
|
}), _$createComponent(Show, {
|
|
998
997
|
get when() {
|
|
999
|
-
return
|
|
998
|
+
return (cacheKeep()?.trackedSessions ?? 0) > 0;
|
|
1000
999
|
},
|
|
1001
1000
|
get children() {
|
|
1002
|
-
return
|
|
1003
|
-
get theme() {
|
|
1004
|
-
return theme();
|
|
1005
|
-
},
|
|
1006
|
-
title: "Routing"
|
|
1007
|
-
}), _$createComponent(StatRow, {
|
|
1008
|
-
get theme() {
|
|
1009
|
-
return theme();
|
|
1010
|
-
},
|
|
1011
|
-
label: "Route",
|
|
1012
|
-
get value() {
|
|
1013
|
-
return state().route;
|
|
1014
|
-
},
|
|
1015
|
-
tone: "accent"
|
|
1016
|
-
}), _$createComponent(StatRow, {
|
|
1001
|
+
return _$createComponent(StatRow, {
|
|
1017
1002
|
get theme() {
|
|
1018
1003
|
return theme();
|
|
1019
1004
|
},
|
|
1020
|
-
label: "
|
|
1005
|
+
label: "Tracked",
|
|
1021
1006
|
get value() {
|
|
1022
|
-
return
|
|
1007
|
+
return String(cacheKeep()?.trackedSessions);
|
|
1023
1008
|
},
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
}
|
|
1027
|
-
}), _$createComponent(StatRow, {
|
|
1028
|
-
get theme() {
|
|
1029
|
-
return theme();
|
|
1030
|
-
},
|
|
1031
|
-
label: "Relay",
|
|
1032
|
-
get value() {
|
|
1033
|
-
return relayValue();
|
|
1034
|
-
},
|
|
1035
|
-
get tone() {
|
|
1036
|
-
return state().relay?.enabled ? 'ok' : 'muted';
|
|
1037
|
-
}
|
|
1038
|
-
})];
|
|
1009
|
+
tone: "text"
|
|
1010
|
+
});
|
|
1039
1011
|
}
|
|
1040
|
-
})
|
|
1041
|
-
|
|
1042
|
-
|
|
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();
|
|
1043
1022
|
},
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
},
|
|
1048
|
-
label: "Recovery",
|
|
1049
|
-
get value() {
|
|
1050
|
-
return summary();
|
|
1051
|
-
},
|
|
1052
|
-
get tone() {
|
|
1053
|
-
return fableRecoveryTone();
|
|
1054
|
-
}
|
|
1055
|
-
})
|
|
1056
|
-
}), _$createComponent(Show, {
|
|
1057
|
-
get when() {
|
|
1058
|
-
return showCache();
|
|
1023
|
+
label: "Prime",
|
|
1024
|
+
get value() {
|
|
1025
|
+
return primeHasError() ? 'err' : 'on';
|
|
1059
1026
|
},
|
|
1060
|
-
get
|
|
1061
|
-
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, {
|
|
1062
1037
|
get theme() {
|
|
1063
1038
|
return theme();
|
|
1064
1039
|
},
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
get theme() {
|
|
1068
|
-
return theme();
|
|
1040
|
+
get label() {
|
|
1041
|
+
return account.label;
|
|
1069
1042
|
},
|
|
1070
|
-
label: "1h cache",
|
|
1071
1043
|
get value() {
|
|
1072
|
-
return
|
|
1044
|
+
return value().text;
|
|
1073
1045
|
},
|
|
1074
1046
|
get tone() {
|
|
1075
|
-
return
|
|
1047
|
+
return value().hasError ? 'warn' : 'text';
|
|
1076
1048
|
}
|
|
1077
|
-
})
|
|
1078
|
-
get when() {
|
|
1079
|
-
return (cacheKeep()?.trackedSessions ?? 0) > 0;
|
|
1080
|
-
},
|
|
1081
|
-
get children() {
|
|
1082
|
-
return _$createComponent(StatRow, {
|
|
1083
|
-
get theme() {
|
|
1084
|
-
return theme();
|
|
1085
|
-
},
|
|
1086
|
-
label: "Tracked",
|
|
1087
|
-
get value() {
|
|
1088
|
-
return String(cacheKeep()?.trackedSessions);
|
|
1089
|
-
},
|
|
1090
|
-
tone: "text"
|
|
1091
|
-
});
|
|
1092
|
-
}
|
|
1093
|
-
})];
|
|
1049
|
+
});
|
|
1094
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"
|
|
1095
1063
|
}), _$createComponent(Show, {
|
|
1096
1064
|
get when() {
|
|
1097
|
-
return
|
|
1065
|
+
return quotaBackedOff();
|
|
1098
1066
|
},
|
|
1099
1067
|
get children() {
|
|
1100
|
-
return
|
|
1068
|
+
return _$createComponent(StatRow, {
|
|
1101
1069
|
get theme() {
|
|
1102
1070
|
return theme();
|
|
1103
1071
|
},
|
|
1104
|
-
label: "
|
|
1072
|
+
label: "Quota API",
|
|
1105
1073
|
get value() {
|
|
1106
|
-
return
|
|
1074
|
+
return `backoff ${formatUntil(state().main?.quotaBackoffUntil, now())}`;
|
|
1107
1075
|
},
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
}
|
|
1111
|
-
}), _$createComponent(For, {
|
|
1112
|
-
get each() {
|
|
1113
|
-
return prime()?.accounts ?? [];
|
|
1114
|
-
},
|
|
1115
|
-
children: account => {
|
|
1116
|
-
const value = () => formatPrimeAccountValue(account, now());
|
|
1117
|
-
return _$createComponent(StatRow, {
|
|
1118
|
-
get theme() {
|
|
1119
|
-
return theme();
|
|
1120
|
-
},
|
|
1121
|
-
get label() {
|
|
1122
|
-
return account.label;
|
|
1123
|
-
},
|
|
1124
|
-
get value() {
|
|
1125
|
-
return value().text;
|
|
1126
|
-
},
|
|
1127
|
-
get tone() {
|
|
1128
|
-
return value().hasError ? 'warn' : 'text';
|
|
1129
|
-
}
|
|
1130
|
-
});
|
|
1131
|
-
}
|
|
1132
|
-
})];
|
|
1076
|
+
tone: "warn"
|
|
1077
|
+
});
|
|
1133
1078
|
}
|
|
1134
1079
|
}), _$createComponent(Show, {
|
|
1135
1080
|
get when() {
|
|
1136
|
-
return
|
|
1081
|
+
return refreshBackedOff();
|
|
1137
1082
|
},
|
|
1138
1083
|
get children() {
|
|
1139
|
-
return
|
|
1084
|
+
return _$createComponent(StatRow, {
|
|
1140
1085
|
get theme() {
|
|
1141
1086
|
return theme();
|
|
1142
1087
|
},
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
return quotaBackedOff();
|
|
1147
|
-
},
|
|
1148
|
-
get children() {
|
|
1149
|
-
return _$createComponent(StatRow, {
|
|
1150
|
-
get theme() {
|
|
1151
|
-
return theme();
|
|
1152
|
-
},
|
|
1153
|
-
label: "Quota API",
|
|
1154
|
-
get value() {
|
|
1155
|
-
return `backoff ${formatUntil(state().main?.quotaBackoffUntil, now())}`;
|
|
1156
|
-
},
|
|
1157
|
-
tone: "warn"
|
|
1158
|
-
});
|
|
1159
|
-
}
|
|
1160
|
-
}), _$createComponent(Show, {
|
|
1161
|
-
get when() {
|
|
1162
|
-
return refreshBackedOff();
|
|
1088
|
+
label: "Token refresh",
|
|
1089
|
+
get value() {
|
|
1090
|
+
return `backoff ${formatUntil(state().main?.refreshBackoffUntil, now())}`;
|
|
1163
1091
|
},
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
get theme() {
|
|
1167
|
-
return theme();
|
|
1168
|
-
},
|
|
1169
|
-
label: "Token refresh",
|
|
1170
|
-
get value() {
|
|
1171
|
-
return `backoff ${formatUntil(state().main?.refreshBackoffUntil, now())}`;
|
|
1172
|
-
},
|
|
1173
|
-
tone: "warn"
|
|
1174
|
-
});
|
|
1175
|
-
}
|
|
1176
|
-
})];
|
|
1092
|
+
tone: "warn"
|
|
1093
|
+
});
|
|
1177
1094
|
}
|
|
1178
1095
|
})];
|
|
1179
1096
|
}
|
|
1180
|
-
})
|
|
1181
|
-
|
|
1182
|
-
var _v$16 = theme().accent,
|
|
1183
|
-
_v$17 = theme().background;
|
|
1184
|
-
_v$16 !== _p$.e && (_p$.e = _$setProp(_el$35, "backgroundColor", _v$16, _p$.e));
|
|
1185
|
-
_v$17 !== _p$.t && (_p$.t = _$setProp(_el$36, "fg", _v$17, _p$.t));
|
|
1186
|
-
return _p$;
|
|
1187
|
-
}, {
|
|
1188
|
-
e: undefined,
|
|
1189
|
-
t: undefined
|
|
1190
|
-
});
|
|
1191
|
-
return _el$33;
|
|
1192
|
-
})();
|
|
1097
|
+
})]
|
|
1098
|
+
});
|
|
1193
1099
|
}
|
|
1194
1100
|
|
|
1195
1101
|
// --- OpenCode 2 -------------------------------------------------------------
|