Skip to content

Colab Shell v2.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 18:28
· 83 commits to main since this release

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_safe pattern.

🖥️ 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 /content immediately 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.component ModifierKey).
  • 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 send input_reply so the kernel resumes.
  • jupyter-kernel-client Pin — Pinned <1.0 because v1.0.1 renamed KernelClient → JupyterKernelClient, breaking google-colab-cli 0.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_CONTAINER bg + PRIMARY icon) 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 /content prefix; absolute paths like /var, /root, /datalab now download correctly.
  • Import .ipynb Crash — Fixed for Flet 0.86's pick_files() returning list[FilePickerFile] (not FilePickerResult).
  • 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.