@sagmans/dsh-tui 0.3.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 (253) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +407 -53
  3. package/cordis.patch.yml +14 -0
  4. package/lib/agent/present.js +1 -1
  5. package/lib/agent/present.js.map +1 -1
  6. package/lib/agent/projections.d.ts +22 -6
  7. package/lib/agent/projections.d.ts.map +1 -1
  8. package/lib/agent/projections.js +21 -10
  9. package/lib/agent/projections.js.map +1 -1
  10. package/lib/agent/prompt-history.d.ts +89 -0
  11. package/lib/agent/prompt-history.d.ts.map +1 -0
  12. package/lib/agent/prompt-history.js +382 -0
  13. package/lib/agent/prompt-history.js.map +1 -0
  14. package/lib/agent/status.d.ts +6 -0
  15. package/lib/agent/status.d.ts.map +1 -1
  16. package/lib/agent/status.js +1 -0
  17. package/lib/agent/status.js.map +1 -1
  18. package/lib/cards.d.ts +83 -13
  19. package/lib/cards.d.ts.map +1 -1
  20. package/lib/cards.js +96 -28
  21. package/lib/cards.js.map +1 -1
  22. package/lib/export.d.ts +3 -3
  23. package/lib/export.d.ts.map +1 -1
  24. package/lib/export.js +23 -13
  25. package/lib/export.js.map +1 -1
  26. package/lib/fold-cursor.d.ts +12 -5
  27. package/lib/fold-cursor.d.ts.map +1 -1
  28. package/lib/fold-cursor.js +16 -5
  29. package/lib/fold-cursor.js.map +1 -1
  30. package/lib/gates.d.ts.map +1 -1
  31. package/lib/gates.js +42 -9
  32. package/lib/gates.js.map +1 -1
  33. package/lib/herdr/client.d.ts +57 -0
  34. package/lib/herdr/client.d.ts.map +1 -0
  35. package/lib/herdr/client.js +218 -0
  36. package/lib/herdr/client.js.map +1 -0
  37. package/lib/herdr/constants.d.ts +93 -0
  38. package/lib/herdr/constants.d.ts.map +1 -0
  39. package/lib/herdr/constants.js +79 -0
  40. package/lib/herdr/constants.js.map +1 -0
  41. package/lib/herdr/reporter.d.ts +60 -0
  42. package/lib/herdr/reporter.d.ts.map +1 -0
  43. package/lib/herdr/reporter.js +217 -0
  44. package/lib/herdr/reporter.js.map +1 -0
  45. package/lib/herdr/state.d.ts +57 -0
  46. package/lib/herdr/state.d.ts.map +1 -0
  47. package/lib/herdr/state.js +62 -0
  48. package/lib/herdr/state.js.map +1 -0
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +700 -81
  51. package/lib/index.js.map +1 -1
  52. package/lib/injection.d.ts +9 -0
  53. package/lib/injection.d.ts.map +1 -0
  54. package/lib/injection.js +128 -0
  55. package/lib/injection.js.map +1 -0
  56. package/lib/input/actions.d.ts +19 -2
  57. package/lib/input/actions.d.ts.map +1 -1
  58. package/lib/input/actions.js +60 -11
  59. package/lib/input/actions.js.map +1 -1
  60. package/lib/input/cancel.d.ts +55 -0
  61. package/lib/input/cancel.d.ts.map +1 -0
  62. package/lib/input/cancel.js +47 -0
  63. package/lib/input/cancel.js.map +1 -0
  64. package/lib/input/completion.d.ts +5 -2
  65. package/lib/input/completion.d.ts.map +1 -1
  66. package/lib/input/completion.js +79 -4
  67. package/lib/input/completion.js.map +1 -1
  68. package/lib/input/file-search.d.ts +105 -0
  69. package/lib/input/file-search.d.ts.map +1 -0
  70. package/lib/input/file-search.js +665 -0
  71. package/lib/input/file-search.js.map +1 -0
  72. package/lib/input/fuzzy.d.ts +42 -0
  73. package/lib/input/fuzzy.d.ts.map +1 -0
  74. package/lib/input/fuzzy.js +289 -0
  75. package/lib/input/fuzzy.js.map +1 -0
  76. package/lib/input/ghost.d.ts +46 -0
  77. package/lib/input/ghost.d.ts.map +1 -0
  78. package/lib/input/ghost.js +58 -0
  79. package/lib/input/ghost.js.map +1 -0
  80. package/lib/input/keymap.d.ts +3 -1
  81. package/lib/input/keymap.d.ts.map +1 -1
  82. package/lib/input/keymap.js +16 -3
  83. package/lib/input/keymap.js.map +1 -1
  84. package/lib/input/match.d.ts +12 -4
  85. package/lib/input/match.d.ts.map +1 -1
  86. package/lib/input/match.js +50 -51
  87. package/lib/input/match.js.map +1 -1
  88. package/lib/input/submission.d.ts +34 -1
  89. package/lib/input/submission.d.ts.map +1 -1
  90. package/lib/input/submission.js +33 -5
  91. package/lib/input/submission.js.map +1 -1
  92. package/lib/keys-command.d.ts +19 -3
  93. package/lib/keys-command.d.ts.map +1 -1
  94. package/lib/keys-command.js +34 -31
  95. package/lib/keys-command.js.map +1 -1
  96. package/lib/settings-notice.d.ts +5 -0
  97. package/lib/settings-notice.d.ts.map +1 -1
  98. package/lib/settings-notice.js +9 -7
  99. package/lib/settings-notice.js.map +1 -1
  100. package/lib/stash/lock.d.ts +72 -0
  101. package/lib/stash/lock.d.ts.map +1 -0
  102. package/lib/stash/lock.js +374 -0
  103. package/lib/stash/lock.js.map +1 -0
  104. package/lib/stash/paths.d.ts +22 -0
  105. package/lib/stash/paths.d.ts.map +1 -0
  106. package/lib/stash/paths.js +84 -0
  107. package/lib/stash/paths.js.map +1 -0
  108. package/lib/stash/private-fs.d.ts +61 -0
  109. package/lib/stash/private-fs.d.ts.map +1 -0
  110. package/lib/stash/private-fs.js +379 -0
  111. package/lib/stash/private-fs.js.map +1 -0
  112. package/lib/stash/schema.d.ts +56 -0
  113. package/lib/stash/schema.d.ts.map +1 -0
  114. package/lib/stash/schema.js +108 -0
  115. package/lib/stash/schema.js.map +1 -0
  116. package/lib/stash/store.d.ts +92 -0
  117. package/lib/stash/store.d.ts.map +1 -0
  118. package/lib/stash/store.js +262 -0
  119. package/lib/stash/store.js.map +1 -0
  120. package/lib/stash.d.ts +122 -0
  121. package/lib/stash.d.ts.map +1 -0
  122. package/lib/stash.js +353 -0
  123. package/lib/stash.js.map +1 -0
  124. package/lib/terminal/external-editor.d.ts +93 -0
  125. package/lib/terminal/external-editor.d.ts.map +1 -0
  126. package/lib/terminal/external-editor.js +263 -0
  127. package/lib/terminal/external-editor.js.map +1 -0
  128. package/lib/terminal/host-writes.d.ts +39 -0
  129. package/lib/terminal/host-writes.d.ts.map +1 -0
  130. package/lib/terminal/host-writes.js +136 -0
  131. package/lib/terminal/host-writes.js.map +1 -0
  132. package/lib/terminal/signals.d.ts +25 -0
  133. package/lib/terminal/signals.d.ts.map +1 -0
  134. package/lib/terminal/signals.js +39 -0
  135. package/lib/terminal/signals.js.map +1 -0
  136. package/lib/terminal/warning-screen.d.ts +19 -1
  137. package/lib/terminal/warning-screen.d.ts.map +1 -1
  138. package/lib/terminal/warning-screen.js +37 -1
  139. package/lib/terminal/warning-screen.js.map +1 -1
  140. package/lib/terminal-text.d.ts +72 -0
  141. package/lib/terminal-text.d.ts.map +1 -0
  142. package/lib/terminal-text.js +603 -0
  143. package/lib/terminal-text.js.map +1 -0
  144. package/lib/text.d.ts +45 -6
  145. package/lib/text.d.ts.map +1 -1
  146. package/lib/text.js +106 -46
  147. package/lib/text.js.map +1 -1
  148. package/lib/theme-command.d.ts +7 -4
  149. package/lib/theme-command.d.ts.map +1 -1
  150. package/lib/theme-command.js +32 -12
  151. package/lib/theme-command.js.map +1 -1
  152. package/lib/theme-files.d.ts +110 -0
  153. package/lib/theme-files.d.ts.map +1 -0
  154. package/lib/theme-files.js +352 -0
  155. package/lib/theme-files.js.map +1 -0
  156. package/lib/theme-schema.d.ts +121 -0
  157. package/lib/theme-schema.d.ts.map +1 -0
  158. package/lib/theme-schema.js +87 -0
  159. package/lib/theme-schema.js.map +1 -0
  160. package/lib/theme-settings.d.ts +72 -10
  161. package/lib/theme-settings.d.ts.map +1 -1
  162. package/lib/theme-settings.js +162 -45
  163. package/lib/theme-settings.js.map +1 -1
  164. package/lib/theme-tokens.d.ts +39 -7
  165. package/lib/theme-tokens.d.ts.map +1 -1
  166. package/lib/theme-tokens.js +104 -13
  167. package/lib/theme-tokens.js.map +1 -1
  168. package/lib/theme.d.ts +24 -2
  169. package/lib/theme.d.ts.map +1 -1
  170. package/lib/theme.js +49 -6
  171. package/lib/theme.js.map +1 -1
  172. package/lib/todo-guard.d.ts +116 -0
  173. package/lib/todo-guard.d.ts.map +1 -0
  174. package/lib/todo-guard.js +259 -0
  175. package/lib/todo-guard.js.map +1 -0
  176. package/lib/tool-display.d.ts +57 -0
  177. package/lib/tool-display.d.ts.map +1 -0
  178. package/lib/tool-display.js +51 -0
  179. package/lib/tool-display.js.map +1 -0
  180. package/lib/transcript.d.ts +28 -0
  181. package/lib/transcript.d.ts.map +1 -1
  182. package/lib/transcript.js +126 -37
  183. package/lib/transcript.js.map +1 -1
  184. package/lib/ui/diff.d.ts +49 -0
  185. package/lib/ui/diff.d.ts.map +1 -0
  186. package/lib/ui/diff.js +208 -0
  187. package/lib/ui/diff.js.map +1 -0
  188. package/lib/ui/dock.d.ts.map +1 -1
  189. package/lib/ui/dock.js +9 -6
  190. package/lib/ui/dock.js.map +1 -1
  191. package/lib/ui/editor.d.ts +41 -1
  192. package/lib/ui/editor.d.ts.map +1 -1
  193. package/lib/ui/editor.js +100 -4
  194. package/lib/ui/editor.js.map +1 -1
  195. package/lib/ui/frame.d.ts +16 -5
  196. package/lib/ui/frame.d.ts.map +1 -1
  197. package/lib/ui/frame.js +32 -13
  198. package/lib/ui/frame.js.map +1 -1
  199. package/lib/ui/history-picker.d.ts +15 -0
  200. package/lib/ui/history-picker.d.ts.map +1 -0
  201. package/lib/ui/history-picker.js +26 -0
  202. package/lib/ui/history-picker.js.map +1 -0
  203. package/lib/ui/keymap-picker.d.ts +16 -0
  204. package/lib/ui/keymap-picker.d.ts.map +1 -0
  205. package/lib/ui/keymap-picker.js +41 -0
  206. package/lib/ui/keymap-picker.js.map +1 -0
  207. package/lib/ui/layout.d.ts +33 -0
  208. package/lib/ui/layout.d.ts.map +1 -0
  209. package/lib/ui/layout.js +33 -0
  210. package/lib/ui/layout.js.map +1 -0
  211. package/lib/ui/markdown.d.ts +25 -3
  212. package/lib/ui/markdown.d.ts.map +1 -1
  213. package/lib/ui/markdown.js +12 -8
  214. package/lib/ui/markdown.js.map +1 -1
  215. package/lib/ui/picker-card.d.ts +42 -0
  216. package/lib/ui/picker-card.d.ts.map +1 -0
  217. package/lib/ui/picker-card.js +148 -0
  218. package/lib/ui/picker-card.js.map +1 -0
  219. package/lib/ui/picker.d.ts +50 -2
  220. package/lib/ui/picker.d.ts.map +1 -1
  221. package/lib/ui/picker.js +66 -7
  222. package/lib/ui/picker.js.map +1 -1
  223. package/lib/ui/prompt.d.ts +12 -2
  224. package/lib/ui/prompt.d.ts.map +1 -1
  225. package/lib/ui/prompt.js +25 -2
  226. package/lib/ui/prompt.js.map +1 -1
  227. package/lib/ui/rows.d.ts +8 -6
  228. package/lib/ui/rows.d.ts.map +1 -1
  229. package/lib/ui/rows.js +10 -18
  230. package/lib/ui/rows.js.map +1 -1
  231. package/lib/ui/stash-picker.d.ts +43 -0
  232. package/lib/ui/stash-picker.d.ts.map +1 -0
  233. package/lib/ui/stash-picker.js +78 -0
  234. package/lib/ui/stash-picker.js.map +1 -0
  235. package/lib/ui/status.d.ts +2 -0
  236. package/lib/ui/status.d.ts.map +1 -1
  237. package/lib/ui/status.js +25 -16
  238. package/lib/ui/status.js.map +1 -1
  239. package/lib/ui/theme-picker.d.ts +18 -0
  240. package/lib/ui/theme-picker.d.ts.map +1 -0
  241. package/lib/ui/theme-picker.js +68 -0
  242. package/lib/ui/theme-picker.js.map +1 -0
  243. package/lib/ui/view.d.ts +146 -22
  244. package/lib/ui/view.d.ts.map +1 -1
  245. package/lib/ui/view.js +461 -154
  246. package/lib/ui/view.js.map +1 -1
  247. package/lib/work.d.ts +3 -1
  248. package/lib/work.d.ts.map +1 -1
  249. package/lib/work.js +9 -1
  250. package/lib/work.js.map +1 -1
  251. package/package.json +7 -1
  252. package/themes/deepseek-blue.yaml +183 -0
  253. package/themes/violet-orbit.yaml +178 -0
