4runr-os 2.0.39 → 2.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/ui/v5/debug/debugCommands.d.ts +20 -0
  2. package/dist/ui/v5/debug/debugCommands.d.ts.map +1 -0
  3. package/dist/ui/v5/debug/debugCommands.js +104 -0
  4. package/dist/ui/v5/debug/debugCommands.js.map +1 -0
  5. package/dist/ui/v5/guardrails/stdoutGuard.d.ts +23 -0
  6. package/dist/ui/v5/guardrails/stdoutGuard.d.ts.map +1 -0
  7. package/dist/ui/v5/guardrails/stdoutGuard.js +94 -0
  8. package/dist/ui/v5/guardrails/stdoutGuard.js.map +1 -0
  9. package/dist/ui/v5/guardrails/terminalRestore.d.ts +17 -0
  10. package/dist/ui/v5/guardrails/terminalRestore.d.ts.map +1 -0
  11. package/dist/ui/v5/guardrails/terminalRestore.js +47 -0
  12. package/dist/ui/v5/guardrails/terminalRestore.js.map +1 -0
  13. package/dist/ui/v5/index.d.ts +13 -3
  14. package/dist/ui/v5/index.d.ts.map +1 -1
  15. package/dist/ui/v5/index.js +48 -39
  16. package/dist/ui/v5/index.js.map +1 -1
  17. package/dist/ui/v5/kernel/kernel.d.ts +80 -0
  18. package/dist/ui/v5/kernel/kernel.d.ts.map +1 -0
  19. package/dist/ui/v5/kernel/kernel.js +283 -0
  20. package/dist/ui/v5/kernel/kernel.js.map +1 -0
  21. package/dist/ui/v5/layout/clampRect.d.ts +22 -0
  22. package/dist/ui/v5/layout/clampRect.d.ts.map +1 -0
  23. package/dist/ui/v5/layout/clampRect.js +40 -0
  24. package/dist/ui/v5/layout/clampRect.js.map +1 -0
  25. package/dist/ui/v5/layout/layoutEngine.d.ts +16 -0
  26. package/dist/ui/v5/layout/layoutEngine.d.ts.map +1 -0
  27. package/dist/ui/v5/layout/layoutEngine.js +99 -0
  28. package/dist/ui/v5/layout/layoutEngine.js.map +1 -0
  29. package/dist/ui/v5/resize/resizeController.d.ts +62 -0
  30. package/dist/ui/v5/resize/resizeController.d.ts.map +1 -0
  31. package/dist/ui/v5/resize/resizeController.js +133 -0
  32. package/dist/ui/v5/resize/resizeController.js.map +1 -0
  33. package/dist/ui/v5/viewport/getViewport.d.ts +19 -0
  34. package/dist/ui/v5/viewport/getViewport.d.ts.map +1 -0
  35. package/dist/ui/v5/viewport/getViewport.js +98 -0
  36. package/dist/ui/v5/viewport/getViewport.js.map +1 -0
  37. package/dist/ui/v5/viewport.js +2 -2
  38. package/dist/ui/v5/viewport.js.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,133 @@
