4runr-os 2.1.1 → 2.1.2

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 (44) hide show
  1. package/dist/tui_mk1/core/eventBus.d.ts +28 -0
  2. package/dist/tui_mk1/core/eventBus.d.ts.map +1 -0
  3. package/dist/tui_mk1/core/eventBus.js +52 -0
  4. package/dist/tui_mk1/core/eventBus.js.map +1 -0
  5. package/dist/tui_mk1/core/feedStore.d.ts +31 -0
  6. package/dist/tui_mk1/core/feedStore.d.ts.map +1 -0
  7. package/dist/tui_mk1/core/feedStore.js +51 -0
  8. package/dist/tui_mk1/core/feedStore.js.map +1 -0
  9. package/dist/tui_mk1/kernel.d.ts.map +1 -1
  10. package/dist/tui_mk1/kernel.js +2 -0
  11. package/dist/tui_mk1/kernel.js.map +1 -1
  12. package/dist/tui_mk1/layout/layoutEngine.d.ts +28 -0
  13. package/dist/tui_mk1/layout/layoutEngine.d.ts.map +1 -0
  14. package/dist/tui_mk1/layout/layoutEngine.js +258 -0
  15. package/dist/tui_mk1/layout/layoutEngine.js.map +1 -0
  16. package/dist/tui_mk1/mk1App.d.ts +18 -11
  17. package/dist/tui_mk1/mk1App.d.ts.map +1 -1
  18. package/dist/tui_mk1/mk1App.js +165 -133
  19. package/dist/tui_mk1/mk1App.js.map +1 -1
  20. package/dist/tui_mk1/ui/debugGutter.d.ts +7 -0
  21. package/dist/tui_mk1/ui/debugGutter.d.ts.map +1 -0
  22. package/dist/tui_mk1/ui/debugGutter.js +60 -0
  23. package/dist/tui_mk1/ui/debugGutter.js.map +1 -0
  24. package/dist/tui_mk1/ui/panels/createSection.d.ts +18 -0
  25. package/dist/tui_mk1/ui/panels/createSection.d.ts.map +1 -0
  26. package/dist/tui_mk1/ui/panels/createSection.js +42 -0
  27. package/dist/tui_mk1/ui/panels/createSection.js.map +1 -0
  28. package/dist/tui_mk1/ui/panels.d.ts +23 -0
  29. package/dist/tui_mk1/ui/panels.d.ts.map +1 -0
  30. package/dist/tui_mk1/ui/panels.js +108 -0
  31. package/dist/tui_mk1/ui/panels.js.map +1 -0
  32. package/dist/tui_mk1/ui/render/sectionRenderer.d.ts +21 -0
  33. package/dist/tui_mk1/ui/render/sectionRenderer.d.ts.map +1 -0
  34. package/dist/tui_mk1/ui/render/sectionRenderer.js +32 -0
  35. package/dist/tui_mk1/ui/render/sectionRenderer.js.map +1 -0
  36. package/dist/tui_mk1/ui/widgetManager.d.ts +58 -0
  37. package/dist/tui_mk1/ui/widgetManager.d.ts.map +1 -0
  38. package/dist/tui_mk1/ui/widgetManager.js +197 -0
  39. package/dist/tui_mk1/ui/widgetManager.js.map +1 -0
  40. package/dist/tui_mk1/viewport/safeViewport.d.ts +19 -0
  41. package/dist/tui_mk1/viewport/safeViewport.d.ts.map +1 -0
  42. package/dist/tui_mk1/viewport/safeViewport.js +39 -0
  43. package/dist/tui_mk1/viewport/safeViewport.js.map +1 -0
  44. package/package.json +2 -2
