diff --git a/crates/goose-server/src/openapi.rs b/crates/goose-server/src/openapi.rs index 7935a1acf4ac..be4634b17de2 100644 --- a/crates/goose-server/src/openapi.rs +++ b/crates/goose-server/src/openapi.rs @@ -353,6 +353,10 @@ derive_utoipa!(Icon as IconSchema); super::routes::config_management::check_provider, super::routes::config_management::set_config_provider, super::routes::config_management::get_pricing, + super::routes::prompts::get_prompts, + super::routes::prompts::get_prompt, + super::routes::prompts::save_prompt, + super::routes::prompts::reset_prompt, super::routes::agent::start_agent, super::routes::agent::resume_agent, super::routes::agent::stop_agent, @@ -427,6 +431,10 @@ derive_utoipa!(Icon as IconSchema); super::routes::config_management::PricingQuery, super::routes::config_management::PricingResponse, super::routes::config_management::PricingData, + super::routes::prompts::PromptsListResponse, + super::routes::prompts::PromptContentResponse, + super::routes::prompts::SavePromptRequest, + goose::prompt_template::Template, super::routes::action_required::ConfirmToolActionRequest, super::routes::reply::ChatRequest, super::routes::session::ImportSessionRequest, diff --git a/crates/goose-server/src/routes/agent.rs b/crates/goose-server/src/routes/agent.rs index 7e3503c0f63d..fda525fa802d 100644 --- a/crates/goose-server/src/routes/agent.rs +++ b/crates/goose-server/src/routes/agent.rs @@ -18,7 +18,7 @@ use goose::agents::ExtensionConfig; use goose::config::resolve_extensions_for_new_session; use goose::config::{Config, GooseMode}; use goose::model::ModelConfig; -use goose::prompt_template::render_global_file; +use goose::prompt_template::render_template; use goose::providers::create; use goose::recipe::Recipe; use goose::recipe_deeplink; @@ -418,7 +418,7 @@ async fn update_from_session( })?; let context: HashMap<&str, Value> = HashMap::new(); let desktop_prompt = - render_global_file("desktop_prompt.md", &context).expect("Prompt should render"); + render_template("desktop_prompt.md", &context).expect("Prompt should render"); let mut update_prompt = desktop_prompt; if let Some(recipe) = session.recipe { match build_recipe_with_parameter_values( @@ -691,7 +691,7 @@ async fn restart_agent_internal( let context: HashMap<&str, Value> = HashMap::new(); let desktop_prompt = - render_global_file("desktop_prompt.md", &context).expect("Prompt should render"); + render_template("desktop_prompt.md", &context).expect("Prompt should render"); let mut update_prompt = desktop_prompt; if let Some(ref recipe) = session.recipe { diff --git a/crates/goose-server/src/routes/mod.rs b/crates/goose-server/src/routes/mod.rs index aa9392b92fda..d65241cc0d75 100644 --- a/crates/goose-server/src/routes/mod.rs +++ b/crates/goose-server/src/routes/mod.rs @@ -5,6 +5,7 @@ pub mod config_management; pub mod errors; pub mod mcp_app_proxy; pub mod mcp_ui_proxy; +pub mod prompts; pub mod recipe; pub mod recipe_utils; pub mod reply; @@ -29,6 +30,7 @@ pub fn configure(state: Arc, secret_key: String) -> Rout .merge(agent::routes(state.clone())) .merge(audio::routes(state.clone())) .merge(config_management::routes(state.clone())) + .merge(prompts::routes()) .merge(recipe::routes(state.clone())) .merge(session::routes(state.clone())) .merge(schedule::routes(state.clone())) diff --git a/crates/goose-server/src/routes/prompts.rs b/crates/goose-server/src/routes/prompts.rs new file mode 100644 index 000000000000..ed62c1e42707 --- /dev/null +++ b/crates/goose-server/src/routes/prompts.rs @@ -0,0 +1,133 @@ +use axum::{ + extract::Path, + routing::{delete, get, put}, + Json, Router, +}; +use goose::prompt_template::{ + get_template, list_templates, reset_template, save_template, Template, +}; +use http::StatusCode; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +#[derive(Serialize, ToSchema)] +pub struct PromptsListResponse { + pub prompts: Vec