harn-vm 0.10.16

Async bytecode virtual machine for the Harn programming language
Documentation
use serde::{Deserialize, Serialize};

use crate::security::{DetectorVerdict, TrustLevel};

#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum InjectionDelivery {
    TurnBoundary,
    #[default]
    Immediate,
    AfterNextToolCall,
}

impl InjectionDelivery {
    pub fn as_str(self) -> &'static str {
        match self {
            Self::TurnBoundary => "turn_boundary",
            Self::Immediate => "immediate",
            Self::AfterNextToolCall => "after_next_tool_call",
        }
    }

    pub fn parse(value: &str) -> Option<Self> {
        match value {
            "turn_boundary" => Some(Self::TurnBoundary),
            "immediate" => Some(Self::Immediate),
            "after_next_tool_call" => Some(Self::AfterNextToolCall),
            _ => None,
        }
    }
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct HostInjectionProvenance {
    pub initiator: String,
    pub source: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub ts_ms: i64,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SanitizationAction {
    Passed,
    Summarized,
    Pointerized,
    Blocked,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct SanitizationVerdict {
    pub trust: TrustLevel,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub detector: Option<DetectorVerdict>,
    pub action: SanitizationAction,
    pub original_bytes: u64,
    pub delivered_bytes: u64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub summary_model: Option<String>,
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub labels: Vec<String>,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AttachmentFlavor {
    Image,
    TextFrame,
    FrameRing,
    File,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AttachmentRendering {
    ImageBlock,
    DescriptionPlusPointer,
    PointerOnly,
    InlineText,
}