@@ -0,0 +1,28 @@
1
+ /**
2
+ * MK1 Event Bus - Truth Bus (pub/sub for operations feed)
3
+ */
4
+ type EventHandler = (event: FeedEvent) => void;
5
+ export interface FeedEvent {
6
+ timestamp: number;
7
+ tag: string;
8
+ message: string;
9
+ }
10
+ declare class EventBus {
11
+ private handlers;
12
+ private allHandlers;
13
+ /**
14
+ * Subscribe to specific tag
15
+ */
16
+ subscribe(tag: string, handler: EventHandler): () => void;
17
+ /**
18
+ * Subscribe to all events
19
+ */
20
+ subscribeAll(handler: EventHandler): () => void;
21
+ /**
22
+ * Emit event
23
+ */
24
+ emit(tag: string, message: string): void;
25
+ }
26
+ export declare const eventBus: EventBus;
27
+ export {};
28
+ //# sourceMappingURL=eventBus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/core/eventBus.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAE/C,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,cAAM,QAAQ;IACZ,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,WAAW,CAAsB;IAEzC;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAkBzD;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAW/C;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAczC;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
@@ -0,0 +1,52 @@
1
+ class EventBus {
2
+ handlers = new Map();
3
+ allHandlers = [];
4
+ /**
5
+ * Subscribe to specific tag
6
+ */
7
+ subscribe(tag, handler) {
8
+ if (!this.handlers.has(tag)) {
9
+ this.handlers.set(tag, []);
10
+ }
11
+ this.handlers.get(tag).push(handler);
12
+ // Return unsubscribe function
13
+ return () => {
14
+ const handlers = this.handlers.get(tag);
15
+ if (handlers) {
16
+ const index = handlers.indexOf(handler);
17
+ if (index > -1) {
18
+ handlers.splice(index, 1);
19
+ }
20
+ }
21
+ };
22
+ }
23
+ /**
24
+ * Subscribe to all events
25
+ */
26
+ subscribeAll(handler) {
27
+ this.allHandlers.push(handler);
28
+ return () => {
29
+ const index = this.allHandlers.indexOf(handler);
30
+ if (index > -1) {
31
+ this.allHandlers.splice(index, 1);
32
+ }
33
+ };
34
+ }
35
+ /**
36
+ * Emit event
37
+ */
38
+ emit(tag, message) {
39
+ const event = {
40
+ timestamp: Date.now(),
41
+ tag,
42
+ message,
43
+ };
44
+ // Notify tag-specific handlers
45
+ const tagHandlers = this.handlers.get(tag) || [];
46
+ tagHandlers.forEach((handler) => handler(event));
47
+ // Notify all handlers
48
+ this.allHandlers.forEach((handler) => handler(event));
49
+ }
50
+ }
51
+ export const eventBus = new EventBus();
52
+ //# sourceMappingURL=eventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventBus.js","sourceRoot":"","sources":["../../../src/tui_mk1/core/eventBus.ts"],"names":[],"mappings":"AAWA,MAAM,QAAQ;IACJ,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAClD,WAAW,GAAmB,EAAE,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,GAAW,EAAE,OAAqB;QAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtC,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;oBACf,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAqB;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,GAAW,EAAE,OAAe;QAC/B,MAAM,KAAK,GAAc;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG;YACH,OAAO;SACR,CAAC;QAEF,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACjD,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjD,sBAAsB;QACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * MK1 Feed Store - Operations feed storage (last N events)
3
+ */
4
+ import { type FeedEvent } from './eventBus.js';
5
+ declare class FeedStore {
6
+ private events;
7
+ constructor();
8
+ /**
9
+ * Add event to store
10
+ */
11
+ private add;
12
+ /**
13
+ * Get last N events for display
14
+ */
15
+ getRecent(count?: number): FeedEvent[];
16
+ /**
17
+ * Get all events
18
+ */
19
+ getAll(): FeedEvent[];
20
+ /**
21
+ * Clear all events
22
+ */
23
+ clear(): void;
24
+ /**
25
+ * Get count
26
+ */
27
+ getCount(): number;
28
+ }
29
+ export declare const feedStore: FeedStore;
30
+ export {};
31
+ //# sourceMappingURL=feedStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedStore.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/core/feedStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAKzD,cAAM,SAAS;IACb,OAAO,CAAC,MAAM,CAAmB;;IASjC;;OAEG;IACH,OAAO,CAAC,GAAG;IASX;;OAEG;IACH,SAAS,CAAC,KAAK,GAAE,MAA2B,GAAG,SAAS,EAAE;IAI1D;;OAEG;IACH,MAAM,IAAI,SAAS,EAAE;IAIrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * MK1 Feed Store - Operations feed storage (last N events)
3
+ */
4
+ import { eventBus } from './eventBus.js';
5
+ const MAX_FEED_EVENTS = 100;
6
+ const MAX_DISPLAY_EVENTS = 15;
7
+ class FeedStore {
8
+ events = [];
9
+ constructor() {
10
+ // Subscribe to all events
11
+ eventBus.subscribeAll((event) => {
12
+ this.add(event);
13
+ });
14
+ }
15
+ /**
16
+ * Add event to store
17
+ */
18
+ add(event) {
19
+ this.events.push(event);
20
+ // Keep only last N events
21
+ if (this.events.length > MAX_FEED_EVENTS) {
22
+ this.events.shift();
23
+ }
24
+ }
25
+ /**
26
+ * Get last N events for display
27
+ */
28
+ getRecent(count = MAX_DISPLAY_EVENTS) {
29
+ return this.events.slice(-count);
30
+ }
31
+ /**
32
+ * Get all events
33
+ */
34
+ getAll() {
35
+ return [...this.events];
36
+ }
37
+ /**
38
+ * Clear all events
39
+ */
40
+ clear() {
41
+ this.events = [];
42
+ }
43
+ /**
44
+ * Get count
45
+ */
46
+ getCount() {
47
+ return this.events.length;
48
+ }
49
+ }
50
+ export const feedStore = new FeedStore();
51
+ //# sourceMappingURL=feedStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedStore.js","sourceRoot":"","sources":["../../../src/tui_mk1/core/feedStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AAEzD,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,MAAM,SAAS;IACL,MAAM,GAAgB,EAAE,CAAC;IAEjC;QACE,0BAA0B;QAC1B,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,GAAG,CAAC,KAAgB;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,0BAA0B;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB,kBAAkB;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,SAAS,CAAuE;IAExF;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD7E;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,IAAI,IAAI,IAAI;CA8Bb"}
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,SAAS,CAAuE;IAExF;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD7E;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,IAAI,IAAI,IAAI;CA8Bb"}
@@ -40,6 +40,8 @@ export class MK1Kernel {
40
40
  title: '4Runr MK1',
41
41
  output: process.stdout,
42
42
  input: process.stdin,
43
+ scrollable: false, // Disable screen-level scrolling
44
+ alwaysScroll: false,
43
45
  });
