harn_vm/agent_events/
host_injection.rs1use 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}