agentic_reality/engine/query/
stakes.rs1use crate::engine::query::QueryEngine;
4use crate::types::error::{RealityError, RealityResult};
5use crate::types::stakes::*;
6
7impl<'a> QueryEngine<'a> {
8 pub fn get_stakes_level(&self) -> RealityResult<&StakesLevel> {
9 let awareness = self
10 .engine
11 .stakes_store
12 .consequences
13 .as_ref()
14 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
15 Ok(&awareness.stakes)
16 }
17
18 pub fn get_consequences(&self) -> RealityResult<&[Consequence]> {
19 let awareness = self
20 .engine
21 .stakes_store
22 .consequences
23 .as_ref()
24 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
25 Ok(&awareness.consequence_map)
26 }
27
28 pub fn get_irreversible_actions(&self) -> RealityResult<&[IrreversibleAction]> {
29 let awareness = self
30 .engine
31 .stakes_store
32 .consequences
33 .as_ref()
34 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
35 Ok(&awareness.irreversible)
36 }
37
38 pub fn is_irreversible(&self, action: &str) -> bool {
39 self.engine
40 .stakes_store
41 .consequences
42 .as_ref()
43 .map(|a| a.irreversible.iter().any(|i| i.action == action))
44 .unwrap_or(false)
45 }
46
47 pub fn get_safety_margins(&self) -> RealityResult<&SafetyMargins> {
48 let awareness = self
49 .engine
50 .stakes_store
51 .consequences
52 .as_ref()
53 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
54 Ok(&awareness.safety_margins)
55 }
56
57 pub fn get_guardrails(&self) -> RealityResult<&[Guardrail]> {
58 Ok(&self.get_safety_margins()?.guardrails)
59 }
60
61 pub fn get_risk_field(&self) -> RealityResult<&RiskFieldPerception> {
62 self.engine
63 .stakes_store
64 .risk_field
65 .as_ref()
66 .ok_or_else(|| RealityError::NotInitialized("risk field".into()))
67 }
68
69 pub fn get_risk_for(&self, category: &RiskCategory) -> Option<&RiskLevel> {
70 self.engine
71 .stakes_store
72 .risk_field
73 .as_ref()
74 .and_then(|f| f.risk_map.get(category))
75 }
76
77 pub fn get_blast_radius(&self) -> RealityResult<&BlastRadiusAwareness> {
78 self.engine
79 .stakes_store
80 .blast_radius
81 .as_ref()
82 .ok_or_else(|| RealityError::NotInitialized("blast radius".into()))
83 }
84
85 pub fn get_cascade_analysis(&self) -> RealityResult<&CascadeAnalysis> {
86 Ok(&self.get_blast_radius()?.cascade)
87 }
88}