@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,207 @@
1
+ /**
2
+ * paint_init + sequenced paint_patch. Worker accumulates MST onPatch into one
3
+ * microtask batch. Host applyPatch is one MobX action. Protocol faults are
4
+ * fatal; valid structural patches are transported without heuristic rejection.
5
+ *
6
+ * Growing strings (speech, live receipts) travel as `splice` so a token does
7
+ * not recopy the whole prefix. The reader expands each splice to an MST
8
+ * replace against the replica's current value.
9
+ */
10
+ import { trace } from "@inhuman.tools/harness-diagnostics";
11
+ import { runInAction } from "mobx";
12
+ import { applyPatch, destroy, getSnapshot, onPatch, protect } from "mobx-state-tree";
13
+ import { RootPaint } from "./paint-dom.js";
14
+ export class PaintProtocolError extends Error {
15
+ code;
16
+ constructor(code, message) {
17
+ super(message);
18
+ this.name = "PaintProtocolError";
19
+ this.code = code;
20
+ }
21
+ }
22
+ export function createPaintWriter(epoch, post) {
23
+ let root = null;
24
+ let queued = [];
25
+ let scheduled = false;
26
+ let seq = 0;
27
+ let open = true;
28
+ let detachPatch = null;
29
+ const flush = () => {
30
+ scheduled = false;
31
+ if (!open || queued.length === 0) {
32
+ queued = [];
33
+ return;
34
+ }
35
+ const patches = queued;
36
+ queued = [];
37
+ seq += 1;
38
+ if (patches.length > 40)
39
+ trace("harness:paint", `patch seq=${seq} n=${patches.length}`);
40
+ post({ kind: "paint_patch", epoch, seq, patches });
41
+ };
42
+ return {
43
+ epoch,
44
+ attach(next) {
45
+ if (root !== null) {
46
+ throw new Error("paint writer already attached");
47
+ }
48
+ root = next;
49
+ detachPatch = onPatch(next, (patch, reversePatch) => {
50
+ if (!open)
51
+ return;
52
+ enqueuePatch(queued, compressReplace(patch, reversePatch));
53
+ if (scheduled)
54
+ return;
55
+ scheduled = true;
56
+ queueMicrotask(flush);
57
+ });
58
+ post({
59
+ kind: "paint_init",
60
+ epoch,
61
+ snapshot: getSnapshot(next),
62
+ });
63
+ },
64
+ flush,
65
+ close(mode) {
66
+ if (!open)
67
+ return;
68
+ if (mode === "flush")
69
+ flush();
70
+ else
71
+ queued = [];
72
+ open = false;
73
+ scheduled = false;
74
+ },
75
+ dispose() {
76
+ this.close("discard");
77
+ detachPatch?.();
78
+ detachPatch = null;
79
+ root = null;
80
+ },
81
+ };
82
+ }
83
+ export function createPaintReader() {
84
+ let root = null;
85
+ let epoch = null;
86
+ let seq = 0;
87
+ const remount = (nextEpoch, snapshot) => {
88
+ if (root !== null)
89
+ destroy(root);
90
+ root = RootPaint.create(snapshot);
91
+ protect(root);
92
+ epoch = nextEpoch;
93
+ seq = 0;
94
+ return root;
95
+ };
96
+ return {
97
+ get root() {
98
+ return root;
99
+ },
100
+ get epoch() {
101
+ return epoch;
102
+ },
103
+ get seq() {
104
+ return seq;
105
+ },
106
+ apply(message) {
107
+ if (message.kind === "paint_init") {
108
+ return remount(message.epoch, message.snapshot);
109
+ }
110
+ if (root === null || epoch === null) {
111
+ throw new PaintProtocolError("patch_before_init", "paint_patch before paint_init");
112
+ }
113
+ if (message.epoch !== epoch) {
114
+ throw new PaintProtocolError("epoch_mismatch", `paint_patch epoch ${message.epoch} != ${epoch}`);
115
+ }
116
+ if (message.seq !== seq + 1) {
117
+ throw new PaintProtocolError("seq_gap", `paint_patch seq ${message.seq} != ${seq + 1}`);
118
+ }
119
+ try {
120
+ runInAction(() => {
121
+ applyPaintPatches(root, message.patches);
122
+ });
123
+ }
124
+ catch (error) {
125
+ const detail = error instanceof Error ? error.message : String(error);
126
+ throw new PaintProtocolError("apply_failed", detail);
127
+ }
128
+ seq = message.seq;
129
+ return root;
130
+ },
131
+ dispose() {
132
+ if (root !== null)
133
+ destroy(root);
134
+ root = null;
135
+ epoch = null;
136
+ seq = 0;
137
+ },
138
+ };
139
+ }
140
+ function compressReplace(patch, reversePatch) {
141
+ if (patch.op !== "replace" || typeof patch.value !== "string")
142
+ return patch;
143
+ const old = reversePatch.value;
144
+ if (typeof old !== "string")
145
+ return patch;
146
+ if (patch.value.startsWith(old)) {
147
+ return {
148
+ op: "splice",
149
+ path: patch.path,
150
+ from: old.length,
151
+ deleteCount: 0,
152
+ insert: patch.value.slice(old.length),
153
+ };
154
+ }
155
+ if (old.startsWith(patch.value)) {
156
+ return {
157
+ op: "splice",
158
+ path: patch.path,
159
+ from: patch.value.length,
160
+ deleteCount: old.length - patch.value.length,
161
+ insert: "",
162
+ };
163
+ }
164
+ return patch;
165
+ }
166
+ function enqueuePatch(queued, next) {
167
+ const last = queued.at(-1);
168
+ if (last?.op === "splice" &&
169
+ next.op === "splice" &&
170
+ last.path === next.path &&
171
+ last.deleteCount === 0 &&
172
+ next.deleteCount === 0 &&
173
+ last.from + last.insert.length === next.from) {
174
+ queued[queued.length - 1] = { ...last, insert: last.insert + next.insert };
175
+ return;
176
+ }
177
+ queued.push(next);
178
+ }
179
+ function isSplice(patch) {
180
+ return patch.op === "splice";
181
+ }
182
+ function valueAtPath(root, path) {
183
+ let cur = root;
184
+ for (const part of path.split("/")) {
185
+ if (part === "")
186
+ continue;
187
+ if (cur == null || typeof cur !== "object")
188
+ return undefined;
189
+ cur = cur[part];
190
+ }
191
+ return cur;
192
+ }
193
+ function expandSplice(root, patch) {
194
+ const current = valueAtPath(root, patch.path);
195
+ const text = typeof current === "string" ? current : "";
196
+ return {
197
+ op: "replace",
198
+ path: patch.path,
199
+ value: text.slice(0, patch.from) + patch.insert + text.slice(patch.from + patch.deleteCount),
200
+ };
201
+ }
202
+ function applyPaintPatches(root, patches) {
203
+ for (const patch of patches) {
204
+ applyPatch(root, isSplice(patch) ? expandSplice(root, patch) : patch);
205
+ }
206
+ }
207
+ //# sourceMappingURL=paint-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-transport.js","sourceRoot":"","sources":["../../src/tui/paint-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Host-facing paint bags. Structural types live in Quickdraw; MountLocal
3
+ * and paint-mode unions stay here next to the MST models.
4
+ */
5
+ /** TUI-only per-mount display. Keyed by the reader PaintNode pointer. */
6
+ export interface MountLocal {
7
+ collapsed: boolean;
8
+ hitKey: string;
9
+ }
10
+ export type ComposerPaintMode = "normal" | "secret" | "isolated" | "waiting";
11
+ export type CompletionPaintState = "live" | "successful" | "failed";
12
+ export type WorkCellPaintState = "live" | "ok" | "fail" | "ask" | "judging";
13
+ export type WorkReceiptKind = "none" | "text" | "markdown" | "diff" | "stream" | "syntax" | "number" | "boolean" | "parts";
14
+ export type ComposerErrorLevel = "warning" | "error";
15
+ //# sourceMappingURL=paint-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-types.d.ts","sourceRoot":"","sources":["../../src/tui/paint-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAC7E,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAC5E,MAAM,MAAM,eAAe,GACzB,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAC/F,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Host-facing paint bags. Structural types live in Quickdraw; MountLocal
3
+ * and paint-mode unions stay here next to the MST models.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=paint-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-types.js","sourceRoot":"","sources":["../../src/tui/paint-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,94 @@
1
+ import { type LayoutNode, type ProgressSite } from "@inhuman.tools/quickdraw/layout";
2
+ import { type BirthSite, type PaintLocal, type PaintSink } from "@inhuman.tools/quickdraw/runtime";
3
+ import { type SyntaxPolarity, type TranscriptPart } from "@inhuman.tools/quickdraw/widgets";
4
+ import { type PaintNodeInstance } from "./paint-dom.js";
5
+ import { WidgetHost, type PreparedSubtree, type RetainedWidget } from "./widget-host.js";
6
+ type PatchTally = {
7
+ rebuilt: string[];
8
+ cached: string[];
9
+ };
10
+ export declare function armPatchTally(): void;
11
+ export declare function dropPatchTally(): void;
12
+ export declare function takePatchTally(): PatchTally | null;
13
+ export type PaintWidgetContext = {
14
+ host: WidgetHost;
15
+ sink: PaintSink;
16
+ local: PaintLocal | null;
17
+ /**
18
+ * Ambient shiki polarity and warmth — both MobX-observable, read inside
19
+ * each widget's `reaction` data function so a flip or warm-up marks the
20
+ * baked-token subtree dirty. Not a counter: these are the actual inputs
21
+ * `highlightCodeSync` derives token colors from.
22
+ */
23
+ syntaxPolarity: () => SyntaxPolarity;
24
+ syntaxWarm: () => boolean;
25
+ };
26
+ export declare function createPaintWidgetHost(sink: PaintSink, syntaxPolarity?: () => SyntaxPolarity, syntaxWarm?: () => boolean, local?: PaintLocal | null): WidgetHost;
27
+ declare abstract class RetainedAdapter implements RetainedWidget {
28
+ #private;
29
+ readonly node: PaintNodeInstance;
30
+ readonly parent: RetainedWidget | null;
31
+ readonly ctx: PaintWidgetContext;
32
+ disposed: boolean;
33
+ constructor(node: PaintNodeInstance, parent: RetainedWidget | null, ctx: PaintWidgetContext);
34
+ protected observe(data: () => unknown): void;
35
+ protected abstract watch(): void;
36
+ protected abstract rebuild(width: number): LayoutNode;
37
+ markDirty(): void;
38
+ prepare(width: number): PreparedSubtree;
39
+ /** Stack/turn rebuild already asked child widgets; reuse their site lists. */
40
+ protected takeSites(root: LayoutNode): {
41
+ birth: readonly BirthSite[];
42
+ progress: readonly ProgressSite[];
43
+ };
44
+ protected keepSites(birth: BirthSite[], progress: ProgressSite[]): void;
45
+ dispose(): void;
46
+ }
47
+ export declare class SpeechWidget extends RetainedAdapter {
48
+ #private;
49
+ expands: number;
50
+ protected watch(): void;
51
+ protected rebuild(width: number): LayoutNode;
52
+ }
53
+ export declare class ThinkingWidget extends RetainedAdapter {
54
+ protected watch(): void;
55
+ protected rebuild(width: number): LayoutNode;
56
+ }
57
+ export declare class FailureWidget extends RetainedAdapter {
58
+ protected watch(): void;
59
+ protected rebuild(width: number): LayoutNode;
60
+ }
61
+ export declare class RecallWidget extends RetainedAdapter {
62
+ protected watch(): void;
63
+ protected rebuild(_width: number): LayoutNode;
64
+ }
65
+ export declare class CompletionWidget extends RetainedAdapter {
66
+ protected watch(): void;
67
+ protected rebuild(width: number): LayoutNode;
68
+ }
69
+ export declare class WorkCellWidget extends RetainedAdapter {
70
+ protected watch(): void;
71
+ protected rebuild(width: number): LayoutNode;
72
+ }
73
+ export declare class ComposerWidget extends RetainedAdapter {
74
+ protected watch(): void;
75
+ protected rebuild(width: number): LayoutNode;
76
+ }
77
+ export declare class AgentsWidget extends RetainedAdapter {
78
+ protected watch(): void;
79
+ protected rebuild(width: number): LayoutNode;
80
+ }
81
+ export declare class StackWidget extends RetainedAdapter {
82
+ #private;
83
+ protected watch(): void;
84
+ markDirty(): void;
85
+ collectParts(width: number): TapeCollect;
86
+ protected rebuild(width: number): LayoutNode;
87
+ }
88
+ type TapeCollect = {
89
+ parts: TranscriptPart[];
90
+ birth: BirthSite[];
91
+ progress: ProgressSite[];
92
+ };
93
+ export {};
94
+ //# sourceMappingURL=paint-widgets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-widgets.d.ts","sourceRoot":"","sources":["../../src/tui/paint-widgets.ts"],"names":[],"mappings":"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"}