@sagmans/dsh-tui 0.4.0 → 0.5.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 (200) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +270 -68
  3. package/lib/agent/present.js +1 -1
  4. package/lib/agent/present.js.map +1 -1
  5. package/lib/agent/prompt-history.d.ts.map +1 -1
  6. package/lib/agent/prompt-history.js +5 -3
  7. package/lib/agent/prompt-history.js.map +1 -1
  8. package/lib/agent/status.d.ts +1 -1
  9. package/lib/cards.d.ts +83 -13
  10. package/lib/cards.d.ts.map +1 -1
  11. package/lib/cards.js +96 -28
  12. package/lib/cards.js.map +1 -1
  13. package/lib/export.d.ts +3 -3
  14. package/lib/export.d.ts.map +1 -1
  15. package/lib/export.js +23 -13
  16. package/lib/export.js.map +1 -1
  17. package/lib/fold-cursor.d.ts +12 -5
  18. package/lib/fold-cursor.d.ts.map +1 -1
  19. package/lib/fold-cursor.js +16 -5
  20. package/lib/fold-cursor.js.map +1 -1
  21. package/lib/gates.d.ts.map +1 -1
  22. package/lib/gates.js +42 -9
  23. package/lib/gates.js.map +1 -1
  24. package/lib/index.d.ts.map +1 -1
  25. package/lib/index.js +459 -72
  26. package/lib/index.js.map +1 -1
  27. package/lib/injection.d.ts +9 -0
  28. package/lib/injection.d.ts.map +1 -0
  29. package/lib/injection.js +128 -0
  30. package/lib/injection.js.map +1 -0
  31. package/lib/input/actions.d.ts +19 -2
  32. package/lib/input/actions.d.ts.map +1 -1
  33. package/lib/input/actions.js +57 -11
  34. package/lib/input/actions.js.map +1 -1
  35. package/lib/input/cancel.d.ts +55 -0
  36. package/lib/input/cancel.d.ts.map +1 -0
  37. package/lib/input/cancel.js +47 -0
  38. package/lib/input/cancel.js.map +1 -0
  39. package/lib/input/completion.d.ts +5 -2
  40. package/lib/input/completion.d.ts.map +1 -1
  41. package/lib/input/completion.js +79 -4
  42. package/lib/input/completion.js.map +1 -1
  43. package/lib/input/file-search.d.ts +105 -0
  44. package/lib/input/file-search.d.ts.map +1 -0
  45. package/lib/input/file-search.js +665 -0
  46. package/lib/input/file-search.js.map +1 -0
  47. package/lib/input/fuzzy.d.ts +42 -0
  48. package/lib/input/fuzzy.d.ts.map +1 -0
  49. package/lib/input/fuzzy.js +289 -0
  50. package/lib/input/fuzzy.js.map +1 -0
  51. package/lib/input/keymap.d.ts +3 -1
  52. package/lib/input/keymap.d.ts.map +1 -1
  53. package/lib/input/keymap.js +14 -3
  54. package/lib/input/keymap.js.map +1 -1
  55. package/lib/input/match.d.ts +12 -4
  56. package/lib/input/match.d.ts.map +1 -1
  57. package/lib/input/match.js +50 -51
  58. package/lib/input/match.js.map +1 -1
  59. package/lib/input/submission.d.ts +10 -0
  60. package/lib/input/submission.d.ts.map +1 -1
  61. package/lib/input/submission.js +7 -6
  62. package/lib/input/submission.js.map +1 -1
  63. package/lib/keys-command.d.ts +19 -3
  64. package/lib/keys-command.d.ts.map +1 -1
  65. package/lib/keys-command.js +34 -31
  66. package/lib/keys-command.js.map +1 -1
  67. package/lib/settings-notice.d.ts +5 -0
  68. package/lib/settings-notice.d.ts.map +1 -1
  69. package/lib/settings-notice.js +9 -7
  70. package/lib/settings-notice.js.map +1 -1
  71. package/lib/stash/paths.d.ts +8 -8
  72. package/lib/stash/paths.d.ts.map +1 -1
  73. package/lib/stash/paths.js +19 -18
  74. package/lib/stash/paths.js.map +1 -1
  75. package/lib/stash/schema.d.ts +11 -12
  76. package/lib/stash/schema.d.ts.map +1 -1
  77. package/lib/stash/schema.js +10 -29
  78. package/lib/stash/schema.js.map +1 -1
  79. package/lib/stash/store.js +10 -10
  80. package/lib/stash/store.js.map +1 -1
  81. package/lib/stash.d.ts +37 -6
  82. package/lib/stash.d.ts.map +1 -1
  83. package/lib/stash.js +93 -36
  84. package/lib/stash.js.map +1 -1
  85. package/lib/terminal/external-editor.d.ts +93 -0
  86. package/lib/terminal/external-editor.d.ts.map +1 -0
  87. package/lib/terminal/external-editor.js +263 -0
  88. package/lib/terminal/external-editor.js.map +1 -0
  89. package/lib/terminal/host-writes.d.ts +39 -0
  90. package/lib/terminal/host-writes.d.ts.map +1 -0
  91. package/lib/terminal/host-writes.js +136 -0
  92. package/lib/terminal/host-writes.js.map +1 -0
  93. package/lib/terminal/signals.d.ts +25 -0
  94. package/lib/terminal/signals.d.ts.map +1 -0
  95. package/lib/terminal/signals.js +39 -0
  96. package/lib/terminal/signals.js.map +1 -0
  97. package/lib/terminal/warning-screen.d.ts +19 -1
  98. package/lib/terminal/warning-screen.d.ts.map +1 -1
  99. package/lib/terminal/warning-screen.js +37 -1
  100. package/lib/terminal/warning-screen.js.map +1 -1
  101. package/lib/terminal-text.d.ts +72 -0
  102. package/lib/terminal-text.d.ts.map +1 -0
  103. package/lib/terminal-text.js +603 -0
  104. package/lib/terminal-text.js.map +1 -0
  105. package/lib/text.d.ts +45 -6
  106. package/lib/text.d.ts.map +1 -1
  107. package/lib/text.js +106 -46
  108. package/lib/text.js.map +1 -1
  109. package/lib/theme-command.d.ts +7 -4
  110. package/lib/theme-command.d.ts.map +1 -1
  111. package/lib/theme-command.js +32 -12
  112. package/lib/theme-command.js.map +1 -1
  113. package/lib/theme-files.d.ts +110 -0
  114. package/lib/theme-files.d.ts.map +1 -0
  115. package/lib/theme-files.js +352 -0
  116. package/lib/theme-files.js.map +1 -0
  117. package/lib/theme-schema.d.ts +121 -0
  118. package/lib/theme-schema.d.ts.map +1 -0
  119. package/lib/theme-schema.js +87 -0
  120. package/lib/theme-schema.js.map +1 -0
  121. package/lib/theme-settings.d.ts +43 -10
  122. package/lib/theme-settings.d.ts.map +1 -1
  123. package/lib/theme-settings.js +103 -43
  124. package/lib/theme-settings.js.map +1 -1
  125. package/lib/theme-tokens.d.ts +39 -7
  126. package/lib/theme-tokens.d.ts.map +1 -1
  127. package/lib/theme-tokens.js +96 -13
  128. package/lib/theme-tokens.js.map +1 -1
  129. package/lib/theme.d.ts +24 -2
  130. package/lib/theme.d.ts.map +1 -1
  131. package/lib/theme.js +49 -6
  132. package/lib/theme.js.map +1 -1
  133. package/lib/tool-display.d.ts +57 -0
  134. package/lib/tool-display.d.ts.map +1 -0
  135. package/lib/tool-display.js +51 -0
  136. package/lib/tool-display.js.map +1 -0
  137. package/lib/transcript.d.ts +28 -0
  138. package/lib/transcript.d.ts.map +1 -1
  139. package/lib/transcript.js +126 -37
  140. package/lib/transcript.js.map +1 -1
  141. package/lib/ui/diff.d.ts +49 -0
  142. package/lib/ui/diff.d.ts.map +1 -0
  143. package/lib/ui/diff.js +208 -0
  144. package/lib/ui/diff.js.map +1 -0
  145. package/lib/ui/dock.d.ts.map +1 -1
  146. package/lib/ui/dock.js +9 -6
  147. package/lib/ui/dock.js.map +1 -1
  148. package/lib/ui/editor.d.ts.map +1 -1
  149. package/lib/ui/editor.js +4 -2
  150. package/lib/ui/editor.js.map +1 -1
  151. package/lib/ui/frame.d.ts +16 -5
  152. package/lib/ui/frame.d.ts.map +1 -1
  153. package/lib/ui/frame.js +32 -13
  154. package/lib/ui/frame.js.map +1 -1
  155. package/lib/ui/keymap-picker.d.ts +16 -0
  156. package/lib/ui/keymap-picker.d.ts.map +1 -0
  157. package/lib/ui/keymap-picker.js +41 -0
  158. package/lib/ui/keymap-picker.js.map +1 -0
  159. package/lib/ui/layout.d.ts +33 -0
  160. package/lib/ui/layout.d.ts.map +1 -0
  161. package/lib/ui/layout.js +33 -0
  162. package/lib/ui/layout.js.map +1 -0
  163. package/lib/ui/markdown.d.ts +25 -3
  164. package/lib/ui/markdown.d.ts.map +1 -1
  165. package/lib/ui/markdown.js +12 -8
  166. package/lib/ui/markdown.js.map +1 -1
  167. package/lib/ui/picker-card.d.ts +42 -0
  168. package/lib/ui/picker-card.d.ts.map +1 -0
  169. package/lib/ui/picker-card.js +148 -0
  170. package/lib/ui/picker-card.js.map +1 -0
  171. package/lib/ui/picker.d.ts +40 -2
  172. package/lib/ui/picker.d.ts.map +1 -1
  173. package/lib/ui/picker.js +50 -6
  174. package/lib/ui/picker.js.map +1 -1
  175. package/lib/ui/prompt.d.ts +10 -2
  176. package/lib/ui/prompt.d.ts.map +1 -1
  177. package/lib/ui/prompt.js +21 -2
  178. package/lib/ui/prompt.js.map +1 -1
  179. package/lib/ui/rows.d.ts +8 -6
  180. package/lib/ui/rows.d.ts.map +1 -1
  181. package/lib/ui/rows.js +10 -18
  182. package/lib/ui/rows.js.map +1 -1
  183. package/lib/ui/stash-picker.d.ts +2 -2
  184. package/lib/ui/stash-picker.d.ts.map +1 -1
  185. package/lib/ui/stash-picker.js +4 -4
  186. package/lib/ui/stash-picker.js.map +1 -1
  187. package/lib/ui/status.d.ts.map +1 -1
  188. package/lib/ui/status.js +18 -16
  189. package/lib/ui/status.js.map +1 -1
  190. package/lib/ui/theme-picker.d.ts +18 -0
  191. package/lib/ui/theme-picker.d.ts.map +1 -0
  192. package/lib/ui/theme-picker.js +68 -0
  193. package/lib/ui/theme-picker.js.map +1 -0
  194. package/lib/ui/view.d.ts +146 -22
  195. package/lib/ui/view.d.ts.map +1 -1
  196. package/lib/ui/view.js +461 -154
  197. package/lib/ui/view.js.map +1 -1
  198. package/package.json +3 -1
  199. package/themes/deepseek-blue.yaml +183 -0
  200. package/themes/violet-orbit.yaml +178 -0
