Add configurable Tailscale Funnel public ports - #89
Open
ljyonefineday wants to merge 11 commits into
Open
Conversation
The PTY helper gated answer injection on pending.endswith(b"\n> "), but the wizard's first prompt arrives as b'...\r\n> \x1b[3G'. The trailing cursor-column escape defeated the suffix test, so no answer was ever written and every guided setup assertion deadlocked until the 20s deadline. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ale_port # Conflicts: # CHANGELOG.md # README.md # README_ZH.md
The guided setup and setup wizard passed the raw port answer into normalizeTailscaleEndpoint, which throws on an out-of-range value, so one typo aborted the whole wizard and discarded every earlier answer. Pasting a hostname that already carried a :8443 suffix hit the same throw through the conflict branch. Both sites now split the typed hostname first, use its suffix as the port default, and re-ask until the answer is 443, 8443, or 10000. --tailscale-port was silently dropped for non-Tailscale tunnels; it now errors. An occupied public port reported generic "enable MagicDNS" advice instead of the real cause, so the failure hint now names the port and offers tailscale serve status and tailscale funnel --https=<port> off. The start banner drops the URL scheme so the Tunnel row fits its column at 80 columns. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ljyonefineday
marked this pull request as ready for review
August 12, 2026 14:15
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7da2d54308
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
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
:443, while enforcing CLI > environment > saved-profile precedence and same-source conflict checksWhy
Tailscale Funnel supports a small set of public HTTPS ports, but CodexPro previously could not configure that public port independently from its local listener. Existing legacy
hostname:portvalues also need deterministic migration and validation.Impact
Users can select a supported Funnel port without changing the local MCP server port. Existing default-port profiles remain compatible, and legacy saved/environment hostnames are canonicalized.
Security
No authentication or authorization behavior changes. Funnel port input is restricted to 443, 8443, or 10000, and invalid or conflicting values fail before Tailscale launches.
Validation
npm cinpm run buildnpm run smoke(all 12 suites)npm run stress(using an rg-free local fallback fixture; the tracked test file was restored and verified unchanged)npm pack --dry-run(101 files)