Skip to content

fix(onboard): align Hermes WebUI port - #6283

Merged
apurvvkumaria merged 8 commits into
NVIDIA:mainfrom
ogarciarevett:fix/hermes-web-tui-port-6277
Jul 8, 2026
Merged

fix(onboard): align Hermes WebUI port#6283
apurvvkumaria merged 8 commits into
NVIDIA:mainfrom
ogarciarevett:fix/hermes-web-tui-port-6277

Conversation

@ogarciarevett

@ogarciarevett ogarciarevett commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Hermes WebUI onboarding now treats the resolved NemoClaw dashboard port as the single public WebUI port, so NEMOCLAW_DASHBOARD_PORT=9119 or --control-ui-port 9119 no longer trips a false Hermes API-port collision. The legacy NEMOCLAW_HERMES_DASHBOARD_PORT value is accepted only when it matches that public OpenShell forward, preventing a host/sandbox port mismatch that cannot serve the WebUI.

Related Issue

Fixes #6277

Changes

  • Normalize enabled Hermes dashboard state to the effective NemoClaw dashboard/OpenShell forward port.
  • Replace misleading “Hermes API port” collision errors with Hermes WebUI/OpenShell-forward specific validation.
  • Add regression coverage for #6277 covering 9119, matching legacy alias, and mismatched alias rejection.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: existing docs already describe NEMOCLAW_DASHBOARD_PORT as the Hermes built-in dashboard/WebUI forward; this fixes implementation drift.
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: focused onboarding port-state self-review; the change keeps the existing reserved 8642 API guard, does not touch credentials/policies, and constrains Hermes WebUI public port state to the already validated OpenShell dashboard forward.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • PR description includes the DCO sign-off declaration and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: RED npx vitest run --project cli src/lib/onboard/hermes-dashboard.test.ts failed on the false API-port collision and mismatch cases; GREEN npx vitest run --project cli src/lib/onboard/hermes-dashboard.test.ts; neighbor coverage npx vitest run --project cli src/lib/onboard/hermes-dashboard.test.ts src/lib/onboard/sandbox-create-launch.test.ts src/lib/onboard/sandbox-reuse.test.ts src/lib/hermes-dashboard.test.ts src/lib/agent/onboard.test.ts src/lib/onboard/dashboard-preflight-ports.test.ts passed 48 tests.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: ogarciarevett ogarciarevett@gmail.com

Summary by CodeRabbit

  • Bug Fixes

    • Improved Hermes dashboard onboarding port handling: the effective WebUI public port is always used, legacy port aliases are validated for exact matches, and clearer guidance is shown when configurations don’t align.
    • Refined port collision/overlap validation and reserved-port checks.
    • Updated dashboard forwarding behavior to prefer recorded sandbox dashboard ports, preserve the correct forwarded URL/port set on refresh, and avoid duplicate “additional port” instructions.
  • Tests

    • Expanded onboarding, Hermes UI URL selection, and dashboard-forwarding test coverage to match the new effective-port precedence and output expectations.

Signed-off-by: ogarciarevett <ogarciarevett@gmail.com>
@copy-pr-bot

copy-pr-bot Bot commented Jul 5, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The Hermes dashboard onboarding flow now propagates the effective dashboard port through preflight, forwarding, and UI printing. Hermes validation and tests were updated to use the effective dashboard port for WebUI checks and error handling.

Changes

Hermes dashboard port propagation

Layer / File(s) Summary
Preflight port source
src/lib/onboard.ts, src/lib/actions/sandbox/forward-recovery.ts, test/process-recovery-primitives.test.ts
sandbox.controlUiPort now uses the preflight dashboard port, and sandbox dashboard-port recovery now prefers recorded sandbox metadata before the active agent port.
Effective dashboard port wiring
src/lib/onboard/dashboard.ts, src/lib/agent/onboard.ts, src/lib/agent/dashboard-ui.ts, src/lib/agent/onboard.test.ts, test/onboard-dashboard.test.ts
effectiveDashboardPort is threaded into dashboard URL rendering and optional dashboard UI printing, with updated port selection, duplicate-port skipping, and coverage for the new port handling.
Agent dashboard forwarding
src/lib/onboard/agent-dashboard-forward.ts, src/lib/onboard/agent-dashboard-forward.test.ts
Agent dashboard forwarding now accepts chatUiUrl, preserves selected ports, sets CHAT_UI_URL from the forwarded URL, and has updated tests for the new forwarding behavior.
Hermes dashboard validation and tests
src/lib/onboard/hermes-dashboard.ts, src/lib/onboard/hermes-dashboard.test.ts
Hermes onboarding validation now aligns the WebUI port with the effective dashboard port, updates reserved-port messaging, and refreshes the corresponding tests.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs: #6277

