fix(cli): label the global status inference row as configured - #10471
fix(cli): label the global status inference row as configured#10471yanyunl1991 wants to merge 5 commits into
Conversation
Bare `nemoclaw status` printed each sandbox's registry route under a bare `Inference:` label, the same field name `nemoclaw <name> status` uses for its live route probe (`Inference: healthy (<endpoint>)`). One field name carrying two different meanings reads as a broken rendering, which is how it was reported: the global view looked like it had dropped the health word and the endpoint. Qualify the global row as `Inference (configured):`, following the per-sandbox `Inference (<probe>):` convention, and append the upstream endpoint the registry already records so the row says which upstream it is routed at. The endpoint is redacted, is omitted when the registry has none, and is suppressed for the default sandbox when the live gateway route has drifted off the stored provider, since the stored endpoint no longer describes the route in use. `status --json` reports the same value as `endpointUrl` per sandbox row. This view still runs no inference probe; reachability remains the job of `nemoclaw <name> status`. Fixes #10221 Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall line coverage in commit 9043147 in the TypeScript / code-coverage/cliThe overall line coverage in commit 9043147 in the Show a line coverage summary of the most impacted files.
Updated |
|
🌿 Preview your docs: https://nvidia-preview-pr-10471.docs.buildwithfern.com/nemoclaw |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 12 included reviews per hour; 3 remain after this review. 📝 WalkthroughWalkthroughGlobal status now reports configured inference routes with redacted endpoints when applicable. It omits endpoints for missing or provider-drifted routes. Tests and documentation cover text and JSON output. ChangesConfigured inference status
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to This PR clarifies that the global status row reports configured inference details and safely includes the recorded endpoint without adding a health probe; no actionable merge-blocking risk remains after normal checks and review. Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Linked Issues checkExplanation The changes satisfy issue Full details: Docstring CoverageExplanation Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. (1 skipped: 1 unsupported.)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
…-inference-label-10221
|
PR Review Advisor finished for commit |
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Summary
Bare
nemoclaw statusprinted each sandbox's configured route under a bareInference:label — the same field namenemoclaw <name> statususes for itslive route probe (
Inference: healthy (<endpoint>)). One field name carryingtwo different meanings reads as a broken rendering. This PR qualifies the
global row as
Inference (configured):and reports the upstream endpoint theregistry already records, without adding any probe.
Closes #10221.
Reproduction
Executed on our Ubuntu 24.04 x86_64 test host (no GPU), matching the second
platform in the reporter's scope.
nemoclaw onboard --name repro-10221 --non-interactive --yes --no-gpuwith
NEMOCLAW_PROVIDER=build,NEMOCLAW_MODEL=nvidia/nemotron-3-super-120b-a12b.nemoclaw status(no sandbox name)nemoclaw repro-10221 status(same sandbox, by name)Inferenceline between the two.Environment
v0.0.114(ffb09d2596fb2658f8dff881d5e1e425dd1767d6) andmainat7d98145868ba65e326c4db1b6451d96ced5fb6e4(v0.0.114-174-g7d9814586).git logconfirmssrc/lib/inventory/index.tshas not changed thisrendering path between the two.
repro-10221, agent OpenClaw, providernvidia-prod, modelnvidia/nemotron-3-super-120b-a12b, OpenShell 0.0.106 (docker)Observed on
main(before fix)Per-sandbox status for the identical sandbox, in the same run:
Observed on
fix/...(after fix)status --json, same run:{ "name": "repro-10221", "model": "nvidia/nemotron-3-super-120b-a12b", "provider": "nvidia-prod", "agent": "openclaw", "dashboardPort": 18789, "isDefault": true, "endpointUrl": "https://integrate.api.nvidia.com/v1" }Per-sandbox output is byte-identical before and after (verified by diffing the
Inferencelines of both runs), so the probe format is untouched.Analysis
Two renderers print a field literally named
Inference, and they answerdifferent questions:
src/lib/inventory/index.ts(global view) rendered` Inference: ${provider} / ${model}`fromgetSandboxEntryDisplayInference(sb)— pure registry data, no probe. This isthe intended lightweight behavior from [NemoClaw][DGX Spark][Ubuntu 24.04][CLI] nemoclaw status omits Connected/Inference fields and shows cloudflared stopped with no context #2604 / PR fix(status): explain cloudflared-stopped reason and surface Connected/Inference fields #3537, and
docs/reference/commands.mdxdocumented it as "the configured inferenceprovider and model".
src/lib/actions/sandbox/status-text.tsprintInferenceProbeLinerendersInference: <okLabel> (<endpoint>)for a probe whoseprobeLabelis unset,and
Inference (<probeLabel>):for the labeled hops. Its endpoint is thein-sandbox gateway route (
https://inference.local/v1/models, built insrc/lib/actions/sandbox/inference-route-health.ts), and reachinghealthyrequires actually issuing an inference request from inside the sandbox.
So the global view was not dropping a health word — it never had one. But
nothing in its output said so, and the unlabeled hop in the per-sandbox view
uses the identical field name, so the global row read as a degraded version of
the per-sandbox row. That ambiguity is the defect.
Reporting real reachability here would mean one SSH-plus-inference probe per
registered sandbox in a command documented as the host-wide summary that defers
live health to
nemoclaw <name> status. That is a behavioral and performancechange, not a rendering fix, so this PR does not do it.
Separately, the registry already stores
endpointUrlper sandbox(
src/lib/state/registry.ts;nvidia-prodresolves tohttps://integrate.api.nvidia.com/v1viasrc/lib/onboard/providers.ts), andthe global view discarded it — the reporter's "no endpoint URL" observation was
accurate about a real information gap.
Fix
Inference (configured):, reusing the per-sandboxInference (<probe>):parenthetical convention rather than inventing asecond vocabulary, so each view now names what it is reporting.
resolveConfiguredEndpointis the single source of truth for that value andis shared by the text renderer and
buildStatusSandboxRow, so--jsongainsthe same
endpointUrlfield — the text/JSON parity contract from fix(cli): report the sandbox agent in global list and status JSON #8710.Boundaries the helper enforces:
redactUrl, so a custom or legacy routecarrying credentials in userinfo or a query parameter cannot leak into status
output.
endpointUrlisnull) when the registry records none,so a local provider row is unchanged.
drifted off the stored one. That row prefers the live provider ([NemoClaw][Linux][CLI&UX]
nemoclaw list/statusshows stale model afteropenshell inference set— live gateway state is queried but result is discarded #2369), andpairing a live provider with the stored endpoint would name an upstream the
sandbox is no longer routed at.
Tests lock the qualified label plus every boundary above, and assert the global
view never emits the word
healthy— the regression lock that keeps this viewout of the probe's vocabulary.
Changes
src/lib/inventory/index.ts: qualify the global inference row, addresolveConfiguredEndpoint, addendpointUrltoStatusSandboxRowandSandboxEntry.src/lib/inventory/status-configured-inference.test.ts: new co-located testsfor the label, endpoint, redaction, absent-endpoint, drift-suppression,
non-default-row, and JSON-parity cases.
src/lib/inventory/index.test.ts: update the [NemoClaw][DGX Spark][Ubuntu 24.04][CLI] nemoclaw status omits Connected/Inference fields and shows cloudflared stopped with no context #2604 assertions to thequalified label.
docs/reference/commands.mdx: document the label, the endpoint, theredaction and omission rules, and that this command runs no health probe.
Type of Change
Verification
npx prek run --all-filespassesnpm testpasses (touched files at minimum)make docsbuilds without warnings (doc changes only)AI Disclosure
Signed-off-by: Yanyun Liao yanyunl@nvidia.com
Summary by CodeRabbit
New Features
Documentation