Skip to main content

agentic_reality/engine/query/
stakes.rs

1//! Stakes query operations.
2
3use 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}