376a9384be62cd4b606ed125101dc65c43d210cb
Three fixes and a feature, all in the titlebar's blast radius. A toolbar with nothing in it is shorter than one holding a search field, and AppKit takes the window's content up with the titlebar when it shrinks. Connecting to a host from the sidebar changes the destination from Vault to a Workspace, which swapped a Find field for nothing — so the connection journey appeared and immediately jumped upward. The find item now reserves its height at zero width on destinations with nothing to search, so the toolbar is one size everywhere. The search field lost the keyboard after one letter because being searched is not a passive act: Ghostty focuses its terminal surface when a `search:` binding runs, and the SFTP list is held focused declaratively and takes it back when filtering rebuilds the rows. The field now checks, immediately after a text change, that it still has the keyboard — and only then, so clicking away deliberately still works. Folding Pinned or Chats crashed. The expansion flag lived in the list item, so folding changed that item's value, and ListViewKit answered by reconfiguring the header's hosting view — replacing the root view of the Button still dispatching the click. The row reads and writes the flag itself now; the item carries only the count, so a fold adds and removes conversation rows and never touches the header. The titlebar names what is in front: the page, the Workspace, or — in the Assistant — the conversation, because "Assistant" is where you are but the chat is what you want to read from across the desk. Welcome is named after the app. Resolved through a catalog of providers rather than a switch in WindowModel, so the window does not have to know that a Workspace is named after its host; the same shape ContextPanelDetailCatalog already uses. 842 tests pass.
Description
AI-driven remote workspace for Mac, iPhone, and iPad.
https://termind.akinokaede.com
23 MiB
0 Stars
1 Watchers
0 Forks
Languages
Swift
98.9%
Python
0.8%
Ruby
0.3%