use serde_json::json;
use crate::daemon_client;
pub fn list(host: Option<&str>) {
let mut client = daemon_client::connect_to_hub_or_exit();
let mut params = json!({});
if let Some(h) = host {
params["host"] = json!(h);
}
match client.request("prompts.list", params) {
Ok(result) => {
let prompts = result.as_array().cloned().unwrap_or_default();
if prompts.is_empty() {
println!("No saved prompts.");
return;
}
println!("{:<20} {:<30} PROMPT", "ID", "NAME");
println!("{}", "\u{2500}".repeat(72));
for p in &prompts {
let id = p.get("id").and_then(|v| v.as_str()).unwrap_or("-");
let name = p.get("name").and_then(|v| v.as_str()).unwrap_or("-");
let prompt = p.get("prompt").and_then(|v| v.as_str()).unwrap_or("-");
let truncated = if prompt.len() > 40 {
format!("{}...", &prompt[..37])
} else {
prompt.to_string()
};
println!("{:<20} {:<30} {}", id, name, truncated);
}
}
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
}
}
pub fn create(name: &str, prompt: &str, host: Option<&str>) {
let mut client = daemon_client::connect_to_hub_or_exit();
let mut params = json!({"name": name, "prompt": prompt});
if let Some(h) = host {
params["host"] = json!(h);
}
match client.request("prompts.create", params) {
Ok(result) => {
let id = result.get("id").and_then(|v| v.as_str()).unwrap_or("-");
println!("Created prompt '{name}' (id: {id})");
}
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
}
}
pub fn update(id: &str, name: Option<&str>, prompt: Option<&str>, host: Option<&str>) {
let mut client = daemon_client::connect_to_hub_or_exit();
let mut params = json!({"id": id});
if let Some(n) = name {
params["name"] = json!(n);
}
if let Some(p) = prompt {
params["prompt"] = json!(p);
}
if let Some(h) = host {
params["host"] = json!(h);
}
match client.request("prompts.update", params) {
Ok(_) => println!("Updated prompt '{id}'"),
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
}
}
pub fn delete(id: &str, host: Option<&str>) {
let mut client = daemon_client::connect_to_hub_or_exit();
let mut params = json!({"id": id});
if let Some(h) = host {
params["host"] = json!(h);
}
match client.request("prompts.delete", params) {
Ok(_) => println!("Deleted prompt '{id}'"),
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
}
}