4runr-os 2.9.61 → 2.9.63

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.
@@ -592,13 +592,14 @@ fn main() -> Result<()> {
592
592
  let current_screen = app.state.navigation.current_screen().clone();
593
593
  let is_portal_active = matches!(current_screen, crate::screens::Screen::ConnectionPortal | crate::screens::Screen::SetupPortal);
594
594
 
595
- // Clear only on screen switch (no clear on Setup Portal nav = no flicker)
595
+ // Clear only on screen switch (but not when switching TO Setup Portal; we'll clear after autoresize)
596
596
  let is_switching = match (&previous_screen, &current_screen) {
597
597
  (Some(prev), current) => prev != current,
598
598
  (None, _) => true,
599
599
  };
600
+ let switching_to_setup_portal = is_switching && matches!(current_screen, crate::screens::Screen::SetupPortal);
600
601
 
601
- if is_switching {
602
+ if is_switching && !switching_to_setup_portal {
602
603
  #[cfg(debug_assertions)]
603
604
  eprintln!("[MAIN] SCREEN SWITCH: {:?} -> {:?} (clearing)", previous_screen, current_screen);
604
605
  debug_log::log_screen(
@@ -608,9 +609,20 @@ fn main() -> Result<()> {
608
609
  terminal.clear()?;
609
610
  }
610
611
 
611
- // When on Setup Portal, sync terminal buffer to real console size (fixes windowed-mode corruption)
612
+ // When on Setup Portal: autoresize (always) + clear (only on first frame to avoid flicker)
613
+ // Order matters: resize buffer to match console size BEFORE clearing so we clear the entire visible area.
612
614
  if matches!(current_screen, crate::screens::Screen::SetupPortal) {
613
- let _ = terminal.autoresize();
615
+ terminal.autoresize()?;
616
+ // Only clear when we JUST entered Setup Portal (first frame), not on every navigation
617
+ if switching_to_setup_portal {
618
+ terminal.clear()?;
619
+ #[cfg(debug_assertions)]
620
+ eprintln!("[MAIN] ENTERED Setup Portal (autoresize + clear)");
621
+ debug_log::log_screen(
622
+ &format!("{:?}", previous_screen.as_ref().unwrap_or(&current_screen)),
623
+ &format!("{:?}", current_screen),
624
+ );
625
+ }
614
626
  }
615
627
 
616
628
  let render_start = Instant::now();
@@ -144,7 +144,7 @@ fn render_header(f: &mut Frame, area: Rect, state: &AppState) {
144
144
 
145
145
  // Line 1: Brand + version + mode + uptime - Bug 3 fix: Use "4Runr." with dot (matches brand logo)
146
146
  // Use npm package version (2.9.24) - matches package.json
147
- const PACKAGE_VERSION: &str = "2.9.61";
147
+ const PACKAGE_VERSION: &str = "2.9.63";
148
148
  let brand_line = Line::from(vec![
149
149
  Span::styled("4Runr.", Style::default().fg(BRAND_PURPLE).add_modifier(Modifier::BOLD)),
150
150
  Span::styled(" AI AGENT OS", Style::default().fg(BRAND_VIOLET)),
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "4runr-os",
3
- "version": "2.9.61",
3
+ "version": "2.9.63",
4
4
  "type": "module",
5
- "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.61: Setup Portal ESC always closes (even when detecting). v2.9.60: Debug log path. ⚠️ Pre-MVP / Development Phase",
5
+ "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.63: Setup Portal windowed fix, no flicker (clear only on enter). v2.9.62: Autoresize+clear. ⚠️ Pre-MVP / Development Phase",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
8
  "4runr": "dist/index.js",