agent_workspace_contract/environment/
execution_operation.rs1use super::*;
4
5pub const EXECUTION_OPERATIONS_PATH: &str =
6 "/internal/v1/workspace/execution-environment-operations";
7pub const EXECUTION_OPERATION_CLEANUP_PATH: &str =
8 "/internal/v1/workspace/execution-environment-operations/{operationId}/cleanup";
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)]
11#[serde(tag = "kind", rename_all = "snake_case")]
12pub enum ExecutionEnvironmentSource {
13 Default,
14 Snapshot { snapshot_id: String },
15 Build { build: SnapshotBuildSpec },
16}
17
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)]
19#[serde(deny_unknown_fields, rename_all = "camelCase")]
20pub struct ProvisionExecutionEnvironmentRequest {
21 pub execution_id: String,
22 pub provider: String,
23 pub source: ExecutionEnvironmentSource,
24 pub persistence: SpacePersistence,
25 pub access_mode: SpaceAccessMode,
26 pub ttl_ms: u64,
27 #[serde(default = "default_poll_interval_ms")]
28 pub poll_interval_ms: u64,
29 #[serde(default = "default_poll_attempts")]
30 pub max_poll_attempts: usize,
31}
32
33fn default_poll_interval_ms() -> u64 {
34 1_000
35}
36
37fn default_poll_attempts() -> usize {
38 600
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)]
42#[serde(deny_unknown_fields, rename_all = "camelCase")]
43pub struct ExecutionEnvironmentOperation {
44 pub id: String,
45 pub execution_id: String,
46 pub provider: String,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub snapshot_id: Option<String>,
49 pub built_snapshot: bool,
50 pub computer_id: String,
51 pub space_id: String,
52 pub space_revision: u64,
53 pub session_id: String,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub lease_id: Option<String>,
56 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub fencing_token: Option<u64>,
58 pub created_at_ms: u64,
59}
60
61#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)]
62#[serde(deny_unknown_fields, rename_all = "camelCase")]
63pub struct IssuedExecutionEnvironmentOperation {
64 pub operation: ExecutionEnvironmentOperation,
65 pub access_ticket_token: String,
66}
67
68impl std::fmt::Debug for IssuedExecutionEnvironmentOperation {
69 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
70 formatter
71 .debug_struct("IssuedExecutionEnvironmentOperation")
72 .field("operation", &self.operation)
73 .field("access_ticket_token", &"[REDACTED]")
74 .finish()
75 }
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)]
79#[serde(deny_unknown_fields, rename_all = "camelCase")]
80pub struct CleanupExecutionEnvironmentRequest {
81 pub operation: ExecutionEnvironmentOperation,
82}
83
84#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)]
85#[serde(deny_unknown_fields, rename_all = "camelCase")]
86pub struct ExecutionEnvironmentCleanup {
87 pub lease_released: bool,
88 pub session_closed: bool,
89 pub space_deleted: bool,
90 pub computer_deleted: bool,
91 pub snapshot_deleted: bool,
92}