@slkiser/opencode-quota 4.10.0 → 4.10.2

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 (105) hide show
  1. package/README.md +18 -15
  2. package/dist/lib/alibaba-token-plan.d.ts +88 -0
  3. package/dist/lib/alibaba-token-plan.d.ts.map +1 -0
  4. package/dist/lib/alibaba-token-plan.js +505 -0
  5. package/dist/lib/alibaba-token-plan.js.map +1 -0
  6. package/dist/lib/api-key-resolver.d.ts +7 -0
  7. package/dist/lib/api-key-resolver.d.ts.map +1 -1
  8. package/dist/lib/api-key-resolver.js +30 -21
  9. package/dist/lib/api-key-resolver.js.map +1 -1
  10. package/dist/lib/atomic-json.d.ts +3 -0
  11. package/dist/lib/atomic-json.d.ts.map +1 -1
  12. package/dist/lib/atomic-json.js +16 -4
  13. package/dist/lib/atomic-json.js.map +1 -1
  14. package/dist/lib/cli-show.d.ts.map +1 -1
  15. package/dist/lib/cli-show.js +6 -4
  16. package/dist/lib/cli-show.js.map +1 -1
  17. package/dist/lib/config-write-target.d.ts +28 -0
  18. package/dist/lib/config-write-target.d.ts.map +1 -0
  19. package/dist/lib/config-write-target.js +159 -0
  20. package/dist/lib/config-write-target.js.map +1 -0
  21. package/dist/lib/init-installer.d.ts.map +1 -1
  22. package/dist/lib/init-installer.js +2 -2
  23. package/dist/lib/init-installer.js.map +1 -1
  24. package/dist/lib/kimi-auth.d.ts +41 -7
  25. package/dist/lib/kimi-auth.d.ts.map +1 -1
  26. package/dist/lib/kimi-auth.js +72 -27
  27. package/dist/lib/kimi-auth.js.map +1 -1
  28. package/dist/lib/kimi-endpoints.d.ts +10 -0
  29. package/dist/lib/kimi-endpoints.d.ts.map +1 -0
  30. package/dist/lib/kimi-endpoints.js +18 -0
  31. package/dist/lib/kimi-endpoints.js.map +1 -0
  32. package/dist/lib/kimi.d.ts +5 -1
  33. package/dist/lib/kimi.d.ts.map +1 -1
  34. package/dist/lib/kimi.js +5 -11
  35. package/dist/lib/kimi.js.map +1 -1
  36. package/dist/lib/opencode-config-editor.d.ts +3 -0
  37. package/dist/lib/opencode-config-editor.d.ts.map +1 -1
  38. package/dist/lib/opencode-config-editor.js +71 -10
  39. package/dist/lib/opencode-config-editor.js.map +1 -1
  40. package/dist/lib/opencode-go.d.ts.map +1 -1
  41. package/dist/lib/opencode-go.js +3 -2
  42. package/dist/lib/opencode-go.js.map +1 -1
  43. package/dist/lib/openrouter.d.ts +2 -1
  44. package/dist/lib/openrouter.d.ts.map +1 -1
  45. package/dist/lib/openrouter.js +3 -4
  46. package/dist/lib/openrouter.js.map +1 -1
  47. package/dist/lib/provider-registration.d.ts +25 -3
  48. package/dist/lib/provider-registration.d.ts.map +1 -1
  49. package/dist/lib/provider-registration.js +27 -3
  50. package/dist/lib/provider-registration.js.map +1 -1
  51. package/dist/lib/quota-stats.d.ts.map +1 -1
  52. package/dist/lib/quota-stats.js +4 -0
  53. package/dist/lib/quota-stats.js.map +1 -1
  54. package/dist/lib/quota-status.d.ts.map +1 -1
  55. package/dist/lib/quota-status.js +25 -2
  56. package/dist/lib/quota-status.js.map +1 -1
  57. package/dist/lib/scoped-update.d.ts +2 -0
  58. package/dist/lib/scoped-update.d.ts.map +1 -1
  59. package/dist/lib/scoped-update.js +43 -7
  60. package/dist/lib/scoped-update.js.map +1 -1
  61. package/dist/lib/synthetic.d.ts.map +1 -1
  62. package/dist/lib/synthetic.js +9 -0
  63. package/dist/lib/synthetic.js.map +1 -1
  64. package/dist/lib/tui-compact-format.d.ts.map +1 -1
  65. package/dist/lib/tui-compact-format.js +79 -5
  66. package/dist/lib/tui-compact-format.js.map +1 -1
  67. package/dist/lib/tui-panel-state.d.ts +5 -1
  68. package/dist/lib/tui-panel-state.d.ts.map +1 -1
  69. package/dist/lib/tui-panel-state.js.map +1 -1
  70. package/dist/lib/tui-prompt-bar-format.d.ts +25 -0
  71. package/dist/lib/tui-prompt-bar-format.d.ts.map +1 -0
  72. package/dist/lib/tui-prompt-bar-format.js +206 -0
  73. package/dist/lib/tui-prompt-bar-format.js.map +1 -0
  74. package/dist/lib/tui-runtime.d.ts.map +1 -1
  75. package/dist/lib/tui-runtime.js +5 -93
  76. package/dist/lib/tui-runtime.js.map +1 -1
  77. package/dist/lib/tui-sidebar-content.d.ts +32 -0
  78. package/dist/lib/tui-sidebar-content.d.ts.map +1 -0
  79. package/dist/lib/tui-sidebar-content.js +52 -0
  80. package/dist/lib/tui-sidebar-content.js.map +1 -0
  81. package/dist/lib/types.d.ts +4 -1
  82. package/dist/lib/types.d.ts.map +1 -1
  83. package/dist/lib/types.js.map +1 -1
  84. package/dist/providers/alibaba-token-plan.d.ts +3 -0
  85. package/dist/providers/alibaba-token-plan.d.ts.map +1 -0
  86. package/dist/providers/alibaba-token-plan.js +89 -0
  87. package/dist/providers/alibaba-token-plan.js.map +1 -0
  88. package/dist/providers/cache-policies.d.ts +5 -1
  89. package/dist/providers/cache-policies.d.ts.map +1 -1
  90. package/dist/providers/cache-policies.js +17 -4
  91. package/dist/providers/cache-policies.js.map +1 -1
  92. package/dist/providers/kimi-code.d.ts +2 -1
  93. package/dist/providers/kimi-code.d.ts.map +1 -1
  94. package/dist/providers/kimi-code.js +99 -75
  95. package/dist/providers/kimi-code.js.map +1 -1
  96. package/dist/providers/openrouter.d.ts.map +1 -1
  97. package/dist/providers/openrouter.js +11 -4
  98. package/dist/providers/openrouter.js.map +1 -1
  99. package/dist/providers/registry.d.ts.map +1 -1
  100. package/dist/providers/registry.js +5 -2
  101. package/dist/providers/registry.js.map +1 -1
  102. package/dist/tui.d.ts.map +1 -1
  103. package/dist/tui.js +226 -219
  104. package/dist/tui.tsx +57 -49
  105. package/package.json +5 -1
