mesh-llm-config 0.75.0

Configuration parsing and validation for mesh-llm
Documentation
use super::shared::{
    absent_condition, equals_bool_condition, present_condition, push_allowed_pattern_constraint,
    push_dependency_disable, push_non_empty_constraint, push_range_constraint,
    push_requires_constraint, set_numeric, set_static_options, set_static_unavailable,
    set_text_format,
};
use super::*;

pub(super) fn apply_runtime_controls_behavior(setting: &mut ConfigSettingSchema, rendered: &str) {
    match rendered {
        "owner_control.advertise_addr" => {
            control_behavior_mut(setting)
                .enable_when
                .push(present_condition("owner_control.bind"));
            push_dependency_disable(
                setting,
                absent_condition("owner_control.bind"),
                "owner_control.advertise_addr requires owner_control.bind so the advertised port is actually listening".to_string(),
            );
            push_requires_constraint(setting, "owner_control.bind");
        }
        "telemetry.enabled" => set_static_options(setting),
        "telemetry.service_name" => {
            push_non_empty_constraint(setting);
            push_allowed_pattern_constraint(setting, r"^[A-Za-z0-9_-]+$");
        }
        "telemetry.endpoint" | "telemetry.metrics.endpoint" => {
            push_non_empty_constraint(setting);
        }
        "telemetry.export_interval_secs" => {
            set_numeric(setting, Some(1.0), None, Some(1.0), Some("sec"));
        }
        "telemetry.queue_size" => set_numeric(setting, Some(1.0), None, Some(1.0), None),
        "telemetry.prompt_shape_metrics" => set_static_unavailable(
            setting,
            "Prompt-shape telemetry is intentionally disabled until the telemetry surface is reviewed.",
        ),
        "mesh_requirements.min_node_version" | "mesh_requirements.max_node_version" => {
            set_text_format(setting, ConfigTextFormat::Semver);
            push_non_empty_constraint(setting);
        }
        "mesh_requirements.min_protocol_version" => {
            set_numeric(setting, Some(0.0), None, Some(1.0), None);
            push_range_constraint(
                setting,
                None,
                Some("mesh_requirements.max_protocol_version".to_string()),
            );
        }
        "mesh_requirements.max_protocol_version" => {
            set_numeric(setting, Some(0.0), None, Some(1.0), None);
            push_range_constraint(
                setting,
                Some("mesh_requirements.min_protocol_version".to_string()),
                None,
            );
        }
        "mesh_requirements.require_release_attestation" => set_static_options(setting),
        "mesh_requirements.release_signer_keys" => {
            set_text_format(setting, ConfigTextFormat::Ed25519Key);
            control_behavior_mut(setting)
                .enable_when
                .push(equals_bool_condition(
                    "mesh_requirements.require_release_attestation",
                    true,
                ));
            push_dependency_disable(
                setting,
                equals_bool_condition("mesh_requirements.require_release_attestation", false),
                "mesh_requirements.release_signer_keys requires mesh_requirements.require_release_attestation = true".to_string(),
            );
        }
        "plugin.<plugin-name>.startup.connect_timeout_secs"
        | "plugin.<plugin-name>.startup.init_timeout_secs" => {
            set_numeric(setting, Some(1.0), None, Some(1.0), Some("sec"));
        }
        "plugin.<plugin-name>.startup.optional" | "plugin.<plugin-name>.startup.lazy_start" => {
            set_static_options(setting)
        }
        "runtime.mode" | "runtime.startup_failure_policy" => set_static_options(setting),
        "runtime.drain_timeout_secs" => {
            set_numeric(setting, Some(1.0), Some(3600.0), Some(1.0), Some("sec"));
            push_range_constraint(
                setting,
                None,
                Some("runtime.drain_timeout_max_secs".to_string()),
            );
        }
        "runtime.drain_timeout_max_secs" => {
            set_numeric(setting, Some(1.0), Some(3600.0), Some(1.0), Some("sec"));
            push_range_constraint(
                setting,
                Some("runtime.drain_timeout_secs".to_string()),
                None,
            );
        }
        "runtime.activity.enabled" => set_static_options(setting),
        "runtime.activity.idle_after_secs" => {
            set_numeric(setting, Some(30.0), Some(86400.0), Some(1.0), Some("sec"));
        }
        "runtime.activity.poll_interval_secs" => {
            set_numeric(setting, Some(1.0), Some(60.0), Some(1.0), Some("sec"));
        }
        "runtime.activity.resume_debounce_secs" => {
            set_numeric(setting, Some(0.0), Some(300.0), Some(1.0), Some("sec"));
        }
        "runtime.activity.response" | "runtime.activity.advertisement" => {
            set_static_options(setting)
        }
        _ => {}
    }
}

fn control_behavior_mut(setting: &mut ConfigSettingSchema) -> &mut ConfigControlBehavior {
    setting
        .control_behavior
        .get_or_insert_with(ConfigControlBehavior::default)
}