Hongwei Qinandl0ng-ai e1efae2809 fix(ui): read the Info panel agent row off one pane, and shorten Windows paths to their leaf (#543, #544) (#570)
* fix(ui): read the Info panel agent row off one pane, and shorten Windows paths to their leaf (#543, #544)

Two rows in the Info panel were misreading a split tab or a Windows
path.

The agent row took its name from `tab.agent` (the first leaf with an
agent) and its status from `tab.agent_status` (the most urgent across
the whole tab); the two resolve independently, so a split tab running
two agents could show one pane name beside the other pane state — a
row no leaf ever had. Both now come from the detail pane when it has
an agent, falling back to the tab aggregate only when the focused leaf
has none, so the row holds while focus sits on a plain shell but never
splices.

The cwd row split the path on `/` only, so a backslash-spelled path —
any agent-reported cwd (`agent_session.cwd` arrives as `C:\…`), a cmd
pane, a shell-integration-off pane, or the seed cwd before the first
prompt — elided its tail and hid the directory own name. The split
now takes the last of either separator, and is not cfg-gated: the panel
shows remote paths, so a Windows build describes Unix paths and vice
versa. The `~` shortening moves into a shared `path_display` helper
reading `USERPROFILE` as well as `HOME` and comparing with separators
normalized and case folded; the tab strip `abbreviate_home` and the
home picker `display_path` had the same HOME-only miss and now use
it too. Tests pin backslash, mixed-separator, drive-root and UNC shapes.

* fix(ui): hold the agent row's fallback to one leaf, and stop the home test leaking

Review follow-ups on the #543/#544 pair.

- The fallback branch still spliced. When the focused leaf carries no
  agent the row fell back to `tab.agent` + `tab.agent_status`, which is
  exactly the pair the fix set out to break up: the first leaf with an
  agent, beside the highest urgency anywhere in the tab. A three-way
  split with focus on a plain shell could still read `Claude · Working`
  off two different panes. `Tab::agent_row` now picks the most urgent
  agent leaf and answers both halves out of it; `agent_status` is that
  pair's status, so the tab strip's badge is unchanged.

- `path_display`'s test home was a process-global that no test ever
  cleared, so once one of these tests ran, every later `abbreviate_home`
  in the binary read the pinned home — including `ui::home`'s own test,
  which sets `HOME` and expects to see it. Ordering decided whether it
  passed. The comparison moves into `abbreviate_under(path, home)` and
  the tests hand their home in; nothing global is left to leak. Adds
  the trailing-separator home and non-ASCII component cases the byte
  boundary reasoning turns on.

---------

Co-authored-by: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com>
2026-08-13 09:38:49 +08:00
2026-08-12 18:41:37 +08:00
2026-08-12 18:41:37 +08:00

tty7

tty7

A terminal workbench: persistent sessions, remote work, agents.

Pure Rust · GPU rendering on Zed's gpui · VT core from Alacritty


CI Version License Discord

English · 简体中文


tty7 with a tab sidebar of agent sessions across several repos, running Claude Code

Why

  • Performance — ~2× the throughput of Alacritty, Ghostty, or Kitty (benchmarks)
  • Persistent sessions — quit or reboot; your shells and supported agent sessions keep running, no tmux
  • Editor-grade input — suggestions, completion, highlighting, history search
  • Remote development — files, repos, panes, and git data stay on the remote machine
  • Native SSH — profiles, SFTP, port forwarding, and jump hosts
  • Agent-aware — Claude Code, Codex & co.: status, notifications, git context
  • CLI + Skills — agents create panes, run commands, and inspect output

Install

Native builds for each platform on Releases:

macOS …-macos-arm64.dmg · …-x86_64.dmg drag into Applications
Windows …-setup.exe · portable ….zip
Linux …-x86_64.AppImage chmod +x and run — X11/Wayland libraries bundled

What's inside

Editor-grade input ghost suggestions from history · explained tab completion · syntax highlighting · multi-line editing · click places the caret · ⌃ R fuzzy history
Window tabs & splits · ⌘ P palette · ⌘ F scrollback search · nine themes · IME
Agent-aware per-pane detection (18 CLIs): status dot · notifications · branch + diff · resume after reboot · tray icon when input is needed
Remote workspaces remote files, repos, changes, diffs, worktrees, tabs, and panes · reconnect from any client and continue where you left off
CLI + Skills bundled tty7 CLI · agent skill · pane/workspace control · real PTY commands · output, process, port, and agent status
SSH native russh stack: profiles with keychain secrets · SFTP panel · port forwarding · jump hosts · one-time, unprivileged tty7-server install

Full documentation lives in docs/keyboard shortcuts · config.json · CLI reference. The agent-facing CLI interface is also documented in skills/tty7/SKILL.md.

Install the skill with:

npx skills add l0ng-ai/tty7    # install
npx skills update tty7         # update later

Benchmarks

Same machine, same day, same 155×40 grid — Apple M1 Pro, macOS 26.3.1, five-run averages (2026-07-04):

tty7 Alacritty Ghostty Kitty
Plaintext I/O — 11 MB cat (lower = better) 95 ms 239 ms 179 ms 185 ms
DOOM-fire frame rate (higher = better) 888 fps 485 fps 552 fps 617 fps
Cold-launch memory 116 MB¹ 105 MB 128 MB 130 MB

¹ GUI 105 MB + the persistent server 11 MB.

Methodology and one-command reproduction: scripts/bench/.


S
Description
A terminal workbench in pure Rust: shells, persistent sessions, SSH, coding agents. GPU-rendered on Zed's gpui, VT core from Alacritty.
Readme Apache-2.0
34 MiB
Languages
Rust 99.1%
Shell 0.5%
PowerShell 0.2%
Inno Setup 0.1%