4runr-os 2.9.21 → 2.9.22

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.
@@ -1720,7 +1720,8 @@ impl App {
1720
1720
  self.add_log("[ERROR] WebSocket not connected".to_string());
1721
1721
  }
1722
1722
 
1723
- self.request_render("portal_connect");
1723
+ // CRITICAL: Use immediate render for instant status update
1724
+ self.request_immediate_render("portal_connect");
1724
1725
  }
1725
1726
 
1726
1727
  // Typing - edit focused field (immediate render for responsiveness)
@@ -317,7 +317,8 @@ fn main() -> Result<()> {
317
317
  }
318
318
 
319
319
  // CRITICAL: Request render after state change to update UI
320
- app.request_render("gateway_connect_success");
320
+ // CRITICAL: Use immediate render for instant success display
321
+ app.request_immediate_render("gateway_connect_success");
321
322
 
322
323
  // Phase 1.3: Portal will show success state (user closes with ESC)
323
324
  // Don't auto-close - let user see success message
@@ -446,8 +447,8 @@ fn main() -> Result<()> {
446
447
  app.state.connection_portal.error = Some(error_msg.clone());
447
448
  app.add_log(format!("✗ [{}] Gateway connection failed: {}", short_id, error_msg));
448
449
 
449
- // CRITICAL: Request render after state change to update UI
450
- app.request_render("gateway_connect_error");
450
+ // CRITICAL: Use immediate render for instant error display
451
+ app.request_immediate_render("gateway_connect_error");
451
452
  }
452
453
  // Check if this is a response to setup.detect command
453
454
  else if Some(&resp.id) == app.state.pending_setup_detect_id.as_ref() {
@@ -60,7 +60,7 @@ pub fn render(f: &mut Frame, state: &AppState) {
60
60
  Constraint::Length(3), // Header
61
61
  Constraint::Length(2), // Description
62
62
  Constraint::Length(9), // Input fields
63
- Constraint::Min(6), // Content area (error/success/connecting)
63
+ Constraint::Min(10), // Content area (error/success/connecting) - increased for bordered boxes
64
64
  Constraint::Length(3), // Actions
65
65
  ])
66
66
  .split(portal_area);
@@ -157,6 +157,26 @@ fn render_content_area(f: &mut Frame, area: Rect, state: &AppState) {
157
157
  // CRITICAL FIX: Clear the content area before rendering to prevent artifacts
158
158
  f.render_widget(Clear, area);
159
159
 
160
+ // Ensure minimum area size for bordered boxes
161
+ if area.height < 8 || area.width < 20 {
162
+ // Area too small - just show simple text
163
+ let text = if portal.connection_success {
164
+ "✓ Connected"
165
+ } else if portal.error.is_some() {
166
+ "✗ Error"
167
+ } else if portal.connecting {
168
+ "⏳ Connecting..."
169
+ } else {
170
+ "Enter Gateway URL and press Enter to connect"
171
+ };
172
+
173
+ let paragraph = Paragraph::new(text)
174
+ .alignment(Alignment::Center)
175
+ .style(Style::default().fg(if portal.connection_success { NEON_GREEN } else if portal.error.is_some() { ERROR_RED } else if portal.connecting { AMBER_WARN } else { TEXT_DIM }));
176
+ f.render_widget(paragraph, area);
177
+ return;
178
+ }
179
+
160
180
  if portal.connection_success {
161
181
  render_success(f, area, state);
162
182
  } else if let Some(error) = &portal.error {
@@ -170,10 +190,11 @@ fn render_content_area(f: &mut Frame, area: Rect, state: &AppState) {
170
190
  }
171
191
 
172
192
  fn render_connecting(f: &mut Frame, area: Rect) {
193
+ // Make the connecting box very prominent
173
194
  let block = Block::default()
174
195
  .title(" ⏳ CONNECTING ")
175
196
  .borders(Borders::ALL)
176
- .border_style(Style::default().fg(AMBER_WARN).bold())
197
+ .border_style(Style::default().fg(AMBER_WARN).bold().add_modifier(Modifier::BOLD))
177
198
  .style(Style::default().bg(BG_PANEL));
178
199
 
179
200
  let inner = block.inner(area);
@@ -222,10 +243,11 @@ fn render_error(f: &mut Frame, area: Rect, error: &str) {
222
243
  ("Connection Error", error_msg)
223
244
  };
224
245
 
246
+ // Make the error box very prominent
225
247
  let block = Block::default()
226
248
  .title(format!(" ✗ {}", display_title))
227
249
  .borders(Borders::ALL)
228
- .border_style(Style::default().fg(ERROR_RED).bold())
250
+ .border_style(Style::default().fg(ERROR_RED).bold().add_modifier(Modifier::BOLD))
229
251
  .style(Style::default().bg(BG_PANEL));
230
252
 
231
253
  let inner = block.inner(area);
@@ -274,10 +296,11 @@ fn render_success(f: &mut Frame, area: Rect, state: &AppState) {
274
296
  ("Verifying...", AMBER_WARN)
275
297
  };
276
298
 
299
+ // Make the success box very prominent
277
300
  let block = Block::default()
278
301
  .title(" ✓ CONNECTED ")
279
302
  .borders(Borders::ALL)
280
- .border_style(Style::default().fg(NEON_GREEN).bold())
303
+ .border_style(Style::default().fg(NEON_GREEN).bold().add_modifier(Modifier::BOLD))
281
304
  .style(Style::default().bg(BG_PANEL));
282
305
 
283
306
  let inner = block.inner(area);
@@ -143,8 +143,8 @@ fn render_header(f: &mut Frame, area: Rect, state: &AppState) {
143
143
  };
144
144
 
145
145
  // Line 1: Brand + version + mode + uptime - Bug 3 fix: Use "4Runr." with dot (matches brand logo)
146
- // Use npm package version (2.9.21) - matches package.json
147
- const PACKAGE_VERSION: &str = "2.9.21";
146
+ // Use npm package version (2.9.22) - matches package.json
147
+ const PACKAGE_VERSION: &str = "2.9.22";
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.21",
3
+ "version": "2.9.22",
4
4
  "type": "module",
5
- "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.21: Improved Connection Portal status display - clear bordered boxes for connecting/connected/error states. v2.9.20: Fixed Setup Portal navigation. v2.9.17: Portals are now standalone base screens. ⚠️ Pre-MVP / Development Phase",
5
+ "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.22: Connection Portal status fixes - immediate render, larger content area, prominent bordered boxes. v2.9.21: Improved status display. v2.9.20: Fixed Setup Portal navigation. ⚠️ Pre-MVP / Development Phase",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
8
  "4runr": "dist/index.js",