4runr-os 2.1.12 → 2.1.13
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.
- package/dist/index.js +0 -0
- package/dist/tui_mk2/layout/applyLayout.d.ts +2 -1
- package/dist/tui_mk2/layout/applyLayout.d.ts.map +1 -1
- package/dist/tui_mk2/layout/applyLayout.js +29 -10
- package/dist/tui_mk2/layout/applyLayout.js.map +1 -1
- package/dist/tui_mk2/layout/computeLayout.d.ts +18 -8
- package/dist/tui_mk2/layout/computeLayout.d.ts.map +1 -1
- package/dist/tui_mk2/layout/computeLayout.js +206 -105
- package/dist/tui_mk2/layout/computeLayout.js.map +1 -1
- package/dist/tui_mk2/layout/invariants.d.ts +2 -2
- package/dist/tui_mk2/layout/invariants.d.ts.map +1 -1
- package/dist/tui_mk2/layout/invariants.js +12 -14
- package/dist/tui_mk2/layout/invariants.js.map +1 -1
- package/dist/tui_mk2/layout/layoutEngine.d.ts +70 -0
- package/dist/tui_mk2/layout/layoutEngine.d.ts.map +1 -0
- package/dist/tui_mk2/layout/layoutEngine.js +297 -0
- package/dist/tui_mk2/layout/layoutEngine.js.map +1 -0
- package/dist/tui_mk2/mk2App.d.ts +1 -0
- package/dist/tui_mk2/mk2App.d.ts.map +1 -1
- package/dist/tui_mk2/mk2App.js +35 -10
- package/dist/tui_mk2/mk2App.js.map +1 -1
- package/package.json +7 -8
package/dist/index.js
CHANGED
|
File without changes
|
|
@@ -11,7 +11,8 @@ import type { LayoutSpec, LayoutRect } from './computeLayout.js';
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function mkBox(screen: Widgets.Screen, rect: LayoutRect, label: string, safeW: number, safeH: number, topGuard?: number): Widgets.Box;
|
|
13
13
|
/**
|
|
14
|
-
* Apply layout - create all boxes from spec
|
|
14
|
+
* Apply layout - create all boxes from spec
|
|
15
|
+
* Handles wide (3-column), compact (2-column), and narrow (1-column) modes
|
|
15
16
|
*/
|
|
16
17
|
export declare function applyLayout(screen: Widgets.Screen, spec: LayoutSpec): Widgets.Box[];
|
|
17
18
|
//# sourceMappingURL=applyLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyLayout.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/applyLayout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGjE;;GAEG;AACH,wBAAgB,KAAK,CACnB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC,GAAG,CAkBb;AAED
|
|
1
|
+
{"version":3,"file":"applyLayout.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/applyLayout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGjE;;GAEG;AACH,wBAAgB,KAAK,CACnB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC,GAAG,CAkBb;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAgCnF"}
|
|
@@ -28,19 +28,38 @@ export function mkBox(screen, rect, label, safeW, safeH, topGuard = 0) {
|
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* Apply layout - create all boxes from spec
|
|
31
|
+
* Apply layout - create all boxes from spec
|
|
32
|
+
* Handles wide (3-column), compact (2-column), and narrow (1-column) modes
|
|
32
33
|
*/
|
|
33
34
|
export function applyLayout(screen, spec) {
|
|
34
35
|
const boxes = [];
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
if (spec.mode === 'wide') {
|
|
37
|
+
// Wide: 3 columns (left: posture/resources/assets, center: operations, right: network/capabilities)
|
|
38
|
+
boxes.push(mkBox(screen, spec.rects.posture, 'POSTURE', spec.safeW, spec.safeH, spec.topGuard));
|
|
39
|
+
boxes.push(mkBox(screen, spec.rects.resources, 'RESOURCES', spec.safeW, spec.safeH, spec.topGuard));
|
|
40
|
+
boxes.push(mkBox(screen, spec.rects.assets, 'ASSETS', spec.safeW, spec.safeH, spec.topGuard));
|
|
41
|
+
boxes.push(mkBox(screen, spec.rects.operations, 'OPERATIONS', spec.safeW, spec.safeH, spec.topGuard));
|
|
42
|
+
boxes.push(mkBox(screen, spec.rects.network, 'NETWORK', spec.safeW, spec.safeH, spec.topGuard));
|
|
43
|
+
boxes.push(mkBox(screen, spec.rects.capabilities, 'CAPABILITIES', spec.safeW, spec.safeH, spec.topGuard));
|
|
44
|
+
}
|
|
45
|
+
else if (spec.mode === 'compact') {
|
|
46
|
+
// Compact: 2 columns (left: posture/resources/assets, right: operations/network/capabilities)
|
|
47
|
+
boxes.push(mkBox(screen, spec.rects.posture, 'POSTURE', spec.safeW, spec.safeH, spec.topGuard));
|
|
48
|
+
boxes.push(mkBox(screen, spec.rects.resources, 'RESOURCES', spec.safeW, spec.safeH, spec.topGuard));
|
|
49
|
+
boxes.push(mkBox(screen, spec.rects.assets, 'ASSETS', spec.safeW, spec.safeH, spec.topGuard));
|
|
50
|
+
boxes.push(mkBox(screen, spec.rects.operations, 'OPERATIONS', spec.safeW, spec.safeH, spec.topGuard));
|
|
51
|
+
boxes.push(mkBox(screen, spec.rects.network, 'NETWORK', spec.safeW, spec.safeH, spec.topGuard));
|
|
52
|
+
boxes.push(mkBox(screen, spec.rects.capabilities, 'CAPABILITIES', spec.safeW, spec.safeH, spec.topGuard));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Narrow: 1 column (all panels stacked)
|
|
56
|
+
boxes.push(mkBox(screen, spec.rects.posture, 'POSTURE', spec.safeW, spec.safeH, spec.topGuard));
|
|
57
|
+
boxes.push(mkBox(screen, spec.rects.resources, 'RESOURCES', spec.safeW, spec.safeH, spec.topGuard));
|
|
58
|
+
boxes.push(mkBox(screen, spec.rects.assets, 'ASSETS', spec.safeW, spec.safeH, spec.topGuard));
|
|
59
|
+
boxes.push(mkBox(screen, spec.rects.operations, 'OPERATIONS', spec.safeW, spec.safeH, spec.topGuard));
|
|
60
|
+
boxes.push(mkBox(screen, spec.rects.network, 'NETWORK', spec.safeW, spec.safeH, spec.topGuard));
|
|
61
|
+
boxes.push(mkBox(screen, spec.rects.capabilities, 'CAPABILITIES', spec.safeW, spec.safeH, spec.topGuard));
|
|
62
|
+
}
|
|
44
63
|
// Note: COMMAND is created separately as a textbox (see mk2App.ts)
|
|
45
64
|
return boxes;
|
|
46
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyLayout.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/applyLayout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,OAAyB,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,KAAK,CACnB,MAAsB,EACtB,IAAgB,EAChB,KAAa,EACb,KAAa,EACb,KAAa,EACb,WAAmB,CAAC;IAEpB,sDAAsD;IACtD,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,IAAI,CAAC,CAAC;QACX,IAAI,EAAE,IAAI,CAAC,CAAC;QACZ,KAAK,EAAE,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,CAAC;QACd,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,KAAK,EAAE,IAAI,KAAK,GAAG,EAAG,gCAAgC;QACtD,IAAI,EAAE,KAAK;QACX,KAAK,EAAE;YACL,EAAE,EAAE,MAAM;YACV,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SACvB;KACK,CAAgB,CAAC;AAC3B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"applyLayout.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/applyLayout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MK2
|
|
2
|
+
* MK2 Layout Engine - Deterministic layout computation
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Fixed layout engine that ensures no overflow:
|
|
5
|
+
* - All boxes must satisfy: x + w <= safeW (so maxX = x + w - 1 <= safeW - 1)
|
|
6
|
+
* - Accounts for gutters and borders
|
|
7
|
+
* - Supports wide (3-column), compact (2-column), and narrow (1-column) layouts
|
|
6
8
|
*/
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const
|
|
9
|
+
export declare const SAFE_RIGHT_MARGIN = 2;
|
|
10
|
+
export declare const SAFE_BOTTOM_MARGIN = 1;
|
|
9
11
|
export declare const TOP_GUARD = 1;
|
|
10
|
-
export declare const
|
|
11
|
-
export declare const
|
|
12
|
+
export declare const GUTTER_X = 1;
|
|
13
|
+
export declare const GUTTER_Y = 1;
|
|
12
14
|
export interface LayoutRect {
|
|
13
15
|
x: number;
|
|
14
16
|
y: number;
|
|
15
17
|
w: number;
|
|
16
18
|
h: number;
|
|
17
19
|
}
|
|
20
|
+
export type LayoutMode = 'wide' | 'compact' | 'narrow';
|
|
18
21
|
export interface LayoutSpec {
|
|
22
|
+
mode: LayoutMode;
|
|
19
23
|
safeW: number;
|
|
20
24
|
safeH: number;
|
|
21
25
|
cols: number;
|
|
@@ -42,14 +46,20 @@ export interface LayoutSpec {
|
|
|
42
46
|
};
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
45
|
-
* Compute safe canvas dimensions
|
|
49
|
+
* Compute safe canvas dimensions
|
|
46
50
|
*/
|
|
47
51
|
export declare function getSafeCanvas(cols: number, rows: number): {
|
|
48
52
|
safeW: number;
|
|
49
53
|
safeH: number;
|
|
50
54
|
};
|
|
55
|
+
/**
|
|
56
|
+
* Validate layout - check if all rects fit within safe bounds
|
|
57
|
+
* Rule: x + w <= safeW (so maxX = x + w - 1 <= safeW - 1)
|
|
58
|
+
*/
|
|
59
|
+
export declare function validateLayout(layout: LayoutSpec): string[];
|
|
51
60
|
/**
|
|
52
61
|
* Compute layout spec from screen dimensions
|
|
62
|
+
* Minimums: 80 cols / 20 rows (absolute), 90 cols / 22 rows (narrow), 100 cols / 30 rows (compact), 160 cols / 40 rows (wide)
|
|
53
63
|
*/
|
|
54
64
|
export declare function computeLayout(cols: number, rows: number): LayoutSpec;
|
|
55
65
|
//# sourceMappingURL=computeLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeLayout.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/computeLayout.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"computeLayout.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/computeLayout.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,QAAQ,IAAI,CAAC;AAE1B,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QACL,OAAO,EAAE,UAAU,CAAC;QACpB,SAAS,EAAE,UAAU,CAAC;QACtB,MAAM,EAAE,UAAU,CAAC;QACnB,UAAU,EAAE,UAAU,CAAC;QACvB,OAAO,EAAE,UAAU,CAAC;QACpB,YAAY,EAAE,UAAU,CAAC;QACzB,OAAO,EAAE,UAAU,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAI1F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAyB3D;AA+JD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAiDpE"}
|
|
@@ -1,134 +1,235 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MK2
|
|
2
|
+
* MK2 Layout Engine - Deterministic layout computation
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Fixed layout engine that ensures no overflow:
|
|
5
|
+
* - All boxes must satisfy: x + w <= safeW (so maxX = x + w - 1 <= safeW - 1)
|
|
6
|
+
* - Accounts for gutters and borders
|
|
7
|
+
* - Supports wide (3-column), compact (2-column), and narrow (1-column) layouts
|
|
6
8
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export const
|
|
10
|
-
export const
|
|
11
|
-
export const
|
|
12
|
-
export const
|
|
13
|
-
export const PAD = 0; // keep 0 for now; padding causes drift
|
|
9
|
+
// Constants
|
|
10
|
+
export const SAFE_RIGHT_MARGIN = 2; // Reserve right edge (prevents scrollbars)
|
|
11
|
+
export const SAFE_BOTTOM_MARGIN = 1; // Reserve bottom edge
|
|
12
|
+
export const TOP_GUARD = 1; // Reserve top row for debug overlay
|
|
13
|
+
export const GUTTER_X = 1; // Horizontal gutter between columns
|
|
14
|
+
export const GUTTER_Y = 1; // Vertical gutter between rows
|
|
14
15
|
/**
|
|
15
|
-
* Compute safe canvas dimensions
|
|
16
|
+
* Compute safe canvas dimensions
|
|
16
17
|
*/
|
|
17
18
|
export function getSafeCanvas(cols, rows) {
|
|
18
|
-
const safeW = Math.max(0, cols -
|
|
19
|
-
const safeH = Math.max(0, rows - TOP_GUARD -
|
|
19
|
+
const safeW = Math.max(0, cols - SAFE_RIGHT_MARGIN);
|
|
20
|
+
const safeH = Math.max(0, rows - TOP_GUARD - SAFE_BOTTOM_MARGIN);
|
|
20
21
|
return { safeW, safeH };
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
|
-
*
|
|
24
|
+
* Validate layout - check if all rects fit within safe bounds
|
|
25
|
+
* Rule: x + w <= safeW (so maxX = x + w - 1 <= safeW - 1)
|
|
24
26
|
*/
|
|
25
|
-
export function
|
|
26
|
-
|
|
27
|
-
const { safeW, safeH } =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
export function validateLayout(layout) {
|
|
28
|
+
const errors = [];
|
|
29
|
+
const { safeW, safeH, topGuard } = layout;
|
|
30
|
+
for (const [name, rect] of Object.entries(layout.rects)) {
|
|
31
|
+
if (rect.x < 0) {
|
|
32
|
+
errors.push(`${name}: x=${rect.x} < 0`);
|
|
33
|
+
}
|
|
34
|
+
if (rect.y < topGuard) {
|
|
35
|
+
errors.push(`${name}: y=${rect.y} < topGuard=${topGuard}`);
|
|
36
|
+
}
|
|
37
|
+
if (rect.w < 1 || rect.h < 1) {
|
|
38
|
+
errors.push(`${name}: invalid size w=${rect.w} h=${rect.h}`);
|
|
39
|
+
}
|
|
40
|
+
// Check: x + w <= safeW (ensures maxX = x + w - 1 <= safeW - 1)
|
|
41
|
+
if (rect.x + rect.w > safeW) {
|
|
42
|
+
errors.push(`${name}: x+w=${rect.x + rect.w} > safeW=${safeW} (overflow=${rect.x + rect.w - safeW})`);
|
|
43
|
+
}
|
|
44
|
+
const maxY = topGuard + safeH;
|
|
45
|
+
if (rect.y + rect.h > maxY) {
|
|
46
|
+
errors.push(`${name}: y+h=${rect.y + rect.h} > maxY=${maxY} (overflow=${rect.y + rect.h - maxY})`);
|
|
47
|
+
}
|
|
33
48
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
49
|
+
return errors;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compute wide 3-column layout
|
|
53
|
+
* Guarantees: leftX + leftW + GUTTER_X + centerW + GUTTER_X + rightW <= safeW
|
|
54
|
+
*/
|
|
55
|
+
function computeWideLayout(cols, rows, safeW, safeH) {
|
|
56
|
+
const LEFT_W = 30;
|
|
57
|
+
const RIGHT_W = 30;
|
|
58
|
+
// Calculate center width ensuring total <= safeW - 1 (off-by-one safety)
|
|
59
|
+
// Total width = LEFT_W + GUTTER_X + centerW + GUTTER_X + RIGHT_W
|
|
60
|
+
// We need: total <= safeW - 1
|
|
61
|
+
// So: centerW <= safeW - LEFT_W - RIGHT_W - GUTTER_X * 2 - 1
|
|
62
|
+
const centerW = safeW - LEFT_W - RIGHT_W - (GUTTER_X * 2) - 1;
|
|
39
63
|
if (centerW < 40) {
|
|
40
|
-
|
|
41
|
-
const shrinkLeft = Math.min(deficit, leftW - 22);
|
|
42
|
-
leftW -= shrinkLeft;
|
|
43
|
-
const shrinkRight = Math.min(deficit - shrinkLeft, rightW - 22);
|
|
44
|
-
rightW -= shrinkRight;
|
|
45
|
-
centerW = safeW - leftW - rightW - (GUTTER * 2);
|
|
64
|
+
throw new Error('Center too narrow for wide layout');
|
|
46
65
|
}
|
|
47
|
-
// X positions
|
|
48
66
|
const leftX = 0;
|
|
49
|
-
const centerX =
|
|
50
|
-
const rightX =
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
// Left stack: posture=9, resources=12, assets=remaining
|
|
67
|
+
const centerX = LEFT_W + GUTTER_X;
|
|
68
|
+
const rightX = LEFT_W + GUTTER_X + centerW + GUTTER_X;
|
|
69
|
+
// Verify: rightX + RIGHT_W = LEFT_W + GUTTER_X + centerW + GUTTER_X + RIGHT_W
|
|
70
|
+
// = LEFT_W + RIGHT_W + centerW + GUTTER_X * 2
|
|
71
|
+
// = safeW - 1 <= safeW ✓
|
|
72
|
+
const cmdH = 3;
|
|
73
|
+
const usableH = safeH - cmdH - GUTTER_Y;
|
|
57
74
|
const postureH = 9;
|
|
58
75
|
const resourcesH = 12;
|
|
59
|
-
const assetsH = Math.max(6, usableH - postureH - resourcesH - (
|
|
60
|
-
// Right stack: network=12, capabilities=remaining
|
|
76
|
+
const assetsH = Math.max(6, usableH - postureH - resourcesH - (GUTTER_Y * 2));
|
|
61
77
|
const networkH = 12;
|
|
62
|
-
const capabilitiesH = Math.max(6, usableH - networkH -
|
|
63
|
-
// Center: operations takes full usable height
|
|
78
|
+
const capabilitiesH = Math.max(6, usableH - networkH - GUTTER_Y);
|
|
64
79
|
const operationsH = Math.max(6, usableH);
|
|
65
|
-
|
|
66
|
-
const leftY = TOP_GUARD; // Start after debug overlay line
|
|
80
|
+
const leftY = TOP_GUARD;
|
|
67
81
|
const centerY = TOP_GUARD;
|
|
68
82
|
const rightY = TOP_GUARD;
|
|
69
83
|
const cmdY = TOP_GUARD + safeH - cmdH;
|
|
70
|
-
// Build rects
|
|
71
84
|
const rects = {
|
|
72
|
-
posture: {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
},
|
|
85
|
+
posture: { x: leftX, y: leftY, w: LEFT_W, h: postureH },
|
|
86
|
+
resources: { x: leftX, y: leftY + postureH + GUTTER_Y, w: LEFT_W, h: resourcesH },
|
|
87
|
+
assets: { x: leftX, y: leftY + postureH + GUTTER_Y + resourcesH + GUTTER_Y, w: LEFT_W, h: assetsH },
|
|
88
|
+
operations: { x: centerX, y: centerY, w: centerW, h: operationsH },
|
|
89
|
+
network: { x: rightX, y: rightY, w: RIGHT_W, h: networkH },
|
|
90
|
+
capabilities: { x: rightX, y: rightY + networkH + GUTTER_Y, w: RIGHT_W, h: capabilitiesH },
|
|
91
|
+
command: { x: 0, y: cmdY, w: safeW - 1, h: cmdH },
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
mode: 'wide',
|
|
95
|
+
safeW, safeH, cols, rows,
|
|
96
|
+
leftW: LEFT_W, centerW, rightW: RIGHT_W,
|
|
97
|
+
leftX, centerX, rightX,
|
|
98
|
+
cmdH, usableH,
|
|
99
|
+
topGuard: TOP_GUARD,
|
|
100
|
+
rightGuard: SAFE_RIGHT_MARGIN,
|
|
101
|
+
bottomGuard: SAFE_BOTTOM_MARGIN,
|
|
102
|
+
rects,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Compute compact 2-column layout
|
|
107
|
+
*/
|
|
108
|
+
function computeCompactLayout(cols, rows, safeW, safeH) {
|
|
109
|
+
const LEFT_W = Math.floor(safeW * 0.35);
|
|
110
|
+
const RIGHT_W = safeW - LEFT_W - GUTTER_X - 1; // -1 for off-by-one safety
|
|
111
|
+
const leftX = 0;
|
|
112
|
+
const rightX = LEFT_W + GUTTER_X;
|
|
113
|
+
const cmdH = 3;
|
|
114
|
+
const usableH = safeH - cmdH - GUTTER_Y;
|
|
115
|
+
const leftY = TOP_GUARD;
|
|
116
|
+
const rightY = TOP_GUARD;
|
|
117
|
+
const cmdY = TOP_GUARD + safeH - cmdH;
|
|
118
|
+
const leftStackH = Math.floor((usableH - GUTTER_Y * 2) / 3);
|
|
119
|
+
const postureH = leftStackH;
|
|
120
|
+
const resourcesH = leftStackH;
|
|
121
|
+
const assetsH = usableH - postureH - resourcesH - (GUTTER_Y * 2);
|
|
122
|
+
const operationsH = Math.floor(usableH * 0.6);
|
|
123
|
+
const networkH = Math.floor((usableH - operationsH - GUTTER_Y) / 2);
|
|
124
|
+
const capabilitiesH = usableH - operationsH - networkH - GUTTER_Y;
|
|
125
|
+
const rects = {
|
|
126
|
+
posture: { x: leftX, y: leftY, w: LEFT_W, h: postureH },
|
|
127
|
+
resources: { x: leftX, y: leftY + postureH + GUTTER_Y, w: LEFT_W, h: resourcesH },
|
|
128
|
+
assets: { x: leftX, y: leftY + postureH + GUTTER_Y + resourcesH + GUTTER_Y, w: LEFT_W, h: assetsH },
|
|
129
|
+
operations: { x: rightX, y: rightY, w: RIGHT_W, h: operationsH },
|
|
130
|
+
network: { x: rightX, y: rightY + operationsH + GUTTER_Y, w: RIGHT_W, h: networkH },
|
|
131
|
+
capabilities: { x: rightX, y: rightY + operationsH + GUTTER_Y + networkH + GUTTER_Y, w: RIGHT_W, h: capabilitiesH },
|
|
132
|
+
command: { x: 0, y: cmdY, w: safeW - 1, h: cmdH },
|
|
133
|
+
};
|
|
134
|
+
return {
|
|
135
|
+
mode: 'compact',
|
|
136
|
+
safeW, safeH, cols, rows,
|
|
137
|
+
leftW: LEFT_W, centerW: 0, rightW: RIGHT_W,
|
|
138
|
+
leftX, centerX: 0, rightX,
|
|
139
|
+
cmdH, usableH,
|
|
140
|
+
topGuard: TOP_GUARD,
|
|
141
|
+
rightGuard: SAFE_RIGHT_MARGIN,
|
|
142
|
+
bottomGuard: SAFE_BOTTOM_MARGIN,
|
|
143
|
+
rects,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Compute narrow 1-column layout (for very small terminals)
|
|
148
|
+
*/
|
|
149
|
+
function computeNarrowLayout(cols, rows, safeW, safeH) {
|
|
150
|
+
const cmdH = 3;
|
|
151
|
+
const usableH = safeH - cmdH - GUTTER_Y;
|
|
152
|
+
const cmdY = TOP_GUARD + safeH - cmdH;
|
|
153
|
+
// Single column, full width
|
|
154
|
+
const colW = safeW - 1; // -1 for off-by-one safety
|
|
155
|
+
const colX = 0;
|
|
156
|
+
// Stack all panels vertically
|
|
157
|
+
// Operations gets more space (1.5x), others share remaining space
|
|
158
|
+
const operationsH = Math.floor(usableH * 0.3); // 30% for operations
|
|
159
|
+
const remainingH = usableH - operationsH - GUTTER_Y * 5;
|
|
160
|
+
const smallPanelH = Math.floor(remainingH / 5); // 5 other panels
|
|
161
|
+
let currentY = TOP_GUARD;
|
|
162
|
+
const rects = {
|
|
163
|
+
posture: { x: colX, y: currentY, w: colW, h: smallPanelH },
|
|
164
|
+
resources: { x: colX, y: currentY + smallPanelH + GUTTER_Y, w: colW, h: smallPanelH },
|
|
165
|
+
assets: { x: colX, y: currentY + (smallPanelH + GUTTER_Y) * 2, w: colW, h: smallPanelH },
|
|
166
|
+
operations: { x: colX, y: currentY + (smallPanelH + GUTTER_Y) * 3, w: colW, h: operationsH },
|
|
167
|
+
network: { x: colX, y: currentY + (smallPanelH + GUTTER_Y) * 3 + operationsH + GUTTER_Y, w: colW, h: smallPanelH },
|
|
168
|
+
capabilities: { x: colX, y: currentY + (smallPanelH + GUTTER_Y) * 3 + operationsH + GUTTER_Y + smallPanelH + GUTTER_Y, w: colW, h: smallPanelH },
|
|
169
|
+
command: { x: 0, y: cmdY, w: safeW - 1, h: cmdH },
|
|
114
170
|
};
|
|
115
171
|
return {
|
|
116
|
-
|
|
117
|
-
safeH,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
centerW,
|
|
122
|
-
rightW,
|
|
123
|
-
leftX,
|
|
124
|
-
centerX,
|
|
125
|
-
rightX,
|
|
126
|
-
cmdH,
|
|
127
|
-
usableH,
|
|
172
|
+
mode: 'narrow',
|
|
173
|
+
safeW, safeH, cols, rows,
|
|
174
|
+
leftW: colW, centerW: 0, rightW: 0,
|
|
175
|
+
leftX: colX, centerX: 0, rightX: 0,
|
|
176
|
+
cmdH, usableH,
|
|
128
177
|
topGuard: TOP_GUARD,
|
|
129
|
-
rightGuard:
|
|
130
|
-
bottomGuard:
|
|
178
|
+
rightGuard: SAFE_RIGHT_MARGIN,
|
|
179
|
+
bottomGuard: SAFE_BOTTOM_MARGIN,
|
|
131
180
|
rects,
|
|
132
181
|
};
|
|
133
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Compute layout spec from screen dimensions
|
|
185
|
+
* Minimums: 80 cols / 20 rows (absolute), 90 cols / 22 rows (narrow), 100 cols / 30 rows (compact), 160 cols / 40 rows (wide)
|
|
186
|
+
*/
|
|
187
|
+
export function computeLayout(cols, rows) {
|
|
188
|
+
const { safeW, safeH } = getSafeCanvas(cols, rows);
|
|
189
|
+
// Absolute minimum: too small for anything
|
|
190
|
+
if (cols < 80 || rows < 20) {
|
|
191
|
+
throw new Error(`Terminal too small: ${cols}x${rows} (minimum 80x20)`);
|
|
192
|
+
}
|
|
193
|
+
// Try wide layout (160+ cols, 40+ rows)
|
|
194
|
+
if (cols >= 160 && rows >= 40) {
|
|
195
|
+
try {
|
|
196
|
+
const layout = computeWideLayout(cols, rows, safeW, safeH);
|
|
197
|
+
const errors = validateLayout(layout);
|
|
198
|
+
if (errors.length === 0) {
|
|
199
|
+
return layout;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Fall through to compact
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Try compact layout (100+ cols, 30+ rows)
|
|
207
|
+
if (cols >= 100 && rows >= 30) {
|
|
208
|
+
try {
|
|
209
|
+
const layout = computeCompactLayout(cols, rows, safeW, safeH);
|
|
210
|
+
const errors = validateLayout(layout);
|
|
211
|
+
if (errors.length === 0) {
|
|
212
|
+
return layout;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Fall through to narrow
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Try narrow layout (90+ cols, 22+ rows)
|
|
220
|
+
if (cols >= 90 && rows >= 22) {
|
|
221
|
+
try {
|
|
222
|
+
const layout = computeNarrowLayout(cols, rows, safeW, safeH);
|
|
223
|
+
const errors = validateLayout(layout);
|
|
224
|
+
if (errors.length === 0) {
|
|
225
|
+
return layout;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// Terminal is too small
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Too small for any layout
|
|
233
|
+
throw new Error(`Terminal too small: ${cols}x${rows} (minimum 90x22 for narrow layout)`);
|
|
234
|
+
}
|
|
134
235
|
//# sourceMappingURL=computeLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeLayout.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/computeLayout.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"computeLayout.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/computeLayout.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ export interface Box {
|
|
|
10
10
|
h: number;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Assert that a box fits within safe canvas bounds
|
|
14
|
-
*
|
|
13
|
+
* Assert that a box fits within safe canvas bounds
|
|
14
|
+
* Rule: x + w <= safeW (ensures maxX = x + w - 1 <= safeW - 1)
|
|
15
15
|
*/
|
|
16
16
|
export declare function assertBoxFits(box: Box, safeW: number, safeH: number, topGuard?: number): void;
|
|
17
17
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/invariants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/invariants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,IAAI,CA4BhG;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE"}
|
|
@@ -4,27 +4,25 @@
|
|
|
4
4
|
* Crash early if layout math is wrong - don't hack around it.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
* Assert that a box fits within safe canvas bounds
|
|
8
|
-
*
|
|
7
|
+
* Assert that a box fits within safe canvas bounds
|
|
8
|
+
* Rule: x + w <= safeW (ensures maxX = x + w - 1 <= safeW - 1)
|
|
9
9
|
*/
|
|
10
10
|
export function assertBoxFits(box, safeW, safeH, topGuard = 0) {
|
|
11
11
|
if (box.x < 0 || box.y < topGuard) {
|
|
12
12
|
throw new Error(`Box negative position: x=${box.x} y=${box.y} (must be x>=0, y>=${topGuard})`);
|
|
13
13
|
}
|
|
14
|
-
if (box.w
|
|
15
|
-
throw new Error(`Box
|
|
14
|
+
if (box.w < 1 || box.h < 1) {
|
|
15
|
+
throw new Error(`Box invalid size: w=${box.w} h=${box.h} (must be >= 1)`);
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (maxX >= safeW) {
|
|
22
|
-
throw new Error(`Box touches/overflows X: maxX=${maxX} >= safeW=${safeW} ` +
|
|
23
|
-
`(box: x=${box.x} w=${box.w} overflow=${maxX - safeW})`);
|
|
17
|
+
// Check: x + w <= safeW (ensures maxX = x + w - 1 <= safeW - 1)
|
|
18
|
+
if (box.x + box.w > safeW) {
|
|
19
|
+
throw new Error(`Box overflows X: x+w=${box.x + box.w} > safeW=${safeW} ` +
|
|
20
|
+
`(box: x=${box.x} w=${box.w} overflow=${box.x + box.w - safeW})`);
|
|
24
21
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
const safeMaxY = topGuard + safeH;
|
|
23
|
+
if (box.y + box.h > safeMaxY) {
|
|
24
|
+
throw new Error(`Box overflows Y: y+h=${box.y + box.h} > safeMaxY=${safeMaxY} ` +
|
|
25
|
+
`(box: y=${box.y} h=${box.h} topGuard=${topGuard} overflow=${box.y + box.h - safeMaxY})`);
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invariants.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/invariants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAQ,EAAE,KAAa,EAAE,KAAa,EAAE,WAAmB,CAAC;IACxF,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,sBAAsB,QAAQ,GAAG,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"invariants.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/invariants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAQ,EAAE,KAAa,EAAE,KAAa,EAAE,WAAmB,CAAC;IACxF,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,sBAAsB,QAAQ,GAAG,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uBAAuB,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,iBAAiB,CACzD,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY,KAAK,GAAG;YACzD,WAAW,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,QAAQ,GAAG;YAC/D,WAAW,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,QAAQ,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,CACzF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MK2 Layout Engine - Single Source of Truth for Layout Computation
|
|
3
|
+
*
|
|
4
|
+
* This engine properly accounts for:
|
|
5
|
+
* - Borders (consume 2 cols/rows)
|
|
6
|
+
* - Safe margins (browser terminals need extra space)
|
|
7
|
+
* - Gutters between panels
|
|
8
|
+
* - Compact layout fallback for small terminals
|
|
9
|
+
*/
|
|
10
|
+
export interface LayoutRect {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
w: number;
|
|
14
|
+
h: number;
|
|
15
|
+
}
|
|
16
|
+
export type LayoutMode = 'wide' | 'compact';
|
|
17
|
+
export interface LayoutSpec {
|
|
18
|
+
mode: LayoutMode;
|
|
19
|
+
safeW: number;
|
|
20
|
+
safeH: number;
|
|
21
|
+
cols: number;
|
|
22
|
+
rows: number;
|
|
23
|
+
rects: {
|
|
24
|
+
posture: LayoutRect;
|
|
25
|
+
resources: LayoutRect;
|
|
26
|
+
assets: LayoutRect;
|
|
27
|
+
operations: LayoutRect;
|
|
28
|
+
network: LayoutRect;
|
|
29
|
+
capabilities: LayoutRect;
|
|
30
|
+
command: LayoutRect;
|
|
31
|
+
};
|
|
32
|
+
debug: {
|
|
33
|
+
leftW: number;
|
|
34
|
+
centerW: number;
|
|
35
|
+
rightW: number;
|
|
36
|
+
leftX: number;
|
|
37
|
+
centerX: number;
|
|
38
|
+
rightX: number;
|
|
39
|
+
rightEdge: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export declare const SAFE_RIGHT_MARGIN = 2;
|
|
43
|
+
export declare const SAFE_BOTTOM_MARGIN = 1;
|
|
44
|
+
export declare const TOP_GUARD = 1;
|
|
45
|
+
export declare const GUTTER_X = 1;
|
|
46
|
+
export declare const GUTTER_Y = 1;
|
|
47
|
+
export declare const BORDER_PAD_X = 2;
|
|
48
|
+
export declare const BORDER_PAD_Y = 2;
|
|
49
|
+
export declare const MIN_CENTER_W = 60;
|
|
50
|
+
export declare const MIN_TERMINAL_COLS = 120;
|
|
51
|
+
export declare const MIN_TERMINAL_ROWS = 30;
|
|
52
|
+
/**
|
|
53
|
+
* Compute safe drawing area (accounts for margins)
|
|
54
|
+
*/
|
|
55
|
+
export declare function getSafeCanvas(cols: number, rows: number): {
|
|
56
|
+
safeW: number;
|
|
57
|
+
safeH: number;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Validate that all rects fit within safe bounds
|
|
61
|
+
*/
|
|
62
|
+
export declare function validateLayout(spec: LayoutSpec): {
|
|
63
|
+
valid: boolean;
|
|
64
|
+
errors: string[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Compute layout - main entry point
|
|
68
|
+
*/
|
|
69
|
+
export declare function computeLayout(cols: number, rows: number): LayoutSpec;
|
|
70
|
+
//# sourceMappingURL=layoutEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutEngine.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/layoutEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QACL,OAAO,EAAE,UAAU,CAAC;QACpB,SAAS,EAAE,UAAU,CAAC;QACtB,MAAM,EAAE,UAAU,CAAC;QACnB,UAAU,EAAE,UAAU,CAAC;QACvB,OAAO,EAAE,UAAU,CAAC;QACpB,YAAY,EAAE,UAAU,CAAC;QACzB,OAAO,EAAE,UAAU,CAAC;KACrB,CAAC;IAEF,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAGD,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,YAAY,IAAI,CAAC;AAG9B,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAI1F;AAwOD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAyBrF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAsCpE"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MK2 Layout Engine - Single Source of Truth for Layout Computation
|
|
3
|
+
*
|
|
4
|
+
* This engine properly accounts for:
|
|
5
|
+
* - Borders (consume 2 cols/rows)
|
|
6
|
+
* - Safe margins (browser terminals need extra space)
|
|
7
|
+
* - Gutters between panels
|
|
8
|
+
* - Compact layout fallback for small terminals
|
|
9
|
+
*/
|
|
10
|
+
// Constants - DO NOT CHANGE without testing
|
|
11
|
+
export const SAFE_RIGHT_MARGIN = 2; // Browser terminals need 2 cols
|
|
12
|
+
export const SAFE_BOTTOM_MARGIN = 1; // Reserve bottom row
|
|
13
|
+
export const TOP_GUARD = 1; // Reserve top row for debug overlay
|
|
14
|
+
export const GUTTER_X = 1; // Horizontal spacing between columns
|
|
15
|
+
export const GUTTER_Y = 1; // Vertical spacing between panels
|
|
16
|
+
export const BORDER_PAD_X = 2; // Left + right border consume 2 cols
|
|
17
|
+
export const BORDER_PAD_Y = 2; // Top + bottom border consume 2 rows
|
|
18
|
+
// Minimum sizes
|
|
19
|
+
export const MIN_CENTER_W = 60; // Minimum center column width
|
|
20
|
+
export const MIN_TERMINAL_COLS = 120;
|
|
21
|
+
export const MIN_TERMINAL_ROWS = 30; // Reduced from 35 for graceful degradation
|
|
22
|
+
/**
|
|
23
|
+
* Compute safe drawing area (accounts for margins)
|
|
24
|
+
*/
|
|
25
|
+
export function getSafeCanvas(cols, rows) {
|
|
26
|
+
const safeW = Math.max(0, cols - SAFE_RIGHT_MARGIN);
|
|
27
|
+
const safeH = Math.max(0, rows - TOP_GUARD - SAFE_BOTTOM_MARGIN);
|
|
28
|
+
return { safeW, safeH };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Clamp a value between min and max
|
|
32
|
+
*/
|
|
33
|
+
function clamp(value, min, max) {
|
|
34
|
+
return Math.max(min, Math.min(max, value));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Compute wide layout (3 columns)
|
|
38
|
+
*/
|
|
39
|
+
function computeWideLayout(cols, rows, safeW, safeH) {
|
|
40
|
+
// Column widths (percentage-based with clamps)
|
|
41
|
+
let leftW = clamp(Math.floor(safeW * 0.18), 26, 34);
|
|
42
|
+
let rightW = clamp(Math.floor(safeW * 0.20), 26, 34);
|
|
43
|
+
let centerW = safeW - leftW - rightW - (GUTTER_X * 2);
|
|
44
|
+
// If center too small, shrink side columns
|
|
45
|
+
if (centerW < MIN_CENTER_W) {
|
|
46
|
+
const deficit = MIN_CENTER_W - centerW;
|
|
47
|
+
const shrinkLeft = Math.min(deficit, leftW - 22);
|
|
48
|
+
leftW -= shrinkLeft;
|
|
49
|
+
const shrinkRight = Math.min(deficit - shrinkLeft, rightW - 22);
|
|
50
|
+
rightW -= shrinkRight;
|
|
51
|
+
centerW = safeW - leftW - rightW - (GUTTER_X * 2);
|
|
52
|
+
}
|
|
53
|
+
// Validate center is still big enough
|
|
54
|
+
if (centerW < MIN_CENTER_W) {
|
|
55
|
+
return null; // Fall back to compact
|
|
56
|
+
}
|
|
57
|
+
// X positions
|
|
58
|
+
const leftX = 0;
|
|
59
|
+
const centerX = leftW + GUTTER_X;
|
|
60
|
+
const rightX = leftW + GUTTER_X + centerW + GUTTER_X;
|
|
61
|
+
// Validate right edge doesn't exceed safeW
|
|
62
|
+
const rightEdge = rightX + rightW;
|
|
63
|
+
if (rightEdge > safeW) {
|
|
64
|
+
// Shrink center to make room
|
|
65
|
+
const overflow = rightEdge - safeW;
|
|
66
|
+
centerW = Math.max(MIN_CENTER_W, centerW - overflow);
|
|
67
|
+
const newRightX = leftW + GUTTER_X + centerW + GUTTER_X;
|
|
68
|
+
const newRightEdge = newRightX + rightW;
|
|
69
|
+
if (newRightEdge > safeW) {
|
|
70
|
+
// Still doesn't fit - shrink right column
|
|
71
|
+
rightW = safeW - newRightX;
|
|
72
|
+
if (rightW < 22) {
|
|
73
|
+
return null; // Fall back to compact
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Command bar height
|
|
78
|
+
const cmdH = 3;
|
|
79
|
+
const usableH = safeH - cmdH - GUTTER_Y;
|
|
80
|
+
// Left stack heights
|
|
81
|
+
const postureH = clamp(Math.floor(usableH * 0.22), 8, 12);
|
|
82
|
+
const resourcesH = clamp(Math.floor(usableH * 0.22), 8, 12);
|
|
83
|
+
const assetsH = Math.max(6, usableH - postureH - resourcesH - (GUTTER_Y * 2));
|
|
84
|
+
// Right stack heights
|
|
85
|
+
const networkH = clamp(Math.floor(usableH * 0.45), 10, 14);
|
|
86
|
+
const capabilitiesH = Math.max(6, usableH - networkH - GUTTER_Y);
|
|
87
|
+
// Center height
|
|
88
|
+
const operationsH = Math.max(6, usableH);
|
|
89
|
+
// Y positions (account for TOP_GUARD)
|
|
90
|
+
const leftY = TOP_GUARD;
|
|
91
|
+
const centerY = TOP_GUARD;
|
|
92
|
+
const rightY = TOP_GUARD;
|
|
93
|
+
const cmdY = TOP_GUARD + safeH - cmdH;
|
|
94
|
+
// Build rects
|
|
95
|
+
const rects = {
|
|
96
|
+
posture: {
|
|
97
|
+
x: leftX,
|
|
98
|
+
y: leftY,
|
|
99
|
+
w: leftW,
|
|
100
|
+
h: postureH,
|
|
101
|
+
},
|
|
102
|
+
resources: {
|
|
103
|
+
x: leftX,
|
|
104
|
+
y: leftY + postureH + GUTTER_Y,
|
|
105
|
+
w: leftW,
|
|
106
|
+
h: resourcesH,
|
|
107
|
+
},
|
|
108
|
+
assets: {
|
|
109
|
+
x: leftX,
|
|
110
|
+
y: leftY + postureH + GUTTER_Y + resourcesH + GUTTER_Y,
|
|
111
|
+
w: leftW,
|
|
112
|
+
h: assetsH,
|
|
113
|
+
},
|
|
114
|
+
operations: {
|
|
115
|
+
x: centerX,
|
|
116
|
+
y: centerY,
|
|
117
|
+
w: centerW,
|
|
118
|
+
h: operationsH,
|
|
119
|
+
},
|
|
120
|
+
network: {
|
|
121
|
+
x: rightX,
|
|
122
|
+
y: rightY,
|
|
123
|
+
w: rightW,
|
|
124
|
+
h: networkH,
|
|
125
|
+
},
|
|
126
|
+
capabilities: {
|
|
127
|
+
x: rightX,
|
|
128
|
+
y: rightY + networkH + GUTTER_Y,
|
|
129
|
+
w: rightW,
|
|
130
|
+
h: capabilitiesH,
|
|
131
|
+
},
|
|
132
|
+
command: {
|
|
133
|
+
x: 0,
|
|
134
|
+
y: cmdY,
|
|
135
|
+
w: safeW - 1, // Shrink by 1 for breathing room
|
|
136
|
+
h: cmdH,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
mode: 'wide',
|
|
141
|
+
safeW,
|
|
142
|
+
safeH,
|
|
143
|
+
cols,
|
|
144
|
+
rows,
|
|
145
|
+
rects,
|
|
146
|
+
debug: {
|
|
147
|
+
leftW,
|
|
148
|
+
centerW,
|
|
149
|
+
rightW,
|
|
150
|
+
leftX,
|
|
151
|
+
centerX,
|
|
152
|
+
rightX,
|
|
153
|
+
rightEdge: rightX + rightW,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Compute compact layout (vertical stack for small terminals)
|
|
159
|
+
*/
|
|
160
|
+
function computeCompactLayout(cols, rows, safeW, safeH) {
|
|
161
|
+
// Compact: Stack everything vertically
|
|
162
|
+
// Top: OPERATIONS (biggest)
|
|
163
|
+
// Middle: NETWORK + CAPABILITIES (side by side)
|
|
164
|
+
// Bottom: POSTURE + RESOURCES + ASSETS (stacked)
|
|
165
|
+
const cmdH = 3;
|
|
166
|
+
const usableH = safeH - cmdH - GUTTER_Y;
|
|
167
|
+
// Operations takes 50% of usable height
|
|
168
|
+
const operationsH = Math.floor(usableH * 0.5);
|
|
169
|
+
// Middle section: NETWORK and CAPABILITIES side by side
|
|
170
|
+
const middleH = Math.floor(usableH * 0.3);
|
|
171
|
+
const middleW = Math.floor((safeW - GUTTER_X) / 2);
|
|
172
|
+
// Bottom section: POSTURE, RESOURCES, ASSETS stacked
|
|
173
|
+
const bottomH = usableH - operationsH - middleH - (GUTTER_Y * 2);
|
|
174
|
+
const bottomPanelH = Math.floor(bottomH / 3);
|
|
175
|
+
const y = TOP_GUARD;
|
|
176
|
+
const cmdY = TOP_GUARD + safeH - cmdH;
|
|
177
|
+
const rects = {
|
|
178
|
+
operations: {
|
|
179
|
+
x: 0,
|
|
180
|
+
y: y,
|
|
181
|
+
w: safeW - 1,
|
|
182
|
+
h: operationsH,
|
|
183
|
+
},
|
|
184
|
+
network: {
|
|
185
|
+
x: 0,
|
|
186
|
+
y: y + operationsH + GUTTER_Y,
|
|
187
|
+
w: middleW,
|
|
188
|
+
h: middleH,
|
|
189
|
+
},
|
|
190
|
+
capabilities: {
|
|
191
|
+
x: middleW + GUTTER_X,
|
|
192
|
+
y: y + operationsH + GUTTER_Y,
|
|
193
|
+
w: safeW - middleW - GUTTER_X - 1,
|
|
194
|
+
h: middleH,
|
|
195
|
+
},
|
|
196
|
+
posture: {
|
|
197
|
+
x: 0,
|
|
198
|
+
y: y + operationsH + GUTTER_Y + middleH + GUTTER_Y,
|
|
199
|
+
w: safeW - 1,
|
|
200
|
+
h: bottomPanelH,
|
|
201
|
+
},
|
|
202
|
+
resources: {
|
|
203
|
+
x: 0,
|
|
204
|
+
y: y + operationsH + GUTTER_Y + middleH + GUTTER_Y + bottomPanelH + GUTTER_Y,
|
|
205
|
+
w: safeW - 1,
|
|
206
|
+
h: bottomPanelH,
|
|
207
|
+
},
|
|
208
|
+
assets: {
|
|
209
|
+
x: 0,
|
|
210
|
+
y: y + operationsH + GUTTER_Y + middleH + GUTTER_Y + (bottomPanelH * 2) + (GUTTER_Y * 2),
|
|
211
|
+
w: safeW - 1,
|
|
212
|
+
h: Math.max(6, bottomH - (bottomPanelH * 2) - (GUTTER_Y * 2)),
|
|
213
|
+
},
|
|
214
|
+
command: {
|
|
215
|
+
x: 0,
|
|
216
|
+
y: cmdY,
|
|
217
|
+
w: safeW - 1,
|
|
218
|
+
h: cmdH,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
return {
|
|
222
|
+
mode: 'compact',
|
|
223
|
+
safeW,
|
|
224
|
+
safeH,
|
|
225
|
+
cols,
|
|
226
|
+
rows,
|
|
227
|
+
rects,
|
|
228
|
+
debug: {
|
|
229
|
+
leftW: 0,
|
|
230
|
+
centerW: safeW - 1,
|
|
231
|
+
rightW: 0,
|
|
232
|
+
leftX: 0,
|
|
233
|
+
centerX: 0,
|
|
234
|
+
rightX: 0,
|
|
235
|
+
rightEdge: safeW - 1,
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Validate that all rects fit within safe bounds
|
|
241
|
+
*/
|
|
242
|
+
export function validateLayout(spec) {
|
|
243
|
+
const errors = [];
|
|
244
|
+
for (const [name, rect] of Object.entries(spec.rects)) {
|
|
245
|
+
const maxX = rect.x + rect.w;
|
|
246
|
+
const maxY = rect.y + rect.h;
|
|
247
|
+
if (rect.x < 0) {
|
|
248
|
+
errors.push(`${name}: x=${rect.x} < 0`);
|
|
249
|
+
}
|
|
250
|
+
if (rect.y < TOP_GUARD) {
|
|
251
|
+
errors.push(`${name}: y=${rect.y} < TOP_GUARD=${TOP_GUARD}`);
|
|
252
|
+
}
|
|
253
|
+
if (maxX > spec.safeW) {
|
|
254
|
+
errors.push(`${name}: maxX=${maxX} > safeW=${spec.safeW} (x=${rect.x} w=${rect.w})`);
|
|
255
|
+
}
|
|
256
|
+
if (maxY > spec.safeH + TOP_GUARD) {
|
|
257
|
+
errors.push(`${name}: maxY=${maxY} > safeMaxY=${spec.safeH + TOP_GUARD} (y=${rect.y} h=${rect.h})`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
valid: errors.length === 0,
|
|
262
|
+
errors,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Compute layout - main entry point
|
|
267
|
+
*/
|
|
268
|
+
export function computeLayout(cols, rows) {
|
|
269
|
+
// Minimum terminal size check (but don't hard fail - use compact)
|
|
270
|
+
if (cols < MIN_TERMINAL_COLS || rows < MIN_TERMINAL_ROWS) {
|
|
271
|
+
// Try compact layout even for very small terminals
|
|
272
|
+
const { safeW, safeH } = getSafeCanvas(cols, rows);
|
|
273
|
+
if (safeW < 40 || safeH < 10) {
|
|
274
|
+
throw new Error(`Terminal too small: ${cols}x${rows} (minimum ${MIN_TERMINAL_COLS}x${MIN_TERMINAL_ROWS})`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const { safeW, safeH } = getSafeCanvas(cols, rows);
|
|
278
|
+
// Try wide layout first
|
|
279
|
+
const wideLayout = computeWideLayout(cols, rows, safeW, safeH);
|
|
280
|
+
if (wideLayout) {
|
|
281
|
+
// Validate wide layout
|
|
282
|
+
const validation = validateLayout(wideLayout);
|
|
283
|
+
if (validation.valid) {
|
|
284
|
+
return wideLayout;
|
|
285
|
+
}
|
|
286
|
+
// If validation fails, fall back to compact
|
|
287
|
+
}
|
|
288
|
+
// Fall back to compact layout
|
|
289
|
+
const compactLayout = computeCompactLayout(cols, rows, safeW, safeH);
|
|
290
|
+
const validation = validateLayout(compactLayout);
|
|
291
|
+
if (!validation.valid) {
|
|
292
|
+
// Even compact doesn't fit - this is a real error
|
|
293
|
+
throw new Error(`Layout validation failed: ${validation.errors.join('; ')}`);
|
|
294
|
+
}
|
|
295
|
+
return compactLayout;
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=layoutEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutEngine.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/layoutEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/tui_mk2/mk2App.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mk2App.d.ts","sourceRoot":"","sources":["../../src/tui_mk2/mk2App.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAA4B;;IAMjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACH,OAAO,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"mk2App.d.ts","sourceRoot":"","sources":["../../src/tui_mk2/mk2App.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAA4B;;IAMjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACH,OAAO,CAAC,MAAM;IA4Hd;;OAEG;IACH,OAAO,CAAC,SAAS;IAgBjB;;OAEG;YACW,YAAY;IAM1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAsDlB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA4CtB;;OAEG;IACH,IAAI,IAAI,IAAI;CAGb;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB9C"}
|
package/dist/tui_mk2/mk2App.js
CHANGED
|
@@ -127,11 +127,22 @@ export class MK2App {
|
|
|
127
127
|
}, 30);
|
|
128
128
|
}
|
|
129
129
|
catch (error) {
|
|
130
|
-
// Terminal too small - show error
|
|
130
|
+
// Terminal too small - show error overlay (don't crash)
|
|
131
131
|
const { safeW, safeH } = getSafeCanvas(cols, rows);
|
|
132
|
-
const
|
|
132
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
133
|
+
const errorBox = this.createErrorBox(screen, errorMsg, cols, rows, safeW, safeH);
|
|
133
134
|
screen.append(errorBox);
|
|
134
135
|
screen.render();
|
|
136
|
+
// Keep app running so resizing fixes it
|
|
137
|
+
// Set up resize handler to retry layout
|
|
138
|
+
screen.on('resize', () => {
|
|
139
|
+
const newCols = screen.width || 80;
|
|
140
|
+
const newRows = screen.height || 24;
|
|
141
|
+
// Retry render on resize
|
|
142
|
+
setTimeout(() => {
|
|
143
|
+
this.render();
|
|
144
|
+
}, 100);
|
|
145
|
+
});
|
|
135
146
|
}
|
|
136
147
|
}
|
|
137
148
|
/**
|
|
@@ -216,24 +227,38 @@ export class MK2App {
|
|
|
216
227
|
}
|
|
217
228
|
/**
|
|
218
229
|
* Create error box for terminal too small
|
|
230
|
+
* Shows required minimum and detected size, keeps app running
|
|
219
231
|
*/
|
|
220
|
-
createErrorBox(screen, message, safeW, safeH) {
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
const
|
|
232
|
+
createErrorBox(screen, message, cols, rows, safeW, safeH) {
|
|
233
|
+
// Extract minimum requirements from error message if possible
|
|
234
|
+
const minMatch = message.match(/minimum (\d+)x(\d+)/);
|
|
235
|
+
const minCols = minMatch ? parseInt(minMatch[1], 10) : 80;
|
|
236
|
+
const minRows = minMatch ? parseInt(minMatch[2], 10) : 25;
|
|
237
|
+
const errorW = Math.min(70, Math.max(50, cols - 10));
|
|
238
|
+
const errorH = 8;
|
|
239
|
+
const errorX = Math.max(0, Math.floor((cols - errorW) / 2));
|
|
240
|
+
const errorY = Math.max(0, Math.floor((rows - errorH) / 2));
|
|
241
|
+
const content = [
|
|
242
|
+
' TERMINAL TOO SMALL ',
|
|
243
|
+
'',
|
|
244
|
+
`Detected: ${cols} x ${rows}`,
|
|
245
|
+
`Required: ${minCols} x ${minRows}`,
|
|
246
|
+
'',
|
|
247
|
+
'Resize terminal to continue',
|
|
248
|
+
'App will auto-reload on resize',
|
|
249
|
+
].join('\n');
|
|
225
250
|
return blessed.box({
|
|
226
251
|
parent: screen,
|
|
227
252
|
top: errorY,
|
|
228
253
|
left: errorX,
|
|
229
254
|
width: errorW,
|
|
230
255
|
height: errorH,
|
|
231
|
-
content
|
|
256
|
+
content,
|
|
232
257
|
border: { type: 'line' },
|
|
233
258
|
tags: false,
|
|
234
259
|
style: {
|
|
235
|
-
fg: '
|
|
236
|
-
border: { fg: '
|
|
260
|
+
fg: 'yellow',
|
|
261
|
+
border: { fg: 'yellow' },
|
|
237
262
|
},
|
|
238
263
|
});
|
|
239
264
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mk2App.js","sourceRoot":"","sources":["../../src/tui_mk2/mk2App.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mk2App.js","sourceRoot":"","sources":["../../src/tui_mk2/mk2App.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "4runr-os",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "4Runr AI Agent OS - Interactive terminal for managing AI agents",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,12 +9,6 @@
|
|
|
9
9
|
"4runr-os": "dist/index.js",
|
|
10
10
|
"4r": "dist/index.js"
|
|
11
11
|
},
|
|
12
|
-
"scripts": {
|
|
13
|
-
"build": "tsc",
|
|
14
|
-
"dev": "tsc --watch",
|
|
15
|
-
"prepublishOnly": "npm run build",
|
|
16
|
-
"tui:mk1": "cross-env TUI_MK1=1 TUI_DEBUG=1 TUI_ALLOW_STDOUT=1 TERM=xterm-256color node dist/index.js"
|
|
17
|
-
},
|
|
18
12
|
"keywords": [
|
|
19
13
|
"4runr",
|
|
20
14
|
"ai",
|
|
@@ -44,5 +38,10 @@
|
|
|
44
38
|
},
|
|
45
39
|
"publishConfig": {
|
|
46
40
|
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc",
|
|
44
|
+
"dev": "tsc --watch",
|
|
45
|
+
"tui:mk1": "cross-env TUI_MK1=1 TUI_DEBUG=1 TUI_ALLOW_STDOUT=1 TERM=xterm-256color node dist/index.js"
|
|
47
46
|
}
|
|
48
|
-
}
|
|
47
|
+
}
|