Repository navigation
Colab Shell v2.0.0
Colab Shell: Notebook & TTY (v2.0.0) is a ground-up rewrite of the entire UI layer to Flet 0.86's new React-like declarative API (@ft.component, @ft.observable, use_state, use_effect), plus major terminal, theming, and reliability improvements.
🔥 Architecture: React-Like Declarative UI
- Full Declarative Migration — Every screen (Home, Session, Files, History, Settings) rebuilt as functional components with observable state models. State mutations trigger surgical re-renders instead of full-page
page.update()repaints. - Observable State Models —
AppState,TerminalPanelState,TerminalEntry, and per-screen models drive all UI reactively; no manual refresh calls. - Frozen-Control Safety — All imperative mutations inside declarative trees use
thaw()context managers matching Flet's internal_before_update_safepattern.
🖥️ Terminal Overhaul
- Terminal Theme Follows App Mode — Terminal automatically switches between dark (JetBrains Dark) and light (Colab Light) themes when the app's light/dark mode changes, including live OS brightness flips in System mode.
- Starts in /content — New terminals
cd /contentimmediately after connecting, landing in the shared data directory instead of/root. - Real Cursor Blink — Implemented a Dart-side blink timer (
setCursorVisibleMode+notifyListeners) since upstream xterm 4.0.0 has no built-in blink. - Reactive CTRL/ALT Modifiers — Sticky modifier buttons repaint instantly via observable subscription (
ModifierState+@ft.componentModifierKey). - Inline Header Controls — Zoom in/out, theme cycle, and search toggle buttons directly in the terminal tab bar.
- FAB Inherits Terminal Settings — The session FAB menu exposes all terminal settings (theme presets with checkmarks, cursor blink, search bar, zoom in/out/reset) synced live with the terminal panel.
- Fullscreen Removed — Replaced by the merged header; no longer needed.
📐 One-Line Merged Session Header
- SpanInsight-Style Header — Session name (ellipsized with tooltip), live status dot, hardware badge (CPU/GPU/TPU), Notebook/Terminal tab switcher, and theme toggle all in a single compact header line. Separate status card eliminated.
🔐 Mount Drive & Auth GCP — Fixed
- Credential Propagation — Rewrote the Drive auth hook to match
colab-cli's proven logic: dry-run check → user authorization dialog → propagate credentials (dryrun=false) with retries → always sendinput_replyso the kernel resumes. - jupyter-kernel-client Pin — Pinned
<1.0because v1.0.1 renamedKernelClient→JupyterKernelClient, breakinggoogle-colab-cli0.6.0's runtime construction (TypeError: 'NoneType' object is not callable).
🎨 Adaptive Theming & Contrast
- Light/Dark Glass Cards — All glass surfaces, banners, and selection toolbars use adaptive opacity/border values resolved from the active theme mode.
- Files Selection Bar — Replaced orange-on-orange (
SECONDARY_CONTAINERbg +PRIMARYicon) with adaptive glass background and PRIMARY accent when selected. - Compact Appearance Selector — Settings → Appearance now uses horizontal icon+label cards (SpanInsight-style) instead of oversized radio rows.
🐛 Fixes
- Download Folder Beyond /content — Removed hardcoded
/contentprefix; absolute paths like/var,/root,/datalabnow download correctly. - Import .ipynb Crash — Fixed for Flet 0.86's
pick_files()returninglist[FilePickerFile](notFilePickerResult). - Notebook FAB Import Always Available — Import no longer gated behind
has_cells; accessible even in empty notebooks. - Offline Handling — Startup offline screen, home banner, and network guards on all operations; returning users no longer forced through OAuth onboarding when offline.