package/lib/transcript.js CHANGED
@@ -1,7 +1,16 @@
1
- import { cardFromLines, carriedFields, mergeCards, subCallOf, SUBCALL_MAX } from "./cards.js";
1
+ import { cardFromLines, carriedFields, contentLines, mergeCards, subCallOf, subCallRows, SUBCALL_MAX } from "./cards.js";
2
+ import { injectionSummary } from "./injection.js";
3
+ import { sliceGraphemes, tailGraphemes } from "./text.js";
2
4
  import { countTokens } from "./tokens.js";
3
5
  /** Reasoning kept per settled block, so one runaway thought cannot grow the transcript without bound. */
4
6
  export const REASONING_CHAR_LIMIT = 20_000;
7
+ /**
8
+ * How far a live thought may grow past that budget before its head is dropped.
9
+ *
10
+ * The slice itself is linear, so a burst of slack makes it happen once per
11
+ * thought rather than on every delta that crosses the limit.
12
+ */
13
+ const LIVE_THOUGHT_SLACK = 2;
5
14
  /** The token count with its noun, because "1 tokens" reads as a bug. */
6
15
  function describeTokens(text) {
7
16
  const tokens = countTokens(text);
@@ -79,21 +88,6 @@ function messageOf(value) {
79
88
  return record.code;
80
89
  return '';
81
90
  }
82
- /**
83
- * Summarize an injected context block.
84
- *
85
- * Injected instructions can be thousands of lines and are rewritten by the
86
- * model, not read by the human, so the row names the producer and its size and
87
- * keeps one line of preview instead of pushing the conversation off screen.
88
- */
89
- function injectionSummary(data, text) {
90
- const source = asRecord(data.source) ?? {};
91
- const plugin = typeof source.plugin === 'string' ? source.plugin : 'plugin';
92
- const lines = text.split('\n').filter(line => line.trim() !== '');
93
- const first = lines[0]?.trim() ?? '';
94
- const preview = first.length > 72 ? `${first.slice(0, 71)}…` : first;
95
- return `injected ${plugin} · ${lines.length} lines${preview === '' ? '' : ` — ${preview}`}`;
96
- }
97
91
  /**
98
92
  * Fold durable session events into readable rows, and hold the in-flight
99
93
  * assistant text and reasoning apart from them.
@@ -125,6 +119,14 @@ export class TranscriptModel {
125
119
  * message, so the recorded copy is a repeat rather than a second thought.
126
120
  */
127
121
  reasoningPaintedThisStep = false;
122
+ /**
123
+ * Ids for thought rows, and the id the live thought will settle under.
124
+ *
125
+ * The counter never restarts: a click outlives the entry it was made on, and
126
+ * a reused id would hand that choice to a later session's thought.
127
+ */
128
+ thoughtSeq = 0;
129
+ liveReasoningId;
128
130
  constructor(presenter,
129
131
  /** Clock for "how long has this been thinking"; injected so a test can pin it. */
130
132
  now = () => Date.now()) {
@@ -138,6 +140,9 @@ export class TranscriptModel {
138
140
  const ranFor = this.reasoningStartedAt === undefined ? undefined : this.now() - this.reasoningStartedAt;
139
141
  entries.push({
140
142
  kind: 'reasoning',
143
+ // The live row and the row it settles into share an id, so a click made
144
+ // while the model is still thinking survives the thought landing.
145
+ id: this.liveReasoningId ?? '',
141
146
  summary: `reasoning · ${describeTokens(this.liveReasoning)}${ranFor === undefined ? '' : ` · ${Math.max(1, Math.round(ranFor / 1000))}s`} · streaming`,
142
147
  body: this.liveReasoning,
143
148
  live: true,
@@ -164,8 +169,13 @@ export class TranscriptModel {
164
169
  reset() {
165
170
  this.settled.length = 0;
166
171
  this.pending.clear();
172
+ // The sub-call bookkeeping names rows of the fold being dropped, so it goes
173
+ // with them: an index kept across the reset would refuse a replayed call the
174
+ // row it is entitled to.
175
+ this.pendingSub.clear();
167
176
  this.live = '';
168
177
  this.liveReasoning = '';
178
+ this.liveReasoningId = undefined;
169
179
  this.reasoningStartedAt = undefined;
170
180
  this.reasoningPaintedThisStep = false;
171
181
  }
@@ -191,7 +201,15 @@ export class TranscriptModel {
191
201
  if (typeof record.text !== 'string')
192
202
  return;
193
203
  this.reasoningStartedAt ??= this.now();
204
+ this.liveReasoningId ??= String(++this.thoughtSeq);
194
205
  this.liveReasoning += record.text;
206
+ // A live thought is not bounded until the block it belongs to ends, and
207
+ // every frame re-wraps what this holds: past a burst of slack the head is
208
+ // dropped in one step, so a runaway thought costs a bounded wrap per frame
209
+ // instead of a growing one. The recorded text, not this, is what settles.
210
+ if (this.liveReasoning.length > REASONING_CHAR_LIMIT * LIVE_THOUGHT_SLACK) {
211
+ this.liveReasoning = tailGraphemes(this.liveReasoning, REASONING_CHAR_LIMIT);
212
+ }
195
213
  return;
196
214
  case 'block-end': {
197
215
  const block = asRecord(record.block);
@@ -237,14 +255,19 @@ export class TranscriptModel {
237
255
  */
238
256
  paintReasoning(text, ranFor) {
239
257
  const timing = ranFor === undefined ? '' : ` · ${Math.max(1, Math.round(ranFor / 1000))}s`;
240
- const cut = text.length > REASONING_CHAR_LIMIT ? `\n… truncated at ${REASONING_CHAR_LIMIT} chars` : '';
258
+ const kept = sliceGraphemes(text, REASONING_CHAR_LIMIT);
259
+ const cut = kept.length === text.length ? '' : `\n… truncated at ${REASONING_CHAR_LIMIT} chars`;
260
+ // The live thought keeps the id the stream gave it; a thought only the
261
+ // recorded message carries takes the next one.
262
+ const id = this.liveReasoningId ?? String(++this.thoughtSeq);
263
+ this.liveReasoningId = undefined;
241
264
  this.settled.push({
242
265
  kind: 'reasoning',
266
+ id,
243
267
  summary: `reasoning · ${describeTokens(text)}${timing}`,
244
- body: text.slice(0, REASONING_CHAR_LIMIT) + cut,
268
+ body: kept + cut,
245
269
  live: false,
246
270
  });
247
- this.reasoningPaintedThisStep = true;
248
271
  }
249
272
  /** Settle the reasoning streamed so far into a row of its own. */
250
273
  settleReasoning() {
@@ -255,6 +278,9 @@ export class TranscriptModel {
255
278
  this.liveReasoning = '';
256
279
  this.reasoningStartedAt = undefined;
257
280
  this.paintReasoning(text, ranFor);
281
+ // This thought arrived as a stream, so the recorded copy the step ends with
282
+ // restates it rather than reporting a second one.
283
+ this.reasoningPaintedThisStep = true;
258
284
  }
259
285
  apply(event) {
260
286
  const data = asRecord(event.data) ?? {};
@@ -273,6 +299,12 @@ export class TranscriptModel {
273
299
  // A turn that ended without a recorded message must not leave streamed
274
300
  // text on screen as though it had settled.
275
301
  this.live = '';
302
+ // The same goes for the thought that was streaming: left in place it
303
+ // would stay live across the gap and the next turn's deltas would be
304
+ // appended to a thought that turn never had.
305
+ this.liveReasoning = '';
306
+ this.liveReasoningId = undefined;
307
+ this.reasoningStartedAt = undefined;
276
308
  // A step that ended without a message cannot own the next one's thoughts.
277
309
  this.reasoningPaintedThisStep = false;
278
310
  return;
@@ -325,13 +357,16 @@ export class TranscriptModel {
325
357
  case 'tool/call': {
326
358
  const name = typeof data.name === 'string' ? data.name : 'tool';
327
359
  const argumentsJson = typeof data.arguments === 'string' ? data.arguments : '';
360
+ const callId = typeof data.callId === 'string' ? data.callId : '';
328
361
  const card = this.presenter?.call(name, argumentsJson);
329
362
  this.settled.push({
330
363
  kind: 'tool',
364
+ // The id is what keeps a reader's click on this message after the
365
+ // result replaces the card: the entry object does not survive, the id does.
366
+ id: callId,
331
367
  // Without a presenter the row still has to say what ran and with what.
332
- card: card ?? cardFromLines('generic', name, argumentsJson === '' ? [] : argumentsJson.split('\n'), false),
368
+ card: card ?? cardFromLines('generic', name, name, argumentsJson === '' ? [] : argumentsJson.split('\n'), false),
333
369
  });
334
- const callId = typeof data.callId === 'string' ? data.callId : '';
335
370
  if (callId !== '')
336
371
  this.pending.set(callId, { name, argumentsJson, index: this.settled.length - 1, subs: [] });
337
372
  return;
@@ -370,31 +405,84 @@ export class TranscriptModel {
370
405
  const card = entry !== undefined && entry.kind === 'tool' ? entry.card : undefined;
371
406
  if (card === undefined)
372
407
  return;
408
+ const name = typeof data.name === 'string' ? data.name : 'tool';
409
+ const argumentsJson = argumentsJsonOf(data.arguments);
410
+ // The call's own view is asked for once: it names the row and it is what the
411
+ // row shows of the call itself, so two asks could disagree about one call.
412
+ const view = this.presenter?.call(name, argumentsJson);
413
+ const isError = data.isError === true;
414
+ const output = settled ? this.subCallOutcome(name, argumentsJson, data, view) : undefined;
373
415
  const known = this.pendingSub.get(subCallId);
374
416
  if (known !== undefined) {
375
- // A settle only restates the row its start already drew, and only when the
376
- // call failed; nothing else about the row can change.
377
- if (!settled || known.childIndex < 0 || data.isError !== true)
417
+ // A settle restates the row its start drew: it adds the outcome a reader
418
+ // opens the row for, and a failure takes back what the call only declared.
419
+ if (!settled || known.childIndex < 0)
420
+ return;
421
+ if (!isError && output === undefined)
378
422
  return;
379
- const subCalls = (card.subCalls ?? []).map((call, at) => (at === known.childIndex ? { ...call, failed: true } : call));
380
- this.settled[root.index] = { kind: 'tool', card: { ...card, subCalls } };
423
+ const subCalls = (card.subCalls ?? []).map((call, at) => at === known.childIndex
424
+ ? this.settledSubCall(call, isError, output)
425
+ : call);
426
+ this.settled[root.index] = { kind: 'tool', id: rootCallId, card: { ...card, subCalls } };
381
427
  return;
382
428
  }
383
- const name = typeof data.name === 'string' ? data.name : 'tool';
384
- const argumentsJson = argumentsJsonOf(data.arguments);
385
- const call = { ...subCallOf(name, argumentsJson, this.presenter?.call(name, argumentsJson)), failed: settled && data.isError === true };
429
+ const presented = subCallRows(view);
430
+ const failed = settled && isError;
431
+ const call = {
432
+ ...subCallOf(subCallId, name, argumentsJson, view),
433
+ failed,
434
+ ...(presented === undefined || failed ? {} : { presented }),
435
+ ...(output === undefined ? {} : { output }),
436
+ };
386
437
  const kept = card.subCalls ?? [];
387
438
  const total = (card.subCallsTotal ?? 0) + 1;
388
439
  if (kept.length >= SUBCALL_MAX) {
389
440
  // Retention keeps the head, where the calls that shaped the program are;
390
- // the count still reports everything it dispatched.
441
+ // the count still reports everything it dispatched. The id is remembered
442
+ // so a settle is not counted twice, and listed on the root so the root's
443
+ // own cleanup forgets it — an overflow row has no row to clean up after.
391
444
  this.pendingSub.set(subCallId, { rootIndex: root.index, childIndex: -1 });
392
- this.settled[root.index] = { kind: 'tool', card: { ...card, subCallsTotal: total } };
445
+ root.subs.push(subCallId);
446
+ this.settled[root.index] = { kind: 'tool', id: rootCallId, card: { ...card, subCallsTotal: total } };
393
447
  return;
394
448
  }
395
449
  root.subs.push(subCallId);
396
450
  this.pendingSub.set(subCallId, { rootIndex: root.index, childIndex: kept.length });
397
- this.settled[root.index] = { kind: 'tool', card: { ...card, subCalls: [...kept, call], subCallsTotal: total } };
451
+ this.settled[root.index] = { kind: 'tool', id: rootCallId, card: { ...card, subCalls: [...kept, call], subCallsTotal: total } };
452
+ }
453
+ /**
454
+ * The row a settle leaves behind, once the outcome the call produced is known.
455
+ *
456
+ * A row that failed keeps only what still holds: its declared change never
457
+ * happened, so those rows go with the outcome that never came, while the
458
+ * outcome stays because the reason it failed is what a reader opens it to read.
459
+ */
460
+ settledSubCall(call, isError, output) {
461
+ const outcome = output === undefined ? {} : { output };
462
+ if (!isError)
463
+ return { ...call, ...outcome };
464
+ return {
465
+ id: call.id,
466
+ title: call.title,
467
+ ...(call.argument === undefined ? {} : { argument: call.argument }),
468
+ failed: true,
469
+ ...outcome,
470
+ };
471
+ }
472
+ /**
473
+ * The outcome a dispatched call opens to, from the view its result presented.
474
+ *
475
+ * A presenter can only rebuild the view it declared when the logged content is
476
+ * enough for it: a shell's output is, while a read's numbered window and a
477
+ * search's hits live in the metadata a dispatch does not carry. The fallback is
478
+ * the content the program was actually shown, so a row whose tool cannot be
479
+ * re-presented still opens to its outcome rather than to nothing.
480
+ */
481
+ subCallOutcome(name, argumentsJson, data, view) {
482
+ const failed = data.isError === true;
483
+ const card = this.presenter?.result(name, { argumentsJson, content: data.content, isError: failed, meta: data.meta })
484
+ ?? cardFromLines(view?.kind ?? 'generic', name, view?.title ?? name, contentLines(data.content), failed);
485
+ return subCallRows(card);
398
486
  }
399
487
  settleToolResult(data) {
400
488
  const message = asRecord(data.message);
@@ -420,7 +508,8 @@ export class TranscriptModel {
420
508
  // No matching call in this fold: a resumed transcript may start mid-call.
421
509
  this.settled.push({
422
510
  kind: 'tool',
423
- card: result ?? cardFromLines('generic', name, contentLinesOf(message?.content), isError),
511
+ id: callId,
512
+ card: result ?? cardFromLines('generic', name, name, contentLinesOf(message?.content), isError),
424
513
  });
425
514
  return;
426
515
  }
@@ -430,14 +519,14 @@ export class TranscriptModel {
430
519
  // No presenter answered: the model-facing content is still what happened,
431
520
  // and a reader without it would see a tool row that never reported back.
432
521
  const reported = contentLinesOf(message?.content);
433
- const base = call ?? cardFromLines('generic', name, [], false);
522
+ const base = call ?? cardFromLines('generic', name, name, [], false);
434
523
  const rebuilt = reported.length === 0
435
524
  ? { ...base, failed: isError }
436
- : { ...cardFromLines(base.kind, base.title, reported, isError), ...carriedFields(base) };
437
- this.settled[pending.index] = { kind: 'tool', card: rebuilt };
525
+ : { ...cardFromLines(base.kind, base.tool, base.title, reported, isError), ...carriedFields(base) };
526
+ this.settled[pending.index] = { kind: 'tool', id: callId, card: rebuilt };
438
527
  return;
439
528
  }
440
- this.settled[pending.index] = { kind: 'tool', card: mergeCards(call, { ...result, failed: isError }) };
529
+ this.settled[pending.index] = { kind: 'tool', id: callId, card: mergeCards(call, { ...result, failed: isError }) };
441
530
  }
442
531
  }
443
532
  //# sourceMappingURL=transcript.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAqC,MAAM,YAAY,CAAA;AAChI,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAWzC,yGAAyG;AACzG,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAA;AAE1C,wEAAwE;AACxE,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAChC,OAAO,GAAG,MAAM,SAAS,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;AACpD,CAAC;AAsBD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,SAAS,CAAA;AACrG,CAAC;AAED,yFAAyF;AACzF,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IACtC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAClC,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;YAAE,SAAQ;QACzC,yEAAyE;QACzE,yCAAyC;QACzC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB;IACrC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,OAAgB;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IACtC,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAClC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9F,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IACvF,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAA6B;IAC/C,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;AACnE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACnC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,OAAO,CAAA;IAC7D,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAA;IACvD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,IAA6B,EAAE,IAAY;IACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC1C,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA;IACpE,OAAO,YAAY,MAAM,MAAM,KAAK,CAAC,MAAM,SAAS,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,EAAE,CAAA;AAC7F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IAsBP;IAEA;IAvBF,OAAO,GAAsB,EAAE,CAAA;IAC/B,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAA;IACzD;;;;;OAKG;IACc,UAAU,GAAG,IAAI,GAAG,EAAuE,CAAA;IACpG,IAAI,GAAG,EAAE,CAAA;IACT,aAAa,GAAG,EAAE,CAAA;IAClB,kBAAkB,CAAoB;IAC9C;;;;;OAKG;IACK,wBAAwB,GAAG,KAAK,CAAA;IAExC,YACmB,SAAyB;IAC1C,kFAAkF;IACjE,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAFpC,cAAS,GAAT,SAAS,CAAgB;QAEzB,QAAG,GAAH,GAAG,CAAiC;IACpD,CAAC;IAEJ,sFAAsF;IACtF,OAAO;QACL,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;QACjC,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAA;YACvG,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,eAAe,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,cAAc;gBACtJ,IAAI,EAAE,IAAI,CAAC,aAAa;gBACxB,IAAI,EAAE,IAAI;aACX,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1E,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;;;OAMG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;IAC5B,CAAC;IAED,yEAAyE;IACzE,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,CAAA;IACnF,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;QACd,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAA;QACnC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;IACvC,CAAC;IAED,gFAAgF;IAChF,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,mFAAmF;IACnF,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,kDAAkD;IAClD,gBAAgB,CAAC,KAAc;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAM;QAChC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,YAAY;gBACf,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAA;gBAC7D,OAAM;YACR,KAAK,iBAAiB;gBACpB,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAM;gBAC3C,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAA;gBACtC,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAA;gBACjC,OAAM;YACR,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACpC,0EAA0E;gBAC1E,0EAA0E;gBAC1E,uDAAuD;gBACvD,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW;oBAAE,IAAI,CAAC,eAAe,EAAE,CAAA;gBACvD,OAAM;YACR,CAAC;YACD;gBACE,OAAM;QACV,CAAC;IACH,CAAC;IAED,2FAA2F;IACnF,aAAa,CAAC,MAA+B;QACnD,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAA;QACxE,IAAI,IAAI,KAAK,WAAW;YAAE,OAAM;QAChC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YAChH,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,MAAM,EAAE,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;YAChE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,IAAI,EAAE,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,8EAA8E;IAC9E,WAAW,CAAC,KAAc;QACxB,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC9F,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,IAAY,EAAE,MAA0B;QAC7D,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAA;QAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,oBAAoB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QACtG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,eAAe,cAAc,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;YACvD,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,GAAG;YAC/C,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;QACF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAA;IACtC,CAAC;IAED,kEAAkE;IAC1D,eAAe;QACrB,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE;YAAE,OAAM;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAA;QACvG,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAA;QACnC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,KAAoB;QACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACvC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACxC,IAAI,IAAI,KAAK,EAAE;oBAAE,OAAM;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,MAAM;oBAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;oBACxB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC3D,OAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC/C,uEAAuE;gBACvE,2CAA2C;gBAC3C,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;gBACd,0EAA0E;gBAC1E,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;gBACrC,OAAM;YACR,CAAC;YACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;gBAC7B,qEAAqE;gBACrE,qDAAqD;gBACrD,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC7E,IAAI,QAAQ,KAAK,EAAE;oBAAE,IAAI,CAAC,MAAM,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAA;gBACxD,OAAM;YACR,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC9E,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAA;gBAChG,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,UAAU,CAAA;gBAC/D,uEAAuE;gBACvE,wDAAwD;gBACxD,IAAI,CAAC,MAAM,CAAC,aAAa,MAAM,UAAU,IAAI,EAAE,CAAC,CAAA;gBAChD,OAAM;YACR,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,yEAAyE;gBACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACrE,IAAI,OAAO,KAAK,EAAE;oBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,OAAO,EAAE,EAAE,CAAC,CAAA;gBAC7F,OAAM;YACR,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;gBAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;gBACnC,oEAAoE;gBACpE,qDAAqD;gBACrD,IAAI,CAAC,eAAe,EAAE,CAAA;gBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAA;gBAC7C,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;gBACrC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC;wBAAE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;gBAC1F,CAAC;gBACD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;gBACd,IAAI,IAAI,KAAK,EAAE;oBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC/D,OAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;gBAC/D,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;gBACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,MAAM;oBACZ,uEAAuE;oBACvE,IAAI,EAAE,IAAI,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;iBAC3G,CAAC,CAAA;gBACF,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;gBACjE,IAAI,MAAM,KAAK,EAAE;oBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;gBAC9G,OAAM;YACR,CAAC;YACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAC9B,OAAM;YACR,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBAC7B,OAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;gBAC3B,OAAM;YACR,CAAC;YACD;gBACE,OAAM;QACV,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,YAAY,CAAC,IAA6B,EAAE,OAAgB;QAClE,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7E,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1E,MAAM,IAAI,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACzE,IAAI,IAAI,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;YAAE,OAAM;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtC,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;QAClF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAM;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,2EAA2E;YAC3E,sDAAsD;YACtD,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,OAAM;YACrE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YACtH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAA;YACxE,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;QAC/D,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAA;QACvI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;QAChC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;YAC/B,yEAAyE;YACzE,oDAAoD;YACpD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;YACzE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,CAAA;YACpF,OAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,CAAA;IACjH,CAAC;IAEO,gBAAgB,CAAC,IAA6B;QACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC7F,MAAM,MAAM,GAAG,OAAO,UAAU,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;QACtF,MAAM,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpE,IAAI,MAAM,KAAK,EAAE;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC9C,6EAA6E;QAC7E,iCAAiC;QACjC,IAAI,OAAO,KAAK,SAAS;YAAE,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI;gBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtF,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,MAAM,CAAA;QACpC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE;YAC1C,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,EAAE;YAC3C,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAA;QACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,0EAA0E;YAC1E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;aAC1F,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,0EAA0E;YAC1E,yEAAyE;YACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACjD,MAAM,IAAI,GAAG,IAAI,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;YAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACnC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;gBAC9B,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAA;YAC1F,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;YAC7D,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;IACxG,CAAC;CACF"}
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { TuiToken } from '../theme-tokens.ts';
2
+ /**
3
+ * The fence languages that name a unified diff.
4
+ *
5
+ * \`patch\` is git's own name for the format. Every other language keeps the
6
+ * library's plain code path, because guessing from the +/- signs would recolour a
7
+ * diff-shaped fragment of some other text as a change it is not.
8
+ */
9
+ export declare const DIFF_FENCE_LANGUAGES: readonly ["diff", "patch"];
10
+ /**
11
+ * How much text two paired rows must share before their difference is an edit.
12
+ *
13
+ * Below this the pair is a replacement that merely sits next to its old row, and
14
+ * banding the middle of both would mark nearly the whole row as changed — the one
15
+ * outcome that reads worse than no emphasis at all.
16
+ */
17
+ export declare const DIFF_MIN_SHARED_GRAPHEMES = 4;
18
+ /**
19
+ * The longest pair this draws run by run.
20
+ *
21
+ * A streaming reply asks for the block again on every delta, and cutting a wall
22
+ * of text into clusters twice per pair buys nothing a reader can see: past this
23
+ * the pair draws whole-row, which is how a replacement looks anyway.
24
+ */
25
+ export declare const DIFF_EMPHASIS_MAX_GRAPHEMES = 2048;
26
+ /** How a fenced block draws where it names a language the surface does not draw itself. */
27
+ export interface FenceLook {
28
+ readonly style: (token: TuiToken, text: string) => string;
29
+ readonly visible: (token: TuiToken) => boolean;
30
+ /** The shade a code row keeps when its language has no drawing of its own. */
31
+ readonly plain: (line: string) => string;
32
+ }
33
+ /** A look for a block this surface draws itself, where the plain path is never reached. */
34
+ export type DiffLook = Omit<FenceLook, 'plain'>;
35
+ /** Whether a fence names a unified diff. */
36
+ export declare function isDiffFence(lang: string | undefined): boolean;
37
+ /**
38
+ * The library's own code-block path: one row per source line in the fence's plain shade.
39
+ *
40
+ * Spelled here rather than left to the library because a theme that answers for
41
+ * one language answers for every fence the library draws, and the rows of the
42
+ * languages it does not draw have to come out exactly as they did before.
43
+ */
44
+ export declare function plainCodeLines(code: string, plain: (line: string) => string): string[];
45
+ /** Every row of a fence: a diff drawn row by row, or the plain path for any other language. */
46
+ export declare function codeBlockLines(code: string, lang: string | undefined, look: FenceLook): string[];
47
+ /** One fenced diff, row by row, in the diff elements: headers and hunks recede and a changed run is banded. */
48
+ export declare function renderDiffBlock(code: string, look: DiffLook): string[];
49
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/ui/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAGlD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,4BAA6B,CAAA;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAoD/C,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACzD,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAA;IAC9C,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CACzC;AAED,2FAA2F;AAC3F,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAO/C,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,CAEtF;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAEhG;AAsGD,+GAA+G;AAC/G,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAWtE"}
package/lib/ui/diff.js ADDED
@@ -0,0 +1,208 @@
1
+ import { splitGraphemes } from "../text.js";
2
+ /**
3
+ * The fence languages that name a unified diff.
4
+ *
5
+ * \`patch\` is git's own name for the format. Every other language keeps the
6
+ * library's plain code path, because guessing from the +/- signs would recolour a
7
+ * diff-shaped fragment of some other text as a change it is not.
8
+ */
9
+ export const DIFF_FENCE_LANGUAGES = ['diff', 'patch'];
10
+ /**
11
+ * How much text two paired rows must share before their difference is an edit.
12
+ *
13
+ * Below this the pair is a replacement that merely sits next to its old row, and
14
+ * banding the middle of both would mark nearly the whole row as changed — the one
15
+ * outcome that reads worse than no emphasis at all.
16
+ */
17
+ export const DIFF_MIN_SHARED_GRAPHEMES = 4;
18
+ /**
19
+ * The longest pair this draws run by run.
20
+ *
21
+ * A streaming reply asks for the block again on every delta, and cutting a wall
22
+ * of text into clusters twice per pair buys nothing a reader can see: past this
23
+ * the pair draws whole-row, which is how a replacement looks anyway.
24
+ */
25
+ export const DIFF_EMPHASIS_MAX_GRAPHEMES = 2048;
26
+ /**
27
+ * File-level scaffolding a unified diff carries around its hunks.
28
+ *
29
+ * Matched on the row's own prefix, so a content row — which always carries a
30
+ * sign or the context space — can never reach this list.
31
+ */
32
+ const DIFF_META_PREFIXES = [
33
+ 'diff --git ',
34
+ 'diff --cc ',
35
+ 'diff --combined ',
36
+ 'index ',
37
+ 'new file mode ',
38
+ 'deleted file mode ',
39
+ 'old mode ',
40
+ 'new mode ',
41
+ 'similarity index ',
42
+ 'dissimilarity index ',
43
+ 'rename from ',
44
+ 'rename to ',
45
+ 'copy from ',
46
+ 'copy to ',
47
+ 'Binary files ',
48
+ 'GIT binary patch',
49
+ '\',
50
+ ];
51
+ /** The element each row class draws in. */
52
+ const ROW_TOKEN = {
53
+ header: 'markdown.diff.header',
54
+ hunk: 'markdown.diff.hunk',
55
+ context: 'markdown.diff.context',
56
+ added: 'markdown.diff.added',
57
+ removed: 'markdown.diff.removed',
58
+ };
59
+ /** The band the changed characters of a paired row draw on; a row class with no partner has none. */
60
+ const EMPHASIS_TOKEN = {
61
+ added: 'markdown.diff.addedEmphasis',
62
+ removed: 'markdown.diff.removedEmphasis',
63
+ };
64
+ /** The first word of a fence's info string, lowercased: an info string may carry more than the language. */
65
+ function fenceLanguage(lang) {
66
+ return lang?.trim().split(/\s+/, 1)[0]?.toLowerCase() ?? '';
67
+ }
68
+ /** Whether a fence names a unified diff. */
69
+ export function isDiffFence(lang) {
70
+ return DIFF_FENCE_LANGUAGES.includes(fenceLanguage(lang));
71
+ }
72
+ /**
73
+ * The library's own code-block path: one row per source line in the fence's plain shade.
74
+ *
75
+ * Spelled here rather than left to the library because a theme that answers for
76
+ * one language answers for every fence the library draws, and the rows of the
77
+ * languages it does not draw have to come out exactly as they did before.
78
+ */
79
+ export function plainCodeLines(code, plain) {
80
+ return code.split('\n').map(line => plain(line));
81
+ }
82
+ /** Every row of a fence: a diff drawn row by row, or the plain path for any other language. */
83
+ export function codeBlockLines(code, lang, look) {
84
+ return isDiffFence(lang) ? renderDiffBlock(code, look) : plainCodeLines(code, look.plain);
85
+ }
86
+ /**
87
+ * What one row is, with the two rows that look alike told apart.
88
+ *
89
+ * A removed row whose content begins with "--" draws exactly like a file header,
90
+ * so the header pair is recognised by its neighbour rather than by its prefix;
91
+ * inside a hunk every row carries a sign, and there the pair rule is off.
92
+ */
93
+ function rowKind(line, previous, next, inHunk) {
94
+ if (line.startsWith('@@'))
95
+ return 'hunk';
96
+ const pairedHeader = !inHunk
97
+ && ((line.startsWith('--- ') && next?.startsWith('+++ ') === true)
98
+ || (line.startsWith('+++ ') && previous?.startsWith('--- ') === true));
99
+ if (pairedHeader || DIFF_META_PREFIXES.some(prefix => line.startsWith(prefix)))
100
+ return 'header';
101
+ if (line.startsWith('+'))
102
+ return 'added';
103
+ if (line.startsWith('-'))
104
+ return 'removed';
105
+ return 'context';
106
+ }
107
+ /** The longest shared head and matching tail of two rows, in clusters. */
108
+ function sharedEdges(before, after) {
109
+ let head = 0;
110
+ while (head < before.length && head < after.length && before[head] === after[head])
111
+ head += 1;
112
+ let tail = 0;
113
+ while (tail < before.length - head
114
+ && tail < after.length - head
115
+ && before[before.length - 1 - tail] === after[after.length - 1 - tail])
116
+ tail += 1;
117
+ return { head, tail };
118
+ }
119
+ /** One side of a paired edit as the runs it draws: what it kept, what it changed, what it kept. */
120
+ function runsFor(clusters, head, tail) {
121
+ const kept = clusters.slice(0, head).join('');
122
+ const changed = clusters.slice(head, clusters.length - tail).join('');
123
+ const rest = tail === 0 ? '' : clusters.slice(clusters.length - tail).join('');
124
+ const runs = [];
125
+ if (kept !== '')
126
+ runs.push({ text: kept, changed: false });
127
+ if (changed !== '')
128
+ runs.push({ text: changed, changed: true });
129
+ if (rest !== '')
130
+ runs.push({ text: rest, changed: false });
131
+ return runs;
132
+ }
133
+ /**
134
+ * Both sides of one paired edit, or nothing when the two are not an edit of one row.
135
+ *
136
+ * Anything proportional to the pair's length is measured in clusters, so a band
137
+ * can never cut a character a reader sees as one — a combining mark or a joined
138
+ * emoji would otherwise take the band on half of itself.
139
+ */
140
+ function pairRuns(removed, added) {
141
+ const before = splitGraphemes(removed);
142
+ const after = splitGraphemes(added);
143
+ if (before.length > DIFF_EMPHASIS_MAX_GRAPHEMES || after.length > DIFF_EMPHASIS_MAX_GRAPHEMES)
144
+ return undefined;
145
+ const { head, tail } = sharedEdges(before, after);
146
+ if (head + tail < DIFF_MIN_SHARED_GRAPHEMES)
147
+ return undefined;
148
+ return { removed: runsFor(before, head, tail), added: runsFor(after, head, tail) };
149
+ }
150
+ /**
151
+ * One row, with the sign in the row's own shade and the changed runs banded.
152
+ *
153
+ * A hidden emphasis draws the run in the row's colour instead of dropping it: an
154
+ * element the reader removed must not punch an unstyled hole in a coloured row.
155
+ */
156
+ function drawRow(line, kind, runs, look) {
157
+ const rowToken = ROW_TOKEN[kind];
158
+ if (runs === undefined)
159
+ return look.style(rowToken, line);
160
+ const emphasis = EMPHASIS_TOKEN[kind];
161
+ const banded = emphasis !== undefined && look.visible(emphasis) ? emphasis : rowToken;
162
+ const sign = look.style(rowToken, line.slice(0, 1));
163
+ const content = runs.map(run => look.style(run.changed ? banded : rowToken, run.text)).join('');
164
+ return `${sign}${content}`;
165
+ }
166
+ /** Where each paired row's changed runs sit, keyed by the row they belong to. */
167
+ function emphasisByRow(lines, kinds) {
168
+ const runs = new Map();
169
+ for (let at = 0; at < lines.length; at += 1) {
170
+ if (kinds[at] !== 'removed')
171
+ continue;
172
+ // The run of removed rows this one opens, and the added run that answers it:
173
+ // a hunk may drop two rows and add one, and only the pairs are edits.
174
+ let removedEnd = at;
175
+ while (kinds[removedEnd + 1] === 'removed')
176
+ removedEnd += 1;
177
+ let addedEnd = removedEnd;
178
+ while (kinds[addedEnd + 1] === 'added')
179
+ addedEnd += 1;
180
+ const pairs = Math.min(removedEnd - at + 1, addedEnd - removedEnd);
181
+ for (let offset = 0; offset < pairs; offset += 1) {
182
+ const before = (lines[at + offset] ?? '').slice(1);
183
+ const after = (lines[removedEnd + 1 + offset] ?? '').slice(1);
184
+ const paired = pairRuns(before, after);
185
+ if (paired === undefined)
186
+ continue;
187
+ runs.set(at + offset, paired.removed);
188
+ runs.set(removedEnd + 1 + offset, paired.added);
189
+ }
190
+ at = addedEnd;
191
+ }
192
+ return runs;
193
+ }
194
+ /** One fenced diff, row by row, in the diff elements: headers and hunks recede and a changed run is banded. */
195
+ export function renderDiffBlock(code, look) {
196
+ const lines = code.split('\n');
197
+ const kinds = [];
198
+ let inHunk = false;
199
+ for (let at = 0; at < lines.length; at += 1) {
200
+ const kind = rowKind(lines[at] ?? '', lines[at - 1], lines[at + 1], inHunk);
201
+ if (kind === 'hunk')
202
+ inHunk = true;
203
+ kinds.push(kind);
204
+ }
205
+ const runs = emphasisByRow(lines, kinds);
206
+ return lines.map((line, at) => drawRow(line, kinds[at] ?? 'context', runs.get(at), look));
207
+ }
208
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/ui/diff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAA;AAE9D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG;IACzB,aAAa;IACb,YAAY;IACZ,kBAAkB;IAClB,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;IACpB,WAAW;IACX,WAAW;IACX,mBAAmB;IACnB,sBAAsB;IACtB,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,eAAe;IACf,kBAAkB;IAClB,8BAA8B;CACtB,CAAA;AAKV,2CAA2C;AAC3C,MAAM,SAAS,GAA4C;IACzD,MAAM,EAAE,sBAAsB;IAC9B,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,uBAAuB;IAChC,KAAK,EAAE,qBAAqB;IAC5B,OAAO,EAAE,uBAAuB;CACjC,CAAA;AAED,qGAAqG;AACrG,MAAM,cAAc,GAAqD;IACvE,KAAK,EAAE,6BAA6B;IACpC,OAAO,EAAE,+BAA+B;CACzC,CAAA;AAmBD,4GAA4G;AAC5G,SAAS,aAAa,CAAC,IAAwB;IAC7C,OAAO,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AAC7D,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;AAClF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAA+B;IAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAwB,EAAE,IAAe;IACpF,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3F,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,IAAY,EAAE,QAA4B,EAAE,IAAwB,EAAE,MAAe;IACpG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAA;IACxC,MAAM,YAAY,GAAG,CAAC,MAAM;WACvB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;eAC7D,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;IAC1E,IAAI,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC/F,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACxC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,MAAyB,EAAE,KAAwB;IACtE,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,OAAO,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;QAAE,IAAI,IAAI,CAAC,CAAA;IAC7F,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,OACE,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI;WACxB,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;WAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;QACtE,IAAI,IAAI,CAAC,CAAA;IACX,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC;AAED,mGAAmG;AACnG,SAAS,OAAO,CAAC,QAA2B,EAAE,IAAY,EAAE,IAAY;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACrE,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9E,MAAM,IAAI,GAAU,EAAE,CAAA;IACtB,IAAI,IAAI,KAAK,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1D,IAAI,OAAO,KAAK,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/D,IAAI,IAAI,KAAK,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1D,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,OAAe,EAAE,KAAa;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACnC,IAAI,MAAM,CAAC,MAAM,GAAG,2BAA2B,IAAI,KAAK,CAAC,MAAM,GAAG,2BAA2B;QAAE,OAAO,SAAS,CAAA;IAC/G,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACjD,IAAI,IAAI,GAAG,IAAI,GAAG,yBAAyB;QAAE,OAAO,SAAS,CAAA;IAC7D,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAA;AACpF,CAAC;AAED;;;;;GAKG;AACH,SAAS,OAAO,CAAC,IAAY,EAAE,IAAiB,EAAE,IAAgC,EAAE,IAAc;IAChG,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;IACrF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/F,OAAO,GAAG,IAAI,GAAG,OAAO,EAAE,CAAA;AAC5B,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,KAAwB,EAAE,KAA6B;IAC5E,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAA;IAC9C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,SAAS;YAAE,SAAQ;QACrC,6EAA6E;QAC7E,sEAAsE;QACtE,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,OAAO,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,SAAS;YAAE,UAAU,IAAI,CAAC,CAAA;QAC3D,IAAI,QAAQ,GAAG,UAAU,CAAA;QACzB,OAAO,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,OAAO;YAAE,QAAQ,IAAI,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAA;QAClE,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YACtC,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;YACrC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACjD,CAAC;QACD,EAAE,GAAG,QAAQ,CAAA;IACf,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAc;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC3E,IAAI,IAAI,KAAK,MAAM;YAAE,MAAM,GAAG,IAAI,CAAA;QAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAC3F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dock.d.ts","sourceRoot":"","sources":["../../src/ui/dock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACjF,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtD,mEAAmE;AACnE,eAAO,MAAM,eAAe,IAAI,CAAA;AAsChC;;;;;GAKG;AACH,qBAAa,QAAS,YAAW,SAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAPH,KAAK,EAAE,MAAM,SAAS,EACtB,KAAK,EAAE,QAAQ;IAChC,8EAA8E;IAC7D,IAAI,GAAE,MAAM,SAAS,UAAU,EAAa;IAC7D,yDAAyD;IACxC,SAAS,GAAE,MAAM,SAAS,WAAW,EAAa;IACnE,mEAAmE;IAClD,GAAG,GAAE,MAAM,MAAyB;IAGvD,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;IAoBhB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAuBhC"}
1
+ {"version":3,"file":"dock.d.ts","sourceRoot":"","sources":["../../src/ui/dock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACjF,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAEzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtD,mEAAmE;AACnE,eAAO,MAAM,eAAe,IAAI,CAAA;AAsChC;;;;;GAKG;AACH,qBAAa,QAAS,YAAW,SAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAPH,KAAK,EAAE,MAAM,SAAS,EACtB,KAAK,EAAE,QAAQ;IAChC,8EAA8E;IAC7D,IAAI,GAAE,MAAM,SAAS,UAAU,EAAa;IAC7D,yDAAyD;IACxC,SAAS,GAAE,MAAM,SAAS,WAAW,EAAa;IACnE,mEAAmE;IAClD,GAAG,GAAE,MAAM,MAAyB;IAGvD,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,QAAQ;IAqBhB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAwBhC"}