From a43d6a358ff6a6bdb465bfec14a208a84b2cb9ae Mon Sep 17 00:00:00 2001 From: Abhijay Jain Date: Fri, 26 Jun 2026 19:11:11 +0530 Subject: [PATCH 1/6] refactor: replace getTunnelStatus with GOOSE_DISABLE_NOSTR_SHARING config flag The tunnel status check was the only remaining use of getTunnelStatus in the UI, used to hide Nostr sharing in restricted/enterprise bundles. Replace it with an explicit GOOSE_DISABLE_NOSTR_SHARING config flag and remove the tunnel route, tunnel module, and tunnel_manager from AppState entirely. --- crates/goose-server/src/lib.rs | 2 - crates/goose-server/src/main.rs | 4 +- crates/goose-server/src/openapi.rs | 9 +- crates/goose-server/src/routes/mod.rs | 2 - crates/goose-server/src/routes/tunnel.rs | 28 - crates/goose-server/src/state.rs | 7 +- crates/goose-server/src/tunnel/lapstone.rs | 635 ------------------ crates/goose-server/src/tunnel/mod.rs | 57 -- crates/goose/src/config/base.rs | 2 +- ui/desktop/openapi.json | 54 -- ui/desktop/src/api/index.ts | 4 +- ui/desktop/src/api/sdk.gen.ts | 7 +- ui/desktop/src/api/types.gen.ts | 25 - .../components/sessions/SessionListView.tsx | 14 +- ui/desktop/src/main.ts | 1 + 15 files changed, 15 insertions(+), 836 deletions(-) delete mode 100644 crates/goose-server/src/routes/tunnel.rs delete mode 100644 crates/goose-server/src/tunnel/lapstone.rs delete mode 100644 crates/goose-server/src/tunnel/mod.rs diff --git a/crates/goose-server/src/lib.rs b/crates/goose-server/src/lib.rs index 2323f2877490..551a2fdbd71d 100644 --- a/crates/goose-server/src/lib.rs +++ b/crates/goose-server/src/lib.rs @@ -13,8 +13,6 @@ pub mod session_event_bus; pub mod state; #[cfg(any(feature = "rustls-tls", feature = "native-tls"))] pub mod tls; -pub mod tunnel; - // Re-export commonly used items pub use openapi::*; pub use state::*; diff --git a/crates/goose-server/src/main.rs b/crates/goose-server/src/main.rs index bbb12fe9489f..58f46b84346e 100644 --- a/crates/goose-server/src/main.rs +++ b/crates/goose-server/src/main.rs @@ -6,16 +6,14 @@ mod openapi; mod routes; mod session_event_bus; mod state; -mod tunnel; - use std::path::PathBuf; use std::{backtrace::Backtrace, panic::PanicHookInfo}; use clap::{Parser, Subcommand}; use goose::agents::validate_extensions; use goose_mcp::{ - mcp_server_runner::{serve, McpCommand}, AutoVisualiserRouter, ComputerControllerServer, MemoryServer, TutorialServer, + mcp_server_runner::{McpCommand, serve}, }; #[derive(Parser)] diff --git a/crates/goose-server/src/openapi.rs b/crates/goose-server/src/openapi.rs index 38883c151e67..b13927328fec 100644 --- a/crates/goose-server/src/openapi.rs +++ b/crates/goose-server/src/openapi.rs @@ -1,10 +1,10 @@ +use goose::agents::ExtensionConfig; use goose::agents::extension::Envs; use goose::agents::extension::ToolInfo; -use goose::agents::ExtensionConfig; -use goose::config::permission::PermissionLevel; use goose::config::ExtensionEntry; -use goose::conversation::token_usage::Usage; +use goose::config::permission::PermissionLevel; use goose::conversation::Conversation; +use goose::conversation::token_usage::Usage; use goose::download_manager::{DownloadProgress, DownloadStatus}; use goose::providers::base::{ConfigKey, ModelInfo, ProviderMetadata, ProviderType}; use goose::session::{ @@ -468,7 +468,6 @@ derive_utoipa!(IconTheme as IconThemeSchema); super::routes::setup::start_openrouter_setup, super::routes::setup::start_tetrate_setup, super::routes::setup::start_nanogpt_setup, - super::routes::tunnel::get_tunnel_status, super::routes::telemetry::send_telemetry_event, super::routes::dictation::transcribe_dictation, super::routes::dictation::get_dictation_config, @@ -636,8 +635,6 @@ derive_utoipa!(IconTheme as IconThemeSchema); super::routes::agent::RestartAgentResponse, goose::agents::ExtensionLoadResult, super::routes::setup::SetupResponse, - super::tunnel::TunnelInfo, - super::tunnel::TunnelState, super::routes::telemetry::TelemetryEventRequest, goose::goose_apps::GooseApp, goose::goose_apps::WindowProps, diff --git a/crates/goose-server/src/routes/mod.rs b/crates/goose-server/src/routes/mod.rs index 0c2bae87789d..8ed585f797b6 100644 --- a/crates/goose-server/src/routes/mod.rs +++ b/crates/goose-server/src/routes/mod.rs @@ -18,7 +18,6 @@ pub mod session_events; pub mod setup; pub mod status; pub mod telemetry; -pub mod tunnel; pub mod utils; use std::sync::Arc; @@ -39,7 +38,6 @@ pub fn configure(state: Arc, secret_key: String) -> Rout .merge(schedule::routes(state.clone())) .merge(setup::routes(state.clone())) .merge(telemetry::routes(state.clone())) - .merge(tunnel::routes(state.clone())) .merge(mcp_ui_proxy::routes(secret_key.clone())) .merge(mcp_app_proxy::routes(secret_key)) .merge(session_events::routes(state.clone())) diff --git a/crates/goose-server/src/routes/tunnel.rs b/crates/goose-server/src/routes/tunnel.rs deleted file mode 100644 index 023c3aba46e0..000000000000 --- a/crates/goose-server/src/routes/tunnel.rs +++ /dev/null @@ -1,28 +0,0 @@ -use crate::state::AppState; -use axum::{ - extract::State, - http::StatusCode, - response::{IntoResponse, Response}, - routing::get, - Json, Router, -}; -use std::sync::Arc; - -/// Get tunnel info -#[utoipa::path( - get, - path = "/tunnel/status", - responses( - (status = 200, description = "Tunnel info", body = TunnelInfo) - ) -)] -pub async fn get_tunnel_status(State(state): State>) -> Response { - let info = state.tunnel_manager.get_info().await; - (StatusCode::OK, Json(info)).into_response() -} - -pub fn routes(state: Arc) -> Router { - Router::new() - .route("/tunnel/status", get(get_tunnel_status)) - .with_state(state) -} diff --git a/crates/goose-server/src/state.rs b/crates/goose-server/src/state.rs index 8fd5934037cb..afd2c4c0f279 100644 --- a/crates/goose-server/src/state.rs +++ b/crates/goose-server/src/state.rs @@ -12,7 +12,6 @@ use tokio::sync::Mutex; use tokio::task::JoinHandle; use crate::session_event_bus::SessionEventBus; -use crate::tunnel::TunnelManager; use goose::agents::ExtensionLoadResult; #[cfg(feature = "local-inference")] use goose::providers::local_inference::InferenceRuntime; @@ -25,7 +24,6 @@ pub struct AppState { pub(crate) agent_manager: Arc, pub recipe_file_hash_map: Arc>>, recipe_session_tracker: Arc>>, - pub tunnel_manager: Arc, pub extension_loading_tasks: ExtensionLoadingTasks, #[cfg(feature = "local-inference")] inference_runtime: Arc>>, @@ -33,17 +31,14 @@ pub struct AppState { } impl AppState { - pub async fn new(tls: bool) -> anyhow::Result> { + pub async fn new(_tls: bool) -> anyhow::Result> { register_builtin_extensions(goose_mcp::BUILTIN_EXTENSIONS.clone()); let agent_manager = AgentManager::instance().await?; - let tunnel_manager = Arc::new(TunnelManager::new(tls)); - Ok(Arc::new(Self { agent_manager, recipe_file_hash_map: Arc::new(Mutex::new(HashMap::new())), recipe_session_tracker: Arc::new(Mutex::new(HashSet::new())), - tunnel_manager, extension_loading_tasks: Arc::new(Mutex::new(HashMap::new())), #[cfg(feature = "local-inference")] inference_runtime: Arc::new(OnceLock::new()), diff --git a/crates/goose-server/src/tunnel/lapstone.rs b/crates/goose-server/src/tunnel/lapstone.rs deleted file mode 100644 index 9b55afbf306b..000000000000 --- a/crates/goose-server/src/tunnel/lapstone.rs +++ /dev/null @@ -1,635 +0,0 @@ -use super::TunnelInfo; -use anyhow::{Context, Result}; -use futures::{SinkExt, StreamExt}; -use reqwest; -use serde::{Deserialize, Serialize}; -use socket2::{SockRef, TcpKeepalive}; -use std::collections::HashMap; -use std::sync::Arc; -use std::time::{Duration, Instant}; -use tokio::sync::{mpsc, RwLock}; -use tokio::task::JoinHandle; -use tokio_tungstenite::{connect_async, tungstenite::Message}; -use tracing::{error, info, warn}; -use url::Url; - -/// Shared state for proxying tunnel requests to the local goosed server. -#[derive(Clone)] -struct ProxyContext { - port: u16, - tunnel_secret: String, - server_secret: String, - http_client: reqwest::Client, -} - -/// Constant-time comparison using hash to prevent timing attacks -fn secure_compare(a: &str, b: &str) -> bool { - use std::collections::hash_map::DefaultHasher; - use std::hash::{Hash, Hasher}; - - let mut hasher_a = DefaultHasher::new(); - a.hash(&mut hasher_a); - let hash_a = hasher_a.finish(); - - let mut hasher_b = DefaultHasher::new(); - b.hash(&mut hasher_b); - let hash_b = hasher_b.finish(); - - hash_a == hash_b -} - -const WORKER_URL: &str = "https://cloudflare-tunnel-proxy.michael-neale.workers.dev"; -const IDLE_TIMEOUT_SECS: u64 = 300; -const CONNECTION_TIMEOUT_SECS: u64 = 30; -const MAX_WS_SIZE: usize = 900_000; - -fn get_worker_url() -> String { - std::env::var("GOOSE_TUNNEL_WORKER_URL") - .ok() - .unwrap_or_else(|| WORKER_URL.to_string()) -} - -type WebSocketSender = Arc< - RwLock< - Option< - futures::stream::SplitSink< - tokio_tungstenite::WebSocketStream< - tokio_tungstenite::MaybeTlsStream, - >, - Message, - >, - >, - >, ->; - -#[derive(Debug, Serialize, Deserialize)] -struct TunnelMessage { - #[serde(rename = "requestId")] - request_id: String, - method: String, - path: String, - #[serde(skip_serializing_if = "Option::is_none")] - headers: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - body: Option, -} - -#[derive(Debug, Serialize)] -struct TunnelResponse { - #[serde(rename = "requestId")] - request_id: String, - status: u16, - #[serde(skip_serializing_if = "Option::is_none")] - headers: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - body: Option, - #[serde(skip_serializing_if = "Option::is_none")] - error: Option, - #[serde(skip_serializing_if = "Option::is_none")] - #[serde(rename = "chunkIndex")] - chunk_index: Option, - #[serde(skip_serializing_if = "Option::is_none")] - #[serde(rename = "totalChunks")] - total_chunks: Option, - #[serde(rename = "isChunked")] - is_chunked: bool, - #[serde(rename = "isStreaming")] - is_streaming: bool, - #[serde(rename = "isFirstChunk")] - is_first_chunk: bool, - #[serde(rename = "isLastChunk")] - is_last_chunk: bool, -} - -fn validate_and_build_request( - client: &reqwest::Client, - url: &str, - message: &TunnelMessage, - tunnel_secret: &str, - server_secret: &str, -) -> Result { - let incoming_secret = message - .headers - .as_ref() - .and_then(|h| { - h.iter() - .find(|(k, _)| k.eq_ignore_ascii_case("x-secret-key")) - .map(|(_, v)| v) - }) - .ok_or_else(|| anyhow::anyhow!("Missing tunnel secret header"))?; - - if !secure_compare(incoming_secret, tunnel_secret) { - anyhow::bail!("Invalid tunnel secret"); - } - - let mut request_builder = match message.method.as_str() { - "GET" => client.get(url), - "POST" => client.post(url), - "PUT" => client.put(url), - "DELETE" => client.delete(url), - "PATCH" => client.patch(url), - _ => client.get(url), - }; - - if let Some(headers) = &message.headers { - for (key, value) in headers { - if key.eq_ignore_ascii_case("x-secret-key") { - continue; - } - request_builder = request_builder.header(key, value); - } - } - - request_builder = request_builder.header("X-Secret-Key", server_secret); - - if let Some(body) = &message.body { - if message.method != "GET" && message.method != "HEAD" { - request_builder = request_builder.body(body.clone()); - } - } - - Ok(request_builder) -} - -async fn handle_streaming_response( - response: reqwest::Response, - status: u16, - headers_map: HashMap, - request_id: String, - message_path: String, - ws_tx: WebSocketSender, -) -> Result<()> { - info!("← {} {} [{}] (streaming)", status, message_path, request_id); - - let mut stream = response.bytes_stream(); - let mut chunk_index = 0; - let mut is_first_chunk = true; - - while let Some(chunk_result) = stream.next().await { - match chunk_result { - Ok(chunk) => { - let chunk_str = String::from_utf8_lossy(&chunk).to_string(); - let tunnel_response = TunnelResponse { - request_id: request_id.clone(), - status, - headers: if is_first_chunk { - Some(headers_map.clone()) - } else { - None - }, - body: Some(chunk_str), - error: None, - chunk_index: Some(chunk_index), - total_chunks: None, - is_chunked: false, - is_streaming: true, - is_first_chunk, - is_last_chunk: false, - }; - send_response(ws_tx.clone(), tunnel_response).await?; - chunk_index += 1; - is_first_chunk = false; - } - Err(e) => { - error!("Error reading stream chunk: {}", e); - break; - } - } - } - - let tunnel_response = TunnelResponse { - request_id: request_id.clone(), - status, - headers: None, - body: Some(String::new()), - error: None, - chunk_index: Some(chunk_index), - total_chunks: None, - is_chunked: false, - is_streaming: true, - is_first_chunk: false, - is_last_chunk: true, - }; - send_response(ws_tx, tunnel_response).await?; - info!( - "← {} {} [{}] (complete, {} chunks)", - status, message_path, request_id, chunk_index - ); - Ok(()) -} - -async fn handle_chunked_response( - body: String, - status: u16, - headers_map: HashMap, - request_id: String, - message_path: String, - ws_tx: WebSocketSender, -) -> Result<()> { - let total_chunks = body.len().div_ceil(MAX_WS_SIZE); - info!( - "← {} {} [{}] ({} bytes, {} chunks)", - status, - message_path, - request_id, - body.len(), - total_chunks - ); - - for (i, chunk) in body.as_bytes().chunks(MAX_WS_SIZE).enumerate() { - let chunk_str = String::from_utf8_lossy(chunk).to_string(); - let tunnel_response = TunnelResponse { - request_id: request_id.clone(), - status, - headers: if i == 0 { - Some(headers_map.clone()) - } else { - None - }, - body: Some(chunk_str), - error: None, - chunk_index: Some(i), - total_chunks: Some(total_chunks), - is_chunked: true, - is_streaming: false, - is_first_chunk: false, - is_last_chunk: false, - }; - send_response(ws_tx.clone(), tunnel_response).await?; - } - Ok(()) -} - -async fn handle_request( - message: TunnelMessage, - ctx: ProxyContext, - ws_tx: WebSocketSender, - scheme: &str, -) -> Result<()> { - let request_id = message.request_id.clone(); - let client = &ctx.http_client; - - let url = format!("{}://127.0.0.1:{}{}", scheme, ctx.port, message.path); - - let request_builder = match validate_and_build_request( - client, - &url, - &message, - &ctx.tunnel_secret, - &ctx.server_secret, - ) { - Ok(builder) => builder, - Err(e) => { - error!("✗ Authentication error [{}]: {}", request_id, e); - let error_response = TunnelResponse { - request_id, - status: 401, - headers: None, - body: None, - error: Some(e.to_string()), - chunk_index: None, - total_chunks: None, - is_chunked: false, - is_streaming: false, - is_first_chunk: false, - is_last_chunk: false, - }; - send_response(ws_tx, error_response).await?; - return Ok(()); - } - }; - - let response = match request_builder.send().await { - Ok(resp) => resp, - Err(e) => { - error!("✗ Request error [{}]: {}", request_id, e); - let error_response = TunnelResponse { - request_id, - status: 500, - headers: None, - body: None, - error: Some(e.to_string()), - chunk_index: None, - total_chunks: None, - is_chunked: false, - is_streaming: false, - is_first_chunk: false, - is_last_chunk: false, - }; - send_response(ws_tx, error_response).await?; - return Ok(()); - } - }; - - let status = response.status().as_u16(); - // Normalize header names to lowercase per RFC 7230 (HTTP headers are case-insensitive) - let headers_map: HashMap = response - .headers() - .iter() - .map(|(k, v)| { - ( - k.as_str().to_lowercase(), - v.to_str().unwrap_or("").to_string(), - ) - }) - .collect(); - - let is_streaming = headers_map - .get("content-type") - .map(|ct| ct.contains("text/event-stream")) - .unwrap_or(false); - - if is_streaming { - handle_streaming_response( - response, - status, - headers_map, - request_id, - message.path, - ws_tx, - ) - .await?; - } else { - let body = response.text().await.unwrap_or_default(); - - if body.len() > MAX_WS_SIZE { - handle_chunked_response(body, status, headers_map, request_id, message.path, ws_tx) - .await?; - } else { - let tunnel_response = TunnelResponse { - request_id: request_id.clone(), - status, - headers: Some(headers_map), - body: Some(body), - error: None, - chunk_index: None, - total_chunks: None, - is_chunked: false, - is_streaming: false, - is_first_chunk: false, - is_last_chunk: false, - }; - send_response(ws_tx, tunnel_response).await?; - } - } - - Ok(()) -} - -async fn send_response(ws_tx: WebSocketSender, response: TunnelResponse) -> Result<()> { - let json = serde_json::to_string(&response)?; - if let Some(tx) = ws_tx.write().await.as_mut() { - tx.send(Message::Text(json.into())) - .await - .context("Failed to send response")?; - } - Ok(()) -} - -fn configure_tcp_keepalive( - stream: &tokio_tungstenite::WebSocketStream< - tokio_tungstenite::MaybeTlsStream, - >, -) { - let tcp_stream = stream.get_ref().get_ref(); - let socket_ref = SockRef::from(tcp_stream); - - let keepalive = TcpKeepalive::new() - .with_time(Duration::from_secs(30)) - .with_interval(Duration::from_secs(30)); - - if let Err(e) = socket_ref.set_tcp_keepalive(&keepalive) { - warn!("Failed to set TCP keep-alive: {}", e); - } else { - info!("✓ TCP keep-alive enabled (30s interval)"); - } -} - -async fn handle_websocket_messages( - mut read: futures::stream::SplitStream< - tokio_tungstenite::WebSocketStream< - tokio_tungstenite::MaybeTlsStream, - >, - >, - ws_tx: WebSocketSender, - ctx: ProxyContext, - last_activity: Arc>, - active_tasks: Arc>>>, - scheme: String, -) { - while let Some(msg) = read.next().await { - match msg { - Ok(Message::Text(text)) => { - *last_activity.write().await = Instant::now(); - - match serde_json::from_str::(&text) { - Ok(tunnel_msg) => { - let ws_tx_clone = ws_tx.clone(); - let ctx_clone = ctx.clone(); - let scheme_clone = scheme.clone(); - let task = tokio::spawn(async move { - if let Err(e) = - handle_request(tunnel_msg, ctx_clone, ws_tx_clone, &scheme_clone) - .await - { - error!("Error handling request: {}", e); - } - }); - { - let mut tasks = active_tasks.write().await; - tasks.retain(|t| !t.is_finished()); - tasks.push(task); - } - } - Err(e) => { - error!("Error parsing tunnel message: {}", e); - } - } - } - Ok(Message::Close(_)) => { - info!("✗ Connection closed by server"); - break; - } - Ok(Message::Ping(_)) | Ok(Message::Pong(_)) => { - *last_activity.write().await = Instant::now(); - } - Err(e) => { - error!("✗ WebSocket error: {}", e); - break; - } - _ => {} - } - } -} - -async fn cleanup_connection( - ws_tx: WebSocketSender, - active_tasks: Arc>>>, -) { - if let Some(mut tx) = ws_tx.write().await.take() { - let _ = tx.close().await; - } - - let tasks = active_tasks.write().await.drain(..).collect::>(); - info!("Aborting {} active request tasks", tasks.len()); - for task in tasks { - task.abort(); - } -} - -async fn run_single_connection( - port: u16, - agent_id: String, - tunnel_secret: String, - server_secret: String, - scheme: String, - restart_tx: mpsc::Sender<()>, -) { - #[cfg(feature = "rustls-tls")] - let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); - - let worker_url = get_worker_url(); - let ws_url = worker_url - .replace("https://", "wss://") - .replace("http://", "ws://"); - - let url = format!("{}/connect?agent_id={}", ws_url, agent_id); - - info!("Connecting to {}...", url); - - let ws_stream = match tokio::time::timeout( - Duration::from_secs(CONNECTION_TIMEOUT_SECS), - connect_async(url.clone()), - ) - .await - { - Ok(Ok((stream, _))) => { - configure_tcp_keepalive(&stream); - stream - } - Ok(Err(e)) => { - error!("✗ WebSocket connection error: {}", e); - let _ = restart_tx.send(()).await; - return; - } - Err(_) => { - error!( - "✗ WebSocket connection timeout after {}s", - CONNECTION_TIMEOUT_SECS - ); - let _ = restart_tx.send(()).await; - return; - } - }; - - info!("✓ Connected as agent: {}", agent_id); - info!("✓ Proxying to: {}://127.0.0.1:{}", scheme, port); - let public_url = format!("{}/tunnel/{}", worker_url, agent_id); - info!("✓ Public URL: {}", public_url); - - let mut client_builder = reqwest::Client::builder(); - if scheme == "https" { - client_builder = client_builder.danger_accept_invalid_certs(true); - } - let http_client = client_builder - .build() - .expect("failed to build reqwest client"); - - let ctx = ProxyContext { - port, - tunnel_secret, - server_secret, - http_client, - }; - - let (write, read) = ws_stream.split(); - let ws_tx: WebSocketSender = Arc::new(RwLock::new(Some(write))); - let last_activity = Arc::new(RwLock::new(Instant::now())); - let active_tasks: Arc>>> = Arc::new(RwLock::new(Vec::new())); - - let last_activity_clone = last_activity.clone(); - let idle_task = async move { - loop { - tokio::time::sleep(Duration::from_secs(60)).await; - let elapsed = last_activity_clone.read().await.elapsed(); - if elapsed > Duration::from_secs(IDLE_TIMEOUT_SECS) { - warn!( - "No activity for {} minutes, forcing reconnect", - IDLE_TIMEOUT_SECS / 60 - ); - break; - } - } - }; - - tokio::select! { - _ = idle_task => { - info!("✗ Idle timeout triggered"); - } - _ = handle_websocket_messages( - read, - ws_tx.clone(), - ctx, - last_activity, - active_tasks.clone(), - scheme, - ) => { - info!("✗ Connection ended"); - } - } - - cleanup_connection(ws_tx, active_tasks).await; - - let _ = restart_tx.send(()).await; -} - -pub async fn start( - port: u16, - tunnel_secret: String, - server_secret: String, - agent_id: String, - scheme: &str, - handle: Arc>>>, - restart_tx: mpsc::Sender<()>, -) -> Result { - let worker_url = get_worker_url(); - - let agent_id_clone = agent_id.clone(); - let tunnel_secret_clone = tunnel_secret.clone(); - let server_secret_clone = server_secret; - let scheme = scheme.to_string(); - - let task = tokio::spawn(async move { - run_single_connection( - port, - agent_id_clone, - tunnel_secret_clone, - server_secret_clone, - scheme, - restart_tx, - ) - .await; - }); - - *handle.write().await = Some(task); - - let public_url = format!("{}/tunnel/{}", worker_url, agent_id); - let hostname = Url::parse(&worker_url)? - .host_str() - .unwrap_or("") - .to_string(); - - Ok(TunnelInfo { - state: super::TunnelState::Running, - url: public_url, - hostname, - secret: tunnel_secret, - }) -} - -pub async fn stop(handle: Arc>>>) { - if let Some(task) = handle.write().await.take() { - task.abort(); - info!("Lapstone tunnel stopped"); - } -} diff --git a/crates/goose-server/src/tunnel/mod.rs b/crates/goose-server/src/tunnel/mod.rs deleted file mode 100644 index 2b28d362abff..000000000000 --- a/crates/goose-server/src/tunnel/mod.rs +++ /dev/null @@ -1,57 +0,0 @@ -use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; - -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, ToSchema)] -#[serde(rename_all = "lowercase")] -pub enum TunnelState { - #[default] - Idle, - Starting, - Running, - Error, - Disabled, -} - -#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)] -pub struct TunnelInfo { - pub state: TunnelState, - pub url: String, - pub hostname: String, - pub secret: String, -} - -pub struct TunnelManager; - -impl Default for TunnelManager { - fn default() -> Self { - Self::new(true) - } -} - -impl TunnelManager { - pub fn new(_tls: bool) -> Self { - TunnelManager - } - - fn is_tunnel_disabled() -> bool { - if let Ok(val) = std::env::var("GOOSE_TUNNEL") { - let val = val.to_lowercase(); - val == "no" || val == "none" - } else { - false - } - } - - pub async fn get_info(&self) -> TunnelInfo { - TunnelInfo { - state: if Self::is_tunnel_disabled() { - TunnelState::Disabled - } else { - TunnelState::Idle - }, - url: String::new(), - hostname: String::new(), - secret: String::new(), - } - } -} diff --git a/crates/goose/src/config/base.rs b/crates/goose/src/config/base.rs index 81585e7ad847..d30f197974a9 100644 --- a/crates/goose/src/config/base.rs +++ b/crates/goose/src/config/base.rs @@ -1,5 +1,5 @@ -use crate::config::paths::Paths; use crate::config::GooseMode; +use crate::config::paths::Paths; use fs2::FileExt; use goose_providers::thinking::ThinkingEffort; #[cfg(feature = "system-keyring")] diff --git a/ui/desktop/openapi.json b/ui/desktop/openapi.json index 1c83fd9dddd7..87a53686cbbe 100644 --- a/ui/desktop/openapi.json +++ b/ui/desktop/openapi.json @@ -3292,27 +3292,6 @@ } } } - }, - "/tunnel/status": { - "get": { - "tags": [ - "super::routes::tunnel" - ], - "summary": "Get tunnel info", - "operationId": "get_tunnel_status", - "responses": { - "200": { - "description": "Tunnel info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TunnelInfo" - } - } - } - } - } - } } }, "components": { @@ -8402,39 +8381,6 @@ } } }, - "TunnelInfo": { - "type": "object", - "required": [ - "state", - "url", - "hostname", - "secret" - ], - "properties": { - "hostname": { - "type": "string" - }, - "secret": { - "type": "string" - }, - "state": { - "$ref": "#/components/schemas/TunnelState" - }, - "url": { - "type": "string" - } - } - }, - "TunnelState": { - "type": "string", - "enum": [ - "idle", - "starting", - "running", - "error", - "disabled" - ] - }, "UiMetadata": { "type": "object", "description": "UI-specific metadata for MCP resources", diff --git a/ui/desktop/src/api/index.ts b/ui/desktop/src/api/index.ts index 04fb37953ffd..d143c8b38388 100644 --- a/ui/desktop/src/api/index.ts +++ b/ui/desktop/src/api/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts -export { addExtension, agentAddExtension, agentRemoveExtension, cancelDownload, cancelLocalModelDownload, checkProvider, cleanupProviderCache, configureProviderOauth, confirmToolAction, createCustomProvider, createSchedule, decodeRecipe, deleteLocalModel, deleteModel, deleteProviderSecret, deleteRecipe, deleteSchedule, diagnostics, downloadHfModel, downloadModel, encodeRecipe, forkSession, getCanonicalModelInfo, getCustomProvider, getDictationConfig, getDownloadProgress, getExtensions, getLocalModelDownloadProgress, getModelSettings, getPrompt, getPrompts, getProviderCatalog, getProviderCatalogTemplate, getProviderModelInfo, getProviderModels, getRepoFiles, getSession, getSessionExtensions, getSlashCommands, getTools, getTunnelStatus, inspectRunningJob, killRunningJob, listBuiltinChatTemplates, listLocalModels, listModels, listProviderSecrets, listRecipes, listSchedules, mcpUiProxy, type Options, parseRecipe, pauseSchedule, providers, readAllConfig, readConfig, recipeToYaml, removeConfig, removeCustomProvider, removeExtension, reply, resetPrompt, restartAgent, resumeAgent, runNowHandler, savePrompt, saveRecipe, scanRecipe, scheduleRecipe, searchHfModels, sendTelemetryEvent, sessionCancel, sessionEvents, sessionReply, sessionsHandler, setConfigProvider, setRecipeSlashCommand, startAgent, startNanogptSetup, startOpenrouterSetup, startTetrateSetup, status, stopAgent, syncFeaturedModels, systemInfo, transcribeDictation, unpauseSchedule, updateAgentProvider, updateCustomProvider, updateFromSession, updateModelSettings, updateSchedule, updateSession, updateSessionName, updateSessionUserRecipeValues, updateWorkingDir, upsertConfig, validateConfig } from './sdk.gen'; -export type { ActionRequired, ActionRequiredData, AddExtensionData, AddExtensionErrors, AddExtensionRequest, AddExtensionResponse, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponse, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponse, AgentRemoveExtensionResponses, Annotations, Author, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CancelRequest, ChatRequest, ChatTemplate, CheckProviderData, CheckProviderRequest, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponse, CleanupProviderCacheResponses, ClientOptions, CommandType, ConfigKey, ConfigKeyQuery, ConfigResponse, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionRequest, ConfirmToolActionResponses, Content, ContentBlock, Conversation, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponse, CreateCustomProviderResponse2, CreateCustomProviderResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleRequest, CreateScheduleResponse, CreateScheduleResponses, CspMetadata, DeclarativeProviderConfig, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeRequest, DecodeRecipeResponse, DecodeRecipeResponse2, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteProviderSecretData, DeleteProviderSecretErrors, DeleteProviderSecretResponse, DeleteProviderSecretResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeRequest, DeleteRecipeResponse, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponse, DeleteScheduleResponses, DiagnosticsConfig, DiagnosticsData, DiagnosticsError, DiagnosticsErrors, DiagnosticsExtensions, DiagnosticsLevel, DiagnosticsLogs, DiagnosticsPrompt, DiagnosticsReport, DiagnosticsResponse, DiagnosticsResponses, DiagnosticsScheduledRecipe, DiagnosticsTextFile, DictationProvider, DictationProviderStatus, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponse, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelRequest, DownloadModelResponses, DownloadProgress, DownloadStatus, EmbeddedResource, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeRequest, EncodeRecipeResponse, EncodeRecipeResponse2, EncodeRecipeResponses, Envs, EnvVarConfig, ErrorResponse, ExtensionConfig, ExtensionData, ExtensionEntry, ExtensionLoadResult, ExtensionQuery, ExtensionResponse, ForkRequest, ForkResponse, ForkSessionData, ForkSessionErrors, ForkSessionResponse, ForkSessionResponses, FrontendToolRequest, GetCanonicalModelInfoData, GetCanonicalModelInfoResponse, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponse, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponse, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponse, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponse, GetExtensionsResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponse, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponse, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponse, GetPromptResponses, GetPromptsData, GetPromptsResponse, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponse, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponse, GetProviderCatalogTemplateResponses, GetProviderModelInfoData, GetProviderModelInfoErrors, GetProviderModelInfoResponse, GetProviderModelInfoResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponse, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponse, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponse, GetSessionExtensionsResponses, GetSessionResponse, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponse, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsQuery, GetToolsResponse, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponse, GetTunnelStatusResponses, GooseApp, GooseMode, HfGgufFile, HfModelInfo, HfModelVariant, HfQuantVariant, Icon, IconTheme, ImageContent, InferenceMetadata, InspectJobResponse, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponse, InspectRunningJobResponses, JsonObject, KillJobResponse, KillRunningJobData, KillRunningJobResponses, ListBuiltinChatTemplatesData, ListBuiltinChatTemplatesResponse, ListBuiltinChatTemplatesResponses, ListLocalModelsData, ListLocalModelsResponse, ListLocalModelsResponses, ListModelsData, ListModelsResponse, ListModelsResponses, ListProviderSecretsData, ListProviderSecretsErrors, ListProviderSecretsResponse, ListProviderSecretsResponses, ListRecipeResponse, ListRecipesData, ListRecipesErrors, ListRecipesResponse, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponse, ListSchedulesResponse2, ListSchedulesResponses, LoadedProvider, LocalModelResponse, McpAppResource, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, Message, MessageContent, MessageEvent, MessageMetadata, ModelCapabilities, ModelConfig, ModelDownloadStatus, ModelInfo, ModelInfoData, ModelInfoQuery, ModelInfoResponse, ModelSettings, ModelTemplate, ParseRecipeData, ParseRecipeError, ParseRecipeErrors, ParseRecipeRequest, ParseRecipeResponse, ParseRecipeResponse2, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponse, PauseScheduleResponses, Permission, PermissionLevel, PermissionsMetadata, PrincipalType, PromptContentResponse, PromptsListResponse, ProviderCatalogEntry, ProviderDetails, ProviderEngine, ProviderMetadata, ProviderModelInfoQuery, ProvidersData, ProviderSecret, ProviderSecretsResponse, ProviderSecretStatus, ProviderSecretStorage, ProvidersResponse, ProvidersResponse2, ProvidersResponses, ProviderTemplate, ProviderType, RawAudioContent, RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ReadAllConfigData, ReadAllConfigResponse, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, Recipe, RecipeManifest, RecipeParameter, RecipeParameterInputType, RecipeParameterRequirement, RecipeToYamlData, RecipeToYamlError, RecipeToYamlErrors, RecipeToYamlRequest, RecipeToYamlResponse, RecipeToYamlResponse2, RecipeToYamlResponses, RedactedThinkingContent, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponse, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponse, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionRequest, RemoveExtensionResponse, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponse, ReplyResponses, RepoVariantsResponse, ResetPromptData, ResetPromptErrors, ResetPromptResponse, ResetPromptResponses, ResourceContents, ResourceMetadata, Response, RestartAgentData, RestartAgentErrors, RestartAgentRequest, RestartAgentResponse, RestartAgentResponse2, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentRequest, ResumeAgentResponse, ResumeAgentResponse2, ResumeAgentResponses, RetryConfig, Role, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponse, RunNowHandlerResponses, RunNowResponse, SamplingConfig, SavePromptData, SavePromptErrors, SavePromptRequest, SavePromptResponse, SavePromptResponses, SaveRecipeData, SaveRecipeError, SaveRecipeErrors, SaveRecipeRequest, SaveRecipeResponse, SaveRecipeResponse2, SaveRecipeResponses, ScanRecipeData, ScanRecipeRequest, ScanRecipeResponse, ScanRecipeResponse2, ScanRecipeResponses, ScheduledJob, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeRequest, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponse, SearchHfModelsResponses, SendTelemetryEventData, SendTelemetryEventResponses, Session, SessionCancelData, SessionCancelResponses, SessionDisplayInfo, SessionEventsData, SessionEventsErrors, SessionEventsResponse, SessionEventsResponses, SessionExtensionsResponse, SessionReplyData, SessionReplyErrors, SessionReplyRequest, SessionReplyResponse, SessionReplyResponse2, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponse, SessionsHandlerResponses, SessionsQuery, SessionType, SetConfigProviderData, SetProviderRequest, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, SetSlashCommandRequest, Settings, SetupResponse, SlashCommand, SlashCommandsResponse, StartAgentData, StartAgentError, StartAgentErrors, StartAgentRequest, StartAgentResponse, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponse, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponse, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponse, StartTetrateSetupResponses, StatusData, StatusResponse, StatusResponses, StopAgentData, StopAgentErrors, StopAgentRequest, StopAgentResponse, StopAgentResponses, SubRecipe, SuccessCheck, SyncFeaturedModelsData, SyncFeaturedModelsResponses, SystemInfo, SystemInfoData, SystemInfoResponse, SystemInfoResponses, SystemNotificationContent, SystemNotificationType, TaskSupport, TelemetryEventRequest, Template, TextContent, ThinkingContent, ThinkingEffort, TokenState, Tool, ToolAnnotations, ToolCallingMode, ToolConfirmationRequest, ToolExecution, ToolInfo, ToolRequest, ToolResponse, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponse, TranscribeDictationResponses, TranscribeRequest, TranscribeResponse, TunnelInfo, TunnelState, UiMetadata, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponse, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderRequest, UpdateCustomProviderResponse, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionRequest, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponse, UpdateModelSettingsResponses, UpdateProviderRequest, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleRequest, UpdateScheduleResponse, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameRequest, UpdateSessionNameResponses, UpdateSessionRequest, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesError, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesRequest, UpdateSessionUserRecipeValuesResponse, UpdateSessionUserRecipeValuesResponse2, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirRequest, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigQuery, UpsertConfigResponse, UpsertConfigResponses, Usage, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponse, ValidateConfigResponses, WhisperModelResponse, WindowProps } from './types.gen'; +export { addExtension, agentAddExtension, agentRemoveExtension, cancelDownload, cancelLocalModelDownload, checkProvider, cleanupProviderCache, configureProviderOauth, confirmToolAction, createCustomProvider, createSchedule, decodeRecipe, deleteLocalModel, deleteModel, deleteProviderSecret, deleteRecipe, deleteSchedule, diagnostics, downloadHfModel, downloadModel, encodeRecipe, forkSession, getCanonicalModelInfo, getCustomProvider, getDictationConfig, getDownloadProgress, getExtensions, getLocalModelDownloadProgress, getModelSettings, getPrompt, getPrompts, getProviderCatalog, getProviderCatalogTemplate, getProviderModelInfo, getProviderModels, getRepoFiles, getSession, getSessionExtensions, getSlashCommands, getTools, inspectRunningJob, killRunningJob, listBuiltinChatTemplates, listLocalModels, listModels, listProviderSecrets, listRecipes, listSchedules, mcpUiProxy, type Options, parseRecipe, pauseSchedule, providers, readAllConfig, readConfig, recipeToYaml, removeConfig, removeCustomProvider, removeExtension, reply, resetPrompt, restartAgent, resumeAgent, runNowHandler, savePrompt, saveRecipe, scanRecipe, scheduleRecipe, searchHfModels, sendTelemetryEvent, sessionCancel, sessionEvents, sessionReply, sessionsHandler, setConfigProvider, setRecipeSlashCommand, startAgent, startNanogptSetup, startOpenrouterSetup, startTetrateSetup, status, stopAgent, syncFeaturedModels, systemInfo, transcribeDictation, unpauseSchedule, updateAgentProvider, updateCustomProvider, updateFromSession, updateModelSettings, updateSchedule, updateSession, updateSessionName, updateSessionUserRecipeValues, updateWorkingDir, upsertConfig, validateConfig } from './sdk.gen'; +export type { ActionRequired, ActionRequiredData, AddExtensionData, AddExtensionErrors, AddExtensionRequest, AddExtensionResponse, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponse, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponse, AgentRemoveExtensionResponses, Annotations, Author, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CancelRequest, ChatRequest, ChatTemplate, CheckProviderData, CheckProviderRequest, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponse, CleanupProviderCacheResponses, ClientOptions, CommandType, ConfigKey, ConfigKeyQuery, ConfigResponse, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionRequest, ConfirmToolActionResponses, Content, ContentBlock, Conversation, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponse, CreateCustomProviderResponse2, CreateCustomProviderResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleRequest, CreateScheduleResponse, CreateScheduleResponses, CspMetadata, DeclarativeProviderConfig, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeRequest, DecodeRecipeResponse, DecodeRecipeResponse2, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteProviderSecretData, DeleteProviderSecretErrors, DeleteProviderSecretResponse, DeleteProviderSecretResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeRequest, DeleteRecipeResponse, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponse, DeleteScheduleResponses, DiagnosticsConfig, DiagnosticsData, DiagnosticsError, DiagnosticsErrors, DiagnosticsExtensions, DiagnosticsLevel, DiagnosticsLogs, DiagnosticsPrompt, DiagnosticsReport, DiagnosticsResponse, DiagnosticsResponses, DiagnosticsScheduledRecipe, DiagnosticsTextFile, DictationProvider, DictationProviderStatus, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponse, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelRequest, DownloadModelResponses, DownloadProgress, DownloadStatus, EmbeddedResource, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeRequest, EncodeRecipeResponse, EncodeRecipeResponse2, EncodeRecipeResponses, Envs, EnvVarConfig, ErrorResponse, ExtensionConfig, ExtensionData, ExtensionEntry, ExtensionLoadResult, ExtensionQuery, ExtensionResponse, ForkRequest, ForkResponse, ForkSessionData, ForkSessionErrors, ForkSessionResponse, ForkSessionResponses, FrontendToolRequest, GetCanonicalModelInfoData, GetCanonicalModelInfoResponse, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponse, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponse, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponse, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponse, GetExtensionsResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponse, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponse, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponse, GetPromptResponses, GetPromptsData, GetPromptsResponse, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponse, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponse, GetProviderCatalogTemplateResponses, GetProviderModelInfoData, GetProviderModelInfoErrors, GetProviderModelInfoResponse, GetProviderModelInfoResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponse, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponse, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponse, GetSessionExtensionsResponses, GetSessionResponse, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponse, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsQuery, GetToolsResponse, GetToolsResponses, GooseApp, GooseMode, HfGgufFile, HfModelInfo, HfModelVariant, HfQuantVariant, Icon, IconTheme, ImageContent, InferenceMetadata, InspectJobResponse, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponse, InspectRunningJobResponses, JsonObject, KillJobResponse, KillRunningJobData, KillRunningJobResponses, ListBuiltinChatTemplatesData, ListBuiltinChatTemplatesResponse, ListBuiltinChatTemplatesResponses, ListLocalModelsData, ListLocalModelsResponse, ListLocalModelsResponses, ListModelsData, ListModelsResponse, ListModelsResponses, ListProviderSecretsData, ListProviderSecretsErrors, ListProviderSecretsResponse, ListProviderSecretsResponses, ListRecipeResponse, ListRecipesData, ListRecipesErrors, ListRecipesResponse, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponse, ListSchedulesResponse2, ListSchedulesResponses, LoadedProvider, LocalModelResponse, McpAppResource, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, Message, MessageContent, MessageEvent, MessageMetadata, ModelCapabilities, ModelConfig, ModelDownloadStatus, ModelInfo, ModelInfoData, ModelInfoQuery, ModelInfoResponse, ModelSettings, ModelTemplate, ParseRecipeData, ParseRecipeError, ParseRecipeErrors, ParseRecipeRequest, ParseRecipeResponse, ParseRecipeResponse2, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponse, PauseScheduleResponses, Permission, PermissionLevel, PermissionsMetadata, PrincipalType, PromptContentResponse, PromptsListResponse, ProviderCatalogEntry, ProviderDetails, ProviderEngine, ProviderMetadata, ProviderModelInfoQuery, ProvidersData, ProviderSecret, ProviderSecretsResponse, ProviderSecretStatus, ProviderSecretStorage, ProvidersResponse, ProvidersResponse2, ProvidersResponses, ProviderTemplate, ProviderType, RawAudioContent, RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ReadAllConfigData, ReadAllConfigResponse, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, Recipe, RecipeManifest, RecipeParameter, RecipeParameterInputType, RecipeParameterRequirement, RecipeToYamlData, RecipeToYamlError, RecipeToYamlErrors, RecipeToYamlRequest, RecipeToYamlResponse, RecipeToYamlResponse2, RecipeToYamlResponses, RedactedThinkingContent, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponse, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponse, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionRequest, RemoveExtensionResponse, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponse, ReplyResponses, RepoVariantsResponse, ResetPromptData, ResetPromptErrors, ResetPromptResponse, ResetPromptResponses, ResourceContents, ResourceMetadata, Response, RestartAgentData, RestartAgentErrors, RestartAgentRequest, RestartAgentResponse, RestartAgentResponse2, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentRequest, ResumeAgentResponse, ResumeAgentResponse2, ResumeAgentResponses, RetryConfig, Role, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponse, RunNowHandlerResponses, RunNowResponse, SamplingConfig, SavePromptData, SavePromptErrors, SavePromptRequest, SavePromptResponse, SavePromptResponses, SaveRecipeData, SaveRecipeError, SaveRecipeErrors, SaveRecipeRequest, SaveRecipeResponse, SaveRecipeResponse2, SaveRecipeResponses, ScanRecipeData, ScanRecipeRequest, ScanRecipeResponse, ScanRecipeResponse2, ScanRecipeResponses, ScheduledJob, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeRequest, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponse, SearchHfModelsResponses, SendTelemetryEventData, SendTelemetryEventResponses, Session, SessionCancelData, SessionCancelResponses, SessionDisplayInfo, SessionEventsData, SessionEventsErrors, SessionEventsResponse, SessionEventsResponses, SessionExtensionsResponse, SessionReplyData, SessionReplyErrors, SessionReplyRequest, SessionReplyResponse, SessionReplyResponse2, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponse, SessionsHandlerResponses, SessionsQuery, SessionType, SetConfigProviderData, SetProviderRequest, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, SetSlashCommandRequest, Settings, SetupResponse, SlashCommand, SlashCommandsResponse, StartAgentData, StartAgentError, StartAgentErrors, StartAgentRequest, StartAgentResponse, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponse, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponse, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponse, StartTetrateSetupResponses, StatusData, StatusResponse, StatusResponses, StopAgentData, StopAgentErrors, StopAgentRequest, StopAgentResponse, StopAgentResponses, SubRecipe, SuccessCheck, SyncFeaturedModelsData, SyncFeaturedModelsResponses, SystemInfo, SystemInfoData, SystemInfoResponse, SystemInfoResponses, SystemNotificationContent, SystemNotificationType, TaskSupport, TelemetryEventRequest, Template, TextContent, ThinkingContent, ThinkingEffort, TokenState, Tool, ToolAnnotations, ToolCallingMode, ToolConfirmationRequest, ToolExecution, ToolInfo, ToolRequest, ToolResponse, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponse, TranscribeDictationResponses, TranscribeRequest, TranscribeResponse, UiMetadata, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponse, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderRequest, UpdateCustomProviderResponse, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionRequest, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponse, UpdateModelSettingsResponses, UpdateProviderRequest, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleRequest, UpdateScheduleResponse, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameRequest, UpdateSessionNameResponses, UpdateSessionRequest, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesError, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesRequest, UpdateSessionUserRecipeValuesResponse, UpdateSessionUserRecipeValuesResponse2, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirRequest, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigQuery, UpsertConfigResponse, UpsertConfigResponses, Usage, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponse, ValidateConfigResponses, WhisperModelResponse, WindowProps } from './types.gen'; diff --git a/ui/desktop/src/api/sdk.gen.ts b/ui/desktop/src/api/sdk.gen.ts index df4604e95f2f..1bac488ae6fe 100644 --- a/ui/desktop/src/api/sdk.gen.ts +++ b/ui/desktop/src/api/sdk.gen.ts @@ -2,7 +2,7 @@ import type { Client, Options as Options2, TDataShape } from './client'; import { client } from './client.gen'; -import type { AddExtensionData, AddExtensionErrors, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CheckProviderData, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponses, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionResponses, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleResponses, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteProviderSecretData, DeleteProviderSecretErrors, DeleteProviderSecretResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponses, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelResponses, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeResponses, ForkSessionData, ForkSessionErrors, ForkSessionResponses, GetCanonicalModelInfoData, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponses, GetPromptsData, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponses, GetProviderModelInfoData, GetProviderModelInfoErrors, GetProviderModelInfoResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponses, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponses, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponses, KillRunningJobData, KillRunningJobResponses, ListBuiltinChatTemplatesData, ListBuiltinChatTemplatesResponses, ListLocalModelsData, ListLocalModelsResponses, ListModelsData, ListModelsResponses, ListProviderSecretsData, ListProviderSecretsErrors, ListProviderSecretsResponses, ListRecipesData, ListRecipesErrors, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponses, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, ParseRecipeData, ParseRecipeErrors, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponses, ProvidersData, ProvidersResponses, ReadAllConfigData, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, RecipeToYamlData, RecipeToYamlErrors, RecipeToYamlResponses, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponses, ResetPromptData, ResetPromptErrors, ResetPromptResponses, RestartAgentData, RestartAgentErrors, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentResponses, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponses, SavePromptData, SavePromptErrors, SavePromptResponses, SaveRecipeData, SaveRecipeErrors, SaveRecipeResponses, ScanRecipeData, ScanRecipeResponses, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponses, SendTelemetryEventData, SendTelemetryEventResponses, SessionCancelData, SessionCancelResponses, SessionEventsData, SessionEventsErrors, SessionEventsResponses, SessionReplyData, SessionReplyErrors, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponses, SetConfigProviderData, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, StartAgentData, StartAgentErrors, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponses, StatusData, StatusResponses, StopAgentData, StopAgentErrors, StopAgentResponses, SyncFeaturedModelsData, SyncFeaturedModelsResponses, SystemInfoData, SystemInfoResponses, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponses, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponses, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameResponses, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponses } from './types.gen'; +import type { AddExtensionData, AddExtensionErrors, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CheckProviderData, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponses, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionResponses, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleResponses, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteProviderSecretData, DeleteProviderSecretErrors, DeleteProviderSecretResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponses, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelResponses, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeResponses, ForkSessionData, ForkSessionErrors, ForkSessionResponses, GetCanonicalModelInfoData, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponses, GetPromptsData, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponses, GetProviderModelInfoData, GetProviderModelInfoErrors, GetProviderModelInfoResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponses, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsResponses, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponses, KillRunningJobData, KillRunningJobResponses, ListBuiltinChatTemplatesData, ListBuiltinChatTemplatesResponses, ListLocalModelsData, ListLocalModelsResponses, ListModelsData, ListModelsResponses, ListProviderSecretsData, ListProviderSecretsErrors, ListProviderSecretsResponses, ListRecipesData, ListRecipesErrors, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponses, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, ParseRecipeData, ParseRecipeErrors, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponses, ProvidersData, ProvidersResponses, ReadAllConfigData, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, RecipeToYamlData, RecipeToYamlErrors, RecipeToYamlResponses, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponses, ResetPromptData, ResetPromptErrors, ResetPromptResponses, RestartAgentData, RestartAgentErrors, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentResponses, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponses, SavePromptData, SavePromptErrors, SavePromptResponses, SaveRecipeData, SaveRecipeErrors, SaveRecipeResponses, ScanRecipeData, ScanRecipeResponses, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponses, SendTelemetryEventData, SendTelemetryEventResponses, SessionCancelData, SessionCancelResponses, SessionEventsData, SessionEventsErrors, SessionEventsResponses, SessionReplyData, SessionReplyErrors, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponses, SetConfigProviderData, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, StartAgentData, StartAgentErrors, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponses, StatusData, StatusResponses, StopAgentData, StopAgentErrors, StopAgentResponses, SyncFeaturedModelsData, SyncFeaturedModelsResponses, SystemInfoData, SystemInfoResponses, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponses, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponses, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameResponses, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponses } from './types.gen'; export type Options = Options2 & { /** @@ -510,8 +510,3 @@ export const sendTelemetryEvent = (options ...options.headers } }); - -/** - * Get tunnel info - */ -export const getTunnelStatus = (options?: Options) => (options?.client ?? client).get({ url: '/tunnel/status', ...options }); diff --git a/ui/desktop/src/api/types.gen.ts b/ui/desktop/src/api/types.gen.ts index 4a2379b39035..369e59c60d78 100644 --- a/ui/desktop/src/api/types.gen.ts +++ b/ui/desktop/src/api/types.gen.ts @@ -1647,15 +1647,6 @@ export type TranscribeResponse = { text: string; }; -export type TunnelInfo = { - hostname: string; - secret: string; - state: TunnelState; - url: string; -}; - -export type TunnelState = 'idle' | 'starting' | 'running' | 'error' | 'disabled'; - /** * UI-specific metadata for MCP resources */ @@ -4308,19 +4299,3 @@ export type SendTelemetryEventResponses = { */ 202: unknown; }; - -export type GetTunnelStatusData = { - body?: never; - path?: never; - query?: never; - url: '/tunnel/status'; -}; - -export type GetTunnelStatusResponses = { - /** - * Tunnel info - */ - 200: TunnelInfo; -}; - -export type GetTunnelStatusResponse = GetTunnelStatusResponses[keyof GetTunnelStatusResponses]; diff --git a/ui/desktop/src/components/sessions/SessionListView.tsx b/ui/desktop/src/components/sessions/SessionListView.tsx index 9a53a8568708..c884baa8c1dd 100644 --- a/ui/desktop/src/components/sessions/SessionListView.tsx +++ b/ui/desktop/src/components/sessions/SessionListView.tsx @@ -34,7 +34,6 @@ import { DialogHeader, DialogTitle, } from '../ui/dialog'; -import { getTunnelStatus } from '../../api/sdk.gen'; import { acpDeleteSession, acpExportSession, @@ -384,15 +383,12 @@ const SessionListView: React.FC = React.memo( }; }, [loadSessions, debouncedSearchTerm]); - // Hide Nostr sharing when tunnel is disabled (restricted/enterprise bundles) + // Hide Nostr sharing when explicitly disabled via env var (restricted/enterprise bundles) useEffect(() => { - getTunnelStatus() - .then(({ data }) => { - if (data?.state === 'disabled') { - setNostrEnabled(false); - } - }) - .catch(() => {}); + const config = window.electron.getConfig(); + if (config.GOOSE_DISABLE_NOSTR_SHARING === true) { + setNostrEnabled(false); + } }, []); // Timing logic to prevent flicker between skeleton and content on initial load diff --git a/ui/desktop/src/main.ts b/ui/desktop/src/main.ts index 2b72d668d5f2..6f166939ea6a 100644 --- a/ui/desktop/src/main.ts +++ b/ui/desktop/src/main.ts @@ -806,6 +806,7 @@ let appConfig = { GOOSE_LOCALE: process.env.GOOSE_LOCALE || undefined, // If GOOSE_ALLOWLIST_WARNING env var is not set, defaults to false (strict blocking mode) GOOSE_ALLOWLIST_WARNING: process.env.GOOSE_ALLOWLIST_WARNING === 'true', + GOOSE_DISABLE_NOSTR_SHARING: process.env.GOOSE_DISABLE_NOSTR_SHARING === 'true', }; const windowMap = new Map(); From d80ca3a4e1f21b9f4c436a04aa613c56ab71b907 Mon Sep 17 00:00:00 2001 From: Abhijay Jain Date: Fri, 26 Jun 2026 20:04:16 +0530 Subject: [PATCH 2/6] fix: cargo fmt import ordering --- crates/goose-server/src/main.rs | 2 +- crates/goose-server/src/openapi.rs | 6 +++--- crates/goose-server/src/routes/dictation.rs | 2 +- crates/goose/src/config/base.rs | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/goose-server/src/main.rs b/crates/goose-server/src/main.rs index 58f46b84346e..cfde78440a0b 100644 --- a/crates/goose-server/src/main.rs +++ b/crates/goose-server/src/main.rs @@ -12,8 +12,8 @@ use std::{backtrace::Backtrace, panic::PanicHookInfo}; use clap::{Parser, Subcommand}; use goose::agents::validate_extensions; use goose_mcp::{ + mcp_server_runner::{serve, McpCommand}, AutoVisualiserRouter, ComputerControllerServer, MemoryServer, TutorialServer, - mcp_server_runner::{McpCommand, serve}, }; #[derive(Parser)] diff --git a/crates/goose-server/src/openapi.rs b/crates/goose-server/src/openapi.rs index b13927328fec..a0cc4cc7ba08 100644 --- a/crates/goose-server/src/openapi.rs +++ b/crates/goose-server/src/openapi.rs @@ -1,10 +1,10 @@ -use goose::agents::ExtensionConfig; use goose::agents::extension::Envs; use goose::agents::extension::ToolInfo; -use goose::config::ExtensionEntry; +use goose::agents::ExtensionConfig; use goose::config::permission::PermissionLevel; -use goose::conversation::Conversation; +use goose::config::ExtensionEntry; use goose::conversation::token_usage::Usage; +use goose::conversation::Conversation; use goose::download_manager::{DownloadProgress, DownloadStatus}; use goose::providers::base::{ConfigKey, ModelInfo, ProviderMetadata, ProviderType}; use goose::session::{ diff --git a/crates/goose-server/src/routes/dictation.rs b/crates/goose-server/src/routes/dictation.rs index e7c8111451c5..78602223e4a6 100644 --- a/crates/goose-server/src/routes/dictation.rs +++ b/crates/goose-server/src/routes/dictation.rs @@ -85,7 +85,7 @@ fn validate_audio(audio: &str, mime_type: &str) -> Result<(Vec, &'static str return Err(ErrorResponse { message: format!("Unsupported audio format: {}", mime_type), status: StatusCode::UNSUPPORTED_MEDIA_TYPE, - }) + }); } }; diff --git a/crates/goose/src/config/base.rs b/crates/goose/src/config/base.rs index d30f197974a9..81585e7ad847 100644 --- a/crates/goose/src/config/base.rs +++ b/crates/goose/src/config/base.rs @@ -1,5 +1,5 @@ -use crate::config::GooseMode; use crate::config::paths::Paths; +use crate::config::GooseMode; use fs2::FileExt; use goose_providers::thinking::ThinkingEffort; #[cfg(feature = "system-keyring")] From f5a79954315111da6a9bac3427e2c3783cb96846 Mon Sep 17 00:00:00 2001 From: Abhijay Jain Date: Fri, 26 Jun 2026 20:07:34 +0530 Subject: [PATCH 3/6] fix: remove unused tunnel deps from goose-server --- crates/goose-server/Cargo.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/crates/goose-server/Cargo.toml b/crates/goose-server/Cargo.toml index ab25ab25777a..a05618a33225 100644 --- a/crates/goose-server/Cargo.toml +++ b/crates/goose-server/Cargo.toml @@ -35,7 +35,6 @@ system-keyring = ["goose/system-keyring"] portable-default = ["rustls-tls", "aws-providers", "telemetry", "otel"] rustls-tls = [ "reqwest/rustls", - "tokio-tungstenite/rustls-tls-native-roots", "axum-server/tls-rustls", "dep:rustls", "dep:aws-lc-rs", @@ -45,7 +44,6 @@ rustls-tls = [ ] native-tls = [ "reqwest/native-tls", - "tokio-tungstenite/native-tls", "axum-server/tls-openssl", "dep:openssl", "goose/native-tls", @@ -80,11 +78,8 @@ utoipa = { workspace = true, features = ["axum_extras", "chrono"] } reqwest = { workspace = true, features = ["json", "blocking", "multipart", "system-proxy"] } tokio-util = { workspace = true } serde_path_to_error = { version = "0.1.8", default-features = false } -tokio-tungstenite = { version = "0.29", default-features = false, features = ["connect"] } -url = { workspace = true } rand = { workspace = true } hex = { version = "0.4.3", default-features = false, features = ["std"] } -socket2 = { version = "0.6", default-features = false } rustls = { workspace = true, optional = true } uuid = { workspace = true } rcgen = { version = "0.14", default-features = false, features = ["aws_lc_rs", "crypto", "pem"] } From 99da2f03d45dbad66256c7f0046cef2daeda7d48 Mon Sep 17 00:00:00 2001 From: Abhijay Jain Date: Fri, 26 Jun 2026 20:10:25 +0530 Subject: [PATCH 4/6] fix: derive GOOSE_DISABLE_NOSTR_SHARING from GOOSE_TUNNEL for backwards compat --- ui/desktop/src/main.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/desktop/src/main.ts b/ui/desktop/src/main.ts index 6f166939ea6a..8dd9842daf76 100644 --- a/ui/desktop/src/main.ts +++ b/ui/desktop/src/main.ts @@ -806,7 +806,9 @@ let appConfig = { GOOSE_LOCALE: process.env.GOOSE_LOCALE || undefined, // If GOOSE_ALLOWLIST_WARNING env var is not set, defaults to false (strict blocking mode) GOOSE_ALLOWLIST_WARNING: process.env.GOOSE_ALLOWLIST_WARNING === 'true', - GOOSE_DISABLE_NOSTR_SHARING: process.env.GOOSE_DISABLE_NOSTR_SHARING === 'true', + GOOSE_DISABLE_NOSTR_SHARING: + process.env.GOOSE_DISABLE_NOSTR_SHARING === 'true' || + ['no', 'none'].includes((process.env.GOOSE_TUNNEL || '').toLowerCase()), }; const windowMap = new Map(); From 5b56ba013e094a0cead2ccfe1cb548c95683b04d Mon Sep 17 00:00:00 2001 From: Abhijay Jain Date: Fri, 26 Jun 2026 20:13:49 +0530 Subject: [PATCH 5/6] fix: update Cargo.lock after removing unused tunnel deps --- Cargo.lock | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4a76d6a8ffc..a3b28d823465 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5070,17 +5070,14 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_yaml", - "socket2", "thiserror 2.0.18", "tokio", "tokio-stream", - "tokio-tungstenite 0.29.0", "tokio-util", "tower", "tower-http 0.7.0", "tracing", "tracing-subscriber", - "url", "utoipa 4.2.3", "uuid", "winreg", @@ -11771,13 +11768,7 @@ checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" dependencies = [ "futures-util", "log", - "native-tls", - "rustls", - "rustls-native-certs", - "rustls-pki-types", "tokio", - "tokio-native-tls", - "tokio-rustls", "tungstenite 0.29.0", ] @@ -12256,10 +12247,7 @@ dependencies = [ "http 1.4.2", "httparse", "log", - "native-tls", "rand 0.9.4", - "rustls", - "rustls-pki-types", "sha1", "thiserror 2.0.18", ] From c5f47bb6f74448be0ac69f6cc6c51bf7ca22d7bb Mon Sep 17 00:00:00 2001 From: Abhijay Jain Date: Fri, 26 Jun 2026 21:12:19 +0530 Subject: [PATCH 6/6] fix: remove GOOSE_TUNNEL backwards compat for GOOSE_DISABLE_NOSTR_SHARING --- ui/desktop/src/main.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ui/desktop/src/main.ts b/ui/desktop/src/main.ts index 8dd9842daf76..6f166939ea6a 100644 --- a/ui/desktop/src/main.ts +++ b/ui/desktop/src/main.ts @@ -806,9 +806,7 @@ let appConfig = { GOOSE_LOCALE: process.env.GOOSE_LOCALE || undefined, // If GOOSE_ALLOWLIST_WARNING env var is not set, defaults to false (strict blocking mode) GOOSE_ALLOWLIST_WARNING: process.env.GOOSE_ALLOWLIST_WARNING === 'true', - GOOSE_DISABLE_NOSTR_SHARING: - process.env.GOOSE_DISABLE_NOSTR_SHARING === 'true' || - ['no', 'none'].includes((process.env.GOOSE_TUNNEL || '').toLowerCase()), + GOOSE_DISABLE_NOSTR_SHARING: process.env.GOOSE_DISABLE_NOSTR_SHARING === 'true', }; const windowMap = new Map();