@sagmans/dsh-tui 0.1.1 → 0.2.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 (94) hide show
  1. package/README.md +84 -10
  2. package/cordis.patch.yml +4 -2
  3. package/lib/agent/host.d.ts +14 -0
  4. package/lib/agent/host.d.ts.map +1 -1
  5. package/lib/agent/host.js +20 -4
  6. package/lib/agent/host.js.map +1 -1
  7. package/lib/agent/model.d.ts +24 -0
  8. package/lib/agent/model.d.ts.map +1 -1
  9. package/lib/agent/model.js +46 -1
  10. package/lib/agent/model.js.map +1 -1
  11. package/lib/agent/present.d.ts +7 -1
  12. package/lib/agent/present.d.ts.map +1 -1
  13. package/lib/agent/present.js +33 -4
  14. package/lib/agent/present.js.map +1 -1
  15. package/lib/agent/presets.d.ts +7 -1
  16. package/lib/agent/presets.d.ts.map +1 -1
  17. package/lib/agent/presets.js +7 -3
  18. package/lib/agent/presets.js.map +1 -1
  19. package/lib/cards.d.ts +127 -7
  20. package/lib/cards.d.ts.map +1 -1
  21. package/lib/cards.js +380 -52
  22. package/lib/cards.js.map +1 -1
  23. package/lib/export.d.ts +5 -4
  24. package/lib/export.d.ts.map +1 -1
  25. package/lib/export.js +62 -13
  26. package/lib/export.js.map +1 -1
  27. package/lib/fold-cursor.d.ts +23 -0
  28. package/lib/fold-cursor.d.ts.map +1 -0
  29. package/lib/fold-cursor.js +31 -0
  30. package/lib/fold-cursor.js.map +1 -0
  31. package/lib/index.d.ts +7 -1
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +310 -32
  34. package/lib/index.js.map +1 -1
  35. package/lib/input/submission.d.ts +3 -1
  36. package/lib/input/submission.d.ts.map +1 -1
  37. package/lib/input/submission.js +5 -2
  38. package/lib/input/submission.js.map +1 -1
  39. package/lib/terminal/warning-screen.d.ts +8 -0
  40. package/lib/terminal/warning-screen.d.ts.map +1 -0
  41. package/lib/terminal/warning-screen.js +66 -0
  42. package/lib/terminal/warning-screen.js.map +1 -0
  43. package/lib/theme-capability.d.ts +36 -0
  44. package/lib/theme-capability.d.ts.map +1 -0
  45. package/lib/theme-capability.js +190 -0
  46. package/lib/theme-capability.js.map +1 -0
  47. package/lib/theme-command.d.ts +10 -0
  48. package/lib/theme-command.d.ts.map +1 -0
  49. package/lib/theme-command.js +61 -0
  50. package/lib/theme-command.js.map +1 -0
  51. package/lib/theme-settings.d.ts +161 -0
  52. package/lib/theme-settings.d.ts.map +1 -0
  53. package/lib/theme-settings.js +166 -0
  54. package/lib/theme-settings.js.map +1 -0
  55. package/lib/theme-tokens.d.ts +110 -0
  56. package/lib/theme-tokens.d.ts.map +1 -0
  57. package/lib/theme-tokens.js +401 -0
  58. package/lib/theme-tokens.js.map +1 -0
  59. package/lib/theme.d.ts +32 -35
  60. package/lib/theme.d.ts.map +1 -1
  61. package/lib/theme.js +112 -63
  62. package/lib/theme.js.map +1 -1
  63. package/lib/tokens.d.ts +15 -0
  64. package/lib/tokens.d.ts.map +1 -0
  65. package/lib/tokens.js +29 -0
  66. package/lib/tokens.js.map +1 -0
  67. package/lib/transcript.d.ts +26 -1
  68. package/lib/transcript.d.ts.map +1 -1
  69. package/lib/transcript.js +153 -25
  70. package/lib/transcript.js.map +1 -1
  71. package/lib/ui/dock.d.ts.map +1 -1
  72. package/lib/ui/dock.js +67 -28
  73. package/lib/ui/dock.js.map +1 -1
  74. package/lib/ui/editor.d.ts +34 -0
  75. package/lib/ui/editor.d.ts.map +1 -0
  76. package/lib/ui/editor.js +98 -0
  77. package/lib/ui/editor.js.map +1 -0
  78. package/lib/ui/markdown.d.ts +8 -0
  79. package/lib/ui/markdown.d.ts.map +1 -1
  80. package/lib/ui/markdown.js +12 -0
  81. package/lib/ui/markdown.js.map +1 -1
  82. package/lib/ui/picker.d.ts +37 -0
  83. package/lib/ui/picker.d.ts.map +1 -1
  84. package/lib/ui/picker.js +53 -0
  85. package/lib/ui/picker.js.map +1 -1
  86. package/lib/ui/status.d.ts +3 -1
  87. package/lib/ui/status.d.ts.map +1 -1
  88. package/lib/ui/status.js +76 -24
  89. package/lib/ui/status.js.map +1 -1
  90. package/lib/ui/view.d.ts +43 -0
  91. package/lib/ui/view.d.ts.map +1 -1
  92. package/lib/ui/view.js +254 -54
  93. package/lib/ui/view.js.map +1 -1
  94. package/package.json +3 -1
