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:
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")