Kaede Akino dc5ed75c0e Move find and creation into the window toolbar
The window had no toolbar at all and four competing Find fields: a strip
on each Vault page, a bar inside the SSH pane, a field in the SFTP path
bar, and the sidebar footers. Which one Command-F meant depended on where
the caret happened to be, and two could be on screen at once.

There is now one native NSSearchField in the titlebar, pointed at whatever
content is in front — see WindowModel.findKind, which resolves a split
Workspace to its focused pane rather than to "any session in it". Creation
verbs sit opposite it in a Notes-style square.and.pencil control, chosen
from the main content and never from the sidebar mode. The dashed New
tiles and the page toolbars are gone; the card canvas answers a right-click
with the same verbs, scoped to the section under the pointer.

Return and Command-G used to disagree about which way a terminal search
walks. Both now mean Ghostty's .previous, which is the direction that finds
matches when a search starts at the bottom of the buffer.

The sidebar's own bottom search stays, because it narrows the sidebar's
list rather than the content in front. Its three history modes are one card
with four fillings on one list technology, so their edges line up and
opening a host no longer makes Recents jump under the pointer. Every row
draws its right-click menu natively and outlines itself on the filled
shape; SwiftUI's contextMenu highlighted the row plus its margin.

Fixes found along the way:

- The terminal re-claimed first responder on every SwiftUI update, so
  typing in any field outside the pane lost the caret after each keystroke.
- Folding Pinned/Chats reconfigured the header's hosting view from inside
  the click that asked for it.
- The Assistant's drop container cached the dragged id from a render pass
  AppKit's modal drag loop can start before, hiding the insertion line.
- The host chooser inferred sheet-vs-column from the front destination, so
  the sheet raised from the Snippets shelf over Vault never dismissed, and
  it had no height to show a host in.

Steering, the composer and the two composer popovers now share one glass
surface. Tags are derived from hosts, so deleteTag goes with the popover
that called it.

838 tests pass. The visual claims are unverified: screencapture returns
black frames in this environment.
2026-08-28 21:22:46 +08:00
2026-08-27 18:03:20 +08:00
2026-08-24 18:20:20 +08:00
S
Description
AI-driven remote workspace for Mac, iPhone, and iPad.
https://termind.akinokaede.com
GPL-3.0
23 MiB
0 Stars 1 Watchers 0 Forks
Languages
Swift 98.9%
Python 0.8%
Ruby 0.3%