Skip to content

Releases: Nwokike/CollabShell

Collab Shell v2.2.0 (pre-release, pending approval)

Choose a tag to compare

@github-actions github-actions released this 24 Oct 15:43

Automated multi-platform build generated from commit 72d6d7af5deb6c5f40727c77e3f4cf9787d46984.

This is a pre-release placeholder. Feel free to edit this title and description with your release notes right from the GitHub Releases UI.

Colab Shell v2.1.2

Choose a tag to compare

@github-actions github-actions released this 04 Sep 07:26

Colab Shell: Notebook & TTY (v2.1.2) fixes the false "update available" prompt from 2.1.1, plus general bug fixes and expanded test coverage.

  • False update prompt fixed. One version spot was missed in the last bump, so the app kept flagging 2.1.1 as new even though you already had it. Update and it goes away.
  • General bug fixes and stability improvements.
  • Expanded automated test coverage, including a guard that keeps the version numbers in sync across every release.

Colab Shell v2.1.1

Choose a tag to compare

@github-actions github-actions released this 02 Sep 17:29

Colab Shell: Notebook & TTY (v2.1.1) fixes the long-standing "dead session" bug where leaving a session idle for hours caused new terminal tabs and file operations to fail with 404s, plus brings seamless in-app update notifications, a top-right version chip, and onboarding UI refinements.

🔄 Session Auto-Heal & Token Refresh (Headline Fix)

  • Sessions no longer die after hours idle — Google Colab's runtime proxy tokens expire after a few hours even while the VM remains active. Colab Shell now automatically syncs and refreshes the token on app resume, session sync, and on-demand.
  • Terminal tab resilience — Opening a new terminal tab or reconnecting to existing tabs now heals expired tokens on 404 and connects cleanly instead of throwing connection errors.
  • File Explorer self-healing — Browsing, uploading, and downloading files now automatically re-authenticates if the proxy token expired during a long session.
  • Kernel execution guard — Code execution and kernel restart no longer delete a live session when encountering a stale proxy token.

🔔 In-App Updates & Version Notifications

  • Top-right version chip — A clean version pill in the top-right header displays your current version and automatically flips to an "Update: vX.X.X Available!" badge when a new build is published.
  • Always-accessible changelog dialog — Tapping the version chip or the Settings version row opens a two-mode changelog: view offline release notes when up-to-date with a live "Check for Updates" button, or direct platform download buttons (Google Play / GitHub APK) when an update is available.

🎨 Onboarding & UI Polish

  • Ergonomic Auth Buttons — Fixed Google Sign-In and code verification buttons in onboarding to standard width instead of stretching across the entire desktop/tablet screen.
  • Centered responsive presentation — Onboarding slides and navigation are now neatly centered on wider viewports.

Colab Shell v2.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 10:43

Colab Shell: Notebook & TTY (v2.1.0) brings full desktop keyboard shortcuts to the Notebook, Terminal, and Files screens — Jupyter-standard cell shortcuts, leak-free terminal combos (via flet-terminal 0.3.8), and a context-aware F1 cheat sheet — plus the terminal top-bar overhaul you asked for.

⌨️ Notebook — Jupyter-standard shortcuts

  • Shift+Enter runs the cell and advances to the next (inserts a new one when at the last cell) — Ctrl+Enter runs in place — Alt+Enter runs and inserts below.
  • Ctrl+Shift+Enter runs all cells; Ctrl+S exports the notebook as .ipynb (same as the download icon).
  • Ctrl+Shift+A / B insert a code cell above/below; Alt+Up/Down moves the active cell; Ctrl+Shift+D deletes it; Ctrl+Shift+M toggles code ↔ markdown.
  • Escape leaves the editor (markdown renders immediately).
  • The active cell is highlighted; run-and-advance focuses the next editor automatically.

🖥️ Terminal — shortcuts that never leak into your shell

  • Powered by flet-terminal 0.3.8: combos are intercepted on the Dart side before the PTY, so nothing extra is typed into your command line.
  • Ctrl+Shift+T new terminal · Ctrl+Shift+W close · Ctrl+Shift+1..9 switch terminal · Ctrl+PageUp/PageDown cycle · Ctrl+Shift+F search · Ctrl+Shift+L clear · Ctrl+Shift+C/V copy/paste · Ctrl+Shift+=/-/0 zoom in/out/reset.

