Skip to main content

harn_vm/agent_events/
host_injection.rs

1use serde::{Deserialize, Serialize};
2
3use crate::security::{DetectorVerdict, TrustLevel};
4
5#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
6#[serde(rename_all = "snake_case")]
7pub enum InjectionDelivery {
8    TurnBoundary,
9    #[default]
10    Immediate,
11    AfterNextToolCall,
12}
13
14impl InjectionDelivery {
15    pub fn as_str(self) -> &'static str {
16        match self {
17            Self::TurnBoundary => "turn_boundary",
18            Self::Immediate => "immediate",
19            Self::AfterNextToolCall => "after_next_tool_call",
20        }
21    }
22
23    pub fn parse(value: &str) -> Option<Self> {
24        match value {
25            "turn_boundary" => Some(Self::TurnBoundary),
26            "immediate" => Some(Self::Immediate),
27            "after_next_tool_call" => Some(Self::AfterNextToolCall),
28            _ => None,
29        }
30    }
31}
32
33#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
34pub struct HostInjectionProvenance {
35    pub initiator: String,
36    pub source: String,
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub host: Option<String>,
39    pub ts_ms: i64,
40}
41
42#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
43#[serde(rename_all = "snake_case")]
44pub enum SanitizationAction {
45    Passed,
46    Summarized,
47    Pointerized,
48    Blocked,
49}
50
51#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
52pub struct SanitizationVerdict {
53    pub trust: TrustLevel,
54    #[serde(default, skip_serializing_if = "Option::is_none")]
55    pub detector: Option<DetectorVerdict>,
56    pub action: SanitizationAction,
57    pub original_bytes: u64,
58    pub delivered_bytes: u64,
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub summary_model: Option<String>,
61    #[serde(default, skip_serializing_if = "Vec::is_empty")]
62    pub labels: Vec<String>,
63}
64
65#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
66#[serde(rename_all = "snake_case")]
67pub enum AttachmentFlavor {
68    Image,
69    TextFrame,
70    FrameRing,
71    File,
72}
73
74#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
75#[serde(rename_all = "snake_case")]
76pub enum AttachmentRendering {
77    ImageBlock,
78    DescriptionPlusPointer,
79    PointerOnly,
80    InlineText,
81}