Force redraw on reconnect and speed up screenshots

- Send Ctrl+L and resize on reconnect to avoid black screens
- Increase replay buffer to 256KB
- Add get_screen_has_changes for non-destructive dirty checks
- Tighten screenshot cache TTLs and SSE debounce
- Update tests for new behavior and timings
This commit is contained in:
GitHub Copilot
2026-01-27 19:09:41 +00:00
parent 13816ae2fd
commit bb94f9359d
4 changed files with 36 additions and 2 deletions
+8
View File
@@ -33,6 +33,8 @@ DEFAULT_TERMINAL_SIZE = (132, 45)
SCREENSHOT_CACHE_SECONDS = 0.3
SCREENSHOT_MAX_CACHE_SECONDS = 20.0
CLEAR_AND_REDRAW_SEQ = "\x0c" # Ctrl+L: clear and redraw
WEBTERM_STATIC_PATH = Path(__file__).parent / "static"
@@ -369,6 +371,12 @@ class LocalServer:
if session is None or not session.is_running():
self.session_manager.on_session_end(session_id)
session_id = None
else:
# Force terminal redraw on reconnect to avoid blank screen
if hasattr(session, 'force_redraw'):
await session.force_redraw()
if hasattr(session, 'send_bytes'):
await session.send_bytes(CLEAR_AND_REDRAW_SEQ.encode('utf-8'))
session_created = session_id is not None
+1 -1
View File
@@ -25,7 +25,7 @@ if TYPE_CHECKING:
log = logging.getLogger("textual-web")
# Maximum bytes to keep in replay buffer for reconnection
REPLAY_BUFFER_SIZE = 64 * 1024 # 64KB
REPLAY_BUFFER_SIZE = 256 * 1024 # 256KB
# Default screen size for pyte emulator
DEFAULT_SCREEN_WIDTH = 132