luft_core/contract/
mod.rs1pub mod backend;
6pub mod cache;
7pub mod event;
8pub mod finding;
9pub mod ids;
10pub mod schema;
11pub mod skill;
12
13pub use backend::*;
15pub use cache::agent_cache_key;
17pub use event::*;
19pub use finding::*;
21pub use ids::*;
23pub use schema::*;
25pub use skill::Skill;
27
28#[cfg(test)]
29mod tests {
30 use super::*;
37
38 #[test]
39 fn reexports_are_accessible() {
40 let _: AgentCapabilities = AgentCapabilities::default();
42 let _: AgentStatus = AgentStatus::Ok;
43 let _: AgentTask;
44 let _: AgentResult;
45 let _: RunContext;
46 let _: BackendError = BackendError::Cancelled;
47 let _: ToolPolicy = ToolPolicy::default();
48 let _: McpEndpoint;
49 let _: Artifact;
50 let _: LogRef = LogRef::default();
51
52 let _: fn(&str, Option<&str>, &str, u32) -> String = agent_cache_key;
54
55 let _: EventSender;
57 let _: AgentEvent;
58 let _: RunStatus = RunStatus::Completed;
59 let _: LogLevel = LogLevel::Info;
60 let _: PlanPhase;
61 let _: ProgressDelta;
62
63 let _: Finding;
65 let _: Severity = Severity::Info;
66 let _: Location;
67
68 let _: RunId = uuid::Uuid::nil();
70 let _: AgentId = uuid::Uuid::nil();
71 let _: PhaseId = 0u32;
72 let _: TokenUsage = TokenUsage::default();
73
74 let _: fn(&serde_json::Value, &serde_json::Value) -> Result<(), SchemaError> =
76 validate_output;
77
78 let _: Skill = Skill {
80 name: "n",
81 description: "d",
82 content: "c",
83 references: &[],
84 };
85 }
86
87 #[test]
88 fn submodule_paths_resolve() {
89 fn _assert_trait(_: &dyn backend::AgentBackend) {}
92 let _: event::AgentEvent;
93 let _: finding::Finding;
94 let _: ids::TokenUsage;
95 let _: schema::SchemaError;
96 let _: fn(&str, Option<&str>, &str, u32) -> String = cache::agent_cache_key;
98 let _: skill::Skill;
99 }
100
101 #[test]
102 fn backend_error_is_retryable_helper() {
103 assert!(BackendError::Timeout.is_retryable());
104 assert!(BackendError::Spawn("x".into()).is_retryable());
105 assert!(!BackendError::Cancelled.is_retryable());
106 assert!(!BackendError::Protocol("x".into()).is_retryable());
107 assert!(!BackendError::Config("x".into()).is_retryable());
108 }
109
110 #[test]
111 fn agent_status_as_str_is_consistent() {
112 assert_eq!(AgentStatus::Ok.as_str(), "ok");
115 assert_eq!(AgentStatus::TimedOut.as_str(), "timed_out");
116 }
117
118 #[test]
119 fn token_usage_default_is_zero() {
120 let t = TokenUsage::default();
121 assert_eq!(t.total(), 0);
122 }
123}