* feat(links): open file links in tty7, resolved on the pane's own host
A clicked file path now opens in the built-in editor at the line and
column the link named, and the Files panel reveals it; a directory link
opens the panel on that directory. Settings -> Terminal -> Links -> Open
files with picks between the built-in editor, the OS file association
and a command, migrating anyone who had already set link_file_command.
Detection is split into a filesystem-free candidate parser and a probe
callback, so a pane whose paths live on another machine resolves them
there instead of against the local filesystem -- an absolute path used
to open this machine's copy silently. A pane running ssh typed into a
local shell can answer for neither side and no longer offers file links
at all.
Relative paths are measured from the directory the work is happening in
(the agent's, not the shell's kernel cwd) and then from the repository
around it, and a path that matches nothing under either now says so
instead of the click doing nothing.
* fix(links): keep a remote path off the local openers, and off a dead end
Review follow-ups on the file-link work.
- A file resolved on another machine now opens in the built-in editor
whatever `link_file_open` says. Under `system` or `command` the path was
handed to a local `open` / `code --goto`, which threw away the resolution
just done on the pane's host and silently showed this machine's copy — the
same bug this branch set out to fix, left live for two of the three modes.
A directory outside every tree root says so instead of opening a local file
manager on a path that belongs to the far side.
- `flush_link_probes` takes the host before it takes the wanted paths.
`take_wanted` moves them into the in-flight set on the promise that a call
is carrying them; a host that had gone away broke that promise for good and
left those paths permanently unanswered — no underline, and a click that
says nothing.
- `~` no longer borrows this machine's `$HOME` for a pane whose paths are
elsewhere. A cwd outside `/home` and `/Users` used to fall back to it, so
`~/.zshrc` on a Linux box became `/Users/me/.zshrc` and was asked about —
and possibly answered — over there.
- An unresolved absolute or `~`-rooted path no longer claims it was looked
for under the pane's directory. It never was: roots are only for relative
paths.
- A pending tree reveal counts down whether or not its row was found. A row
that never reported bounds kept the request alive for good, re-issuing a
scroll on every render and holding the column against a hand scroll.
- The repo root comes from `GitStatusCache` when the git-status probe has
already asked about that directory, rather than a second round trip.
Tests: the migration `link_file_open` exists for (an old config with a
command lands on Command, one without on the editor), a probe with no host
staying wanted, and `~` refusing this machine's home for another one.
* test(links): only claim a leading slash is absolute where it is
`is_rooted` asks `Path::is_absolute`, the same question `FileCandidate::paths`
asks before it decides the roots do not apply — and on Windows `/etc/hosts`
answers no to both. The predicate is consistent; the assertion was not, so it
now lives in a unix-gated test of its own next to the untouched one.
---------
Co-authored-by: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com>
38 pages under docs/, written against the source rather than the README:
config keys and their clamps from core::config, default keybindings from
ui::keymap, every CLI verb and flag from tty7-cli, agent aliases and
hook/fork/resume support from core::cli_agent, and Settings paths taken
from the actual en-US strings.
docs/features.md and its zh-CN translation are retired — everything in
them now lives in a page of its own, plus the two things they carried
that nothing else did (IME input, the performance notes). README and
README.zh-CN point at docs/ instead.
Screenshots and videos are placeholders for now: docs/images/placeholder.svg
with a caption naming what each shot should be.
Co-authored-by: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com>