@slkiser/opencode-quota 5.0.0-beta.1 → 5.0.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 (54) hide show
  1. package/README.md +72 -131
  2. package/dist/lib/format-utils.d.ts +0 -4
  3. package/dist/lib/format-utils.d.ts.map +1 -1
  4. package/dist/lib/format-utils.js +0 -3
  5. package/dist/lib/format-utils.js.map +1 -1
  6. package/dist/lib/init-installer.js +2 -2
  7. package/dist/lib/init-installer.js.map +1 -1
  8. package/dist/lib/markdown-table.d.ts +36 -0
  9. package/dist/lib/markdown-table.d.ts.map +1 -1
  10. package/dist/lib/markdown-table.js +56 -0
  11. package/dist/lib/markdown-table.js.map +1 -1
  12. package/dist/lib/opencode-auth.d.ts.map +1 -1
  13. package/dist/lib/opencode-auth.js +4 -3
  14. package/dist/lib/opencode-auth.js.map +1 -1
  15. package/dist/lib/quota-columns.d.ts +38 -0
  16. package/dist/lib/quota-columns.d.ts.map +1 -0
  17. package/dist/lib/quota-columns.js +129 -0
  18. package/dist/lib/quota-columns.js.map +1 -0
  19. package/dist/lib/quota-command-format.d.ts +11 -0
  20. package/dist/lib/quota-command-format.d.ts.map +1 -1
  21. package/dist/lib/quota-command-format.js +80 -27
  22. package/dist/lib/quota-command-format.js.map +1 -1
  23. package/dist/lib/quota-dialog-command-specs.d.ts +4 -0
  24. package/dist/lib/quota-dialog-command-specs.d.ts.map +1 -1
  25. package/dist/lib/quota-dialog-command-specs.js.map +1 -1
  26. package/dist/lib/quota-dialog-commands.d.ts +2 -0
  27. package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
  28. package/dist/lib/quota-dialog-commands.js +114 -101
  29. package/dist/lib/quota-dialog-commands.js.map +1 -1
  30. package/dist/lib/quota-report-message.d.ts +3 -2
  31. package/dist/lib/quota-report-message.d.ts.map +1 -1
  32. package/dist/lib/quota-report-message.js +7 -11
  33. package/dist/lib/quota-report-message.js.map +1 -1
  34. package/dist/lib/quota-stats-format.d.ts +8 -3
  35. package/dist/lib/quota-stats-format.d.ts.map +1 -1
  36. package/dist/lib/quota-stats-format.js +36 -37
  37. package/dist/lib/quota-stats-format.js.map +1 -1
  38. package/dist/lib/quota-status.d.ts +5 -2
  39. package/dist/lib/quota-status.d.ts.map +1 -1
  40. package/dist/lib/quota-status.js +9 -5
  41. package/dist/lib/quota-status.js.map +1 -1
  42. package/dist/lib/report-document.d.ts +56 -2
  43. package/dist/lib/report-document.d.ts.map +1 -1
  44. package/dist/lib/report-document.js +105 -24
  45. package/dist/lib/report-document.js.map +1 -1
  46. package/dist/plugin.d.ts.map +1 -1
  47. package/dist/plugin.js +5 -1
  48. package/dist/plugin.js.map +1 -1
  49. package/dist/tui-v2.d.ts.map +1 -1
  50. package/dist/tui-v2.jsx +149 -23
  51. package/dist/tui-v2.jsx.map +1 -1
  52. package/dist/tui.d.ts.map +1 -1
  53. package/dist/tui.js +370 -98
  54. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"report-document.d.ts","sourceRoot":"","sources":["../../src/lib/report-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AA6DF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CA8BtE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CA+BrE"}
