cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

commit a9b997ca69e0a60f7b2e36a61af2367a1cbd9cef
parent e6a4e95b04b2fcfa016557b96f6cf5c20c7e6799
Author: triesap <tyson@radroots.org>
Date:   Thu,  9 Apr 2026 20:50:42 +0000

hyf: honor explicit provider bindings

Diffstat:
Msrc/commands/doctor.rs | 4++--
Msrc/runtime/config.rs | 2+-
Msrc/runtime/hyf.rs | 31++++++++++++++++++++++++++++++-
3 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/src/commands/doctor.rs b/src/commands/doctor.rs @@ -3,7 +3,7 @@ use crate::domain::runtime::{ }; use crate::runtime::RuntimeError; use crate::runtime::config::{RuntimeConfig, SignerBackend}; -use crate::runtime::hyf::resolve_status as resolve_hyf_status; +use crate::runtime::hyf::resolve_runtime_status as resolve_hyf_status; use crate::runtime::logging::LoggingState; use crate::runtime::signer::resolve_signer_status; @@ -58,7 +58,7 @@ pub fn report( } } - checks.push(hyf_check(&resolve_hyf_status(&config.hyf))); + checks.push(hyf_check(&resolve_hyf_status(config))); checks.push(logging_check(config, logging)); checks.push(binding_check(config)); diff --git a/src/runtime/config.rs b/src/runtime/config.rs @@ -382,7 +382,7 @@ struct CapabilityBindingSpec { pub(crate) const SIGNER_REMOTE_NIP46_CAPABILITY: &str = "signer.remote_nip46"; const WRITE_PLANE_TRADE_JSONRPC_CAPABILITY: &str = "write_plane.trade_jsonrpc"; const WORKFLOW_TRADE_CAPABILITY: &str = "workflow.trade"; -const INFERENCE_HYF_STDIO_CAPABILITY: &str = "inference.hyf_stdio"; +pub(crate) const INFERENCE_HYF_STDIO_CAPABILITY: &str = "inference.hyf_stdio"; const CAPABILITY_BINDING_SPECS: &[CapabilityBindingSpec] = &[ CapabilityBindingSpec { diff --git a/src/runtime/hyf.rs b/src/runtime/hyf.rs @@ -5,7 +5,9 @@ use std::time::{Duration, Instant}; use serde_json::{Value, json}; -use crate::runtime::config::HyfConfig; +use crate::runtime::config::{ + CapabilityBindingTargetKind, HyfConfig, INFERENCE_HYF_STDIO_CAPABILITY, RuntimeConfig, +}; const HYF_STATUS_TIMEOUT: Duration = Duration::from_secs(1); const HYF_STATUS_POLL_INTERVAL: Duration = Duration::from_millis(10); @@ -22,6 +24,33 @@ pub struct HyfStatusView { pub deterministic_available: Option<bool>, } +pub fn resolve_runtime_status(config: &RuntimeConfig) -> HyfStatusView { + if !config.hyf.enabled { + return resolve_status(&config.hyf); + } + + let Some(binding) = config.capability_binding(INFERENCE_HYF_STDIO_CAPABILITY) else { + return resolve_status(&config.hyf); + }; + + match binding.target_kind { + CapabilityBindingTargetKind::ExplicitEndpoint => { + let mut hyf = config.hyf.clone(); + hyf.executable = binding.target.clone().into(); + resolve_status(&hyf) + } + CapabilityBindingTargetKind::ManagedInstance => unavailable_status( + config.hyf.executable.display().to_string(), + format!( + "configured hyf binding target `{}` uses unsupported target_kind `managed_instance`; use `explicit_endpoint` for `inference.hyf_stdio`", + binding.target + ), + None, + None, + ), + } +} + pub fn resolve_status(config: &HyfConfig) -> HyfStatusView { let executable = config.executable.display().to_string(); if !config.enabled {