🛠️ Terminal top-bar fixes

  • Snug zoom buttons — the huge gap between zoom in/out is gone (compact Material density).
  • New Reconnect button — re-attaches the active terminal's socket to the same shell, no terminal reset.
  • Theme (colour) switcher is back — cycles Dracula → JetBrains Dark → Matrix Green → Colab Light right from the bar (now that it actually applies, thanks to the 0.3.7 fix).

📁 Files shortcuts

  • F5/Ctrl+R refresh · Alt+Up/Backspace parent folder · Ctrl+A select all · Ctrl+Shift+N new folder · Delete delete selection · Escape clear selection.

🌍 Global

  • F1 opens a shortcuts cheat sheet for whatever screen you're on; Ctrl+1..5 jumps between Home, Notebooks, Terminal, Files, Settings.

🧪 Under the hood

  • New keyboard engine (core/shortcuts.py + hooks/use_keyboard_shortcuts.py, ported from the proven KTV Player pattern) with a 21-test pytest suite; shortcut help text is ASCII-English-only by test.

Colab Shell v2.0.1

Choose a tag to compare

@github-actions github-actions released this 22 Aug 11:19

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 TerminalEntry at 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 .py files — 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.

Colab Shell v2.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 18:28

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.

Colab Shell v1.1.0

Choose a tag to compare

@Nwokike Nwokike released this 16 Jul 20:28

Colab Shell: Notebook & TTY (v1.1.0) is a major release bringing full real-time interactive terminal emulation, robust multi-platform storage normalization, enhanced remote file management, and polished action workflows.

🔥 Major New Features & Architectural Upgrades

1. Interactive PTY Terminal & Tabbed Workspace

  • Real-Time Web-Based Terminal (TTY) — Integrated live interactive terminal sessions directly into the session workspace via Google Colab's /api/terminals WebSocket endpoints.
  • Tabbed Session Interface — Seamlessly toggle between Notebook cell execution and Terminal shell tabs within an active cloud instance.
  • WebSocket Header & Protocol Engineering — Resolved remote connection rejections by injecting Origin: https://colab.research.google.com and properly formatting subprotocols (['colab-ws-token']) across tornado proxy tunnels.

2. Unified Storage & History Logging Infrastructure

  • Universal Storage Patching (storage_patch.py) — Intercepted and wrapped HistoryLogger.__init__, StateStore, and SettingsStore to ensure all execution logs and session histories persist reliably inside storage/history/ on both Android mobile devices and Linux desktop environments.
  • Full Backend Audit Logging — Added automatic HistoryLogger().log_event() hooks across all core operations: new_session, stop_session, exec_code, ls, upload, download, and rm.
  • Instant Log Visibility — Fixed previous issues where session history views displayed empty lists by eliminating split configuration directory paths.

3. Interactive File Manager Improvements

  • Parent Directory Navigation — Upgraded directory traversal using posixpath.dirname and posixpath.normpath to allow seamless browsing from subdirectories up to /content and root (/).
  • Instant UI Repainting — Uploading (upload) or deleting (rm) files now automatically refreshes directory listings (_load_files) and forces immediate UI repainting (page.update()) so changes appear instantly.
  • Native OS File Picker & Folder Downloading — Integrated ft.FilePicker so users can choose exact save destinations on their device without Android storage permission conflicts. Added comprehensive Zip-and-Download support for archiving and downloading entire remote directories.
  • Animated Progress Bars & Payload Sizes — Replaced indeterminate loading spinners with sweeping ft.ProgressBar controls that accurately report total payload sizes during uploads and downloads.
  • Path Normalization — Standardized POSIX path joining (posixpath.normpath) across all file operations to eliminate path double-slashes and clean up file transfers.