package/dist/tui.js CHANGED
@@ -1,23 +1,23 @@
1
- import { createComponent as _$createComponent } from "@opentui/solid";
2
- import { effect as _$effect } from "@opentui/solid";
3
1
  import { createTextNode as _$createTextNode } from "@opentui/solid";
4
- import { memo as _$memo } from "@opentui/solid";
5
2
  import { insertNode as _$insertNode } from "@opentui/solid";
3
+ import { effect as _$effect } from "@opentui/solid";
4
+ import { memo as _$memo } from "@opentui/solid";
6
5
  import { insert as _$insert } from "@opentui/solid";
6
+ import { createComponent as _$createComponent } from "@opentui/solid";
7
7
  import { setProp as _$setProp } from "@opentui/solid";
8
8
  import { createElement as _$createElement } from "@opentui/solid";
9
9
  /** @jsxImportSource @opentui/solid */
10
10
 
11
- import { createEffect, createSignal, onCleanup, Show } from "solid-js";
12
- import { formatDisplayedPercentLabel, formatQuotaModeHeading, formatResetCountdown, isResetTimeDecimals, resolveDisplayedPercent } from "./lib/format-utils.js";
11
+ import { createEffect, createSignal, Index, onCleanup, Show } from "solid-js";
12
+ import { formatQuotaModeHeading, formatResetCountdown, isResetTimeDecimals, resolveDisplayedPercent } from "./lib/format-utils.js";
13
13
  import { buildQuotaDialogCommandOutput, QUOTA_DIALOG_COMMANDS } from "./lib/quota-dialog-commands.js";
14
- import { extractSingleWindowWindowLabel } from "./lib/quota-entry-display.js";
15
- import { formatQuotaRunway } from "./lib/quota-exhaustion-projection.js";
16
14
  import { disposeQuotaTelemetryOwner } from "./lib/quota-telemetry.js";
17
15
  import { getSidebarBodyLineColor } from "./lib/tui-line-style.js";
18
16
  import { getCompactStatusText, getHomeBottomAnnouncementText, getSidebarPanelLines, getSidebarPanelLinesExpanded, shouldRenderCompactStatus, shouldRenderHomeBottom, shouldRenderSidebarPanel } from "./lib/tui-panel-state.js";
17
+ import { formatPromptBarPercentMeta, PROMPT_BAR_WIDTH, resolvePromptBarLabel } from "./lib/tui-prompt-bar-format.js";
19
18
  import { createTuiRefreshLifecycle } from "./lib/tui-refresh-lifecycle.js";
20
19
  import { createTuiQuotaClient, getTuiRuntimeRootHints, getTuiSessionModelMeta, loadTuiHomeBottomStatus, loadTuiSessionQuotaSurfaces, normalizeTuiSessionID, resolveTuiSurfaceRegistration, writeTuiQuotaExportIfEnabled } from "./lib/tui-runtime.js";
20
+ import { buildSidebarContentRows } from "./lib/tui-sidebar-content.js";
21
21
  const id = "@slkiser/opencode-quota";
22
22
  // Place Quota near the top so variable-height built-in sections
23
23
  // (MCP/LSP/Todo/Files) do not push it below the visible fold.
@@ -258,54 +258,58 @@ function SidebarContentView(props) {
258
258
  if (!hasDetailLines()) return lines();
259
259
  return collapsed() ? lines() : getSidebarPanelLinesExpanded(panel());
260
260
  };
