@inhuman.tools/harness-tui 0.0.0-stage → 0.3.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 (167) hide show
  1. package/LICENSE.md +7 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/interpreter/ComputedExecBox.d.ts +12 -0
  7. package/dist/interpreter/ComputedExecBox.d.ts.map +1 -0
  8. package/dist/interpreter/ComputedExecBox.js +88 -0
  9. package/dist/interpreter/ComputedExecBox.js.map +1 -0
  10. package/dist/interpreter/imageCapability.d.ts +9 -0
  11. package/dist/interpreter/imageCapability.d.ts.map +1 -0
  12. package/dist/interpreter/imageCapability.js +49 -0
  13. package/dist/interpreter/imageCapability.js.map +1 -0
  14. package/dist/interpreter/rpcCapability.d.ts +11 -0
  15. package/dist/interpreter/rpcCapability.d.ts.map +1 -0
  16. package/dist/interpreter/rpcCapability.js +91 -0
  17. package/dist/interpreter/rpcCapability.js.map +1 -0
  18. package/dist/interpreter/uiCapability.d.ts +34 -0
  19. package/dist/interpreter/uiCapability.d.ts.map +1 -0
  20. package/dist/interpreter/uiCapability.js +207 -0
  21. package/dist/interpreter/uiCapability.js.map +1 -0
  22. package/dist/schemas/index.d.ts +2 -0
  23. package/dist/schemas/index.d.ts.map +1 -0
  24. package/dist/schemas/index.js +2 -0
  25. package/dist/schemas/index.js.map +1 -0
  26. package/dist/schemas/worker-boot.d.ts +14 -0
  27. package/dist/schemas/worker-boot.d.ts.map +1 -0
  28. package/dist/schemas/worker-boot.js +15 -0
  29. package/dist/schemas/worker-boot.js.map +1 -0
  30. package/dist/tui/ack-prompt.d.ts +53 -0
  31. package/dist/tui/ack-prompt.d.ts.map +1 -0
  32. package/dist/tui/ack-prompt.js +61 -0
  33. package/dist/tui/ack-prompt.js.map +1 -0
  34. package/dist/tui/agents-drawer.d.ts +49 -0
  35. package/dist/tui/agents-drawer.d.ts.map +1 -0
  36. package/dist/tui/agents-drawer.js +318 -0
  37. package/dist/tui/agents-drawer.js.map +1 -0
  38. package/dist/tui/ask-shortcuts.d.ts +59 -0
  39. package/dist/tui/ask-shortcuts.d.ts.map +1 -0
  40. package/dist/tui/ask-shortcuts.js +96 -0
  41. package/dist/tui/ask-shortcuts.js.map +1 -0
  42. package/dist/tui/channel.d.ts +59 -0
  43. package/dist/tui/channel.d.ts.map +1 -0
  44. package/dist/tui/channel.js +27 -0
  45. package/dist/tui/channel.js.map +1 -0
  46. package/dist/tui/host-verbs.d.ts +7 -0
  47. package/dist/tui/host-verbs.d.ts.map +1 -0
  48. package/dist/tui/host-verbs.js +19 -0
  49. package/dist/tui/host-verbs.js.map +1 -0
  50. package/dist/tui/host.d.ts +25 -0
  51. package/dist/tui/host.d.ts.map +1 -0
  52. package/dist/tui/host.js +380 -0
  53. package/dist/tui/host.js.map +1 -0
  54. package/dist/tui/omnibox-seat.d.ts +132 -0
  55. package/dist/tui/omnibox-seat.d.ts.map +1 -0
  56. package/dist/tui/omnibox-seat.js +182 -0
  57. package/dist/tui/omnibox-seat.js.map +1 -0
  58. package/dist/tui/paint-controller.d.ts +170 -0
  59. package/dist/tui/paint-controller.d.ts.map +1 -0
  60. package/dist/tui/paint-controller.js +965 -0
  61. package/dist/tui/paint-controller.js.map +1 -0
  62. package/dist/tui/paint-dom.d.ts +335 -0
  63. package/dist/tui/paint-dom.d.ts.map +1 -0
  64. package/dist/tui/paint-dom.js +704 -0
  65. package/dist/tui/paint-dom.js.map +1 -0
  66. package/dist/tui/paint-source.d.ts +57 -0
  67. package/dist/tui/paint-source.d.ts.map +1 -0
  68. package/dist/tui/paint-source.js +570 -0
  69. package/dist/tui/paint-source.js.map +1 -0
  70. package/dist/tui/paint-transport.d.ts +42 -0
  71. package/dist/tui/paint-transport.d.ts.map +1 -0
  72. package/dist/tui/paint-transport.js +207 -0
  73. package/dist/tui/paint-transport.js.map +1 -0
  74. package/dist/tui/paint-types.d.ts +15 -0
  75. package/dist/tui/paint-types.d.ts.map +1 -0
  76. package/dist/tui/paint-types.js +6 -0
  77. package/dist/tui/paint-types.js.map +1 -0
  78. package/dist/tui/paint-widgets.d.ts +94 -0
  79. package/dist/tui/paint-widgets.d.ts.map +1 -0
  80. package/dist/tui/paint-widgets.js +877 -0
  81. package/dist/tui/paint-widgets.js.map +1 -0
  82. package/dist/tui/parse-args.d.ts +3 -0
  83. package/dist/tui/parse-args.d.ts.map +1 -0
  84. package/dist/tui/parse-args.js +13 -0
  85. package/dist/tui/parse-args.js.map +1 -0
  86. package/dist/tui/permissions-view.d.ts +93 -0
  87. package/dist/tui/permissions-view.d.ts.map +1 -0
  88. package/dist/tui/permissions-view.js +174 -0
  89. package/dist/tui/permissions-view.js.map +1 -0
  90. package/dist/tui/present-visual/approve.d.ts +10 -0
  91. package/dist/tui/present-visual/approve.d.ts.map +1 -0
  92. package/dist/tui/present-visual/approve.js +156 -0
  93. package/dist/tui/present-visual/approve.js.map +1 -0
  94. package/dist/tui/present-visual/dump.d.ts +47 -0
  95. package/dist/tui/present-visual/dump.d.ts.map +1 -0
  96. package/dist/tui/present-visual/dump.js +144 -0
  97. package/dist/tui/present-visual/dump.js.map +1 -0
  98. package/dist/tui/present-visual/journey-teardown.d.ts +3 -0
  99. package/dist/tui/present-visual/journey-teardown.d.ts.map +1 -0
  100. package/dist/tui/present-visual/journey-teardown.js +188 -0
  101. package/dist/tui/present-visual/journey-teardown.js.map +1 -0
  102. package/dist/tui/present-visual/journey.d.ts +15 -0
  103. package/dist/tui/present-visual/journey.d.ts.map +1 -0
  104. package/dist/tui/present-visual/journey.js +88 -0
  105. package/dist/tui/present-visual/journey.js.map +1 -0
  106. package/dist/tui/present-visual/raster.d.ts +3 -0
  107. package/dist/tui/present-visual/raster.d.ts.map +1 -0
  108. package/dist/tui/present-visual/raster.js +75 -0
  109. package/dist/tui/present-visual/raster.js.map +1 -0
  110. package/dist/tui/queue-shortcuts.d.ts +13 -0
  111. package/dist/tui/queue-shortcuts.d.ts.map +1 -0
  112. package/dist/tui/queue-shortcuts.js +23 -0
  113. package/dist/tui/queue-shortcuts.js.map +1 -0
  114. package/dist/tui/read-widen.d.ts +14 -0
  115. package/dist/tui/read-widen.d.ts.map +1 -0
  116. package/dist/tui/read-widen.js +45 -0
  117. package/dist/tui/read-widen.js.map +1 -0
  118. package/dist/tui/rewind-chrome.d.ts +29 -0
  119. package/dist/tui/rewind-chrome.d.ts.map +1 -0
  120. package/dist/tui/rewind-chrome.js +77 -0
  121. package/dist/tui/rewind-chrome.js.map +1 -0
  122. package/dist/tui/rust-present.d.ts +37 -0
  123. package/dist/tui/rust-present.d.ts.map +1 -0
  124. package/dist/tui/rust-present.js +205 -0
  125. package/dist/tui/rust-present.js.map +1 -0
  126. package/dist/tui/spinner-phase.d.ts +23 -0
  127. package/dist/tui/spinner-phase.d.ts.map +1 -0
  128. package/dist/tui/spinner-phase.js +25 -0
  129. package/dist/tui/spinner-phase.js.map +1 -0
  130. package/dist/tui/statusline-path.d.ts +10 -0
  131. package/dist/tui/statusline-path.d.ts.map +1 -0
  132. package/dist/tui/statusline-path.js +42 -0
  133. package/dist/tui/statusline-path.js.map +1 -0
  134. package/dist/tui/sugarcoat-paint.d.ts +14 -0
  135. package/dist/tui/sugarcoat-paint.d.ts.map +1 -0
  136. package/dist/tui/sugarcoat-paint.js +146 -0
  137. package/dist/tui/sugarcoat-paint.js.map +1 -0
  138. package/dist/tui/tape-spans.d.ts +64 -0
  139. package/dist/tui/tape-spans.d.ts.map +1 -0
  140. package/dist/tui/tape-spans.js +93 -0
  141. package/dist/tui/tape-spans.js.map +1 -0
  142. package/dist/tui/tea.d.ts +75 -0
  143. package/dist/tui/tea.d.ts.map +1 -0
  144. package/dist/tui/tea.js +2952 -0
  145. package/dist/tui/tea.js.map +1 -0
  146. package/dist/tui/vt-paint.d.ts +12 -0
  147. package/dist/tui/vt-paint.d.ts.map +1 -0
  148. package/dist/tui/vt-paint.js +123 -0
  149. package/dist/tui/vt-paint.js.map +1 -0
  150. package/dist/tui/wait-phrase.d.ts +31 -0
  151. package/dist/tui/wait-phrase.d.ts.map +1 -0
  152. package/dist/tui/wait-phrase.js +26 -0
  153. package/dist/tui/wait-phrase.js.map +1 -0
  154. package/dist/tui/widget-host.d.ts +34 -0
  155. package/dist/tui/widget-host.d.ts.map +1 -0
  156. package/dist/tui/widget-host.js +80 -0
  157. package/dist/tui/widget-host.js.map +1 -0
  158. package/dist/tui/work-cells.d.ts +47 -0
  159. package/dist/tui/work-cells.d.ts.map +1 -0
  160. package/dist/tui/work-cells.js +606 -0
  161. package/dist/tui/work-cells.js.map +1 -0
  162. package/dist/tui/worker-entry.d.ts +2 -0
  163. package/dist/tui/worker-entry.d.ts.map +1 -0
  164. package/dist/tui/worker-entry.js +98 -0
  165. package/dist/tui/worker-entry.js.map +1 -0
  166. package/package.json +83 -3
  167. package/README.md +0 -3
