@deepseek-harness-tui/dsh-tui 0.10.1 → 0.10.2

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 (74) hide show
  1. package/README.md +5 -146
  2. package/lib/types/adapter/ports/channel-session.d.ts +3 -1
  3. package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
  4. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  5. package/lib/types/components/Chat/JobCard.js +8 -1
  6. package/lib/types/components/Markdown.d.ts +2 -2
  7. package/lib/types/components/Markdown.d.ts.map +1 -1
  8. package/lib/types/components/Markdown.js +28 -3
  9. package/lib/types/components/MessageList.d.ts.map +1 -1
  10. package/lib/types/components/MessageList.js +10 -9
  11. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  12. package/lib/types/components/StreamingMarkdown.js +61 -9
  13. package/lib/types/dsh-adapter/channel/binding-events.d.ts +5 -0
  14. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  15. package/lib/types/dsh-adapter/channel/binding-events.js +12 -2
  16. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +5 -2
  17. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  18. package/lib/types/dsh-adapter/channel/input-delivery.js +71 -7
  19. package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -1
  20. package/lib/types/dsh-adapter/channel/permissions.js +10 -7
  21. package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
  22. package/lib/types/dsh-adapter/channel/session-rewind.js +9 -2
  23. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
  24. package/lib/types/dsh-adapter/channel/session-tree-actions.js +9 -3
  25. package/lib/types/dsh-adapter/channel/skill-catalog.d.ts +8 -2
  26. package/lib/types/dsh-adapter/channel/skill-catalog.d.ts.map +1 -1
  27. package/lib/types/dsh-adapter/channel/skill-catalog.js +49 -17
  28. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  29. package/lib/types/dsh-adapter/channel.js +5 -2
  30. package/lib/types/dsh-adapter/compat/liveSession.d.ts +5 -3
  31. package/lib/types/dsh-adapter/compat/liveSession.d.ts.map +1 -1
  32. package/lib/types/dsh-adapter/compat/liveSession.js +5 -3
  33. package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
  34. package/lib/types/dsh-adapter/sessions/digest.js +40 -19
  35. package/lib/types/dsh-adapter/sessions/frames.js +2 -0
  36. package/lib/types/dsh-adapter/sessions/list.js +3 -3
  37. package/lib/types/dsh-adapter/sessions/store.d.ts +2 -2
  38. package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
  39. package/lib/types/dsh-adapter/sessions/store.js +12 -11
  40. package/lib/types/dsh-adapter/sessions/types.d.ts +2 -0
  41. package/lib/types/dsh-adapter/sessions/types.d.ts.map +1 -1
  42. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
  43. package/lib/types/ink/components/ScrollBox.js +30 -33
  44. package/lib/types/ink/dom.d.ts.map +1 -1
  45. package/lib/types/ink/dom.js +32 -64
  46. package/lib/types/ink/get-max-width.d.ts +7 -15
  47. package/lib/types/ink/get-max-width.d.ts.map +1 -1
  48. package/lib/types/ink/get-max-width.js +7 -20
  49. package/lib/types/ink/ink.d.ts +1 -0
  50. package/lib/types/ink/ink.d.ts.map +1 -1
  51. package/lib/types/ink/ink.js +22 -3
  52. package/lib/types/ink/layout/node.d.ts +2 -0
  53. package/lib/types/ink/layout/node.d.ts.map +1 -1
  54. package/lib/types/ink/layout/yoga.d.ts +1 -0
  55. package/lib/types/ink/layout/yoga.d.ts.map +1 -1
  56. package/lib/types/ink/layout/yoga.js +3 -0
  57. package/lib/types/ink/node-cache.d.ts +11 -0
  58. package/lib/types/ink/node-cache.d.ts.map +1 -1
  59. package/lib/types/ink/node-cache.js +3 -0
  60. package/lib/types/ink/output.d.ts +6 -1
  61. package/lib/types/ink/output.d.ts.map +1 -1
  62. package/lib/types/ink/output.js +55 -65
  63. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  64. package/lib/types/ink/render-node-to-output.js +92 -67
  65. package/lib/types/ink/tabstops.d.ts +3 -2
  66. package/lib/types/ink/tabstops.d.ts.map +1 -1
  67. package/lib/types/ink/tabstops.js +5 -4
  68. package/lib/types/ink/wrap-text.js +2 -2
  69. package/lib/types/native-ts/yoga-layout/index.d.ts +8 -3
  70. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  71. package/lib/types/native-ts/yoga-layout/index.js +23 -8
  72. package/lib/types/screens/Chat.d.ts.map +1 -1
  73. package/lib/types/screens/Chat.js +20 -8
  74. package/package.json +3 -2
@@ -3,7 +3,7 @@ import { applyTextStyles } from './colorize.js';
3
3
  import { GEOMETRY_TRACE_ENABLED, noteScrollGeometry } from './geometry-trace.js';
4
4
  import getMaxWidth from './get-max-width.js';
5
5
  import { LayoutDisplay, LayoutEdge } from './layout/node.js';
6
- import { nodeCache, pendingClears } from './node-cache.js';
6
+ import { nodeCache, pendingClears, textPaintCache } from './node-cache.js';
7
7
  import renderBorder from './render-border.js';
8
8
  import { squashTextNodesToSegments, } from './squash-text-nodes.js';
9
9
  import { isXtermJs } from './terminal.js';
