@cortexkit/opencode-openai-auth 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +1 -0
  2. package/dist/cli.js +1 -1
  3. package/dist/codex-http.d.ts +3 -0
  4. package/dist/config.d.ts +3 -0
  5. package/dist/core/accounts.d.ts +9 -3
  6. package/dist/core/oauth.d.ts +1 -1
  7. package/dist/core/quota-manager.d.ts +2 -2
  8. package/dist/index-0gccjqxr.js +89 -0
  9. package/dist/{index-k5zwf3j1.js → index-1anzb8jh.js} +1 -1
  10. package/dist/index-1r02s323.js +6 -0
  11. package/dist/index-2ng03cby.js +2 -0
  12. package/dist/{index-e7m7qbne.js → index-6y6ss1kc.js} +1 -1
  13. package/dist/{index-1xmasv0x.js → index-b6kp9ydc.js} +1 -1
  14. package/dist/index-fbfpefx6.js +2 -0
  15. package/dist/index-y67qn95a.js +2 -0
  16. package/dist/index.d.ts +8 -1
  17. package/dist/index.js +65 -65
  18. package/dist/model-costs.d.ts +29 -0
  19. package/dist/prompt-context.d.ts +1 -1
  20. package/dist/quota-normalize-8yzxqy78.js +1 -0
  21. package/dist/quota-normalize.d.ts +13 -4
  22. package/dist/rpc/port-file.js +1 -1
  23. package/dist/rpc/rpc-client.js +1 -1
  24. package/dist/rpc/rpc-dir.js +1 -1
  25. package/dist/sidebar-state.d.ts +47 -2
  26. package/dist/sidebar-state.js +1 -1
  27. package/dist/token-util-h46jb3eg.js +1 -0
  28. package/dist/token-yzcb1p3e.js +1 -0
  29. package/dist/tui/command-dialogs.d.ts +8 -1
  30. package/dist/tui-preferences.js +1 -1
  31. package/dist/tui.d.ts +18 -1
  32. package/dist/version.d.ts +1 -1
  33. package/dist/ws-pool.d.ts +1 -0
  34. package/package.json +6 -5
  35. package/src/core/refresh-file-lock.ts +293 -0
  36. package/src/sidebar-state.ts +393 -13
  37. package/src/tui/command-dialogs.tsx +43 -25
  38. package/src/tui-compiled/sidebar-state.ts +393 -13
  39. package/src/tui-compiled/tui/command-dialogs.tsx +25 -20
  40. package/src/tui-compiled/tui.tsx +228 -171
  41. package/src/tui.tsx +142 -64
  42. package/dist/index-5s67238f.js +0 -2
  43. package/dist/index-d9hq0tmc.js +0 -2
  44. package/dist/index-mrg2fms9.js +0 -2
  45. package/dist/index-qdh7pt5a.js +0 -3
  46. package/dist/index-y8d01tgn.js +0 -92
  47. package/dist/quota-normalize-dfdpwwm3.js +0 -1
  48. package/dist/token-01dcf92a.js +0 -1
  49. package/dist/token-util-rkqd82q9.js +0 -1
@@ -15,7 +15,7 @@ import { createEffect, createSignal, For, onCleanup, Show } from "opentui:runtim
15
15
  import { createLogger } from "./logger.js";
16
16
  import { createRpcClient } from "./rpc/rpc-client.js";
17
17
  import { getRpcDir } from "./rpc/rpc-dir.js";
18
- import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, FIVE_HOUR_MS, getCollapsedQuotaSummary, getSidebarState, resolveActiveAccount, SEVEN_DAY_MS } from "./sidebar-state.js";
18
+ import { computeQuotaPacing, DEFAULT_SIDEBAR_STATE, getCollapsedQuotaSummary, getPresentQuotaWindows, getSidebarState, resolveActiveAccount, resolveSessionSidebarRouting } from "./sidebar-state.js";
19
19
  import { openCommandDialog } from "./tui/command-dialogs.js";
