From bafaed37fefe84cb090fa3039b26ee6ecacc01c2 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 25 Nov 2025 05:48:00 +0100 Subject: [PATCH] chore: attach when starting relay tmux session --- src/cli/program.ts | 12 +++++++++--- src/cli/relay_tmux.ts | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/cli/program.ts b/src/cli/program.ts index b4444e71d..084437b2c 100644 --- a/src/cli/program.ts +++ b/src/cli/program.ts @@ -253,11 +253,17 @@ With Tailscale: program .command("relay:tmux") - .description("Run relay --verbose inside tmux (session warelay-relay), restarting if already running") + .description( + "Run relay --verbose inside tmux (session warelay-relay), restarting if already running, then attach", + ) .action(async () => { try { - const session = await spawnRelayTmux(); - defaultRuntime.log(info(`tmux session started: ${session} (pane running "pnpm warelay relay --verbose")`)); + const session = await spawnRelayTmux("pnpm warelay relay --verbose", true); + defaultRuntime.log( + info( + `tmux session started and attached: ${session} (pane running "pnpm warelay relay --verbose")`, + ), + ); } catch (err) { defaultRuntime.error(danger(`Failed to start relay tmux session: ${String(err)}`)); defaultRuntime.exit(1); diff --git a/src/cli/relay_tmux.ts b/src/cli/relay_tmux.ts index 049d88809..b31927c93 100644 --- a/src/cli/relay_tmux.ts +++ b/src/cli/relay_tmux.ts @@ -2,7 +2,10 @@ import { spawn } from "node:child_process"; const SESSION = "warelay-relay"; -export async function spawnRelayTmux(cmd = "pnpm warelay relay --verbose") { +export async function spawnRelayTmux( + cmd = "pnpm warelay relay --verbose", + attach = true, +) { await killSession(SESSION); await new Promise((resolve, reject) => { const child = spawn("tmux", ["new", "-d", "-s", SESSION, cmd], { @@ -15,6 +18,21 @@ export async function spawnRelayTmux(cmd = "pnpm warelay relay --verbose") { else reject(new Error(`tmux exited with code ${code}`)); }); }); + + if (attach) { + await new Promise((resolve, reject) => { + const child = spawn("tmux", ["attach-session", "-t", SESSION], { + stdio: "inherit", + shell: false, + }); + child.on("error", reject); + child.on("exit", (code) => { + if (code === 0) resolve(); + else reject(new Error(`tmux attach exited with code ${code}`)); + }); + }); + } + return SESSION; }