browsr_types/
context.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use super::{CommandResult, Commands};
5
6/// Crawl command parameters
7#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
8pub struct ScrapeOptions {
9    pub url: String,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub use_js: Option<bool>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub wait_for: Option<u64>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub extract_links: Option<bool>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub selector: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub extract_images: Option<bool>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub extract_metadata: Option<bool>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub extract_tables: Option<bool>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub extract_forms: Option<bool>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub extract_structured_data: Option<bool>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub readable_content: Option<bool>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub remove_base64_images: Option<bool>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
35pub struct CrawlResponse {
36    pub success: bool,
37    pub command: String,
38    pub data: Option<CrawlData>,
39    pub error: Option<String>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
43pub struct CrawlData {
44    pub url: String,
45    pub title: String,
46    pub content: Option<String>,
47    pub readable_content: Option<serde_json::Value>,
48    pub links: Option<Vec<serde_json::Value>>,
49    pub links_count: usize,
50    pub images: Option<Vec<serde_json::Value>>,
51    pub images_count: usize,
52    pub metadata: Option<serde_json::Value>,
53    pub tables: Option<Vec<serde_json::Value>>,
54    pub forms: Option<Vec<serde_json::Value>>,
55    pub structured_data: Option<Vec<serde_json::Value>>,
56    pub content_error: Option<String>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
60pub struct AutomateResponse {
61    pub success: bool,
62    pub steps_completed: usize,
63    pub total_steps: usize,
64    pub results: Vec<CommandResult>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
68pub struct BrowserToolOptions {
69    pub commands: Vec<Commands>,
70    pub context: Option<BrowserContext>,
71}
72
73impl From<Commands> for BrowserToolOptions {
74    fn from(command: Commands) -> Self {
75        BrowserToolOptions {
76            commands: vec![command],
77            context: None,
78        }
79    }
80}
81
82/// Context to enrich structured extraction calls with thread metadata and model settings
83#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
84#[serde(deny_unknown_fields)]
85pub struct BrowserContext {
86    #[serde(default, skip_serializing_if = "Option::is_none")]
87    pub thread_id: Option<String>,
88    #[serde(default, skip_serializing_if = "Option::is_none")]
89    pub task_id: Option<String>,
90    #[serde(default, skip_serializing_if = "Option::is_none")]
91    pub run_id: Option<String>,
92    #[serde(default, skip_serializing_if = "Option::is_none")]
93    pub model_settings: Option<serde_json::Value>,
94}