Skip to content

Commit 8c1e835

Browse files
mostlygeekwedowremyguercio
authored
internal/bridges: add tailnet bridge support (#20)
Add using tsnet.Server as a local http proxy to an Aperture instance on the tailnet. This enables using Aperture without tailscaled installed and running on the host machine. --------- Signed-off-by: Remy Guercio <remy@tailscale.com> Co-authored-by: Greg Wedow <gregwedow@tailscale.com> Co-authored-by: Remy Guercio <remy@tailscale.com>
1 parent d298d26 commit 8c1e835

17 files changed

Lines changed: 2082 additions & 122 deletions

File tree

cmd/aperture/main.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ import (
1212
"strings"
1313

1414
tea "github.com/charmbracelet/bubbletea"
15+
"github.com/tailscale/aperture-cli/internal/bridges"
1516
"github.com/tailscale/aperture-cli/internal/config"
1617
"github.com/tailscale/aperture-cli/internal/profiles"
1718
"github.com/tailscale/aperture-cli/internal/tui"
1819

1920
// Side-effect imports register each client with internal/clients.
2021
_ "github.com/tailscale/aperture-cli/internal/clients/claudecode"
2122
_ "github.com/tailscale/aperture-cli/internal/clients/codex"
23+
_ "github.com/tailscale/aperture-cli/internal/clients/copilot"
2224
_ "github.com/tailscale/aperture-cli/internal/clients/gemini"
2325
_ "github.com/tailscale/aperture-cli/internal/clients/opencode"
2426
)
@@ -128,9 +130,19 @@ func main() {
128130
// Register Claude Desktop on supported platforms (darwin, windows).
129131
profiles.RegisterIfSupported()
130132

131-
p := tea.NewProgram(tui.NewModel(g, buildVersion))
133+
bridgeManager := bridges.NewManager(g.Debug)
134+
p := tea.NewProgram(tui.NewModel(g, buildVersion, bridgeManager))
135+
136+
var exitCode int
132137
if _, err := p.Run(); err != nil {
133138
slog.Error("launcher error", "err", err)
134-
os.Exit(1)
139+
exitCode = 1
140+
}
141+
if err := bridgeManager.Close(); err != nil {
142+
slog.Error("shutting down bridges", "err", err)
143+
exitCode = 1
144+
}
145+
if exitCode != 0 {
146+
os.Exit(exitCode)
135147
}
136148
}

go.mod

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,72 @@
11
module github.com/tailscale/aperture-cli
22

3-
go 1.26
3+
go 1.26.2
44

55
require (
66
github.com/charmbracelet/bubbletea v1.3.10
77
github.com/charmbracelet/lipgloss v1.1.0
8+
tailscale.com v1.98.1
89
)
910

1011
require (
12+
filippo.io/edwards25519 v1.2.0 // indirect
13+
github.com/akutz/memconn v0.1.0 // indirect
14+
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect
1115
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
1216
github.com/charmbracelet/colorprofile v0.4.2 // indirect
1317
github.com/charmbracelet/x/ansi v0.11.6 // indirect
1418
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
1519
github.com/charmbracelet/x/term v0.2.2 // indirect
1620
github.com/clipperhouse/displaywidth v0.11.0 // indirect
17-
github.com/clipperhouse/stringish v0.1.1 // indirect
1821
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
22+
github.com/coder/websocket v1.8.12 // indirect
23+
github.com/creachadair/msync v0.7.1 // indirect
24+
github.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa // indirect
1925
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
26+
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
27+
github.com/gaissmai/bart v0.26.1 // indirect
28+
github.com/go-json-experiment/json v0.0.0-20250813024750-ebf49471dced // indirect
29+
github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 // indirect
30+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
31+
github.com/google/btree v1.1.3 // indirect
32+
github.com/google/go-cmp v0.7.0 // indirect
33+
github.com/hdevalence/ed25519consensus v0.2.0 // indirect
34+
github.com/huin/goupnp v1.3.0 // indirect
35+
github.com/jsimonetti/rtnetlink v1.4.0 // indirect
36+
github.com/klauspost/compress v1.18.5 // indirect
2037
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
2138
github.com/mattn/go-isatty v0.0.20 // indirect
2239
github.com/mattn/go-localereader v0.0.1 // indirect
2340
github.com/mattn/go-runewidth v0.0.20 // indirect
41+
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 // indirect
42+
github.com/mdlayher/socket v0.5.0 // indirect
43+
github.com/mitchellh/go-ps v1.0.0 // indirect
2444
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
2545
github.com/muesli/cancelreader v0.2.2 // indirect
2646
github.com/muesli/termenv v0.16.0 // indirect
47+
github.com/pires/go-proxyproto v0.8.1 // indirect
2748
github.com/rivo/uniseg v0.4.7 // indirect
49+
github.com/safchain/ethtool v0.3.0 // indirect
50+
github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d // indirect
51+
github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect
52+
github.com/tailscale/hujson v0.0.0-20260302212456-ecc657c15afd // indirect
53+
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
54+
github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976 // indirect
55+
github.com/tailscale/wireguard-go v0.0.0-20260427181203-e3ac4a0afb4e // indirect
56+
github.com/x448/float16 v0.8.4 // indirect
2857
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
29-
golang.org/x/sync v0.19.0 // indirect
30-
golang.org/x/sys v0.41.0 // indirect
31-
golang.org/x/text v0.34.0 // indirect
58+
go4.org/mem v0.0.0-20240501181205-ae6ca9944745 // indirect
59+
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
60+
golang.org/x/crypto v0.50.0 // indirect
61+
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
62+
golang.org/x/net v0.53.0 // indirect
63+
golang.org/x/oauth2 v0.36.0 // indirect
64+
golang.org/x/sync v0.20.0 // indirect
65+
golang.org/x/sys v0.43.0 // indirect
66+
golang.org/x/term v0.42.0 // indirect
67+
golang.org/x/text v0.36.0 // indirect
68+
golang.org/x/time v0.12.0 // indirect
69+
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
70+
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
71+
gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8 // indirect
3272
)

0 commit comments

Comments
 (0)