Suggested labels: bug-fix

Suggested reviewers: ericksoa, jyaunches

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and matches the main Hermes WebUI port alignment change.
Linked Issues check ✅ Passed The changes address #6277 by using the documented dashboard port for Hermes WebUI, keeping API port separate, and fixing the mismatched alias/error behavior.
Out of Scope Changes check ✅ Passed The added changes stay focused on Hermes dashboard port handling, onboarding, and related forwarding tests without introducing unrelated functionality.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@cv cv added the v0.0.76 label Jul 7, 2026

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correctness blocker: runtime uses effectivePort, but final dashboard access output still derives its URL from the legacy alias or default 9119. NEMOCLAW_DASHBOARD_PORT=9120 or --control-ui-port 9120 forwards 9120 while advertising 9119. Failure guidance also points users to a legacy alias now required to match. Carry effectivePort through all output and guidance, and cover nondefault canonical-port cases.

@wscurran wscurran added v0.0.77 area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior and removed v0.0.76 labels Jul 7, 2026
@wscurran

wscurran commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

✨ Thanks for the PR. This fixes the Hermes WebUI onboarding port collision by aligning the resolved NemoClaw dashboard port as the single public WebUI port. Ready for maintainer review.


Related open issues:


Related open issues:

@apurvvkumaria apurvvkumaria self-assigned this Jul 7, 2026
apurvvkumaria and others added 2 commits July 7, 2026 13:18
Carry the canonical dashboard port through forward refresh, recovery, and final output.

Keep fixed API ports and remote dashboard URLs intact.

Point failure guidance to the canonical dashboard configuration.

Co-authored-by: Omar Garcia <ogarciarevett@gmail.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Move each dashboard-port environment setup into its table entry.

Keep the test body linear for the growth guardrail.

Co-authored-by: Omar Garcia <ogarciarevett@gmail.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/lib/agent/onboard.ts (1)

404-423: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate port-validation logic; consider a shared helper.

This inline Number.isInteger(...) && ... >= 1 && ... <= 65535 check re-implements the same rule already expressed as isValidPort in src/lib/agent/dashboard-ui.ts and src/lib/onboard/agent-dashboard-forward.ts. Extracting a single shared isValidPort utility and reusing it here would reduce the risk of the three copies drifting apart.

♻️ Proposed refactor sketch
-  const effectiveDashboardPort =
-    Number.isInteger(deps.effectiveDashboardPort) &&
-    Number(deps.effectiveDashboardPort) >= 1 &&
-    Number(deps.effectiveDashboardPort) <= 65535
-      ? Number(deps.effectiveDashboardPort)
-      : info.port;
+  const effectiveDashboardPort = isValidPort(deps.effectiveDashboardPort)
+    ? deps.effectiveDashboardPort
+    : info.port;

(where isValidPort is imported from a shared module used by dashboard-ui.ts and agent-dashboard-forward.ts.)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/agent/onboard.ts` around lines 404 - 423, The port validation in
printDashboardUi is duplicated and should reuse the shared isValidPort rule
instead of re-implementing the numeric range check inline. Move or import the
common helper used by dashboard-ui.ts and agent-dashboard-forward.ts, then
replace the Number.isInteger/1..65535 logic with that helper for
effectiveDashboardPort. Keep the fallback to info.port unchanged so all
dashboard port validation stays consistent across the agent onboarding flow.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/lib/agent/onboard.ts`:
- Around line 404-423: The port validation in printDashboardUi is duplicated and
should reuse the shared isValidPort rule instead of re-implementing the numeric
range check inline. Move or import the common helper used by dashboard-ui.ts and
agent-dashboard-forward.ts, then replace the Number.isInteger/1..65535 logic
with that helper for effectiveDashboardPort. Keep the fallback to info.port
unchanged so all dashboard port validation stays consistent across the agent
onboarding flow.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: bce257d0-59c2-4538-a6f9-9f0bd0ed4d5a

