@slkiser/opencode-quota 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +15 -21
  2. package/dist/lib/anthropic-auth.d.ts +26 -0
  3. package/dist/lib/anthropic-auth.d.ts.map +1 -0
  4. package/dist/lib/anthropic-auth.js +33 -0
  5. package/dist/lib/anthropic-auth.js.map +1 -0
  6. package/dist/lib/anthropic.d.ts +8 -3
  7. package/dist/lib/anthropic.d.ts.map +1 -1
  8. package/dist/lib/anthropic.js +40 -9
  9. package/dist/lib/anthropic.js.map +1 -1
  10. package/dist/lib/config.d.ts +1 -1
  11. package/dist/lib/config.d.ts.map +1 -1
  12. package/dist/lib/config.js +24 -0
  13. package/dist/lib/config.js.map +1 -1
  14. package/dist/lib/opencode-zen.d.ts +3 -1
  15. package/dist/lib/opencode-zen.d.ts.map +1 -1
  16. package/dist/lib/opencode-zen.js +91 -3
  17. package/dist/lib/opencode-zen.js.map +1 -1
  18. package/dist/lib/tui-panel-state.d.ts +15 -0
  19. package/dist/lib/tui-panel-state.d.ts.map +1 -1
  20. package/dist/lib/tui-panel-state.js.map +1 -1
  21. package/dist/lib/tui-runtime.d.ts +6 -1
  22. package/dist/lib/tui-runtime.d.ts.map +1 -1
  23. package/dist/lib/tui-runtime.js +51 -1
  24. package/dist/lib/tui-runtime.js.map +1 -1
  25. package/dist/lib/types.d.ts +13 -0
  26. package/dist/lib/types.d.ts.map +1 -1
  27. package/dist/lib/types.js +3 -0
  28. package/dist/lib/types.js.map +1 -1
  29. package/dist/lib/xai.d.ts +6 -1
  30. package/dist/lib/xai.d.ts.map +1 -1
  31. package/dist/lib/xai.js +74 -9
  32. package/dist/lib/xai.js.map +1 -1
  33. package/dist/providers/anthropic.d.ts.map +1 -1
  34. package/dist/providers/anthropic.js +8 -3
  35. package/dist/providers/anthropic.js.map +1 -1
  36. package/dist/tui.d.ts.map +1 -1
  37. package/dist/tui.js +307 -110
  38. package/dist/tui.tsx +183 -1
  39. package/package.json +1 -1
package/dist/tui.js CHANGED
@@ -9,7 +9,9 @@ import { createElement as _$createElement } from "@opentui/solid";
9
9
  /** @jsxImportSource @opentui/solid */
10
10
 
11
11
  import { createEffect, createSignal, onCleanup, Show } from "solid-js";
12
+ import { formatDisplayedPercentLabel, formatResetCountdown } from "./lib/format-utils.js";
12
13
  import { buildQuotaDialogCommandOutput, QUOTA_DIALOG_COMMANDS } from "./lib/quota-dialog-commands.js";
14
+ import { extractSingleWindowWindowLabel } from "./lib/quota-entry-display.js";
13
15
  import { disposeQuotaTelemetryOwner } from "./lib/quota-telemetry.js";
14
16
  import { getSidebarBodyLineColor } from "./lib/tui-line-style.js";
15
17
  import { getCompactStatusText, getHomeBottomAnnouncementText, getSidebarPanelLines, getSidebarPanelLinesExpanded, shouldRenderCompactStatus, shouldRenderHomeBottom, shouldRenderSidebarPanel } from "./lib/tui-panel-state.js";
@@ -35,6 +37,9 @@ const FALLBACK_SURFACE_REGISTRATION = {
35
37
  hasNativeProviderQuota: false,
36
38
  suppressedByNativeProviderQuota: false
37
39
  },
40
+ promptBar: {
41
+ enabled: false
42
+ },
38
43
  announcements: {
39
44
  homeBottom: false
40
45
  },