20
20
  import { computeEffectiveOrder, DEFAULT_SLOT_ORDER, PLUGIN_KEY, queueTuiPreferenceUpdate, readTuiPreferencesFile, resolveOpenaiAuthPrefs, watchTuiPreferences } from "./tui-preferences.js";
21
21
  const RPC_POLL_MS = 500;
@@ -200,6 +200,39 @@ function CollapsedRow(props) {
200
200
  return _el$8;
201
201
  })();
202
202
  }
203
+ // Maps present quota windows onto display rows and computes pacing against each
204
+ // dynamic duration or the historical 5h/7d duration for legacy snapshots.
205
+ export function buildQuotaRowsForDisplay(quota, now, pacingEnabled) {
206
+ return getPresentQuotaWindows(quota).map(row => ({
207
+ key: row.key,
208
+ label: row.label,
209
+ window: row.window,
210
+ pacing: pacingEnabled && row.windowMs !== null ? computeQuotaPacing(row.window, row.windowMs, now) : null
211
+ }));
212
+ }
213
+ export function isQuotaLoaded(quota) {
214
+ return quota !== null;
215
+ }
216
+ export function getQuotaMetadataRows(state) {
217
+ const rows = [];
218
+ if (state.planType) rows.push({
219
+ label: 'Plan',
220
+ value: state.planType
221
+ });
222
+ if (state.credits !== undefined) {
223
+ rows.push({
224
+ label: 'Credits',
225
+ value: String(state.credits)
226
+ });
227
+ }
228
+ return rows;
229
+ }
230
+ export function getAccountMetadataRows(resetCredits) {
231
+ return resetCredits === undefined ? [] : [{
232
+ label: 'resets',
233
+ value: String(resetCredits)
234
+ }];
235
+ }
203
236
 
204
237
  // Quota window row: muted label left, tone-colored bar + percentage right,
205
238
  // with an optional muted reset suffix. When pacing data is present, the bar