📥 Commits

Reviewing files that changed from the base of the PR and between b4d633b and f28567a.

📒 Files selected for processing (12)
  • src/lib/actions/sandbox/forward-recovery.ts
  • src/lib/agent/dashboard-ui.ts
  • src/lib/agent/onboard.test.ts
  • src/lib/agent/onboard.ts
  • src/lib/onboard.ts
  • src/lib/onboard/agent-dashboard-forward.test.ts
  • src/lib/onboard/agent-dashboard-forward.ts
  • src/lib/onboard/dashboard.ts
  • src/lib/onboard/hermes-dashboard.test.ts
  • src/lib/onboard/hermes-dashboard.ts
  • test/onboard-dashboard.test.ts
  • test/process-recovery-primitives.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/lib/onboard/hermes-dashboard.ts
  • src/lib/onboard/hermes-dashboard.test.ts

apurvvkumaria and others added 2 commits July 7, 2026 14:04
Reuse the existing forward-port predicate for effective dashboard ports.

Keep the stricter non-privileged manifest rule explicitly named.

Co-authored-by: Omar Garcia <ogarciarevett@gmail.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Keep the latest main sandbox-flow fields.

Continue passing the effective dashboard port through onboarding.

Co-authored-by: Omar Garcia <ogarciarevett@gmail.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@ericksoa ericksoa added v0.0.78 and removed v0.0.77 labels Jul 8, 2026
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved exact verified head eff896b5d717cab69c847c0b55933a32f9b9b415. The original correctness blocker is resolved: the effective dashboard port is carried through preflight, forward creation, printed access URLs, registry-backed recovery, and optional Hermes WebUI forwarding, while the fixed Hermes API port remains distinct. Matching/mismatched legacy aliases, nondefault canonical ports, forward preservation/reallocation, recovery, and output are covered. All 30 exact-head checks are green; no major advisor findings remain.

@cjagwani
cjagwani requested a review from cv July 8, 2026 18:54
@apurvvkumaria
apurvvkumaria enabled auto-merge (squash) July 8, 2026 19:08
@cjagwani

cjagwani commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

@cv The exact head remains eff896b5d717cab69c847c0b55933a32f9b9b415, all 30 checks are green, and your original advertised-port blocker is resolved across preflight, forward creation, printed URL, and registry recovery. I approved that exact head after focused verification; GitHub still holds the older change-request review, and auto-merge is now armed by another maintainer. Please re-review or dismiss the stale blocker when you have a moment.

@apurvvkumaria
apurvvkumaria merged commit 372f31b into NVIDIA:main Jul 8, 2026
30 checks passed
@cjagwani cjagwani mentioned this pull request Jul 9, 2026
21 tasks
cv pushed a commit that referenced this pull request Jul 9, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Prepares the user documentation for NemoClaw v0.0.78 by replacing the
unreleased section with release highlights and synchronizing the
affected inference, lifecycle, messaging, and CLI reference pages with
merged behavior.

## Changes

- Publish the v0.0.78 release-notes section with links to the most
specific user guides for each shipped behavior.
- Document authoritative Deep Agents route health, Nemotron Ultra
profile behavior, and Hermes compatible-endpoint context metadata.
- Document forced rebuild recovery after total backup failure and the
ownership-safe tunnel/full-stop behavior.
- Keep command examples and shared agent variants aligned with the
current OpenClaw, Hermes, and Deep Agents interfaces.

Source mapping:

