4runr-os 2.1.7 → 2.1.9

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.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MK2 Phase 1B: Debug Overlay
3
+ *
4
+ * Top line only, never exceeds safeW
5
+ * Shows layout info for verification
6
+ */
7
+ import { type Widgets } from 'neo-blessed';
8
+ import type { LayoutSpec } from '../layout/computeLayout.js';
9
+ /**
10
+ * Create debug overlay line (top of screen)
11
+ * Truncated to safeW to prevent overflow
12
+ */
13
+ export declare function createDebugOverlay(screen: Widgets.Screen, spec: LayoutSpec): Widgets.Box;
14
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/debug/overlay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,GAAG,CA0Bb"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * MK2 Phase 1B: Debug Overlay
3
+ *
4
+ * Top line only, never exceeds safeW
5
+ * Shows layout info for verification
6
+ */
7
+ import blessed from 'neo-blessed';
8
+ import { safeText } from '../../tui_mk1/ui/safeText.js';
9
+ /**
10
+ * Create debug overlay line (top of screen)
11
+ * Truncated to safeW to prevent overflow
12
+ */
13
+ export function createDebugOverlay(screen, spec) {
14
+ // Build debug text
15
+ const debugText = [
16
+ `MK2`,
17
+ `canvas=${spec.cols}x${spec.rows}`,
18
+ `safe=${spec.safeW}x${spec.safeH}`,
19
+ `left=${spec.leftW} center=${spec.centerW} right=${spec.rightW}`,
20
+ `rightEdge=${spec.rightX + spec.rightW}`,
21
+ ].join(' ');
22
+ // Truncate to safeW (never exceed)
23
+ const safeTextContent = safeText(debugText, spec.safeW);
24
+ return blessed.box({
25
+ parent: screen,
26
+ top: 0,
27
+ left: 0,
28
+ width: spec.safeW,
29
+ height: 1,
30
+ content: safeTextContent,
31
+ tags: false,
32
+ style: {
33
+ fg: 'yellow',
34
+ bg: 'black',
35
+ },
36
+ });
37
+ }
38
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/tui_mk2/debug/overlay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,OAAyB,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAsB,EACtB,IAAgB;IAEhB,mBAAmB;IACnB,MAAM,SAAS,GAAG;QAChB,KAAK;QACL,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;QAClC,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;QAClC,QAAQ,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,MAAM,EAAE;QAChE,aAAa,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;KACzC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,mCAAmC;IACnC,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE;YACL,EAAE,EAAE,QAAQ;YACZ,EAAE,EAAE,OAAO;SACZ;KACK,CAAgB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * MK2 Phase 1B: Box Renderer - Single Source of Truth
3
+ *
4
+ * Creates blessed boxes from layout spec
5
+ * No widget manager, no visibility hacks
6
+ */
7
+ import { type Widgets } from 'neo-blessed';
8
+ import type { LayoutSpec, LayoutRect } from './computeLayout.js';
9
+ /**
10
+ * Create a blessed box with hard invariant checks
11
+ */
12
+ export declare function mkBox(screen: Widgets.Screen, rect: LayoutRect, label: string, safeW: number, safeH: number): Widgets.Box;
13
+ /**
14
+ * Apply layout - create all boxes from spec
15
+ */
16
+ export declare function applyLayout(screen: Widgets.Screen, spec: LayoutSpec): Widgets.Box[];
17
+ //# sourceMappingURL=applyLayout.d.ts.map
@@ -0,0 +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,GACZ,OAAO,CAAC,GAAG,CAkBb;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAmBnF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * MK2 Phase 1B: Box Renderer - Single Source of Truth
3
+ *
4
+ * Creates blessed boxes from layout spec
5
+ * No widget manager, no visibility hacks
6
+ */
7
+ import blessed from 'neo-blessed';
8
+ import { assertBoxFits } from './invariants.js';
9
+ /**
10
+ * Create a blessed box with hard invariant checks
11
+ */
12
+ export function mkBox(screen, rect, label, safeW, safeH) {
13
+ // Hard invariant check - crash early if math is wrong
14
+ assertBoxFits(rect, safeW, safeH);
15
+ return blessed.box({
16
+ parent: screen,
17
+ top: rect.y,
18
+ left: rect.x,
19
+ width: rect.w,
20
+ height: rect.h,
21
+ border: { type: 'line' },
22
+ label: ` ${label} `,
23
+ tags: false,
24
+ style: {
25
+ fg: 'cyan',
26
+ border: { fg: 'cyan' },
27
+ },
28
+ });
29
+ }
30
+ /**
31
+ * Apply layout - create all boxes from spec
32
+ */
33
+ export function applyLayout(screen, spec) {
34
+ const boxes = [];
35
+ // Left column
36
+ boxes.push(mkBox(screen, spec.rects.posture, 'POSTURE', spec.safeW, spec.safeH));
37
+ boxes.push(mkBox(screen, spec.rects.resources, 'RESOURCES', spec.safeW, spec.safeH));
38
+ boxes.push(mkBox(screen, spec.rects.assets, 'ASSETS', spec.safeW, spec.safeH));
39
+ // Center column
40
+ boxes.push(mkBox(screen, spec.rects.operations, 'OPERATIONS', spec.safeW, spec.safeH));
41
+ // Right column
42
+ boxes.push(mkBox(screen, spec.rects.network, 'NETWORK', spec.safeW, spec.safeH));
43
+ boxes.push(mkBox(screen, spec.rects.capabilities, 'CAPABILITIES', spec.safeW, spec.safeH));
44
+ // Bottom command bar
45
+ boxes.push(mkBox(screen, spec.rects.command, 'COMMAND', spec.safeW, spec.safeH));
46
+ return boxes;
47
+ }
48
+ //# sourceMappingURL=applyLayout.js.map
@@ -0,0 +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;IAEb,sDAAsD;IACtD,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAElC,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;QACnB,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;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAsB,EAAE,IAAgB;IAClE,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/E,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvF,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3F,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * MK2 Phase 1B: Layout Spec - Hard Numbers + Clamps
3
+ *
4
+ * All layout computed from safe canvas + invariants
5
+ * No percentages until stable - use clamped fixed numbers
6
+ */
7
+ export declare const RIGHT_GUARD = 2;
8
+ export declare const BOTTOM_GUARD = 2;
9
+ export declare const GUTTER = 1;
10
+ export declare const PAD = 0;
11
+ export interface LayoutRect {
12
+ x: number;
13
+ y: number;
14
+ w: number;
15
+ h: number;
16
+ }
17
+ export interface LayoutSpec {
18
+ safeW: number;
19
+ safeH: number;
20
+ cols: number;
21
+ rows: number;
22
+ leftW: number;
23
+ centerW: number;
24
+ rightW: number;
25
+ leftX: number;
26
+ centerX: number;
27
+ rightX: number;
28
+ cmdH: number;
29
+ usableH: number;
30
+ rects: {
31
+ posture: LayoutRect;
32
+ resources: LayoutRect;
33
+ assets: LayoutRect;
34
+ operations: LayoutRect;
35
+ network: LayoutRect;
36
+ capabilities: LayoutRect;
37
+ command: LayoutRect;
38
+ };
39
+ }
40
+ /**
41
+ * Compute safe canvas dimensions
42
+ */
43
+ export declare function getSafeCanvas(cols: number, rows: number): {
44
+ safeW: number;
45
+ safeH: number;
46
+ };
47
+ /**
48
+ * Compute layout spec from screen dimensions
49
+ */
50
+ export declare function computeLayout(cols: number, rows: number): LayoutSpec;
51
+ //# sourceMappingURL=computeLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeLayout.d.ts","sourceRoot":"","sources":["../../../src/tui_mk2/layout/computeLayout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,GAAG,IAAI,CAAC;AAErB,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,WAAW,UAAU;IACzB,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,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;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAwHpE"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * MK2 Phase 1B: Layout Spec - Hard Numbers + Clamps
3
+ *
4
+ * All layout computed from safe canvas + invariants
5
+ * No percentages until stable - use clamped fixed numbers
6
+ */
7
+ import { clamp } from './invariants.js';
8
+ // Constants (do not change unless proven)
9
+ export const RIGHT_GUARD = 2; // reserve last col + 1 extra
10
+ export const BOTTOM_GUARD = 2; // reserve last row + 1 extra
11
+ export const GUTTER = 1;
12
+ export const PAD = 0; // keep 0 for now; padding causes drift
13
+ /**
14
+ * Compute safe canvas dimensions
15
+ */
16
+ export function getSafeCanvas(cols, rows) {
17
+ const safeW = Math.max(0, cols - RIGHT_GUARD);
18
+ const safeH = Math.max(0, rows - BOTTOM_GUARD);
19
+ return { safeW, safeH };
20
+ }
21
+ /**
22
+ * Compute layout spec from screen dimensions
23
+ */
24
+ export function computeLayout(cols, rows) {
25
+ // Safe canvas
26
+ const { safeW, safeH } = getSafeCanvas(cols, rows);
27
+ // Minimum terminal size check
28
+ const MIN_COLS = 120;
29
+ const MIN_ROWS = 35;
30
+ if (cols < MIN_COLS || rows < MIN_ROWS) {
31
+ throw new Error(`Terminal too small: ${cols}x${rows} (minimum ${MIN_COLS}x${MIN_ROWS})`);
32
+ }
33
+ // Column widths (clamped)
34
+ let leftW = clamp(Math.floor(safeW * 0.18), 26, 34);
35
+ let rightW = clamp(Math.floor(safeW * 0.20), 26, 36);
36
+ let centerW = safeW - leftW - rightW - (GUTTER * 2);
37
+ // If center too small, shrink side columns
38
+ if (centerW < 40) {
39
+ const deficit = 40 - centerW;
40
+ const shrinkLeft = Math.min(deficit, leftW - 22);
41
+ leftW -= shrinkLeft;
42
+ const shrinkRight = Math.min(deficit - shrinkLeft, rightW - 22);
43
+ rightW -= shrinkRight;
44
+ centerW = safeW - leftW - rightW - (GUTTER * 2);
45
+ }
46
+ // X positions
47
+ const leftX = 0;
48
+ const centerX = leftW + GUTTER;
49
+ const rightX = leftW + GUTTER + centerW + GUTTER;
50
+ // Bottom command bar height
51
+ const cmdH = 3; // 1 border top + 1 input row + 1 bottom spacing
52
+ // Usable height (above command bar)
53
+ const usableH = safeH - cmdH - GUTTER; // leave gutter above command
54
+ // Vertical layout heights
55
+ // Left stack: posture=9, resources=12, assets=remaining
56
+ const postureH = 9;
57
+ const resourcesH = 12;
58
+ const assetsH = Math.max(6, usableH - postureH - resourcesH - (GUTTER * 2));
59
+ // Right stack: network=12, capabilities=remaining
60
+ const networkH = 12;
61
+ const capabilitiesH = Math.max(6, usableH - networkH - GUTTER);
62
+ // Center: operations takes full usable height
63
+ const operationsH = Math.max(6, usableH);
64
+ // Y positions
65
+ const leftY = 1; // Start after debug overlay line
66
+ const centerY = 1;
67
+ const rightY = 1;
68
+ const cmdY = safeH - cmdH;
69
+ // Build rects
70
+ const rects = {
71
+ posture: {
72
+ x: leftX,
73
+ y: leftY,
74
+ w: leftW,
75
+ h: postureH,
76
+ },
77
+ resources: {
78
+ x: leftX,
79
+ y: leftY + postureH + GUTTER,
80
+ w: leftW,
81
+ h: resourcesH,
82
+ },
83
+ assets: {
84
+ x: leftX,
85
+ y: leftY + postureH + GUTTER + resourcesH + GUTTER,
86
+ w: leftW,
87
+ h: assetsH,
88
+ },
89
+ operations: {
90
+ x: centerX,
91
+ y: centerY,
92
+ w: centerW,
93
+ h: operationsH,
94
+ },
95
+ network: {
96
+ x: rightX,
97
+ y: rightY,
98
+ w: rightW,
99
+ h: networkH,
100
+ },
101
+ capabilities: {
102
+ x: rightX,
103
+ y: rightY + networkH + GUTTER,
104
+ w: rightW,
105
+ h: capabilitiesH,
106
+ },
107
+ command: {
108
+ x: 0,
109
+ y: cmdY,
110
+ w: safeW,
111
+ h: cmdH,
112
+ },
113
+ };
114
+ return {
115
+ safeW,
116
+ safeH,
117
+ cols,
118
+ rows,
119
+ leftW,
120
+ centerW,
121
+ rightW,
122
+ leftX,
123
+ centerX,
124
+ rightX,
125
+ cmdH,
126
+ usableH,
127
+ rects,
128
+ };
129
+ }
130
+ //# sourceMappingURL=computeLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeLayout.js","sourceRoot":"","sources":["../../../src/tui_mk2/layout/computeLayout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * MK2 Phase 1B: Hard Invariant Checks
3
+ *
4
+ * Crash early if layout math is wrong - don't hack around it.
5
+ */
6
+ export interface Box {
7
+ x: number;
8
+ y: number;
9
+ w: number;
10
+ h: number;
11
+ }
12
+ /**
13
+ * Assert that a box fits within safe canvas bounds
14
+ * Throws error if box exceeds bounds - this helps catch math errors early
15
+ */
16
+ export declare function assertBoxFits(box: Box, safeW: number, safeH: number): void;
17
+ /**
18
+ * Clamp a value between min and max
19
+ */
20
+ export declare function clamp(value: number, min: number, max: number): number;
21
+ //# sourceMappingURL=invariants.d.ts.map
@@ -0,0 +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,GAAG,IAAI,CA6B1E;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * MK2 Phase 1B: Hard Invariant Checks
3
+ *
4
+ * Crash early if layout math is wrong - don't hack around it.
5
+ */
6
+ /**
7
+ * Assert that a box fits within safe canvas bounds
8
+ * Throws error if box exceeds bounds - this helps catch math errors early
9
+ */
10
+ export function assertBoxFits(box, safeW, safeH) {
11
+ if (box.x < 0 || box.y < 0) {
12
+ throw new Error(`Box negative position: x=${box.x} y=${box.y} (must be >= 0)`);
13
+ }
14
+ if (box.w <= 0 || box.h <= 0) {
15
+ throw new Error(`Box non-positive size: w=${box.w} h=${box.h} (must be > 0)`);
16
+ }
17
+ const maxX = box.x + box.w;
18
+ const maxY = box.y + box.h;
19
+ if (maxX > safeW) {
20
+ throw new Error(`Box overflow X: maxX=${maxX} > safeW=${safeW} ` +
21
+ `(box: x=${box.x} w=${box.w} overflow=${maxX - safeW})`);
22
+ }
23
+ if (maxY > safeH) {
24
+ throw new Error(`Box overflow Y: maxY=${maxY} > safeH=${safeH} ` +
25
+ `(box: y=${box.y} h=${box.h} overflow=${maxY - safeH})`);
26
+ }
27
+ }
28
+ /**
29
+ * Clamp a value between min and max
30
+ */
31
+ export function clamp(value, min, max) {
32
+ return Math.max(min, Math.min(max, value));
33
+ }
34
+ //# sourceMappingURL=invariants.js.map
@@ -0,0 +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;IAClE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAC9D,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAE3B,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,YAAY,KAAK,GAAG;YAChD,WAAW,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,IAAI,GAAG,KAAK,GAAG,CACxD,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,YAAY,KAAK,GAAG;YAChD,WAAW,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,IAAI,GAAG,KAAK,GAAG,CACxD,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"}
@@ -1,26 +1,36 @@
1
1
  /**
2
2
  * MK2 App - Main application entry point
3
3
  *
4
- * MK2 Phase 1: Frame Lock
5
- * - Placeholder boxes only
6
- * - Layout engine + resize stability
7
- * - No scrollbars
4
+ * MK2 Phase 1B: Frame Lock + Placeholder Boxes
5
+ * - 6 placeholder sections + bottom command bar
6
+ * - Hard invariants, no scrollbars
7
+ * - Stable across resize
8
8
  */
