use std::collections::BTreeMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::ontology::{HarnessId, SecretRef};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum EnvValue {
Literal(String),
Secret(SecretRef),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Default)]
#[serde(rename_all = "snake_case")]
pub enum PermissionDefault {
#[default]
Deny,
Allow,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct PermissionPolicy {
#[serde(default = "default_permission_timeout")]
pub timeout_seconds: u32,
#[serde(default)]
pub default: PermissionDefault,
}
fn default_permission_timeout() -> u32 {
300
}
impl Default for PermissionPolicy {
fn default() -> Self {
Self {
timeout_seconds: 300,
default: PermissionDefault::Deny,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct WorkerSpec {
pub harness: HarnessId,
#[serde(default)]
pub model: Option<String>,
#[serde(default)]
pub preset: Option<String>,
#[serde(default = "default_cwd")]
pub cwd: String,
#[serde(default)]
pub env: BTreeMap<String, EnvValue>,
#[serde(default)]
pub permission: PermissionPolicy,
}
fn default_cwd() -> String {
".".to_string()
}