- [#3787](#3787) ->
`docs/about/release-notes.mdx`: Record reliable workspace template
seeding during sandbox startup.
- [#4960](#4960) ->
`docs/about/release-notes.mdx`: Record safer detection of rewritten
OpenClaw gateway processes.
- [#5676](#5676) ->
`docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON
handling.
- [#5857](#5857) ->
`docs/about/release-notes.mdx`: Record synchronization of explicit
OpenClaw main-agent model state.
- [#5929](#5929) ->
`docs/about/release-notes.mdx`: Record copyable SSH port-forward
guidance for remote dashboards.
- [#6068](#6068) ->
`docs/about/release-notes.mdx`: Record custom-image plugin provenance
reconciliation.
- [#6116](#6116) ->
`docs/about/release-notes.mdx`: Record live-loopback dashboard-forward
recovery.
- [#6122](#6122) ->
`docs/about/release-notes.mdx`: Announce validated, round-trippable
policy YAML output.
- [#6211](#6211) ->
`docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild
--force` recovery boundary.
- [#6283](#6283) ->
`docs/about/release-notes.mdx`: Record Hermes WebUI port alignment.
- [#6293](#6293) ->
`docs/inference/switch-inference-providers.mdx`,
`docs/about/release-notes.mdx`: Document compatible-endpoint
context-length probing for Hermes.
- [#6320](#6320) ->
`docs/about/release-notes.mdx`: Record bounded gateway-recovery waits.
- [#6377](#6377) ->
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain
rebuild diagnostics and prepared MCP-destroy recovery.
- [#6412](#6412) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document authoritative agent-visible
inference route health.
- [#6421](#6421) ->
`docs/about/release-notes.mdx`: Record the longer quiet-pull window for
managed vLLM images.
- [#6431](#6431) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document the version-pinned Nemotron
Ultra profile plugin.
- [#6439](#6439) ->
`docs/about/release-notes.mdx`: Summarize the authenticated, pinned
credential-capture helper boundary.
- [#6450](#6450) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document
host-forward cleanup and ownership-safe gateway-port release.
- [#6474](#6474) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/about/release-notes.mdx`: Record composable OpenClaw messaging
runtime loaders.
- [#6475](#6475) ->
`docs/about/release-notes.mdx`: Record removal of the unavailable Kimi
K2.6 production endpoint option.
- [#6480](#6480) ->
`docs/about/release-notes.mdx`: Record stderr routing for the plugin
registration banner.
- [#6481](#6481) ->
`docs/about/release-notes.mdx`: Record post-pull Ollama model discovery
checks.
- [#6482](#6482) ->
`docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon
restart.
- [#6486](#6486) ->
`docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep
Agents auto-approval boundary.
- [#6490](#6490) ->
`docs/about/release-notes.mdx`: Record diagnostics for custom images
missing the managed runtime.
- [#6494](#6494) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document nonempty tool-call content
preservation and placeholder rejection.
- [#6497](#6497) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document isolated Deep Agents
route-probe output.
- [#6506](#6506) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document observability-preserving
managed route probes.
- [#6508](#6508) ->
`docs/about/release-notes.mdx`: Link the new extension taxonomy and
SDK-readiness reference from the release summary.

Release-source verification: GitHub reports all 29 cited source PRs as
merged with base `main`, and every merge commit is an ancestor of
`origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No
source-mapping mismatches were found.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [x] Doc only (includes code sample changes)

## Quality Gates

<!-- Check exactly one tests line and one docs line. Check other lines
when applicable. Add every requested justification or approval
reference. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: Documentation-only
release-prep changes; `npm run docs` validates variants, routes, and
Fern content.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification

<!-- Check each applicable item only when supported by the requested
evidence. Run targeted tests once per relevant change set and rerun
after later edits or hook autofixes that can affect the tested behavior.
Do not rerun hook-covered checks. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: Tests
are not applicable to this documentation-only change set.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) — exited
0 with zero errors; Fern reported the existing unauthenticated
redirect-check and light-mode contrast warnings.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
<!-- DCO sign-off is required in this PR description, and every commit
must appear as Verified in GitHub. Run: git config user.name && git
config user.email -->
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>

---------

Signed-off-by: cjagwani <cjagwani@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary
Hermes WebUI onboarding now treats the resolved NemoClaw dashboard port
as the single public WebUI port, so `NEMOCLAW_DASHBOARD_PORT=9119` or
`--control-ui-port 9119` no longer trips a false Hermes API-port
collision. The legacy `NEMOCLAW_HERMES_DASHBOARD_PORT` value is accepted
only when it matches that public OpenShell forward, preventing a
host/sandbox port mismatch that cannot serve the WebUI.

## Related Issue
Fixes NVIDIA#6277

## Changes
- Normalize enabled Hermes dashboard state to the effective NemoClaw
dashboard/OpenShell forward port.
- Replace misleading “Hermes API port” collision errors with Hermes
WebUI/OpenShell-forward specific validation.
- Add regression coverage for `NVIDIA#6277` covering `9119`, matching legacy
alias, and mismatched alias rejection.

## Type of Change

- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates
<!-- Check exactly one tests line and one docs line. Check other lines
when applicable. Add every requested justification or approval
reference. -->
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: existing docs already
describe `NEMOCLAW_DASHBOARD_PORT` as the Hermes built-in
dashboard/WebUI forward; this fixes implementation drift.
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: focused onboarding
port-state self-review; the change keeps the existing reserved `8642`
API guard, does not touch credentials/policies, and constrains Hermes
WebUI public port state to the already validated OpenShell dashboard
forward.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification
<!-- Check each applicable item only when supported by the requested
evidence. Run targeted tests once per relevant change set and rerun
after later edits or hook autofixes that can affect the tested behavior.
Do not rerun hook-covered checks. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: RED
`npx vitest run --project cli src/lib/onboard/hermes-dashboard.test.ts`
failed on the false API-port collision and mismatch cases; GREEN `npx
vitest run --project cli src/lib/onboard/hermes-dashboard.test.ts`;
neighbor coverage `npx vitest run --project cli
src/lib/onboard/hermes-dashboard.test.ts
src/lib/onboard/sandbox-create-launch.test.ts
src/lib/onboard/sandbox-reuse.test.ts src/lib/hermes-dashboard.test.ts
src/lib/agent/onboard.test.ts
src/lib/onboard/dashboard-preflight-ports.test.ts` passed 48 tests.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
<!-- DCO sign-off is required in this PR description, and every commit
must appear as Verified in GitHub. Run: git config user.name && git
config user.email -->
Signed-off-by: ogarciarevett <ogarciarevett@gmail.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Improved Hermes dashboard onboarding port handling: the effective
WebUI public port is always used, legacy port aliases are validated for
exact matches, and clearer guidance is shown when configurations don’t
align.
  * Refined port collision/overlap validation and reserved-port checks.
* Updated dashboard forwarding behavior to prefer recorded sandbox
dashboard ports, preserve the correct forwarded URL/port set on refresh,
and avoid duplicate “additional port” instructions.

* **Tests**
* Expanded onboarding, Hermes UI URL selection, and dashboard-forwarding
test coverage to match the new effective-port precedence and output
expectations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: ogarciarevett <ogarciarevett@gmail.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: Apurv Kumaria <akumaria@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Prepares the user documentation for NemoClaw v0.0.78 by replacing the
unreleased section with release highlights and synchronizing the
affected inference, lifecycle, messaging, and CLI reference pages with
merged behavior.

## Changes

- Publish the v0.0.78 release-notes section with links to the most
specific user guides for each shipped behavior.
- Document authoritative Deep Agents route health, Nemotron Ultra
profile behavior, and Hermes compatible-endpoint context metadata.
- Document forced rebuild recovery after total backup failure and the
ownership-safe tunnel/full-stop behavior.
- Keep command examples and shared agent variants aligned with the
current OpenClaw, Hermes, and Deep Agents interfaces.

Source mapping:

- [NVIDIA#3787](NVIDIA#3787) ->
`docs/about/release-notes.mdx`: Record reliable workspace template
seeding during sandbox startup.
- [NVIDIA#4960](NVIDIA#4960) ->
`docs/about/release-notes.mdx`: Record safer detection of rewritten
OpenClaw gateway processes.
- [NVIDIA#5676](NVIDIA#5676) ->
`docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON
handling.
- [NVIDIA#5857](NVIDIA#5857) ->
`docs/about/release-notes.mdx`: Record synchronization of explicit
OpenClaw main-agent model state.
- [NVIDIA#5929](NVIDIA#5929) ->
`docs/about/release-notes.mdx`: Record copyable SSH port-forward
guidance for remote dashboards.
- [NVIDIA#6068](NVIDIA#6068) ->
`docs/about/release-notes.mdx`: Record custom-image plugin provenance
reconciliation.
- [NVIDIA#6116](NVIDIA#6116) ->
`docs/about/release-notes.mdx`: Record live-loopback dashboard-forward
recovery.
- [NVIDIA#6122](NVIDIA#6122) ->
`docs/about/release-notes.mdx`: Announce validated, round-trippable
policy YAML output.
- [NVIDIA#6211](NVIDIA#6211) ->
`docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild
--force` recovery boundary.
- [NVIDIA#6283](NVIDIA#6283) ->
`docs/about/release-notes.mdx`: Record Hermes WebUI port alignment.
- [NVIDIA#6293](NVIDIA#6293) ->
`docs/inference/switch-inference-providers.mdx`,
`docs/about/release-notes.mdx`: Document compatible-endpoint
context-length probing for Hermes.
- [NVIDIA#6320](NVIDIA#6320) ->
`docs/about/release-notes.mdx`: Record bounded gateway-recovery waits.
- [NVIDIA#6377](NVIDIA#6377) ->
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain
rebuild diagnostics and prepared MCP-destroy recovery.
- [NVIDIA#6412](NVIDIA#6412) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document authoritative agent-visible
inference route health.
- [NVIDIA#6421](NVIDIA#6421) ->
`docs/about/release-notes.mdx`: Record the longer quiet-pull window for
managed vLLM images.
- [NVIDIA#6431](NVIDIA#6431) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document the version-pinned Nemotron
Ultra profile plugin.
- [NVIDIA#6439](NVIDIA#6439) ->
`docs/about/release-notes.mdx`: Summarize the authenticated, pinned
credential-capture helper boundary.
- [NVIDIA#6450](NVIDIA#6450) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document
host-forward cleanup and ownership-safe gateway-port release.
- [NVIDIA#6474](NVIDIA#6474) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/about/release-notes.mdx`: Record composable OpenClaw messaging
runtime loaders.
- [NVIDIA#6475](NVIDIA#6475) ->
`docs/about/release-notes.mdx`: Record removal of the unavailable Kimi
K2.6 production endpoint option.
- [NVIDIA#6480](NVIDIA#6480) ->
`docs/about/release-notes.mdx`: Record stderr routing for the plugin
registration banner.
- [NVIDIA#6481](NVIDIA#6481) ->
`docs/about/release-notes.mdx`: Record post-pull Ollama model discovery
checks.
- [NVIDIA#6482](NVIDIA#6482) ->
`docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon
restart.
- [NVIDIA#6486](NVIDIA#6486) ->
`docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep
Agents auto-approval boundary.
- [NVIDIA#6490](NVIDIA#6490) ->
`docs/about/release-notes.mdx`: Record diagnostics for custom images
missing the managed runtime.
- [NVIDIA#6494](NVIDIA#6494) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document nonempty tool-call content
preservation and placeholder rejection.
- [NVIDIA#6497](NVIDIA#6497) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document isolated Deep Agents
route-probe output.
- [NVIDIA#6506](NVIDIA#6506) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document observability-preserving
managed route probes.
- [NVIDIA#6508](NVIDIA#6508) ->
`docs/about/release-notes.mdx`: Link the new extension taxonomy and
SDK-readiness reference from the release summary.

Release-source verification: GitHub reports all 29 cited source PRs as
merged with base `main`, and every merge commit is an ancestor of
`origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No
source-mapping mismatches were found.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [x] Doc only (includes code sample changes)

## Quality Gates

<!-- Check exactly one tests line and one docs line. Check other lines
when applicable. Add every requested justification or approval
reference. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: Documentation-only
release-prep changes; `npm run docs` validates variants, routes, and
Fern content.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification

<!-- Check each applicable item only when supported by the requested
evidence. Run targeted tests once per relevant change set and rerun
after later edits or hook autofixes that can affect the tested behavior.
Do not rerun hook-covered checks. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: Tests
are not applicable to this documentation-only change set.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) — exited
0 with zero errors; Fern reported the existing unauthenticated
redirect-check and light-mode contrast warnings.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
<!-- DCO sign-off is required in this PR description, and every commit
must appear as Verified in GitHub. Run: git config user.name && git
config user.email -->
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>

---------

Signed-off-by: cjagwani <cjagwani@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Hermes] Cannot set port for Web dashboard/TUI

6 participants