orchestrator_config/config/
execution_profile.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
5#[serde(rename_all = "snake_case")]
6pub enum ExecutionProfileMode {
7 #[default]
9 Host,
10 Sandbox,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
16#[serde(rename_all = "snake_case")]
17pub enum ExecutionFsMode {
18 #[default]
20 Inherit,
21 WorkspaceReadonly,
23 WorkspaceRwScoped,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
29#[serde(rename_all = "snake_case")]
30pub enum ExecutionNetworkMode {
31 #[default]
33 Inherit,
34 Deny,
36 Allowlist,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
42pub struct ExecutionProfileConfig {
43 #[serde(default)]
45 pub mode: ExecutionProfileMode,
46 #[serde(default)]
48 pub fs_mode: ExecutionFsMode,
49 #[serde(default, skip_serializing_if = "Vec::is_empty")]
51 pub writable_paths: Vec<String>,
52 #[serde(default)]
54 pub network_mode: ExecutionNetworkMode,
55 #[serde(default, skip_serializing_if = "Vec::is_empty")]
57 pub network_allowlist: Vec<String>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub max_memory_mb: Option<u64>,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub max_cpu_seconds: Option<u64>,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub max_processes: Option<u64>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub max_open_files: Option<u64>,
70}
71
72impl Default for ExecutionProfileConfig {
73 fn default() -> Self {
74 Self {
75 mode: ExecutionProfileMode::Host,
76 fs_mode: ExecutionFsMode::Inherit,
77 writable_paths: Vec::new(),
78 network_mode: ExecutionNetworkMode::Inherit,
79 network_allowlist: Vec::new(),
80 max_memory_mb: None,
81 max_cpu_seconds: None,
82 max_processes: None,
83 max_open_files: None,
84 }
85 }
86}
87
88impl ExecutionProfileConfig {
89 pub fn implicit_host() -> Self {
100 Self::default()
101 }
102}