@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-tokens.d.ts","sourceRoot":"","sources":["../src/theme-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAkC,MAAM,uBAAuB,CAAA;AAIvF;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,YAAY,CAAA;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,YAAY,CAAA;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,oEAAoE;AACpE,eAAO,MAAM,aAAa,iGAAkG,CAAA;AAE5H,6BAA6B;AAC7B,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAA;AAEtD,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,oDAAoD;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;CAC5B;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,2JAEnB,CAAA;AAEV,sEAAsE;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,4gEAgHb,CAAA;AAEV,oDAAoD;AACpD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAElD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAYtG,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAUjE,CAAA;AAaD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CA4GhE,CAAA;AA0BD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,SAAS,CAatG;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC3C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAC9C,IAAI,EAAE,UAAU,GACf,aAAa,CA0Bf"}
@@ -0,0 +1,401 @@
1
+ import { sgrBackgroundPrefix, sgrPrefix } from "./theme-capability.js";
2
+ const RESET = '\u001B[0m';
3
+ /**
4
+ * The reset sequence, for the code that has to recognise one.
5
+ *
6
+ * pi-tui closes a truncated row with a reset whether or not it opened a style,
7
+ * so a renderer that turns styling off still has to remove the ones it did not
8
+ * ask for.
9
+ */
10
+ export function resetSequence() {
11
+ return RESET;
12
+ }
13
+ /**
14
+ * The muted shade every receding element shares.
15
+ *
16
+ * An explicit grey rather than a palette slot: slot 8 is whatever the reader's
17
+ * terminal maps it to, which on the reader's own phone was close enough to
18
+ * ordinary text that dimming looked like it had not been applied at all.
19
+ */
20
+ export const MUTED_GREY = '#8a8a8a';
21
+ /**
22
+ * The shade a tool's argument takes.
23
+ *
24
+ * A call's argument is the one part of a card the reader scans for, and it must
25
+ * read as neither the tool's own label (warn) nor ordinary output (the default
26
+ * foreground); a pale blue sits between them without competing for attention.
27
+ */
28
+ export const ARGUMENT_BLUE = '#8db3d9';
29
+ /**
30
+ * The shade a submitted prompt takes.
31
+ *
32
+ * A reader's own turns and the assistant's reply both shipped on the default
33
+ * foreground, so telling the two apart meant reading them; a rose separates
34
+ * them at a glance while staying quieter than the warn-coloured tool label.
35
+ */
36
+ export const USER_PROMPT_ROSE = '#FCCAF0';
37
+ /** Palette entries a token may name instead of a literal colour. */
38
+ export const PALETTE_NAMES = ['default', 'muted', 'accent', 'arg', 'warn', 'added', 'removed', 'user', 'assistant'];
39
+ /** A row class a tool card can carry, so styling follows what the row means. */
40
+ export const CARD_ROW_CLASSES = [
41
+ 'header', 'hunk', 'added', 'removed', 'line', 'lineNumber', 'path', 'match', 'truncated', 'output', 'cwd', 'status', 'source', 'url', 'detail',
42
+ ];
43
+ /**
44
+ * Every styled element on the surface, grouped by the region that draws it.
45
+ *
46
+ * The list is the contract: a renderer names a token, and the coverage sweep
47
+ * fails if a token loses its default, so "every element" cannot quietly drift
48
+ * as the surface grows.
49
+ */
50
+ export const TUI_TOKENS = [
51
+ // Transcript rows
52
+ 'transcript.user',
53
+ 'transcript.notice',
54
+ 'transcript.marker',
55
+ 'transcript.reasoning.summary',
56
+ 'transcript.reasoning.body',
57
+ 'transcript.reasoning.hint',
58
+ // A reply is markdown, so the markdown tokens are what address it.
59
+ // Tool cards: the generic layer
60
+ 'tool.title',
61
+ 'tool.glyph',
62
+ 'tool.args',
63
+ 'tool.stat.added',
64
+ 'tool.stat.changed',
65
+ 'tool.stat.removed',
66
+ 'tool.stat.size',
67
+ 'tool.stat.separator',
68
+ 'tool.detail',
69
+ 'tool.hint',
70
+ 'tool.failed.title',
71
+ 'tool.failed.glyph',
72
+ 'tool.subcall.title',
73
+ 'tool.subcall.args',
74
+ // Tool cards: per kind
75
+ 'tool.diff.header',
76
+ 'tool.diff.hunk',
77
+ 'tool.diff.added',
78
+ 'tool.diff.removed',
79
+ 'tool.read.header',
80
+ 'tool.read.lineNumber',
81
+ 'tool.read.line',
82
+ 'tool.search.path',
83
+ 'tool.search.lineNumber',
84
+ 'tool.search.match',
85
+ 'tool.search.truncated',
86
+ 'tool.terminal.cwd',
87
+ 'tool.terminal.status',
88
+ 'tool.terminal.output',
89
+ 'tool.web.url',
90
+ 'tool.web.source',
91
+ 'tool.web.truncated',
92
+ 'tool.generic.detail',
93
+ // Markdown
94
+ 'markdown.heading',
95
+ 'markdown.link',
96
+ 'markdown.linkUrl',
97
+ 'markdown.code',
98
+ 'markdown.codeBlock',
99
+ 'markdown.codeBlockBorder',
100
+ 'markdown.quote',
101
+ 'markdown.quoteBorder',
102
+ 'markdown.hr',
103
+ 'markdown.listBullet',
104
+ 'markdown.bold',
105
+ 'markdown.italic',
106
+ 'markdown.strikethrough',
107
+ 'markdown.underline',
108
+ // No markdown.tableHeader: pi-tui styles table headers through the bold hook
109
+ // it already owns, so a token here would be a setting with no call site.
110
+ // Picker
111
+ 'picker.title',
112
+ 'picker.glyph',
113
+ 'picker.note',
114
+ 'picker.filter',
115
+ 'picker.row',
116
+ 'picker.rowCurrent',
117
+ 'picker.scrollNewer',
118
+ 'picker.scrollOlder',
119
+ 'picker.hint',
120
+ 'picker.cursor',
121
+ // Gate
122
+ 'gate.title',
123
+ 'gate.glyphApproval',
124
+ 'gate.glyphQuestion',
125
+ 'gate.detail',
126
+ 'gate.option',
127
+ 'gate.optionCurrent',
128
+ 'gate.cursor',
129
+ 'gate.hint',
130
+ // Dock
131
+ 'dock.goal',
132
+ 'dock.planMode',
133
+ 'dock.todos.heading',
134
+ 'dock.todos.pending',
135
+ 'dock.todos.inProgress',
136
+ 'dock.todos.overflow',
137
+ 'dock.subagents.heading',
138
+ 'dock.subagents.running',
139
+ 'dock.subagents.overflow',
140
+ 'dock.jobs.heading',
141
+ 'dock.jobs.running',
142
+ 'dock.jobs.overflow',
143
+ // Status bar
144
+ 'status.activity.working',
145
+ 'status.activity.ready',
146
+ 'status.elapsed',
147
+ 'status.agentPreset',
148
+ 'status.model',
149
+ 'status.effort',
150
+ 'status.permission',
151
+ 'status.context',
152
+ 'status.cache',
153
+ 'status.cwd',
154
+ 'status.separator',
155
+ // Editor
156
+ 'editor.border',
157
+ 'editor.selectList.selectedPrefix',
158
+ 'editor.selectList.selectedText',
159
+ 'editor.selectList.description',
160
+ 'editor.selectList.scrollInfo',
161
+ 'editor.selectList.noMatch',
162
+ ];
163
+ /**
164
+ * Which token draws a card row, by the card's kind and the row's class.
165
+ *
166
+ * Two lookups rather than one because `header` means a different element on a
167
+ * diff than on a read: the kind is half of what a row is.
168
+ */
169
+ export const CARD_ROW_TOKEN = {
170
+ diff: { header: 'tool.diff.header', hunk: 'tool.diff.hunk', added: 'tool.diff.added', removed: 'tool.diff.removed' },
171
+ read: { header: 'tool.read.header', lineNumber: 'tool.read.lineNumber', line: 'tool.read.line' },
172
+ search: {
173
+ path: 'tool.search.path',
174
+ lineNumber: 'tool.search.lineNumber',
175
+ match: 'tool.search.match',
176
+ truncated: 'tool.search.truncated',
177
+ },
178
+ terminal: { cwd: 'tool.terminal.cwd', status: 'tool.terminal.status', output: 'tool.terminal.output' },
179
+ web: { url: 'tool.web.url', source: 'tool.web.source', truncated: 'tool.web.truncated' },
180
+ generic: { detail: 'tool.generic.detail' },
181
+ };
182
+ /** The colours a token can name, so a shade is changed in one place. */
183
+ export const DEFAULT_PALETTE = {
184
+ default: '#d0d0d0',
185
+ muted: MUTED_GREY,
186
+ accent: '#5fafd7',
187
+ arg: ARGUMENT_BLUE,
188
+ warn: '#d7af5f',
189
+ added: '#5faf5f',
190
+ removed: '#d75f5f',
191
+ user: USER_PROMPT_ROSE,
192
+ assistant: '#d0d0d0',
193
+ };
194
+ /**
195
+ * Muted elements share one shade, which is what makes the surface coherent.
196
+ *
197
+ * It names the palette entry rather than repeating the hex, so a reader who
198
+ * changes `palette.muted` once quiets every receding element together instead
199
+ * of hunting the tokens down. No `dim` either: faint is dropped the moment a
200
+ * colour is named, so carrying it would be a setting that does nothing.
201
+ */
202
+ const muted = { fg: 'muted' };
203
+ const plain = {};
204
+ /**
205
+ * The shipped appearance of every token.
206
+ *
207
+ * Defaults reproduce the surface as it looked before tokens existed, except the
208
+ * muted family, which moves from faint-on-a-palette-slot to an explicit grey.
209
+ * A test asserts every token in {@link TUI_TOKENS} appears here.
210
+ */
211
+ export const DEFAULT_TOKENS = {
212
+ 'transcript.user': { fg: 'user', bold: true },
213
+ 'transcript.notice': muted,
214
+ 'transcript.marker': muted,
215
+ 'transcript.reasoning.summary': muted,
216
+ 'transcript.reasoning.body': muted,
217
+ 'transcript.reasoning.hint': muted,
218
+ 'tool.title': { fg: 'warn' },
219
+ 'tool.glyph': { fg: 'warn' },
220
+ 'tool.args': { fg: 'arg' },
221
+ 'tool.stat.added': { fg: 'added' },
222
+ 'tool.stat.changed': { fg: 'warn' },
223
+ 'tool.stat.removed': { fg: 'removed' },
224
+ 'tool.stat.size': muted,
225
+ 'tool.stat.separator': muted,
226
+ 'tool.detail': muted,
227
+ 'tool.hint': muted,
228
+ 'tool.failed.title': { fg: 'removed' },
229
+ 'tool.failed.glyph': { fg: 'removed' },
230
+ 'tool.subcall.title': muted,
231
+ 'tool.subcall.args': { fg: 'arg' },
232
+ 'tool.diff.header': muted,
233
+ 'tool.diff.hunk': muted,
234
+ 'tool.diff.added': { fg: 'added' },
235
+ 'tool.diff.removed': { fg: 'removed' },
236
+ 'tool.read.header': muted,
237
+ 'tool.read.lineNumber': muted,
238
+ 'tool.read.line': muted,
239
+ 'tool.search.path': muted,
240
+ 'tool.search.lineNumber': muted,
241
+ 'tool.search.match': muted,
242
+ 'tool.search.truncated': muted,
243
+ 'tool.terminal.cwd': muted,
244
+ 'tool.terminal.status': muted,
245
+ 'tool.terminal.output': muted,
246
+ 'tool.web.url': muted,
247
+ 'tool.web.source': muted,
248
+ 'tool.web.truncated': muted,
249
+ 'tool.generic.detail': muted,
250
+ 'markdown.heading': { fg: 'accent', bold: true },
251
+ 'markdown.link': { fg: 'accent', underline: true },
252
+ 'markdown.linkUrl': muted,
253
+ 'markdown.code': { fg: 'accent' },
254
+ 'markdown.codeBlock': plain,
255
+ 'markdown.codeBlockBorder': muted,
256
+ 'markdown.quote': muted,
257
+ 'markdown.quoteBorder': muted,
258
+ 'markdown.hr': muted,
259
+ 'markdown.listBullet': { fg: 'accent' },
260
+ 'markdown.bold': { bold: true },
261
+ 'markdown.italic': { italic: true },
262
+ 'markdown.strikethrough': { strike: true },
263
+ 'markdown.underline': { underline: true },
264
+ 'picker.title': { bold: true },
265
+ 'picker.glyph': { bold: true },
266
+ 'picker.note': { bold: true },
267
+ 'picker.filter': muted,
268
+ 'picker.row': plain,
269
+ 'picker.rowCurrent': { bold: true },
270
+ 'picker.scrollNewer': muted,
271
+ 'picker.scrollOlder': muted,
272
+ 'picker.hint': muted,
273
+ 'picker.cursor': plain,
274
+ 'gate.title': { bold: true },
275
+ 'gate.glyphApproval': { bold: true },
276
+ 'gate.glyphQuestion': { bold: true },
277
+ 'gate.detail': muted,
278
+ 'gate.option': plain,
279
+ 'gate.optionCurrent': { bold: true },
280
+ 'gate.cursor': plain,
281
+ 'gate.hint': muted,
282
+ 'dock.goal': { bold: true },
283
+ 'dock.planMode': { bold: true },
284
+ 'dock.todos.heading': { bold: true },
285
+ 'dock.todos.pending': muted,
286
+ 'dock.todos.inProgress': muted,
287
+ 'dock.todos.overflow': muted,
288
+ 'dock.subagents.heading': { bold: true },
289
+ 'dock.subagents.running': muted,
290
+ 'dock.subagents.overflow': muted,
291
+ 'dock.jobs.heading': { bold: true },
292
+ 'dock.jobs.running': muted,
293
+ 'dock.jobs.overflow': muted,
294
+ 'status.activity.working': muted,
295
+ 'status.activity.ready': muted,
296
+ 'status.elapsed': muted,
297
+ 'status.agentPreset': muted,
298
+ 'status.model': muted,
299
+ 'status.effort': muted,
300
+ 'status.permission': muted,
301
+ 'status.context': muted,
302
+ 'status.cache': muted,
303
+ 'status.cwd': muted,
304
+ 'status.separator': muted,
305
+ 'editor.border': muted,
306
+ 'editor.selectList.selectedPrefix': { fg: 'accent' },
307
+ 'editor.selectList.selectedText': { bold: true },
308
+ 'editor.selectList.description': muted,
309
+ 'editor.selectList.scrollInfo': muted,
310
+ 'editor.selectList.noMatch': muted,
311
+ };
312
+ /** Map a colour specification through the palette, leaving literals alone. */
313
+ function resolveColour(spec, palette) {
314
+ if (typeof spec === 'string' && PALETTE_NAMES.includes(spec)) {
315
+ return palette[spec];
316
+ }
317
+ return spec;
318
+ }
319
+ /** Drop the routing field, so a merged spec carries only what it draws. */
320
+ function withoutInherit(spec) {
321
+ const { inherit: _routing, ...rest } = spec;
322
+ return rest;
323
+ }
324
+ /** The fields an override really wrote, so an explicit `undefined` cannot shadow a default. */
325
+ function writtenFields(spec) {
326
+ if (spec === undefined)
327
+ return {};
328
+ const written = {};
329
+ for (const [key, value] of Object.entries(spec)) {
330
+ if (value !== undefined)
331
+ written[key] = value;
332
+ }
333
+ return written;
334
+ }
335
+ /**
336
+ * Merge one token's default, its `inherit` target, and the reader's override.
337
+ *
338
+ * The inherited token's fields replace this token's defaults, because that is
339
+ * what "start from another token" means; the reader's own fields still win.
340
+ * A path-scoped set turns a cycle into a stop, and still lets two branches
341
+ * inherit one token rather than sharing a single visit.
342
+ */
343
+ export function mergeTokenSpec(token, overrides) {
344
+ const visiting = new Set();
345
+ const merge = (name) => {
346
+ if (visiting.has(name))
347
+ return {};
348
+ visiting.add(name);
349
+ const own = DEFAULT_TOKENS[name];
350
+ const override = overrides.get(name);
351
+ const parent = override?.inherit ?? own.inherit;
352
+ const inherited = parent === undefined ? {} : merge(parent);
353
+ visiting.delete(name);
354
+ return { ...withoutInherit(own), ...inherited, ...withoutInherit(writtenFields(override)) };
355
+ };
356
+ return merge(token);
357
+ }
358
+ /** Turn a colour SGR sequence into the parameter list it belongs to. */
359
+ function colourParams(sequence) {
360
+ return sequence === '' ? undefined : sequence.slice('\u001B['.length, -1);
361
+ }
362
+ /**
363
+ * Resolve one token into the escapes a renderer needs.
364
+ *
365
+ * Faint is dropped once a colour is chosen: stacking it on a deliberate grey is
366
+ * what made the old output differ per terminal.
367
+ */
368
+ export function resolveToken(token, overrides, palette, mode) {
369
+ const merged = mergeTokenSpec(token, overrides);
370
+ if (merged.hidden === true)
371
+ return { prefix: '', suffix: '', glyph: '', hidden: true };
372
+ // With no colour capability the whole promise is "emit nothing", which
373
+ // includes attributes: a bold word is still styling a reader turned off.
374
+ if (mode === 'none')
375
+ return { prefix: '', suffix: '', glyph: merged.glyph ?? '', hidden: false };
376
+ const fg = merged.fg;
377
+ const bg = merged.bg;
378
+ const codes = [];
379
+ if (merged.bold === true)
380
+ codes.push('1');
381
+ if (merged.dim === true && fg === undefined)
382
+ codes.push('2');
383
+ if (merged.italic === true)
384
+ codes.push('3');
385
+ if (merged.underline === true)
386
+ codes.push('4');
387
+ if (merged.strike === true)
388
+ codes.push('9');
389
+ for (const params of [
390
+ fg === undefined ? undefined : colourParams(sgrPrefix(resolveColour(fg, palette), mode)),
391
+ bg === undefined ? undefined : colourParams(sgrBackgroundPrefix(resolveColour(bg, palette), mode)),
392
+ ]) {
393
+ if (params !== undefined)
394
+ codes.push(params);
395
+ }
396
+ // One sequence for attributes and colours together: two escapes in a row would
397
+ // let a renderer that re-orders them drop half the style.
398
+ const prefix = codes.length === 0 ? '' : `\u001B[${codes.join(';')}m`;
399
+ return { prefix, suffix: prefix === '' ? '' : RESET, glyph: merged.glyph ?? '', hidden: false };
400
+ }
401
+ //# sourceMappingURL=theme-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-tokens.js","sourceRoot":"","sources":["../src/theme-tokens.ts"],"names":[],"mappings":"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"}
package/lib/theme.d.ts CHANGED
@@ -1,47 +1,44 @@
1
- import type { EditorTheme, MarkdownTheme } from '@earendil-works/pi-tui';
2
- /** Glyph that introduces each transcript row kind. */
3
- export interface TranscriptGlyphs {
4
- readonly user: string;
5
- readonly assistant: string;
6
- readonly tool: string;
7
- readonly notice: string;
8
- readonly reasoning: string;
9
- readonly marker: string;
10
- }
11
- /** Styling the surface applies, and the editor/select themes pi-tui needs. */
1
+ import { type EditorTheme, type MarkdownTheme } from '@earendil-works/pi-tui';
2
+ import { type ColourMode } from './theme-capability.ts';
3
+ import { type TuiToken } from './theme-tokens.ts';
4
+ import type { ThemeOverrides } from './theme-settings.ts';
5
+ /**
6
+ * Styling the surface applies, and the editor/select themes pi-tui needs.
7
+ *
8
+ * Every element is drawn by naming its token, so a reader's override reaches
9
+ * it without the renderer knowing what the element is for.
10
+ */
12
11
  export interface TuiTheme {
12
+ readonly revision: number;
13
13
  readonly color: boolean;
14
- readonly glyphs: TranscriptGlyphs;
15
- dim(text: string): string;
16
- bold(text: string): string;
17
- tool(text: string): string;
18
- notice(text: string): string;
19
- /** Diff additions and removals, colored by background rather than by hue alone. */
20
- added(text: string): string;
21
- removed(text: string): string;
22
- /** A boundary in the conversation rather than something anyone said. */
23
- marker(text: string): string;
24
- /** Structure the reader scans for: headings, links, inline code, list bullets. */
25
- accent(text: string): string;
26
- italic(text: string): string;
14
+ /** Draw one named element. */
15
+ style(token: TuiToken, text: string): string;
16
+ /** Cut a row to a width, so no renderer has to reach for the raw helper. */
17
+ cut(text: string, width: number, ellipsis?: string): string;
18
+ /** The mark that introduces an element, empty unless the reader set one. */
19
+ glyph(token: TuiToken): string;
20
+ /** Whether an element is drawn at all. */
21
+ visible(token: TuiToken): boolean;
27
22
  readonly editor: EditorTheme;
28
23
  readonly markdown: MarkdownTheme;
29
24
  }