4. Action Bar & Home Dashboard Refinements

  • Home Quick Actions Redesign — Replaced ambiguous dashboard buttons with clear, action-oriented controls: New Notebook, Quick Terminal, and Cloud Files.
  • Intelligent New Session Routing — Launching a new instance directly from the Terminal, Files, or Notebooks dashboard actions now preserves the user's intent, routing straight into that feature view as soon as provisioning completes.
  • Robust Modal & Dialog Management — Eliminated UI freezing and unresponsive barriers across the app by replacing deprecated page.pop_dialog() calls with explicit dialog.open = False state management.
  • Live Output for Drive & GCP Auth — Wired live execution streaming (on_output=_action_output) to Mount Drive and Auth GCP buttons, showing immediate authorization prompts and progress updates directly in the snackbar.
  • Clearer Labeling — Updated the Browser action chip label to Colab Web for improved user clarity.
  • Google Play Title Compliance — Updated official app branding to Colab Shell: Notebook & TTY (28 characters, adhering to Google Play's 30-character limit).

CollabShell v1.0.0 — Initial Release

Choose a tag to compare

@Nwokike Nwokike released this 03 Jul 17:07

Welcome to the initial launch of CollabShell, an independent, premium client application designed to manage, monitor, and run Google Colab cloud environments directly from your mobile device. Built using the Flet framework with the Flutter engine and Python, CollabShell provides a beautiful, responsive, and native client interface wrapping the Google Colab CLI.


Core Features

1. Session Lifecycle & Accelerator Control

  • Accelerator Selection — Provision GPU tiers (T4 on the free tier; L4, G4, A100, H100 on Pro/Pro+) or TPU models (v5e1, v6e1) to handle deep learning, AI inference, and high-performance computing.
  • Kernel Management — Start new instances with custom names, check active runtime statuses, restart python kernels to clear variables, and stop/terminate instances to release compute quota.
  • Active Keep-Alive Daemon — Enable active background pings every 60 seconds to prevent Google from shutting down your VM due to idle timeouts.
  • Auto-Cleanup — Configure session termination on app disconnect to preserve compute credits, or keep them active when the app closes.

2. Interactive Notebook Cell Editor

  • Jupyter-Style Cells — Add, edit, delete, and re-order Code and Markdown cells.
  • Rich Output Console — Parse colorized ANSI logs, output streams, execution traces, and view inline generated images (e.g. Matplotlib charts).
  • Interactive Stdin Inputs — Support for interactive code prompts through clean pop-up dialog overlays when the remote kernel demands user input.
  • Google Cloud & Drive Integration — Mount your personal Google Drive filesystem directly to the VM path (/content/drive) or propagate credentials (GCP authentication) with one click.
  • Import / Export IPYNB — Load local .ipynb files to parse cell lists, and export your notebook progress back to standard Jupyter Notebook format.

3. Standalone Quick Run

  • One-Shot Script Run — Execute local .py scripts on temporary Colab VMs without writing code in the cell editor.
  • Script Customization — Pass custom command-line arguments to your scripts, specify execution timeouts, and choose to terminate or persist the VM afterward.
  • Live Output Stream — View output streams and logs in real-time as your python script compiles and runs.

4. Remote File Browser

  • Virtual Directory Navigation — Navigate the remote Linux filesystem of your Google Colab instance.
  • File Transfers — Upload local datasets and scripts from your mobile storage, download remote output assets to your local device Downloads folder, and delete files on the instance.

5. Chronological Event Logging & History

  • Event Trace Logs — Keep an audit trail of session creations, script executions, file transfers, and system automations.
  • Filters & Search — Filter event lists by type (executions, file operations, state transitions) or session name.
  • Export System Logs — Export history tables as .ipynb, .md, .jsonl, or .txt formats.

UI & Polish

  • Solarized Branding Palette — Custom Solarized and dark-mode designs with Outfit typography and RobotoMono monospace console text.
  • Swipe Onboarding Guide — Modern 3-step gesture onboarding introducing core features and handling permissions.
  • Responsive Layout — Responsive screen design adapts smoothly from compact mobile viewports to widescreen tablets.
  • Interstitial Ads — Built-in Google AdMob integration to support compute operations.

Performance & Security

  • Multi-threaded Async Architecture — Heavy CLI operations run non-blockingly via Python's asyncio.to_thread engine, ensuring the user interface remains smooth and interactive even during long remote VM assignments.
  • Mobile Forge Binary Compatibility — Recompiled native wheels (tornado, pyarrow) dynamically loaded from Flet's mobile forge to run the gRPC and websocket client bindings directly on Android.
  • Privacy-First Sovereignty — All network connections go directly to Google Cloud without middleman proxies, and authentication tokens are kept secure in local sandbox directories.