@@ -3,43 +3,12 @@ import { DEFAULT_MAX_ENTRIES, MAX_ENTRIES_LIMIT } from "./agent/prompt-history.j
3
3
  import { defaultKeymap, keysFor, resolveKeymap } from "./input/actions.js";
4
4
  import { KeymapSectionSchema, isActionId } from "./input/keymap-settings.js";
5
5
  import { DEFAULT_PREFIX_KEYS, DEFAULT_PREFIX_WINDOW_S } from "./input/keymap.js";
6
- import { DEFAULT_PALETTE, PALETTE_NAMES, TUI_TOKENS, } from "./theme-tokens.js";
6
+ import { TOOL_DISPLAY_LIMITS, TOOL_OUTPUT_DISPLAYS, toolDisplayTable, } from "./tool-display.js";
7
+ import { DEFAULT_THEME } from "./theme-files.js";
8
+ import { asRecord, PALETTE_NAME_SET, PaletteSchema, TOKEN_NAME_SET, TokensSchema, } from "./theme-schema.js";
9
+ import { DEFAULT_PALETTE } from "./theme-tokens.js";
7
10
  /** Settings namespace owned by the terminal surface. */
8
11
  export const TUI_SETTINGS_NAMESPACE = 'dsh-tui';
9
- /**
10
- * A colour the reader may write.
11
- *
12
- * Enumerated rather than a free string: a misspelled colour must fail at load
13
- * with the offending token named, not silently paint nothing for the rest of
14
- * the session.
15
- */
16
- const ColourSchema = z.union([
17
- z.string().pattern(/^#[0-9a-fA-F]{6}$/u),
18
- z.union([...PALETTE_NAMES]),
19
- z.number().min(0).max(255),
20
- ]);
21
- /** One element's override; every field optional so a reader sets only what they mean. */
22
- const StyleSpecSchema = z.object({
23
- fg: ColourSchema,
24
- bg: ColourSchema,
25
- bold: z.boolean(),
26
- dim: z.boolean(),
27
- italic: z.boolean(),
28
- underline: z.boolean(),
29
- strike: z.boolean(),
30
- glyph: z.string(),
31
- hidden: z.boolean(),
32
- inherit: z.union([...TUI_TOKENS]),
33
- });
34
- /** The palette half: every entry optional, each defaulting to the shipped shade. */
35
- const PaletteSchema = z.object(Object.fromEntries(PALETTE_NAMES.map(name => [name, ColourSchema.default(DEFAULT_PALETTE[name])])));
36
- /**
37
- * The token half: every token optional, but an unknown name rejected.
38
- *
39
- * Spelled out rather than `z.dict` because `dict` would accept any key, which
40
- * is exactly the silent-typo failure this section has to prevent.
41
- */
42
- const TokensSchema = z.object(Object.fromEntries(TUI_TOKENS.map(token => [token, StyleSpecSchema])));
43
12
  /** The values the `subcalls` key accepts, declared once for the schema and the refusal message. */
44
13
  const SUBCALL_DISPLAYS = ['collapsed', 'inline'];
45
14
  /** How a reply's mermaid fences draw: never, once settled, or as the reply streams. */
@@ -65,6 +34,16 @@ const HistorySchema = z.object({
65
34
  maxEntries: z.number().min(1).max(MAX_ENTRIES_LIMIT).default(DEFAULT_MAX_ENTRIES),
66
35
  });
67
36
  const SECTION = z.object({
37
+ // No default even though the surface draws one, for the same reason `prefix`
38
+ // has none: a registration fills every declared field, and a fill-in here would
39
+ // hand back a choice the reader never made, which the next save would then write
40
+ // into their document as if they had. Which theme answers an unnamed section is
41
+ // the library's question, asked where the name is looked up. A free string
42
+ // rather than an enumerated union, also for the same reason as `prefix`: the
43
+ // names are files the reader owns, and one appears the moment they save it —
44
+ // which no schema compiled into this build can enumerate. A name nothing answers
45
+ // to is refused where the names that do answer can actually be listed.
46
+ theme: z.string(),
68
47
  palette: PaletteSchema.default({}),
69
48
  tokens: TokensSchema.default({}),
70
49
  subcalls: z.union([...SUBCALL_DISPLAYS]).default('inline'),
@@ -79,6 +58,10 @@ const SECTION = z.object({
79
58
  prefixWindow: z.number().min(0).max(MAX_PREFIX_WINDOW_S).default(DEFAULT_PREFIX_WINDOW_S),
80
59
  keys: KeymapSectionSchema.default({}),
81
60
  history: HistorySchema.default({ enabled: DEFAULT_HISTORY_ENABLED, ghost: DEFAULT_HISTORY_GHOST, maxEntries: DEFAULT_MAX_ENTRIES }),
61
+ // Declared so a registered scope keeps the block when the document is saved,
62
+ // but validated by hand below: its keys are tool names, which no closed shape
63
+ // can enumerate, and schemastery's `dict` accepts every one of them.
64
+ tools: z.any(),
82
65
  });
83
66
  /**
84
67
  * The schema the harness registers.
@@ -88,10 +71,10 @@ const SECTION = z.object({
88
71
  * cannot express.
89
72
  */
90
73
  export const TuiSettingsSchema = SECTION;
91
- const TOKEN_NAMES = new Set(TUI_TOKENS);
92
- const PALETTE_NAME_SET = new Set(PALETTE_NAMES);
93
74
  /** The section's own keys: schemastery keeps what it does not declare, so a misspelling has to be refused here. */
94
- const SECTION_KEYS = new Set(['palette', 'tokens', 'subcalls', 'mermaid', 'prefix', 'prefixWindow', 'keys', 'history']);
75
+ const SECTION_KEYS = new Set(['theme', 'palette', 'tokens', 'subcalls', 'mermaid', 'prefix', 'prefixWindow', 'keys', 'history', 'tools']);
76
+ /** The fields one tool's row may carry, for the same reason the section's own keys are spelled out. */
77
+ const TOOL_FIELDS = new Set(['collapsed', 'output', 'tail']);
95
78
  /**
96
79
  * Validate the raw section, refusing a name the surface does not have.
97
80
  *
@@ -108,7 +91,7 @@ function rejectUnknownKeys(raw) {
108
91
  if (unknownKeys.length > 0) {
109
92
  throw new Error(`unknown ${TUI_SETTINGS_NAMESPACE} key${unknownKeys.length === 1 ? '' : 's'}: ${unknownKeys.join(', ')}`);
110
93
  }
111
- const unknownTokens = Object.keys(asRecord(section.tokens) ?? {}).filter(name => !TOKEN_NAMES.has(name));
94
+ const unknownTokens = Object.keys(asRecord(section.tokens) ?? {}).filter(name => !TOKEN_NAME_SET.has(name));
112
95
  if (unknownTokens.length > 0) {
113
96
  throw new Error(`unknown ${TUI_SETTINGS_NAMESPACE} token${unknownTokens.length === 1 ? '' : 's'}: ${unknownTokens.join(', ')}`);
114
97
  }
@@ -124,9 +107,58 @@ function rejectUnknownKeys(raw) {
124
107
  if (unknownHistory.length > 0) {
125
108
  throw new Error('unknown ' + TUI_SETTINGS_NAMESPACE + ' history key' + (unknownHistory.length === 1 ? '' : 's') + ': ' + unknownHistory.join(', '));
126
109
  }
110
+ const unknownToolFields = Object.entries(asRecord(section.tools) ?? {})
111
+ .flatMap(([tool, spec]) => Object.keys(asRecord(spec) ?? {})
112
+ .filter(field => !TOOL_FIELDS.has(field))
113
+ .map(field => `${tool}.${field}`));
114
+ if (unknownToolFields.length > 0) {
115
+ throw new Error('unknown ' + TUI_SETTINGS_NAMESPACE + ' tool field' + (unknownToolFields.length === 1 ? '' : 's') + ': ' + unknownToolFields.join(', '));
116
+ }
117
+ }
118
+ /** One display flag as the reader wrote it. */
119
+ function toolFlag(value, field) {
120
+ if (typeof value !== 'boolean')
121
+ throw new Error(`${field} must be a boolean`);
122
+ return value;
123
+ }
124
+ /** One bounded count as the reader wrote it. */
125
+ function toolInteger(value, field, bounds) {
126
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < bounds.min || value > bounds.max) {
127
+ throw new Error(`${field} must be an integer between ${bounds.min} and ${bounds.max}`);
128
+ }
129
+ return value;
130
+ }
131
+ /** One `output` value as the reader wrote it. */
132
+ function toolOutput(value, field) {
133
+ if (typeof value !== 'string' || !TOOL_OUTPUT_DISPLAYS.includes(value)) {
134
+ throw new Error(`${field} must be one of: ${TOOL_OUTPUT_DISPLAYS.join(', ')}`);
135
+ }
136
+ return value;
127
137
  }
128
- function asRecord(value) {
129
- return typeof value === 'object' && value !== null ? value : undefined;
138
+ /**
139
+ * The `tools:` block as the reader wrote it.
140
+ *
141
+ * The reserved `default` row and every tool name are the same shape, so they
142
+ * are validated the same way; a name nothing declares is inert rather than an
143
+ * error, because the surface cannot know which tools a profile mounts.
144
+ */
145
+ function parseTools(raw) {
146
+ const block = asRecord(raw) ?? {};
147
+ const specs = {};
148
+ for (const [tool, value] of Object.entries(block)) {
149
+ const spec = asRecord(value);
150
+ if (spec === undefined)
151
+ throw new Error(`tools.${tool} must be a mapping of display fields`);
152
+ const written = {};
153
+ if (spec.collapsed !== undefined)
154
+ written.collapsed = toolFlag(spec.collapsed, `tools.${tool}.collapsed`);
155
+ if (spec.output !== undefined)
156
+ written.output = toolOutput(spec.output, `tools.${tool}.output`);
157
+ if (spec.tail !== undefined)
158
+ written.tail = toolInteger(spec.tail, `tools.${tool}.tail`, TOOL_DISPLAY_LIMITS.tail);
159
+ specs[tool] = written;
160
+ }
161
+ return specs;
130
162
  }
131
163
  /** The reader-facing shape of the `dsh-tui:` section. */
132
164
  export function parseSettings(raw) {
@@ -176,9 +208,11 @@ export function parseSettings(raw) {
176
208
  // the catalog and on the layers the map already claims, which a schema cannot see.
177
209
  const keymap = resolveKeymap(overrides);
178
210
  return {
211
+ theme: parsed.theme,
179
212
  palette: palette,
180
213
  tokens: tokens,
181
214
  subcalls: parsed.subcalls,
215
+ tools: toolDisplayTable(parseTools(section.tools)),
182
216
  mermaid: parsed.mermaid,
183
217
  prefixes: keysFor(keymap, 'chord.prefix'),
184
218
  prefixWindow: parsed.prefixWindow,
@@ -195,9 +229,11 @@ function hasAnyField(spec) {
195
229
  /** The section as it reads when the reader has written nothing. */
196
230
  export function defaultSettings() {
197
231
  return {
232
+ theme: undefined,
198
233
  palette: {},
199
234
  tokens: {},
200
235
  subcalls: 'inline',
236
+ tools: toolDisplayTable(),
201
237
  mermaid: DEFAULT_MERMAID_MODE,
202
238
  prefixes: [...DEFAULT_PREFIX_KEYS],
203
239
  prefixWindow: DEFAULT_PREFIX_WINDOW_S,
@@ -205,6 +241,16 @@ export function defaultSettings() {
205
241
  history: { enabled: DEFAULT_HISTORY_ENABLED, ghost: DEFAULT_HISTORY_GHOST, maxEntries: DEFAULT_MAX_ENTRIES },
206
242
  };
207
243
  }
244
+ /**
245
+ * The layer the theme in force contributes, or nothing when no file answered.
246
+ *
247
+ * The table every theme is written against is the compiled one, so a theme is
248
+ * always a layer over it and never a replacement: an element no theme names keeps
249
+ * the shade the surface ships with.
250
+ */
251
+ export function themeLayer(overrides) {
252
+ return overrides.theme?.tokens;
253
+ }
208
254
  /**
209
255
  * One sentence for a section the surface refused.
210
256
  *
@@ -274,13 +320,27 @@ function salvageHistory(raw) {
274
320
  *
275
321
  * Shipped defaults fill anything the reader left out, so a partial section is
276
322
  * the normal case rather than something the resolver has to guard against.
323
+ *
324
+ * The name is looked up rather than trusted: a reader can rename or rewrite the
325
+ * file behind it between two reads, and a theme that is gone leaves the package's
326
+ * own in force rather than leaving the surface with nothing to draw.
277
327
  */
278
- export function toOverrides(settings) {
328
+ export function toOverrides(settings, library) {
329
+ // An unnamed section and an unknown name land on the same answer: the theme the
330
+ // package draws by default. The unknown name is reported beside this read, so
331
+ // the reader hears which name stopped answering rather than guessing from shades.
332
+ const theme = library.get(settings.theme) ?? library.get(DEFAULT_THEME);
279
333
  const tokens = new Map();
280
334
  for (const [token, spec] of Object.entries(settings.tokens)) {
281
335
  if (spec !== undefined)
282
336
  tokens.set(token, spec);
283
337
  }
284
- return { palette: { ...DEFAULT_PALETTE, ...settings.palette }, tokens };
338
+ // The theme travels as its own layer rather than folded in here, so a reader's
339
+ // field merges over it one element at a time instead of replacing it.
340
+ return {
341
+ palette: { ...DEFAULT_PALETTE, ...theme?.palette, ...settings.palette },
342
+ tokens,
343
+ theme,
344
+ };
285
345
  }
286
346
  //# sourceMappingURL=theme-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-settings.js","sourceRoot":"","sources":["../src/theme-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-settings.js","sourceRoot":"","sources":["../src/theme-settings.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,13 @@ export declare function resetSequence(): string;
15
15
  * ordinary text that dimming looked like it had not been applied at all.
16
16
  */
17
17
  export declare const MUTED_GREY = "#8a8a8a";
18
+ /**
19
+ * The shade the reasoning signpost recedes to.
20
+ *
21
+ * The row naming a thought is a signpost, not the thought: it sits below the
22
+ * muted family so the body it introduces stays the thing being read.
23
+ */
24
+ export declare const FAINT_GREY = "#666666";
18
25
  /**
19
26
  * The shade a tool's argument takes.
20
27
  *
@@ -30,9 +37,30 @@ export declare const ARGUMENT_BLUE = "#8db3d9";
30
37
  * foreground, so telling the two apart meant reading them; a mint keeps them
31
38
  * apart at a glance without the pink cast a rose gave every prompt.
32
39
  */
33
- export declare const USER_PROMPT_MINT = "#27F5C8";
40
+ export declare const USER_PROMPT_MINT = "#27f5c8";
41
+ /**
42
+ * The band a changed run sits on inside an added line.
43
+ *
44
+ * The characters that changed are why a paired line is on screen at all, and
45
+ * they must stand out without leaving the row's own hue: a reader scanning a
46
+ * green row should not have to compare it against a second, unrelated colour to
47
+ * find what moved. An explicit dark shade rather than a palette slot, for the
48
+ * same reason the muted grey is one.
49
+ */
50
+ export declare const DIFF_ADDED_BAND = "#1e3d24";
51
+ /** The band a changed run sits on inside a removed line; the pair of {@link DIFF_ADDED_BAND}. */
52
+ export declare const DIFF_REMOVED_BAND = "#472424";
53
+ /**
54
+ * The shade the frame around an assistant reply is drawn in.
55
+ *
56
+ * A reply is boxed so one exchange reads as two objects rather than as a box and
57
+ * then a stream, and its frame must not be mistaken for the bar the reader types
58
+ * into: a warm gold sits apart from the prompt's mint and the brand-blue editor,
59
+ * without borrowing the warning amber that means a state.
60
+ */
61
+ export declare const ASSISTANT_FRAME_GOLD = "#d6c29a";
34
62
  /** Palette entries a token may name instead of a literal colour. */
35
- export declare const PALETTE_NAMES: readonly ["default", "muted", "accent", "arg", "warn", "added", "removed", "user", "assistant"];
63
+ export declare const PALETTE_NAMES: readonly ["default", "muted", "faint", "accent", "arg", "warn", "added", "removed", "user", "assistant"];
36
64
  /** A named palette entry. */
37
65
  export type PaletteName = (typeof PALETTE_NAMES)[number];
38
66
  /** A colour: an explicit hex value, or a palette entry. */
@@ -71,7 +99,7 @@ export type CardRowClass = (typeof CARD_ROW_CLASSES)[number];
71
99
  * fails if a token loses its default, so "every element" cannot quietly drift
72
100
  * as the surface grows.
73
101
  */
74
- export declare const TUI_TOKENS: readonly ["transcript.user", "transcript.notice", "transcript.marker", "transcript.reasoning.summary", "transcript.reasoning.body", "transcript.reasoning.hint", "tool.title", "tool.glyph", "tool.args", "tool.stat.added", "tool.stat.changed", "tool.stat.removed", "tool.stat.size", "tool.stat.separator", "tool.detail", "tool.hint", "tool.failed.title", "tool.failed.glyph", "tool.subcall.title", "tool.subcall.args", "tool.diff.header", "tool.diff.hunk", "tool.diff.added", "tool.diff.removed", "tool.read.header", "tool.read.lineNumber", "tool.read.line", "tool.search.path", "tool.search.lineNumber", "tool.search.match", "tool.search.truncated", "tool.terminal.cwd", "tool.terminal.status", "tool.terminal.output", "tool.web.url", "tool.web.source", "tool.web.truncated", "tool.generic.detail", "markdown.heading", "markdown.link", "markdown.linkUrl", "markdown.code", "markdown.codeBlock", "markdown.codeBlockBorder", "markdown.quote", "markdown.quoteBorder", "markdown.hr", "markdown.listBullet", "markdown.bold", "markdown.italic", "markdown.strikethrough", "markdown.underline", "markdown.diagram.border", "markdown.diagram.text", "markdown.diagram.edge", "markdown.diagram.edgeLabel", "markdown.diagram.title", "markdown.diagram.warning", "picker.title", "picker.glyph", "picker.note", "picker.filter", "picker.row", "picker.rowCurrent", "picker.scrollNewer", "picker.scrollOlder", "picker.hint", "picker.cursor", "gate.title", "gate.glyphApproval", "gate.glyphQuestion", "gate.detail", "gate.option", "gate.optionCurrent", "gate.cursor", "gate.hint", "dock.goal", "dock.planMode", "dock.todos.heading", "dock.todos.pending", "dock.todos.inProgress", "dock.todos.overflow", "dock.subagents.heading", "dock.subagents.running", "dock.subagents.overflow", "dock.jobs.heading", "dock.jobs.running", "dock.jobs.overflow", "status.prefix", "status.back", "status.activity.working", "status.activity.ready", "status.elapsed", "status.agentPreset", "status.model", "status.effort", "status.permission", "status.context", "status.cache", "status.stash", "status.cwd", "status.separator", "editor.border", "editor.queued", "editor.queued.more", "editor.ghost", "editor.selectList.selectedPrefix", "editor.selectList.selectedText", "editor.selectList.description", "editor.selectList.scrollInfo", "editor.selectList.noMatch"];
102
+ export declare const TUI_TOKENS: readonly ["transcript.user", "transcript.assistant.border", "transcript.notice", "transcript.marker", "transcript.reasoning.summary", "transcript.reasoning.body", "transcript.reasoning.hint", "tool.title", "tool.glyph", "tool.args", "tool.stat.added", "tool.stat.changed", "tool.stat.removed", "tool.stat.size", "tool.stat.separator", "tool.detail", "tool.hint", "tool.failed.title", "tool.failed.glyph", "tool.subcall.title", "tool.subcall.args", "tool.diff.header", "tool.diff.hunk", "tool.diff.added", "tool.diff.removed", "tool.read.header", "tool.read.lineNumber", "tool.read.line", "tool.search.path", "tool.search.lineNumber", "tool.search.match", "tool.search.truncated", "tool.terminal.cwd", "tool.terminal.status", "tool.terminal.output", "tool.web.url", "tool.web.source", "tool.web.truncated", "tool.generic.detail", "markdown.heading", "markdown.link", "markdown.linkUrl", "markdown.code", "markdown.codeBlock", "markdown.codeBlockBorder", "markdown.quote", "markdown.quoteBorder", "markdown.hr", "markdown.listBullet", "markdown.bold", "markdown.italic", "markdown.strikethrough", "markdown.underline", "markdown.diff.header", "markdown.diff.hunk", "markdown.diff.context", "markdown.diff.added", "markdown.diff.removed", "markdown.diff.addedEmphasis", "markdown.diff.removedEmphasis", "markdown.diagram.border", "markdown.diagram.text", "markdown.diagram.edge", "markdown.diagram.edgeLabel", "markdown.diagram.title", "markdown.diagram.warning", "picker.title", "picker.glyph", "picker.note", "picker.filter", "picker.row", "picker.rowCurrent", "picker.scrollNewer", "picker.scrollOlder", "picker.hint", "picker.cursor", "picker.border", "gate.title", "gate.glyphApproval", "gate.glyphQuestion", "gate.detail", "gate.option", "gate.optionCurrent", "gate.cursor", "gate.hint", "dock.goal", "dock.planMode", "dock.todos.heading", "dock.todos.pending", "dock.todos.inProgress", "dock.todos.overflow", "dock.subagents.heading", "dock.subagents.running", "dock.subagents.overflow", "dock.jobs.heading", "dock.jobs.running", "dock.jobs.overflow", "status.prefix", "status.back", "status.activity.working", "status.activity.ready", "status.elapsed", "status.agentPreset", "status.model", "status.effort", "status.permission", "status.context", "status.cache", "status.stash", "status.cwd", "status.separator", "editor.border", "editor.queued", "editor.queued.more", "editor.ghost", "editor.selectList.selectedPrefix", "editor.selectList.selectedText", "editor.selectList.description", "editor.selectList.scrollInfo", "editor.selectList.noMatch"];
75
103
  /** A name for one styled element on the surface. */
76
104
  export type TuiToken = (typeof TUI_TOKENS)[number];
77
105
  /**
@@ -91,20 +119,24 @@ export declare const DEFAULT_PALETTE: Readonly<Record<PaletteName, string>>;
91
119
  * A test asserts every token in {@link TUI_TOKENS} appears here.
92
120
  */
93
121
  export declare const DEFAULT_TOKENS: Readonly<Record<TuiToken, StyleSpec>>;
122
+ /** The elements a named theme draws its own way, as the layer a resolver takes. */
123
+ export type ThemedSpecs = Readonly<Partial<Record<TuiToken, StyleSpec>>>;
94
124
  /**
95
- * Merge one token's default, its `inherit` target, and the reader's override.
125
+ * Merge one token's default, its `inherit` target, a theme, and the reader.
96
126
  *
97
127
  * The inherited token's fields replace this token's defaults, because that is
98
- * what "start from another token" means; the reader's own fields still win.
128
+ * what "start from another token" means. A theme sits between the two because
129
+ * it is a layer the reader chose rather than one they wrote: it moves every
130
+ * element it names, and their own fields still have the last word.
99
131
  * A path-scoped set turns a cycle into a stop, and still lets two branches
100
132
  * inherit one token rather than sharing a single visit.
101
133
  */
102
- export declare function mergeTokenSpec(token: TuiToken, overrides: ReadonlyMap<TuiToken, StyleSpec>): StyleSpec;
134
+ export declare function mergeTokenSpec(token: TuiToken, overrides: ReadonlyMap<TuiToken, StyleSpec>, themed?: ThemedSpecs): StyleSpec;
103
135
  /**
104
136
  * Resolve one token into the escapes a renderer needs.
105
137
  *
106
138
  * Faint is dropped once a colour is chosen: stacking it on a deliberate grey is
107
139
  * what made the old output differ per terminal.
108
140
  */
109
- export declare function resolveToken(token: TuiToken, overrides: ReadonlyMap<TuiToken, StyleSpec>, palette: Readonly<Record<PaletteName, string>>, mode: ColourMode): ResolvedStyle;
141
+ export declare function resolveToken(token: TuiToken, overrides: ReadonlyMap<TuiToken, StyleSpec>, palette: Readonly<Record<PaletteName, string>>, mode: ColourMode, themed?: ThemedSpecs): ResolvedStyle;
110
142
  //# sourceMappingURL=theme-tokens.d.ts.map
@@ -1 +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,oxEA8Hb,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,CAgIhE,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"}
1
+ {"version":3,"file":"theme-tokens.d.ts","sourceRoot":"","sources":["../src/theme-tokens.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ export function resetSequence() {
18
18
  * ordinary text that dimming looked like it had not been applied at all.
19
19
  */
20
20
  export const MUTED_GREY = '#8a8a8a';
21
+ /**
22
+ * The shade the reasoning signpost recedes to.
23
+ *
24
+ * The row naming a thought is a signpost, not the thought: it sits below the
25
+ * muted family so the body it introduces stays the thing being read.
26
+ */
27
+ export const FAINT_GREY = '#666666';
21
28
  /**
22
29
  * The shade a tool's argument takes.
23
30
  *
@@ -33,9 +40,30 @@ export const ARGUMENT_BLUE = '#8db3d9';
33
40
  * foreground, so telling the two apart meant reading them; a mint keeps them
34
41
  * apart at a glance without the pink cast a rose gave every prompt.
35
42
  */
36
- export const USER_PROMPT_MINT = '#27F5C8';
43
+ export const USER_PROMPT_MINT = '#27f5c8';
44
+ /**
45
+ * The band a changed run sits on inside an added line.
46
+ *
47
+ * The characters that changed are why a paired line is on screen at all, and
48
+ * they must stand out without leaving the row's own hue: a reader scanning a
49
+ * green row should not have to compare it against a second, unrelated colour to
50
+ * find what moved. An explicit dark shade rather than a palette slot, for the
51
+ * same reason the muted grey is one.
52
+ */
53
+ export const DIFF_ADDED_BAND = '#1e3d24';
54
+ /** The band a changed run sits on inside a removed line; the pair of {@link DIFF_ADDED_BAND}. */
55
+ export const DIFF_REMOVED_BAND = '#472424';
56
+ /**
57
+ * The shade the frame around an assistant reply is drawn in.
58
+ *
59
+ * A reply is boxed so one exchange reads as two objects rather than as a box and
60
+ * then a stream, and its frame must not be mistaken for the bar the reader types
61
+ * into: a warm gold sits apart from the prompt's mint and the brand-blue editor,
62
+ * without borrowing the warning amber that means a state.
63
+ */
64
+ export const ASSISTANT_FRAME_GOLD = '#d6c29a';
37
65
  /** 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'];
66
+ export const PALETTE_NAMES = ['default', 'muted', 'faint', 'accent', 'arg', 'warn', 'added', 'removed', 'user', 'assistant'];
39
67
  /** A row class a tool card can carry, so styling follows what the row means. */
40
68
  export const CARD_ROW_CLASSES = [
41
69
  'header', 'hunk', 'added', 'removed', 'line', 'lineNumber', 'path', 'match', 'truncated', 'output', 'cwd', 'status', 'source', 'url', 'detail',
@@ -50,12 +78,14 @@ export const CARD_ROW_CLASSES = [
50
78
  export const TUI_TOKENS = [
51
79
  // Transcript rows
52
80
  'transcript.user',
81
+ 'transcript.assistant.border',
53
82
  'transcript.notice',
54
83
  'transcript.marker',
55
84
  'transcript.reasoning.summary',
56
85
  'transcript.reasoning.body',
57
86
  'transcript.reasoning.hint',
58
- // A reply is markdown, so the markdown tokens are what address it.
87
+ // A reply's text is markdown, so the markdown tokens are what address it; only
88
+ // the frame drawn around the reply has an element of its own.
59
89
  // Tool cards: the generic layer
60
90
  'tool.title',
61
91
  'tool.glyph',
@@ -105,6 +135,17 @@ export const TUI_TOKENS = [
105
135
  'markdown.italic',
106
136
  'markdown.strikethrough',
107
137
  'markdown.underline',
138
+ // A fenced diff is drawn by the surface rather than by the library's plain
139
+ // code path, so each row class is addressable on its own; the two emphasis
140
+ // entries are the characters that changed inside an otherwise matching pair,
141
+ // which is what tells an edit from a wholesale replacement.
142
+ 'markdown.diff.header',
143
+ 'markdown.diff.hunk',
144
+ 'markdown.diff.context',
145
+ 'markdown.diff.added',
146
+ 'markdown.diff.removed',
147
+ 'markdown.diff.addedEmphasis',
148
+ 'markdown.diff.removedEmphasis',
108
149
  // A drawn mermaid diagram: the renderer reports what each run *is*, so every
109
150
  // role a drawing can be made of is addressable on its own.
110
151
  'markdown.diagram.border',
@@ -126,6 +167,10 @@ export const TUI_TOKENS = [
126
167
  'picker.scrollOlder',
127
168
  'picker.hint',
128
169
  'picker.cursor',
170
+ // A picker drawn as a box rather than a list at the end of the transcript:
171
+ // the frame has to read as an overlay on the rows behind it, not as one more
172
+ // element of them.
173
+ 'picker.border',
129
174
  // Gate
130
175
  'gate.title',
131
176
  'gate.glyphApproval',
@@ -197,6 +242,7 @@ export const CARD_ROW_TOKEN = {
197
242
  export const DEFAULT_PALETTE = {
198
243
  default: '#d0d0d0',
199
244
  muted: MUTED_GREY,
245
+ faint: FAINT_GREY,
200
246
  accent: '#5fafd7',
201
247
  arg: ARGUMENT_BLUE,
202
248
  warn: '#d7af5f',
@@ -214,6 +260,21 @@ export const DEFAULT_PALETTE = {
214
260
  * colour is named, so carrying it would be a setting that does nothing.
215
261
  */
216
262
  const muted = { fg: 'muted' };
263
+ /**
264
+ * The reasoning row recedes past the muted family, hence its own entry.
265
+ *
266
+ * Italic is what separates the signpost from the thought it introduces; the
267
+ * darker grey is what makes the thought itself the brightest thing there.
268
+ */
269
+ const signpost = { fg: 'faint', italic: true };
270
+ /**
271
+ * A thought shares the signpost's shade but not its slant.
272
+ *
273
+ * The body is read rather than scanned, so it keeps an upright face while the
274
+ * row naming it stays italic; one shade for both is what makes a thought read
275
+ * as one element instead of two colours arguing.
276
+ */
277
+ const thought = { fg: 'faint' };
217
278
  const plain = {};
218
279
  /**
219
280
  * The shipped appearance of every token.
@@ -224,11 +285,12 @@ const plain = {};
224
285
  */
225
286
  export const DEFAULT_TOKENS = {
226
287
  'transcript.user': { fg: 'user' },
288
+ 'transcript.assistant.border': { fg: ASSISTANT_FRAME_GOLD },
227
289
  'transcript.notice': muted,
228
290
  'transcript.marker': muted,
229
- 'transcript.reasoning.summary': muted,
230
- 'transcript.reasoning.body': muted,
231
- 'transcript.reasoning.hint': muted,
291
+ 'transcript.reasoning.summary': signpost,
292
+ 'transcript.reasoning.body': thought,
293
+ 'transcript.reasoning.hint': signpost,
232
294
  'tool.title': { fg: 'warn' },
233
295
  'tool.glyph': { fg: 'warn' },
234
296
  'tool.args': { fg: 'arg' },
@@ -275,6 +337,18 @@ export const DEFAULT_TOKENS = {
275
337
  'markdown.italic': { italic: true },
276
338
  'markdown.strikethrough': { strike: true },
277
339
  'markdown.underline': { underline: true },
340
+ // A diff's scaffolding recedes the way a card's does, and its unchanged code
341
+ // keeps the plain shade a fence already had, so a reply without a diff fence
342
+ // draws exactly as it did.
343
+ 'markdown.diff.header': muted,
344
+ 'markdown.diff.hunk': muted,
345
+ 'markdown.diff.context': plain,
346
+ 'markdown.diff.added': { fg: 'added' },
347
+ 'markdown.diff.removed': { fg: 'removed' },
348
+ // The band is the emphasis and the foreground is inherited from the row, so a
349
+ // palette move carries both without the reader restating either.
350
+ 'markdown.diff.addedEmphasis': { inherit: 'markdown.diff.added', bg: DIFF_ADDED_BAND },
351
+ 'markdown.diff.removedEmphasis': { inherit: 'markdown.diff.removed', bg: DIFF_REMOVED_BAND },
278
352
  'markdown.diagram.border': muted,
279
353
  'markdown.diagram.text': plain,
280
354
  'markdown.diagram.edge': { fg: 'accent' },
@@ -291,6 +365,7 @@ export const DEFAULT_TOKENS = {
291
365
  'picker.scrollOlder': muted,
292
366
  'picker.hint': muted,
293
367
  'picker.cursor': plain,
368
+ 'picker.border': muted,
294
369
  'gate.title': { bold: true },
295
370
  'gate.glyphApproval': { bold: true },
296
371
  'gate.glyphQuestion': { bold: true },
@@ -367,25 +442,33 @@ function writtenFields(spec) {
367
442
  return written;
368
443
  }
369
444
  /**
370
- * Merge one token's default, its `inherit` target, and the reader's override.
445
+ * Merge one token's default, its `inherit` target, a theme, and the reader.
371
446
  *
372
447
  * The inherited token's fields replace this token's defaults, because that is
373
- * what "start from another token" means; the reader's own fields still win.
448
+ * what "start from another token" means. A theme sits between the two because
449
+ * it is a layer the reader chose rather than one they wrote: it moves every
450
+ * element it names, and their own fields still have the last word.
374
451
  * A path-scoped set turns a cycle into a stop, and still lets two branches
375
452
  * inherit one token rather than sharing a single visit.
376
453
  */
377
- export function mergeTokenSpec(token, overrides) {
454
+ export function mergeTokenSpec(token, overrides, themed) {
378
455
  const visiting = new Set();
379
456
  const merge = (name) => {
380
457
  if (visiting.has(name))
381
458
  return {};
382
459
  visiting.add(name);
383
460
  const own = DEFAULT_TOKENS[name];
461
+ const fromTheme = themed?.[name];
384
462
  const override = overrides.get(name);
385
- const parent = override?.inherit ?? own.inherit;
463
+ const parent = override?.inherit ?? fromTheme?.inherit ?? own.inherit;
386
464
  const inherited = parent === undefined ? {} : merge(parent);
387
465
  visiting.delete(name);
388
- return { ...withoutInherit(own), ...inherited, ...withoutInherit(writtenFields(override)) };
466
+ return {
467
+ ...withoutInherit(own),
468
+ ...inherited,
469
+ ...withoutInherit(writtenFields(fromTheme)),
470
+ ...withoutInherit(writtenFields(override)),
471
+ };
389
472
  };
390
473
  return merge(token);
391
474
  }
@@ -399,8 +482,8 @@ function colourParams(sequence) {
399
482
  * Faint is dropped once a colour is chosen: stacking it on a deliberate grey is
400
483
  * what made the old output differ per terminal.
401
484
  */
402
- export function resolveToken(token, overrides, palette, mode) {
403
- const merged = mergeTokenSpec(token, overrides);
485
+ export function resolveToken(token, overrides, palette, mode, themed) {
486
+ const merged = mergeTokenSpec(token, overrides, themed);
404
487
  if (merged.hidden === true)
405
488
  return { prefix: '', suffix: '', glyph: '', hidden: true };
406
489
  // With no colour capability the whole promise is "emit nothing", which