diff --git a/crates/goose-cli/src/commands/web.rs b/crates/goose-cli/src/commands/web.rs index 812f382a25..c6aa47f6b8 100644 --- a/crates/goose-cli/src/commands/web.rs +++ b/crates/goose-cli/src/commands/web.rs @@ -5,7 +5,7 @@ use axum::{ ws::{Message, WebSocket, WebSocketUpgrade}, Query, Request, State, }, - http::StatusCode, + http::{StatusCode, Uri}, middleware::{self, Next}, response::{Html, IntoResponse, Response}, routing::get, @@ -240,7 +240,7 @@ pub async fn handle_web( Ok(()) } -async fn serve_index() -> Result { +async fn serve_index(uri: Uri) -> Result { let session = SessionManager::create_session( std::env::current_dir().unwrap_or_else(|_| std::path::PathBuf::from(".")), "Web session".to_string(), @@ -249,7 +249,13 @@ async fn serve_index() -> Result { .await .map_err(|err| (http::StatusCode::INTERNAL_SERVER_ERROR, err.to_string()))?; - Ok(Redirect::to(&format!("/session/{}", session.id))) + let redirect_url = if let Some(query) = uri.query() { + format!("/session/{}?{}", session.id, query) + } else { + format!("/session/{}", session.id) + }; + + Ok(Redirect::to(&redirect_url)) } async fn serve_session( diff --git a/crates/goose-cli/static/script.js b/crates/goose-cli/static/script.js index 3d99bc51a2..cab2afc4b2 100644 --- a/crates/goose-cli/static/script.js +++ b/crates/goose-cli/static/script.js @@ -474,8 +474,7 @@ async function loadSessionIfExists() { resumeDiv.className = 'message system-message'; resumeDiv.innerHTML = `Session resumed: ${sessionData.messages.length} messages loaded`; messagesContainer.appendChild(resumeDiv); - - + // Update page title with session description if available if (sessionData.metadata && sessionData.metadata.description) { document.title = `goose chat - ${sessionData.metadata.description}`; @@ -510,6 +509,24 @@ messageInput.addEventListener('input', () => { // Initialize WebSocket connection connectWebSocket(); +// Read 'q' parameter from URL and set it to the message input +function getQueryParam() { + const urlParams = new URLSearchParams(window.location.search); + const queryParam = urlParams.get('q'); + if (queryParam) { + messageInput.value = queryParam; + urlParams.delete('q'); + + let newUrl = window.location.pathname; + if (urlParams.toString()) { + newUrl = `${window.location.pathname}?${urlParams.toString()}`; + } + window.history.replaceState({}, '', newUrl); + } +} + +getQueryParam(); + // Focus on input messageInput.focus();