Repository navigation
feat(app): open a local terminal - #167
Merged
Merged
Conversation
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
A local terminal is a tab whose terminal runs a program on this computer, through MyGo's terminal plugin without a Conn: the new Options > Terminal "Local terminal program" (localShell, per device, split into words with quotes), else the login shell or PowerShell. It opens from a button next to "+" in the session list's header and from the start page. Its row, terminal, command bar (with a history of its own), Commands tab and command editor work as a session's; the monitor and the Files, Transfers, Tunnels, Processes and Network pages say it has no server. It is not in "All sessions" but can be chosen. When the program exits the tab shows Exited and Reconnect starts it again; quitting asks about running ones. Closes #164 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015nMqJHsqtndDSqJDPp1qYv
The Transfers tab lists every session's transfers, so it shows them on a local terminal too; only Files, Tunnels, Processes and Network say they are not available there. Retry and Open act on each transfer's own session, as before. Refs #164 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015nMqJHsqtndDSqJDPp1qYv
TooonyChen
force-pushed
the
feature/local-terminal
branch
from
November 10, 2026 01:06
ffee3b6 to
d437330
Compare
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds local terminal tabs. A local terminal runs a shell on this computer instead of connecting to a server. It uses MyGo's terminal plugin with no
Conn, so it gets a pseudo-terminal on macOS and Linux and ConPTY on Windows. No new dependency.square-terminal, tooltip "Local terminal") sits between Options and "+" in the session list header. It opens a local terminal at the end of the list, andNoAutoSelectTabapplies as it does for a new session. The start page has a "Local terminal" button too, on the page with hosts and on the empty one. It opens the terminal in that same tab. There is no shortcut.Session.localandisLocal()mark a local terminal.Hoststays nil andisNewTab()is false for it. Checks sit at the entry points:reconnect, duplicate, the Files/Tunnels/Processes/Network pages, the monitor, the panel corner button,openPanelTab, Tab completion and server history.execAllowed(nil)is now false, andsessionDotin the Connections tree skips sessions with no host.historyID()andtarget()give a local terminal its own history key and its own subtitle.local(history/local.txt). Tab completes nothing and there is no server history.allSessions()(All sessions) leaves local terminals out, even when the send comes from a local terminal's own bar or Commands tab.targetSessions()(Choose sessions…) lists them.localShell, inlocalSettings, so it is not synced).config.SplitCommandLineis a small splitter that understands quotes. No splitter existed in the repo or the module graph. Single and double quotes work as in sh, and a backslash escapes the next character, except on Windows, where it is a literal path separator.docs/screenshots/(main, connections, quick-connect).localShellandhistory/local.txtin configuration.md; the new files in development.md. All in both languages, with the same headings. The README has a new "And also" bullet in both languages.Closes #164
Testing
go fmt ./...(no changes),go build ./...,go vet ./...,GOOS=windows go vet ./...,GOOS=darwin go vet .,go tool mygo vet,go test -race ./...: all pass after rebasing onto main.internal/app/local_test.gouse a real PTY withlocalShellset tosh -c 'echo ready; cat'. They skip on Windows and when the terminal library can't load.NoAutoSelectTabcase works. The start page entry works, on the page with hosts and the empty one.localhistory; Tab opens nothing. A quick command sends to it.internal/config/localshell_test.gotests the splitter, including the Windows cases, and thatlocalShellis not synced.pwsh,wsl.exe) and macOS pseudo-terminals, and the default login shell with no setting. The tests always setlocalShell.🤖 Generated with Claude Code
https://claude.ai/code/session_015nMqJHsqtndDSqJDPp1qYv