use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::Commands;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct BrowserStepInput {
pub commands: Vec<Commands>,
#[serde(default)]
pub headless: Option<bool>,
#[serde(default)]
pub thinking: Option<String>,
#[serde(default)]
pub evaluation_previous_goal: Option<String>,
#[serde(default)]
pub memory: Option<String>,
#[serde(default)]
pub next_goal: Option<String>,
}
impl BrowserStepInput {
pub fn new(commands: Vec<Commands>) -> Self {
Self {
commands,
headless: None,
thinking: None,
evaluation_previous_goal: None,
memory: None,
next_goal: None,
}
}
pub fn with_headless(mut self, headless: bool) -> Self {
self.headless = Some(headless);
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct BrowserStepRequest {
#[serde(default)]
pub session_id: String,
#[serde(default)]
pub thread_id: String,
#[serde(default)]
pub task_id: Option<String>,
#[serde(default)]
pub run_id: Option<String>,
#[serde(default)]
pub tool_call_id: Option<String>,
pub commands: Vec<Commands>,
#[serde(default)]
pub headless: Option<bool>,
#[serde(default)]
pub thinking: Option<String>,
#[serde(default)]
pub evaluation_previous_goal: Option<String>,
#[serde(default)]
pub memory: Option<String>,
#[serde(default)]
pub next_goal: Option<String>,
}
impl BrowserStepRequest {
pub fn new(input: BrowserStepInput) -> Self {
Self {
session_id: String::new(),
thread_id: String::new(),
task_id: None,
run_id: None,
tool_call_id: None,
commands: input.commands,
headless: input.headless,
thinking: input.thinking,
evaluation_previous_goal: input.evaluation_previous_goal,
memory: input.memory,
next_goal: input.next_goal,
}
}
pub fn with_session_id(mut self, session_id: impl Into<String>) -> Self {
self.session_id = session_id.into();
self
}
pub fn with_thread_id(mut self, thread_id: impl Into<String>) -> Self {
self.thread_id = thread_id.into();
self
}
pub fn with_task_id(mut self, task_id: impl Into<String>) -> Self {
self.task_id = Some(task_id.into());
self
}
pub fn with_run_id(mut self, run_id: impl Into<String>) -> Self {
self.run_id = Some(run_id.into());
self
}
pub fn with_tool_call_id(mut self, tool_call_id: impl Into<String>) -> Self {
self.tool_call_id = Some(tool_call_id.into());
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct BrowserStepResult {
pub success: bool,
pub session_id: String,
pub summary: Option<String>,
pub url: Option<String>,
pub error: Option<String>,
pub sequence_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<serde_json::Value>,
}
impl BrowserStepResult {
pub fn success(session_id: impl Into<String>) -> Self {
Self {
success: true,
session_id: session_id.into(),
summary: None,
url: None,
error: None,
sequence_id: None,
data: None,
}
}
pub fn error(session_id: impl Into<String>, error: impl Into<String>) -> Self {
Self {
success: false,
session_id: session_id.into(),
summary: None,
url: None,
error: Some(error.into()),
sequence_id: None,
data: None,
}
}
}