use serde::{Deserialize, Serialize};
use super::WireRunResult;
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum HelpExecutionMode {
#[default]
ExplainOnly,
PlanExecution,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct HelpRequest {
pub question: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
#[serde(default)]
pub execution_mode: HelpExecutionMode,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<u32>,
}
pub type HelpResponse = WireRunResult;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn help_request_defaults_to_explain_only() -> serde_json::Result<()> {
let request: HelpRequest =
serde_json::from_str(r#"{"question":"How do I add an MCP server?"}"#)?;
assert_eq!(request.execution_mode, HelpExecutionMode::ExplainOnly);
assert!(request.prompt.is_none());
Ok(())
}
}