Skip to main content

agentics_domain/
zip_project.rs

1use serde::{Deserialize, Serialize};
2
3/// Network access policy requested for a phase.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
5#[serde(rename_all = "snake_case")]
6pub enum ZipProjectNetworkAccess {
7    Disabled,
8    Loopback,
9    Enabled,
10}
11
12impl ZipProjectNetworkAccess {
13    /// Docker network mode used by the current Docker runner.
14    pub fn docker_network_mode(self) -> DockerNetworkMode {
15        match self {
16            Self::Disabled | Self::Loopback => DockerNetworkMode::None,
17            Self::Enabled => DockerNetworkMode::Bridge,
18        }
19    }
20
21    /// Clamp a requested phase policy to a challenge-owned maximum policy.
22    pub fn clamp_to(self, maximum: Self) -> Self {
23        if self.rank() <= maximum.rank() {
24            self
25        } else {
26            maximum
27        }
28    }
29
30    fn rank(self) -> u8 {
31        match self {
32            Self::Disabled => 0,
33            Self::Loopback => 1,
34            Self::Enabled => 2,
35        }
36    }
37}
38
39/// Docker network mode selected by the runner after policy resolution.
40#[derive(Debug, Clone, Copy, PartialEq, Eq)]
41pub enum DockerNetworkMode {
42    /// Disable container networking with Docker's `none` network mode.
43    None,
44    /// Use Docker's default bridge network.
45    Bridge,
46}
47
48impl DockerNetworkMode {
49    /// Stable Docker API string for this network mode.
50    pub fn as_str(self) -> &'static str {
51        match self {
52            Self::None => "none",
53            Self::Bridge => "bridge",
54        }
55    }
56}
57
58/// Concrete limits for one execution phase after challenge-owned policy is applied.
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
60pub struct ZipProjectPhaseLimits {
61    pub timeout_sec: u64,
62    pub memory_limit_mb: u64,
63    pub cpu_limit_millis: u32,
64    pub disk_limit_mb: u64,
65    pub network_access: ZipProjectNetworkAccess,
66}