44
46
  // Register singleton
45
47
  globalThis.__MK1_SCREEN__ = this.screen;
@@ -1 +1 @@
1
- {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * MK1 Layout Engine - Pure, testable layout computation
3
+ *
4
+ * Rules:
5
+ * - No hard-coded max-width clamps
6
+ * - Auto-switch to narrow mode if overflow
7
+ * - Every panel uses left/top/width/height as integers
8
+ */
9
+ export type Rect = {
10
+ left: number;
11
+ top: number;
12
+ width: number;
13
+ height: number;
14
+ };
15
+ export type LayoutMode = 'normal' | 'narrow';
16
+ export type Layout = {
17
+ mode: LayoutMode;
18
+ cols: number;
19
+ rows: number;
20
+ rects: Record<string, Rect>;
21
+ };
22
+ export declare function computeLayout(safeCols: number, safeRows: number): Layout;
23
+ /**
24
+ * Validate and fix layout (guardrail)
25
+ * Uses safeCols/safeRows from layout
26
+ */
27
+ export declare function validateLayout(layout: Layout): Layout;
28
+ //# sourceMappingURL=layoutEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutEngine.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/layout/layoutEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7C,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC7B,CAAC;AAgCF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6BxE;AAyOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUrD"}
@@ -0,0 +1,258 @@
1
+ const MIN_COLS_NORMAL = 140; // Increased threshold
2
+ const MIN_ROWS_NORMAL = 35; // Increased threshold
3
+ const MIN_WIDTH = 10;
4
+ const MIN_HEIGHT = 3;
5
+ /**
6
+ * Assert rect is within viewport (dev mode)
7
+ */
8
+ function assertRectWithinViewport(rect, safeCols, safeRows, key) {
9
+ const rightEdge = rect.left + rect.width;
10
+ const bottomEdge = rect.top + rect.height;
11
+ if (rect.left < 0 || rect.width < 1) {
12
+ console.error(`[LAYOUT_OOB] ${key}: left=${rect.left} width=${rect.width} (must be >= 0 and >= 1)`);
13
+ }
14
+ if (rightEdge > safeCols) {
15
+ console.error(`[LAYOUT_OOB] ${key}: rightEdge=${rightEdge} safeCols=${safeCols} (exceeds by ${rightEdge - safeCols})`);
16
+ }
17
+ if (bottomEdge > safeRows) {
18
+ console.error(`[LAYOUT_OOB] ${key}: bottomEdge=${bottomEdge} safeRows=${safeRows} (exceeds by ${bottomEdge - safeRows})`);
19
+ }
20
+ }
21
+ export function computeLayout(safeCols, safeRows) {
22
+ // Check minimum requirements for normal mode
23
+ if (safeCols < MIN_COLS_NORMAL || safeRows < MIN_ROWS_NORMAL) {
24
+ const narrowLayout = computeNarrowLayout(safeCols, safeRows);
25
+ console.log(`[LAYOUT] mode=narrow reason=threshold safeCols=${safeCols} safeRows=${safeRows}`);
26
+ return narrowLayout;
27
+ }
28
+ // Try normal layout first
29
+ const normalLayout = computeNormalLayout(safeCols, safeRows);
30
+ // Check for overflow
31
+ if (hasOverflow(normalLayout, safeCols, safeRows)) {
32
+ const narrowLayout = computeNarrowLayout(safeCols, safeRows);
33
+ console.log(`[LAYOUT] mode=narrow reason=overflow safeCols=${safeCols} safeRows=${safeRows}`);
34
+ return narrowLayout;
35
+ }
36
+ // Assert all rects are within viewport (dev mode)
37
+ if (process.env.TUI_DEBUG === '1') {
38
+ for (const [key, rect] of Object.entries(normalLayout.rects)) {
39
+ if (key !== 'WATERMARK') { // Skip watermark
40
+ assertRectWithinViewport(rect, safeCols, safeRows, key);
41
+ }
42
+ }
43
+ }
44
+ console.log(`[LAYOUT] mode=normal safeCols=${safeCols} safeRows=${safeRows}`);
45
+ return normalLayout;
46
+ }
47
+ /**
48
+ * Normal mode: 3-column layout (centered with margins)
49
+ * Left stack: POSTURE, RESOURCES, ASSETS
50
+ * Center: OPERATIONS (big)
51
+ * Right stack: NETWORK, CAPABILITIES
52
+ * Bottom: COMMAND_LINE (full width)
53
+ *
54
+ * Uses safeCols/safeRows - all rects must fit within these bounds
55
+ */
56
+ function computeNormalLayout(safeCols, safeRows) {
57
+ const commandLineHeight = 1;
58
+ const statusLineHeight = 1;
59
+ const usableRows = safeRows - statusLineHeight - commandLineHeight;
60
+ const usableTop = statusLineHeight;
61
+ // Add margins to center content and prevent scrollbars
62
+ const marginX = 2; // Left/right margin
63
+ const contentWidth = safeCols - (marginX * 2);
64
+ // Column widths (3 columns) - balanced proportions
65
+ const leftColWidth = Math.floor(contentWidth * 0.22); // 22%
66
+ const centerColWidth = Math.floor(contentWidth * 0.56); // 56%
67
+ const rightColWidth = contentWidth - leftColWidth - centerColWidth; // Remaining ~22%
68
+ // Column positions (centered with margin)
69
+ const leftColLeft = marginX;
70
+ const centerColLeft = marginX + leftColWidth;
71
+ const rightColLeft = marginX + leftColWidth + centerColWidth;
72
+ // Left stack: split into 3 panels
73
+ const leftPanelHeight = Math.floor(usableRows / 3);
74
+ const leftRemainder = usableRows - (leftPanelHeight * 3);
75
+ // Right stack: split into 2 panels
76
+ const rightPanelHeight = Math.floor(usableRows / 2);
77
+ const rightRemainder = usableRows - (rightPanelHeight * 2);
78
+ const rects = {};
79
+ // Status line (full width, no border) - but within safeCols
80
+ rects['STATUS'] = {
81
+ left: 0,
82
+ top: 0,
83
+ width: safeCols,
84
+ height: statusLineHeight,
85
+ };
86
+ // Ensure minimum widths to prevent overflow
87
+ const minPanelWidth = 15;
88
+ const adjustedLeftWidth = Math.max(minPanelWidth, leftColWidth);
89
+ const adjustedRightWidth = Math.max(minPanelWidth, rightColWidth);
90
+ const adjustedCenterWidth = contentWidth - adjustedLeftWidth - adjustedRightWidth;
91
+ // Recalculate positions with adjusted widths
92
+ const finalCenterLeft = marginX + adjustedLeftWidth;
93
+ const finalRightLeft = marginX + adjustedLeftWidth + adjustedCenterWidth;
94
+ // Left column: POSTURE, RESOURCES, ASSETS
95
+ rects['POSTURE'] = {
96
+ left: leftColLeft,
97
+ top: usableTop,
98
+ width: adjustedLeftWidth,
99
+ height: leftPanelHeight + (leftRemainder > 0 ? 1 : 0),
100
+ };
101
+ rects['RESOURCES'] = {
102
+ left: leftColLeft,
103
+ top: usableTop + leftPanelHeight + (leftRemainder > 0 ? 1 : 0),
104
+ width: adjustedLeftWidth,
105
+ height: leftPanelHeight + (leftRemainder > 1 ? 1 : 0),
106
+ };
107
+ rects['ASSETS'] = {
108
+ left: leftColLeft,
109
+ top: usableTop + (leftPanelHeight * 2) + Math.min(leftRemainder, 2),
110
+ width: adjustedLeftWidth,
111
+ height: leftPanelHeight + (leftRemainder > 2 ? 1 : 0),
112
+ };
113
+ // Center: OPERATIONS (big)
114
+ rects['OPERATIONS'] = {
115
+ left: finalCenterLeft,
116
+ top: usableTop,
117
+ width: adjustedCenterWidth,
118
+ height: usableRows,
119
+ };
120
+ // Right column: NETWORK, CAPABILITIES
121
+ rects['NETWORK'] = {
122
+ left: finalRightLeft,
123
+ top: usableTop,
124
+ width: adjustedRightWidth,
125
+ height: rightPanelHeight + (rightRemainder > 0 ? 1 : 0),
126
+ };
127
+ rects['CAPABILITIES'] = {
128
+ left: finalRightLeft,
129
+ top: usableTop + rightPanelHeight + (rightRemainder > 0 ? 1 : 0),
130
+ width: adjustedRightWidth,
131
+ height: rightPanelHeight + (rightRemainder > 1 ? 1 : 0),
132
+ };
133
+ // Command line (full width, bottom, no border) - but within safeCols
134
+ rects['COMMAND_LINE'] = {
135
+ left: 0,
136
+ top: safeRows - commandLineHeight,
137
+ width: safeCols,
138
+ height: commandLineHeight,
139
+ };
140
+ // Watermark (top-right, shows version) - within safeCols
141
+ const watermarkText = '4RUNR TUI MK1';
142
+ rects['WATERMARK'] = {
143
+ left: safeCols - watermarkText.length,
144
+ top: 0,
145
+ width: watermarkText.length,
146
+ height: 1,
147
+ };
148
+ return {
149
+ mode: 'normal',
150
+ cols: safeCols,
151
+ rows: safeRows,
152
+ rects,
153
+ };
154
+ }
155
+ /**
156
+ * Narrow mode: Stacked vertically (centered with margins)
157
+ * Uses safeCols/safeRows
158
+ */
159
+ function computeNarrowLayout(safeCols, safeRows) {
160
+ const commandLineHeight = 1;
161
+ const statusLineHeight = 1;
162
+ const usableRows = safeRows - statusLineHeight - commandLineHeight;
163
+ const usableTop = statusLineHeight;
164
+ // Add margins to center content and prevent scrollbars
165
+ const marginX = 2;
166
+ const contentWidth = safeCols - (marginX * 2);
167
+ const minContentWidth = 50; // Minimum usable width
168
+ // If too narrow, use minimal margins
169
+ const finalMarginX = contentWidth < minContentWidth ? 1 : marginX;
170
+ const finalContentWidth = safeCols - (finalMarginX * 2);
171
+ // Stack all panels vertically
172
+ const panelCount = 6; // POSTURE, RESOURCES, ASSETS, OPERATIONS, NETWORK, CAPABILITIES
173
+ const panelHeight = Math.floor(usableRows / panelCount);
174
+ const remainder = usableRows - (panelHeight * panelCount);
175
+ const rects = {};
176
+ // Status line - within safeCols
177
+ rects['STATUS'] = {
178
+ left: 0,
179
+ top: 0,
180
+ width: safeCols,
181
+ height: statusLineHeight,
182
+ };
183
+ let currentTop = usableTop;
184
+ const panels = ['POSTURE', 'RESOURCES', 'ASSETS', 'OPERATIONS', 'NETWORK', 'CAPABILITIES'];
185
+ for (let i = 0; i < panels.length; i++) {
186
+ const extraRow = i < remainder ? 1 : 0;
187
+ rects[panels[i]] = {
188
+ left: finalMarginX,
189
+ top: currentTop,
190
+ width: finalContentWidth,
191
+ height: panelHeight + extraRow,
192
+ };
193
+ currentTop += panelHeight + extraRow;
194
+ }
195
+ // Command line - within safeCols
196
+ rects['COMMAND_LINE'] = {
197
+ left: 0,
198
+ top: safeRows - commandLineHeight,
199
+ width: safeCols,
200
+ height: commandLineHeight,
201
+ };
202
+ // Watermark - within safeCols
203
+ const watermarkText = '4RUNR TUI MK1';
204
+ rects['WATERMARK'] = {
205
+ left: safeCols - watermarkText.length,
206
+ top: 0,
207
+ width: watermarkText.length,
208
+ height: 1,
209
+ };
210
+ return {
211
+ mode: 'narrow',
212
+ cols: safeCols,
213
+ rows: safeRows,
214
+ rects,
215
+ };
216
+ }
217
+ /**
218
+ * Check for overflow violations
219
+ * Uses safeCols/safeRows
220
+ */
221
+ function hasOverflow(layout, safeCols, safeRows) {
222
+ for (const [name, rect] of Object.entries(layout.rects)) {
223
+ // Skip watermark (can be tiny)
224
+ if (name === 'WATERMARK') {
225
+ continue;
226
+ }
227
+ // Check minimums
228
+ if (rect.width < MIN_WIDTH || rect.height < MIN_HEIGHT) {
229
+ return true;
230
+ }
231
+ // Check boundaries - must fit within safe viewport
232
+ const rightEdge = rect.left + rect.width;
233
+ const bottomEdge = rect.top + rect.height;
234
+ // Strict boundary check
235
+ if (rightEdge > safeCols || bottomEdge > safeRows || rect.left < 0 || rect.top < 0) {
236
+ return true;
237
+ }
238
+ // Additional check: ensure rect dimensions don't exceed safe viewport
239
+ if (rect.width > safeCols || rect.height > safeRows) {
240
+ return true;
241
+ }
242
+ }
243
+ return false;
244
+ }
245
+ /**
246
+ * Validate and fix layout (guardrail)
247
+ * Uses safeCols/safeRows from layout
248
+ */
249
+ export function validateLayout(layout) {
250
+ const { cols, rows } = layout;
251
+ // Check for violations
252
+ if (hasOverflow(layout, cols, rows)) {
253
+ // Switch to narrow mode and recompute
254
+ return computeNarrowLayout(cols, rows);
255
+ }
256
+ return layout;
257
+ }
258
+ //# sourceMappingURL=layoutEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutEngine.js","sourceRoot":"","sources":["../../../src/tui_mk1/layout/layoutEngine.ts"],"names":[],"mappings":"AAkBA,MAAM,eAAe,GAAG,GAAG,CAAC,CAAC,sBAAsB;AACnD,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,sBAAsB;AAClD,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB;;GAEG;AACH,SAAS,wBAAwB,CAC/B,IAAU,EACV,QAAgB,EAChB,QAAgB,EAChB,GAAW;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IAE1C,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,KAAK,0BAA0B,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,eAAe,SAAS,aAAa,QAAQ,gBAAgB,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC;IACzH,CAAC;IAED,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,UAAU,aAAa,QAAQ,gBAAgB,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC5H,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAgB;IAC9D,6CAA6C;IAC7C,IAAI,QAAQ,GAAG,eAAe,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;QAC7D,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,kDAAkD,QAAQ,aAAa,QAAQ,EAAE,CAAC,CAAC;QAC/F,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,0BAA0B;IAC1B,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE7D,qBAAqB;IACrB,IAAI,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,iDAAiD,QAAQ,aAAa,QAAQ,EAAE,CAAC,CAAC;QAC9F,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,kDAAkD;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC,CAAC,iBAAiB;gBAC1C,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,aAAa,QAAQ,EAAE,CAAC,CAAC;IAC9E,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,QAAgB,EAAE,QAAgB;IAC7D,MAAM,iBAAiB,GAAG,CAAC,CAAC;IAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,QAAQ,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IACnE,MAAM,SAAS,GAAG,gBAAgB,CAAC;IAEnC,uDAAuD;IACvD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,oBAAoB;IACvC,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAE9C,mDAAmD;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;IAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;IAC9D,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,cAAc,CAAC,CAAC,iBAAiB;IAErF,0CAA0C;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC;IAC5B,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,CAAC;IAC7C,MAAM,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,cAAc,CAAC;IAE7D,kCAAkC;IAClC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,UAAU,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IAEzD,mCAAmC;IACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAyB,EAAE,CAAC;IAEvC,4DAA4D;IAC5D,KAAK,CAAC,QAAQ,CAAC,GAAG;QAChB,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,gBAAgB;KACzB,CAAC;IAEF,4CAA4C;IAC5C,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAChE,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAClE,MAAM,mBAAmB,GAAG,YAAY,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;IAElF,6CAA6C;IAC7C,MAAM,eAAe,GAAG,OAAO,GAAG,iBAAiB,CAAC;IACpD,MAAM,cAAc,GAAG,OAAO,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;IAEzE,0CAA0C;IAC1C,KAAK,CAAC,SAAS,CAAC,GAAG;QACjB,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,eAAe,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACtD,CAAC;IACF,KAAK,CAAC,WAAW,CAAC,GAAG;QACnB,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,SAAS,GAAG,eAAe,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,eAAe,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACtD,CAAC;IACF,KAAK,CAAC,QAAQ,CAAC,GAAG;QAChB,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,SAAS,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QACnE,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,eAAe,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACtD,CAAC;IAEF,2BAA2B;IAC3B,KAAK,CAAC,YAAY,CAAC,GAAG;QACpB,IAAI,EAAE,eAAe;QACrB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,UAAU;KACnB,CAAC;IAEF,sCAAsC;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG;QACjB,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,gBAAgB,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD,CAAC;IACF,KAAK,CAAC,cAAc,CAAC,GAAG;QACtB,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,SAAS,GAAG,gBAAgB,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,gBAAgB,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD,CAAC;IAEF,qEAAqE;IACrE,KAAK,CAAC,cAAc,CAAC,GAAG;QACtB,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,QAAQ,GAAG,iBAAiB;QACjC,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,iBAAiB;KAC1B,CAAC;IAEF,yDAAyD;IACzD,MAAM,aAAa,GAAG,eAAe,CAAC;IACtC,KAAK,CAAC,WAAW,CAAC,GAAG;QACnB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC,MAAM;QACrC,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,aAAa,CAAC,MAAM;QAC3B,MAAM,EAAE,CAAC;KACV,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,QAAgB,EAAE,QAAgB;IAC7D,MAAM,iBAAiB,GAAG,CAAC,CAAC;IAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,QAAQ,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IACnE,MAAM,SAAS,GAAG,gBAAgB,CAAC;IAEnC,uDAAuD;IACvD,MAAM,OAAO,GAAG,CAAC,CAAC;IAClB,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,uBAAuB;IAEnD,qCAAqC;IACrC,MAAM,YAAY,GAAG,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAClE,MAAM,iBAAiB,GAAG,QAAQ,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAExD,8BAA8B;IAC9B,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,gEAAgE;IACtF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAyB,EAAE,CAAC;IAEvC,gCAAgC;IAChC,KAAK,CAAC,QAAQ,CAAC,GAAG;QAChB,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,gBAAgB;KACzB,CAAC;IAEF,IAAI,UAAU,GAAG,SAAS,CAAC;IAC3B,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAE3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;YACjB,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,iBAAiB;YACxB,MAAM,EAAE,WAAW,GAAG,QAAQ;SAC/B,CAAC;QACF,UAAU,IAAI,WAAW,GAAG,QAAQ,CAAC;IACvC,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,cAAc,CAAC,GAAG;QACtB,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,QAAQ,GAAG,iBAAiB;QACjC,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,iBAAiB;KAC1B,CAAC;IAEF,8BAA8B;IAC9B,MAAM,aAAa,GAAG,eAAe,CAAC;IACtC,KAAK,CAAC,WAAW,CAAC,GAAG;QACnB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC,MAAM;QACrC,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,aAAa,CAAC,MAAM;QAC3B,MAAM,EAAE,CAAC;KACV,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAgB;IACrE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,+BAA+B;QAC/B,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mDAAmD;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAE1C,wBAAwB;QACxB,IAAI,SAAS,GAAG,QAAQ,IAAI,UAAU,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACnF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sEAAsE;QACtE,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE9B,uBAAuB;IACvB,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,sCAAsC;QACtC,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,22 +1,21 @@
1
1
  export declare class MK1App {
2
2
  private kernel;
3
- private widgets;
4
- private commandValue;
3
+ private widgetManager;
4
+ private layout;
5
5
  private lastRebuildReason;
6
6
  private inputHandlersAttached;
7
+ private debugLayout;
8
+ private safeViewport;
9
+ private debugGutter;
7
10
  constructor();
8
11
  /**
9
12
  * Start MK1 App
10
13
  */
11
14
  start(): Promise<void>;
12
15
  /**
13
- * Render minimal UI
16
+ * Render full layout
14
17
  */
15
18
  private render;
16
- /**
17
- * Update status line
18
- */
19
- private updateStatusLine;
20
19
  /**
21
20
  * Handle resize
22
21
  */
@@ -25,14 +24,22 @@ export declare class MK1App {
25
24
  * Setup input handling (manual - works on all terminals)
26
25
  */
27
26
  private setupInputHandling;
28
- /**
29
- * Update command input display
30
- */
31
- private updateCommandDisplay;
32
27
  /**
33
28
  * Handle command
34
29
  */
35
30
  private handleCommand;
31
+ /**
32
+ * Emit layout debug info
33
+ */
34
+ private emitLayoutDebug;
35
+ /**
36
+ * Emit widgets debug info
37
+ */
38
+ private emitWidgetsDebug;
39
+ /**
40
+ * Check for overflow
41
+ */
42
+ private checkOverflow;
36
43
  /**
37
44
  * Stop app
38
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mk1App.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/mk1App.ts"],"names":[],"mappings":"AAyBA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,qBAAqB,CAAkB;;IAM/C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;OAEG;IACH,OAAO,CAAC,MAAM;IAyEd;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;YACW,YAAY;IAkB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;YACW,aAAa;IAwD3B;;OAEG;IACH,IAAI,IAAI,IAAI;CAIb;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9C"}
1
+ {"version":3,"file":"mk1App.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/mk1App.ts"],"names":[],"mappings":"AAwBA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAa;;IAOhC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B;;OAEG;IACH,OAAO,CAAC,MAAM;IAqCd;;OAEG;YACW,YAAY;IAmB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;YACW,aAAa;IA2C3B;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,aAAa;IA8BrB;;OAEG;IACH,IAAI,IAAI,IAAI;CAab;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9C"}