9
9
  export declare class MK2App {
10
10
  private kernel;
11
+ private boxes;
12
+ private debugOverlay;
11
13
  constructor();
12
14
  /**
13
15
  * Start MK2 App
14
16
  */
15
17
  start(): Promise<void>;
16
18
  /**
17
- * Render placeholder boxes (Step 3)
19
+ * Render layout - Phase 1B: Frame Lock + Placeholder Boxes
18
20
  */
19
21
  private render;
20
22
  /**
21
- * Handle resize (Step 7)
23
+ * Handle resize - Phase 1B: Hard rebuild
22
24
  */
23
25
  private handleResize;
26
+ /**
27
+ * Destroy all children (kill old boxes on resize)
28
+ */
29
+ private destroyAll;
30
+ /**
31
+ * Create error box for terminal too small
32
+ */
33
+ private createErrorBox;
24
34
  /**
25
35
  * Stop app
26
36
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mk2App.d.ts","sourceRoot":"","sources":["../../src/tui_mk2/mk2App.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAY;;IAM1B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B;;OAEG;IACH,OAAO,CAAC,MAAM;IAsEd;;OAEG;YACW,YAAY;IAK1B;;OAEG;IACH,IAAI,IAAI,IAAI;CAGb;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB9C"}
1
+ {"version":3,"file":"mk2App.d.ts","sourceRoot":"","sources":["../../src/tui_mk2/mk2App.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAA4B;;IAMhD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACH,OAAO,CAAC,MAAM;IAiCd;;OAEG;YACW,YAAY;IAK1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAyClB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,IAAI,IAAI,IAAI;CAGb;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB9C"}
@@ -1,15 +1,19 @@
1
1
  /**
2
2
  * MK2 App - Main application entry point
3
3
  *
4
- * MK2 Phase 1: Frame Lock
5
- * - Placeholder boxes only
6
- * - Layout engine + resize stability
7
- * - No scrollbars
4
+ * MK2 Phase 1B: Frame Lock + Placeholder Boxes
5
+ * - 6 placeholder sections + bottom command bar
6
+ * - Hard invariants, no scrollbars
7
+ * - Stable across resize
8
8
  */
9
9
  import { MK2Kernel } from './kernel.js';
10
- import blessed from 'neo-blessed';
10
+ import { computeLayout, getSafeCanvas } from './layout/computeLayout.js';
11
+ import { applyLayout } from './layout/applyLayout.js';
12
+ import { createDebugOverlay } from './debug/overlay.js';
11
13
  export class MK2App {
12
14
  kernel;
15
+ boxes = [];
16
+ debugOverlay = null;
13
17
  constructor() {
14
18
  this.kernel = new MK2Kernel();
15
19
  }
@@ -18,87 +22,117 @@ export class MK2App {
18
22
  */
19
23
  async start() {
20
24
  await this.kernel.start(() => {
21
- // Initial render - will be implemented in Step 3
22
25
  this.render();
23
26
  }, {
24
27
  onRebuild: async (cols, rows) => {
25
- // Resize handler - will be implemented in Step 7
26
28
  await this.handleResize(cols, rows);
27
29
  },
28
30
  });
29
31
  }
30
32
  /**
31
- * Render placeholder boxes (Step 3)
33
+ * Render layout - Phase 1B: Frame Lock + Placeholder Boxes
32
34
  */
33
35
  render() {
34
36
  const screen = this.kernel.getScreen();
35
37
  if (!screen) {
36
38
  return;
37
39
  }
38
- // Clear any existing children
39
- const children = screen.children || [];
40
- children.forEach((child) => {
40
+ // Kill old children - hard rebuild
41
+ this.destroyAll();
42
+ const cols = screen.width || 80;
43
+ const rows = screen.height || 24;
44
+ try {
45
+ // Compute layout
46
+ const spec = computeLayout(cols, rows);
47
+ // Create debug overlay (top line)
48
+ this.debugOverlay = createDebugOverlay(screen, spec);
49
+ // Apply layout - create all boxes
50
+ this.boxes = applyLayout(screen, spec);
51
+ // Render
52
+ screen.render();
53
+ }
54
+ catch (error) {
55
+ // Terminal too small - show error box
56
+ const { safeW, safeH } = getSafeCanvas(cols, rows);
57
+ const errorBox = this.createErrorBox(screen, error instanceof Error ? error.message : String(error), safeW, safeH);
58
+ screen.append(errorBox);
59
+ screen.render();
60
+ }
61
+ }
62
+ /**
63
+ * Handle resize - Phase 1B: Hard rebuild
64
+ */
65
+ async handleResize(cols, rows) {
66
+ // Hard rebuild - destroy all, recompute, re-render
67
+ this.render();
68
+ }
69
+ /**
70
+ * Destroy all children (kill old boxes on resize)
71
+ */
72
+ destroyAll() {
73
+ // Destroy debug overlay
74
+ if (this.debugOverlay) {
41
75
  try {
42
- child.detach();
76
+ if (typeof this.debugOverlay.destroy === 'function') {
77
+ this.debugOverlay.destroy();
78
+ }
79
+ }
80
+ catch {
81
+ // Ignore
82
+ }
83
+ this.debugOverlay = null;
84
+ }
85
+ // Destroy all boxes
86
+ this.boxes.forEach((box) => {
87
+ try {
88
+ if (typeof box.destroy === 'function') {
89
+ box.destroy();
90
+ }
43
91
  }
44
92
  catch {
45
93
  // Ignore
46
94
  }
47
95
  });
48
- // Create a simple placeholder box with watermark
49
- const cols = screen.width || 80;
50
- const rows = screen.height || 24;
51
- // Watermark text - centered and visible
52
- const watermark = 'MK2 - Phase 1 Frame Lock';
53
- const watermarkLine = '═'.repeat(Math.min(watermark.length + 4, cols - 4));
54
- const centeredWatermark = watermark.padStart(Math.floor((cols + watermark.length) / 2), ' ').substring(0, cols);
55
- const content = [
56
- '',
57
- centeredWatermark,
58
- watermarkLine.substring(0, cols),
59
- '',
60
- 'Placeholder boxes will be rendered here',
61
- '',
62
- 'Press Ctrl+C to exit',
63
- '',
64
- `Terminal: ${cols}x${rows}`,
65
- ].join('\n');
66
- const placeholder = blessed.box({
67
- top: 0,
68
- left: 0,
69
- width: '100%',
70
- height: '100%',
71
- content: content,
72
- style: {
73
- fg: 'cyan',
74
- bg: 'black',
75
- },
76
- tags: true,
77
- });
78
- // Add a visible watermark box in top-right corner
79
- const watermarkBox = blessed.box({
80
- top: 0,
81
- right: 0,
82
- width: watermark.length + 4,
83
- height: 3,
84
- content: `┌${'─'.repeat(watermark.length + 2)}┐\n│ ${watermark} │\n└${'─'.repeat(watermark.length + 2)}┘`,
85
- style: {
86
- fg: 'yellow',
87
- bg: 'black',
88
- bold: true,
89
- },
90
- tags: true,
91
- });
92
- screen.append(placeholder);
93
- screen.append(watermarkBox);
94
- // Don't call screen.render() here - kernel handles it
96
+ this.boxes = [];
97
+ // Also clear screen children (safety)
98
+ const screen = this.kernel.getScreen();
99
+ if (screen) {
100
+ const children = screen.children || [];
101
+ children.forEach((child) => {
102
+ try {
103
+ if (typeof child.destroy === 'function') {
104
+ child.destroy();
105
+ }
106
+ }
107
+ catch {
108
+ // Ignore
109
+ }
110
+ });
111
+ }
95
112
  }
96
113
  /**
97
- * Handle resize (Step 7)
114
+ * Create error box for terminal too small
98
115
  */
99
- async handleResize(cols, rows) {
100
- // Placeholder - will be implemented in Step 7
101
- this.render();
116
+ createErrorBox(screen, message, safeW, safeH) {
117
+ const blessed = require('neo-blessed');
118
+ const errorW = Math.min(60, safeW - 4);
119
+ const errorH = 5;
120
+ const errorX = Math.floor((safeW - errorW) / 2);
121
+ const errorY = Math.floor((safeH - errorH) / 2);
122
+ return blessed.box({
123
+ parent: screen,
124
+ top: errorY,
125
+ left: errorX,
126
+ width: errorW,
127
+ height: errorH,
128
+ content: message,
129
+ border: { type: 'line' },
130
+ tags: false,
131
+ style: {
132
+ fg: 'red',
133
+ border: { fg: 'red' },
134
+ },
135
+ });
102
136
  }
103
137
  /**
104
138
  * Stop app
@@ -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.7",
3
+ "version": "2.1.9",
4
4
  "type": "module",
5
5
  "description": "4Runr AI Agent OS - Interactive terminal for managing AI agents",
6
6
  "main": "dist/index.js",