@@ -0,0 +1,570 @@
1
+ /**
2
+ * Walks the Paint DOM replica through WidgetHost. Representation (column
3
+ * frame, picker hit-map) is Quickdraw. This file only keeps the tree and
4
+ * offers prepared children.
5
+ */
6
+ import { trace } from "@inhuman.tools/harness-diagnostics";
7
+ import { layoutChildren, mapLayoutChildren, measureNode } from "@inhuman.tools/quickdraw/layout";
8
+ import { agentsPanelWidth, assemblePaintFrame, EMPTY_PREPARED_COMPOSER, emptyPreparedPaint, pickerHostFromLayout, rootInnerWidth, ROOT_PAD_B, ROOT_PAD_T, STATUSLINE_GAP, TAPE_PAD_B, tapeInnerWidth, writePaintEcho, writePaintTapeScroll, } from "@inhuman.tools/quickdraw/runtime";
9
+ import { reaction, runInAction } from "mobx";
10
+ import { agentsPreviewInnerWidth, agentsPreviewTitle, prepareAgentsMeter, prepareAgentsPeek, } from "./agents-drawer.js";
11
+ import { createWorkCell, isPaintRootChrome, paintChildrenOf, } from "./paint-dom.js";
12
+ import { armPatchTally, createPaintWidgetHost, dropPatchTally, takePatchTally } from "./paint-widgets.js";
13
+ import { dropOldestPastThenFarthestFuture, neighborColumnHeight, prepareRewindNeighbors, REWIND_MIN_TAPE_ROWS, } from "./rewind-chrome.js";
14
+ /** Statusline is always one seated row. */
15
+ const STATUSLINE_ROWS = 1;
16
+ /**
17
+ * Neighbor drop only. One tape; recap is an in-place speech face.
18
+ */
19
+ export function packReplicaRewind(input) {
20
+ const atTip = input.rewind == null || input.rewind.atTip;
21
+ const seatRim = input.rewind == null ? true : input.rewind.seatRim;
22
+ const fixedChrome = ROOT_PAD_T +
23
+ ROOT_PAD_B +
24
+ STATUSLINE_ROWS +
25
+ STATUSLINE_GAP +
26
+ (input.overviewH ?? 0) +
27
+ TAPE_PAD_B +
28
+ input.composerH +
29
+ input.pinH;
30
+ const pastRows = [...(input.rewind?.past ?? [])];
31
+ const futureRows = atTip ? [] : [...(input.rewind?.future ?? [])];
32
+ const dropped = dropOldestPastThenFarthestFuture(pastRows, futureRows, Math.max(0, input.rows - fixedChrome - REWIND_MIN_TAPE_ROWS));
33
+ return {
34
+ atTip,
35
+ seatRim,
36
+ pastNeighbors: prepareRewindNeighbors(dropped.past, input.tapeW, "rewind:behind", {
37
+ side: "behind",
38
+ moreOuter: (input.rewind?.pastTotal ?? 0) > dropped.past.length,
39
+ }),
40
+ futureNeighbors: prepareRewindNeighbors(dropped.future, input.tapeW, "rewind:ahead", {
41
+ side: "ahead",
42
+ moreOuter: (input.rewind?.futureTotal ?? 0) > dropped.future.length,
43
+ }),
44
+ };
45
+ }
46
+ export function createHarnessPaintSource(options) {
47
+ let sink = null;
48
+ let local = null;
49
+ let widgets = null;
50
+ let dirty = false;
51
+ let phase = "";
52
+ let echoStop = null;
53
+ let assembled = null;
54
+ let assembledFrom = null;
55
+ let recapSnap = "";
56
+ const composerFace = (root) => {
57
+ const composer = composerOf(root);
58
+ if (composer === null)
59
+ return EMPTY_PREPARED_COMPOSER;
60
+ return {
61
+ draft: composer.draft,
62
+ cursor: composer.cursor,
63
+ mark: composer.mark,
64
+ interactive: composer.interactive,
65
+ };
66
+ };
67
+ const source = {
68
+ bind(nextSink, nextLocal) {
69
+ sink = nextSink;
70
+ local = nextLocal;
71
+ widgets = createPaintWidgetHost(nextSink, options.syntaxPolarity, options.syntaxWarm, nextLocal);
72
+ assembled = null;
73
+ assembledFrom = null;
74
+ recapSnap = "";
75
+ echoStop = reaction(() => {
76
+ const composer = composerOf(options.reader.root);
77
+ if (composer === null)
78
+ return null;
79
+ return [composer.draft, composer.cursor, composer.mark, composer.interactive];
80
+ }, (triple) => {
81
+ if (triple === null || nextLocal.echo.predicted === null)
82
+ return;
83
+ const [draft, cursor, mark, interactive] = triple;
84
+ const predicted = nextLocal.echo.predicted;
85
+ const same = predicted.draft === draft && predicted.cursor === cursor && (predicted.mark ?? null) === (mark ?? null);
86
+ writePaintEcho(nextLocal, { predicted: null, misaligned: interactive && !same });
87
+ nextSink.requestPaint();
88
+ }, { fireImmediately: false });
89
+ if (dirty || options.reader.root !== null)
90
+ nextSink.requestPaint();
91
+ return {
92
+ [Symbol.dispose]() {
93
+ echoStop?.();
94
+ echoStop = null;
95
+ sink = null;
96
+ local = null;
97
+ widgets = null;
98
+ assembled = null;
99
+ assembledFrom = null;
100
+ },
101
+ };
102
+ },
103
+ get snapshot() {
104
+ return source.prepare();
105
+ },
106
+ prepare() {
107
+ const root = options.reader.root;
108
+ const composer = composerFace(root);
109
+ if (local === null || root === null || widgets === null) {
110
+ assembled = null;
111
+ assembledFrom = null;
112
+ return finish({
113
+ ...emptyPreparedPaint(),
114
+ composer,
115
+ });
116
+ }
117
+ const frameW = rootInnerWidth(local.cols);
118
+ const tapeW = tapeInnerWidth(local.cols);
119
+ const composerNode = composerOf(root);
120
+ const preparedComposer = composerNode === null ? null : widgets.widgetFor(composerNode).prepare(frameW);
121
+ const tapeNode = tapeOf(root);
122
+ const preparedTape = tapeNode === null ? null : widgets.widgetFor(tapeNode).prepare(tapeW);
123
+ const askNode = askOf(root);
124
+ const askW = askSeatsInTape(askNode) ? tapeW : frameW;
125
+ const preparedAsk = askNode === null ? null : widgets.widgetFor(askNode).prepare(askW);
126
+ const waitNode = phaseWait(root);
127
+ const preparedWait = waitNode === null ? null : widgets.widgetFor(waitNode).prepare(frameW);
128
+ const statuslineNode = statuslineOf(root);
129
+ const agentsNode = agentsOf(root);
130
+ const drawerOpen = agentsNode?.open === true;
131
+ const drawerW = agentsPanelWidth(local.cols);
132
+ const preparedAgents = drawerOpen && agentsNode !== null ? widgets.widgetFor(agentsNode).prepare(drawerW) : null;
133
+ const previewNode = previewOf(root);
134
+ const previewW = agentsPreviewInnerWidth(local.cols);
135
+ const preparedPreview = previewNode === null ? null : widgets.widgetFor(previewNode).prepare(previewW);
136
+ const meterLeft = agentsNode?.meterLeft ?? "";
137
+ const meterRight = agentsNode?.meterRight ?? "";
138
+ const meter = agentsNode !== null && (meterLeft !== "" || meterRight !== "")
139
+ ? prepareAgentsMeter(meterLeft, meterRight, frameW)
140
+ : null;
141
+ const overviewH = meter === null ? 0 : 1;
142
+ const askPinH = askNode !== null && !askSeatsInTape(askNode) ? (preparedAsk?.measured.h ?? 0) : 0;
143
+ const waitPinH = waitNode !== null && askNode === null ? (preparedWait?.measured.h ?? 0) : 0;
144
+ const rewindNode = rewindOf(root);
145
+ const seatRim = rewindNode == null ? true : rewindNode.seatRim;
146
+ const rewind = packReplicaRewind({
147
+ rewind: rewindNode,
148
+ tapeW,
149
+ rows: local.rows,
150
+ composerH: seatRim ? (preparedComposer?.measured.h ?? 0) : 0,
151
+ pinH: askPinH + waitPinH,
152
+ overviewH,
153
+ });
154
+ if (preparedTape !== null && !rewind.atTip) {
155
+ const recap = recapInTape(preparedTape.root);
156
+ if (recap !== null && recap.key !== recapSnap) {
157
+ recapSnap = recap.key;
158
+ // Pin the active message on the viewport floor. `recap.y` is the
159
+ // row where that block starts inside the tape; writing it as
160
+ // scroll parks the block's top on the viewport's top and leaves
161
+ // the rest of a short message, or all of a tall one, below the fold.
162
+ const viewportH = tapeViewportRows(local.rows, {
163
+ composerH: seatRim ? (preparedComposer?.measured.h ?? 0) : 0,
164
+ pinH: askPinH + waitPinH,
165
+ overviewH,
166
+ pastH: neighborColumnHeight(rewind.pastNeighbors == null ? 0 : layoutChildren(rewind.pastNeighbors).length),
167
+ futureH: neighborColumnHeight(rewind.futureNeighbors == null ? 0 : layoutChildren(rewind.futureNeighbors).length),
168
+ });
169
+ writePaintTapeScroll(local, scrollToShowBlock(recap.y, recap.h, viewportH), false);
170
+ }
171
+ }
172
+ else if (rewind.atTip) {
173
+ if (recapSnap !== "")
174
+ writePaintTapeScroll(local, 0, true);
175
+ recapSnap = "";
176
+ }
177
+ const from = [
178
+ preparedTape?.root,
179
+ preparedComposer?.root,
180
+ preparedAsk?.root,
181
+ preparedWait?.root,
182
+ preparedAgents?.root,
183
+ preparedPreview?.root,
184
+ rewind.atTip,
185
+ rewind.seatRim,
186
+ rewind.pastNeighbors,
187
+ rewind.futureNeighbors,
188
+ local.cols,
189
+ local.rows,
190
+ local.tapeScroll,
191
+ local.tapeAtBottom,
192
+ local.tapeExpanded,
193
+ local.previewScroll,
194
+ local.previewAtBottom,
195
+ phase,
196
+ statuslineNode?.left ?? "",
197
+ statuslineNode?.note ?? "",
198
+ statuslineNode?.cwd ?? "",
199
+ statuslineNode?.cwdRoot ?? "",
200
+ meterLeft,
201
+ meterRight,
202
+ agentsNode?.open === true,
203
+ agentsNode?.scroll ?? 0,
204
+ agentsNode?.focusKey ?? "",
205
+ agentsNode?.previewKey ?? "",
206
+ composer.draft,
207
+ composer.cursor,
208
+ composer.mark,
209
+ composer.interactive,
210
+ composerNode?.readOnly === true,
211
+ ];
212
+ if (assembled !== null && assembledFrom !== null && sameAssemble(assembledFrom, from)) {
213
+ return finish(assembled);
214
+ }
215
+ const agentsFace = agentsNode === null
216
+ ? null
217
+ : {
218
+ meterLeft,
219
+ meterRight,
220
+ open: agentsNode.open,
221
+ focusKey: agentsNode.focusKey,
222
+ scroll: agentsNode.scroll,
223
+ rows: agentsNode.rows,
224
+ previewKey: agentsNode.previewKey,
225
+ };
226
+ assembled = {
227
+ root: assemblePaintFrame({
228
+ tape: preparedTape == null
229
+ ? emptySite("tape")
230
+ : rewind.atTip
231
+ ? preparedTape.root
232
+ : dimOutsideRecap(preparedTape.root),
233
+ composer: preparedComposer?.root ?? emptySite("composer"),
234
+ ask: preparedAsk?.root ?? null,
235
+ wait: preparedWait?.root ?? null,
236
+ agentsMeter: meter,
237
+ agents: preparedAgents?.root ?? null,
238
+ agentsScroll: agentsNode?.scroll ?? 0,
239
+ agentsPeek: agentsFace === null ? null : prepareAgentsPeek(agentsFace),
240
+ agentsFocusKey: agentsNode?.focusKey ?? "",
241
+ agentsPreview: preparedPreview?.root ?? null,
242
+ agentsPreviewTitle: agentsFace === null ? "" : agentsPreviewTitle(agentsFace),
243
+ agentsPreviewScroll: local.previewScroll,
244
+ agentsPreviewAtBottom: local.previewAtBottom,
245
+ statusline: statuslineNode === null
246
+ ? null
247
+ : {
248
+ left: statuslineNode.left,
249
+ note: statuslineNode.note,
250
+ cwd: statuslineNode.cwd,
251
+ cwdRoot: statuslineNode.cwdRoot,
252
+ },
253
+ cols: local.cols,
254
+ rows: local.rows,
255
+ scroll: local.tapeScroll,
256
+ atBottom: local.tapeAtBottom,
257
+ atTip: rewind.atTip,
258
+ seatRim: rewind.seatRim,
259
+ pastNeighbors: rewind.pastNeighbors,
260
+ futureNeighbors: rewind.futureNeighbors,
261
+ }),
262
+ composer,
263
+ birthSites: [
264
+ ...(preparedTape?.birthSites ?? []),
265
+ ...(preparedAsk?.birthSites ?? []),
266
+ ...(preparedWait?.birthSites ?? []),
267
+ ...(preparedComposer?.birthSites ?? []),
268
+ ...(preparedPreview?.birthSites ?? []),
269
+ ],
270
+ progressSites: [
271
+ ...(preparedTape?.progressSites ?? []),
272
+ ...(preparedAsk?.progressSites ?? []),
273
+ ...(preparedWait?.progressSites ?? []),
274
+ ...(preparedComposer?.progressSites ?? []),
275
+ ...(preparedPreview?.progressSites ?? []),
276
+ ],
277
+ picker: pickerHostFromLayout(preparedComposer?.root ?? null),
278
+ };
279
+ assembledFrom = from;
280
+ return finish(assembled);
281
+ function finish(prepared) {
282
+ const tally = takePatchTally();
283
+ if (tally !== null) {
284
+ // see paint-widgets preamble, CHANGE ONLY
285
+ trace("harness:paint", formatPaintTally(options.reader.seq, tally));
286
+ }
287
+ return prepared;
288
+ }
289
+ },
290
+ noteReplica(kind) {
291
+ dirty = true;
292
+ if (kind === "paint_patch")
293
+ armPatchTally();
294
+ else
295
+ dropPatchTally();
296
+ sink?.requestPaint();
297
+ },
298
+ setPhase(text) {
299
+ if (text === phase)
300
+ return;
301
+ phase = text;
302
+ assembled = null;
303
+ assembledFrom = null;
304
+ dirty = true;
305
+ sink?.requestPaint();
306
+ },
307
+ toggleCollapsed(blockId) {
308
+ widgets?.toggleCollapsed(blockId);
309
+ },
310
+ resetChrome() {
311
+ const bound = local;
312
+ const boundSink = sink;
313
+ if (bound != null) {
314
+ runInAction(() => {
315
+ bound.echo = { predicted: null, misaligned: false };
316
+ bound.tapeScroll = 0;
317
+ bound.tapeAtBottom = true;
318
+ bound.tapeExpanded = false;
319
+ bound.previewScroll = 0;
320
+ bound.previewAtBottom = true;
321
+ });
322
+ }
323
+ if (boundSink != null && bound != null) {
324
+ widgets = createPaintWidgetHost(boundSink, options.syntaxPolarity, options.syntaxWarm, bound);
325
+ }
326
+ assembled = null;
327
+ assembledFrom = null;
328
+ recapSnap = "";
329
+ dirty = true;
330
+ boundSink?.requestPaint();
331
+ },
332
+ };
333
+ /**
334
+ * Stall copy for this frame only. A fresh cell so the worker snapshot
335
+ * stays the status to restore when the phase clears.
336
+ */
337
+ function phaseWait(root) {
338
+ const cell = waitOf(root);
339
+ if (phase === "" || cell === null || cell.kind !== "wait")
340
+ return cell;
341
+ const overlay = createWorkCell("wait");
342
+ overlay.setFace({
343
+ name: "waiting",
344
+ object: "",
345
+ status: phase,
346
+ state: "live",
347
+ indent: false,
348
+ receiptKind: "none",
349
+ receiptText: "",
350
+ diffOld: "",
351
+ diffNew: "",
352
+ diffPath: "",
353
+ startedAt: null,
354
+ });
355
+ return overlay;
356
+ }
357
+ return source;
358
+ }
359
+ function formatPaintTally(seq, tally) {
360
+ const rebuilt = uniqueKinds(tally.rebuilt);
361
+ const rebuiltSet = new Set(rebuilt);
362
+ const cached = uniqueKinds(tally.cached).filter((kind) => !rebuiltSet.has(kind));
363
+ return `seq=${seq} rebuilt=${kindList(rebuilt)} cached=${kindList(cached)}`;
364
+ }
365
+ function uniqueKinds(kinds) {
366
+ const seen = new Set();
367
+ const out = [];
368
+ for (const kind of kinds) {
369
+ if (seen.has(kind))
370
+ continue;
371
+ seen.add(kind);
372
+ out.push(kind);
373
+ }
374
+ return out;
375
+ }
376
+ function kindList(kinds) {
377
+ return kinds.length === 0 ? "-" : kinds.join(",");
378
+ }
379
+ function sameAssemble(a, b) {
380
+ if (a.length !== b.length)
381
+ return false;
382
+ for (let i = 0; i < a.length; i++)
383
+ if (a[i] !== b[i])
384
+ return false;
385
+ return true;
386
+ }
387
+ function emptySite(key) {
388
+ return { type: "box", key, children: [] };
389
+ }
390
+ function composerOf(root) {
391
+ if (root === null)
392
+ return null;
393
+ for (const child of paintChildrenOf(root)) {
394
+ if (child.kind === "composer")
395
+ return child;
396
+ }
397
+ return null;
398
+ }
399
+ function tapeOf(root) {
400
+ for (const child of paintChildrenOf(root)) {
401
+ if (!isPaintRootChrome(child.kind))
402
+ return child;
403
+ }
404
+ return null;
405
+ }
406
+ function previewOf(root) {
407
+ for (const child of paintChildrenOf(root)) {
408
+ if (child.kind === "preview")
409
+ return child;
410
+ }
411
+ return null;
412
+ }
413
+ function agentsOf(root) {
414
+ for (const child of paintChildrenOf(root)) {
415
+ if (child.kind === "agents")
416
+ return child;
417
+ }
418
+ return null;
419
+ }
420
+ function askOf(root) {
421
+ if (root === null)
422
+ return null;
423
+ for (const child of paintChildrenOf(root)) {
424
+ if (child.kind === "ask")
425
+ return child;
426
+ }
427
+ return null;
428
+ }
429
+ function waitOf(root) {
430
+ if (root === null)
431
+ return null;
432
+ for (const child of paintChildrenOf(root)) {
433
+ if (child.kind === "wait")
434
+ return child;
435
+ }
436
+ return null;
437
+ }
438
+ /** Diff ask lives in the viewport; identity pin sits at column width. */
439
+ function askSeatsInTape(node) {
440
+ return node !== null && node.kind === "ask" && node.receiptKind === "diff";
441
+ }
442
+ function statuslineOf(root) {
443
+ if (root === null)
444
+ return null;
445
+ for (const child of paintChildrenOf(root)) {
446
+ if (child.kind === "statusline")
447
+ return child;
448
+ }
449
+ return null;
450
+ }
451
+ function rewindOf(root) {
452
+ for (const child of paintChildrenOf(root)) {
453
+ if (child.kind === "rewind")
454
+ return child;
455
+ }
456
+ return null;
457
+ }
458
+ /**
459
+ * Rows the transcript viewport can show. Same chrome the column seats
460
+ * around it: pads, statusline, neighbors, optional rim and pins.
461
+ */
462
+ export function tapeViewportRows(rows, chrome) {
463
+ const taken = ROOT_PAD_T +
464
+ ROOT_PAD_B +
465
+ STATUSLINE_ROWS +
466
+ STATUSLINE_GAP +
467
+ (chrome.overviewH ?? 0) +
468
+ TAPE_PAD_B +
469
+ chrome.composerH +
470
+ chrome.pinH +
471
+ chrome.pastH +
472
+ chrome.futureH;
473
+ return Math.max(1, rows - taken);
474
+ }
475
+ /**
476
+ * Scroll that centers a block in the viewport. `height` is the whole block,
477
+ * not its first row. A block taller than the viewport keeps its top on the
478
+ * first row so the start stays readable.
479
+ */
480
+ export function scrollToShowBlock(y, height, viewportH) {
481
+ const h = Math.max(1, height);
482
+ const view = Math.max(1, viewportH);
483
+ if (h >= view)
484
+ return Math.max(0, y);
485
+ return Math.max(0, y - Math.floor((view - h) / 2));
486
+ }
487
+ function recapInTape(tape) {
488
+ const body = tape.key === "transcript:body" ? tape : (findLayoutKey(tape, "transcript:body") ?? tape);
489
+ let y = 0;
490
+ let fallback = null;
491
+ for (const child of layoutChildren(body)) {
492
+ const pin = findPinRecap(child);
493
+ if (pin !== null) {
494
+ // The pin is the message block, not the whole turn. A long reply
495
+ // after it must not pull the scroll down until the prompt leaves
496
+ // the viewport.
497
+ const before = layoutOffset(child, pin);
498
+ return { key: pin.key ?? "", y: y + before, h: layoutHeight(pin) };
499
+ }
500
+ const h = layoutHeight(child);
501
+ if (fallback === null && isReadOnlyChrome(child))
502
+ fallback = { key: child.key ?? "", y, h };
503
+ y += h;
504
+ }
505
+ return fallback;
506
+ }
507
+ /** Rows from `root`'s top to `target`. Row flex does not add height. -1 if absent. */
508
+ function layoutOffset(root, target) {
509
+ if (root === target)
510
+ return 0;
511
+ const kids = layoutChildren(root);
512
+ const row = root.type === "flex" && root.style?.direction !== "column";
513
+ let y = 0;
514
+ for (const child of kids) {
515
+ if (child === target)
516
+ return y;
517
+ const inner = layoutOffset(child, target);
518
+ if (inner !== -1)
519
+ return y + inner;
520
+ if (!row)
521
+ y += layoutHeight(child);
522
+ }
523
+ return -1;
524
+ }
525
+ function findPinRecap(node) {
526
+ if (isPinRecap(node))
527
+ return node;
528
+ for (const child of layoutChildren(node)) {
529
+ const hit = findPinRecap(child);
530
+ if (hit !== null)
531
+ return hit;
532
+ }
533
+ return null;
534
+ }
535
+ function isPinRecap(node) {
536
+ return isReadOnlyChrome(node) && typeof node.key === "string" && node.key.endsWith(":recap");
537
+ }
538
+ function findLayoutKey(node, key) {
539
+ if (node.key === key)
540
+ return node;
541
+ for (const child of layoutChildren(node)) {
542
+ const hit = findLayoutKey(child, key);
543
+ if (hit !== null)
544
+ return hit;
545
+ }
546
+ return null;
547
+ }
548
+ function isReadOnlyChrome(node) {
549
+ return node.type === "chrome_frame" && node.readOnly === true;
550
+ }
551
+ function layoutHeight(node) {
552
+ if (node.measured != null)
553
+ return node.measured.h;
554
+ const style = "style" in node ? node.style : undefined;
555
+ const height = style != null && typeof style === "object" && "height" in style ? style.height : undefined;
556
+ if (typeof height === "number")
557
+ return height;
558
+ // Widget prepare stamps measured on its root only. A recap frame and the
559
+ // rows around it have no stamp, and a missing height scrolls to row 0.
560
+ return measureNode(node, 10_000, 10_000).h;
561
+ }
562
+ /** Keep the target at full prominence; fade sibling subtrees without changing layout. */
563
+ function dimOutsideRecap(node) {
564
+ if (isPinRecap(node))
565
+ return node;
566
+ if (findPinRecap(node) === null)
567
+ return { ...node, regionProminence: 0.45 };
568
+ return mapLayoutChildren(node, dimOutsideRecap);
569
+ }
570
+ //# sourceMappingURL=paint-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-source.js","sourceRoot":"","sources":["../../src/tui/paint-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type IJsonPatch } from "mobx-state-tree";
2
+ import { type PaintRootSnapshot, type RootPaintInstance } from "./paint-dom.js";
3
+ export type PaintSplicePatch = {
4
+ readonly op: "splice";
5
+ readonly path: string;
6
+ readonly from: number;
7
+ readonly deleteCount: number;
8
+ readonly insert: string;
9
+ };
10
+ export type PaintPatch = IJsonPatch | PaintSplicePatch;
11
+ export type PaintDownMessage = {
12
+ readonly kind: "paint_init";
13
+ readonly epoch: string;
14
+ readonly snapshot: PaintRootSnapshot;
15
+ } | {
16
+ readonly kind: "paint_patch";
17
+ readonly epoch: string;
18
+ readonly seq: number;
19
+ readonly patches: readonly PaintPatch[];
20
+ };
21
+ export type PaintProtocolCode = "patch_before_init" | "seq_gap" | "epoch_mismatch" | "apply_failed";
22
+ export declare class PaintProtocolError extends Error {
23
+ readonly code: PaintProtocolCode;
24
+ constructor(code: PaintProtocolCode, message: string);
25
+ }
26
+ export type PaintWriter = {
27
+ readonly epoch: string;
28
+ attach(root: RootPaintInstance): void;
29
+ flush(): void;
30
+ close(mode: "flush" | "discard"): void;
31
+ dispose(): void;
32
+ };
33
+ export declare function createPaintWriter(epoch: string, post: (message: PaintDownMessage) => void): PaintWriter;
34
+ export type PaintReader = {
35
+ readonly root: RootPaintInstance | null;
36
+ readonly epoch: string | null;
37
+ readonly seq: number;
38
+ apply(message: PaintDownMessage): RootPaintInstance;
39
+ dispose(): void;
40
+ };
41
+ export declare function createPaintReader(): PaintReader;
42
+ //# sourceMappingURL=paint-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-transport.d.ts","sourceRoot":"","sources":["../../src/tui/paint-transport.ts"],"names":[],"mappings":"AAWA,OAAO,EAAoC,KAAK,UAAU,EAAoB,MAAM,iBAAiB,CAAC;AAEtG,OAAO,EAAE,KAAK,iBAAiB,EAAa,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE3F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GACxB;IACE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,SAAS,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEpG,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBACrB,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM;CAKrD;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACvC,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,WAAW,CAuDvG;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;IACpD,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,WAAW,CAuD/C"}