1
+ {"version":3,"file":"report-document.d.ts","sourceRoot":"","sources":["../../src/lib/report-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,yFAAyF;IACzF,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;AACpC;;;;GAIG;GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB,GACD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AAcF,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,EAAE,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,aAAa,CAMhB;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAE5D;AAsED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAwBxE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAMpD;AAwCD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAmBtE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAoBrE"}
@@ -1,8 +1,9 @@
1
- import { renderCommandHeading } from "./format-utils.js";
1
+ import { formatLocalCallTimestamp } from "./format-utils.js";
2
2
  import { renderMarkdownTable } from "./markdown-table.js";
3
3
  function hasBlockContent(block) {
4
4
  switch (block.kind) {
5
5
  case "lines":
6
+ case "quota":
6
7
  return block.lines.length > 0;
7
8
  case "kv":
8
9
  return block.rows.length > 0;
@@ -10,10 +11,102 @@ function hasBlockContent(block) {
10
11
  return block.headers.length > 0 || block.rows.length > 0;
11
12
  }
12
13
  }
13
- function getRenderableBlocks(section) {
14
- return section.blocks.filter(hasBlockContent);
14
+ /** The sections every renderer shows: empty blocks dropped, then sections left with nothing. */
15
+ export function renderableSections(document) {
16
+ return document.sections
17
+ .map((section) => ({ ...section, blocks: section.blocks.filter(hasBlockContent) }))
18
+ .filter((section) => section.title || section.blocks.length > 0);
19
+ }
20
+ /**
21
+ * A command report's heading: "# <title> <time>" in text, "<detail> · <time>" in the dialog.
22
+ * The title echoes the command, e.g. "Quota Status (opencode-quota v5.0.0) (/quota_status)";
23
+ * the detail repeats the facts in it that the dialog title lacks, e.g. "opencode-quota v5.0.0".
24
+ */
25
+ export function commandHeading(params) {
26
+ const time = formatLocalCallTimestamp(params.generatedAtMs);
27
+ return {
28
+ line: `# ${params.title} ${time}`,
29
+ subtitle: params.detail ? `${params.detail} · ${time}` : time,
30
+ };
31
+ }
32
+ /** A document of one plain message; it renders back to the same text. */
33
+ export function messageDocument(text) {
34
+ return { sections: [{ id: "message", blocks: [{ kind: "lines", lines: text.split("\n") }] }] };
35
+ }
36
+ function isObject(value) {
37
+ return typeof value === "object" && value !== null && !Array.isArray(value);
38
+ }
39
+ function isStringArray(value) {
40
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
15
41
  }
16
- function renderKvRow(row) {
42
+ function isOptional(value, type) {
43
+ return value === undefined || typeof value === type;
44
+ }
45
+ function isReportKvRow(value) {
46
+ return (isObject(value) &&
47
+ typeof value.key === "string" &&
48
+ isOptional(value.value, "string") &&
49
+ (value.indent === undefined || value.indent === 0 || value.indent === 1) &&
50
+ isOptional(value.trailingColon, "boolean"));
51
+ }
52
+ function isReportQuotaRow(value) {
53
+ return (isObject(value) &&
54
+ typeof value.label === "string" &&
55
+ isOptional(value.barPercent, "number") &&
56
+ typeof value.value === "string" &&
57
+ isOptional(value.usage, "string") &&
58
+ isOptional(value.reset, "string") &&
59
+ isStringArray(value.notes));
60
+ }
61
+ function isReportBlock(value) {
62
+ if (!isObject(value))
63
+ return false;
64
+ switch (value.kind) {
65
+ case "lines":
66
+ return isStringArray(value.lines);
67
+ case "quota":
68
+ return (typeof value.provider === "string" &&
69
+ (value.percentMode === "remaining" || value.percentMode === "used") &&
70
+ isStringArray(value.lines) &&
71
+ Array.isArray(value.rows) &&
72
+ value.rows.every(isReportQuotaRow));
73
+ case "kv":
74
+ return Array.isArray(value.rows) && value.rows.every(isReportKvRow);
75
+ case "table":
76
+ return (isStringArray(value.headers) &&
77
+ (value.fullHeaders === undefined ||
78
+ (isStringArray(value.fullHeaders) &&
79
+ value.fullHeaders.length === value.headers.length)) &&
80
+ Array.isArray(value.rows) &&
81
+ value.rows.every(isStringArray) &&
82
+ Array.isArray(value.aligns) &&
83
+ value.aligns.every((align) => align === "left" || align === "right") &&
84
+ (value.widthMode === undefined ||
85
+ value.widthMode === "raw" ||
86
+ value.widthMode === "markdown-conceal"));
87
+ default:
88
+ return false;
89
+ }
90
+ }
91
+ /** Checks the shape of a document read back from stored message metadata. */
92
+ export function isReportDocument(value) {
93
+ if (!isObject(value))
94
+ return false;
95
+ const heading = value.heading;
96
+ if (heading !== undefined &&
97
+ !(isObject(heading) &&
98
+ typeof heading.line === "string" &&
99
+ isOptional(heading.subtitle, "string"))) {
100
+ return false;
101
+ }
102
+ return (Array.isArray(value.sections) &&
103
+ value.sections.every((section) => isObject(section) &&
104
+ typeof section.id === "string" &&
105
+ isOptional(section.title, "string") &&
106
+ Array.isArray(section.blocks) &&
107
+ section.blocks.every(isReportBlock)));
108
+ }
109
+ export function renderKvRow(row) {
17
110
  const indent = row.indent === 1 ? " " : "";
18
111
  if (row.value !== undefined) {
19
112
  return `${indent}- ${row.key}: ${row.value}`;
@@ -23,6 +116,7 @@ function renderKvRow(row) {
23
116
  function renderPlainTextBlock(block) {
24
117
  switch (block.kind) {
25
118
  case "lines":
119
+ case "quota":
26
120
  return block.lines;
27
121
  case "kv":
28
122
  return block.rows.map(renderKvRow);
@@ -40,6 +134,7 @@ function renderPlainTextBlock(block) {
40
134
  function renderMarkdownBlock(block) {
41
135
  switch (block.kind) {
42
136
  case "lines":
137
+ case "quota":
43
138
  return block.lines;
44
139
  case "kv":
45
140
  return block.rows.map(renderKvRow);
@@ -56,16 +151,9 @@ function renderMarkdownBlock(block) {
56
151
  }
57
152
  export function renderPlainTextReport(document) {
58
153
  const lines = [];
59
- if (document.heading) {
60
- lines.push(renderCommandHeading({
61
- title: document.heading.title,
62
- generatedAtMs: document.heading.generatedAtMs,
63
- }));
64
- }
65
- const sections = document.sections
66
- .map((section) => ({ ...section, blocks: getRenderableBlocks(section) }))
67
- .filter((section) => section.title || section.blocks.length > 0);
68
- for (const section of sections) {
154
+ if (document.heading)
155
+ lines.push(document.heading.line);
156
+ for (const section of renderableSections(document)) {
69
157
  if (lines.length > 0)
70
158
  lines.push("");
71
159
  if (section.title) {
@@ -81,16 +169,9 @@ export function renderPlainTextReport(document) {
81
169
  }
82
170
  export function renderMarkdownReport(document) {
83
171
  const lines = [];
84
- if (document.heading) {
85
- lines.push(renderCommandHeading({
86
- title: document.heading.title,
87
- generatedAtMs: document.heading.generatedAtMs,
88
- }));
89
- }
90
- const sections = document.sections
91
- .map((section) => ({ ...section, blocks: getRenderableBlocks(section) }))
92
- .filter((section) => section.title || section.blocks.length > 0);
93
- for (const section of sections) {
172
+ if (document.heading)
173
+ lines.push(document.heading.line);
174
+ for (const section of renderableSections(document)) {
94
175
  if (lines.length > 0)
95
176
  lines.push("");
96
177
  if (section.title) {
@@ -1 +1 @@
1
- {"version":3,"file":"report-document.js","sourceRoot":"","sources":["../../src/lib/report-document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-document.js","sourceRoot":"","sources":["../../src/lib/report-document.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA8E1C,eAAO,MAAM,gBAAgB,eAyM3B,CAAC;eAEY,gBAAgB"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA+E1C,eAAO,MAAM,gBAAgB,eA8M3B,CAAC;eAEY,gBAAgB"}
package/dist/plugin.js CHANGED
@@ -12,6 +12,7 @@ import { QUOTA_DIALOG_COMMANDS, } from "./lib/quota-dialog-command-specs.js";
12
12
  import { buildQuotaDialogCommandOutput } from "./lib/quota-dialog-commands.js";
13
13
  import { containsQuotaReport, formatQuotaReportMessage, QUOTA_REPORT_METADATA_KEY, removeQuotaReports, } from "./lib/quota-report-message.js";
14
14
  import { getQuotaFooter, getQuotaMessage, writeQuotaExportIfEnabled, } from "./lib/quota-surface-data.js";
15
+ import { messageDocument } from "./lib/report-document.js";
15
16
  import { QuotaRpc } from "./rpc.js";
16
17
  function hasQuotaReportText(part) {
17
18
  return part.type === "text" && typeof part.text === "string" && containsQuotaReport(part.text);
@@ -128,11 +129,13 @@ export const QuotaToastPlugin = Plugin.define({
128
129
  catch (error) {
129
130
  // Return the reason as output so the TUI shows it instead of OpenCode's rpc.internal.
130
131
  const spec = QUOTA_DIALOG_COMMANDS.find((item) => item.id === input.command);
132
+ const output = sanitizeDisplayText(error instanceof Error ? error.message : String(error));
131
133
  return {
132
134
  state: "output",
133
135
  command: input.command,
134
136
  title: spec.title,
135
- output: sanitizeDisplayText(error instanceof Error ? error.message : String(error)),
137
+ output,
138
+ document: messageDocument(output),
136
139
  dialogSize: spec.dialogSize,
137
140
  };
138
141
  }
@@ -176,6 +179,7 @@ export const QuotaToastPlugin = Plugin.define({
176
179
  command: spec.id,
177
180
  title: result.title,
178
181
  at: Date.now(),
182
+ document: result.document,
179
183
  };
180
184
  // The report is posted as the user's message. resume: false admits it without
181
185
  // starting a model turn, so it waits in the session inbox, where Web, Desktop,
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,oBAAoB,EACpB,iCAAiC,EACjC,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wCAAwC,EAAE,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EACL,qBAAqB,GAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EAEzB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,EACd,eAAe,EAEf,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAA8B,MAAM,UAAU,CAAC;AAUhE,SAAS,kBAAkB,CAAC,IAAsB;IAChD,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAyB,QAAa;IAChE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAO,EAAE;QACvC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,yBAAyB,CAAC,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAC3E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7F,CAAC;QACF,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yFAAyF;AACzF,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,wBAAwB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,aAAa,CAAI,MAAc,EAAE,OAAyB;IACvE,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,MAAM,gBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,gCAAgC;IACpC,KAAK,CAAC,KAAK,CAAC,GAAG;QACb,MAAM,KAAK,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnE,yEAAyE;QACzE,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,MAAM,GAAG;YACb,MAAM,EAAE;gBACN,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC/B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;oBACtB,IAAI,EAAE;wBACJ,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;qBACrF;iBACF,CAAC;aACH;SACF,CAAC;QAEF,wFAAwF;QACxF,8FAA8F;QAC9F,MAAM,WAAW,GAAG,CAClB,OAA6B,EAC7B,SAA6B,EAC7B,aAAiC,EACjC,OAAgD,EAChD,EAAE,CACF,6BAA6B,CAAC;YAC5B,OAAO;YACP,SAAS,EAAE,aAAa;YACxB,MAAM;YACN,KAAK;YACL,SAAS;YACT,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBAC/B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;YAC/E,CAAC;YACD,qBAAqB,EAAE,OAAO,CAAC,0BAA0B;gBACvD,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;oBACpB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO;oBACrC,IAAI,CAAC;wBACH,MAAM,wCAAwC,CAAC;4BAC7C,aAAa,EAAE,KAAK,CAAC,UAAU;4BAC/B,mBAAmB,EAAE,WAAW;yBACjC,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,4DAA4D,EAAE,KAAK,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;gBACH,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QAEL,iFAAiF;QACjF,gFAAgF;QAChF,MAAM,kBAAkB,GAAG,KAAK,EAAE,EAAU,EAAqC,EAAE;YACjF,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QACF,MAAM,WAAW,GAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAE5E,sFAAsF;QACtF,iFAAiF;QACjF,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,aAAa,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpC,KAAK,EAAE,CAAC,MAAM,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI;aACpF,CAAC,CAAC;YACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAE,MAAM,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;aACzE,CAAC,CAAC;YACL,WAAW,EAAE,GAAG,EAAE,CAChB,aAAa,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACxC,OAAO,EAAE,MAAM,yBAAyB,CAAC,WAAW,CAAC;aACtD,CAAC,CAAC;YACL,OAAO,EAAE,KAAK,EAAE,KAAK,EAAkC,EAAE;gBACvD,IAAI,CAAC;oBACH,OAAO,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;wBACxE,0BAA0B,EAAE,KAAK;qBAClC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,sFAAsF;oBACtF,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAE,CAAC;oBAC9E,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;oBACF,OAAO;wBACL,KAAK,EAAE,QAAQ;wBACf,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,MAAM;wBACN,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;wBACjC,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC5B,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;YAClC,MAAM,CAAC,GAAG,CAAC;gBACT,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,wDAAwD;gBACrE,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;oBACd,oBAAoB,EAAE,KAAK;iBAC5B;gBACD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO;oBAC3B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE;wBAC7E,0BAA0B,EAAE,IAAI;qBACjC,CAAC,CAAC;oBACH,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1F,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,0FAA0F;QAC1F,wFAAwF;QACxF,uFAAuF;QACvF,2FAA2F;QAC3F,wBAAwB;QACxB,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC;oBACT,IAAI,EAAE,IAAI,CAAC,SAAS;oBACpB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,KAAK,CAAC,OAAO,CAAC,UAAU;wBACtB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,IAAI,CAAC,EAAE,EACP,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,EAC1C,EAAE,0BAA0B,EAAE,IAAI,EAAE,CACrC,CAAC;wBACF,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM;4BAAE,OAAO;wBACpC,gFAAgF;wBAChF,gFAAgF;wBAChF,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;wBAC5D,MAAM,QAAQ,GAAwB;4BACpC,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;4BACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;yBAC1B,CAAC;wBACF,8EAA8E;wBAC9E,+EAA+E;wBAC/E,kFAAkF;wBAClF,uDAAuD;wBACvD,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;4BACvB,SAAS,EAAE,UAAU,CAAC,SAAS;4BAC/B,IAAI,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;4BAClE,QAAQ,EAAE,EAAE,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE;4BACnD,QAAQ,EAAE,OAAO;4BACjB,MAAM,EAAE,KAAK;yBACd,CAAC,CAAC;oBACL,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,6DAA6D;QAC7D,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAU,EAAE,CAAC;YAClE,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrC,KAAK,CAAC,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,oFAAoF;QACpF,sFAAsF;QACtF,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAAE,OAAO;YACxF,KAAK,CAAC,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAChF,CAAC;YACF,IAAI,CAAC,QAAQ;gBAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,yFAAyF;QACzF,wFAAwF;QACxF,mFAAmF;QACnF,MAAM,sBAAsB,GAAG,oBAAoB,CACjD,iCAAiC,CAAC,GAAG,CAAC,WAAW,CAAC,CACnD,CAAC;QACF,sFAAsF;QACtF,0FAA0F;QAC1F,kFAAkF;QAClF,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC/C,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBACnF,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBAChF,wBAAwB,EAAE,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACnB,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YAC5C,OAAO,CAAC,IAAI,CAAC,2DAA2D,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,sBAAsB,EAAE,CAAC;QAC3B,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tui-v2.d.ts","sourceRoot":"","sources":["../src/tui-v2.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAgkB9C,QAAA,MAAM,MAAM,mBA+FV,CAAC;eAEY,MAAM"}
1
+ {"version":3,"file":"tui-v2.d.ts","sourceRoot":"","sources":["../src/tui-v2.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA8wB9C,QAAA,MAAM,MAAM,mBA+FV,CAAC;eAEY,MAAM"}
package/dist/tui-v2.jsx CHANGED
@@ -1,15 +1,17 @@
1
1
  /** @jsxImportSource @opentui/solid */
2
2
  import { Plugin } from "@opencode/plugin/tui";
3
- import { RGBA, TextAttributes } from "@opentui/core";
3
+ import { TextAttributes } from "@opentui/core";
4
4
  import { useTerminalDimensions } from "@opentui/solid";
5
5
  import { createSignal, onCleanup, Show } from "solid-js";
6
6
  import { loadConfig } from "./lib/config.js";
7
7
  import { resolveOpenCodeLocationRoots } from "./lib/config-file-utils.js";
8
8
  import { sanitizeDisplayText } from "./lib/display-sanitize.js";
9
+ import { fitTableToWidth } from "./lib/markdown-table.js";
10
+ import { layoutQuotaTables } from "./lib/quota-columns.js";
9
11
  import { parseQuotaSlashCommand, QUOTA_DIALOG_COMMANDS, } from "./lib/quota-dialog-command-specs.js";
10
- import { readQuotaReport, readQuotaReportMetadata } from "./lib/quota-report-message.js";
12
+ import { readQuotaReportMetadata } from "./lib/quota-report-message.js";
13
+ import { renderableSections, renderKvRow, } from "./lib/report-document.js";
11
14
  import { QuotaRpc, } from "./rpc.js";
12
- const terminalForeground = RGBA.defaultForeground();
13
15
  const REFRESH_INTERVAL_MS = 60_000;
14
16
  const RPC_TIMEOUT_MS = 60_000;
15
17
  function getSessionID(event) {
@@ -135,7 +137,7 @@ function QuotaFooter(props) {
135
137
  });
136
138
  return (<Show when={lines().length}>
137
139
  <box flexDirection="column">
138
- {lines().map((line) => (<text fg={terminalForeground}>{line}</text>))}
140
+ {lines().map((line) => (<text fg={props.context.theme.text.muted}>{line}</text>))}
139
141
  </box>
140
142
  </Show>);
141
143
  }
@@ -149,6 +151,117 @@ function reportFailure(error) {
149
151
  : "";
150
152
  console.warn(`[opencode-quota] failed to load quota: ${rpcErrorMessage(error)}${hint}`);
151
153
  }
154
+ /** OpenCode's dialog widths (dialogWidth in its ui/dialog.tsx). */
155
+ const DIALOG_WIDTHS = { medium: 60, large: 88, xlarge: 116 };
156
+ function sanitizeQuotaRow(row) {
157
+ return {
158
+ ...row,
159
+ label: sanitizeDisplayText(row.label),
160
+ value: sanitizeDisplayText(row.value),
161
+ usage: row.usage === undefined ? undefined : sanitizeDisplayText(row.usage),
162
+ reset: row.reset === undefined ? undefined : sanitizeDisplayText(row.reset),
163
+ notes: row.notes.map(sanitizeDisplayText),
164
+ };
165
+ }
166
+ /** A report's /quota blocks, sanitized, for layoutQuotaTables. */
167
+ function quotaBlocks(section) {
168
+ return section.blocks.flatMap((block) => block.kind === "quota"
169
+ ? [
170
+ {
171
+ ...block,
172
+ provider: sanitizeDisplayText(block.provider),
173
+ rows: block.rows.map(sanitizeQuotaRow),
174
+ },
175
+ ]
176
+ : []);
177
+ }
178
+ /**
179
+ * A /quota table (see layoutQuotaTables): its title bold, like a section title, then its
180
+ * header bold in OpenCode's primary accent, like the token tables, and its providers bold.
181
+ * In the rows, labels, reset times, and notes are muted; bars, percents, and values base.
182
+ */
183
+ function QuotaTableView(props) {
184
+ return (<box flexDirection="column">
185
+ <text attributes={TextAttributes.BOLD} fg={props.theme.text.base}>
186
+ {props.table.title}
187
+ </text>
188
+ {props.table.lines.map((line) => line.style === "row" ? (<text fg={props.theme.text.base} wrapMode="none">
189
+ {line.segments.map((segment) => (<span style={{ fg: segment.muted ? props.theme.text.muted : props.theme.text.base }}>
190
+ {segment.text}
191
+ </span>))}
192
+ </text>) : (<text attributes={TextAttributes.BOLD} fg={line.style === "header"
193
+ ? props.theme.text.action.primary.selected
194
+ : props.theme.text.base} wrapMode={line.style === "header" ? "none" : undefined}>
195
+ {line.segments.map((segment) => segment.text).join("")}
196
+ </text>))}
197
+ </box>);
198
+ }
199
+ /**
200
+ * One block of a report. Lines, and the chat lines of /quota rows the dialog's tables do not
201
+ * fit, and key-value rows wrap at words. A table keeps each row on one line and spans `width`
202
+ * columns when it fits (see fitTableToWidth), with the header row bold in OpenCode's primary
203
+ * accent (its text color for a selected tab). Like OpenCode's sidebar, labels are muted and
204
+ * values are base.
205
+ */
206
+ function ReportBlockView(props) {
207
+ const block = props.block;
208
+ if (block.kind === "lines" || block.kind === "quota") {
209
+ return <text fg={props.theme.text.muted}>{sanitizeDisplayText(block.lines.join("\n"))}</text>;
210
+ }
211
+ if (block.kind === "kv") {
212
+ return (<box flexDirection="column">
213
+ {block.rows.map(({ value, ...key }) => value === undefined ? (<text fg={props.theme.text.muted}>{sanitizeDisplayText(renderKvRow(key))}</text>) : (<text fg={props.theme.text.muted}>
214
+ {sanitizeDisplayText(renderKvRow({ ...key, trailingColon: true }))}
215
+ <span style={{ fg: props.theme.text.base }}> {sanitizeDisplayText(value)}</span>
216
+ </text>))}
217
+ </box>);
218
+ }
219
+ // Read in the JSX, so the table is laid out again when the terminal is resized.
220
+ const table = () => fitTableToWidth({
221
+ headers: block.headers.map(sanitizeDisplayText),
222
+ fullHeaders: block.fullHeaders?.map(sanitizeDisplayText),
223
+ rows: block.rows.map((row) => row.map(sanitizeDisplayText)),
224
+ aligns: block.aligns,
225
+ width: props.width,
226
+ });
227
+ return (<box flexDirection="column">
228
+ <text attributes={TextAttributes.BOLD} fg={props.theme.text.action.primary.selected} wrapMode="none">
229
+ {table().header}
230
+ </text>
231
+ {table().rows.map((row) => (<text fg={props.theme.text.base} wrapMode="none">
232
+ {row}
233
+ </text>))}
234
+ </box>);
235
+ }
236
+ /**
237
+ * Draws a report document's sections with the same spacing as its plain text: one blank row
238
+ * between the sections and between the blocks of a section, and a section title directly
239
+ * above its first block. Section titles are bold. A /quota report's provider sections come
240
+ * first; when their rows fit the dialog's tables (see layoutQuotaTables), the tables take
241
+ * their place. The dialog shows the heading's subtitle under its own title, so the heading
242
+ * line is left out.
243
+ */
244
+ function ReportDocumentView(props) {
245
+ const sections = renderableSections(props.document);
246
+ const blocks = sections.flatMap(quotaBlocks);
247
+ // Read in the JSX, so the tables are laid out again when the terminal is resized.
248
+ const tables = () => (blocks.length > 0 ? layoutQuotaTables(blocks, props.width) : undefined);
249
+ return (<box flexDirection="column" gap={1}>
250
+ {[
251
+ ...(tables() ?? []).map((table) => <QuotaTableView table={table} theme={props.theme}/>),
252
+ ...sections
253
+ .filter((section) => !tables() || !section.blocks.some((block) => block.kind === "quota"))
254
+ .map((section) => (<box flexDirection="column">
255
+ {section.title ? (<text attributes={TextAttributes.BOLD} fg={props.theme.text.base}>
256
+ {sanitizeDisplayText(section.title)}
257
+ </text>) : null}
258
+ <box flexDirection="column" gap={1}>
259
+ {section.blocks.map((block) => (<ReportBlockView block={block} theme={props.theme} width={props.width}/>))}
260
+ </box>
261
+ </box>)),
262
+ ]}
263
+ </box>);
264
+ }
152
265
  /**
153
266
  * Shows command output like OpenCode's alert dialog, but inside a scrollbox so long
154
267
  * reports (/quota_status, /tokens_*) stay reachable. The mouse wheel scrolls the box;
@@ -158,9 +271,15 @@ function reportFailure(error) {
158
271
  function QuotaOutputDialog(props) {
159
272
  const theme = () => props.context.theme.surface("dialog");
160
273
  const dimensions = useTerminalDimensions();
274
+ // OpenCode's dialog is its size's width, at most the terminal width minus 2. Inside it
275
+ // come this box's paddings (2 + 2) and one column for the scrollbox's scrollbar, which
276
+ // shows when the report is taller than the box.
277
+ const tableWidth = () => Math.min(DIALOG_WIDTHS[props.size], dimensions().width - 2) - 4 - 1;
278
+ const subtitle = props.document.heading?.subtitle;
161
279
  // The host dialog starts a quarter of the way down the terminal. The remaining
162
- // 8 rows cover the title, ok button, paddings, gaps, and one spare row.
163
- const maxHeight = () => Math.max(1, Math.floor(dimensions().height * 0.75) - 8);
280
+ // 8 rows cover the title, ok button, paddings, gaps, and one spare row; the subtitle
281
+ // takes one more.
282
+ const maxHeight = () => Math.max(1, Math.floor(dimensions().height * 0.75) - 8 - (subtitle ? 1 : 0));
164
283
  let scroll;
165
284
  const close = () => props.context.ui.dialog.clear();
166
285
  props.context.keymap.layer(() => ({
@@ -191,19 +310,22 @@ function QuotaOutputDialog(props) {
191
310
  ],
192
311
  }));
193
312
  return (<box paddingLeft={2} paddingRight={2} gap={1}>
194
- <box flexDirection="row" justifyContent="space-between">
195
- <text attributes={TextAttributes.BOLD} fg={theme().text.base}>
196
- {props.title}
197
- </text>
198
- <text fg={theme().text.muted} onMouseUp={close}>
199
- esc
200
- </text>
313
+ <box>
314
+ <box flexDirection="row" justifyContent="space-between">
315
+ <text attributes={TextAttributes.BOLD} fg={theme().text.base}>
316
+ {props.title}
317
+ </text>
318
+ <text fg={theme().text.muted} onMouseUp={close}>
319
+ esc
320
+ </text>
321
+ </box>
322
+ {subtitle ? <text fg={theme().text.muted}>{sanitizeDisplayText(subtitle)}</text> : null}
201
323
  </box>
202
324
  <box paddingBottom={1}>
203
325
  <scrollbox ref={(element) => {
204
326
  scroll = element;
205
327
  }} maxHeight={maxHeight()}>
206
- <text fg={theme().text.muted}>{props.message}</text>
328
+ <ReportDocumentView document={props.document} theme={theme()} width={tableWidth()}/>
207
329
  </scrollbox>
208
330
  </box>
209
331
  <box flexDirection="row" justifyContent="flex-end" paddingBottom={1}>
@@ -215,7 +337,7 @@ function QuotaOutputDialog(props) {
215
337
  }
216
338
  function showQuotaOutputDialog(context, output) {
217
339
  return new Promise((resolve) => {
218
- context.ui.dialog.show(() => <QuotaOutputDialog context={context} title={output.title} message={output.message}/>, resolve);
340
+ context.ui.dialog.show(() => (<QuotaOutputDialog context={context} title={output.title} document={output.document} size={output.dialogSize}/>), resolve);
219
341
  context.ui.dialog.set({ size: output.dialogSize });
220
342
  });
221
343
  }
@@ -242,7 +364,7 @@ async function runQuotaCommand(context, command, sessionID, typed) {
242
364
  return;
243
365
  await showQuotaOutputDialog(context, {
244
366
  title: result.title,
245
- message: result.output,
367
+ document: result.document,
246
368
  dialogSize: result.dialogSize,
247
369
  });
248
370
  }
@@ -293,7 +415,7 @@ async function showPostedQuotaReport(context, event) {
293
415
  });
294
416
  void showQuotaOutputDialog(context, {
295
417
  title: report.title,
296
- message: readQuotaReport(item.payload.text),
418
+ document: report.document,
297
419
  dialogSize: spec.dialogSize,
298
420
  });
299
421
  }
@@ -379,20 +501,24 @@ function SidebarQuotaView(props) {
379
501
  return (<box flexDirection="column">
380
502
  <box flexDirection="row" gap={1} onMouseDown={() => expandable() && setOpen((value) => !value)}>
381
503
  <Show when={expandable()}>
382
- <text fg={terminalForeground}>{open() ? "▼" : "▶"}</text>
504
+ <text fg={props.context.theme.text.base}>{open() ? "▼" : "▶"}</text>
383
505
  </Show>
384
- <text fg={terminalForeground}>
506
+ <text fg={props.context.theme.text.base}>
385
507
  <b>Quota</b>
386
508
  <Show when={expandable() && !open() && quota()?.activeProviderCount}>
387
509
  {(count) => ` (${count()} active)`}
388
510
  </Show>
389
511
  </text>
390
512
  </box>
391
- <Show when={quota()} fallback={<text fg={terminalForeground}>No quota data available</text>}>
513
+ <Show when={quota()} fallback={<text fg={props.context.theme.text.muted}>No quota data available</text>}>
392
514
  <Show when={!expandable() || open()}>
393
- {lines().map((line) => (<text fg={terminalForeground} wrapMode="none">
394
- {line || " "}
395
- </text>))}
515
+ {lines().map((line) =>
516
+ // Provider headers such as "[Copilot] (individual)" are bold, like section titles.
517
+ line.startsWith("[") ? (<text fg={props.context.theme.text.base} wrapMode="none">
518
+ <b>{line}</b>
519
+ </text>) : (<text fg={props.context.theme.text.muted} wrapMode="none">
520
+ {line || " "}
521
+ </text>))}
396
522
  </Show>
397
523
  </Show>
398
524
  </box>);