supercode_interchange/world/
worker.rs1use std::collections::BTreeMap;
4
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8use crate::ontology::{HarnessId, SecretRef};
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
12#[serde(untagged)]
13pub enum EnvValue {
14 Literal(String),
16 Secret(SecretRef),
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Default)]
22#[serde(rename_all = "snake_case")]
23pub enum PermissionDefault {
24 #[default]
26 Deny,
27 Allow,
29}
30
31#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
33pub struct PermissionPolicy {
34 #[serde(default = "default_permission_timeout")]
36 pub timeout_seconds: u32,
37 #[serde(default)]
39 pub default: PermissionDefault,
40}
41
42fn default_permission_timeout() -> u32 {
43 300
44}
45
46impl Default for PermissionPolicy {
47 fn default() -> Self {
48 Self {
49 timeout_seconds: 300,
50 default: PermissionDefault::Deny,
51 }
52 }
53}
54
55#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
57pub struct WorkerSpec {
58 pub harness: HarnessId,
60 #[serde(default)]
62 pub model: Option<String>,
63 #[serde(default)]
65 pub preset: Option<String>,
66 #[serde(default = "default_cwd")]
68 pub cwd: String,
69 #[serde(default)]
71 pub env: BTreeMap<String, EnvValue>,
72 #[serde(default)]
74 pub permission: PermissionPolicy,
75}
76
77fn default_cwd() -> String {
78 ".".to_string()
79}