agentos_native_sidecar_browser/
lib.rs1#![forbid(unsafe_code)]
2
3mod service;
6#[cfg(target_arch = "wasm32")]
7mod wasm;
8pub mod wire_dispatch;
9
10pub use service::{
11 BrowserExecutionOptions, BrowserExtension, BrowserExtensionContext, BrowserExtensionHost,
12 BrowserExtensionRequest, BrowserExtensionResponse, BrowserSidecar, BrowserSidecarConfig,
13 BrowserSidecarError,
14};
15#[cfg(target_arch = "wasm32")]
16pub use wasm::{BrowserJsBridge, BrowserSidecarWasm};
17
18use agentos_bridge::{BridgeTypes, GuestRuntime, HostBridge};
19use agentos_sidecar_protocol::wire::WasmPermissionTier;
20use std::collections::BTreeMap;
21
22#[derive(Debug, Clone, PartialEq, Eq)]
23pub enum BrowserWorkerEntrypoint {
24 JavaScript { bootstrap_module: Option<String> },
25 WebAssembly { module_path: Option<String> },
26}
27
28#[derive(Debug, Clone, PartialEq, Eq)]
29pub struct BrowserWorkerSpawnRequest {
30 pub vm_id: String,
31 pub context_id: String,
32 pub execution_id: String,
33 pub runtime: GuestRuntime,
34 pub entrypoint: BrowserWorkerEntrypoint,
35 pub wasm_permission_tier: Option<WasmPermissionTier>,
36 pub process_config: BrowserWorkerProcessConfig,
37 pub os_config: BrowserWorkerOsConfig,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq)]
41pub struct BrowserWorkerProcessConfig {
42 pub cwd: String,
43 pub env: BTreeMap<String, String>,
44 pub argv: Vec<String>,
45 pub platform: String,
46 pub arch: String,
47 pub version: String,
48 pub pid: u32,
49 pub ppid: u32,
50 pub uid: u32,
51 pub gid: u32,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq)]
55pub struct BrowserWorkerOsConfig {
56 pub platform: String,
57 pub arch: String,
58 pub r#type: String,
59 pub release: String,
60 pub version: String,
61 pub cpu_count: u64,
62 pub totalmem: u64,
63 pub freemem: u64,
64 pub hostname: String,
65 pub homedir: String,
66 pub tmpdir: String,
67 pub machine: String,
68 pub user: String,
69 pub shell: String,
70 pub uid: u32,
71 pub gid: u32,
72}
73
74#[derive(Debug, Clone, PartialEq, Eq)]
75pub struct BrowserWorkerHandle {
76 pub worker_id: String,
77 pub runtime: GuestRuntime,
78}
79
80#[derive(Debug, Clone, PartialEq, Eq)]
81pub struct BrowserWorkerHandleRequest {
82 pub vm_id: String,
83 pub execution_id: String,
84 pub worker_id: String,
85}
86
87pub trait BrowserHostBridge: HostBridge {}
88
89impl<T> BrowserHostBridge for T where T: HostBridge {}
90
91pub trait BrowserWorkerBridge: BridgeTypes {
92 fn create_worker(
93 &mut self,
94 request: BrowserWorkerSpawnRequest,
95 ) -> Result<BrowserWorkerHandle, Self::Error>;
96
97 fn terminate_worker(&mut self, request: BrowserWorkerHandleRequest) -> Result<(), Self::Error>;
98}
99
100pub trait BrowserSidecarBridge: BrowserHostBridge + BrowserWorkerBridge {}
101
102impl<T> BrowserSidecarBridge for T where T: BrowserHostBridge + BrowserWorkerBridge {}
103
104#[derive(Debug, Clone, Copy, PartialEq, Eq)]
105pub struct BrowserSidecarScaffold {
106 pub package_name: &'static str,
107 pub kernel_package: &'static str,
108 pub execution_host_thread: &'static str,
109 pub guest_worker_owner_thread: &'static str,
110}
111
112pub fn scaffold() -> BrowserSidecarScaffold {
113 let kernel = agentos_kernel::scaffold();
114
115 BrowserSidecarScaffold {
116 package_name: env!("CARGO_PKG_NAME"),
117 kernel_package: kernel.package_name,
118 execution_host_thread: "main",
119 guest_worker_owner_thread: "main",
120 }
121}