harn-vm 0.7.58

Async bytecode virtual machine for the Harn programming language
Documentation
use crate::value::{VmError, VmValue};
use crate::vm::Vm;

pub(crate) fn register_command_policy_builtins(vm: &mut Vm) {
    vm.register_builtin("command_policy", |args, _out| {
        let config = args.first().ok_or_else(|| {
            VmError::Runtime("command_policy: config dict is required".to_string())
        })?;
        crate::orchestration::normalize_command_policy_value(config)
    });

    vm.register_builtin("command_policy_push", |args, _out| {
        let policy =
            crate::orchestration::parse_command_policy_value(args.first(), "command_policy_push")?
                .ok_or_else(|| {
                    VmError::Runtime("command_policy_push: policy is required".to_string())
                })?;
        crate::orchestration::push_command_policy(policy);
        Ok(VmValue::Nil)
    });

    vm.register_builtin("command_policy_pop", |_args, _out| {
        crate::orchestration::pop_command_policy();
        Ok(VmValue::Nil)
    });

    vm.register_builtin("command_risk_scan", |args, _out| {
        let ctx = args
            .first()
            .ok_or_else(|| VmError::Runtime("command_risk_scan: ctx is required".to_string()))?;
        crate::orchestration::command_risk_scan_value(ctx)
    });

    vm.register_builtin("command_result_scan", |args, _out| {
        let ctx = args
            .first()
            .ok_or_else(|| VmError::Runtime("command_result_scan: ctx is required".to_string()))?;
        crate::orchestration::command_result_scan_value(ctx)
    });

    vm.register_builtin("command_llm_risk_scan", |args, _out| {
        let ctx = args.first().ok_or_else(|| {
            VmError::Runtime("command_llm_risk_scan: ctx is required".to_string())
        })?;
        crate::orchestration::command_llm_risk_scan_value(ctx, args.get(1))
    });
}