1#![allow(unused_imports, non_camel_case_types, non_snake_case, clippy::all)]
4
5use serde::{Deserialize, Serialize};
6use super::*;
7
8#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
10pub struct Action {
11 pub name: ActionName,
12 pub risk: RiskClass,
13 #[serde(skip_serializing_if = "Option::is_none", default)]
14 pub proof: Option<ProofLevel>,
15 #[serde(skip_serializing_if = "Option::is_none", default)]
16 pub approval: Option<ApprovalRequirement>,
17 #[serde(skip_serializing_if = "Option::is_none", default)]
19 pub description: Option<String>,
20 #[serde(skip_serializing_if = "Option::is_none", default)]
22 pub allow_targets: Option<Vec<String>>,
23 #[serde(skip_serializing_if = "Option::is_none", default)]
25 pub deny_targets: Option<Vec<String>>,
26 #[serde(skip_serializing_if = "Option::is_none", default)]
28 pub allow_actors: Option<Vec<String>>,
29 #[serde(skip_serializing_if = "Option::is_none", default)]
31 pub deny_actors: Option<Vec<String>>,
32 #[serde(skip_serializing_if = "Option::is_none", default)]
34 pub parameters: Option<serde_json::Value>,
35 #[serde(skip_serializing_if = "Option::is_none", default)]
37 pub reversible: Option<bool>,
38 #[serde(skip_serializing_if = "Option::is_none", default)]
40 pub danger_tags: Option<Vec<DangerTag>>,
41 #[serde(skip_serializing_if = "Option::is_none", default)]
43 pub pre_conditions: Option<Vec<String>>,
44 #[serde(skip_serializing_if = "Option::is_none", default)]
46 pub reversal_note: Option<String>,
47}
48
49#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
51pub struct AgentContract {
52 pub contract_version: AgentContract_ContractVersion,
54 pub spec_version: String,
56 pub project: String,
58 #[serde(skip_serializing_if = "Option::is_none", default)]
60 pub trust_domain: Option<TrustDomain>,
61 #[serde(skip_serializing_if = "Option::is_none", default)]
63 pub references: Option<AgentContract_References>,
64 #[serde(skip_serializing_if = "Option::is_none", default)]
66 pub target_sets: Option<std::collections::BTreeMap<String, Vec<String>>>,
67 #[serde(skip_serializing_if = "Option::is_none", default)]
69 pub actions: Option<Vec<Action>>,
70 #[serde(skip_serializing_if = "Option::is_none", default)]
72 pub forbidden: Option<Vec<Forbidden>>,
73 #[serde(skip_serializing_if = "Option::is_none", default)]
75 pub integrations: Option<AgentContract_Integrations>,
76 #[serde(skip_serializing_if = "Option::is_none", default)]
78 pub conformance: Option<AgentContract_Conformance>,
79}
80
81#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
83pub struct AgentContract_Conformance {
84 #[serde(skip_serializing_if = "Option::is_none", default)]
86 pub profiles: Option<Vec<String>>,
87}
88
89#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
91pub enum AgentContract_ContractVersion {
92 #[serde(rename = "1")]
93 V1,
94}
95
96#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
98pub struct AgentContract_Integrations {
99 #[serde(skip_serializing_if = "Option::is_none", default)]
101 pub mcp_tools: Option<Vec<serde_json::Value>>,
102 #[serde(skip_serializing_if = "Option::is_none", default)]
104 pub proofrpc_services: Option<Vec<serde_json::Value>>,
105 #[serde(skip_serializing_if = "Option::is_none", default)]
107 pub test_commands: Option<Vec<String>>,
108}
109
110#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
112pub struct AgentContract_References {
113 #[serde(skip_serializing_if = "Option::is_none", default)]
115 pub threat_model: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none", default)]
118 pub policy_engine: Option<serde_json::Value>,
119 #[serde(skip_serializing_if = "Option::is_none", default)]
121 pub actions_library: Option<String>,
122}
123
124#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
126pub struct Forbidden {
127 pub action: ActionName,
128 #[serde(skip_serializing_if = "Option::is_none", default)]
130 pub reason: Option<String>,
131}