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