@@ -679,6 +679,13 @@ function renderNodeToOutput(node, output, options) {
679
679
  node.dirty = false;
680
680
  return;
681
681
  }
682
+ // Text is a paint leaf: unlike boxes, it cannot own an escaping overlay.
683
+ // Keep the old-position cleanup above, but cull before squash/wrap/style.
684
+ if (node.nodeName === 'ink-text' && width > 0 && height > 0 && !output.isRectVisible(x, y, width, height)) {
685
+ nodeCache.delete(node);
686
+ node.dirty = false;
687
+ return;
688
+ }
682
689
  if (node.nodeName === 'ink-raw-ansi') {
683
690
  // Pre-rendered ANSI content. The producer already wrapped to width and
684
691
  // emitted terminal-ready escape codes. Skip squash, measure, wrap, and
@@ -689,70 +696,87 @@ function renderNodeToOutput(node, output, options) {
689
696
  }
690
697
  }
691
698
  else if (node.nodeName === 'ink-text') {
692
- const segments = squashTextNodesToSegments(node, inheritedBackgroundColor
693
- ? { backgroundColor: inheritedBackgroundColor }
694
- : undefined);
695
- // First, get plain text to check if wrapping is needed
696
- const plainText = segments.map(s => s.text).join('');
697
- if (plainText.length > 0) {
698
- // Upstream Ink uses getMaxWidth(yogaNode) unclamped here. That
699
- // width comes from Yoga's AtMost pass and can exceed the actual
700
- // screen space (see getMaxWidth docstring). Yoga's height for this
701
- // node already reflects the constrained Exactly pass, so clamping
702
- // the wrap width here keeps line count consistent with layout.
703
- // Without this, characters past the screen edge are dropped by
704
- // setCellAt's bounds check.
705
- const maxWidth = Math.min(getMaxWidth(yogaNode), output.width - x);
706
- const textWrap = node.style.textWrap ?? 'wrap';
707
- // Check if wrapping is needed
708
- const needsWrapping = widestLine(plainText) > maxWidth;
709
- let text;
710
- let softWrap;
711
- if (needsWrapping && segments.length === 1) {
712
- // Single segment: wrap plain text first, then apply styles to each line
713
- const segment = segments[0];
714
- const w = wrapWithSoftWrap(plainText, maxWidth, textWrap);
715
- softWrap = w.softWrap;
716
- text = w.wrapped
717
- .split('\n')
718
- .map(line => {
719
- let styled = applyTextStyles(line, segment.styles);
720
- // Apply OSC 8 hyperlink per-line so each line is independently
721
- // clickable. output.ts splits on newlines and tokenizes each
722
- // line separately, so a single wrapper around the whole block
723
- // would only apply the hyperlink to the first line.
724
- if (segment.hyperlink) {
725
- styled = wrapWithOsc8Link(styled, segment.hyperlink);
726
- }
727
- return styled;
728
- })
729
- .join('\n');
730
- }
731
- else if (needsWrapping) {
732
- // Multiple segments with wrapping: wrap plain text first, then re-apply
733
- // each segment's styles based on character positions. This preserves
734
- // per-segment styles even when text wraps across lines.
735
- const w = wrapWithSoftWrap(plainText, maxWidth, textWrap);
736
- softWrap = w.softWrap;
737
- const charToSegment = buildCharToSegmentMap(segments);
738
- text = applyStylesToWrappedText(w.wrapped, segments, charToSegment, plainText, textWrap === 'wrap-trim');
739
- // Hyperlinks are handled per-run in applyStylesToWrappedText via
740
- // wrapWithOsc8Link, similar to how styles are applied per-run.
741
- }
742
- else {
743
- // No wrapping needed: apply styles directly
744
- text = segments
745
- .map(segment => {
746
- let styledText = applyTextStyles(segment.text, segment.styles);
747
- if (segment.hyperlink) {
748
- styledText = wrapWithOsc8Link(styledText, segment.hyperlink);
749
- }
750
- return styledText;
751
- })
752
- .join('');
699
+ // A partially visible long block moves on every scroll/stream frame.
700
+ // Node blits cannot reuse it at a new y, but its prepared lines can.
701
+ // Keep one current preparation, independent of the shared wrap LRU
702
+ // (a single large tool/code block can overflow that cache by itself).
703
+ const maxWidth = Math.min(getMaxWidth(yogaNode), output.width - x);
704
+ const paddingNode = node.childNodes[0]?.yogaNode;
705
+ const paddingLeft = paddingNode?.getComputedLeft() ?? 0;
706
+ const paddingTop = paddingNode?.getComputedTop() ?? 0;
707
+ const prepared = textPaintCache.get(node);
708
+ if (prepared !== undefined &&
709
+ prepared.maxWidth === maxWidth &&
710
+ prepared.background === inheritedBackgroundColor &&
711
+ prepared.paddingLeft === paddingLeft &&
712
+ prepared.paddingTop === paddingTop) {
713
+ output.write(x, y, prepared.text, prepared.softWrap, prepared.lines);
714
+ }
715
+ else {
716
+ const segments = squashTextNodesToSegments(node, inheritedBackgroundColor
717
+ ? { backgroundColor: inheritedBackgroundColor }
718
+ : undefined);
719
+ // First, get plain text to check if wrapping is needed
720
+ const plainText = segments.map(s => s.text).join('');
721
+ if (plainText.length > 0) {
722
+ // Use the same content constraint as measurement, not the rounded
723
+ // pixel-grid box. Offscreen overflow still clips at the terminal edge.
724
+ const textWrap = node.style.textWrap ?? 'wrap';
725
+ // Check if wrapping is needed
726
+ const needsWrapping = widestLine(plainText) > maxWidth;
727
+ let text;
728
+ let softWrap;
729
+ if (needsWrapping && segments.length === 1) {
730
+ // Single segment: wrap plain text first, then apply styles to each line
731
+ const segment = segments[0];
732
+ const w = wrapWithSoftWrap(plainText, maxWidth, textWrap);
733
+ softWrap = w.softWrap;
734
+ text = w.wrapped
735
+ .split('\n')
736
+ .map(line => {
737
+ let styled = applyTextStyles(line, segment.styles);
738
+ // Apply OSC 8 hyperlink per-line so each line is independently
739
+ // clickable. output.ts splits on newlines and tokenizes each
740
+ // line separately, so a single wrapper around the whole block
741
+ // would only apply the hyperlink to the first line.
742
+ if (segment.hyperlink) {
743
+ styled = wrapWithOsc8Link(styled, segment.hyperlink);
744
+ }
745
+ return styled;
746
+ })
747
+ .join('\n');
748
+ }
749
+ else if (needsWrapping) {
750
+ // Multiple segments with wrapping: wrap plain text first, then re-apply
751
+ // each segment's styles based on character positions. This preserves
752
+ // per-segment styles even when text wraps across lines.
753
+ const w = wrapWithSoftWrap(plainText, maxWidth, textWrap);
754
+ softWrap = w.softWrap;
755
+ const charToSegment = buildCharToSegmentMap(segments);
756
+ text = applyStylesToWrappedText(w.wrapped, segments, charToSegment, plainText, textWrap === 'wrap-trim');
757
+ // Hyperlinks are handled per-run in applyStylesToWrappedText via
758
+ // wrapWithOsc8Link, similar to how styles are applied per-run.
759
+ }
760
+ else {
761
+ // No wrapping needed: apply styles directly
762
+ text = segments
763
+ .map(segment => {
764
+ let styledText = applyTextStyles(segment.text, segment.styles);
765
+ if (segment.hyperlink) {
766
+ styledText = wrapWithOsc8Link(styledText, segment.hyperlink);
767
+ }
768
+ return styledText;
769
+ })
770
+ .join('');
771
+ }
772
+ text = applyPaddingToText(node, text, softWrap);
773
+ const lines = text.split('\n');
774
+ textPaintCache.set(node, {
775
+ maxWidth, background: inheritedBackgroundColor, paddingLeft, paddingTop,
776
+ text, lines, softWrap,
777
+ });
778
+ output.write(x, y, text, softWrap, lines);
753
779
  }
754
- text = applyPaddingToText(node, text, softWrap);
755
- output.write(x, y, text, softWrap);
756
780
  }
757
781
  }
758
782
  else if (node.nodeName === 'ink-image' &&
@@ -1315,11 +1339,12 @@ function renderNodeToOutput(node, output, options) {
1315
1339
  // blitted content — output.clear() only expands damage and
1316
1340
  // cannot zero cells that the blit already wrote.
1317
1341
  const screenBottom = Math.min(Math.floor(contentY + childBottom), Math.floor((y1 ?? y) + padTop + innerHeight));
1318
- if (screenY < screenBottom) {
1319
- const fill = Array(screenBottom - screenY)
1342
+ const fillTop = Math.max(screenY, top);
1343
+ if (fillTop < screenBottom) {
1344
+ const fill = Array(screenBottom - fillTop)
1320
1345
  .fill(spaces)
1321
1346
  .join('\n');
1322
- output.write(Math.floor(x), screenY, fill);
1347
+ output.write(Math.floor(x), fillTop, fill);
1323
1348
  output.clip({
1324
1349
  x1: undefined,
1325
1350
  x2: undefined,
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Expand tab characters to spaces at fixed column intervals, preserving
3
- * escape sequences and resetting the column on newlines.
3
+ * escape sequences and resetting to the starting column on newlines.
4
4
  * @param text - the text to expand.
5
5
  * @param interval - the tab stop interval in columns; defaults to 8.
6
+ * @param startColumn - the original screen column of each line; defaults to 0.
6
7
  * @returns `text` with every tab replaced by the spaces needed to reach the next stop.
7
8
  */
8
- export declare function expandTabs(text: string, interval?: number): string;
9
+ export declare function expandTabs(text: string, interval?: number, startColumn?: number): string;
9
10
  //# sourceMappingURL=tabstops.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabstops.d.ts","sourceRoot":"","sources":["../../../src/ink/tabstops.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAuB,GAC9B,MAAM,CAkCR"}
1
+ {"version":3,"file":"tabstops.d.ts","sourceRoot":"","sources":["../../../src/ink/tabstops.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAuB,EAC/B,WAAW,SAAI,GACd,MAAM,CAkCR"}
@@ -5,12 +5,13 @@ import { createTokenizer } from './termio/tokenize.js';
5
5
  const DEFAULT_TAB_INTERVAL = 8;
6
6
  /**
7
7
  * Expand tab characters to spaces at fixed column intervals, preserving
8
- * escape sequences and resetting the column on newlines.
8
+ * escape sequences and resetting to the starting column on newlines.
9
9
  * @param text - the text to expand.
10
10
  * @param interval - the tab stop interval in columns; defaults to 8.
11
+ * @param startColumn - the original screen column of each line; defaults to 0.
11
12
  * @returns `text` with every tab replaced by the spaces needed to reach the next stop.
12
13
  */
13
- export function expandTabs(text, interval = DEFAULT_TAB_INTERVAL) {
14
+ export function expandTabs(text, interval = DEFAULT_TAB_INTERVAL, startColumn = 0) {
14
15
  if (!text.includes('\t')) {
15
16
  return text;
16
17
  }
@@ -18,7 +19,7 @@ export function expandTabs(text, interval = DEFAULT_TAB_INTERVAL) {
18
19
  const tokens = tokenizer.feed(text);
19
20
  tokens.push(...tokenizer.flush());
20
21
  let result = '';
21
- let column = 0;
22
+ let column = startColumn;
22
23
  for (const token of tokens) {
23
24
  if (token.type === 'sequence') {
24
25
  result += token.value;
@@ -33,7 +34,7 @@ export function expandTabs(text, interval = DEFAULT_TAB_INTERVAL) {
33
34
  }
34
35
  else if (part === '\n') {
35
36
  result += part;
36
- column = 0;
37
+ column = startColumn;
37
38
  }
38
39
  else {
39
40
  result += part;
@@ -7,8 +7,8 @@ const ELLIPSIS = '…';
7
7
  // output string. Yet before this cache every consumer re-wrapped from
8
8
  // scratch:
9
9
  //
10
- // - dom.ts measureTextNode seeds its per-NODE incremental cache on first
11
- // measure; virtualization unmounts scrolled-away rows, so scrolling back
10
+ // - dom.ts measureTextNode caches dimensions per node; virtualization
11
+ // unmounts scrolled-away rows, so scrolling back
12
12
  // re-mounts the row's Text nodes and re-runs the FULL wrap (wrap-ansi
13
13
  // tokenizes + string-width-measures every word — 100-300ms single-frame
14
14
  // yoga spikes when a row of large settled text scrolls in, the dominant
@@ -52,6 +52,7 @@ type Layout = {
52
52
  top: number;
53
53
  width: number;
54
54
  height: number;
55
+ measuredWidth: number;
55
56
  border: [number, number, number, number];
56
57
  padding: [number, number, number, number];
57
58
  margin: [number, number, number, number];
@@ -205,6 +206,7 @@ export declare class Node {
205
206
  _lOutW: number;
206
207
  /** Cached layout-pass output height restored on a cache hit. */
207
208
  _lOutH: number;
209
+ _lOutMeasuredWidth: number;
208
210
  /** Whether the single-slot layout cache holds a valid entry. */
209
211
  _hasL: boolean;
210
212
  /** Cached available width of the last measure call. */
@@ -223,6 +225,7 @@ export declare class Node {
223
225
  _mOutW: number;
224
226
  /** Cached measure-pass output height restored on a cache hit. */
225
227
  _mOutH: number;
228
+ _mOutMeasuredWidth: number;
226
229
  /** Whether the single-slot measure cache holds a valid entry. */
227
230
  _hasM: boolean;
228
231
  /**
@@ -260,11 +263,11 @@ export declare class Node {
260
263
  * w,h) so hits with different inputs than _hasL can restore the right
261
264
  * dimensions. Upstream yoga uses 16; 4 covers Ink's dirty-chain depth.
262
265
  * Packed as flat arrays to avoid per-entry object allocs. Slot i uses
263
- * indices [i*8, i*8+8) in _cIn (aW,aH,wM,hM,oW,oH,fW,fH) and [i*2, i*2+2)
264
- * in _cOut (w,h).
266
+ * indices [i*8, i*8+8) in _cIn (aW,aH,wM,hM,oW,oH,fW,fH) and [i*3, i*3+3)
267
+ * in _cOut (w,h,measuredWidth).
265
268
  */
266
269
  _cIn: Float64Array | null;
267
- /** Cached output width/height pairs, two slots per entry. */
270
+ /** Cached dimensions and the leaf width used to measure them. */
268
271
  _cOut: Float64Array | null;
269
272
  /** Generation at which the multi-entry cache was last written. */
270
273
  _cGen: number;
@@ -367,6 +370,8 @@ export declare class Node {
367
370
  * @returns the width in pixels.
368
371
  */
369
372
  getComputedWidth(): number;
373
+ /** Content width used by the leaf measure function, before pixel rounding. */
374
+ getComputedMeasureWidth(): number;
370
375
  /**
371
376
  * Get the computed height.
372
377
  * @returns the height in pixels.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/native-ts/yoga-layout/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/native-ts/yoga-layout/index.ts"],"names":[],"mappings":"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"}
@@ -365,6 +365,7 @@ export class Node {
365
365
  _lOutW = NaN;
366
366
  /** Cached layout-pass output height restored on a cache hit. */
367
367
  _lOutH = NaN;
368
+ _lOutMeasuredWidth = NaN;
368
369
  /** Whether the single-slot layout cache holds a valid entry. */
369
370
  _hasL = false;
370
371
  /** Cached available width of the last measure call. */
@@ -383,6 +384,7 @@ export class Node {
383
384
  _mOutW = NaN;
384
385
  /** Cached measure-pass output height restored on a cache hit. */
385
386
  _mOutH = NaN;
387
+ _mOutMeasuredWidth = NaN;
386
388
  /** Whether the single-slot measure cache holds a valid entry. */
387
389
  _hasM = false;
388
390
  /**
@@ -420,11 +422,11 @@ export class Node {
420
422
  * w,h) so hits with different inputs than _hasL can restore the right
421
423
  * dimensions. Upstream yoga uses 16; 4 covers Ink's dirty-chain depth.
422
424
  * Packed as flat arrays to avoid per-entry object allocs. Slot i uses
423
- * indices [i*8, i*8+8) in _cIn (aW,aH,wM,hM,oW,oH,fW,fH) and [i*2, i*2+2)
424
- * in _cOut (w,h).
425
+ * indices [i*8, i*8+8) in _cIn (aW,aH,wM,hM,oW,oH,fW,fH) and [i*3, i*3+3)
426
+ * in _cOut (w,h,measuredWidth).
425
427
  */
426
428
  _cIn = null;
427
- /** Cached output width/height pairs, two slots per entry. */
429
+ /** Cached dimensions and the leaf width used to measure them. */
428
430
  _cOut = null;
429
431
  /** Generation at which the multi-entry cache was last written. */
430
432
  _cGen = -1;
@@ -450,6 +452,7 @@ export class Node {
450
452
  top: 0,
451
453
  width: 0,
452
454
  height: 0,
455
+ measuredWidth: NaN,
453
456
  border: [0, 0, 0, 0],
454
457
  padding: [0, 0, 0, 0],
455
458
  margin: [0, 0, 0, 0],
@@ -534,6 +537,7 @@ export class Node {
534
537
  */
535
538
  reset() {
536
539
  this.style = defaultStyle();
540
+ this.layout.measuredWidth = NaN;
537
541
  this.children = [];
538
542
  this.parent = null;
539
543
  this.measureFunc = null;
@@ -614,6 +618,10 @@ export class Node {
614
618
  getComputedWidth() {
615
619
  return this.layout.width;
616
620
  }
621
+ /** Content width used by the leaf measure function, before pixel rounding. */
622
+ getComputedMeasureWidth() {
623
+ return this.layout.measuredWidth;
624
+ }
617
625
  /**
618
626
  * Get the computed height.
619
627
  * @returns the height in pixels.
@@ -1249,7 +1257,7 @@ const CACHE_SLOTS = 4;
1249
1257
  function cacheWrite(node, aW, aH, wM, hM, oW, oH, fW, fH, wasDirty) {
1250
1258
  if (!node._cIn) {
1251
1259
  node._cIn = new Float64Array(CACHE_SLOTS * 8);
1252
- node._cOut = new Float64Array(CACHE_SLOTS * 2);
1260
+ node._cOut = new Float64Array(CACHE_SLOTS * 3);
1253
1261
  }
1254
1262
  // First write after a dirty clears stale entries from before the dirty.
1255
1263
  // _cGen < _generation means entries are from a previous calculateLayout;
@@ -1276,8 +1284,9 @@ function cacheWrite(node, aW, aH, wM, hM, oW, oH, fW, fH, wasDirty) {
1276
1284
  cIn[o + 5] = oH;
1277
1285
  cIn[o + 6] = fW ? 1 : 0;
1278
1286
  cIn[o + 7] = fH ? 1 : 0;
1279
- node._cOut[i * 2] = node.layout.width;
1280
- node._cOut[i * 2 + 1] = node.layout.height;
1287
+ node._cOut[i * 3] = node.layout.width;
1288
+ node._cOut[i * 3 + 1] = node.layout.height;
1289
+ node._cOut[i * 3 + 2] = node.layout.measuredWidth;
1281
1290
  node._cGen = _generation;
1282
1291
  }
1283
1292
  // Store computed layout.width/height into the single-slot cache output fields.
@@ -1292,6 +1301,7 @@ function commitCacheOutputs(node, performLayout) {
1292
1301
  if (performLayout) {
1293
1302
  node._lOutW = node.layout.width;
1294
1303
  node._lOutH = node.layout.height;
1304
+ node._lOutMeasuredWidth = node.layout.measuredWidth;
1295
1305
  // A completed layout pass re-laid the whole subtree at the final
1296
1306
  // constraints — any measure-pass scratch below has been overwritten,
1297
1307
  // so this node may serve layout-cache hits again.
@@ -1300,6 +1310,7 @@ function commitCacheOutputs(node, performLayout) {
1300
1310
  else {
1301
1311
  node._mOutW = node.layout.width;
1302
1312
  node._mOutH = node.layout.height;
1313
+ node._mOutMeasuredWidth = node.layout.measuredWidth;
1303
1314
  // This measure call actually computed: its recursion overwrote the
1304
1315
  // subtree's layout.* as scratch for the probed size. Until a layout
1305
1316
  // pass re-lays this subtree, layout-cache hits here must be refused
@@ -1368,6 +1379,7 @@ forceWidth = false, forceHeight = false) {
1368
1379
  _yogaCacheHits++;
1369
1380
  layout.width = node._lOutW;
1370
1381
  layout.height = node._lOutH;
1382
+ layout.measuredWidth = node._lOutMeasuredWidth;
1371
1383
  return;
1372
1384
  }
1373
1385
  // Multi-entry cache: scan for matching inputs, restore cached w/h on hit.
@@ -1395,8 +1407,9 @@ forceWidth = false, forceHeight = false) {
1395
1407
  sameFloat(cIn[o + 1], availableHeight) &&
1396
1408
  sameFloat(cIn[o + 4], ownerWidth) &&
1397
1409
  sameFloat(cIn[o + 5], ownerHeight)) {
1398
- layout.width = node._cOut[i * 2];
1399
- layout.height = node._cOut[i * 2 + 1];
1410
+ layout.width = node._cOut[i * 3];
1411
+ layout.height = node._cOut[i * 3 + 1];
1412
+ layout.measuredWidth = node._cOut[i * 3 + 2];
1400
1413
  _yogaCacheHits++;
1401
1414
  return;
1402
1415
  }
@@ -1413,6 +1426,7 @@ forceWidth = false, forceHeight = false) {
1413
1426
  sameFloat(node._mOH, ownerHeight)) {
1414
1427
  layout.width = node._mOutW;
1415
1428
  layout.height = node._mOutH;
1429
+ layout.measuredWidth = node._mOutMeasuredWidth;
1416
1430
  _yogaCacheHits++;
1417
1431
  return;
1418
1432
  }
@@ -1516,6 +1530,7 @@ forceWidth = false, forceHeight = false) {
1516
1530
  : Math.max(0, height - paddingBorderHeight);
1517
1531
  _yogaMeasureCalls++;
1518
1532
  const measured = node.measureFunc(innerW, wMode, innerH, hMode);
1533
+ node.layout.measuredWidth = wMode === MeasureMode.Undefined ? measured.width : innerW;
1519
1534
  node.layout.width =
1520
1535
  wMode === MeasureMode.Exactly
1521
1536
  ? width
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/screens/Chat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA0BzB,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAwB,MAAM,0BAA0B,CAAA;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAmB3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AA+MxE,wBAAgB,IAAI,CAAC,EACnB,OAAO,EACP,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,UAAkB,EAClB,cAAc,EAAE,kBAAkB,EAClC,mBAAmB,EACnB,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAA;IAC/D,aAAa,EAAE,aAAa,CAAA;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,cAAc,CAAA;IACjC,yDAAyD;IACzD,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,eAAe,CAAA;IACpC,uEAAuE;IACvE,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;CAC/D,4BA+9HA"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/screens/Chat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA0BzB,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAwB,MAAM,0BAA0B,CAAA;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAmB3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AA+MxE,wBAAgB,IAAI,CAAC,EACnB,OAAO,EACP,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,UAAkB,EAClB,cAAc,EAAE,kBAAkB,EAClC,mBAAmB,EACnB,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAA;IAC/D,aAAa,EAAE,aAAa,CAAA;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,cAAc,CAAA;IACjC,yDAAyD;IACzD,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,eAAe,CAAA;IACpC,uEAAuE;IACvE,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;CAC/D,4BAy+HA"}
@@ -575,6 +575,9 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
575
575
  /** Subagent dashboard (Ctrl+A): displays active/completed subagents. */
576
576
  const [subagentDashboardOpen, setSubagentDashboardOpen] = React.useState(false);
577
577
  const [jobsPanelOpen, setJobsPanelOpen] = React.useState(false);
578
+ // MessageList forwards these open handlers to every memoized row. Their
579
+ // identities must survive token/metrics updates, including for tool rows.
580
+ const openJobsPanel = React.useCallback(() => setJobsPanelOpen(true), []);
578
581
  /** Detail view for a specific subagent (opened from dashboard). */
579
582
  const [subagentDetailId, setSubagentDetailId] = React.useState(null);
580
583
  /**
@@ -616,18 +619,21 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
616
619
  const loadedContextVisible = channel.rows.length === 0 && channel.loadedContext !== undefined;
617
620
  /** Startup context panel: collapsed by default, toggled with Ctrl+P. */
618
621
  const [loadedContextOpen, setLoadedContextOpen] = React.useState(false);
619
- /**
620
- * The context panel changes the height of the main-screen transcript by a
621
- * large amount. In inline mode that invalidates the renderer's previous
622
- * scrollback/layout correspondence; asking it to repaint from the physical
623
- * viewport prevents the collapsed frame from reusing stale blank cells.
624
- */
625
622
  const toggleLoadedContext = React.useCallback(() => {
626
623
  setLoadedContextOpen(previous => !previous);
624
+ }, []);
625
+ const renderedLoadedContextOpen = React.useRef(loadedContextOpen);
626
+ React.useLayoutEffect(() => {
627
+ if (renderedLoadedContextOpen.current === loadedContextOpen)
628
+ return;
629
+ renderedLoadedContextOpen.current = loadedContextOpen;
630
+ // Reanchor after the new panel geometry commits. Requesting it in the
631
+ // key handler lets a pending paint consume it on the old tall layout,
632
+ // leaving the collapsed summary stranded outside the physical viewport.
627
633
  const ink = instances.get(process.stdout) ?? instances.values().next().value;
628
634
  ink?.invalidatePrevFrame();
629
635
  ink?.reanchorViewport();
630
- }, []);
636
+ }, [loadedContextOpen]);
631
637
  /**
632
638
  * Click-to-act targets: the Ink instance's hyperlink-open callback (wired
633
639
  * in the effect below) resolves every clickable target the transcript
@@ -2474,6 +2480,12 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
2474
2480
  // Subagent dashboard or detail scene: it owns the keyboard while open.
2475
2481
  if (subagentDashboardOpen || subagentDetailId !== null)
2476
2482
  return;
2483
+ // The `/jobs` panel replaces the conversation too, so it owns Esc (close)
2484
+ // and k (kill) while open. Unguarded, Esc meant to CLOSE the panel also
2485
+ // reached the chat:cancel branch below whenever a turn was in flight —
2486
+ // dismissing the panel and killing the turn with one key.
2487
+ if (jobsPanelOpen)
2488
+ return;
2477
2489
  // A plugin scene (dsh-tui-scenes) or the trajectory scene owns the whole
2478
2490
  // screen while open: every key belongs to it. Unguarded, an Esc meant to
2479
2491
  // CLOSE the scene also reached the chat:cancel branch below whenever a
@@ -3556,7 +3568,7 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
3556
3568
  // sessions keep the full intro; restored ones settle instantly.
3557
3569
  // A remount after a whole screen closed also settles instantly
3558
3570
  // (see suppressLogoIntroRef).
3559
- skipIntro: suppressLogoIntroRef.current || channel.rows.length > 30 }, logoNonce), loadedContextVisible && (_jsx(LoadedContextPanel, { context: channel.loadedContext, open: loadedContextOpen, onToggle: toggleLoadedContext })), _jsx(MessageList, { rows: channel.rows, failureHintRowId: failureHintRowId, failureHint: t('traj-hint-failure', { key: `${modLabel}t` }), expanded: expanded, expandedRows: expandedRows, selectedId: selectionActive ? selectedId : null, onToggleRow: toggleRowExpanded, streamViewToggledRows: streamViewToggledRows, onToggleStreamView: toggleStreamView, model: channel.model, diffLayout: channel.diffLayout, thinkingFold: channel.thinkingFold, toolBackground: channel.toolBackground, foldTerminalCommand: channel.foldTerminalCommand, smoothStreaming: channel.smoothStreaming, activityFrames: channel.activityFrames, showAll: showAllMessages, thinkingVisible: thinkingVisible, historyPaintEnabled: !fullscreen, onToggleAll: () => { setShowAllMessages(previous => !previous); }, onLoadOlder: () => channel.loadOlder(), registerRowRef: registerRowRef, scrollHandle: handle, forceMountRowId: forceMountRowId, newSinceRowId: isSticky ? null : lastSeenRowIdRef.current, onUnseenCount: setUnseenCount, onTimeline: setTimeline, onOpenSubagent: (agentId) => setSubagentDetailId(agentId), onOpenJobs: () => setJobsPanelOpen(true), onOpenFile: openFileActions, onPreviewImage: openImagePreview, suppressImageGraphics: activePreview !== null })] }), (() => {
3571
+ skipIntro: suppressLogoIntroRef.current || channel.rows.length > 30 }, logoNonce), loadedContextVisible && (_jsx(LoadedContextPanel, { context: channel.loadedContext, open: loadedContextOpen, onToggle: toggleLoadedContext })), _jsx(MessageList, { rows: channel.rows, failureHintRowId: failureHintRowId, failureHint: t('traj-hint-failure', { key: `${modLabel}t` }), expanded: expanded, expandedRows: expandedRows, selectedId: selectionActive ? selectedId : null, onToggleRow: toggleRowExpanded, streamViewToggledRows: streamViewToggledRows, onToggleStreamView: toggleStreamView, model: channel.model, diffLayout: channel.diffLayout, thinkingFold: channel.thinkingFold, toolBackground: channel.toolBackground, foldTerminalCommand: channel.foldTerminalCommand, smoothStreaming: channel.smoothStreaming, activityFrames: channel.activityFrames, showAll: showAllMessages, thinkingVisible: thinkingVisible, historyPaintEnabled: !fullscreen, onToggleAll: () => { setShowAllMessages(previous => !previous); }, onLoadOlder: () => channel.loadOlder(), registerRowRef: registerRowRef, scrollHandle: handle, forceMountRowId: forceMountRowId, newSinceRowId: isSticky ? null : lastSeenRowIdRef.current, onUnseenCount: setUnseenCount, onTimeline: setTimeline, onOpenSubagent: setSubagentDetailId, onOpenJobs: openJobsPanel, onOpenFile: openFileActions, onPreviewImage: openImagePreview, suppressImageGraphics: activePreview !== null })] }), (() => {
3560
3572
  // Gutter mode (settings `dsh-tui.scrollGutter`): the timeline
3561
3573
  // rail (default), the proportional scrollbar, or nothing. The
3562
3574
  // slot keeps its 2 columns in both rendered modes (Qwen's
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepseek-harness-tui/dsh-tui",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "description": "Interactive terminal interface for DeepSeek Harness agents, sessions and tools.",
5
5
  "keywords": [
6
6
  "dsh",
@@ -124,7 +124,7 @@
124
124
  "prompt:debug": "node scripts/read-prompt-debug.mjs",
125
125
  "tui": "node --import tsx/esm scripts/run.ts",
126
126
  "smoke": "node --import tsx/esm scripts/smoke.tsx",
127
- "verify:build": "npm run verify:boundary && npm run verify:contract && npm run verify:herdr && npm run verify:manifest-deps && npm run verify:patch-surface && npm run verify:web-coexistence && npm run verify:plugin-spec && npm run verify:plugin-grants && npm run verify:plugin-storage && npm run verify:plugin-messages && npm run verify:plugin-ledger && npm run verify:plugin-commands && npm run verify:plugin-negotiation && npm run verify:plugin-lifecycle && npm run verify:runtime-themes && npm run verify:packaged-presets && npm run verify:history-search && npm run verify:initial-prompt && npm run verify:minimal-preset-tools && npm run verify:liangshen-bootstrap && npm run verify:inject-channel && npm run verify:wheel-selection && npm run verify:win32-protocol && npm run verify:selection-resize && npm run verify:liangshen-instruction-hint && npm run verify:pointer-events && npm run verify:terminal-images && npm run verify:overlay-occlusion && npm run verify:transcript-images && npm run verify:image-preview && npm run verify:backdrop-dim && npm run verify:composer-image-tokens && npm run verify:chat-overlay && npm run verify:i18n && npm run verify:approval-visibility && npm run verify:adapter-skeleton && npm run verify:adapter-ports && npm run verify:adapter-effect-class && npm run verify:adapter-shadow && npm run verify:adapter-descriptor && npm run verify:adapter-upstream-driver && npm run verify:adapter-kernel-runtime && npm run verify:adapter-live-probes && npm run verify:adapter-slices && npm run verify:adapter-channel && npm run verify:binding-transaction && npm run verify:session-extraction && npm run verify:model-mode-workspace-extraction && npm run verify:model-lifecycle-fences && npm run verify:reports-metadata && npm run verify:background-extraction && npm run verify:plugin-catalog-extraction && npm run verify:session-reset && npm run verify:channel-ui && npm run verify:adapter-detection && npm run verify:adapter-replay-harness && npm run verify:adapter-channel-conformance && npm run verify:protocol-single-source && npm run verify:compat-removal && npm run verify:terminal-images-sixel && npm run verify:sixel-transcript && npm run verify:migrate-sessions && npm run verify:fixed-window && npm run verify:source-hygiene && npm run verify:renderer-primitives && npm run verify:product-migration && npm run verify:spinner-identity && npm run verify:table-layout && npm run verify:btw",
127
+ "verify:build": "npm run verify:boundary && npm run verify:contract && npm run verify:herdr && npm run verify:manifest-deps && npm run verify:patch-surface && npm run verify:web-coexistence && npm run verify:plugin-spec && npm run verify:plugin-grants && npm run verify:plugin-storage && npm run verify:plugin-messages && npm run verify:plugin-ledger && npm run verify:plugin-commands && npm run verify:plugin-negotiation && npm run verify:plugin-lifecycle && npm run verify:runtime-themes && npm run verify:packaged-presets && npm run verify:history-search && npm run verify:initial-prompt && npm run verify:minimal-preset-tools && npm run verify:liangshen-bootstrap && npm run verify:inject-channel && npm run verify:wheel-selection && npm run verify:win32-protocol && npm run verify:selection-resize && npm run verify:liangshen-instruction-hint && npm run verify:pointer-events && npm run verify:terminal-images && npm run verify:overlay-occlusion && npm run verify:transcript-images && npm run verify:image-preview && npm run verify:backdrop-dim && npm run verify:composer-image-tokens && npm run verify:chat-overlay && npm run verify:i18n && npm run verify:approval-visibility && npm run verify:adapter-skeleton && npm run verify:adapter-ports && npm run verify:adapter-effect-class && npm run verify:adapter-shadow && npm run verify:adapter-descriptor && npm run verify:adapter-upstream-driver && npm run verify:adapter-kernel-runtime && npm run verify:adapter-live-probes && npm run verify:adapter-slices && npm run verify:adapter-channel && npm run verify:binding-transaction && npm run verify:session-extraction && npm run verify:rewind-edit && npm run verify:model-mode-workspace-extraction && npm run verify:model-lifecycle-fences && npm run verify:reports-metadata && npm run verify:background-extraction && npm run verify:plugin-catalog-extraction && npm run verify:session-reset && npm run verify:channel-ui && npm run verify:adapter-detection && npm run verify:adapter-replay-harness && npm run verify:adapter-channel-conformance && npm run verify:protocol-single-source && npm run verify:compat-removal && npm run verify:terminal-images-sixel && npm run verify:sixel-transcript && npm run verify:migrate-sessions && npm run verify:fixed-window && npm run verify:source-hygiene && npm run verify:renderer-primitives && npm run verify:product-migration && npm run verify:spinner-identity && npm run verify:table-layout && npm run verify:btw",
128
128
  "verify:boundary": "node --import tsx/esm scripts/verify-adapter-boundary.ts",
129
129
  "verify:i18n": "node --import tsx/esm scripts/verify-i18n.ts",
130
130
  "verify:contract": "node --import tsx/esm scripts/verify-upstream-contract.ts",
@@ -205,6 +205,7 @@
205
205
  "verify:adapter-channel": "node --import tsx/esm scripts/verify-adapter-channel.ts",
206
206
  "verify:binding-transaction": "node --import tsx/esm scripts/verify-binding-transaction.ts",
207
207
  "verify:session-extraction": "node --import tsx/esm scripts/verify-session-extraction.ts",
208
+ "verify:rewind-edit": "node --import tsx/esm scripts/verify-rewind-edit.tsx",
208
209
  "verify:model-mode-workspace-extraction": "node --import tsx/esm scripts/verify-model-mode-workspace-extraction.ts",
209
210
  "verify:model-lifecycle-fences": "node --import tsx/esm scripts/verify-model-lifecycle-fences.ts",
210
211
  "verify:reports-metadata": "node --import tsx/esm scripts/verify-reports-metadata.ts",