30
25
  /**
31
- * Whether styling is on, given the launch flag and the environment.
26
+ * Build the surface theme.
32
27
  *
33
- * `NO_COLOR` is a cross-tool convention (no-color.org): when it is present and
34
- * not empty, a program that colors by default must not, regardless of its own
35
- * flags. Honouring it means one environment variable turns styling off for
36
- * every tool in a session, which is how a reader actually wants it to work.
28
+ * Every token is resolved once, when the theme is built, rather than per frame:
29
+ * a repaint walks the whole transcript and re-resolving a palette chain for
30
+ * every row would pay for the same answer thousands of times. A settings change
31
+ * builds a new theme instead, which is also what makes the swap atomic.
37
32
  */
38
- export declare function colorEnabled(requested: boolean, env?: Record<string, string | undefined>): boolean;
33
+ export declare function createTheme(mode?: ColourMode, overrides?: ThemeOverrides): TuiTheme;
39
34
  /**
40
- * Build the surface theme.
35
+ * An editor theme that follows a moving source.
41
36
  *
42
- * Styling uses the standard 16 ANSI colors and terminal defaults rather than
43
- * true-color values, so a light or dark terminal remaps the interface on its
44
- * own and the surface needs no theme setting.
37
+ * The editor keeps the theme it was built with for the life of the session, so
38
+ * a settings change has to reach it through a stable object instead of by
39
+ * replacing the one it captured.
45
40
  */
46
- export declare function createTheme(color: boolean): TuiTheme;
41
+ export declare function forwardEditorTheme(source: () => EditorTheme): EditorTheme;
42
+ /** The markdown counterpart of {@link forwardEditorTheme}. */
43
+ export declare function forwardMarkdownTheme(source: () => MarkdownTheme): MarkdownTheme;
47
44
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAA;AAQzF,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,mFAAmF;IACnF,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,wEAAwE;IACxE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,kFAAkF;IAClF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACjC;AA6CD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,OAAO,CAG/G;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAyBpD"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,WAAW,EAAE,KAAK,aAAa,EAAwB,MAAM,wBAAwB,CAAA;AACpH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAoF,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACnI,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAazD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,8BAA8B;IAC9B,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5C,4EAA4E;IAC5E,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3D,4EAA4E;IAC5E,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC9B,0CAA0C;IAC1C,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACjC;AA2CD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,UAA0C,EAAE,SAAS,GAAE,cAA6B,GAAG,QAAQ,CAoChI;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,WAAW,GAAG,WAAW,CAWzE;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,aAAa,GAAG,aAAa,CAiB/E"}