@@ -95,6 +100,9 @@ function createSessionQuotaResource(api, sessionID, initialLoads) {
95
100
  const [compact, setCompact] = createSignal({
96
101
  status: "loading"
97
102
  });
103
+ const [promptBar, setPromptBar] = createSignal({
104
+ status: "loading"
105
+ });
98
106
  let loadOrdinal = 0;
99
107
  const lifecycle = createTuiRefreshLifecycle({
100
108
  load: () => {
@@ -111,6 +119,9 @@ function createSessionQuotaResource(api, sessionID, initialLoads) {
111
119
  apply: next => {
112
120
  setSidebar(next.sidebar);
113
121
  setCompact(next.compact);
122
+ setPromptBar(next.promptBar ?? {
123
+ status: "loading"
124
+ });
114
125
  },
115
126
  intervalMs: REFRESH_INTERVAL_MS,
116
127
  eventRefreshDelaysMs: EVENT_REFRESH_DELAYS_MS,
@@ -142,6 +153,7 @@ function createSessionQuotaResource(api, sessionID, initialLoads) {
142
153
  sessionID,
143
154
  sidebar,
144
155
  compact,
156
+ promptBar,
145
157
  retain: () => {
146
158
  lifecycle.retain();
147
159
  return resource;
@@ -380,6 +392,167 @@ function SessionPromptWithCompactStatus(props) {
380
392
  return _el$13;
381
393
  })();
382
394
  }
395
+ const PROMPT_BAR_WIDTH = 12;
396
+ function shouldRenderPromptBar(bar) {
397
+ return bar.status === "ready" && Boolean(bar.entry);
398
+ }
399
+ function useSessionRunning(api, sessionID) {
400
+ const [running, setRunning] = createSignal(false);
401
+ createEffect(() => {
402
+ const id = sessionID();
403
+ if (!id) {
404
+ setRunning(false);
405
+ return;
406
+ }
407
+ const update = () => {
408
+ try {
409
+ const sessionState = api.state.session;
410
+ const status = sessionState.status?.(id);
411
+ setRunning(status?.type === "busy" || status?.type === "retry");
412
+ } catch {
413
+ setRunning(false);
414
+ }
415
+ };
416
+ update();
417
+ const disposers = [api.event.on("session.status", event => {
418
+ if (event.properties?.sessionID === id) {
419
+ update();
420
+ }
421
+ }), api.event.on("session.updated", event => {
422
+ if (event.properties?.info?.id === id) {
423
+ update();
424
+ }
425
+ })];
426
+ onCleanup(() => {
427
+ for (const dispose of disposers) {
428
+ if (typeof dispose === "function") {
429
+ dispose();
430
+ }
431
+ }
432
+ });
433
+ });
434
+ return running;
435
+ }
436
+ function buildPromptBarParts(params) {
437
+ const bar = params.bar();
438
+ if (!shouldRenderPromptBar(bar)) return undefined;
439
+ const entry = bar.entry;
440
+ if (!entry) return undefined;
441
+ const windowLabel = extractSingleWindowWindowLabel(entry.label ?? "") ?? extractSingleWindowWindowLabel(entry.name ?? "") ?? "Quota";
442
+ const percent = formatDisplayedPercentLabel(entry.percentRemaining ?? 0, bar.percentDisplayMode ?? "remaining");
443
+ const reset = entry.resetTimeIso ? formatResetCountdown(entry.resetTimeIso, {
444
+ compactRounded: true,
445
+ decimals: bar.resetTimeDecimals
446
+ }) : "";
447
+ const p = Math.max(0, Math.min(100, Math.round(entry.percentRemaining ?? 0)));
448
+ const filled = Math.round(p / 100 * PROMPT_BAR_WIDTH);
449
+ const empty = PROMPT_BAR_WIDTH - filled;
450
+ let barText = "█".repeat(filled) + "░".repeat(empty);
451
+ if (params.running() && filled > 0) {
452
+ const cells = Array(filled).fill("▓");
453
+ const center = params.phase() % filled;
454
+ const gradient = ["▒", "▓", "█", "▓", "▒"];
455
+ for (let offset = -2; offset <= 2; offset++) {
456
+ const position = (center + offset + filled) % filled;
457
+ cells[position] = gradient[offset + 2];
458
+ }
459
+ barText = cells.join("") + "░".repeat(empty);
460
+ }
461
+ return {
462
+ label: windowLabel,
463
+ barText,
464
+ meta: [percent.replace(/\s+left$/u, ""), reset].filter(Boolean).join(" | ")
465
+ };
466
+ }
467
+ function PromptQuotaHint(props) {
468
+ const parts = () => buildPromptBarParts(props);
469
+ const barColor = () => props.api.theme.current.textMuted;
470
+ const label = () => parts()?.label ?? "";
471
+ const bar = () => parts()?.barText ?? "";
472
+ const meta = () => parts()?.meta ?? "";
473
+ return _$createComponent(Show, {
474
+ get when() {
475
+ return parts();
476
+ },
477
+ get children() {
478
+ var _el$14 = _$createElement("box"),
479
+ _el$15 = _$createElement("text"),
480
+ _el$16 = _$createElement("text"),
481
+ _el$17 = _$createElement("text");
482
+ _$insertNode(_el$14, _el$15);
483
+ _$insertNode(_el$14, _el$16);
484
+ _$insertNode(_el$14, _el$17);
485
+ _$setProp(_el$14, "flexDirection", "row");
486
+ _$setProp(_el$14, "justifyContent", "flex-end");
487
+ _$setProp(_el$14, "gap", 1);
488
+ _$setProp(_el$15, "wrapMode", "none");
489
+ _$insert(_el$15, label);
490
+ _$setProp(_el$16, "wrapMode", "none");
491
+ _$insert(_el$16, bar);
492
+ _$setProp(_el$17, "wrapMode", "none");
493
+ _$insert(_el$17, meta);
494
+ _$effect(_p$ => {
495
+ var _v$3 = props.api.theme.current.textMuted,
496
+ _v$4 = barColor(),
497
+ _v$5 = props.api.theme.current.textMuted;
498
+ _v$3 !== _p$.e && (_p$.e = _$setProp(_el$15, "fg", _v$3, _p$.e));
499
+ _v$4 !== _p$.t && (_p$.t = _$setProp(_el$16, "fg", _v$4, _p$.t));
500
+ _v$5 !== _p$.a && (_p$.a = _$setProp(_el$17, "fg", _v$5, _p$.a));
501
+ return _p$;
502
+ }, {
503
+ e: undefined,
504
+ t: undefined,
505
+ a: undefined
506
+ });
507
+ return _el$14;
508
+ }
509
+ });
510
+ }
511
+ function SessionQuotaPromptBar(props) {
512
+ const resource = useSessionQuotaResource(props.api, () => props.sessionID, props.initialLoads);
513
+ const promptBar = () => resource().promptBar();
514
+ const running = useSessionRunning(props.api, () => props.sessionID);
515
+ const [phase, setPhase] = createSignal(0);
516
+ createEffect(() => {
517
+ if (!running() || !shouldRenderPromptBar(promptBar())) {
518
+ setPhase(0);
519
+ return;
520
+ }
521
+ const interval = setInterval(() => setPhase(p => p + 1), 160);
522
+ onCleanup(() => clearInterval(interval));
523
+ });
524
+ return (() => {
525
+ var _el$18 = _$createElement("box");
526
+ _$setProp(_el$18, "gap", 0);
527
+ _$insert(_el$18, _$createComponent(props.api.ui.Prompt, {
528
+ get sessionID() {
529
+ return props.sessionID;
530
+ },
531
+ get visible() {
532
+ return props.visible;
533
+ },
534
+ get disabled() {
535
+ return props.disabled;
536
+ },
537
+ get onSubmit() {
538
+ return props.onSubmit;
539
+ },
540
+ ref(r$) {
541
+ var _ref$2 = props.promptRef;
542
+ typeof _ref$2 === "function" ? _ref$2(r$) : props.promptRef = r$;
543
+ }
544
+ }), null);
545
+ _$insert(_el$18, _$createComponent(PromptQuotaHint, {
546
+ get api() {
547
+ return props.api;
548
+ },
549
+ bar: promptBar,
550
+ running: running,
551
+ phase: phase
552
+ }), null);
553
+ return _el$18;
554
+ })();
555
+ }
383
556
  function HomeBottomView(props) {
384
557
  const resource = acquireHomeBottomResource(props.api, props.compactHomeBottomEnabled, props.initialLoads);
385
558
  onCleanup(() => resource.release());
@@ -387,35 +560,35 @@ function HomeBottomView(props) {
387
560
  const compact = () => resource.bottom().compact;
388
561
  const visible = () => shouldRenderHomeBottom(resource.bottom());
389
562
  return (() => {
390
- var _el$14 = _$createElement("box");
391
- _$setProp(_el$14, "gap", 0);
392
- _$insert(_el$14, _$createComponent(Show, {
563
+ var _el$19 = _$createElement("box");
564
+ _$setProp(_el$19, "gap", 0);
565
+ _$insert(_el$19, _$createComponent(Show, {
393
566
  get when() {
394
567
  return visible();
395
568
  },
396
569
  get children() {
397
- var _el$15 = _$createElement("text");
398
- _$insertNode(_el$15, _$createTextNode(` `));
399
- return _el$15;
570
+ var _el$20 = _$createElement("text");
571
+ _$insertNode(_el$20, _$createTextNode(` `));
572
+ return _el$20;
400
573
  }
401
574
  }), null);
402
- _$insert(_el$14, _$createComponent(Show, {
575
+ _$insert(_el$19, _$createComponent(Show, {
403
576
  get when() {
404
577
  return _$memo(() => !!visible())() && announcement();
405
578
  },
406
579
  get children() {
407
- var _el$17 = _$createElement("box"),
408
- _el$18 = _$createElement("text");
409
- _$insertNode(_el$17, _el$18);
410
- _$setProp(_el$17, "flexDirection", "row");
411
- _$setProp(_el$17, "justifyContent", "center");
412
- _$setProp(_el$18, "wrapMode", "none");
413
- _$insert(_el$18, announcement);
414
- _$effect(_$p => _$setProp(_el$18, "fg", props.api.theme.current.textMuted, _$p));
415
- return _el$17;
580
+ var _el$22 = _$createElement("box"),
581
+ _el$23 = _$createElement("text");
582
+ _$insertNode(_el$22, _el$23);
583
+ _$setProp(_el$22, "flexDirection", "row");
584
+ _$setProp(_el$22, "justifyContent", "center");
585
+ _$setProp(_el$23, "wrapMode", "none");
586
+ _$insert(_el$23, announcement);
587
+ _$effect(_$p => _$setProp(_el$23, "fg", props.api.theme.current.textMuted, _$p));
588
+ return _el$22;
416
589
  }
417
590
  }), null);
418
- _$insert(_el$14, _$createComponent(Show, {
591
+ _$insert(_el$19, _$createComponent(Show, {
419
592
  get when() {
420
593
  return visible();
421
594
  },
@@ -429,7 +602,7 @@ function HomeBottomView(props) {
429
602
  });
430
603
  }
431
604
  }), null);
432
- return _el$14;
605
+ return _el$19;
433
606
  })();
434
607
  }
435
608
  function getActiveTuiSessionID(api) {
@@ -447,117 +620,117 @@ function getTuiCommandArguments(input) {
447
620
  }
448
621
  function CommandLoadingDialog(props) {
449
622
  return (() => {
450
- var _el$19 = _$createElement("box"),
451
- _el$20 = _$createElement("text"),
452
- _el$21 = _$createElement("b"),
453
- _el$22 = _$createElement("text");
454
- _$insertNode(_el$19, _el$20);
455
- _$insertNode(_el$19, _el$22);
456
- _$setProp(_el$19, "gap", 1);
457
- _$setProp(_el$19, "paddingLeft", 2);
458
- _$setProp(_el$19, "paddingRight", 2);
459
- _$setProp(_el$19, "paddingBottom", 1);
460
- _$insertNode(_el$20, _el$21);
461
- _$insert(_el$21, () => props.title);
462
- _$insertNode(_el$22, _$createTextNode(`Loading deterministic local output…`));
623
+ var _el$24 = _$createElement("box"),
624
+ _el$25 = _$createElement("text"),
625
+ _el$26 = _$createElement("b"),
626
+ _el$27 = _$createElement("text");
627
+ _$insertNode(_el$24, _el$25);
628
+ _$insertNode(_el$24, _el$27);
629
+ _$setProp(_el$24, "gap", 1);
630
+ _$setProp(_el$24, "paddingLeft", 2);
631
+ _$setProp(_el$24, "paddingRight", 2);
632
+ _$setProp(_el$24, "paddingBottom", 1);
633
+ _$insertNode(_el$25, _el$26);
634
+ _$insert(_el$26, () => props.title);
635
+ _$insertNode(_el$27, _$createTextNode(`Loading deterministic local output…`));
463
636
  _$effect(_p$ => {
464
- var _v$3 = props.api.theme.current.text,
465
- _v$4 = props.api.theme.current.textMuted;
466
- _v$3 !== _p$.e && (_p$.e = _$setProp(_el$20, "fg", _v$3, _p$.e));
467
- _v$4 !== _p$.t && (_p$.t = _$setProp(_el$22, "fg", _v$4, _p$.t));
637
+ var _v$6 = props.api.theme.current.text,
638
+ _v$7 = props.api.theme.current.textMuted;
639
+ _v$6 !== _p$.e && (_p$.e = _$setProp(_el$25, "fg", _v$6, _p$.e));
640
+ _v$7 !== _p$.t && (_p$.t = _$setProp(_el$27, "fg", _v$7, _p$.t));
468
641
  return _p$;
469
642
  }, {
470
643
  e: undefined,
471
644
  t: undefined
472
645
  });
473
- return _el$19;
646
+ return _el$24;
474
647
  })();
475
648
  }
476
649
  function CommandOutputDialog(props) {
477
650
  const lines = () => props.output.split("\n");
478
651
  const bodyHeight = () => Math.min(28, Math.max(6, lines().length));
479
652
  return (() => {
480
- var _el$24 = _$createElement("box"),
481
- _el$25 = _$createElement("text"),
482
- _el$26 = _$createElement("b"),
483
- _el$27 = _$createElement("scrollbox"),
484
- _el$28 = _$createElement("box"),
485
- _el$29 = _$createElement("text");
486
- _$insertNode(_el$24, _el$25);
487
- _$insertNode(_el$24, _el$27);
488
- _$insertNode(_el$24, _el$29);
489
- _$setProp(_el$24, "gap", 1);
490
- _$setProp(_el$24, "width", "100%");
491
- _$setProp(_el$24, "flexGrow", 1);
492
- _$setProp(_el$24, "paddingLeft", 2);
493
- _$setProp(_el$24, "paddingRight", 2);
494
- _$setProp(_el$24, "paddingBottom", 1);
495
- _$insertNode(_el$25, _el$26);
496
- _$insert(_el$26, () => props.title);
497
- _$insertNode(_el$27, _el$28);
498
- _$setProp(_el$27, "width", "100%");
499
- _$setProp(_el$27, "flexGrow", 1);
500
- _$setProp(_el$27, "maxHeight", 28);
501
- _$setProp(_el$28, "gap", 0);
502
- _$setProp(_el$28, "width", "100%");
503
- _$setProp(_el$28, "minWidth", 0);
504
- _$insert(_el$28, () => lines().map(line => (() => {
505
- var _el$31 = _$createElement("text");
506
- _$setProp(_el$31, "wrapMode", "word");
507
- _$setProp(_el$31, "width", "100%");
508
- _$insert(_el$31, line || " ");
509
- _$effect(_$p => _$setProp(_el$31, "fg", props.api.theme.current.text, _$p));
510
- return _el$31;
653
+ var _el$29 = _$createElement("box"),
654
+ _el$30 = _$createElement("text"),
655
+ _el$31 = _$createElement("b"),
656
+ _el$32 = _$createElement("scrollbox"),
657
+ _el$33 = _$createElement("box"),
658
+ _el$34 = _$createElement("text");
659
+ _$insertNode(_el$29, _el$30);
660
+ _$insertNode(_el$29, _el$32);
661
+ _$insertNode(_el$29, _el$34);
662
+ _$setProp(_el$29, "gap", 1);
663
+ _$setProp(_el$29, "width", "100%");
664
+ _$setProp(_el$29, "flexGrow", 1);
665
+ _$setProp(_el$29, "paddingLeft", 2);
666
+ _$setProp(_el$29, "paddingRight", 2);
667
+ _$setProp(_el$29, "paddingBottom", 1);
668
+ _$insertNode(_el$30, _el$31);
669
+ _$insert(_el$31, () => props.title);
670
+ _$insertNode(_el$32, _el$33);
671
+ _$setProp(_el$32, "width", "100%");
672
+ _$setProp(_el$32, "flexGrow", 1);
673
+ _$setProp(_el$32, "maxHeight", 28);
674
+ _$setProp(_el$33, "gap", 0);
675
+ _$setProp(_el$33, "width", "100%");
676
+ _$setProp(_el$33, "minWidth", 0);
677
+ _$insert(_el$33, () => lines().map(line => (() => {
678
+ var _el$36 = _$createElement("text");
679
+ _$setProp(_el$36, "wrapMode", "word");
680
+ _$setProp(_el$36, "width", "100%");
681
+ _$insert(_el$36, line || " ");
682
+ _$effect(_$p => _$setProp(_el$36, "fg", props.api.theme.current.text, _$p));
683
+ return _el$36;
511
684
  })()));
512
- _$insertNode(_el$29, _$createTextNode(`esc closes`));
685
+ _$insertNode(_el$34, _$createTextNode(`esc closes`));
513
686
  _$effect(_p$ => {
514
- var _v$5 = props.api.theme.current.text,
515
- _v$6 = bodyHeight(),
516
- _v$7 = props.api.theme.current.textMuted;
517
- _v$5 !== _p$.e && (_p$.e = _$setProp(_el$25, "fg", _v$5, _p$.e));
518
- _v$6 !== _p$.t && (_p$.t = _$setProp(_el$27, "minHeight", _v$6, _p$.t));
519
- _v$7 !== _p$.a && (_p$.a = _$setProp(_el$29, "fg", _v$7, _p$.a));
687
+ var _v$8 = props.api.theme.current.text,
688
+ _v$9 = bodyHeight(),
689
+ _v$0 = props.api.theme.current.textMuted;
690
+ _v$8 !== _p$.e && (_p$.e = _$setProp(_el$30, "fg", _v$8, _p$.e));
691
+ _v$9 !== _p$.t && (_p$.t = _$setProp(_el$32, "minHeight", _v$9, _p$.t));
692
+ _v$0 !== _p$.a && (_p$.a = _$setProp(_el$34, "fg", _v$0, _p$.a));
520
693
  return _p$;
521
694
  }, {
522
695
  e: undefined,
523
696
  t: undefined,
524
697
  a: undefined
525
698
  });
526
- return _el$24;
699
+ return _el$29;
527
700
  })();
528
701
  }
529
702
  function CommandErrorDialog(props) {
530
703
  const message = props.error instanceof Error ? props.error.message : String(props.error);
531
704
  return (() => {
532
- var _el$32 = _$createElement("box"),
533
- _el$33 = _$createElement("text"),
534
- _el$34 = _$createElement("b"),
535
- _el$35 = _$createElement("text"),
536
- _el$37 = _$createElement("text"),
537
- _el$38 = _$createElement("text");
538
- _$insertNode(_el$32, _el$33);
539
- _$insertNode(_el$32, _el$35);
540
- _$insertNode(_el$32, _el$37);
541
- _$insertNode(_el$32, _el$38);
542
- _$setProp(_el$32, "gap", 1);
543
- _$setProp(_el$32, "paddingLeft", 2);
544
- _$setProp(_el$32, "paddingRight", 2);
545
- _$setProp(_el$32, "paddingBottom", 1);
546
- _$insertNode(_el$33, _el$34);
547
- _$insert(_el$34, () => props.title);
548
- _$insertNode(_el$35, _$createTextNode(`OpenCode Quota command failed.`));
549
- _$setProp(_el$37, "wrapMode", "none");
550
- _$insert(_el$37, message || "Unknown error");
551
- _$insertNode(_el$38, _$createTextNode(`esc closes`));
705
+ var _el$37 = _$createElement("box"),
706
+ _el$38 = _$createElement("text"),
707
+ _el$39 = _$createElement("b"),
708
+ _el$40 = _$createElement("text"),
709
+ _el$42 = _$createElement("text"),
710
+ _el$43 = _$createElement("text");
711
+ _$insertNode(_el$37, _el$38);
712
+ _$insertNode(_el$37, _el$40);
713
+ _$insertNode(_el$37, _el$42);
714
+ _$insertNode(_el$37, _el$43);
715
+ _$setProp(_el$37, "gap", 1);
716
+ _$setProp(_el$37, "paddingLeft", 2);
717
+ _$setProp(_el$37, "paddingRight", 2);
718
+ _$setProp(_el$37, "paddingBottom", 1);
719
+ _$insertNode(_el$38, _el$39);
720
+ _$insert(_el$39, () => props.title);
721
+ _$insertNode(_el$40, _$createTextNode(`OpenCode Quota command failed.`));
722
+ _$setProp(_el$42, "wrapMode", "none");
723
+ _$insert(_el$42, message || "Unknown error");
724
+ _$insertNode(_el$43, _$createTextNode(`esc closes`));
552
725
  _$effect(_p$ => {
553
- var _v$8 = props.api.theme.current.text,
554
- _v$9 = props.api.theme.current.text,
555
- _v$0 = props.api.theme.current.textMuted,
556
- _v$1 = props.api.theme.current.textMuted;
557
- _v$8 !== _p$.e && (_p$.e = _$setProp(_el$33, "fg", _v$8, _p$.e));
558
- _v$9 !== _p$.t && (_p$.t = _$setProp(_el$35, "fg", _v$9, _p$.t));
559
- _v$0 !== _p$.a && (_p$.a = _$setProp(_el$37, "fg", _v$0, _p$.a));
560
- _v$1 !== _p$.o && (_p$.o = _$setProp(_el$38, "fg", _v$1, _p$.o));
726
+ var _v$1 = props.api.theme.current.text,
727
+ _v$10 = props.api.theme.current.text,
728
+ _v$11 = props.api.theme.current.textMuted,
729
+ _v$12 = props.api.theme.current.textMuted;
730
+ _v$1 !== _p$.e && (_p$.e = _$setProp(_el$38, "fg", _v$1, _p$.e));
731
+ _v$10 !== _p$.t && (_p$.t = _$setProp(_el$40, "fg", _v$10, _p$.t));
732
+ _v$11 !== _p$.a && (_p$.a = _$setProp(_el$42, "fg", _v$11, _p$.a));
733
+ _v$12 !== _p$.o && (_p$.o = _$setProp(_el$43, "fg", _v$12, _p$.o));
561
734
  return _p$;
562
735
  }, {
563
736
  e: undefined,
@@ -565,7 +738,7 @@ function CommandErrorDialog(props) {
565
738
  a: undefined,
566
739
  o: undefined
567
740
  });
568
- return _el$32;
741
+ return _el$37;
569
742
  })();
570
743
  }
571
744
  function getCommandPromptCopy(spec) {
@@ -609,11 +782,11 @@ async function runQuotaDialogCommandAsync(api, command, commandDisplay, rawInput
609
782
  return prompt.placeholder;
610
783
  },
611
784
  description: () => (() => {
612
- var _el$40 = _$createElement("text");
613
- _$setProp(_el$40, "wrapMode", "word");
614
- _$insert(_el$40, () => prompt.description);
615
- _$effect(_$p => _$setProp(_el$40, "fg", api.theme.current.textMuted, _$p));
616
- return _el$40;
785
+ var _el$45 = _$createElement("text");
786
+ _$setProp(_el$45, "wrapMode", "word");
787
+ _$insert(_el$45, () => prompt.description);
788
+ _$effect(_$p => _$setProp(_el$45, "fg", api.theme.current.textMuted, _$p));
789
+ return _el$45;
617
790
  })(),
618
791
  onCancel: () => api.ui.dialog.clear(),
619
792
  onConfirm: value => {
@@ -744,7 +917,31 @@ function registerStableTuiSlots(api, current) {
744
917
  slots: {
745
918
  session_prompt(_ctx, props) {
746
919
  const state = current();
747
- if (state.status !== "active" || !state.registration.compact.sessionPrompt) return null;
920
+ if (state.status !== "active") return null;
921
+ if (state.registration.promptBar.enabled) {
922
+ return _$createComponent(SessionQuotaPromptBar, {
923
+ api: api,
924
+ get sessionID() {
925
+ return props.session_id;
926
+ },
927
+ get initialLoads() {
928
+ return state.initialLoads;
929
+ },
930
+ get visible() {
931
+ return props.visible;
932
+ },
933
+ get disabled() {
934
+ return props.disabled;
935
+ },
936
+ get onSubmit() {
937
+ return props.on_submit;
938
+ },
939
+ get promptRef() {
940
+ return props.ref;
941
+ }
942
+ });
943
+ }
944
+ if (!state.registration.compact.sessionPrompt) return null;
748
945
  return _$createComponent(SessionPromptWithCompactStatus, {
749
946
  api: api,
750
947
  get sessionID() {