4runr-os 2.0.39 → 2.0.41

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 (39) hide show
  1. package/dist/ui/v5/debug/debugCommands.d.ts +20 -0
  2. package/dist/ui/v5/debug/debugCommands.d.ts.map +1 -0
  3. package/dist/ui/v5/debug/debugCommands.js +104 -0
  4. package/dist/ui/v5/debug/debugCommands.js.map +1 -0
  5. package/dist/ui/v5/guardrails/stdoutGuard.d.ts +23 -0
  6. package/dist/ui/v5/guardrails/stdoutGuard.d.ts.map +1 -0
  7. package/dist/ui/v5/guardrails/stdoutGuard.js +94 -0
  8. package/dist/ui/v5/guardrails/stdoutGuard.js.map +1 -0
  9. package/dist/ui/v5/guardrails/terminalRestore.d.ts +17 -0
  10. package/dist/ui/v5/guardrails/terminalRestore.d.ts.map +1 -0
  11. package/dist/ui/v5/guardrails/terminalRestore.js +47 -0
  12. package/dist/ui/v5/guardrails/terminalRestore.js.map +1 -0
  13. package/dist/ui/v5/index.d.ts +13 -3
  14. package/dist/ui/v5/index.d.ts.map +1 -1
  15. package/dist/ui/v5/index.js +48 -39
  16. package/dist/ui/v5/index.js.map +1 -1
  17. package/dist/ui/v5/kernel/kernel.d.ts +80 -0
  18. package/dist/ui/v5/kernel/kernel.d.ts.map +1 -0
  19. package/dist/ui/v5/kernel/kernel.js +283 -0
  20. package/dist/ui/v5/kernel/kernel.js.map +1 -0
  21. package/dist/ui/v5/layout/clampRect.d.ts +22 -0
  22. package/dist/ui/v5/layout/clampRect.d.ts.map +1 -0
  23. package/dist/ui/v5/layout/clampRect.js +40 -0
  24. package/dist/ui/v5/layout/clampRect.js.map +1 -0
  25. package/dist/ui/v5/layout/layoutEngine.d.ts +16 -0
  26. package/dist/ui/v5/layout/layoutEngine.d.ts.map +1 -0
  27. package/dist/ui/v5/layout/layoutEngine.js +99 -0
  28. package/dist/ui/v5/layout/layoutEngine.js.map +1 -0
  29. package/dist/ui/v5/resize/resizeController.d.ts +62 -0
  30. package/dist/ui/v5/resize/resizeController.d.ts.map +1 -0
  31. package/dist/ui/v5/resize/resizeController.js +133 -0
  32. package/dist/ui/v5/resize/resizeController.js.map +1 -0
  33. package/dist/ui/v5/viewport/getViewport.d.ts +19 -0
  34. package/dist/ui/v5/viewport/getViewport.d.ts.map +1 -0
  35. package/dist/ui/v5/viewport/getViewport.js +98 -0
  36. package/dist/ui/v5/viewport/getViewport.js.map +1 -0
  37. package/dist/ui/v5/viewport.js +2 -2
  38. package/dist/ui/v5/viewport.js.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../../../src/ui/v5/kernel/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAiB,KAAK,MAAM,EAAgB,MAAM,2BAA2B,CAAC;AAIrF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAC5B;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,EAAE,OAAO,CAAC,MAAM;IAIlC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,SAAS,IAAI,MAAM;IAOnB;;OAEG;IACH,kBAAkB,IAAI,OAAO,CAAC,GAAG,GAAG,SAAS;IAI7C;;OAEG;IACH,UAAU,IAAI,SAAS,GAAG,IAAI;IAI9B;;OAEG;IACH,IAAI,IAAI,IAAI;IAiBZ;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IA8DtC;;OAEG;IACH,OAAO,IAAI,IAAI;IAMf;;OAEG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IA6C1C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,aAAa;CAmDtB"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * V5 UI Kernel