package/lib/ui/view.js CHANGED
@@ -1,10 +1,52 @@
1
- import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
2
- import { cardDetailRows } from "../cards.js";
1
+ import { visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
2
+ import { cardDetailRows, shellFoldHint, shellRetentionHint } from "../cards.js";
3
3
  import { displayText } from "../text.js";
4
+ import { CARD_ROW_TOKEN } from "../theme-tokens.js";
4
5
  import { RowCache } from "./rows.js";
5
6
  const DETAIL_INDENT = ' ';
6
7
  const OPTION_INDENT = ' ';
7
- const ALL_COLLAPSED = { expandCards: false, expandReasoning: false };
8
+ /** A nested call is a signpost under its card, so it sits one step shallower than that card's detail. */
9
+ const SUBCALL_INDENT = ' ';
10
+ /** The mark a cursor falls back to when the reader has not set one, so no literal lives in a template. */
11
+ const CURSOR_MARK = '❯';
12
+ const APPROVAL_MARK = '⚠';
13
+ const QUESTION_MARK = '?';
14
+ const CHECKBOX_ON = '[x]';
15
+ const CHECKBOX_OFF = '[ ]';
16
+ /** A row that a card's kind does not map draws as generic detail. */
17
+ const FALLBACK_ROW_TOKEN = 'tool.detail';
18
+ /** An unselected row has no cursor, and a blank column is not a value to configure. */
19
+ const NO_CURSOR = ' ';
20
+ /** The words an opened card uses when retention, not the fold, dropped rows. */
21
+ const CARD_HINT_RETAINED = 'more lines not shown';
22
+ /** The key a folded reasoning row names, so a hidden thought stays reachable. */
23
+ const REASONING_FOLD_HINT = 'shift+tab';
24
+ /** What separates a card's header from its measured facts, and the facts from each other. */
25
+ const STAT_LEAD = ' ';
26
+ const STAT_SEPARATOR = ' · ';
27
+ /** The symbol that says what a fact counts; a size needs none. */
28
+ const STAT_SYMBOL = {
29
+ added: '+',
30
+ changed: '~',
31
+ removed: '-',
32
+ size: '',
33
+ };
34
+ /** Which colour draws each fact, so added, changed, and removed never share one. */
35
+ const STAT_TOKEN = {
36
+ added: 'tool.stat.added',
37
+ changed: 'tool.stat.changed',
38
+ removed: 'tool.stat.removed',
39
+ size: 'tool.stat.size',
40
+ };
41
+ /**
42
+ * The state a reader gets before opening anything, and the view's own fallback.
43
+ *
44
+ * Cards and thoughts start folded because either can be long enough to push the
45
+ * answer off the screen. A program's calls are the opposite case: one clipped
46
+ * line each, under a header that already names them, so folding them costs a
47
+ * reader the very thing the card stands for.
48
+ */
49
+ export const DEFAULT_VIEW_STATE = { expandCards: false, expandReasoning: false, expandSubCalls: true };
8
50
  export class TranscriptView {
9
51
  model;
10
52
  theme;
@@ -19,7 +61,7 @@ export class TranscriptView {
19
61
  this.rows = options.rows ?? new RowCache();
20
62
  }
21
63
  get viewState() {
22
- return this.options.state?.() ?? ALL_COLLAPSED;
64
+ return this.options.state?.() ?? DEFAULT_VIEW_STATE;
23
65
  }
24
66
  /** The cache's own account of the work it avoided; a test reads this. */
25
67
  rowStats() {
@@ -36,95 +78,240 @@ export class TranscriptView {
36
78
  const indent = ' '.repeat(lead);
37
79
  const wrapped = wrapTextWithAnsi(displayText(text), Math.max(1, width - lead));
38
80
  wrapped.forEach((line, index) => {
39
- lines.push(style(truncateToWidth(`${index === 0 ? prefix : indent}${line}`, width, '')));
81
+ lines.push(style(this.theme.cut(`${index === 0 ? prefix : indent}${line}`, width, '')));
40
82
  });
41
83
  }
42
- /** Render assistant text as markdown: the model writes structure, the reader reads it. */
43
- pushMarkdown(lines, text, width, prefix) {
84
+ /**
85
+ * Wrap one already-styled block under a prefix.
86
+ *
87
+ * A card header mixes tokens — title, argument, stats — in a single string, so
88
+ * it cannot go through {@link pushWrapped}, which escapes and restyles plain
89
+ * text. Its width still has to fold at the screen edge rather than be cut,
90
+ * because the argument is the part a reader scans for and a silently dropped
91
+ * command is worse than a taller card.
92
+ */
93
+ pushStyledWrapped(lines, content, width, prefix) {
44
94
  const lead = visibleWidth(prefix);
45
95
  const indent = ' '.repeat(lead);
46
- const rendered = this.markdown.render(displayText(text), Math.max(1, width - lead));
47
- rendered.forEach((line, index) => {
96
+ const wrapped = wrapTextWithAnsi(content, Math.max(1, width - lead));
97
+ wrapped.forEach((line, index) => {
98
+ lines.push(this.theme.cut(`${index === 0 ? prefix : indent}${line}`, width, ''));
99
+ });
100
+ }
101
+ /** Render assistant text as markdown: the model writes structure, the reader reads it. */
102
+ pushMarkdown(lines, text, width) {
103
+ const rendered = this.markdown.render(displayText(text), Math.max(1, width));
104
+ rendered.forEach(line => {
48
105
  // The renderer pads to its width for background styling we do not use.
49
106
  const trimmed = line.replace(/[ \t]+$/u, '');
50
- // A blank markdown line stays blank: indenting it would leave trailing
51
- // spaces in the frame for a row that shows nothing.
107
+ // A blank markdown line stays blank: it shows nothing, so it holds nothing.
52
108
  if (trimmed === '') {
53
109
  lines.push('');
54
110
  return;
55
111
  }
56
- lines.push(truncateToWidth(`${index === 0 ? prefix : indent}${trimmed}`, width, '…'));
112
+ lines.push(this.theme.cut(trimmed, width, '…'));
57
113
  });
58
114
  }
59
115
  pushReasoning(lines, entry, width) {
60
- lines.push(this.theme.dim(truncateToWidth(`${this.theme.glyphs.reasoning} ${displayText(entry.summary)}`, width, '')));
116
+ if (!this.theme.visible('transcript.reasoning.summary'))
117
+ return;
118
+ const glyph = this.theme.glyph('transcript.reasoning.summary');
119
+ const lead = glyph === '' ? '' : `${glyph} `;
120
+ // A folded row carries the key that opens it, because a count with no way to
121
+ // reach the text reads the same as the text never having arrived. The key
122
+ // rides the row rather than a line of its own, so naming the hidden body
123
+ // costs no vertical space.
124
+ const suffix = !this.viewState.expandReasoning && entry.body !== '' && this.theme.visible('transcript.reasoning.hint')
125
+ ? ` (${REASONING_FOLD_HINT})`
126
+ : '';
127
+ // The key is kept whole: the summary is the part that gives up room.
128
+ const room = Math.max(1, width - visibleWidth(suffix));
129
+ const summary = this.theme.style('transcript.reasoning.summary', this.theme.cut(`${lead}${displayText(entry.summary)}`, room, ''));
130
+ lines.push(suffix === '' ? summary : `${summary}${this.theme.style('transcript.reasoning.hint', suffix)}`);
61
131
  if (!this.viewState.expandReasoning)
62
132
  return;
133
+ if (!this.theme.visible('transcript.reasoning.body'))
134
+ return;
63
135
  for (const line of entry.body.split('\n')) {
64
- this.pushWrapped(lines, line, width, DETAIL_INDENT, this.theme.dim);
136
+ this.pushWrapped(lines, line, width, DETAIL_INDENT, text => this.theme.style('transcript.reasoning.body', text));
65
137
  }
66
138
  }
67
139
  pushCard(lines, card, width) {
68
140
  const expanded = this.viewState.expandCards;
69
- const { lines: detail, hidden } = cardDetailRows(card, expanded);
70
- const mark = card.failed ? '✗' : '⚒';
71
- lines.push(this.theme.tool(truncateToWidth(`${mark} ${displayText(card.title)}`, width, '')));
141
+ // A card whose kind declares its call IS a command keeps its output tail
142
+ // while folded: that output is the answer the reader asked for, so it
143
+ // outranks the one-line rule every other card follows. Its command is drawn
144
+ // outside the fold entirely, because what ran is never a detail.
145
+ const preview = expanded
146
+ ? { expanded: true }
147
+ : { expanded: false, preview: card.kind === 'terminal' ? 'shellTail' : 'title' };
148
+ const { lines: detail, hidden } = cardDetailRows(card, preview);
149
+ const titleToken = card.failed ? 'tool.failed.title' : 'tool.title';
150
+ const glyphToken = card.failed ? 'tool.failed.glyph' : 'tool.glyph';
151
+ const { lead, body } = this.renderHead(card, titleToken, glyphToken);
152
+ // A header that folds keeps the argument and its stats; a terminal command
153
+ // can be longer than the screen, so it wraps under its own indent.
154
+ if (body !== '')
155
+ this.pushStyledWrapped(lines, body, width, lead);
156
+ if (this.viewState.expandSubCalls)
157
+ this.pushSubCalls(lines, card, width);
158
+ if (card.kind === 'terminal' && card.argument !== undefined && card.argument !== '' && this.theme.visible('tool.args')) {
159
+ this.pushStyledWrapped(lines, this.theme.style('tool.args', displayText(card.argument)), width, DETAIL_INDENT);
160
+ }
72
161
  for (const row of detail) {
73
- const style = row.startsWith('+')
74
- ? this.theme.added
75
- : row.startsWith('-') ? this.theme.removed : this.theme.dim;
76
- lines.push(style(truncateToWidth(`${DETAIL_INDENT}${displayText(row)}`, width, '')));
162
+ // The row says what it is, so the renderer never guesses from the text:
163
+ // a diff line beginning with "+" is an addition because the presenter
164
+ // said so, not because of its first character.
165
+ const drawn = row.parts
166
+ .map(part => {
167
+ const token = CARD_ROW_TOKEN[card.kind]?.[part.class] ?? FALLBACK_ROW_TOKEN;
168
+ return this.theme.visible(token) ? this.theme.style(token, displayText(part.text)) : '';
169
+ })
170
+ .join('');
171
+ // A row whose every part is hidden draws nothing, and nothing must not
172
+ // cost a line: the indent would read as an empty row the card does not have.
173
+ if (drawn === '')
174
+ continue;
175
+ lines.push(this.theme.cut(`${DETAIL_INDENT}${drawn}`, width, ''));
176
+ }
177
+ // The pill is not output, so it draws after the preview window rather than
178
+ // inside it: a run bounded to its tail still reports how it ended.
179
+ if (card.kind === 'terminal' && card.status !== undefined && this.theme.visible('tool.terminal.status')) {
180
+ lines.push(this.theme.cut(`${DETAIL_INDENT}${this.theme.style('tool.terminal.status', displayText(card.status))}`, width, ''));
181
+ }
182
+ if (hidden <= 0 || !this.theme.visible('tool.hint'))
183
+ return;
184
+ // A shell card's rows are kept from the end, so a hidden count always names
185
+ // the rows *before* what is on screen and the hint has to say so; every
186
+ // other card keeps its head, where a neutral count is enough. A folded shell
187
+ // card is bounded by its preview window, an opened one by retention, so the
188
+ // opened hint promises no more than memory kept.
189
+ const hint = card.kind === 'terminal'
190
+ ? preview.expanded ? shellRetentionHint(hidden) : shellFoldHint(hidden)
191
+ : preview.expanded ? `${hidden} ${CARD_HINT_RETAINED}` : undefined;
192
+ if (hint === undefined)
193
+ return;
194
+ lines.push(this.theme.style('tool.hint', this.theme.cut(`${DETAIL_INDENT}${hint}`, width, '')));
195
+ }
196
+ /**
197
+ * The calls one card dispatched, one entry each.
198
+ *
199
+ * A nested call is a signpost rather than a card of its own, so it keeps one
200
+ * entry per call; a long argument still wraps under that entry rather than
201
+ * being cut, because the argument is the part a reader scans for and a
202
+ * silently shortened path reads as the one that ran.
203
+ */
204
+ pushSubCalls(lines, card, width) {
205
+ const subCalls = card.subCalls ?? [];
206
+ for (const call of subCalls) {
207
+ const titleToken = call.failed ? 'tool.failed.title' : 'tool.subcall.title';
208
+ const title = this.theme.visible(titleToken) ? this.theme.style(titleToken, displayText(call.title)) : '';
209
+ const argument = call.argument === undefined || !this.theme.visible('tool.subcall.args')
210
+ ? ''
211
+ : ` ${this.theme.style('tool.subcall.args', displayText(call.argument))}`;
212
+ const drawn = `${title}${argument}`;
213
+ // A row whose every part is hidden draws nothing, and nothing must not
214
+ // cost a line the card does not have.
215
+ if (drawn === '')
216
+ continue;
217
+ this.pushStyledWrapped(lines, drawn, width, SUBCALL_INDENT);
77
218
  }
78
- if (hidden > 0) {
79
- const hint = expanded ? `${hidden} more lines not shown` : `… ${hidden} more lines · ctrl+o shows them`;
80
- lines.push(this.theme.dim(truncateToWidth(`${DETAIL_INDENT}${hint}`, width, '')));
219
+ const hidden = (card.subCallsTotal ?? subCalls.length) - subCalls.length;
220
+ if (hidden > 0 && this.theme.visible('tool.hint')) {
221
+ lines.push(this.theme.style('tool.hint', this.theme.cut(`${SUBCALL_INDENT}… ${hidden} more calls`, width, '')));
222
+ }
223
+ }
224
+ /**
225
+ * A card's header: its label, its argument, and its measured facts.
226
+ *
227
+ * The glyph is returned apart from the body so a wrapped continuation can
228
+ * align under the label rather than under the mark. A terminal's argument is
229
+ * left out because it needs a row of its own — it is the one argument that can
230
+ * be a whole command rather than a word.
231
+ */
232
+ renderHead(card, titleToken, glyphToken) {
233
+ const glyph = this.theme.visible(titleToken) ? this.theme.glyph(glyphToken) : '';
234
+ const lead = glyph === '' ? '' : `${glyph} `;
235
+ let body = this.theme.visible(titleToken) ? this.theme.style(titleToken, displayText(card.title)) : '';
236
+ if (card.kind !== 'terminal' && card.argument !== undefined && card.argument !== '' && this.theme.visible('tool.args')) {
237
+ body += `${body === '' ? '' : ' '}${this.theme.style('tool.args', displayText(card.argument))}`;
81
238
  }
239
+ return { lead, body: body + this.renderStats(card.stats) };
240
+ }
241
+ /** The measured facts, each in its own colour, or nothing when none is visible. */
242
+ renderStats(stats) {
243
+ if (stats === undefined || stats.length === 0)
244
+ return '';
245
+ const drawn = stats
246
+ .filter(stat => this.theme.visible(STAT_TOKEN[stat.kind]))
247
+ .map(stat => this.theme.style(STAT_TOKEN[stat.kind], `${STAT_SYMBOL[stat.kind]}${displayText(stat.text)}`));
248
+ if (drawn.length === 0)
249
+ return '';
250
+ return `${STAT_LEAD}${drawn.join(this.theme.style('tool.stat.separator', STAT_SEPARATOR))}`;
82
251
  }
83
252
  pushPicker(lines, picker, width) {
84
253
  lines.push('');
85
- lines.push(this.theme.bold(truncateToWidth(`↻ ${displayText(picker.title)}`, width, '')));
86
- if (picker.note !== undefined) {
87
- this.pushWrapped(lines, picker.note, width, DETAIL_INDENT, this.theme.bold);
254
+ if (this.theme.visible('picker.title')) {
255
+ const glyph = this.theme.glyph('picker.glyph');
256
+ const lead = glyph === '' ? '' : `${glyph} `;
257
+ lines.push(this.theme.style('picker.title', this.theme.cut(`${lead}${displayText(picker.title)}`, width, '')));
258
+ }
259
+ if (picker.note !== undefined && this.theme.visible('picker.note')) {
260
+ this.pushWrapped(lines, picker.note, width, DETAIL_INDENT, text => this.theme.style('picker.note', text));
88
261
  }
89
- if (picker.filter !== '') {
90
- lines.push(this.theme.dim(truncateToWidth(`${DETAIL_INDENT}filter: ${displayText(picker.filter)}`, width, '')));
262
+ if (picker.filter !== '' && this.theme.visible('picker.filter')) {
263
+ lines.push(this.theme.style('picker.filter', this.theme.cut(`${DETAIL_INDENT}filter: ${displayText(picker.filter)}`, width, '')));
91
264
  }
92
- if (picker.above > 0) {
93
- lines.push(this.theme.dim(truncateToWidth(`${OPTION_INDENT}… ${picker.above} newer`, width, '')));
265
+ if (picker.above > 0 && this.theme.visible('picker.scrollNewer')) {
266
+ lines.push(this.theme.style('picker.scrollNewer', this.theme.cut(`${OPTION_INDENT}… ${picker.above} newer`, width, '')));
94
267
  }
95
268
  for (const row of picker.rows) {
96
- const cursor = row.current ? '❯' : ' ';
269
+ const token = row.current ? 'picker.rowCurrent' : 'picker.row';
270
+ if (!this.theme.visible(token))
271
+ continue;
272
+ const cursor = row.current ? this.theme.glyph('picker.cursor') || CURSOR_MARK : NO_CURSOR;
97
273
  const text = row.description === undefined
98
274
  ? `${cursor} ${row.label}`
99
275
  : `${cursor} ${row.label} — ${row.description}`;
100
- const style = row.current ? this.theme.bold : (value) => value;
101
- lines.push(style(truncateToWidth(`${OPTION_INDENT}${displayText(text)}`, width, '')));
276
+ lines.push(this.theme.style(token, this.theme.cut(`${OPTION_INDENT}${displayText(text)}`, width, '')));
102
277
  }
103
- if (picker.below > 0) {
104
- lines.push(this.theme.dim(truncateToWidth(`${OPTION_INDENT}… ${picker.below} older`, width, '')));
278
+ if (picker.below > 0 && this.theme.visible('picker.scrollOlder')) {
279
+ lines.push(this.theme.style('picker.scrollOlder', this.theme.cut(`${OPTION_INDENT}… ${picker.below} older`, width, '')));
280
+ }
281
+ if (this.theme.visible('picker.hint')) {
282
+ lines.push(this.theme.style('picker.hint', this.theme.cut(`${OPTION_INDENT}${displayText(picker.hint)}`, width, '')));
105
283
  }
106
- lines.push(this.theme.dim(truncateToWidth(`${OPTION_INDENT}${displayText(picker.hint)}`, width, '')));
107
284
  }
108
285
  pushGate(lines, gate, width) {
109
286
  lines.push('');
110
- lines.push(this.theme.bold(truncateToWidth(`${gate.kind === 'approval' ? '⚠' : '?'} ${displayText(gate.title)}`, width, '')));
111
- for (const detail of gate.detail) {
112
- this.pushWrapped(lines, detail, width, DETAIL_INDENT, this.theme.dim);
287
+ if (this.theme.visible('gate.title')) {
288
+ const glyphToken = gate.kind === 'approval' ? 'gate.glyphApproval' : 'gate.glyphQuestion';
289
+ const glyph = this.theme.glyph(glyphToken) || (gate.kind === 'approval' ? APPROVAL_MARK : QUESTION_MARK);
290
+ lines.push(this.theme.style('gate.title', this.theme.cut(`${glyph} ${displayText(gate.title)}`, width, '')));
291
+ }
292
+ if (this.theme.visible('gate.detail')) {
293
+ for (const detail of gate.detail) {
294
+ this.pushWrapped(lines, detail, width, DETAIL_INDENT, text => this.theme.style('gate.detail', text));
295
+ }
113
296
  }
114
297
  gate.options.forEach((option, position) => {
115
- const box = option.selected ? '[x]' : '[ ]';
116
- const cursor = option.current ? '❯' : ' ';
298
+ const token = option.current ? 'gate.optionCurrent' : 'gate.option';
299
+ if (!this.theme.visible(token))
300
+ return;
301
+ const box = option.selected ? CHECKBOX_ON : CHECKBOX_OFF;
302
+ const cursor = option.current ? this.theme.glyph('gate.cursor') || CURSOR_MARK : NO_CURSOR;
117
303
  const label = displayText(option.label);
118
304
  const text = option.description === undefined
119
305
  ? `${cursor} ${box} ${position + 1}. ${label}`
120
306
  : `${cursor} ${box} ${position + 1}. ${label} — ${displayText(option.description)}`;
121
- const style = option.current ? this.theme.bold : (value) => value;
122
- lines.push(style(truncateToWidth(`${OPTION_INDENT}${text}`, width, '')));
307
+ lines.push(this.theme.style(token, this.theme.cut(`${OPTION_INDENT}${text}`, width, '')));
123
308
  });
124
- lines.push(this.theme.dim(truncateToWidth(`${OPTION_INDENT}${displayText(gate.hint)}`, width, '')));
309
+ if (this.theme.visible('gate.hint')) {
310
+ lines.push(this.theme.style('gate.hint', this.theme.cut(`${OPTION_INDENT}${displayText(gate.hint)}`, width, '')));
311
+ }
125
312
  }
126
313
  /** The rows one transcript entry becomes. */
127
- renderEntry(entry, lines, width, glyphs) {
314
+ renderEntry(entry, lines, width) {
128
315
  switch (entry.kind) {
129
316
  case 'tool':
130
317
  this.pushCard(lines, entry.card, width);
@@ -133,25 +320,38 @@ export class TranscriptView {
133
320
  this.pushReasoning(lines, entry, width);
134
321
  return;
135
322
  case 'assistant':
136
- this.pushMarkdown(lines, entry.text, width, `${glyphs.assistant} `);
323
+ this.pushMarkdown(lines, entry.text, width);
137
324
  return;
138
325
  case 'user':
139
- this.pushWrapped(lines, entry.text, width, `${glyphs.user} `, this.theme.bold);
326
+ if (!this.theme.visible('transcript.user'))
327
+ return;
328
+ this.pushWrapped(lines, entry.text, width, this.elementLead('transcript.user'), text => this.theme.style('transcript.user', text));
140
329
  return;
141
330
  case 'notice':
142
- this.pushWrapped(lines, entry.text, width, `${glyphs.notice} `, this.theme.notice);
331
+ if (!this.theme.visible('transcript.notice'))
332
+ return;
333
+ this.pushWrapped(lines, entry.text, width, this.elementLead('transcript.notice'), text => this.theme.style('transcript.notice', text));
143
334
  return;
144
335
  case 'marker':
145
- this.pushWrapped(lines, entry.text, width, `${glyphs.marker} `, this.theme.marker);
336
+ if (!this.theme.visible('transcript.marker'))
337
+ return;
338
+ this.pushWrapped(lines, entry.text, width, this.elementLead('transcript.marker'), text => this.theme.style('transcript.marker', text));
146
339
  return;
147
340
  }
148
341
  }
342
+ /** The mark and the space that introduce an element, empty when it has none. */
343
+ elementLead(token) {
344
+ const glyph = this.theme.visible(token) ? this.theme.glyph(token) : '';
345
+ return glyph === '' ? '' : `${glyph} `;
346
+ }
149
347
  render(width) {
150
348
  if (width <= 0)
151
349
  return [];
152
- const { glyphs } = this.theme;
153
350
  const state = this.viewState;
154
- const tag = `${width}|${state.expandCards ? 'c' : '-'}${state.expandReasoning ? 'r' : '-'}`;
351
+ // The revision is part of the key: rows drawn under an older theme table
352
+ // must miss, or a settings change would restyle only the rows that happened
353
+ // to be redrawn for another reason.
354
+ const tag = `${width}|${state.expandCards ? 'c' : '-'}${state.expandReasoning ? 'r' : '-'}${state.expandSubCalls ? 'p' : '-'}|${this.theme.revision}`;
155
355
  const lines = [];
156
356
  const settled = this.model.settledCount();
157
357
  const entries = this.model.entries();
@@ -159,7 +359,7 @@ export class TranscriptView {
159
359
  // The in-flight rows change on every frame, so caching them would only
160
360
  // fill the cache with objects nobody will ask for again.
161
361
  if (index >= settled) {
162
- this.renderEntry(entry, lines, width, glyphs);
362
+ this.renderEntry(entry, lines, width);
163
363
  continue;
164
364
  }
165
365
  const cached = this.rows.lookup(entry, tag);
@@ -168,7 +368,7 @@ export class TranscriptView {
168
368
  continue;
169
369
  }
170
370
  const rendered = [];
171
- this.renderEntry(entry, rendered, width, glyphs);
371
+ this.renderEntry(entry, rendered, width);
172
372
  this.rows.store(entry, tag, rendered);
173
373
  lines.push(...rendered);
174
374
  }
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/ui/view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/ui/view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sagmans/dsh-tui",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Terminal (CLI TUI) surface for DeepSeek Harness: interactive dsh in a terminal, no browser required",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -73,6 +73,7 @@
73
73
  "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
74
74
  "@deepseek-ai/dsh-code-runtime-worker-thread": "0.1.5-rc.1",
75
75
  "@deepseek-ai/dsh-cordis-host-runner": "0.1.5-rc.1",
76
+ "@deepseek-ai/schemastery": "3.18.2",
76
77
  "@earendil-works/pi-tui": "0.85.1",
77
78
  "commander": "^15.0.0"
78
79
  },
@@ -98,6 +99,7 @@
98
99
  "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
99
100
  "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
100
101
  "@deepseek-ai/dsh-session": "0.1.5-rc.1",
102
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
101
103
  "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
102
104
  "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
103
105
  "@deepseek-ai/dsh-user-questions": "0.1.5-rc.1",