Releases: Codename-11/SubFrame
v0.15.1-beta
Fixes the Windows ConPTY first-byte-drop bug at its root with quiescence-based shell detection, replacing fragile fixed delays with adaptive output polling.
What's Changed
Bug Fixes
- ConPTY first-byte-drop (root cause fix) — replaced the 80ms fixed delay with
waitForOutputQuiet, which polls PTY output timestamps and resolves once output has been silent for 100ms. Handles slow shell profiles (oh-my-posh 800ms+) without wasting time on fast ones - Shell-ready detection for non-standard prompts — added quiescence fallback for prompts that don't match regex patterns (oh-my-posh with custom glyphs, etc.). Terminal goes quiet for 250ms → considered ready
- AI session launch reliability — interactive AI sessions now adapt to actual shell startup time instead of using a fixed delay
Improvements
TERMINAL_WRITE_SAFEIPC channel — new quiescence-aware terminal write used by agent launch and AI session manager- Workspace pill sorting — auto-sort now respects most-recently-selected order within activity tiers
- Workspace pill component refactor — extracted
WorkspacePillReorderItemfor cleaner drag/reorder separation
v0.15.0-beta
This release makes code editing a first-class experience in SubFrame — files open as persistent tabs alongside terminals, the FileTree gains full CRUD operations and smart filtering, and workspace pills dynamically surface your most active projects.
What's Changed
Features
- Editor Tabs in ViewTabBar — Files open as dedicated tabs alongside the Terminal tab. Both are accessible simultaneously — no more choosing between editor and terminal
- Split Code + Preview — Side-by-side editing and live preview for Markdown, HTML, CSS, and SVG files via a new toolbar button
- Breadcrumb Navigation — Clickable path bar above the inline editor for quick orientation in deeply nested files
- File Linting — Real-time syntax diagnostics for JSON, YAML, CSS/SCSS/LESS, and HTML directly in the editor
- New Language Modes — Syntax highlighting for Go, Shell/Bash, Dockerfile, TOML, and PowerShell
- File CRUD Context Menu — VS Code-style right-click menu with New File, New Folder, Rename, Duplicate, Delete, Open in Terminal, Copy Relative Path, Copy File Name, and Collapse All — all with icons
.gitignoreFiltering — FileTree respects.gitignorerules (including nested), significantly reducing noise- Lazy Directory Loading — No more 5-level depth limit. Directories load children on demand with loading spinners
- File Watcher — Tree auto-refreshes when files change on disk (chokidar-based, debounced, gitignore-aware)
- Dynamic Workspace Pills — Pills auto-sort by activity: running agents first (pulsing green), then terminals (blue), then idle. Smooth Framer Motion animations when order changes
- Workspace Pill Settings — Toggle auto-sort and configure max visible pills. Manual drag reorder overrides auto-sort with a reset button
Improvements
- Persistent Editor Sessions — Open editor tabs and the active file survive page reloads and project switches
- Editor Settings Toggle — "Open Files in Tabs" setting (default: on) with overlay dialog as opt-in fallback
- Inline Input for File Operations — VS Code-style in-tree text input for create and rename with smart filename selection
- Delete Confirmation Dialog — Warns about recursive directory deletion before proceeding
- Three-Tier Activity Indicators — Workspace pills distinguish between agent sessions (green pulse), terminal-only (blue dot), and idle (muted)
Bug Fixes
- Path Traversal Hardening — File CRUD validates absolute paths and blocks cross-drive
..traversal - Dirty Tab Close Guard — Closing an editor tab with unsaved changes now prompts for confirmation
- Session Restore Validation — Editor tabs filtered to current project scope, preventing ghost tabs from deleted files
- HTML Linter Accuracy — Rewrote scanner to handle
>in quoted attributes, skip comments, and ignore script/style contents - CSS Linter Windows CRLF — No longer falsely reports unterminated strings with
\r\nline endings - File Duplicate Timeout — 5-second timeout prevents hanging on IPC failure
- Editor State Race Condition — Atomic Zustand updates prevent duplicate entries from rapid double-clicks
- File Watcher Resilience — Watcher initialization wrapped in try/catch to prevent incomplete state
v0.14.5-beta
Critical fix for the updater download that never starts — the root cause of the "Starting download..." stuck toast across all previous 0.14.x releases.
What's Changed
Bug Fixes
- Updater download never starts —
setupIPC()runs beforeinit()setsisPackaged, so theif (!isPackaged)early return insetupIPCalways triggered in packaged builds. This registered dev-mode no-op stubs (() => {}) forUPDATER_DOWNLOAD,UPDATER_CHECK, andUPDATER_INSTALLinstead of the realautoUpdaterhandlers. The download mutation resolved instantly withundefined, no download ever started, and no error was reported. Fixed by moving theisPackagedcheck inside each handler (evaluated at invocation time wheninit()has already run)
v0.14.4-beta
Hotfix for the Ctrl+Shift+Enter AI tool launch dropping the first character on Windows.
What's Changed
Bug Fixes
- Ctrl+Shift+Enter drops first character — launching an AI tool via keyboard shortcut no longer types "laude" instead of "claude". Root cause: on the reuse-terminal path, the command was written to the PTY only ~5-20ms after the keypress (just IPC round-trip time). ConPTY on Windows interpreted the first byte
'c'as Ctrl+C (0x03) because the physical Ctrl key was still held, and the shell silently swallowed it. Added an 80ms delay before the PTY write to allow modifier key release
v0.14.3-beta
Stability release fixing the terminal bell/character-drop when launching AI tools via Ctrl+Shift+Enter, and a workspace deactivation bug that could leave the entire UI unresponsive.
What's Changed
Bug Fixes
- Terminal bell on AI tool launch — Pressing Ctrl+Shift+Enter to start an AI tool no longer triggers a terminal bell or drops the first character of the command (typing "laude" instead of "claude"). Root cause: xterm's
attachCustomKeyEventHandlerreturningfalseskips xterm's key processing but does not callpreventDefault(), so the browser's default textarea input still leaked through to the PTY - Workspace deactivation UI freeze — Deactivating a workspace no longer leaves the entire UI unresponsive to clicks. Radix modal context menus set
pointer-events:noneon<body>while open; if the workspace pill (menu trigger) unmounted before the close animation completed, this style was permanently orphaned. Added post-operation safety cleanup for workspace deactivation and deletion
v0.14.2-beta
Stability release focused on fixing the updater download toast lifecycle, filling the nearly-empty Output panel with meaningful system logs, and improving editor keyboard handling.
What's Changed
Bug Fixes
- Updater toast download flow — Clicking "Download" on the update notification no longer silently dismisses the toast. Fixed three independent root causes: sonner action auto-dismiss race condition, TanStack Query mutation identity churn causing spurious effect re-runs, and updater status loss after renderer hot-reloads
- Editor F11 fullscreen toggle — Global keydown listener for fullscreen no longer tears down and re-registers on every settings mutation, eliminating brief gaps where the shortcut wouldn't respond
- SystemPanel layout — Refactored to sidebar-nav settings layout with categorical grouping
Improvements
- Output channel coverage — 7 managers now write to the Output panel (updater, plugins, settings, agent state, sessions, AI sessions, pipeline). The Extensions channel is no longer permanently empty. System-level events like update checks, plugin operations, AI session lifecycle, and pipeline errors are now visible in the Output tab instead of only in Electron DevTools
- Updater hot-reload recovery — The main process now tracks and re-broadcasts the last updater status when the renderer reloads, so download progress or "Restart Now" notifications survive hot-reloads
- Global hooks IPC — New
GET_GLOBAL_HOOKSchannel reads hooks configuration from~/.claude/settings.jsonwith source label extraction for the System panel
v0.14.1-beta
Fixes workspace pill scrollbar glitches, terminal bell on first input, and adds UI/UX polish across the workspace and terminal systems.
What's Changed
Bug Fixes
- Workspace pill scrollbar — Vertical and horizontal scrollbars no longer appear on the workspace pill container. Root cause was a CSS spec quirk where
overflow-y: visiblecomputes asautowhen the other axis isauto. - Terminal bell on first input — Bell sound now suppressed by default (opt-in via Settings). Previously, async settings load could leave the bell handler unregistered, causing beeps from shell OSC sequences.
- Multi-project workspace mixing — Workspaces with multiple directories now default to combined terminal view. No more clicking "Mix" every time you switch workspaces.
UI/UX Improvements
- Workspace pill overflow indicator — Ellipsis icon appears when hidden pills exist, fades out as they animate in on hover.
- Workspace pill keyboard navigation — ArrowLeft/Right cycles focus between pills (WAI-ARIA toolbar pattern).
- Terminal tab rename buttons — Confirm and cancel buttons alongside rename input for pointer/touch users.
- Terminal creation loading state — Spinner replaces empty state during creation; New Terminal button shows loading indicator and prevents double-clicks.
- Grid overflow badge — Readable "overflow" text badge replaces the barely-visible dot on terminals exceeding grid capacity.
- Project badges in combine mode — All terminal tabs show project name badge when workspace mixing is active, with 3-tier styling (native/foreign/pinned).
- Sidebar workspace selector moved above Projects/Files tab bar for clearer scope hierarchy.
- StatusBar agent tooltip shows dynamic agent count and click action hint.
Added
- AI tool capability model — Structured
AIToolFeaturesinterface tracks hooks, streaming, event names, config paths, and docs URLs for Claude Code, Codex CLI, and Gemini CLI. - Pipeline agent status feedback — Running pipeline stages show active AI agent tool usage in timeline and log view.
v0.14.0-beta
Fixes update notification reliability and connects all output channels to their subsystems for real-time logging in the Output panel.
What's Changed
Bug Fixes
- Updater 404 error spam — Background update checks no longer show raw stack traces when CI artifacts aren't uploaded yet. 404s are silently swallowed for automatic checks; manual checks show a friendly "try again in a few minutes" message.
- Download button disappears — Clicking Download in the update toast no longer silently fails. The download handler now immediately reports status and properly surfaces errors if the download can't start.
- Settings Download no feedback — The Download button in Settings > Updates now shows a disabled/loading state while the download initializes, with a "Connecting..." indicator before progress percentage appears.
Improvements
- Output channels wired to subsystems — The Output panel (ActivityBar bottom bar) now shows real-time logs from five previously-dormant channels:
- System — updater events (available, downloaded, errors), session snapshot save/restore
- Agent — terminal create/exit lifecycle events
- Pipeline — run start and completion with status
- API — server startup confirmation
- Git — branch checkout and create operations
Installation and Update
Grab the latest installer from GitHub Releases.
- Windows: SubFrame-Setup-0.14.0-beta.exe
- macOS: SubFrame-0.14.0-beta.dmg
If you already have SubFrame installed, update through the in-app updater or the System Panel.
v0.13.0-beta
This release introduces hot-update support so terminal sessions survive app restarts, plus stable workspace pills and shell-ready detection for AI tool launch.
What's Changed
Features
- Terminal Session Snapshot/Restore — Active terminal sessions are serialized (CWD, shell, scrollback, dimensions, AI agent state) before app quit or update and automatically restored on next launch. Uses atomic file writes to prevent corruption. Respects
restoreOnStartup,restoreScrollback, andautoResumeAgent(auto/prompt/never) settings. - Renderer Hot Reload — UI-only updates reload the renderer without killing the main process or terminal sessions. PTYs stay alive; xterm instances resync from backlogs via the new
TERMINAL_RESYNCIPC channel. - Pinned Workspace Pills — Collapsed workspace pills now maintain stable positions using LRU slot tracking. Switching between pinned workspaces just moves the active highlight — no reordering. Selecting a workspace from the expanded overflow replaces the least-recently-used pill.
- Shell-Ready Detection — Starting an AI tool now waits for shell prompt detection (
TERMINAL_SHELL_READYIPC) instead of a blind 1-second delay, with a 3-second fallback. Fixes garbled first command on slow-starting PowerShell sessions.
Bug Fixes
- Double-save race condition —
before-quitsnapshot is now skipped if graceful shutdown already saved, preventing file corruption from concurrent writes - Terminal dimensions — Session snapshots now capture actual PTY cols/rows instead of hardcoded 80x24
- Per-tool agent resume — Snapshot restore uses
claude --continuefor Claude Code and plain relaunch for Codex/Gemini - Session ID on resync — Hot reload now passes
sessionIdthrough to the Zustand store for proper session tracking
Installation and Update
Grab the latest installer from GitHub Releases.
- Windows: SubFrame-Setup-0.13.0-beta.exe
- macOS: SubFrame-0.13.0-beta.dmg
If you already have SubFrame installed, update through the in-app updater or the System Panel.
v0.12.1-beta
Patch release adding AI tool configuration management and UI polish.
What's Changed
Features
- AI Tool Configuration — new section in System panel showing config file status for Claude Code, Gemini CLI, and Codex CLI at both global (
~/) and project levels. Collapsible per-tool sections with inline summary (files found + warning count). Detects and validates:CLAUDE.md,GEMINI.md,AGENTS.md,settings.json,instructions.md— with warnings for invalid JSON, empty files, and large files. Open existing files in editor or create from templates.
Bug Fixes
- Panel dropdown indicator — the right panel group selector now shows a ChevronDown chevron so it's clear the active panel name is a clickable dropdown
- AI Analysis shortcut conflict — changed from Ctrl+Shift+I (conflicts with Electron DevTools) to Ctrl+Shift+J
Installation and Update
Grab the latest installer from GitHub Releases.
- Windows: SubFrame-Setup-0.12.1-beta.exe
- macOS: SubFrame-0.12.1-beta.dmg
If you already have SubFrame installed, update through the in-app updater or the System Panel.