@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.
- package/README.md +15 -21
- package/dist/lib/anthropic-auth.d.ts +26 -0
- package/dist/lib/anthropic-auth.d.ts.map +1 -0
- package/dist/lib/anthropic-auth.js +33 -0
- package/dist/lib/anthropic-auth.js.map +1 -0
- package/dist/lib/anthropic.d.ts +8 -3
- package/dist/lib/anthropic.d.ts.map +1 -1
- package/dist/lib/anthropic.js +40 -9
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +24 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/opencode-zen.d.ts +3 -1
- package/dist/lib/opencode-zen.d.ts.map +1 -1
- package/dist/lib/opencode-zen.js +91 -3
- package/dist/lib/opencode-zen.js.map +1 -1
- package/dist/lib/tui-panel-state.d.ts +15 -0
- package/dist/lib/tui-panel-state.d.ts.map +1 -1
- package/dist/lib/tui-panel-state.js.map +1 -1
- package/dist/lib/tui-runtime.d.ts +6 -1
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +51 -1
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/types.d.ts +13 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/xai.d.ts +6 -1
- package/dist/lib/xai.d.ts.map +1 -1
- package/dist/lib/xai.js +74 -9
- package/dist/lib/xai.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +8 -3
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +307 -110
- package/dist/tui.tsx +183 -1
- 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$
|
|
391
|
-
_$setProp(_el$
|
|
392
|
-
_$insert(_el$
|
|
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$
|
|
398
|
-
_$insertNode(_el$
|
|
399
|
-
return _el$
|
|
570
|
+
var _el$20 = _$createElement("text");
|
|
571
|
+
_$insertNode(_el$20, _$createTextNode(` `));
|
|
572
|
+
return _el$20;
|
|
400
573
|
}
|
|
401
574
|
}), null);
|
|
402
|
-
_$insert(_el$
|
|
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$
|
|
408
|
-
_el$
|
|
409
|
-
_$insertNode(_el$
|
|
410
|
-
_$setProp(_el$
|
|
411
|
-
_$setProp(_el$
|
|
412
|
-
_$setProp(_el$
|
|
413
|
-
_$insert(_el$
|
|
414
|
-
_$effect(_$p => _$setProp(_el$
|
|
415
|
-
return _el$
|
|
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$
|
|
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$
|
|
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$
|
|
451
|
-
_el$
|
|
452
|
-
_el$
|
|
453
|
-
_el$
|
|
454
|
-
_$insertNode(_el$
|
|
455
|
-
_$insertNode(_el$
|
|
456
|
-
_$setProp(_el$
|
|
457
|
-
_$setProp(_el$
|
|
458
|
-
_$setProp(_el$
|
|
459
|
-
_$setProp(_el$
|
|
460
|
-
_$insertNode(_el$
|
|
461
|
-
_$insert(_el$
|
|
462
|
-
_$insertNode(_el$
|
|
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$
|
|
465
|
-
_v$
|
|
466
|
-
_v$
|
|
467
|
-
_v$
|
|
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$
|
|
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$
|
|
481
|
-
_el$
|
|
482
|
-
_el$
|
|
483
|
-
_el$
|
|
484
|
-
_el$
|
|
485
|
-
_el$
|
|
486
|
-
_$insertNode(_el$
|
|
487
|
-
_$insertNode(_el$
|
|
488
|
-
_$insertNode(_el$
|
|
489
|
-
_$setProp(_el$
|
|
490
|
-
_$setProp(_el$
|
|
491
|
-
_$setProp(_el$
|
|
492
|
-
_$setProp(_el$
|
|
493
|
-
_$setProp(_el$
|
|
494
|
-
_$setProp(_el$
|
|
495
|
-
_$insertNode(_el$
|
|
496
|
-
_$insert(_el$
|
|
497
|
-
_$insertNode(_el$
|
|
498
|
-
_$setProp(_el$
|
|
499
|
-
_$setProp(_el$
|
|
500
|
-
_$setProp(_el$
|
|
501
|
-
_$setProp(_el$
|
|
502
|
-
_$setProp(_el$
|
|
503
|
-
_$setProp(_el$
|
|
504
|
-
_$insert(_el$
|
|
505
|
-
var _el$
|
|
506
|
-
_$setProp(_el$
|
|
507
|
-
_$setProp(_el$
|
|
508
|
-
_$insert(_el$
|
|
509
|
-
_$effect(_$p => _$setProp(_el$
|
|
510
|
-
return _el$
|
|
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$
|
|
685
|
+
_$insertNode(_el$34, _$createTextNode(`esc closes`));
|
|
513
686
|
_$effect(_p$ => {
|
|
514
|
-
var _v$
|
|
515
|
-
_v$
|
|
516
|
-
_v$
|
|
517
|
-
_v$
|
|
518
|
-
_v$
|
|
519
|
-
_v$
|
|
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$
|
|
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$
|
|
533
|
-
_el$
|
|
534
|
-
_el$
|
|
535
|
-
_el$
|
|
536
|
-
_el$
|
|
537
|
-
_el$
|
|
538
|
-
_$insertNode(_el$
|
|
539
|
-
_$insertNode(_el$
|
|
540
|
-
_$insertNode(_el$
|
|
541
|
-
_$insertNode(_el$
|
|
542
|
-
_$setProp(_el$
|
|
543
|
-
_$setProp(_el$
|
|
544
|
-
_$setProp(_el$
|
|
545
|
-
_$setProp(_el$
|
|
546
|
-
_$insertNode(_el$
|
|
547
|
-
_$insert(_el$
|
|
548
|
-
_$insertNode(_el$
|
|
549
|
-
_$setProp(_el$
|
|
550
|
-
_$insert(_el$
|
|
551
|
-
_$insertNode(_el$
|
|
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$
|
|
554
|
-
_v$
|
|
555
|
-
_v$
|
|
556
|
-
_v$
|
|
557
|
-
_v$
|
|
558
|
-
_v$
|
|
559
|
-
_v$
|
|
560
|
-
_v$
|
|
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$
|
|
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$
|
|
613
|
-
_$setProp(_el$
|
|
614
|
-
_$insert(_el$
|
|
615
|
-
_$effect(_$p => _$setProp(_el$
|
|
616
|
-
return _el$
|
|
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"
|
|
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() {
|