1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
4#[serde(rename_all = "snake_case")]
5pub enum CanonicalContractKind {
6 Capability,
7 Receipt,
8 Policy,
9 ArtifactFamily,
10}
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
13#[serde(rename_all = "snake_case")]
14pub enum ExtensionPointKind {
15 Authority,
16 Store,
17 ToolServerConnection,
18 ResourceProvider,
19 PromptProvider,
20 Adapter,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
24#[serde(rename_all = "snake_case")]
25pub enum ExtensionStability {
26 Supported,
27 Experimental,
28 Internal,
29}
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
32#[serde(rename_all = "snake_case")]
33pub enum ExtensionIsolation {
34 InProcess,
35 Subprocess,
36 RemoteService,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
40#[serde(rename_all = "snake_case")]
41pub enum ExtensionEvidenceMode {
42 None,
43 ImportOnly,
44 DispatchOnly,
45 ImportAndDispatch,
46}
47
48#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
49#[serde(rename_all = "snake_case")]
50pub enum ExtensionPrivilege {
51 FilesystemRead,
52 FilesystemWrite,
53 NetworkEgress,
54 ProcessExecution,
55 OperatorSecrets,
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
59#[serde(rename_all = "snake_case")]
60pub enum ExtensionDistribution {
61 OfficialFirstParty,
62 CustomFirstParty,
63 ThirdPartyCustom,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
67#[serde(rename_all = "snake_case")]
68pub enum OfficialImplementationSource {
69 FirstParty,
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
73#[serde(rename_all = "snake_case")]
74pub enum ExtensionNegotiationOutcome {
75 Accepted,
76 Rejected,
77}
78
79#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
80#[serde(rename_all = "snake_case")]
81pub enum QualificationMode {
82 OfficialToOfficial,
83 OfficialToCustom,
84 CustomToOfficial,
85 CustomToCustom,
86}
87
88#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
89#[serde(rename_all = "snake_case")]
90pub enum QualificationOutcome {
91 Pass,
92 FailClosed,
93}
94
95#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
96#[serde(rename_all = "snake_case")]
97pub enum QualificationInvariant {
98 PreservesCanonicalTruth,
99 RequiresLocalPolicyActivation,
100 RejectsVersionMismatch,
101 RejectsPrivilegeEscalation,
102 RejectsTruthMutation,
103 RejectsUnsignedEvidence,
104}
105
106#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
107#[serde(rename_all = "snake_case")]
108pub enum ExtensionNegotiationRejectionCode {
109 MalformedInventory,
110 MalformedOfficialStack,
111 MalformedManifest,
112 UnknownExtensionPoint,
113 UnsupportedOfficialStack,
114 UnsupportedChioContract,
115 UnsupportedProfile,
116 UnsupportedComponent,
117 UnsupportedIsolation,
118 UnsupportedEvidenceMode,
119 UnsupportedPrivilege,
120 OfficialOnlyPoint,
121 InternalOnlyPoint,
122 LocalPolicyActivationRequired,
123 MissingSubjectBinding,
124 MissingSignerVerification,
125 MissingFreshnessCheck,
126 TruthMutationNotAllowed,
127 TrustWideningNotAllowed,
128}
129
130#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
131#[serde(deny_unknown_fields)]
132pub struct CanonicalTruthSurface {
133 pub id: String,
134 pub name: String,
135 pub crate_path: String,
136 pub contract_kind: CanonicalContractKind,
137 pub artifact_schemas: Vec<String>,
138 pub notes: String,
139 pub extensions_may_write: bool,
140}
141
142#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
143#[serde(deny_unknown_fields)]
144pub struct ChioExtensionPoint {
145 pub id: String,
146 pub name: String,
147 pub point_kind: ExtensionPointKind,
148 pub owner: String,
149 pub contract_path: String,
150 pub stability: ExtensionStability,
151 pub allowed_isolations: Vec<ExtensionIsolation>,
152 pub allowed_evidence_modes: Vec<ExtensionEvidenceMode>,
153 pub allowed_privileges: Vec<ExtensionPrivilege>,
154 pub custom_implementations_allowed: bool,
155 pub policy_activation_required: bool,
156 pub official_component_ids: Vec<String>,
157}
158
159#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
160#[serde(deny_unknown_fields)]
161pub struct ChioExtensionInventory {
162 pub schema: String,
163 pub chio_contract_version: String,
164 pub canonical_truth: Vec<CanonicalTruthSurface>,
165 pub extension_points: Vec<ChioExtensionPoint>,
166}
167
168#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
169#[serde(deny_unknown_fields)]
170pub struct OfficialStackComponent {
171 pub id: String,
172 pub name: String,
173 pub extension_point_ids: Vec<String>,
174 pub crate_path: String,
175 pub implementation_source: OfficialImplementationSource,
176}
177
178#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
179#[serde(deny_unknown_fields)]
180pub struct OfficialStackProfile {
181 pub id: String,
182 pub name: String,
183 pub description: String,
184 pub component_ids: Vec<String>,
185}
186
187#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
188#[serde(deny_unknown_fields)]
189pub struct OfficialStackPackage {
190 pub schema: String,
191 pub package_id: String,
192 pub version: String,
193 pub chio_contract_version: String,
194 pub components: Vec<OfficialStackComponent>,
195 pub profiles: Vec<OfficialStackProfile>,
196}
197
198#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
199#[serde(deny_unknown_fields)]
200pub struct ExtensionCompatibility {
201 pub chio_contract_version: String,
202 pub official_stack_package_id: String,
203 pub supported_component_ids: Vec<String>,
204 pub supported_contract_schemas: Vec<String>,
205}
206
207#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
208#[serde(deny_unknown_fields)]
209pub struct ExtensionRuntimeEnvelope {
210 pub isolation: ExtensionIsolation,
211 pub allowed_privileges: Vec<ExtensionPrivilege>,
212 pub evidence_mode: ExtensionEvidenceMode,
213 pub requires_subject_binding: bool,
214 pub requires_signer_verification: bool,
215 pub requires_freshness_check: bool,
216 pub requires_local_policy_activation: bool,
217 pub allows_truth_mutation: bool,
218 pub allows_trust_widening: bool,
219}
220
221#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
222#[serde(deny_unknown_fields)]
223pub struct ChioExtensionManifest {
224 pub schema: String,
225 pub extension_id: String,
226 pub display_name: String,
227 pub version: String,
228 pub distribution: ExtensionDistribution,
229 pub extension_point_id: String,
230 pub capabilities: Vec<String>,
231 pub supported_profiles: Vec<String>,
232 pub compatibility: ExtensionCompatibility,
233 pub runtime: ExtensionRuntimeEnvelope,
234}
235
236#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
237#[serde(deny_unknown_fields)]
238pub struct ExtensionNegotiationRejection {
239 pub code: ExtensionNegotiationRejectionCode,
240 pub detail: String,
241}
242
243#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
244#[serde(deny_unknown_fields)]
245pub struct ExtensionNegotiationReport {
246 pub schema: String,
247 pub official_stack_package_id: String,
248 pub extension_id: String,
249 pub extension_point_id: String,
250 pub outcome: ExtensionNegotiationOutcome,
251 pub reasons: Vec<ExtensionNegotiationRejection>,
252}
253
254#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
255#[serde(deny_unknown_fields)]
256pub struct ExtensionQualificationCase {
257 pub id: String,
258 pub name: String,
259 pub extension_point_id: String,
260 pub supported_component_id: String,
261 pub candidate_extension_id: String,
262 pub mode: QualificationMode,
263 pub expected_outcome: QualificationOutcome,
264 pub observed_outcome: QualificationOutcome,
265 pub rejection_codes: Vec<ExtensionNegotiationRejectionCode>,
266 pub invariants: Vec<QualificationInvariant>,
267}
268
269#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
270#[serde(deny_unknown_fields)]
271pub struct ExtensionQualificationMatrix {
272 pub schema: String,
273 pub official_stack_package_id: String,
274 pub chio_contract_version: String,
275 pub cases: Vec<ExtensionQualificationCase>,
276}