claude_agent/context/
mod.rs1pub mod builder;
4pub mod level;
5pub mod memory_loader;
6pub mod orchestrator;
7pub mod provider;
8pub mod routing;
9pub mod rule_index;
10pub mod static_context;
11
12pub use crate::types::TokenUsage;
13pub use builder::ContextBuilder;
14pub use level::{LeveledMemoryProvider, enterprise_base_path, user_base_path};
15pub use memory_loader::MemoryContent;
16pub use memory_loader::MemoryLoader;
17pub use orchestrator::PromptOrchestrator;
18pub use provider::{FileMemoryProvider, InMemoryProvider, MAX_IMPORT_DEPTH, MemoryProvider};
19pub use routing::RoutingStrategy;
20pub use rule_index::RuleIndex;
21pub use static_context::{McpToolMeta, StaticContext};
22
23pub use crate::skills::SkillIndex;
25
26use thiserror::Error;
27
28#[derive(Error, Debug)]
29pub enum ContextError {
30 #[error("Source error: {message}")]
31 Source { message: String },
32
33 #[error("Token budget exceeded: {current} > {limit}")]
34 TokenBudgetExceeded { current: u64, limit: u64 },
35
36 #[error("Skill not found: {name}")]
37 SkillNotFound { name: String },
38
39 #[error("Rule not found: {name}")]
40 RuleNotFound { name: String },
41
42 #[error("Parse error: {message}")]
43 Parse { message: String },
44
45 #[error("IO error: {0}")]
46 Io(#[from] std::io::Error),
47}
48
49pub type ContextResult<T> = std::result::Result<T, ContextError>;
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn test_context_error_display() {
57 let err = ContextError::SkillNotFound {
58 name: "test-skill".to_string(),
59 };
60 assert!(err.to_string().contains("test-skill"));
61 }
62
63 #[test]
64 fn test_token_budget_error() {
65 let err = ContextError::TokenBudgetExceeded {
66 current: 250_000,
67 limit: 200_000,
68 };
69 assert!(err.to_string().contains("250000"));
70 assert!(err.to_string().contains("200000"));
71 }
72}