3
+ *
4
+ * Owns the screen and all widgets. Provides atomic rebuild capability.
5
+ *
6
+ * HARD RULE: Never resize/move existing widgets.
7
+ * On every committed resize: destroy all widgets and recreate them.
8
+ */
9
+ import blessed from 'neo-blessed';
10
+ import { getViewport } from '../viewport/getViewport.js';
11
+ import { computeLayout } from '../layout/layoutEngine.js';
12
+ import { setLayoutVersion } from '../renderGate.js';
13
+ export class UIKernel {
14
+ screen;
15
+ widgets = null;
16
+ layout = null;
17
+ layoutVersion = 0;
18
+ isRebuilding = false;
19
+ pendingRebuild = null;
20
+ debugOverlayVisible = false;
21
+ debugOverlay = null;
22
+ constructor(screen) {
23
+ this.screen = screen;
24
+ }
25
+ /**
26
+ * Get current layout version (for render gating)
27
+ */
28
+ getLayoutVersion() {
29
+ return this.layoutVersion;
30
+ }
31
+ /**
32
+ * Get current layout
33
+ */
34
+ getLayout() {
35
+ if (!this.layout) {
36
+ throw new Error('Layout not computed yet');
37
+ }
38
+ return this.layout;
39
+ }
40
+ /**
41
+ * Get operations panel (for debug commands)
42
+ */
43
+ getOperationsPanel() {
44
+ return this.widgets?.operations;
45
+ }
46
+ /**
47
+ * Get current widgets (for external access)
48
+ */
49
+ getWidgets() {
50
+ return this.widgets;
51
+ }
52
+ /**
53
+ * Boot the kernel - initial mount
54
+ */
55
+ boot() {
56
+ if (this.widgets) {
57
+ throw new Error('Kernel already booted');
58
+ }
59
+ const vp = getViewport(this.screen);
60
+ this.layout = computeLayout(vp.safeCols, vp.safeRows);
61
+ this.widgets = this.createWidgets(this.layout);
62
+ this.layoutVersion = 1;
63
+ setLayoutVersion(this.layoutVersion);
64
+ // Force a render after a small delay to ensure screen is ready
65
+ setImmediate(() => {
66
+ this.screen.render();
67
+ });
68
+ }
69
+ /**
70
+ * Rebuild the UI - atomic destroy and recreate
71
+ */
72
+ rebuild(options) {
73
+ // A) Block re-entrant rebuild
74
+ if (this.isRebuilding) {
75
+ this.pendingRebuild = options;
76
+ return;
77
+ }
78
+ this.isRebuilding = true;
79
+ try {
80
+ // B) Clear the terminal buffer
81
+ const program = this.screen.program;
82
+ if (program) {
83
+ if (typeof program.clear === 'function') {
84
+ program.clear();
85
+ }
86
+ if (typeof program.flush === 'function') {
87
+ program.flush();
88
+ }
89
+ }
90
+ // C) Destroy everything currently mounted (hard)
91
+ this.destroyAllChildren();
92
+ // D) Compute viewport and layout
93
+ const vp = getViewport(this.screen);
94
+ this.layout = computeLayout(vp.safeCols, vp.safeRows);
95
+ // E) Recreate widgets fresh
96
+ this.widgets = this.createWidgets(this.layout);
97
+ this.layoutVersion = options.version;
98
+ setLayoutVersion(this.layoutVersion);
99
+ // F) Render once
100
+ this.screen.render();
101
+ // Update debug overlay if visible
102
+ if (this.debugOverlayVisible && this.debugOverlay) {
103
+ this.updateDebugOverlay();
104
+ }
105
+ // G) Restore input focus
106
+ if (this.widgets.command) {
107
+ this.widgets.command.focus?.();
108
+ this.screen.render();
109
+ }
110
+ process.stderr.write(`[V5] Rebuilt layout v${options.version} (raw: ${vp.cols}x${vp.rows}, safe: ${vp.safeCols}x${vp.safeRows}, mode: ${this.layout.mode}) from ${options.source} (burst: ${options.burstCount})\n`);
111
+ }
112
+ finally {
113
+ this.isRebuilding = false;
114
+ // Process pending rebuild if one was queued
115
+ if (this.pendingRebuild) {
116
+ const pending = this.pendingRebuild;
117
+ this.pendingRebuild = null;
118
+ // Use setImmediate to avoid re-entrancy issues
119
+ setImmediate(() => this.rebuild(pending));
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * Destroy the kernel and all widgets
125
+ */
126
+ destroy() {
127
+ this.destroyAllChildren();
128
+ this.widgets = null;
129
+ this.layout = null;
130
+ }
131
+ /**
132
+ * Toggle debug overlay
133
+ */
134
+ toggleDebugOverlay(content) {
135
+ this.debugOverlayVisible = !this.debugOverlayVisible;
136
+ if (this.debugOverlayVisible) {
137
+ // Create or update debug overlay
138
+ if (this.debugOverlay) {
139
+ if (typeof this.debugOverlay.detach === 'function') {
140
+ this.debugOverlay.detach();
141
+ }
142
+ }
143
+ const vp = getViewport(this.screen);
144
+ const overlayContent = content || this.buildDebugOverlayContent();
145
+ this.debugOverlay = blessed.box({
146
+ top: 0,
147
+ left: 0,
148
+ width: vp.safeCols,
149
+ height: Math.min(10, vp.safeRows),
150
+ content: overlayContent,
151
+ scrollable: true,
152
+ alwaysScroll: true,
153
+ style: {
154
+ fg: 'yellow',
155
+ bg: 'black',
156
+ },
157
+ });
158
+ this.screen.append(this.debugOverlay);
159
+ }
160
+ else {
161
+ // Remove debug overlay
162
+ if (this.debugOverlay) {
163
+ if (typeof this.debugOverlay.detach === 'function') {
164
+ this.debugOverlay.detach();
165
+ }
166
+ if (typeof this.debugOverlay.destroy === 'function') {
167
+ this.debugOverlay.destroy();
168
+ }
169
+ this.debugOverlay = null;
170
+ }
171
+ }
172
+ this.screen.render();
173
+ }
174
+ /**
175
+ * Update debug overlay with new info
176
+ */
177
+ updateDebugOverlay() {
178
+ if (this.debugOverlayVisible && this.debugOverlay && this.layout) {
179
+ const content = this.buildDebugOverlayContent();
180
+ this.debugOverlay.setContent(content);
181
+ this.screen.render();
182
+ }
183
+ }
184
+ /**
185
+ * Build debug overlay content
186
+ */
187
+ buildDebugOverlayContent() {
188
+ if (!this.layout) {
189
+ return 'Layout not computed';
190
+ }
191
+ const lines = [
192
+ `mode: ${this.layout.mode} | v${this.layoutVersion}`,
193
+ ];
194
+ for (const [id, rect] of Object.entries(this.layout.rects)) {
195
+ const rightEdge = rect.x + rect.w;
196
+ const bottomEdge = rect.y + rect.h;
197
+ lines.push(`${id}: x=${rect.x} y=${rect.y} w=${rect.w} h=${rect.h} rightEdge=${rightEdge} bottomEdge=${bottomEdge}`);
198
+ }
199
+ return lines.join('\n');
200
+ }
201
+ /**
202
+ * Destroy all children widgets (hard destroy)
203
+ */
204
+ destroyAllChildren() {
205
+ // Copy list first because detach mutates
206
+ const kids = [...this.screen.children];
207
+ for (const k of kids) {
208
+ try {
209
+ if (typeof k.detach === 'function') {
210
+ k.detach();
211
+ }
212
+ }
213
+ catch (e) {
214
+ // Ignore detach errors
215
+ }
216
+ try {
217
+ if (typeof k.destroy === 'function') {
218
+ k.destroy();
219
+ }
220
+ }
221
+ catch (e) {
222
+ // Ignore destroy errors
223
+ }
224
+ }
225
+ // Remove from screen.children manually (blessed sometimes doesn't clean up)
226
+ const screenChildren = this.screen.children || [];
227
+ while (screenChildren.length > 0) {
228
+ screenChildren.pop();
229
+ }
230
+ // Clear debug overlay reference
231
+ this.debugOverlay = null;
232
+ }
233
+ /**
234
+ * Create all widgets fresh from layout
235
+ */
236
+ createWidgets(layout) {
237
+ const widgets = {};
238
+ // Create panel widgets
239
+ for (const [id, rect] of Object.entries(layout.rects)) {
240
+ const panelId = id;
241
+ const title = panelId.charAt(0).toUpperCase() + panelId.slice(1);
242
+ const box = blessed.box({
243
+ top: rect.y,
244
+ left: rect.x,
245
+ width: rect.w,
246
+ height: rect.h,
247
+ border: {
248
+ type: 'line',
249
+ },
250
+ content: `${title} Panel\n\nMode: ${layout.mode}`,
251
+ style: {
252
+ border: {
253
+ fg: 'cyan',
254
+ },
255
+ },
256
+ tags: true,
257
+ });
258
+ box.setLabel(` {cyan-fg}${title.toUpperCase()}{/}`);
259
+ this.screen.append(box);
260
+ widgets[panelId] = box;
261
+ }
262
+ // V5 Watermark - top right corner
263
+ const vp = getViewport(this.screen);
264
+ const watermarkLeft = vp.safeCols - 10;
265
+ if (watermarkLeft >= 0) {
266
+ const watermark = blessed.box({
267
+ top: 0,
268
+ left: watermarkLeft,
269
+ width: 10,
270
+ height: 1,
271
+ content: '{cyan-fg}V5{/cyan-fg}',
272
+ style: {
273
+ fg: 'cyan',
274
+ },
275
+ tags: true,
276
+ });
277
+ this.screen.append(watermark);
278
+ widgets.watermark = watermark;
279
+ }
280
+ return widgets;
281
+ }
282
+ }
283
+ //# sourceMappingURL=kernel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../../../src/ui/v5/kernel/kernel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * V5 Rect Clamping
3
+ *
4
+ * Hard requirement: Every single widget rect must pass through clampRect.
5
+ * No exceptions.
6
+ */
7
+ export type Rect = {
8
+ x: number;
9
+ y: number;
10
+ w: number;
11
+ h: number;
12
+ };
13
+ /**
14
+ * Clamp rectangle to fit within safe bounds
15
+ *
16
+ * Rules:
17
+ * 1) Clamp x/y within bounds
18
+ * 2) Clamp w/h so x+w <= safeCols and y+h <= safeRows
19
+ * 3) Enforce w>=1, h>=1
20
+ */
21
+ export declare function clampRect(r: Rect, safeCols: number, safeRows: number): Rect;
22
+ //# sourceMappingURL=clampRect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clampRect.d.ts","sourceRoot":"","sources":["../../../../src/ui/v5/layout/clampRect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CA8B3E"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * V5 Rect Clamping
3
+ *
4
+ * Hard requirement: Every single widget rect must pass through clampRect.
5
+ * No exceptions.
6
+ */
7
+ /**
8
+ * Clamp rectangle to fit within safe bounds
9
+ *
10
+ * Rules:
11
+ * 1) Clamp x/y within bounds
12
+ * 2) Clamp w/h so x+w <= safeCols and y+h <= safeRows
13
+ * 3) Enforce w>=1, h>=1
14
+ */
15
+ export function clampRect(r, safeCols, safeRows) {
16
+ let { x, y, w, h } = r;
17
+ // Clamp x/y to non-negative
18
+ x = Math.max(0, x);
19
+ y = Math.max(0, y);
20
+ // Clamp width so x+w <= safeCols
21
+ const maxW = safeCols - x;
22
+ w = Math.min(w, maxW);
23
+ // Clamp height so y+h <= safeRows
24
+ const maxH = safeRows - y;
25
+ h = Math.min(h, maxH);
26
+ // Enforce minimums
27
+ w = Math.max(1, w);
28
+ h = Math.max(1, h);
29
+ // Final check: ensure right edge and bottom edge are within bounds
30
+ if (x + w > safeCols) {
31
+ w = safeCols - x;
32
+ w = Math.max(1, w);
33
+ }
34
+ if (y + h > safeRows) {
35
+ h = safeRows - y;
36
+ h = Math.max(1, h);
37
+ }
38
+ return { x, y, w, h };
39
+ }
40
+ //# sourceMappingURL=clampRect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clampRect.js","sourceRoot":"","sources":["../../../../src/ui/v5/layout/clampRect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,CAAO,EAAE,QAAgB,EAAE,QAAgB;IACnE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEvB,4BAA4B;IAC5B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnB,iCAAiC;IACjC,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC1B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAEtB,kCAAkC;IAClC,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC1B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAEtB,mBAAmB;IACnB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnB,mEAAmE;IACnE,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QACjB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QACjB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * V5 Layout Engine
3
+ *
4
+ * Simple + deterministic layout with normal/narrow modes.
5
+ */
6
+ import type { Rect } from './clampRect.js';
7
+ export type PanelId = 'posture' | 'resources' | 'assets' | 'operations' | 'network' | 'capabilities' | 'command';
8
+ export type Layout = {
9
+ mode: 'normal' | 'narrow';
10
+ rects: Record<PanelId, Rect>;
11
+ };
12
+ /**
13
+ * Compute layout from safe viewport dimensions
14
+ */
15
+ export declare function computeLayout(safeCols: number, safeRows: number): Layout;
16
+ //# sourceMappingURL=layoutEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutEngine.d.ts","sourceRoot":"","sources":["../../../../src/ui/v5/layout/layoutEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC;AAEjH,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;CAC9B,CAAC;AAKF;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA0BxE"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * V5 Layout Engine
3
+ *
4
+ * Simple + deterministic layout with normal/narrow modes.
5
+ */
6
+ import { clampRect } from './clampRect.js';
7
+ const CMD_HEIGHT = 3;
8
+ const MIN_CENTER_WIDTH = 40;
9
+ /**
10
+ * Compute layout from safe viewport dimensions
11
+ */
12
+ export function computeLayout(safeCols, safeRows) {
13
+ const mainH = safeRows - CMD_HEIGHT;
14
+ // Compute column widths with integer math
15
+ const leftW = Math.max(30, Math.floor(safeCols * 0.22));
16
+ const rightW = Math.max(34, Math.floor(safeCols * 0.27));
17
+ const centerW = safeCols - leftW - rightW;
18
+ // Check if we need narrow mode
19
+ if (centerW < MIN_CENTER_WIDTH) {
20
+ return computeNarrowLayout(safeCols, safeRows);
21
+ }
22
+ // Normal mode - 3 columns
23
+ const leftX = 0;
24
+ const centerX = leftW;
25
+ const rightX = leftW + centerW;
26
+ // Verify right edge
27
+ if (rightX + rightW > safeCols) {
28
+ // Adjust if needed
29
+ const adjustedRightW = safeCols - rightX;
30
+ return computeNormalLayout(safeCols, safeRows, leftW, adjustedRightW);
31
+ }
32
+ return computeNormalLayout(safeCols, safeRows, leftW, rightW);
33
+ }
34
+ /**
35
+ * Compute normal layout (3 columns)
36
+ */
37
+ function computeNormalLayout(safeCols, safeRows, leftW, rightW) {
38
+ const mainH = safeRows - CMD_HEIGHT;
39
+ const centerW = safeCols - leftW - rightW;
40
+ const leftX = 0;
41
+ const centerX = leftW;
42
+ const rightX = leftW + centerW;
43
+ // Left stack: posture, resources, assets split equally
44
+ const leftPanelH = Math.floor(mainH / 3);
45
+ const leftRemainder = mainH - (leftPanelH * 3);
46
+ // Right stack: network (50%), capabilities (remainder)
47
+ const netH = Math.floor(mainH * 0.5);
48
+ const capH = mainH - netH;
49
+ const rects = {
50
+ // Left column
51
+ posture: { x: leftX, y: 0, w: leftW, h: leftPanelH + (leftRemainder > 0 ? 1 : 0) },
52
+ resources: { x: leftX, y: leftPanelH + (leftRemainder > 0 ? 1 : 0), w: leftW, h: leftPanelH + (leftRemainder > 1 ? 1 : 0) },
53
+ assets: { x: leftX, y: (leftPanelH * 2) + Math.min(leftRemainder, 2), w: leftW, h: leftPanelH + (leftRemainder > 2 ? 1 : 0) },
54
+ // Center column
55
+ operations: { x: centerX, y: 0, w: centerW, h: mainH },
56
+ // Right column
57
+ network: { x: rightX, y: 0, w: rightW, h: netH },
58
+ capabilities: { x: rightX, y: netH, w: rightW, h: capH },
59
+ // Command line
60
+ command: { x: 0, y: mainH, w: safeCols, h: CMD_HEIGHT },
61
+ };
62
+ // Clamp all rects
63
+ const clampedRects = {};
64
+ for (const [id, rect] of Object.entries(rects)) {
65
+ clampedRects[id] = clampRect(rect, safeCols, safeRows);
66
+ }
67
+ return {
68
+ mode: 'normal',
69
+ rects: clampedRects,
70
+ };
71
+ }
72
+ /**
73
+ * Compute narrow layout (fallback for small terminals)
74
+ */
75
+ function computeNarrowLayout(safeCols, safeRows) {
76
+ const mainH = safeRows - CMD_HEIGHT;
77
+ // Narrow mode: single column, stack vertically
78
+ const panelH = Math.floor(mainH / 6);
79
+ const remainder = mainH - (panelH * 6);
80
+ const rects = {
81
+ posture: { x: 0, y: 0, w: safeCols, h: panelH + (remainder > 0 ? 1 : 0) },
82
+ resources: { x: 0, y: panelH + (remainder > 0 ? 1 : 0), w: safeCols, h: panelH + (remainder > 1 ? 1 : 0) },
83
+ assets: { x: 0, y: (panelH * 2) + Math.min(remainder, 2), w: safeCols, h: panelH + (remainder > 2 ? 1 : 0) },
84
+ operations: { x: 0, y: (panelH * 3) + Math.min(remainder, 3), w: safeCols, h: panelH + (remainder > 3 ? 1 : 0) },
85
+ network: { x: 0, y: (panelH * 4) + Math.min(remainder, 4), w: safeCols, h: panelH + (remainder > 4 ? 1 : 0) },
86
+ capabilities: { x: 0, y: (panelH * 5) + Math.min(remainder, 5), w: safeCols, h: panelH + (remainder > 5 ? 1 : 0) },
87
+ command: { x: 0, y: mainH, w: safeCols, h: CMD_HEIGHT },
88
+ };
89
+ // Clamp all rects
90
+ const clampedRects = {};
91
+ for (const [id, rect] of Object.entries(rects)) {
92
+ clampedRects[id] = clampRect(rect, safeCols, safeRows);
93
+ }
94
+ return {
95
+ mode: 'narrow',
96
+ rects: clampedRects,
97
+ };
98
+ }
99
+ //# sourceMappingURL=layoutEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutEngine.js","sourceRoot":"","sources":["../../../../src/ui/v5/layout/layoutEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * V5 Atomic Resize Controller
3
+ *
4
+ * Debounced resize handling with atomic rebuild strategy.
5
+ *
6
+ * Strategy: rebuild children on resize (remove/destroy all, recreate fresh)
7
+ * This avoids "ghost borders" and duplicated panels.
8
+ */
9
+ import type { Widgets } from 'neo-blessed';
10
+ import type { UIKernel } from '../kernel/kernel.js';
11
+ export declare class ResizeController {
12
+ private screen;
13
+ private kernel;
14
+ private timer;
15
+ private layoutVersion;
16
+ private lastCommitted;
17
+ private pending;
18
+ private burstCount;
19
+ private lastResizeTs;
20
+ private lastSource;
21
+ constructor(screen: Widgets.Screen, kernel: UIKernel);
22
+ /**
23
+ * Start listening to resize events
24
+ */
25
+ start(): void;
26
+ /**
27
+ * Stop listening to resize events
28
+ */
29
+ stop(): void;
30
+ /**
31
+ * Get current layout version
32
+ */
33
+ getLayoutVersion(): number;
34
+ /**
35
+ * Get last committed size
36
+ */
37
+ getLastCommitted(): {
38
+ cols: number;
39
+ rows: number;
40
+ };
41
+ /**
42
+ * Get burst count
43
+ */
44
+ getBurstCount(): number;
45
+ /**
46
+ * Get last resize timestamp
47
+ */
48
+ getLastResizeTs(): number;
49
+ /**
50
+ * Get last resize source
51
+ */
52
+ getLastSource(): string;
53
+ /**
54
+ * Handle resize event (debounced)
55
+ */
56
+ private onResizeEvent;
57
+ /**
58
+ * Commit resize (atomic)
59
+ */
60
+ private commitResize;
61
+ }
62
+ //# sourceMappingURL=resizeController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizeController.d.ts","sourceRoot":"","sources":["../../../../src/ui/v5/resize/resizeController.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAEpE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,aAAa,CAAwD;IAC7E,OAAO,CAAC,OAAO,CAAwD;IACvE,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,UAAU,CAAc;gBAEpB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ;IAKpD;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb;;OAEG;IACH,IAAI,IAAI,IAAI;IAeZ;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,gBAAgB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAIlD;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,YAAY;CAkCrB"}