swink_agent_plugin_web/lib.rs
1#![forbid(unsafe_code)]
2//! Web browsing plugin for swink-agent.
3//!
4//! Provides tools for fetching web pages, searching the web, capturing screenshots,
5//! and extracting structured content. Includes safety policies for domain filtering,
6//! rate limiting, and content sanitization.
7
8/// Ensure a process-wide default rustls crypto provider is installed.
9///
10/// The workspace builds reqwest with `rustls-no-provider` (#1110), so a
11/// `reqwest::Client` cannot be constructed until a process default
12/// [`rustls::crypto::CryptoProvider`] exists. Installs ring; idempotent —
13/// an already-installed provider (e.g. a host's aws-lc-rs for FIPS) wins.
14pub(crate) fn ensure_default_crypto_provider() {
15 let _ = rustls::crypto::ring::default_provider().install_default();
16}
17
18mod config;
19mod content;
20mod domain;
21mod playwright;
22mod plugin;
23mod policy;
24mod search;
25mod tools;
26
27pub use config::{SearchProviderKind, WebPluginConfig, WebPluginConfigBuilder};
28pub use content::FetchedContent;
29pub use domain::{DomainFilter, DomainFilterError};
30// playwright::{ExtractedElement, ExtractionPreset, Viewport} are deliberately
31// NOT re-exported: no public function takes or returns them, so exporting
32// them was dead public surface (a semver liability with zero utility). The
33// types stay in the private `playwright` module for future wiring; re-export
34// them only once a public API actually accepts or produces them.
35pub use plugin::{WebPlugin, WebPluginError};
36pub use search::{SearchError, SearchProvider, SearchResult};