use clap::Subcommand;
use night_fury_daemon_core::cli::make_req;
use night_fury_daemon_core::{client, spawn};
use serde_json::json;
use super::{acquire_then_exec, ExecArgs};
#[derive(Subcommand)]
pub enum GrokCmd {
Ask {
prompt: String,
#[arg(long, default_value_t = 30)]
timeout: u64,
},
Conversations,
}
pub async fn run(
cmd: GrokCmd,
socket: &str,
host: &str,
session: Option<String>,
) -> anyhow::Result<()> {
let (cmd_name, params) = match cmd {
GrokCmd::Ask { prompt, timeout } => {
("grok.ask", json!({"prompt": prompt, "timeout": timeout}))
}
GrokCmd::Conversations => ("grok.conversations", json!({})),
};
if let Some(sid) = session {
spawn::ensure_daemon(socket).await?;
let req = make_req(cmd_name, Some(&sid), params);
let resp = client::send(socket, &req).await?;
super::print_and_check(&resp);
return Ok(());
}
let args = ExecArgs {
site: "grok",
host,
cmd: cmd_name,
params,
};
acquire_then_exec(socket, args).await
}