1
+ /**
2
+ * V5 Atomic Resize Controller
3
+ *
4
+ * Debounced resize handling with atomic rebuild strategy.
5
+ *
6
+ * Strategy: rebuild children on resize (remove/destroy all, recreate fresh)
7
+ * This avoids "ghost borders" and duplicated panels.
8
+ */
9
+ import { getViewport } from '../viewport/getViewport.js';
10
+ export class ResizeController {
11
+ screen;
12
+ kernel;
13
+ timer = null;
14
+ layoutVersion = 0;
15
+ lastCommitted = { cols: 0, rows: 0 };
16
+ pending = { cols: 0, rows: 0 };
17
+ burstCount = 0;
18
+ lastResizeTs = 0;
19
+ lastSource = '';
20
+ constructor(screen, kernel) {
21
+ this.screen = screen;
22
+ this.kernel = kernel;
23
+ }
24
+ /**
25
+ * Start listening to resize events
26
+ */
27
+ start() {
28
+ // Listen to screen resize
29
+ this.screen.on('resize', () => {
30
+ this.onResizeEvent('screen');
31
+ });
32
+ // Listen to process.stdout resize (Windows can be weird)
33
+ if (process.stdout.on) {
34
+ process.stdout.on('resize', () => {
35
+ this.onResizeEvent('stdout');
36
+ });
37
+ }
38
+ }
39
+ /**
40
+ * Stop listening to resize events
41
+ */
42
+ stop() {
43
+ if (this.timer) {
44
+ clearTimeout(this.timer);
45
+ this.timer = null;
46
+ }
47
+ // Remove listeners
48
+ if (typeof this.screen.removeAllListeners === 'function') {
49
+ this.screen.removeAllListeners('resize');
50
+ }
51
+ if (process.stdout && typeof process.stdout.removeAllListeners === 'function') {
52
+ process.stdout.removeAllListeners('resize');
53
+ }
54
+ }
55
+ /**
56
+ * Get current layout version
57
+ */
58
+ getLayoutVersion() {
59
+ return this.layoutVersion;
60
+ }
61
+ /**
62
+ * Get last committed size
63
+ */
64
+ getLastCommitted() {
65
+ return { ...this.lastCommitted };
66
+ }
67
+ /**
68
+ * Get burst count
69
+ */
70
+ getBurstCount() {
71
+ return this.burstCount;
72
+ }
73
+ /**
74
+ * Get last resize timestamp
75
+ */
76
+ getLastResizeTs() {
77
+ return this.lastResizeTs;
78
+ }
79
+ /**
80
+ * Get last resize source
81
+ */
82
+ getLastSource() {
83
+ return this.lastSource;
84
+ }
85
+ /**
86
+ * Handle resize event (debounced)
87
+ */
88
+ onResizeEvent(source) {
89
+ const vp = getViewport(this.screen);
90
+ this.pending = { cols: vp.cols, rows: vp.rows };
91
+ this.burstCount++;
92
+ this.lastResizeTs = Date.now();
93
+ if (this.timer) {
94
+ clearTimeout(this.timer);
95
+ }
96
+ // Debounce: 120-180ms (use 150ms)
97
+ this.timer = setTimeout(() => {
98
+ this.commitResize(source);
99
+ }, 150);
100
+ }
101
+ /**
102
+ * Commit resize (atomic)
103
+ */
104
+ commitResize(source) {
105
+ this.timer = null;
106
+ const vp = getViewport(this.screen);
107
+ const cols = vp.cols;
108
+ const rows = vp.rows;
109
+ // Ignore bogus zero sizes
110
+ if (!cols || !rows) {
111
+ return;
112
+ }
113
+ // Ignore duplicate commits
114
+ if (cols === this.lastCommitted.cols && rows === this.lastCommitted.rows) {
115
+ return;
116
+ }
117
+ this.lastCommitted = { cols, rows };
118
+ this.lastSource = source;
119
+ this.layoutVersion++;
120
+ const myVersion = this.layoutVersion;
121
+ const myBurstCount = this.burstCount;
122
+ // Reset burst count after commit
123
+ this.burstCount = 0;
124
+ this.kernel.rebuild({
125
+ cols,
126
+ rows,
127
+ version: myVersion,
128
+ source,
129
+ burstCount: myBurstCount,
130
+ });
131
+ }
132
+ }
133
+ //# sourceMappingURL=resizeController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizeController.js","sourceRoot":"","sources":["../../../../src/ui/v5/resize/resizeController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * V5 Viewport Detection
3
+ *
4
+ * Returns safe viewport dimensions with proper browser terminal detection.
5
+ */
6
+ export type Viewport = {
7
+ cols: number;
8
+ rows: number;
9
+ safeCols: number;
10
+ safeRows: number;
11
+ marginRight: number;
12
+ marginBottom: number;
13
+ isBrowserTerminal: boolean;
14
+ };
15
+ /**
16
+ * Get viewport dimensions
17
+ */
18
+ export declare function getViewport(screen: any): Viewport;
19
+ //# sourceMappingURL=getViewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getViewport.d.ts","sourceRoot":"","sources":["../../../../src/ui/v5/viewport/getViewport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAsCF;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,QAAQ,CAiEjD"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * V5 Viewport Detection
3
+ *
4
+ * Returns safe viewport dimensions with proper browser terminal detection.
5
+ */
6
+ /**
7
+ * Detect if running in browser terminal (AWS web console, etc.)
8
+ */
9
+ function detectBrowserTerminal(screen) {
10
+ // Forced flag
11
+ if (process.env.TUI_BROWSER === '1') {
12
+ return true;
13
+ }
14
+ // Heuristic 1: SSH_CONNECTION present AND TERM=xterm (common in AWS web console)
15
+ if (process.env.SSH_CONNECTION && (process.env.TERM || '').toLowerCase().includes('xterm')) {
16
+ return true;
17
+ }
18
+ // Heuristic 2: TERM_PROGRAM missing + unusually large cols
19
+ if (!process.env.TERM_PROGRAM) {
20
+ const cols = screen?.program?.cols || screen?.width || process.stdout.columns || 80;
21
+ if (cols > 120) {
22
+ // Large terminal without TERM_PROGRAM suggests browser
23
+ return true;
24
+ }
25
+ }
26
+ // Heuristic 3: AWS-specific env vars
27
+ if (process.env.AWS_REGION ||
28
+ process.env.CLOUDSHELL ||
29
+ process.env.AWS_EXECUTION_ENV ||
30
+ process.env.EC2_INSTANCE_ID) {
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+ /**
36
+ * Get viewport dimensions
37
+ */
38
+ export function getViewport(screen) {
39
+ // Get raw dimensions
40
+ const program = screen?.program;
41
+ let cols;
42
+ let rows;
43
+ if (program && typeof program.cols === 'number' && program.cols > 0) {
44
+ cols = program.cols;
45
+ rows = program.rows;
46
+ }
47
+ else if (typeof screen.width === 'number' && typeof screen.height === 'number' && screen.width > 0 && screen.height > 0) {
48
+ cols = screen.width;
49
+ rows = screen.height;
50
+ }
51
+ else if (typeof screen.cols === 'number' && typeof screen.rows === 'number') {
52
+ cols = screen.cols;
53
+ rows = screen.rows;
54
+ }
55
+ else {
56
+ cols = process.stdout.columns || 80;
57
+ rows = process.stdout.rows || 24;
58
+ }
59
+ // Detect browser terminal
60
+ const isBrowserTerminal = detectBrowserTerminal(screen);
61
+ // Determine margins
62
+ let marginRight = 0;
63
+ let marginBottom = 0;
64
+ if (isBrowserTerminal) {
65
+ // Start with browser defaults
66
+ marginRight = 3;
67
+ marginBottom = 2;
68
+ }
69
+ // Allow override
70
+ if (process.env.TUI_SAFE_MARGIN_RIGHT) {
71
+ marginRight = Number(process.env.TUI_SAFE_MARGIN_RIGHT);
72
+ }
73
+ if (process.env.TUI_SAFE_MARGIN_BOTTOM) {
74
+ marginBottom = Number(process.env.TUI_SAFE_MARGIN_BOTTOM);
75
+ }
76
+ // Compute safe dimensions
77
+ let safeCols = cols - marginRight;
78
+ let safeRows = rows - marginBottom;
79
+ // Clamp minimums (fail into narrow mode if too small)
80
+ const MIN_SAFE_COLS = 40;
81
+ const MIN_SAFE_ROWS = 15;
82
+ if (safeCols < MIN_SAFE_COLS) {
83
+ safeCols = MIN_SAFE_COLS;
84
+ }
85
+ if (safeRows < MIN_SAFE_ROWS) {
86
+ safeRows = MIN_SAFE_ROWS;
87
+ }
88
+ return {
89
+ cols,
90
+ rows,
91
+ safeCols,
92
+ safeRows,
93
+ marginRight,
94
+ marginBottom,
95
+ isBrowserTerminal,
96
+ };
97
+ }
98
+ //# sourceMappingURL=getViewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getViewport.js","sourceRoot":"","sources":["../../../../src/ui/v5/viewport/getViewport.ts"],"names":[],"mappings":"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"}
@@ -50,8 +50,8 @@ export function computeViewport(screen) {
50
50
  !!process.env.EC2_INSTANCE_ID ||
51
51
  (process.env.TERM || '').toLowerCase().includes('xterm'); // weak but ok as fallback
52
52
  // Defaults - AWS web terminals need more margin to prevent scrollbar
53
- // Increased from 3 to 6 based on testing (horizontal scrollbar still appears with 3-5)
54
- let marginRight = isBrowserLikely ? 6 : 1;
53
+ // Increased to 10 based on testing (horizontal scrollbar still appears with 3-9)
54
+ let marginRight = isBrowserLikely ? 10 : 1;
55
55
  let marginBottom = isBrowserLikely ? 2 : 1;
56
56
  // Override knobs (must exist)
57
57
  if (process.env.TUI_SAFE_MARGIN_RIGHT) {
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/ui/v5/viewport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/ui/v5/viewport.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.0.39",
3
+ "version": "2.0.41",
4
4
  "type": "module",
5
5
  "description": "4Runr AI Agent OS - Interactive terminal for managing AI agents",
6
6
  "main": "dist/index.js",