4runr-os 2.9.53 → 2.9.54

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.
@@ -2,7 +2,7 @@ use anyhow::Result;
2
2
  use crossterm::cursor;
3
3
  use crossterm::event::{self, Event, KeyEventKind, MouseEventKind};
4
4
  use crossterm::execute;
5
- use crossterm::terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen, Clear, ClearType};
5
+ use crossterm::terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen, Clear, ClearType, size as terminal_size};
6
6
  use ratatui::prelude::*;
7
7
  use std::time::{Duration, Instant};
8
8
 
@@ -597,6 +597,13 @@ fn main() -> Result<()> {
597
597
  (None, _) => true,
598
598
  };
599
599
 
600
+ // When opening Setup Portal in windowed mode, terminal size can be stale → corruption/duplicates.
601
+ // Force OS to report current size and redraw once so layout uses correct dimensions.
602
+ let switching_to_setup = is_switching && current_screen == crate::screens::Screen::SetupPortal;
603
+ if switching_to_setup {
604
+ let _ = terminal_size(); // sync terminal dimensions (e.g. after restore-down)
605
+ }
606
+
600
607
  if is_switching {
601
608
  terminal.clear()?;
602
609
  }
@@ -605,6 +612,11 @@ fn main() -> Result<()> {
605
612
  terminal.draw(|f| app.render(f))?;
606
613
  let render_duration = render_start.elapsed().as_millis() as u64;
607
614
  app.record_render(render_duration);
615
+
616
+ // Second frame when opening Setup Portal: ensures correct layout when windowed (no stale size).
617
+ if switching_to_setup {
618
+ app.request_immediate_render("setup_portal_second_frame");
619
+ }
608
620
 
609
621
  // Update previous screen tracking
610
622
  previous_screen = Some(current_screen);
@@ -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.53";
147
+ const PACKAGE_VERSION: &str = "2.9.54";
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.53",
3
+ "version": "2.9.54",
4
4
  "type": "module",
5
- "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.53: Setup Portal - Clear per panel + padded details (no corruption, no flicker). v2.9.52: Block+fill+widget. ⚠️ Pre-MVP / Development Phase",
5
+ "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.54: Setup Portal - fix open-while-windowed (size sync + second frame). v2.9.53: Clear + padded details. ⚠️ Pre-MVP / Development Phase",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
8
  "4runr": "dist/index.js",