Added
- Explorer — a Zed-style file-and-folder explorer for the active workspace. A left project panel (
cmd-shift-e, top-bar folder toggle, or the ⌘P row) renders the workspace as a virtualized tree: expand/collapse, case-insensitive filter, a hidden-files toggle, devicon glyphs,M/A/D/R/Ugit-status badges, and keyboard navigation (arrows, home/end,cmd-←/cmd-→, enter/space). The walk is gitignore-aware (nested.gitignore/.ignore, global and repo excludes; symlinks never followed) and runs off-thread with a bounded entry cap surfaced honestly as "truncated". Right-clicking a row offers Open, Open in Default App, Reveal in File Manager, and Copy Path / Relative Path. Clicking a file opens a full-page Files editor: a tab strip over syntax-highlighted code with line numbers, editable Markdown (with an Edit/Preview toggle), or an image, with a path/size/line-count toolbar and a save-status chip. Code, text, and Markdown files are editable and autosave to disk (debounced;cmd-ssaves now); unsaved tabs carry a dot, and external changes are flagged rather than silently overwriting edits. Binary files, oversized files (2 MiB), truncated files, non-UTF-8 files, and directories get an honest notice instead of a lossy dump, and never enter the editor. The workspace watcher refreshes the tree and the open file on change.cmd-wcloses the active tab (the last tab, orcmd-shift-w, closes the surface), and the toolbar X returns to the chat. - Editing — the Explorer's editor (and the chat composer) supports undo/redo (
cmd-z/cmd-shift-z), where a run of typing within 400 ms coalesces into a single undo step and a caret move starts a new one. History is bounded by both step count and total bytes so a whole-file buffer cannot balloon memory. - Explorer file operations — create, rename, and delete files and folders from the project panel. New File and New Folder sit in the panel header and in a directory's right-click menu; Rename edits a row's name in place; Delete asks first and moves the item to the OS Trash on macOS (permanent delete elsewhere, with the confirmation worded to match). Names are validated before anything touches disk, a create never clobbers an existing file, and a rename refuses an occupied name. An operation is refused while an open Files tab under the target has unsaved edits, so it can never race an autosave or silently discard a buffer; a renamed file's open tab follows the new path, and a deleted one closes.
- More code fonts — the Code font picker now offers seven more bundled faces alongside the existing set: DM Mono, IBM Plex Mono, Inconsolata, Noto Sans Mono, Space Mono, Anonymous Pro, and Martian Mono. Like the rest of the catalog they ship as subset static TTFs, so a picked face resolves without an OS dependency.
Fixed
- Explorer rows now fill the panel width, matching the Review pane's file tree. The selection/hover highlight no longer collapses to a narrow pill around the devicon, and git badges align to the right. This also fixes the inline rename and new-file prompts, which rendered as an empty bubble: the prompt input is a
ComposerInput, which has no intrinsic width, so on a content-sized row itsflex_1collapsed to zero. A regression test renders the real panel and asserts the prompt input keeps a usable width. - The Explorer's row context menu opens at the pointer, flipping above/left when it would overflow the window. It was pinned to the panel's top-left, so a row's menu always appeared at the top of the tree regardless of where the row was right-clicked.
- Closing a file tab keeps keyboard focus inside the Files surface: it moves to the newly active editor, or to the surface itself for preview/read-only tabs, instead of being dropped with the removed editor. Previously focus was lost after the first close (when the next tab did not paint an editor), so
cmd-wstopped working. Closing a tab to the left of the active one also selected the wrong neighbour. - Search and filter placeholders (provider, model, settings, plugins, skills, side pane, git panel, usage, in-transcript find, branch/workspace pickers) now follow a language change immediately instead of keeping the language they were created in. Placeholders are resolved from translation keys at paint time.
- With no saved language preference,
Systemnow walks the OS's ordered preferred-language list and picks the first language Orbit ships (falling back through unshipped choices such as Hindi) instead of defaulting to English. The macOS bundle also declares its supported localizations. - The setup page's dependency descriptions follow a language change without re-probing the host.