Skip to main content

agentos_native_sidecar_browser/
lib.rs

1#![forbid(unsafe_code)]
2
3//! Browser-side sidecar scaffold for the secure-exec runtime migration.
4
5mod 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}