261
- const toggleIcon = () => collapsed() ? "▶" : "▼";
262
- const providerCount = () => panel().providerCount ?? 0;
263
- const headerText = () => {
261
+ const contentRows = () => {
264
262
  const heading = panel().headerPercentMode ? formatQuotaModeHeading(panel().headerPercentMode) : "Quota";
265
- return hasDetailLines() ? `${toggleIcon()} ${heading}` : heading;
263
+ return buildSidebarContentRows({
264
+ collapsed: collapsed(),
265
+ heading,
266
+ hasDetailLines: hasDetailLines(),
267
+ providerCount: panel().providerCount ?? 0,
268
+ lines: displayLines()
269
+ });
266
270
  };
267
271
  return _$createComponent(Show, {
268
272
  get when() {
269
273
  return shouldRenderSidebarPanel(panel());
270
274
  },
271
275
  get children() {
272
- var _el$ = _$createElement("box"),
273
- _el$2 = _$createElement("box"),
274
- _el$3 = _$createElement("text"),
275
- _el$4 = _$createElement("b"),
276
- _el$8 = _$createElement("box");
277
- _$insertNode(_el$, _el$2);
278
- _$insertNode(_el$, _el$8);
276
+ var _el$ = _$createElement("box");
279
277
  _$setProp(_el$, "gap", 0);
280
- _$insertNode(_el$2, _el$3);
281
- _$setProp(_el$2, "flexDirection", "row");
282
- _$insertNode(_el$3, _el$4);
283
- _$setProp(_el$3, "onMouseDown", toggleCollapsed);
284
- _$insert(_el$4, headerText);
285
- _$insert(_el$2, _$createComponent(Show, {
286
- get when() {
287
- return _$memo(() => !!collapsed())() && providerCount() > 0;
278
+ _$setProp(_el$, "width", "100%");
279
+ _$insert(_el$, _$createComponent(Index, {
280
+ get each() {
281
+ return contentRows();
288
282
  },
289
- get children() {
290
- var _el$5 = _$createElement("text"),
291
- _el$6 = _$createTextNode(` (`),
292
- _el$7 = _$createTextNode(` providers)`);
293
- _$insertNode(_el$5, _el$6);
294
- _$insertNode(_el$5, _el$7);
295
- _$insert(_el$5, providerCount, _el$7);
296
- _$effect(_$p => _$setProp(_el$5, "fg", props.api.theme.current.textMuted, _$p));
297
- return _el$5;
298
- }
299
- }), null);
300
- _$setProp(_el$8, "gap", 0);
301
- _$insert(_el$8, () => displayLines().map(line => (() => {
302
- var _el$9 = _$createElement("text");
303
- _$setProp(_el$9, "wrapMode", "none");
304
- _$insert(_el$9, line || " ");
305
- _$effect(_$p => _$setProp(_el$9, "fg", getSidebarBodyLineColor(line, props.api.theme.current), _$p));
306
- return _el$9;
307
- })()));
308
- _$effect(_$p => _$setProp(_el$3, "fg", props.api.theme.current.text, _$p));
283
+ children: row => (() => {
284
+ var _el$2 = _$createElement("text");
285
+ _$setProp(_el$2, "wrapMode", "none");
286
+ _$setProp(_el$2, "width", "100%");
287
+ _$insert(_el$2, (() => {
288
+ var _c$ = _$memo(() => row().kind === "header");
289
+ return () => _c$() ? row().segments.map(segment => segment.style === "muted" ? (() => {
290
+ var _el$3 = _$createElement("span");
291
+ _$insert(_el$3, () => segment.text);
292
+ _$effect(_$p => _$setProp(_el$3, "fg", props.api.theme.current.textMuted, _$p));
293
+ return _el$3;
294
+ })() : (() => {
295
+ var _el$4 = _$createElement("b");
296
+ _$insert(_el$4, () => segment.text);
297
+ return _el$4;
298
+ })()) : row().text || " ";
299
+ })());
300
+ _$effect(_p$ => {
301
+ var _v$ = row().kind === "header" ? props.api.theme.current.text : getSidebarBodyLineColor(row().text, props.api.theme.current),
302
+ _v$2 = row().kind === "header" ? toggleCollapsed : undefined;
303
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, "fg", _v$, _p$.e));
304
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, "onMouseDown", _v$2, _p$.t));
305
+ return _p$;
306
+ }, {
307
+ e: undefined,
308
+ t: undefined
309
+ });
310
+ return _el$2;
311
+ })()
312
+ }));
309
313
  return _el$;
310
314
  }
311
315
  });
@@ -317,23 +321,23 @@ function CompactStatusLine(props) {
317
321
  return getCompactStatusText(panel);
318
322
  };
319
323
  const line = () => (() => {
320
- var _el$0 = _$createElement("box"),
321
- _el$1 = _$createElement("text");
322
- _$insertNode(_el$0, _el$1);
323
- _$setProp(_el$0, "flexDirection", "row");
324
- _$setProp(_el$1, "wrapMode", "none");
325
- _$insert(_el$1, text);
324
+ var _el$5 = _$createElement("box"),
325
+ _el$6 = _$createElement("text");
326
+ _$insertNode(_el$5, _el$6);
327
+ _$setProp(_el$5, "flexDirection", "row");
328
+ _$setProp(_el$6, "wrapMode", "none");
329
+ _$insert(_el$6, text);
326
330
  _$effect(_p$ => {
327
- var _v$ = props.justifyContent,
328
- _v$2 = props.api.theme.current.textMuted;
329
- _v$ !== _p$.e && (_p$.e = _$setProp(_el$0, "justifyContent", _v$, _p$.e));
330
- _v$2 !== _p$.t && (_p$.t = _$setProp(_el$1, "fg", _v$2, _p$.t));
331
+ var _v$3 = props.justifyContent,
332
+ _v$4 = props.api.theme.current.textMuted;
333
+ _v$3 !== _p$.e && (_p$.e = _$setProp(_el$5, "justifyContent", _v$3, _p$.e));
334
+ _v$4 !== _p$.t && (_p$.t = _$setProp(_el$6, "fg", _v$4, _p$.t));
331
335
  return _p$;
332
336
  }, {
333
337
  e: undefined,
334
338
  t: undefined
335
339
  });
336
- return _el$0;
340
+ return _el$5;
337
341
  })();
