Repository navigation
Colab Shell v2.0.1
Colab Shell: Notebook & TTY (v2.0.1) fixes the two biggest terminal pain points — content loss on tab switches and permanent disconnection after backgrounding the app — plus UX polish across onboarding, home, and notebooks.
🖥️ Terminal Resilience (the headline fixes)
- Tab switching no longer loses terminal content — every stdout chunk is now mirrored into a per-tab scrollback buffer in Python. When a terminal's view is recreated (tab switch, remount), the buffer is replayed into it, so each tab keeps its own full history.
- WebSockets owned by the panel, not the widget — terminal connections live on
TerminalEntryat panel level instead of being tied to the widget's mount cycle, so switching tabs or re-rendering the session screen no longer kills background shells. - Automatic reconnect with backoff — when Colab's proxy closes an idle socket (typical after backgrounding the app), the client now re-attaches to the same PTY by name with exponential backoff instead of showing "Disconnected" forever.
- Reconnect on app resume — returning from Android background triggers a connectivity probe and re-attaches any dead terminal sockets; your shell (cwd, env, variables) is exactly where you left it.
⚙️ Terminal Settings That Actually Apply (flet-terminal 0.3.7)
- Zoom / theme / blink / search now apply instantly and reliably — flet-terminal 0.3.7 replaces
Control.update()inside frozen declarative trees with a session-level patch helper (control_update), fixing updates that silently no-op'd once Flet detached the control's parent chain. - Scroll freely while selecting text — the terminal no longer snaps back to the bottom on every rebuild while the keyboard is open; auto-follow only happens while you're already at the bottom. Selection events are debounced so drag-select doesn't flood the bridge.
- Search as you type — the terminal search bar matches live (350 ms debounce); arrows still step through matches.
📓 Notebooks
- Import
.pyfiles — notebook import now accepts Python scripts in addition to.ipynb. Files using# %%cell markers are split per block (# %% [markdown]becomes a markdown cell); plain scripts import as one code cell.