{
  "name": "forge-search",
  "language": "rust",
  "version": "0.2.0",
  "description": "OneSearch integration as the default research runtime for Forge SDK agents",
  "manifest": "forge-rs/crates/forge-search/Cargo.toml",
  "manifestSha256": "f269cf64f3769f491531b3befa64de1a28a9ee84e7336a73888fd6f64c7b2963",
  "status": "source-reference",
  "registryPublicationVerified": false,
  "route": "/libraries/rust/forge-search",
  "features": {},
  "files": [
    {
      "path": "forge-rs/crates/forge-search/src/config.rs",
      "sha256": "051b1817e170d5b8bfc77144e5c2cb162b13a878ad42c713cffcbd070b8d9cb9",
      "artifactSha256": "44dd3f27820c78c160574ccf2868bfb638a2b3701b128936c5eb3bdd607a4b90",
      "url": "/reference/source/forge-rs/crates/forge-search/src/config.rs.txt",
      "declarations": [
        {
          "name": "::SearchConfig",
          "line": 42,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchConfig {\n\n}",
          "documentation": "Configuration for the OneSearch integration.\n\nControls how the search tools connect to the OneSearch API, which engines\nto use, and default parameters for search operations.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\n\nlet config = SearchConfig::default();\nassert_eq!(config.default_max_results(), 5);\nassert_eq!(config.request_timeout_ms(), 60_000);\n```"
        },
        {
          "name": "::SearchDepth",
          "line": 84,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum SearchDepth {\n    /// Fast search using SERP snippets.\n    Basic,\n    /// Deeper search that fetches and processes page content.\n    Advanced,\n}",
          "documentation": "Search depth controls the quality/speed tradeoff.\n\n- `Basic`: Fast, returns snippets from search engine result pages.\n- `Advanced`: Slower, fetches and processes actual page content."
        },
        {
          "name": "::SearchDepth::as_str",
          "line": 97,
          "signature": "pub fn as_str(&self) -> &'static str;",
          "documentation": "Returns the string representation for API requests.\n\n# Returns\n\n`\"basic\"` or `\"advanced\"`."
        },
        {
          "name": "::ContentFormat",
          "line": 114,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum ContentFormat {\n    /// Markdown format (preserves structure).\n    Markdown,\n    /// Plain text (no formatting).\n    Text,\n}",
          "documentation": "Content format for extracted web content."
        },
        {
          "name": "::ContentFormat::as_str",
          "line": 123,
          "signature": "pub fn as_str(&self) -> &'static str;",
          "documentation": "Returns the string representation for API requests."
        },
        {
          "name": "::SearchConfig::builder",
          "line": 181,
          "signature": "pub fn builder() -> SearchConfigBuilder;",
          "documentation": "Creates a new [`SearchConfigBuilder`] for constructing a custom config.\n\n# Returns\n\nA builder initialized with default values.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\n\nlet config = SearchConfig::builder()\n    .endpoint(\"https://search.example.com\")\n    .build();\nassert_eq!(config.endpoint(), \"https://search.example.com\");\n```"
        },
        {
          "name": "::SearchConfig::endpoint",
          "line": 188,
          "signature": "pub fn endpoint(&self) -> &str;",
          "documentation": "Returns the OneSearch API endpoint URL."
        },
        {
          "name": "::SearchConfig::api_key",
          "line": 193,
          "signature": "pub fn api_key(&self) -> Option<&str>;",
          "documentation": "Returns the API key if configured."
        },
        {
          "name": "::SearchConfig::engines",
          "line": 200,
          "signature": "pub fn engines(&self) -> &[String];",
          "documentation": "Returns the configured search engines.\n\nAn empty list means \"use all available engines.\""
        },
        {
          "name": "::SearchConfig::default_max_results",
          "line": 205,
          "signature": "pub fn default_max_results(&self) -> u32;",
          "documentation": "Returns the default maximum number of search results."
        },
        {
          "name": "::SearchConfig::default_search_depth",
          "line": 210,
          "signature": "pub fn default_search_depth(&self) -> SearchDepth;",
          "documentation": "Returns the default search depth."
        },
        {
          "name": "::SearchConfig::default_content_format",
          "line": 215,
          "signature": "pub fn default_content_format(&self) -> ContentFormat;",
          "documentation": "Returns the default content format for extraction."
        },
        {
          "name": "::SearchConfig::request_timeout_ms",
          "line": 220,
          "signature": "pub fn request_timeout_ms(&self) -> u64;",
          "documentation": "Returns the request timeout in milliseconds."
        },
        {
          "name": "::SearchConfig::max_extract_urls",
          "line": 225,
          "signature": "pub fn max_extract_urls(&self) -> usize;",
          "documentation": "Returns the maximum number of URLs per extract request."
        },
        {
          "name": "::SearchConfig::max_crawl_depth",
          "line": 230,
          "signature": "pub fn max_crawl_depth(&self) -> u32;",
          "documentation": "Returns the maximum crawl depth."
        },
        {
          "name": "::SearchConfig::max_crawl_breadth",
          "line": 235,
          "signature": "pub fn max_crawl_breadth(&self) -> u32;",
          "documentation": "Returns the maximum crawl breadth."
        },
        {
          "name": "::SearchConfig::max_crawl_pages",
          "line": 240,
          "signature": "pub fn max_crawl_pages(&self) -> u32;",
          "documentation": "Returns the maximum total crawled pages."
        },
        {
          "name": "::SearchConfigBuilder",
          "line": 262,
          "signature": "pub struct SearchConfigBuilder {\n\n}",
          "documentation": "Builder for constructing [`SearchConfig`] instances.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\n\nlet config = SearchConfig::builder()\n    .endpoint(\"https://search.internal.example.com\")\n    .api_key(\"sk-test-key\")\n    .engines(vec![\"google\".to_string(), \"bing\".to_string()])\n    .default_max_results(10)\n    .build();\n\nassert_eq!(config.endpoint(), \"https://search.internal.example.com\");\nassert_eq!(config.engines().len(), 2);\n```"
        },
        {
          "name": "::SearchConfigBuilder::endpoint",
          "line": 268,
          "signature": "pub fn endpoint(mut self, endpoint: impl Into<String>) -> Self;",
          "documentation": "Sets the OneSearch API endpoint URL."
        },
        {
          "name": "::SearchConfigBuilder::api_key",
          "line": 274,
          "signature": "pub fn api_key(mut self, key: impl Into<String>) -> Self;",
          "documentation": "Sets the API key for authentication."
        },
        {
          "name": "::SearchConfigBuilder::engines",
          "line": 280,
          "signature": "pub fn engines(mut self, engines: Vec<String>) -> Self;",
          "documentation": "Sets which search engines to use."
        },
        {
          "name": "::SearchConfigBuilder::default_max_results",
          "line": 286,
          "signature": "pub fn default_max_results(mut self, max: u32) -> Self;",
          "documentation": "Sets the default maximum number of search results."
        },
        {
          "name": "::SearchConfigBuilder::default_search_depth",
          "line": 292,
          "signature": "pub fn default_search_depth(mut self, depth: SearchDepth) -> Self;",
          "documentation": "Sets the default search depth."
        },
        {
          "name": "::SearchConfigBuilder::default_content_format",
          "line": 298,
          "signature": "pub fn default_content_format(mut self, format: ContentFormat) -> Self;",
          "documentation": "Sets the default content format for extraction."
        },
        {
          "name": "::SearchConfigBuilder::request_timeout_ms",
          "line": 304,
          "signature": "pub fn request_timeout_ms(mut self, ms: u64) -> Self;",
          "documentation": "Sets the request timeout in milliseconds."
        },
        {
          "name": "::SearchConfigBuilder::max_crawl_depth",
          "line": 310,
          "signature": "pub fn max_crawl_depth(mut self, depth: u32) -> Self;",
          "documentation": "Sets the maximum crawl depth."
        },
        {
          "name": "::SearchConfigBuilder::build",
          "line": 316,
          "signature": "pub fn build(self) -> SearchConfig;",
          "documentation": "Consumes the builder and returns the configured [`SearchConfig`]."
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-search/src/error.rs",
      "sha256": "b783a82cb5a034464420fcd3225d01665f1db3cb724715d7a18e950caa09664e",
      "artifactSha256": "f26f9961289200b312203e295664c321d9d8ce9634c388fad4ed79002b2ae454",
      "url": "/reference/source/forge-rs/crates/forge-search/src/error.rs.txt",
      "declarations": [
        {
          "name": "::SearchError",
          "line": 22,
          "signature": "#[derive(Debug, Error)]\npub enum SearchError {\n    /// The search query was empty or blank.\n    #[error(\"search query must not be empty; provide a non-blank query string\")]\n    EmptyQuery,\n\n    /// The OneSearch API endpoint is not configured or unreachable.\n    #[error(\n        \"OneSearch API endpoint '{endpoint}' is not reachable: {reason}; \\\n         verify the endpoint URL and that the OneSearch service is running\"\n    )]\n    EndpointUnreachable {\n        /// The endpoint URL that was attempted.\n        endpoint: String,\n        /// The reason the endpoint could not be reached.\n        reason: String,\n    },\n\n    /// The OneSearch API returned an error response.\n    #[error(\n        \"OneSearch API error (HTTP {status}): {message}; \\\n         request_id={request_id}\"\n    )]\n    ApiError {\n        /// The HTTP status code returned.\n        status: u16,\n        /// The error message from the API.\n        message: String,\n        /// The request ID for correlation.\n        request_id: String,\n    },\n\n    /// A URL provided for extraction or crawling was invalid.\n    #[error(\"invalid URL '{url}': {reason}\")]\n    InvalidUrl {\n        /// The invalid URL.\n        url: String,\n        /// Why the URL is invalid.\n        reason: String,\n    },\n\n    /// Too many URLs provided for extraction.\n    #[error(\n        \"too many URLs for extraction: {count} provided but maximum is {max}; \\\n         reduce the number of URLs per request\"\n    )]\n    TooManyUrls {\n        /// The number of URLs provided.\n        count: usize,\n        /// The maximum allowed.\n        max: usize,\n    },\n\n    /// The crawl depth or breadth exceeded configured limits.\n    #[error(\"crawl parameter out of range: {param}={value} but allowed range is [{min}, {max}]\")]\n    CrawlParameterOutOfRange {\n        /// The parameter name (e.g., \"max_depth\", \"max_breadth\").\n        param: String,\n        /// The value that was provided.\n        value: i64,\n        /// The minimum allowed value.\n        min: i64,\n        /// The maximum allowed value.\n        max: i64,\n    },\n\n    /// Request timed out.\n    #[error(\"search request timed out after {timeout_ms}ms\")]\n    Timeout {\n        /// The timeout in milliseconds.\n        timeout_ms: u64,\n    },\n\n    /// Serialization or deserialization of request/response failed.\n    #[error(\"serialization error: {reason}\")]\n    SerializationError {\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// Search is disabled or not configured in this toolbelt instance.\n    #[error(\n        \"search tool '{tool_name}' is not configured; set the OneSearch endpoint in \\\n         SearchConfig or provide an API key to enable search capabilities\"\n    )]\n    NotConfigured {\n        /// The tool name that was invoked.\n        tool_name: String,\n    },\n}",
          "documentation": "Errors that can occur during search, extraction, crawling, and site mapping.\n\nEvery variant includes actionable context: what failed, why, and what the\ndeveloper should check.\n\n# Examples\n\n```\nuse forge_search::error::SearchError;\n\nlet err = SearchError::EmptyQuery;\nassert!(err.to_string().contains(\"empty\"));\n```"
        },
        {
          "name": "::SearchResult",
          "line": 113,
          "signature": "pub type SearchResult<T> = Result<T, SearchError>;",
          "documentation": "A specialized `Result` type for `forge-search` operations."
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-search/src/lib.rs",
      "sha256": "69e6b3dc99660cae7374682b2bb41a8d48bef34f0636fe132a936362ba06e6f8",
      "artifactSha256": "7f4e5d73c9f4fd7bc1591c79901bb9048f25df81918f2cdc54a5a8faff22d728",
      "url": "/reference/source/forge-rs/crates/forge-search/src/lib.rs.txt",
      "declarations": [
        {
          "name": "config",
          "line": 62,
          "signature": "pub mod config;",
          "documentation": "# forge-search\n\nOneSearch integration as the default research runtime for the Forge SDK.\n\nThis crate standardizes multi-engine web search, content extraction, web\ncrawling, site mapping, markdown/text transforms, and AI answer generation\nas first-class Forge tools. It wraps the OneSearch API (a Go-based\nmulti-engine search service) and exposes each capability as a registered\ntool conforming to the forge-tool `ToolDefinition` + `ToolExecutor` model.\n\n# Capabilities\n\n| Tool | Description | ANVIL Tier |\n|------|-------------|-----------|\n| `search` | Multi-engine web search with deduplication | External (Tier 2) |\n| `search_images` | Multi-engine image search | External (Tier 2) |\n| `extract_content` | Extract structured content from URLs | External (Tier 2) |\n| `crawl_site` | Breadth-first site crawl with depth/breadth limits | External (Tier 2) |\n| `map_site` | Discover site URL structure | External (Tier 2) |\n| `summarize_text` | Summarize text content for LLM consumption | Platform (Tier 1) |\n\n# Architecture\n\n```text\nSearchConfig (OneSearch endpoint, API key, engines, defaults)\n      |\n      v\n  Search tool executors (POST through forge-web fetch controls)\n      |\n      +--> search()       --> SearchResponse\n      +--> search_images() --> ImageSearchResponse\n      +--> extract()      --> ExtractResponse\n      +--> crawl()        --> CrawlResponse\n      +--> map_site()     --> MapResponse\n      |\n      v\n  Tool Registration (register_search_tools)\n```\n\n# OneSearch Compatibility\n\nThis crate communicates with the OneSearch API (Go service at\n`aut0/onesearch-api/`). The API supports multiple search engines\n(Google, Bing, DuckDuckGo, Yandex, Baidu) and a Tavily-compatible\ninterface for search, extract, crawl, and map operations.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\nuse forge_search::tools::register_search_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet config = SearchConfig::default();\nlet mut registry = ToolRegistry::new();\nregister_search_tools(&mut registry, &config).unwrap();\nassert!(registry.contains(\"search\"));\nassert!(registry.contains(\"extract_content\"));\n```"
        },
        {
          "name": "error",
          "line": 63,
          "signature": "pub mod error;",
          "documentation": ""
        },
        {
          "name": "tools",
          "line": 64,
          "signature": "pub mod tools;",
          "documentation": ""
        },
        {
          "name": "types",
          "line": 65,
          "signature": "pub mod types;",
          "documentation": ""
        },
        {
          "name": "prelude",
          "line": 68,
          "signature": "pub mod prelude;",
          "documentation": "Re-exports of the most commonly used types."
        },
        {
          "name": "pub use crate::config::SearchConfig;",
          "line": 69,
          "signature": "pub use crate::config::SearchConfig;",
          "documentation": ""
        },
        {
          "name": "pub use crate::error::{SearchError, SearchResult};",
          "line": 70,
          "signature": "pub use crate::error::{SearchError, SearchResult};",
          "documentation": ""
        },
        {
          "name": "pub use crate::tools::{register_search_tools, SEARCH_TOOL_NAMES};",
          "line": 71,
          "signature": "pub use crate::tools::{register_search_tools, SEARCH_TOOL_NAMES};",
          "documentation": ""
        },
        {
          "name": "pub use crate::types::{\n        CrawlRequest, CrawlResponse, ExtractRequest, ExtractResponse, MapRequest, MapResponse,\n        SearchRequest, SearchResponse, SearchResultEntry,\n    };",
          "line": 72,
          "signature": "pub use crate::types::{\n        CrawlRequest, CrawlResponse, ExtractRequest, ExtractResponse, MapRequest, MapResponse,\n        SearchRequest, SearchResponse, SearchResultEntry,\n    };",
          "documentation": ""
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-search/src/tools.rs",
      "sha256": "f99c3a8f4fd3c6a31219707ca260c214e51ae0ff7c16e0e7d6c7781bf5ed3188",
      "artifactSha256": "ec4fd38e73e19fb4e968a28a887be5f6ecb0831d8c193d918980ab091df8c2b9",
      "url": "/reference/source/forge-rs/crates/forge-search/src/tools.rs.txt",
      "declarations": [
        {
          "name": "::SEARCH_TOOL_NAMES",
          "line": 50,
          "signature": "pub const SEARCH_TOOL_NAMES: &[&str];",
          "documentation": "The names of all search tools registered by [`register_search_tools`]."
        },
        {
          "name": "::search_tool_definitions",
          "line": 80,
          "signature": "pub fn search_tool_definitions(config: &SearchConfig) -> Vec<ToolDefinition>;",
          "documentation": "Returns the tool definitions for all search tools.\n\n# Arguments\n\n* `config` - The search configuration (used for setting default values\n  in tool descriptions).\n\n# Returns\n\nA `Vec` of [`ToolDefinition`] values, one for each search tool.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\nuse forge_search::tools::search_tool_definitions;\n\nlet config = SearchConfig::default();\nlet defs = search_tool_definitions(&config);\nassert_eq!(defs.len(), 6);\n```"
        },
        {
          "name": "::register_search_tools",
          "line": 124,
          "signature": "pub fn register_search_tools(\n    registry: &mut ToolRegistry,\n    config: &SearchConfig,\n) -> Result<(), ForgeToolError>;",
          "documentation": "Registers all search tools into the given [`ToolRegistry`].\n\nEach tool is registered with its definition and an executor that posts to\nthe configured OneSearch API. The executors validate parameters and return\nstructured JSON results.\n\n# Arguments\n\n* `registry` - The tool registry to register search tools into.\n* `config` - The search configuration.\n\n# Returns\n\n`Ok(())` if all tools are registered successfully.\n\n# Errors\n\nReturns [`ForgeToolError::RegistryError`] if any tool name is already\nregistered in the registry.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\nuse forge_search::tools::register_search_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet config = SearchConfig::default();\nlet mut registry = ToolRegistry::new();\nregister_search_tools(&mut registry, &config).unwrap();\nassert!(registry.contains(\"search\"));\nassert!(registry.contains(\"extract_content\"));\n```"
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-search/src/types.rs",
      "sha256": "3b9087c879f481d381b8faa0ad99c8f9e009423e589ec4ff5bc70018d1c6de94",
      "artifactSha256": "9c130fae89f63fd9d4b41df440b6eb95ba336bc9f0046f238fd3c408578a99e7",
      "url": "/reference/source/forge-rs/crates/forge-search/src/types.rs.txt",
      "declarations": [
        {
          "name": "::SearchRequest",
          "line": 20,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchRequest {\n\n}",
          "documentation": "A web search request.\n\n# Examples\n\n```\nuse forge_search::types::SearchRequest;\n\nlet req = SearchRequest::new(\"rust programming language\");\nassert_eq!(req.query(), \"rust programming language\");\nassert_eq!(req.max_results(), 5);\n```"
        },
        {
          "name": "::SearchRequest::new",
          "line": 52,
          "signature": "pub fn new(query: impl Into<String>) -> Self;",
          "documentation": "Creates a new search request with default parameters.\n\n# Arguments\n\n* `query` - The search query text.\n\n# Returns\n\nA new `SearchRequest` with the given query and default settings\n(5 max results, basic depth, general topic)."
        },
        {
          "name": "::SearchRequest::query",
          "line": 67,
          "signature": "pub fn query(&self) -> &str;",
          "documentation": "Returns the search query text."
        },
        {
          "name": "::SearchRequest::max_results",
          "line": 72,
          "signature": "pub fn max_results(&self) -> u32;",
          "documentation": "Returns the maximum number of results."
        },
        {
          "name": "::SearchRequest::with_max_results",
          "line": 77,
          "signature": "pub fn with_max_results(mut self, max: u32) -> Self;",
          "documentation": "Sets the maximum number of results to return."
        },
        {
          "name": "::SearchRequest::with_search_depth",
          "line": 83,
          "signature": "pub fn with_search_depth(mut self, depth: &str) -> Self;",
          "documentation": "Sets the search depth."
        },
        {
          "name": "::SearchRequest::with_topic",
          "line": 89,
          "signature": "pub fn with_topic(mut self, topic: &str) -> Self;",
          "documentation": "Sets the topic filter."
        },
        {
          "name": "::SearchRequest::with_answer",
          "line": 95,
          "signature": "pub fn with_answer(mut self) -> Self;",
          "documentation": "Enables AI-generated answer in the response."
        },
        {
          "name": "::SearchRequest::with_raw_content",
          "line": 101,
          "signature": "pub fn with_raw_content(mut self) -> Self;",
          "documentation": "Enables raw content in results."
        },
        {
          "name": "::SearchRequest::with_engines",
          "line": 107,
          "signature": "pub fn with_engines(mut self, engines: Vec<String>) -> Self;",
          "documentation": "Sets the engines to use for mega-search."
        },
        {
          "name": "::SearchRequest::with_include_domains",
          "line": 113,
          "signature": "pub fn with_include_domains(mut self, domains: Vec<String>) -> Self;",
          "documentation": "Limits results to specific domains."
        },
        {
          "name": "::SearchRequest::with_exclude_domains",
          "line": 119,
          "signature": "pub fn with_exclude_domains(mut self, domains: Vec<String>) -> Self;",
          "documentation": "Excludes results from specific domains."
        },
        {
          "name": "::SearchResultEntry",
          "line": 143,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchResultEntry {\n/// The page title.\n\npub title: String,\n/// The page URL.\n\npub url: String,\n/// A content snippet or summary.\n\npub content: String,\n/// Relevance score (0.0 to 1.0).\n\npub score: f64,\n/// Full raw content of the page, if requested.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub raw_content: Option<String>,\n/// Publication date, if available.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub published_date: Option<String>\n}",
          "documentation": "A single search result entry.\n\n# Examples\n\n```\nuse forge_search::types::SearchResultEntry;\n\nlet entry = SearchResultEntry {\n    title: \"Rust Programming\".to_string(),\n    url: \"https://www.rust-lang.org/\".to_string(),\n    content: \"A language empowering everyone...\".to_string(),\n    score: 0.95,\n    raw_content: None,\n    published_date: None,\n};\nassert_eq!(entry.title, \"Rust Programming\");\n```"
        },
        {
          "name": "::SearchResponse",
          "line": 177,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchResponse {\n/// The original query.\n\npub query: String,\n/// The search results.\n\npub results: Vec<SearchResultEntry>,\n/// AI-generated answer, if requested.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub answer: Option<String>,\n/// Time taken to process the search, in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
          "documentation": "The response from a search operation.\n\n# Examples\n\n```\nuse forge_search::types::SearchResponse;\n\nlet response = SearchResponse {\n    query: \"test\".to_string(),\n    results: vec![],\n    answer: None,\n    response_time: 0.5,\n    request_id: \"req-1\".to_string(),\n};\nassert_eq!(response.results.len(), 0);\n```"
        },
        {
          "name": "::ExtractRequest",
          "line": 202,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractRequest {\n\n}",
          "documentation": "A content extraction request.\n\n# Examples\n\n```\nuse forge_search::types::ExtractRequest;\n\nlet req = ExtractRequest::new(vec![\"https://example.com\".to_string()]);\nassert_eq!(req.urls().len(), 1);\n```"
        },
        {
          "name": "::ExtractRequest::new",
          "line": 214,
          "signature": "pub fn new(urls: Vec<String>) -> Self;",
          "documentation": "Creates a new extraction request for the given URLs."
        },
        {
          "name": "::ExtractRequest::urls",
          "line": 224,
          "signature": "pub fn urls(&self) -> &[String];",
          "documentation": "Returns the URLs to extract."
        },
        {
          "name": "::ExtractRequest::with_depth",
          "line": 229,
          "signature": "pub fn with_depth(mut self, depth: &str) -> Self;",
          "documentation": "Sets the extraction depth."
        },
        {
          "name": "::ExtractRequest::with_format",
          "line": 235,
          "signature": "pub fn with_format(mut self, format: &str) -> Self;",
          "documentation": "Sets the output format."
        },
        {
          "name": "::ExtractRequest::with_timeout",
          "line": 241,
          "signature": "pub fn with_timeout(mut self, timeout: f64) -> Self;",
          "documentation": "Sets the timeout in seconds."
        },
        {
          "name": "::ExtractResultEntry",
          "line": 249,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractResultEntry {\n/// The URL that was extracted.\n\npub url: String,\n/// The extracted raw content.\n\npub raw_content: String,\n/// Images found on the page.\n\n#[serde(default)]\npub images: Vec<String>\n}",
          "documentation": "A single extraction result."
        },
        {
          "name": "::ExtractFailedEntry",
          "line": 261,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractFailedEntry {\n/// The URL that failed.\n\npub url: String,\n/// The error message.\n\npub error: String\n}",
          "documentation": "A failed extraction."
        },
        {
          "name": "::ExtractResponse",
          "line": 270,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractResponse {\n/// Successfully extracted results.\n\npub results: Vec<ExtractResultEntry>,\n/// URLs that failed to extract.\n\n#[serde(default)]\npub failed_results: Vec<ExtractFailedEntry>,\n/// Time taken in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
          "documentation": "The response from an extraction operation."
        },
        {
          "name": "::CrawlRequest",
          "line": 293,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CrawlRequest {\n\n}",
          "documentation": "A site crawl request.\n\n# Examples\n\n```\nuse forge_search::types::CrawlRequest;\n\nlet req = CrawlRequest::new(\"https://docs.example.com\");\nassert_eq!(req.url(), \"https://docs.example.com\");\n```"
        },
        {
          "name": "::CrawlRequest::new",
          "line": 313,
          "signature": "pub fn new(url: impl Into<String>) -> Self;",
          "documentation": "Creates a new crawl request for the given root URL."
        },
        {
          "name": "::CrawlRequest::url",
          "line": 327,
          "signature": "pub fn url(&self) -> &str;",
          "documentation": "Returns the root URL."
        },
        {
          "name": "::CrawlRequest::with_max_depth",
          "line": 332,
          "signature": "pub fn with_max_depth(mut self, depth: u32) -> Self;",
          "documentation": "Sets the maximum crawl depth."
        },
        {
          "name": "::CrawlRequest::with_max_breadth",
          "line": 338,
          "signature": "pub fn with_max_breadth(mut self, breadth: u32) -> Self;",
          "documentation": "Sets the maximum breadth per level."
        },
        {
          "name": "::CrawlRequest::with_limit",
          "line": 344,
          "signature": "pub fn with_limit(mut self, limit: u32) -> Self;",
          "documentation": "Sets the maximum total pages to crawl."
        },
        {
          "name": "::CrawlRequest::with_select_paths",
          "line": 350,
          "signature": "pub fn with_select_paths(mut self, paths: Vec<String>) -> Self;",
          "documentation": "Sets path patterns to include."
        },
        {
          "name": "::CrawlRequest::with_exclude_paths",
          "line": 356,
          "signature": "pub fn with_exclude_paths(mut self, paths: Vec<String>) -> Self;",
          "documentation": "Sets path patterns to exclude."
        },
        {
          "name": "::CrawlResultEntry",
          "line": 364,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CrawlResultEntry {\n/// The page URL.\n\npub url: String,\n/// The page content (in the requested format).\n\npub raw_content: String,\n/// Images found on the page.\n\n#[serde(default)]\npub images: Vec<String>\n}",
          "documentation": "A single crawled page result."
        },
        {
          "name": "::CrawlResponse",
          "line": 376,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CrawlResponse {\n/// The base URL that was crawled.\n\npub base_url: String,\n/// The crawled page results.\n\npub results: Vec<CrawlResultEntry>,\n/// Time taken in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
          "documentation": "The response from a crawl operation."
        },
        {
          "name": "::MapRequest",
          "line": 398,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MapRequest {\n\n}",
          "documentation": "A site mapping request.\n\n# Examples\n\n```\nuse forge_search::types::MapRequest;\n\nlet req = MapRequest::new(\"https://docs.example.com\");\nassert_eq!(req.url(), \"https://docs.example.com\");\n```"
        },
        {
          "name": "::MapRequest::new",
          "line": 412,
          "signature": "pub fn new(url: impl Into<String>) -> Self;",
          "documentation": "Creates a new site map request for the given URL."
        },
        {
          "name": "::MapRequest::url",
          "line": 423,
          "signature": "pub fn url(&self) -> &str;",
          "documentation": "Returns the root URL."
        },
        {
          "name": "::MapRequest::with_max_depth",
          "line": 428,
          "signature": "pub fn with_max_depth(mut self, depth: u32) -> Self;",
          "documentation": "Sets the maximum depth."
        },
        {
          "name": "::MapRequest::with_max_breadth",
          "line": 434,
          "signature": "pub fn with_max_breadth(mut self, breadth: u32) -> Self;",
          "documentation": "Sets the maximum breadth."
        },
        {
          "name": "::MapRequest::with_limit",
          "line": 440,
          "signature": "pub fn with_limit(mut self, limit: u32) -> Self;",
          "documentation": "Sets the maximum total URLs to discover."
        },
        {
          "name": "::MapResponse",
          "line": 448,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MapResponse {\n/// The base URL that was mapped.\n\npub base_url: String,\n/// The discovered URLs.\n\npub results: Vec<String>,\n/// Time taken in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
          "documentation": "The response from a site mapping operation."
        }
      ]
    }
  ]
}