338
342
  return _$createComponent(Show, {
339
343
  get when() {
@@ -348,13 +352,13 @@ function CompactStatusLine(props) {
348
352
  return line();
349
353
  },
350
354
  get children() {
351
- var _el$10 = _$createElement("box"),
352
- _el$11 = _$createElement("text");
353
- _$insertNode(_el$10, _el$11);
354
- _$setProp(_el$10, "gap", 0);
355
- _$insertNode(_el$11, _$createTextNode(` `));
356
- _$insert(_el$10, line, null);
357
- return _el$10;
355
+ var _el$7 = _$createElement("box"),
356
+ _el$8 = _$createElement("text");
357
+ _$insertNode(_el$7, _el$8);
358
+ _$setProp(_el$7, "gap", 0);
359
+ _$insertNode(_el$8, _$createTextNode(` `));
360
+ _$insert(_el$7, line, null);
361
+ return _el$7;
358
362
  }
359
363
  });
360
364
  }
@@ -364,9 +368,9 @@ function SessionPromptWithCompactStatus(props) {
364
368
  const resource = useSessionQuotaResource(props.api, () => props.sessionID, props.initialLoads);
365
369
  const panel = () => resource().compact();
366
370
  return (() => {
367
- var _el$13 = _$createElement("box");
368
- _$setProp(_el$13, "gap", 0);
369
- _$insert(_el$13, _$createComponent(props.api.ui.Prompt, {
371
+ var _el$0 = _$createElement("box");
372
+ _$setProp(_el$0, "gap", 0);
373
+ _$insert(_el$0, _$createComponent(props.api.ui.Prompt, {
370
374
  get sessionID() {
371
375
  return props.sessionID;
372
376
  },
@@ -384,17 +388,16 @@ function SessionPromptWithCompactStatus(props) {
384
388
  typeof _ref$ === "function" ? _ref$(r$) : props.promptRef = r$;
385
389
  }
386
390
  }), null);
387
- _$insert(_el$13, _$createComponent(CompactStatusLine, {
391
+ _$insert(_el$0, _$createComponent(CompactStatusLine, {
388
392
  get api() {
389
393
  return props.api;
390
394
  },
391
395
  panel: panel,
392
396
  justifyContent: "flex-end"
393
397
  }), null);
394
- return _el$13;
398
+ return _el$0;
395
399
  })();
396
400
  }
397
- const PROMPT_BAR_WIDTH = 12;
398
401
  function shouldRenderPromptBar(bar) {
399
402
  return bar.status === "ready" && Boolean(bar.entry);
400
403
  }
@@ -440,23 +443,20 @@ function buildPromptBarParts(params) {
440
443
  if (!shouldRenderPromptBar(bar)) return undefined;
441
444
  const entry = bar.entry;
442
445
  if (!entry) return undefined;
443
- const reset = entry.resetTimeIso ? formatResetCountdown(entry.resetTimeIso, isResetTimeDecimals(bar.resetTimeDecimals) ? {
444
- compactRounded: true,
445
- decimals: bar.resetTimeDecimals
446
- } : {
447
- spaced: bar.resetTimeSpaced
448
- }) : "";
449
- const runway = formatQuotaRunway(entry.runway);
450
446
  const hasPercent = Number.isFinite(entry.percentRemaining);
451
447
  if (entry.semanticSegment && !hasPercent) {
448
+ const reset = entry.resetTimeIso ? formatResetCountdown(entry.resetTimeIso, isResetTimeDecimals(bar.resetTimeDecimals) ? {
449
+ compactRounded: true,
450
+ decimals: bar.resetTimeDecimals
451
+ } : {
452
+ spaced: bar.resetTimeSpaced
453
+ }) : "";
452
454
  return {
453
- label: entry.semanticSegment,
455
+ label: resolvePromptBarLabel(entry),
454
456
  barText: "",
455
457
  meta: reset
456
458
  };
457
459
  }
458
- const windowLabel = entry.semanticSegment ?? extractSingleWindowWindowLabel(entry.label ?? "") ?? extractSingleWindowWindowLabel(entry.name ?? "") ?? "Quota";
459
- const percent = formatDisplayedPercentLabel(entry.percentRemaining ?? 0, bar.percentDisplayMode ?? "remaining", "bare");
460
460
  const p = Math.min(100, resolveDisplayedPercent(entry.percentRemaining ?? 0, bar.percentDisplayMode ?? "remaining"));
461
461
  const filled = Math.round(p / 100 * PROMPT_BAR_WIDTH);
462
462
  const empty = PROMPT_BAR_WIDTH - filled;
@@ -472,9 +472,16 @@ function buildPromptBarParts(params) {
472
472
  barText = cells.join("") + "░".repeat(empty);
473
473
  }
474
474
  return {
475
- label: windowLabel,
475
+ label: resolvePromptBarLabel(entry),
476
476
  barText,
477
- meta: entry.semanticSegment ? [reset, runway ? `r/o ${runway}` : ""].filter(Boolean).join(" | ") : [percent, reset, runway ? `r/o ${runway}` : ""].filter(Boolean).join(" | ")
477
+ meta: formatPromptBarPercentMeta({
478
+ percentRemaining: entry.percentRemaining ?? 0,
479
+ percentDisplayMode: bar.percentDisplayMode,
480
+ resetTimeIso: entry.resetTimeIso,
481
+ resetTimeDecimals: bar.resetTimeDecimals,
482
+ resetTimeSpaced: bar.resetTimeSpaced,
483
+ runway: entry.runway
484
+ })
478
485
  };
479
486
  }
480
487
  function PromptQuotaHint(props) {
@@ -488,36 +495,36 @@ function PromptQuotaHint(props) {
488
495
  return parts();
489
496
  },
490
497
  get children() {
491
- var _el$14 = _$createElement("box"),
492
- _el$15 = _$createElement("text"),
493
- _el$16 = _$createElement("text"),
494
- _el$17 = _$createElement("text");
495
- _$insertNode(_el$14, _el$15);
496
- _$insertNode(_el$14, _el$16);
497
- _$insertNode(_el$14, _el$17);
498
- _$setProp(_el$14, "flexDirection", "row");
499
- _$setProp(_el$14, "justifyContent", "flex-end");
500
- _$setProp(_el$14, "gap", 1);
501
- _$setProp(_el$15, "wrapMode", "none");
502
- _$insert(_el$15, label);
503
- _$setProp(_el$16, "wrapMode", "none");
504
- _$insert(_el$16, bar);
505
- _$setProp(_el$17, "wrapMode", "none");
506
- _$insert(_el$17, meta);
498
+ var _el$1 = _$createElement("box"),
499
+ _el$10 = _$createElement("text"),
500
+ _el$11 = _$createElement("text"),
501
+ _el$12 = _$createElement("text");
502
+ _$insertNode(_el$1, _el$10);
503
+ _$insertNode(_el$1, _el$11);
504
+ _$insertNode(_el$1, _el$12);
505
+ _$setProp(_el$1, "flexDirection", "row");
506
+ _$setProp(_el$1, "justifyContent", "flex-end");
507
+ _$setProp(_el$1, "gap", 1);
508
+ _$setProp(_el$10, "wrapMode", "none");
509
+ _$insert(_el$10, label);
510
+ _$setProp(_el$11, "wrapMode", "none");
511
+ _$insert(_el$11, bar);
512
+ _$setProp(_el$12, "wrapMode", "none");
513
+ _$insert(_el$12, meta);
507
514
  _$effect(_p$ => {
508
- var _v$3 = props.api.theme.current.textMuted,
509
- _v$4 = barColor(),
510
- _v$5 = props.api.theme.current.textMuted;
511
- _v$3 !== _p$.e && (_p$.e = _$setProp(_el$15, "fg", _v$3, _p$.e));
512
- _v$4 !== _p$.t && (_p$.t = _$setProp(_el$16, "fg", _v$4, _p$.t));
513
- _v$5 !== _p$.a && (_p$.a = _$setProp(_el$17, "fg", _v$5, _p$.a));
515
+ var _v$5 = props.api.theme.current.textMuted,
516
+ _v$6 = barColor(),
517
+ _v$7 = props.api.theme.current.textMuted;
518
+ _v$5 !== _p$.e && (_p$.e = _$setProp(_el$10, "fg", _v$5, _p$.e));
519
+ _v$6 !== _p$.t && (_p$.t = _$setProp(_el$11, "fg", _v$6, _p$.t));
520
+ _v$7 !== _p$.a && (_p$.a = _$setProp(_el$12, "fg", _v$7, _p$.a));
514
521
  return _p$;
515
522
  }, {
516
523
  e: undefined,
517
524
  t: undefined,
518
525
  a: undefined
519
526
  });
520
- return _el$14;
527
+ return _el$1;
521
528
  }
522
529
  });
523
530
  }
@@ -535,9 +542,9 @@ function SessionQuotaPromptBar(props) {
535
542
  onCleanup(() => clearInterval(interval));
536
543
  });
537
544
  return (() => {
538
- var _el$18 = _$createElement("box");
539
- _$setProp(_el$18, "gap", 0);
540
- _$insert(_el$18, _$createComponent(props.api.ui.Prompt, {
545
+ var _el$13 = _$createElement("box");
546
+ _$setProp(_el$13, "gap", 0);
547
+ _$insert(_el$13, _$createComponent(props.api.ui.Prompt, {
541
548
  get sessionID() {
542
549
  return props.sessionID;
543
550
  },
@@ -555,7 +562,7 @@ function SessionQuotaPromptBar(props) {
555
562
  typeof _ref$2 === "function" ? _ref$2(r$) : props.promptRef = r$;
556
563
  }
557
564
  }), null);
558
- _$insert(_el$18, _$createComponent(PromptQuotaHint, {
565
+ _$insert(_el$13, _$createComponent(PromptQuotaHint, {
559
566
  get api() {
560
567
  return props.api;
561
568
  },
@@ -563,7 +570,7 @@ function SessionQuotaPromptBar(props) {
563
570
  running: running,
564
571
  phase: phase
565
572
  }), null);
566
- return _el$18;
573
+ return _el$13;
567
574
  })();
568
575
  }
569
576
  function HomeBottomView(props) {
@@ -573,35 +580,35 @@ function HomeBottomView(props) {
573
580
  const compact = () => resource.bottom().compact;
574
581
  const visible = () => shouldRenderHomeBottom(resource.bottom());
575
582
  return (() => {
576
- var _el$19 = _$createElement("box");
577
- _$setProp(_el$19, "gap", 0);
578
- _$insert(_el$19, _$createComponent(Show, {
583
+ var _el$14 = _$createElement("box");
584
+ _$setProp(_el$14, "gap", 0);
585
+ _$insert(_el$14, _$createComponent(Show, {
579
586
  get when() {
580
587
  return visible();
581
588
  },
582
589
  get children() {
583
- var _el$20 = _$createElement("text");
584
- _$insertNode(_el$20, _$createTextNode(` `));
585
- return _el$20;
590
+ var _el$15 = _$createElement("text");
591
+ _$insertNode(_el$15, _$createTextNode(` `));
592
+ return _el$15;
586
593
  }
587
594
  }), null);
588
- _$insert(_el$19, _$createComponent(Show, {
595
+ _$insert(_el$14, _$createComponent(Show, {
589
596
  get when() {
590
597
  return _$memo(() => !!visible())() && announcement();
591
598
  },
592
599
  get children() {
593
- var _el$22 = _$createElement("box"),
594
- _el$23 = _$createElement("text");
595
- _$insertNode(_el$22, _el$23);
596
- _$setProp(_el$22, "flexDirection", "row");
597
- _$setProp(_el$22, "justifyContent", "center");
598
- _$setProp(_el$23, "wrapMode", "none");
599
- _$insert(_el$23, announcement);
600
- _$effect(_$p => _$setProp(_el$23, "fg", props.api.theme.current.textMuted, _$p));
601
- return _el$22;
600
+ var _el$17 = _$createElement("box"),
601
+ _el$18 = _$createElement("text");
602
+ _$insertNode(_el$17, _el$18);
603
+ _$setProp(_el$17, "flexDirection", "row");
604
+ _$setProp(_el$17, "justifyContent", "center");
605
+ _$setProp(_el$18, "wrapMode", "none");
606
+ _$insert(_el$18, announcement);
607
+ _$effect(_$p => _$setProp(_el$18, "fg", props.api.theme.current.textMuted, _$p));
608
+ return _el$17;
602
609
  }
603
610
  }), null);
604
- _$insert(_el$19, _$createComponent(Show, {
611
+ _$insert(_el$14, _$createComponent(Show, {
605
612
  get when() {
606
613
  return visible();
607
614
  },
@@ -615,7 +622,7 @@ function HomeBottomView(props) {
615
622
  });
616
623
  }
617
624
  }), null);
618
- return _el$19;
625
+ return _el$14;
619
626
  })();
620
627
  }
621
628
  function getActiveTuiSessionID(api) {
@@ -633,117 +640,117 @@ function getTuiCommandArguments(input) {
633
640
  }
634
641
  function CommandLoadingDialog(props) {
635
642
  return (() => {
636
- var _el$24 = _$createElement("box"),
637
- _el$25 = _$createElement("text"),
638
- _el$26 = _$createElement("b"),
639
- _el$27 = _$createElement("text");
640
- _$insertNode(_el$24, _el$25);
641
- _$insertNode(_el$24, _el$27);
642
- _$setProp(_el$24, "gap", 1);
643
- _$setProp(_el$24, "paddingLeft", 2);
644
- _$setProp(_el$24, "paddingRight", 2);
645
- _$setProp(_el$24, "paddingBottom", 1);
646
- _$insertNode(_el$25, _el$26);
647
- _$insert(_el$26, () => props.title);
648
- _$insertNode(_el$27, _$createTextNode(`Loading deterministic local output…`));
643
+ var _el$19 = _$createElement("box"),
644
+ _el$20 = _$createElement("text"),
645
+ _el$21 = _$createElement("b"),
646
+ _el$22 = _$createElement("text");
647
+ _$insertNode(_el$19, _el$20);
648
+ _$insertNode(_el$19, _el$22);
649
+ _$setProp(_el$19, "gap", 1);
650
+ _$setProp(_el$19, "paddingLeft", 2);
651
+ _$setProp(_el$19, "paddingRight", 2);
652
+ _$setProp(_el$19, "paddingBottom", 1);
653
+ _$insertNode(_el$20, _el$21);
654
+ _$insert(_el$21, () => props.title);
655
+ _$insertNode(_el$22, _$createTextNode(`Loading deterministic local output…`));
649
656
  _$effect(_p$ => {
650
- var _v$6 = props.api.theme.current.text,
651
- _v$7 = props.api.theme.current.textMuted;
652
- _v$6 !== _p$.e && (_p$.e = _$setProp(_el$25, "fg", _v$6, _p$.e));
653
- _v$7 !== _p$.t && (_p$.t = _$setProp(_el$27, "fg", _v$7, _p$.t));
657
+ var _v$8 = props.api.theme.current.text,
658
+ _v$9 = props.api.theme.current.textMuted;
659
+ _v$8 !== _p$.e && (_p$.e = _$setProp(_el$20, "fg", _v$8, _p$.e));
660
+ _v$9 !== _p$.t && (_p$.t = _$setProp(_el$22, "fg", _v$9, _p$.t));
654
661
  return _p$;
655
662
  }, {
656
663
  e: undefined,
657
664
  t: undefined
658
665
  });
659
- return _el$24;
666
+ return _el$19;
660
667
  })();
661
668
  }
662
669
  function CommandOutputDialog(props) {
663
670
  const lines = () => props.output.split("\n");
664
671
  const bodyHeight = () => Math.min(28, Math.max(6, lines().length));
665
672
  return (() => {
666
- var _el$29 = _$createElement("box"),
667
- _el$30 = _$createElement("text"),
668
- _el$31 = _$createElement("b"),
669
- _el$32 = _$createElement("scrollbox"),
670
- _el$33 = _$createElement("box"),
671
- _el$34 = _$createElement("text");
672
- _$insertNode(_el$29, _el$30);
673
- _$insertNode(_el$29, _el$32);
674
- _$insertNode(_el$29, _el$34);
675
- _$setProp(_el$29, "gap", 1);
676
- _$setProp(_el$29, "width", "100%");
677
- _$setProp(_el$29, "flexGrow", 1);
678
- _$setProp(_el$29, "paddingLeft", 2);
679
- _$setProp(_el$29, "paddingRight", 2);
680
- _$setProp(_el$29, "paddingBottom", 1);
681
- _$insertNode(_el$30, _el$31);
682
- _$insert(_el$31, () => props.title);
683
- _$insertNode(_el$32, _el$33);
684
- _$setProp(_el$32, "width", "100%");
685
- _$setProp(_el$32, "flexGrow", 1);
686
- _$setProp(_el$32, "maxHeight", 28);
687
- _$setProp(_el$33, "gap", 0);
688
- _$setProp(_el$33, "width", "100%");
689
- _$setProp(_el$33, "minWidth", 0);
690
- _$insert(_el$33, () => lines().map(line => (() => {
691
- var _el$36 = _$createElement("text");
692
- _$setProp(_el$36, "wrapMode", "word");
693
- _$setProp(_el$36, "width", "100%");
694
- _$insert(_el$36, line || " ");
695
- _$effect(_$p => _$setProp(_el$36, "fg", props.api.theme.current.text, _$p));
696
- return _el$36;
673
+ var _el$24 = _$createElement("box"),
674
+ _el$25 = _$createElement("text"),
675
+ _el$26 = _$createElement("b"),
676
+ _el$27 = _$createElement("scrollbox"),
677
+ _el$28 = _$createElement("box"),
678
+ _el$29 = _$createElement("text");
679
+ _$insertNode(_el$24, _el$25);
680
+ _$insertNode(_el$24, _el$27);
681
+ _$insertNode(_el$24, _el$29);
682
+ _$setProp(_el$24, "gap", 1);
683
+ _$setProp(_el$24, "width", "100%");
684
+ _$setProp(_el$24, "flexGrow", 1);
685
+ _$setProp(_el$24, "paddingLeft", 2);
686
+ _$setProp(_el$24, "paddingRight", 2);
687
+ _$setProp(_el$24, "paddingBottom", 1);
688
+ _$insertNode(_el$25, _el$26);
689
+ _$insert(_el$26, () => props.title);
690
+ _$insertNode(_el$27, _el$28);
691
+ _$setProp(_el$27, "width", "100%");
692
+ _$setProp(_el$27, "flexGrow", 1);
693
+ _$setProp(_el$27, "maxHeight", 28);
694
+ _$setProp(_el$28, "gap", 0);
695
+ _$setProp(_el$28, "width", "100%");
696
+ _$setProp(_el$28, "minWidth", 0);
697
+ _$insert(_el$28, () => lines().map(line => (() => {
698
+ var _el$31 = _$createElement("text");
699
+ _$setProp(_el$31, "wrapMode", "word");
700
+ _$setProp(_el$31, "width", "100%");
701
+ _$insert(_el$31, line || " ");
702
+ _$effect(_$p => _$setProp(_el$31, "fg", props.api.theme.current.text, _$p));
703
+ return _el$31;
697
704
  })()));
698
- _$insertNode(_el$34, _$createTextNode(`esc closes`));
705
+ _$insertNode(_el$29, _$createTextNode(`esc closes`));
699
706
  _$effect(_p$ => {
700
- var _v$8 = props.api.theme.current.text,
701
- _v$9 = bodyHeight(),
702
- _v$0 = props.api.theme.current.textMuted;
703
- _v$8 !== _p$.e && (_p$.e = _$setProp(_el$30, "fg", _v$8, _p$.e));
704
- _v$9 !== _p$.t && (_p$.t = _$setProp(_el$32, "minHeight", _v$9, _p$.t));
705
- _v$0 !== _p$.a && (_p$.a = _$setProp(_el$34, "fg", _v$0, _p$.a));
707
+ var _v$0 = props.api.theme.current.text,
708
+ _v$1 = bodyHeight(),
709
+ _v$10 = props.api.theme.current.textMuted;
710
+ _v$0 !== _p$.e && (_p$.e = _$setProp(_el$25, "fg", _v$0, _p$.e));
711
+ _v$1 !== _p$.t && (_p$.t = _$setProp(_el$27, "minHeight", _v$1, _p$.t));
712
+ _v$10 !== _p$.a && (_p$.a = _$setProp(_el$29, "fg", _v$10, _p$.a));
706
713
  return _p$;
707
714
  }, {
708
715
  e: undefined,
709
716
  t: undefined,
710
717
  a: undefined
711
718
  });
712
- return _el$29;
719
+ return _el$24;
713
720
  })();
714
721
  }
715
722
  function CommandErrorDialog(props) {
716
723
  const message = props.error instanceof Error ? props.error.message : String(props.error);
717
724
  return (() => {
718
- var _el$37 = _$createElement("box"),
719
- _el$38 = _$createElement("text"),
720
- _el$39 = _$createElement("b"),
721
- _el$40 = _$createElement("text"),
722
- _el$42 = _$createElement("text"),
723
- _el$43 = _$createElement("text");
724
- _$insertNode(_el$37, _el$38);
725
- _$insertNode(_el$37, _el$40);
726
- _$insertNode(_el$37, _el$42);
727
- _$insertNode(_el$37, _el$43);
728
- _$setProp(_el$37, "gap", 1);
729
- _$setProp(_el$37, "paddingLeft", 2);
730
- _$setProp(_el$37, "paddingRight", 2);
731
- _$setProp(_el$37, "paddingBottom", 1);
732
- _$insertNode(_el$38, _el$39);
733
- _$insert(_el$39, () => props.title);
734
- _$insertNode(_el$40, _$createTextNode(`OpenCode Quota command failed.`));
735
- _$setProp(_el$42, "wrapMode", "none");
736
- _$insert(_el$42, message || "Unknown error");
737
- _$insertNode(_el$43, _$createTextNode(`esc closes`));
725
+ var _el$32 = _$createElement("box"),
726
+ _el$33 = _$createElement("text"),
727
+ _el$34 = _$createElement("b"),
728
+ _el$35 = _$createElement("text"),
729
+ _el$37 = _$createElement("text"),
730
+ _el$38 = _$createElement("text");
731
+ _$insertNode(_el$32, _el$33);
732
+ _$insertNode(_el$32, _el$35);
733
+ _$insertNode(_el$32, _el$37);
734
+ _$insertNode(_el$32, _el$38);
735
+ _$setProp(_el$32, "gap", 1);
736
+ _$setProp(_el$32, "paddingLeft", 2);
737
+ _$setProp(_el$32, "paddingRight", 2);
738
+ _$setProp(_el$32, "paddingBottom", 1);
739
+ _$insertNode(_el$33, _el$34);
740
+ _$insert(_el$34, () => props.title);
741
+ _$insertNode(_el$35, _$createTextNode(`OpenCode Quota command failed.`));
742
+ _$setProp(_el$37, "wrapMode", "none");
743
+ _$insert(_el$37, message || "Unknown error");
744
+ _$insertNode(_el$38, _$createTextNode(`esc closes`));
738
745
  _$effect(_p$ => {
739
- var _v$1 = props.api.theme.current.text,
740
- _v$10 = props.api.theme.current.text,
741
- _v$11 = props.api.theme.current.textMuted,
742
- _v$12 = props.api.theme.current.textMuted;
743
- _v$1 !== _p$.e && (_p$.e = _$setProp(_el$38, "fg", _v$1, _p$.e));
744
- _v$10 !== _p$.t && (_p$.t = _$setProp(_el$40, "fg", _v$10, _p$.t));
745
- _v$11 !== _p$.a && (_p$.a = _$setProp(_el$42, "fg", _v$11, _p$.a));
746
- _v$12 !== _p$.o && (_p$.o = _$setProp(_el$43, "fg", _v$12, _p$.o));
746
+ var _v$11 = props.api.theme.current.text,
747
+ _v$12 = props.api.theme.current.text,
748
+ _v$13 = props.api.theme.current.textMuted,
749
+ _v$14 = props.api.theme.current.textMuted;
750
+ _v$11 !== _p$.e && (_p$.e = _$setProp(_el$33, "fg", _v$11, _p$.e));
751
+ _v$12 !== _p$.t && (_p$.t = _$setProp(_el$35, "fg", _v$12, _p$.t));
752
+ _v$13 !== _p$.a && (_p$.a = _$setProp(_el$37, "fg", _v$13, _p$.a));
753
+ _v$14 !== _p$.o && (_p$.o = _$setProp(_el$38, "fg", _v$14, _p$.o));
747
754
  return _p$;
748
755
  }, {
749
756
  e: undefined,
@@ -751,7 +758,7 @@ function CommandErrorDialog(props) {
751
758
  a: undefined,
752
759
  o: undefined
753
760
  });
754
- return _el$37;
761
+ return _el$32;
755
762
  })();
756
763
  }
757
764
  function getCommandPromptCopy(spec) {
@@ -795,11 +802,11 @@ async function runQuotaDialogCommandAsync(api, command, commandDisplay, rawInput
795
802
  return prompt.placeholder;
796
803
  },
797
804
  description: () => (() => {
798
- var _el$45 = _$createElement("text");
799
- _$setProp(_el$45, "wrapMode", "word");
800
- _$insert(_el$45, () => prompt.description);
801
- _$effect(_$p => _$setProp(_el$45, "fg", api.theme.current.textMuted, _$p));
802
- return _el$45;
805
+ var _el$40 = _$createElement("text");
806
+ _$setProp(_el$40, "wrapMode", "word");
807
+ _$insert(_el$40, () => prompt.description);
808
+ _$effect(_$p => _$setProp(_el$40, "fg", api.theme.current.textMuted, _$p));
809
+ return _el$40;
803
810
  })(),
804
811
  onCancel: () => api.ui.dialog.clear(),
805
812
  onConfirm: value => {