Skip to main content

clawft_kernel/
config.rs

1//! Kernel configuration re-exports and extensions.
2//!
3//! The base [`KernelConfig`] is defined in `clawft-types` so it can
4//! be embedded in the root `Config` without circular dependencies.
5//! This module re-exports it and provides kernel-specific extensions.
6
7pub use clawft_types::config::KernelConfig;
8
9use crate::capability::AgentCapabilities;
10
11/// Extended kernel configuration with capability defaults.
12///
13/// This wraps the base `KernelConfig` from `clawft-types` with
14/// kernel-specific fields that reference types only available
15/// in this crate (e.g. `AgentCapabilities`).
16#[derive(Debug, Clone, Default)]
17pub struct KernelConfigExt {
18    /// Base configuration from the config file.
19    pub base: KernelConfig,
20
21    /// Default capabilities assigned to new agents when none are
22    /// specified explicitly.
23    pub default_capabilities: Option<AgentCapabilities>,
24}
25
26impl From<KernelConfig> for KernelConfigExt {
27    fn from(base: KernelConfig) -> Self {
28        Self {
29            base,
30            default_capabilities: None,
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn kernel_config_ext_from_base() {
41        let base = KernelConfig {
42            governance: Default::default(),
43            profile: None,
44            shared_services: Default::default(),
45            enabled: true,
46            max_processes: 128,
47            health_check_interval_secs: 10,
48            cluster: None,
49            chain: None,
50            resource_tree: None,
51            vector: None,
52            spatial: None,
53            profiles: None,
54            pairing: None,
55            mesh: None,
56            anchor: None,
57            ipc_tcp: None,
58            llm: None,
59            agent: None,
60            brand: ::clawft_types::config::DEFAULT_BRAND.to_string(),
61        };
62        let ext = KernelConfigExt::from(base.clone());
63        assert!(ext.base.enabled);
64        assert_eq!(ext.base.max_processes, 128);
65        assert!(ext.default_capabilities.is_none());
66    }
67
68    #[test]
69    fn kernel_config_ext_default() {
70        let ext = KernelConfigExt::default();
71        assert!(ext.base.enabled);
72        assert_eq!(ext.base.max_processes, 64);
73    }
74
75    #[test]
76    fn kernel_config_reexport() {
77        // Verify the re-export works
78        let cfg = KernelConfig::default();
79        assert!(cfg.enabled);
80    }
81}