From 2281015148582a5a6bb42f8f344ab509c2c6f229 Mon Sep 17 00:00:00 2001 From: Ralf Grubenmann Date: Mon, 5 Oct 2026 09:29:47 +0200 Subject: [PATCH] feat: show ui session url in commands --- src/cli/cmd/session/start.rs | 17 +++++++++++++++++ src/httpclient/data.rs | 12 +++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/cli/cmd/session/start.rs b/src/cli/cmd/session/start.rs index ba31fc8..d5a35d9 100644 --- a/src/cli/cmd/session/start.rs +++ b/src/cli/cmd/session/start.rs @@ -25,6 +25,9 @@ pub struct Input { /// Start the session and show the logs until it ends or the user cancels with Ctrl-C. #[arg(long, default_value_t = false)] pub wait: bool, + /// Open the session in the browser. + #[arg(long, default_value_t = false)] + pub open: bool, } #[derive(Debug, Snafu)] @@ -49,6 +52,20 @@ impl Input { .await .context(HttpClientSnafu)?; + if self.open + && let Err(e) = open::that(result.effective_url().as_str()) + { + ctx.write_result(&SimpleMessage { + message: format!( + "Couldn't open browser, please navigate to {}: {}", + result.effective_url(), + e + ), + }) + .await + .context(WriteResultSnafu)?; + }; + if self.wait { ctx.write_result(&SimpleMessage { message: format!("Started session {}. Waiting for logs...", result.name,), diff --git a/src/httpclient/data.rs b/src/httpclient/data.rs index b2ef005..6b50302 100644 --- a/src/httpclient/data.rs +++ b/src/httpclient/data.rs @@ -199,7 +199,8 @@ where for r in data { let started = r.started.format(); let status = r.status.state.to_str(); - let data = vec![&r.name, &r.project_id, status, &started, &r.url]; + let url = r.effective_url(); + let data = vec![&r.name, &r.project_id, status, &started, &url]; builder.push_record(data); } builder.insert_record(0, vec!["Name", "Project Id", "Status", "Started", "Url"]); @@ -279,6 +280,15 @@ pub struct SessionStartResponse { pub started: Timestamp, pub session_type: SessionMode, pub url: String, + pub external_url: Option, +} +impl SessionStartResponse { + pub fn effective_url(&self) -> String { + match &self.external_url { + Some(u) => u.clone(), + None => self.url.clone(), + } + } } impl fmt::Display for SessionStartResponse {