@@ -328,7 +361,7 @@ function QuotaRow(props) {
328
361
  function AccountBlock(props) {
329
362
  const statusWord = () => props.killed ? 'blocked' : props.active ? 'active' : 'idle';
330
363
  const statusTone = () => props.killed ? 'err' : props.active ? 'ok' : 'muted';
331
- const pacingFor = (window, windowMs) => props.pacingEnabled && window ? computeQuotaPacing(window, windowMs, Date.now()) : null;
364
+ const rows = () => buildQuotaRowsForDisplay(props.quota, Date.now(), props.pacingEnabled);
332
365
  return (() => {
333
366
  var _el$22 = _$createElement("box"),
334
367
  _el$23 = _$createElement("box"),
@@ -350,7 +383,7 @@ function AccountBlock(props) {
350
383
  _$insert(_el$27, statusWord);
351
384
  _$insert(_el$22, _$createComponent(Show, {
352
385
  get when() {
353
- return props.quota;
386
+ return isQuotaLoaded(props.quota);
354
387
  },
355
388
  get fallback() {
356
389
  return (() => {
@@ -361,37 +394,62 @@ function AccountBlock(props) {
361
394
  })();
362
395
  },
363
396
  get children() {
364
- return [_$createComponent(QuotaRow, {
365
- get theme() {
366
- return props.theme;
367
- },
368
- get appearance() {
369
- return props.appearance;
370
- },
371
- label: "5h",
372
- get window() {
373
- return props.quota?.primary;
374
- },
375
- get pacing() {
376
- return pacingFor(props.quota?.primary, FIVE_HOUR_MS);
377
- }
378
- }), _$createComponent(QuotaRow, {
379
- get theme() {
380
- return props.theme;
381
- },
382
- get appearance() {
383
- return props.appearance;
397
+ return _$createComponent(Show, {
398
+ get when() {
399
+ return rows().length > 0;
384
400
  },
385
- label: "7d",
386
- get window() {
387
- return props.quota?.secondary;
401
+ get fallback() {
402
+ return (() => {
403
+ var _el$30 = _$createElement("text");
404
+ _$insertNode(_el$30, _$createTextNode(`—`));
405
+ _$effect(_$p => _$setProp(_el$30, "fg", props.theme.textMuted, _$p));
406
+ return _el$30;
407
+ })();
388
408
  },
389
- get pacing() {
390
- return pacingFor(props.quota?.secondary, SEVEN_DAY_MS);
409
+ get children() {
410
+ return _$createComponent(For, {
411
+ get each() {
412
+ return rows();
413
+ },
414
+ children: row => _$createComponent(QuotaRow, {
415
+ get theme() {
416
+ return props.theme;
417
+ },
418
+ get appearance() {
419
+ return props.appearance;
420
+ },
421
+ get label() {
422
+ return row.label;
423
+ },
424
+ get window() {
425
+ return row.window;
426
+ },
427
+ get pacing() {
428
+ return row.pacing;
429
+ }
430
+ })
431
+ });
391
432
  }
392
- })];
433
+ });
393
434
  }
394
435
  }), null);
436
+ _$insert(_el$22, _$createComponent(For, {
437
+ get each() {
438
+ return getAccountMetadataRows(props.resetCredits);
439
+ },
440
+ children: row => _$createComponent(StatRow, {
441
+ get theme() {
442
+ return props.theme;
443
+ },
444
+ get label() {
445
+ return row.label;
446
+ },
447
+ get value() {
448
+ return row.value;
449
+ },
450
+ tone: "text"
451
+ })
452
+ }), null);
395
453
  _$effect(_p$ => {
396
454
  var _v$1 = props.marginTop ?? 0,
397
455
  _v$10 = props.theme.text,
@@ -431,27 +489,28 @@ function QuotaDialogContent(props) {
431
489
  setTimeout(refresh, 0);
432
490
  const theme = () => props.api.theme.current;
433
491
  const enabledFallbacks = () => (state().fallbacks ?? []).filter(f => f.enabled);
492
+ const activeId = () => resolveQuotaDialogActiveId(state(), props.sessionId);
434
493
  return (() => {
435
- var _el$30 = _$createElement("box"),
436
- _el$31 = _$createElement("box"),
437
- _el$32 = _$createElement("box"),
438
- _el$33 = _$createElement("text"),
439
- _el$34 = _$createElement("b");
440
- _$insertNode(_el$30, _el$31);
441
- _$setProp(_el$30, "flexDirection", 'column');
442
- _$setProp(_el$30, "padding", 2);
443
- _$setProp(_el$30, "width", '100%');
444
- _$setProp(_el$30, "alignItems", 'center');
445
- _$insertNode(_el$31, _el$32);
446
- _$setProp(_el$31, "flexDirection", 'column');
447
- _$setProp(_el$31, "width", 58);
494
+ var _el$32 = _$createElement("box"),
495
+ _el$33 = _$createElement("box"),
496
+ _el$34 = _$createElement("box"),
497
+ _el$35 = _$createElement("text"),
498
+ _el$36 = _$createElement("b");
448
499
  _$insertNode(_el$32, _el$33);
500
+ _$setProp(_el$32, "flexDirection", 'column');
501
+ _$setProp(_el$32, "padding", 2);
449
502
  _$setProp(_el$32, "width", '100%');
450
- _$setProp(_el$32, "justifyContent", 'center');
451
- _$setProp(_el$32, "marginBottom", 1);
503
+ _$setProp(_el$32, "alignItems", 'center');
452
504
  _$insertNode(_el$33, _el$34);
453
- _$insertNode(_el$34, _$createTextNode(`Codex Quota`));
454
- _$insert(_el$31, _$createComponent(AccountBlock, {
505
+ _$setProp(_el$33, "flexDirection", 'column');
506
+ _$setProp(_el$33, "width", 58);
507
+ _$insertNode(_el$34, _el$35);
508
+ _$setProp(_el$34, "width", '100%');
509
+ _$setProp(_el$34, "justifyContent", 'center');
510
+ _$setProp(_el$34, "marginBottom", 1);
511
+ _$insertNode(_el$35, _el$36);
512
+ _$insertNode(_el$36, _$createTextNode(`Codex Quota`));
513
+ _$insert(_el$33, _$createComponent(AccountBlock, {
455
514
  get theme() {
456
515
  return theme();
457
516
  },
@@ -466,13 +525,16 @@ function QuotaDialogContent(props) {
466
525
  return state().main?.killed ?? false;
467
526
  },
468
527
  get active() {
469
- return state().activeId === 'main';
528
+ return activeId() === 'main';
470
529
  },
471
530
  get pacingEnabled() {
472
531
  return prefs().sections.pacing;
532
+ },
533
+ get resetCredits() {
534
+ return state().main?.resetCredits;
473
535
  }
474
536
  }), null);
475
- _$insert(_el$31, _$createComponent(Show, {
537
+ _$insert(_el$33, _$createComponent(Show, {
476
538
  get when() {
477
539
  return prefs().sections.fallbackAccounts;
478
540
  },
@@ -498,18 +560,21 @@ function QuotaDialogContent(props) {
498
560
  return fb.killed;
499
561
  },
500
562
  get active() {
501
- return state().activeId === fb.id;
563
+ return activeId() === fb.id;
502
564
  },
503
565
  get pacingEnabled() {
504
566
  return prefs().sections.pacing;
505
567
  },
568
+ get resetCredits() {
569
+ return fb.resetCredits;
570
+ },
506
571
  marginTop: 1
507
572
  })
508
573
  });
509
574
  }
510
575
  }), null);
511
- _$effect(_$p => _$setProp(_el$33, "fg", theme().text, _$p));
512
- return _el$30;
576
+ _$effect(_$p => _$setProp(_el$35, "fg", theme().text, _$p));
577
+ return _el$32;
513
578
  })();
514
579
  }
515
580
 
@@ -518,6 +583,9 @@ function QuotaDialogContent(props) {
518
583
  export async function readStateFromFile() {
519
584
  return getSidebarState();
520
585
  }
586
+ export function resolveQuotaDialogActiveId(state, sessionId, now = Date.now()) {
587
+ return sessionId ? resolveSessionSidebarRouting(state, sessionId, now).activeId : state.activeId;
588
+ }
521
589
  // The TUI may unmount and remount sidebar_content when the user switches
522
590
  // views (e.g. main -> subagent -> main). A remount re-runs the component
523
591
  // body, so any signal created inside the component would reset to its
@@ -607,15 +675,17 @@ function QuotaSidebar(props) {
607
675
  const name = prefs().header.label;
608
676
  return !hasData() ? name : collapsed() ? `\u25b6 ${name}` : `\u25bc ${name}`;
609
677
  };
610
- const activeAccount = () => resolveActiveAccount(state());
678
+ const sessionRouting = () => resolveSessionSidebarRouting(state(), props.sessionId);
679
+ const sessionState = () => ({
680
+ ...state(),
681
+ activeId: sessionRouting().activeId,
682
+ route: sessionRouting().route
683
+ });
684
+ const activeAccount = () => resolveActiveAccount(sessionState());
611
685
  const activeQuotaSummary = () => getCollapsedQuotaSummary(activeAccount().quota);
612
686
  const activePacingDeficit = () => {
613
687
  if (!prefs().sections.pacing) return false;
614
- const quota = activeAccount().quota;
615
- if (!quota) return false;
616
- const now = Date.now();
617
- const windows = [[quota.primary, FIVE_HOUR_MS], [quota.secondary, SEVEN_DAY_MS]];
618
- return windows.some(([w, ms]) => w != null && computeQuotaPacing(w, ms, now)?.state === 'deficit');
688
+ return buildQuotaRowsForDisplay(activeAccount().quota, Date.now(), true).some(row => row.pacing?.state === 'deficit');
619
689
  };
620
690
  const activeQuotaTone = () => {
621
691
  const summary = activeQuotaSummary();
@@ -632,33 +702,33 @@ function QuotaSidebar(props) {
632
702
  const refreshBackedOff = () => state().main?.refreshBackedOff === true;
633
703
  const degraded = () => killedNames().length > 0 || quotaBackedOff() || refreshBackedOff();
634
704
  return (() => {
635
- var _el$36 = _$createElement("box"),
636
- _el$37 = _$createElement("box"),
637
- _el$38 = _$createElement("box"),
638
- _el$39 = _$createElement("text"),
639
- _el$40 = _$createElement("b");
640
- _$insertNode(_el$36, _el$37);
641
- _$setProp(_el$36, "width", '100%');
642
- _$setProp(_el$36, "flexDirection", 'column');
643
- _$setProp(_el$36, "border", SINGLE_BORDER);
644
- _$setProp(_el$36, "paddingTop", 1);
645
- _$setProp(_el$36, "paddingBottom", 1);
646
- _$setProp(_el$36, "paddingLeft", 1);
647
- _$setProp(_el$36, "paddingRight", 1);
648
- _$insertNode(_el$37, _el$38);
649
- _$setProp(_el$37, "width", '100%');
650
- _$setProp(_el$37, "flexDirection", 'row');
651
- _$setProp(_el$37, "justifyContent", 'space-between');
652
- _$setProp(_el$37, "alignItems", 'center');
653
- _$setProp(_el$37, "onMouseDown", () => {
654
- if (hasData()) props.controller.toggleCollapsed();
655
- });
705
+ var _el$38 = _$createElement("box"),
706
+ _el$39 = _$createElement("box"),
707
+ _el$40 = _$createElement("box"),
708
+ _el$41 = _$createElement("text"),
709
+ _el$42 = _$createElement("b");
656
710
  _$insertNode(_el$38, _el$39);
711
+ _$setProp(_el$38, "width", '100%');
712
+ _$setProp(_el$38, "flexDirection", 'column');
713
+ _$setProp(_el$38, "border", SINGLE_BORDER);
714
+ _$setProp(_el$38, "paddingTop", 1);
715
+ _$setProp(_el$38, "paddingBottom", 1);
657
716
  _$setProp(_el$38, "paddingLeft", 1);
658
717
  _$setProp(_el$38, "paddingRight", 1);
659
718
  _$insertNode(_el$39, _el$40);
660
- _$insert(_el$40, headerLabel);
661
- _$insert(_el$37, _$createComponent(Show, {
719
+ _$setProp(_el$39, "width", '100%');
720
+ _$setProp(_el$39, "flexDirection", 'row');
721
+ _$setProp(_el$39, "justifyContent", 'space-between');
722
+ _$setProp(_el$39, "alignItems", 'center');
723
+ _$setProp(_el$39, "onMouseDown", () => {
724
+ if (hasData()) props.controller.toggleCollapsed();
725
+ });
726
+ _$insertNode(_el$40, _el$41);
727
+ _$setProp(_el$40, "paddingLeft", 1);
728
+ _$setProp(_el$40, "paddingRight", 1);
729
+ _$insertNode(_el$41, _el$42);
730
+ _$insert(_el$42, headerLabel);
731
+ _$insert(_el$39, _$createComponent(Show, {
662
732
  get when() {
663
733
  return degraded();
664
734
  },
@@ -668,36 +738,36 @@ function QuotaSidebar(props) {
668
738
  return prefs().header.showVersion && PLUGIN_VERSION !== '';
669
739
  },
670
740
  get children() {
671
- var _el$49 = _$createElement("text");
672
- _$insert(_el$49, `v${PLUGIN_VERSION}`);
673
- _$effect(_$p => _$setProp(_el$49, "fg", theme().textMuted, _$p));
674
- return _el$49;
741
+ var _el$51 = _$createElement("text");
742
+ _$insert(_el$51, `v${PLUGIN_VERSION}`);
743
+ _$effect(_$p => _$setProp(_el$51, "fg", theme().textMuted, _$p));
744
+ return _el$51;
675
745
  }
676
746
  });
677
747
  },
678
748
  get children() {
679
- var _el$41 = _$createElement("box"),
680
- _el$42 = _$createElement("text"),
681
- _el$43 = _$createElement("b");
682
- _$insertNode(_el$41, _el$42);
683
- _$setProp(_el$41, "paddingLeft", 1);
684
- _$setProp(_el$41, "paddingRight", 1);
685
- _$insertNode(_el$42, _el$43);
686
- _$insertNode(_el$43, _$createTextNode(`LIMITED`));
749
+ var _el$43 = _$createElement("box"),
750
+ _el$44 = _$createElement("text"),
751
+ _el$45 = _$createElement("b");
752
+ _$insertNode(_el$43, _el$44);
753
+ _$setProp(_el$43, "paddingLeft", 1);
754
+ _$setProp(_el$43, "paddingRight", 1);
755
+ _$insertNode(_el$44, _el$45);
756
+ _$insertNode(_el$45, _$createTextNode(`LIMITED`));
687
757
  _$effect(_p$ => {
688
758
  var _v$12 = theme().warning,
689
759
  _v$13 = theme().background;
690
- _v$12 !== _p$.e && (_p$.e = _$setProp(_el$41, "backgroundColor", _v$12, _p$.e));
691
- _v$13 !== _p$.t && (_p$.t = _$setProp(_el$42, "fg", _v$13, _p$.t));
760
+ _v$12 !== _p$.e && (_p$.e = _$setProp(_el$43, "backgroundColor", _v$12, _p$.e));
761
+ _v$13 !== _p$.t && (_p$.t = _$setProp(_el$44, "fg", _v$13, _p$.t));
692
762
  return _p$;
693
763
  }, {
694
764
  e: undefined,
695
765
  t: undefined
696
766
  });
697
- return _el$41;
767
+ return _el$43;
698
768
  }
699
769
  }), null);
700
- _$insert(_el$36, _$createComponent(Show, {
770
+ _$insert(_el$38, _$createComponent(Show, {
701
771
  get when() {
702
772
  return _$memo(() => !!collapsed())() && hasData();
703
773
  },
@@ -716,41 +786,41 @@ function QuotaSidebar(props) {
716
786
  },
717
787
  get fallback() {
718
788
  return (() => {
719
- var _el$50 = _$createElement("text");
720
- _$insertNode(_el$50, _$createTextNode(`—`));
721
- _$effect(_$p => _$setProp(_el$50, "fg", theme().textMuted, _$p));
722
- return _el$50;
789
+ var _el$52 = _$createElement("text");
790
+ _$insertNode(_el$52, _$createTextNode(`—`));
791
+ _$effect(_$p => _$setProp(_el$52, "fg", theme().textMuted, _$p));
792
+ return _el$52;
723
793
  })();
724
794
  },
725
795
  get children() {
726
- var _el$45 = _$createElement("box"),
727
- _el$46 = _$createElement("text"),
728
- _el$47 = _$createElement("b"),
729
- _el$48 = _$createElement("text");
730
- _$insertNode(_el$45, _el$46);
731
- _$insertNode(_el$45, _el$48);
732
- _$setProp(_el$45, "flexDirection", 'row');
733
- _$insertNode(_el$46, _el$47);
734
- _$insert(_el$47, () => activeQuotaSummary().text);
735
- _$insert(_el$48, () => activeAccount().killed ? ' \u2298' : ' \u25cf');
796
+ var _el$47 = _$createElement("box"),
797
+ _el$48 = _$createElement("text"),
798
+ _el$49 = _$createElement("b"),
799
+ _el$50 = _$createElement("text");
800
+ _$insertNode(_el$47, _el$48);
801
+ _$insertNode(_el$47, _el$50);
802
+ _$setProp(_el$47, "flexDirection", 'row');
803
+ _$insertNode(_el$48, _el$49);
804
+ _$insert(_el$49, () => activeQuotaSummary().text);
805
+ _$insert(_el$50, () => activeAccount().killed ? ' \u2298' : ' \u25cf');
736
806
  _$effect(_p$ => {
737
807
  var _v$14 = toneColor(theme(), activeQuotaTone()),
738
808
  _v$15 = toneColor(theme(), activeAccount().killed ? 'err' : activeQuotaTone());
739
- _v$14 !== _p$.e && (_p$.e = _$setProp(_el$46, "fg", _v$14, _p$.e));
740
- _v$15 !== _p$.t && (_p$.t = _$setProp(_el$48, "fg", _v$15, _p$.t));
809
+ _v$14 !== _p$.e && (_p$.e = _$setProp(_el$48, "fg", _v$14, _p$.e));
810
+ _v$15 !== _p$.t && (_p$.t = _$setProp(_el$50, "fg", _v$15, _p$.t));
741
811
  return _p$;
742
812
  }, {
743
813
  e: undefined,
744
814
  t: undefined
745
815
  });
746
- return _el$45;
816
+ return _el$47;
747
817
  }
748
818
  });
749
819
  }
750
820
  });
751
821
  }
752
822
  }), null);
753
- _$insert(_el$36, _$createComponent(Show, {
823
+ _$insert(_el$38, _$createComponent(Show, {
754
824
  get when() {
755
825
  return !collapsed() || !hasData();
756
826
  },
@@ -761,14 +831,14 @@ function QuotaSidebar(props) {
761
831
  },
762
832
  get fallback() {
763
833
  return (() => {
764
- var _el$52 = _$createElement("box"),
765
- _el$53 = _$createElement("text");
766
- _$insertNode(_el$52, _el$53);
767
- _$setProp(_el$52, "marginTop", 1);
768
- _$setProp(_el$52, "width", '100%');
769
- _$insertNode(_el$53, _$createTextNode(`Waiting for quota…`));
770
- _$effect(_$p => _$setProp(_el$53, "fg", theme().textMuted, _$p));
771
- return _el$52;
834
+ var _el$54 = _$createElement("box"),
835
+ _el$55 = _$createElement("text");
836
+ _$insertNode(_el$54, _el$55);
837
+ _$setProp(_el$54, "marginTop", 1);
838
+ _$setProp(_el$54, "width", '100%');
839
+ _$insertNode(_el$55, _$createTextNode(`Waiting for quota…`));
840
+ _$effect(_$p => _$setProp(_el$55, "fg", theme().textMuted, _$p));
841
+ return _el$54;
772
842
  })();
773
843
  },
774
844
  get children() {
@@ -797,10 +867,13 @@ function QuotaSidebar(props) {
797
867
  return state().main?.killed ?? false;
798
868
  },
799
869
  get active() {
800
- return state().activeId === 'main';
870
+ return sessionRouting().activeId === 'main';
801
871
  },
802
872
  get pacingEnabled() {
803
873
  return prefs().sections.pacing;
874
+ },
875
+ get resetCredits() {
876
+ return state().main?.resetCredits;
804
877
  }
805
878
  }), _$createComponent(Show, {
806
879
  get when() {
@@ -828,11 +901,14 @@ function QuotaSidebar(props) {
828
901
  return fb.killed;
829
902
  },
830
903
  get active() {
831
- return state().activeId === fb.id;
904
+ return sessionRouting().activeId === fb.id;
832
905
  },
833
906
  get pacingEnabled() {
834
907
  return prefs().sections.pacing;
835
908
  },
909
+ get resetCredits() {
910
+ return fb.resetCredits;
911
+ },
836
912
  marginTop: 1
837
913
  })
838
914
  });
@@ -857,50 +933,27 @@ function QuotaSidebar(props) {
857
933
  },
858
934
  label: "Route",
859
935
  get value() {
860
- return state().route;
936
+ return sessionRouting().route;
861
937
  },
862
938
  tone: "accent"
863
939
  })];
864
940
  }
865
- }), _$createComponent(Show, {
866
- get when() {
867
- return state().planType || state().credits != null;
941
+ }), _$createComponent(For, {
942
+ get each() {
943
+ return getQuotaMetadataRows(state());
868
944
  },
869
- get children() {
870
- return [_$createComponent(Show, {
871
- get when() {
872
- return state().planType;
873
- },
874
- get children() {
875
- return _$createComponent(StatRow, {
876
- get theme() {
877
- return theme();
878
- },
879
- label: "Plan",
880
- get value() {
881
- return state().planType ?? '\u2014';
882
- },
883
- tone: "text"
884
- });
885
- }
886
- }), _$createComponent(Show, {
887
- get when() {
888
- return state().credits != null;
889
- },
890
- get children() {
891
- return _$createComponent(StatRow, {
892
- get theme() {
893
- return theme();
894
- },
895
- label: "Credits",
896
- get value() {
897
- return String(state().credits);
898
- },
899
- tone: "text"
900
- });
901
- }
902
- })];
903
- }
945
+ children: row => _$createComponent(StatRow, {
946
+ get theme() {
947
+ return theme();
948
+ },
949
+ get label() {
950
+ return row.label;
951
+ },
952
+ get value() {
953
+ return row.value;
954
+ },
955
+ tone: "text"
956
+ })
904
957
  }), _$createComponent(Show, {
905
958
  get when() {
906
959
  return _$memo(() => !!degraded())() && prefs().sections.health;
@@ -968,16 +1021,16 @@ function QuotaSidebar(props) {
968
1021
  var _v$16 = theme().borderActive,
969
1022
  _v$17 = theme().accent,
970
1023
  _v$18 = theme().background;
971
- _v$16 !== _p$.e && (_p$.e = _$setProp(_el$36, "borderColor", _v$16, _p$.e));
972
- _v$17 !== _p$.t && (_p$.t = _$setProp(_el$38, "backgroundColor", _v$17, _p$.t));
973
- _v$18 !== _p$.a && (_p$.a = _$setProp(_el$39, "fg", _v$18, _p$.a));
1024
+ _v$16 !== _p$.e && (_p$.e = _$setProp(_el$38, "borderColor", _v$16, _p$.e));
1025
+ _v$17 !== _p$.t && (_p$.t = _$setProp(_el$40, "backgroundColor", _v$17, _p$.t));
1026
+ _v$18 !== _p$.a && (_p$.a = _$setProp(_el$41, "fg", _v$18, _p$.a));
974
1027
  return _p$;
975
1028
  }, {
976
1029
  e: undefined,
977
1030
  t: undefined,
978
1031
  a: undefined
979
1032
  });
980
- return _el$36;
1033
+ return _el$38;
981
1034
  })();
982
1035
  }
983
1036
  const tui = async api => {
@@ -986,10 +1039,13 @@ const tui = async api => {
986
1039
  api.slots.register({
987
1040
  order: computeEffectiveOrder(root, PLUGIN_KEY, DEFAULT_SLOT_ORDER),
988
1041
  slots: {
989
- sidebar_content(_ctx, _props) {
1042
+ sidebar_content(_ctx, props) {
990
1043
  return _$createComponent(QuotaSidebar, {
991
1044
  api: api,
992
- controller: controller
1045
+ controller: controller,
1046
+ get sessionId() {
1047
+ return props.session_id;
1048
+ }
993
1049
  });
994
1050
  }
995
1051
  }
@@ -1019,14 +1075,15 @@ const tui = async api => {
1019
1075
  api.ui.dialog.setSize('xlarge');
1020
1076
  api.ui.dialog.replace(() => _$createComponent(QuotaDialogContent, {
1021
1077
  api: api,
1022
- controller: controller
1078
+ controller: controller,
1079
+ sessionId: sessionId
1023
1080
  }));
1024
1081
  continue;
1025
1082
  }
1026
1083
  openCommandDialog(api, message.payload, (command, args) => rpcClient.apply({
1027
1084
  command,
1028
1085
  arguments: args
1029
- }));
1086
+ }), sessionId);
1030
1087
  }
1031
1088
  }).catch(() => {}).finally(() => {
1032
1089
  rpcInFlight = false;