hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

commit 5b3b5902a81a033345d2dc02d225a7c23586d11a
parent 02dfbf0ec9d9a646f3a1c930daea792e113bc087
Author: triesap <tyson@radroots.org>
Date:   Thu,  9 Apr 2026 17:19:02 +0000

runtime: report hyf paths in status

Diffstat:
Asrc/hyf_runtime/status.mojo | 35+++++++++++++++++++++++++++++++++++
Msrc/hyf_stdio/control/status.mojo | 34+++++++++++++++++++++++++++-------
Msrc/hyf_stdio/server.mojo | 17++++++++++++++++-
Mtests/test_stdio_contract.mojo | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 133 insertions(+), 8 deletions(-)

diff --git a/src/hyf_runtime/status.mojo b/src/hyf_runtime/status.mojo @@ -0,0 +1,35 @@ +from mojson import Value, loads + +from hyf_runtime.startup import RuntimeStartupContext + + +def _runtime_paths_status_value(context: RuntimeStartupContext) raises -> Value: + var paths = loads("{}") + paths.set("config_dir", Value(String(context.paths.config_dir))) + paths.set("config_path", Value(String(context.paths.config_path))) + paths.set("data_dir", Value(String(context.paths.data_dir))) + paths.set("cache_dir", Value(String(context.paths.cache_dir))) + paths.set("logs_dir", Value(String(context.paths.logs_dir))) + paths.set("diagnostics_dir", Value(String(context.paths.diagnostics_dir))) + paths.set("run_dir", Value(String(context.paths.run_dir))) + paths.set("secrets_dir", Value(String(context.paths.secrets_dir))) + paths.set("identity_path", Value(String(context.paths.identity_path))) + return paths^ + + +def build_runtime_status_value(context: RuntimeStartupContext) raises -> Value: + var status = loads("{}") + status.set("id", Value("hyf_runtime")) + status.set("namespace", Value(String(context.paths.namespace))) + status.set("paths_profile", Value(String(context.paths_profile))) + status.set( + "repo_local_base_root", Value(String(context.repo_local_base_root)) + ) + status.set("paths", _runtime_paths_status_value(context)) + + var secret_storage = loads("{}") + secret_storage.set("default_backend", Value("local_file")) + secret_storage.set("secret_values_reported", Value(False)) + status.set("secret_storage", secret_storage) + + return status^ diff --git a/src/hyf_stdio/control/status.mojo b/src/hyf_stdio/control/status.mojo @@ -10,6 +10,11 @@ from hyf_core.capabilities.registry import ( implemented_deterministic_capability_count, ) from hyf_core.metadata import current_build_identity +from hyf_runtime.startup import ( + RuntimeStartupContext, + resolve_startup_context_from_process, +) +from hyf_runtime.status import build_runtime_status_value from hyf_stdio.control.request_context_contract import ( build_request_context_contract_value, ) @@ -47,6 +52,14 @@ def _build_identity_value() raises -> Value: def build_status_output() raises -> Value: + return build_status_output_with_runtime_context( + resolve_startup_context_from_process() + ) + + +def build_status_output_with_runtime_context( + runtime_context: RuntimeStartupContext, +) raises -> Value: var output = loads("{}") var build_identity = _build_identity_value() output.set("build_identity", build_identity.copy()) @@ -55,9 +68,11 @@ def build_status_output() raises -> Value: output.set("request_framing", Value("newline_delimited_json")) output.set( "implementation_status", - Value("bootstrap_registered_deterministic_ready") - if all_deterministic_capabilities_implemented() - else Value("bootstrap_partial_deterministic"), + Value( + "bootstrap_registered_deterministic_ready" + ) if all_deterministic_capabilities_implemented() else Value( + "bootstrap_partial_deterministic" + ), ) var execution_modes = loads("{}") @@ -78,15 +93,19 @@ def build_status_output() raises -> Value: var backends = loads("{}") backends.set( "deterministic_backend", - Value("available") - if all_deterministic_capabilities_implemented() - else Value("partially_available"), + Value( + "available" + ) if all_deterministic_capabilities_implemented() else Value( + "partially_available" + ), ) backends.set("assisted_backend", Value("unavailable")) output.set("backend_reachability", backends) var counts = loads("{}") - counts.set("canonical_business_capabilities", Value(bootstrap_capability_count())) + counts.set( + "canonical_business_capabilities", Value(bootstrap_capability_count()) + ) counts.set( "deterministic_registered_business_capabilities", Value(len(deterministic_enabled_capabilities())), @@ -114,5 +133,6 @@ def build_status_output() raises -> Value: "request_context_contract", build_request_context_contract_value(), ) + output.set("runtime", build_runtime_status_value(runtime_context)) return output^ diff --git a/src/hyf_stdio/server.mojo b/src/hyf_stdio/server.mojo @@ -31,7 +31,10 @@ from hyf_stdio.codec import ( extract_request_correlation, ) from hyf_stdio.control.capabilities import build_capabilities_output -from hyf_stdio.control.status import build_status_output +from hyf_stdio.control.status import ( + build_status_output, + build_status_output_with_runtime_context, +) from hyf_stdio.envelope import ( WireErrorResponse, WireRequest, @@ -268,6 +271,18 @@ def handle_request(request: WireRequest) raises -> String: def handle_request_with_runtime_context( request: WireRequest, runtime_context: RuntimeStartupContext ) raises -> String: + if request.capability == "sys.status": + return encode_success( + WireSuccessResponse( + version=hyf_protocol_version(), + request_id=String(request.request_id), + trace_id=request.trace_id, + output=build_status_output_with_runtime_context( + runtime_context + ), + meta=None, + ) + ) return handle_request_with_runtime_context_and_control_builders[ build_status_output, build_capabilities_output ](request, runtime_context) diff --git a/tests/test_stdio_contract.mojo b/tests/test_stdio_contract.mojo @@ -38,6 +38,61 @@ def test_status_success() raises: assert_matches_scenario_response(response, "scenarios/status_ok.json") +def test_status_reports_repo_local_runtime_truth() raises: + with TemporaryDirectory() as temp_dir: + with ScopedEnvVar(HYF_PATHS_PROFILE_ENV, "repo_local"): + with ScopedEnvVar(HYF_PATHS_REPO_LOCAL_ROOT_ENV, temp_dir): + var response = run_stdio_entrypoint( + "src/main.mojo", + load_scenario_request_json("scenarios/status_ok.json"), + ) + + assert_equal( + response["output"]["runtime"]["id"].string_value(), + "hyf_runtime", + ) + assert_equal( + response["output"]["runtime"]["namespace"].string_value(), + "services/hyf", + ) + assert_equal( + response["output"]["runtime"][ + "paths_profile" + ].string_value(), + "repo_local", + ) + assert_equal( + response["output"]["runtime"][ + "repo_local_base_root" + ].string_value(), + temp_dir, + ) + assert_equal( + response["output"]["runtime"]["paths"][ + "config_path" + ].string_value(), + temp_dir + "/config/services/hyf/config.toml", + ) + assert_equal( + response["output"]["runtime"]["paths"][ + "diagnostics_dir" + ].string_value(), + temp_dir + "/logs/services/hyf/diagnostics", + ) + assert_equal( + response["output"]["runtime"]["secret_storage"][ + "default_backend" + ].string_value(), + "local_file", + ) + assert_equal( + response["output"]["runtime"]["secret_storage"][ + "secret_values_reported" + ].bool_value(), + False, + ) + + def test_capabilities_success() raises: var response = run_hyf_stdio( load_scenario_request_json("scenarios/capabilities_ok.json")