Skip to content

fix(onboard): add sudo prefix to lsof port-conflict suggestions#1073

Merged
kjw3 merged 5 commits into
NVIDIA:mainfrom
latenighthackathon:fix/onboard-lsof-sudo
Mar 30, 2026
Merged

fix(onboard): add sudo prefix to lsof port-conflict suggestions#1073
kjw3 merged 5 commits into
NVIDIA:mainfrom
latenighthackathon:fix/onboard-lsof-sudo

Conversation

@latenighthackathon

@latenighthackathon latenighthackathon commented Mar 29, 2026

Copy link
Copy Markdown
Contributor

Summary

On Linux, lsof requires root privileges to see processes owned by other users. The onboarding port-conflict message suggested lsof without sudo, which returns empty output.

Related Issue

Closes #726

Changes

  • Added sudo prefix to lsof command in the 'process found' error path
  • Added sudo prefix to lsof command in the 'could not identify' fallback path

Type of Change

  • Code change for a new feature, bug fix, or refactor.
  • Code change with doc updates.
  • Doc only. Prose changes without code sample modifications.
  • Doc only. Includes code sample changes.

Testing

  • npx prek run --all-files passes (or equivalently make check).
  • npm test passes.
  • make docs builds without warnings. (for doc-only changes)

Checklist

General

Code Changes

  • Formatters applied.
  • No secrets, API keys, or credentials committed.

Summary by CodeRabbit

  • Bug Fixes
    • Improved troubleshooting guidance for port conflicts during setup: diagnostic command suggestions for inspecting or terminating a conflicting process now include the necessary privilege escalation (so commands work as expected in common environments).

@coderabbitai

coderabbitai Bot commented Mar 29, 2026

Copy link
Copy Markdown
Contributor

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

Prefixed lsof troubleshooting commands with sudo in onboarding messages and troubleshooting docs to ensure processes holding ports can be identified; no control flow or runtime behavior changed.

Changes

Cohort / File(s) Summary
Onboarding port troubleshooting
bin/lib/onboard.js
Prepended sudo to suggested lsof commands in preflight() port-conflict messages; no other logic or branching changed.
Documentation: troubleshooting guidance
docs/reference/troubleshooting.md, .agents/skills/nemoclaw-reference/references/troubleshooting.md
Changed example lsof -i :18789 to sudo lsof -i :18789; subsequent kill <PID> steps unchanged.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

🐰 A port was hidden, quiet and snug,
I nudged the command with a helpful hug,
"Add sudo," I whispered, tiptoeing light,
Now PIDs appear, brought back to sight,
Hops of joy — small paws, big delight.

🚥 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 accurately summarizes the main change: adding sudo prefix to lsof commands in port-conflict troubleshooting.
Linked Issues check ✅ Passed All code objectives from issue #726 are met: sudo prefix added to lsof in both error paths and both documentation files updated.
Out of Scope Changes check ✅ Passed All changes directly address issue #726 requirements; no unrelated modifications detected in the changeset.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

On Linux, lsof requires root privileges to see processes owned by
other users. Without sudo, the suggested command returns empty output,
leaving users unable to identify the conflicting process.

Closes NVIDIA#726
@brandonpelfrey brandonpelfrey self-assigned this Mar 30, 2026
@brandonpelfrey

Copy link
Copy Markdown
Collaborator

The change itself does appear to miss two user-facing doc copies of the same guidance:

  • docs/reference/troubleshooting.md:98 still says lsof -i :18789 without sudo.
  • .agents/skills/nemoclaw-reference/references/troubleshooting.md:72 has the same stale command.

Please add these updates. Code-wise looks good to me.

Update the two remaining doc copies that still showed lsof without
sudo: docs/reference/troubleshooting.md and the agent skill reference.

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
@latenighthackathon

Copy link
Copy Markdown
Contributor Author

Good catch — added sudo to both remaining copies:

  • docs/reference/troubleshooting.md:98
  • .agents/skills/nemoclaw-reference/references/troubleshooting.md:72

Ready for re-review.

@wscurran wscurran added the fix label Mar 30, 2026
@wscurran

Copy link
Copy Markdown
Contributor

✨ Thanks for submitting this PR with a detailed summary, it addresses a bug with lsof port-conflict suggestions and proposes a fix to improve the user experience of NemoClaw.

@kjw3 kjw3 merged commit 711b98e into NVIDIA:main Mar 30, 2026
8 of 10 checks passed
@kjw3 kjw3 assigned kjw3 and unassigned kjw3 Mar 30, 2026
@latenighthackathon latenighthackathon deleted the fix/onboard-lsof-sudo branch March 30, 2026 21:00
quanticsoul4772 pushed a commit to quanticsoul4772/NemoClaw that referenced this pull request Mar 30, 2026
…IA#1073)

* fix(onboard): add sudo prefix to lsof port-conflict suggestions

On Linux, lsof requires root privileges to see processes owned by
other users. Without sudo, the suggested command returns empty output,
leaving users unable to identify the conflicting process.

Closes NVIDIA#726

* fix(docs): add sudo prefix to lsof in troubleshooting guides

Update the two remaining doc copies that still showed lsof without
sudo: docs/reference/troubleshooting.md and the agent skill reference.

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>

---------

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: KJ <kejones@nvidia.com>
kjw3 added a commit that referenced this pull request Mar 31, 2026
## Summary
- restore the dashboard forward on all onboarding paths, including
existing-sandbox reuse
- bind the dashboard forward to `0.0.0.0:18789` only when `CHAT_UI_URL`
points at a non-loopback host
- show `launchctl` guidance on macOS instead of `systemctl` for
dashboard port conflicts
- add regression coverage for dashboard bind resolution, sandbox reuse,
and platform-specific port-help output

## Issues
- Closes #957
- Fixes #1067
- Addresses #1088

## Why
Current onboarding only restored the dashboard forward on the full
sandbox-create path. If onboarding reused an existing ready sandbox, the
flow returned early and left the dashboard unreachable when the forward
was missing. The port-conflict help text also still showed Linux
`systemctl` guidance on macOS.

## Implementation
- added `isLoopbackHostname(...)`, `resolveDashboardForwardTarget(...)`,
and `ensureDashboardForward(...)` in `bin/lib/onboard.js`
- reused that helper in both:
  - the normal sandbox-create success path
  - the existing ready sandbox reuse path
- kept loopback binding for localhost / 127.0.0.0/8 / ::1
- switched to `0.0.0.0:18789` only for explicit non-loopback
`CHAT_UI_URL` targets
- added `getPortConflictServiceHints(...)` so preflight output stays
platform-specific without duplicating logic

## Validation
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
npx vitest run
```

Results:
- targeted onboarding suite: passed
- ESLint: passed
- TypeScript: passed
- full Vitest suite: `39` files passed, `680` tests passed, `3` skipped

### Cross-platform validation
Validated PR `#1192` / commit `4ef7a07` on:
- `mac`
  - passed
  - commands:
    - `npx vitest run test/onboard.test.js`
    - `npx eslint bin/lib/onboard.js test/onboard.test.js`
    - `npx tsc -p jsconfig.json --noEmit`
- `brev-cpu` (`kj-nemoclaw-cpu-test`)
  - passed
  - used Node `v22.22.2` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- `brev-gpu` (`kj-nemoclaw-l40s-test`)
  - passed
  - used Node `v22.22.1` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- one initial timeout occurred on the long-running “create stream never
closes” test; immediate rerun passed cleanly
- `spark` (`spark-d8c8`)
  - passed
  - used Node `v22.22.1`
  - ran in a disposable worktree with fresh dev dependency install

Remote commands used:
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
```

Environment notes:
- Brev CPU/GPU already had usable Node 22 installs, but not on the
default shell `PATH`
- Spark needed a disposable `npm install --include=dev` because the base
checkout did not have the full JS dev toolchain

## Related prior work
This PR pulls in the good ideas, but reimplements them cleanly on top of
current `main`.

Credit to:
- `WuKongAI-CMU` / Peter for the dashboard-forward direction in #958
- `dinuduke` / Dinesh Singh for the macOS launchctl guidance direction
in #1167
- `latenighthackathon` for the already-merged sudo/lsof fix in #1073,
which this PR preserves while making the service hint platform-specific

Signed-off-by: Kevin Jones <kejones@nvidia.com>


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

* **New Features**
* Platform-specific port-conflict guidance with OS-appropriate
service-stop instructions for macOS and Linux.
* Smarter dashboard port forwarding: onboarding now ensures the
dashboard binds to loopback or to all interfaces based on the chat UI
URL, and restores forwarding when reusing an existing sandbox.

* **Tests**
* Expanded coverage for port-conflict hints, loopback detection,
forward-target resolution, and dashboard-forward behavior across sandbox
scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
laitingsheng pushed a commit that referenced this pull request Apr 2, 2026
* fix(onboard): add sudo prefix to lsof port-conflict suggestions

On Linux, lsof requires root privileges to see processes owned by
other users. Without sudo, the suggested command returns empty output,
leaving users unable to identify the conflicting process.

Closes #726

* fix(docs): add sudo prefix to lsof in troubleshooting guides

Update the two remaining doc copies that still showed lsof without
sudo: docs/reference/troubleshooting.md and the agent skill reference.

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>

---------

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: KJ <kejones@nvidia.com>
laitingsheng pushed a commit that referenced this pull request Apr 2, 2026
## Summary
- restore the dashboard forward on all onboarding paths, including
existing-sandbox reuse
- bind the dashboard forward to `0.0.0.0:18789` only when `CHAT_UI_URL`
points at a non-loopback host
- show `launchctl` guidance on macOS instead of `systemctl` for
dashboard port conflicts
- add regression coverage for dashboard bind resolution, sandbox reuse,
and platform-specific port-help output

## Issues
- Closes #957
- Fixes #1067
- Addresses #1088

## Why
Current onboarding only restored the dashboard forward on the full
sandbox-create path. If onboarding reused an existing ready sandbox, the
flow returned early and left the dashboard unreachable when the forward
was missing. The port-conflict help text also still showed Linux
`systemctl` guidance on macOS.

## Implementation
- added `isLoopbackHostname(...)`, `resolveDashboardForwardTarget(...)`,
and `ensureDashboardForward(...)` in `bin/lib/onboard.js`
- reused that helper in both:
  - the normal sandbox-create success path
  - the existing ready sandbox reuse path
- kept loopback binding for localhost / 127.0.0.0/8 / ::1
- switched to `0.0.0.0:18789` only for explicit non-loopback
`CHAT_UI_URL` targets
- added `getPortConflictServiceHints(...)` so preflight output stays
platform-specific without duplicating logic

## Validation
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
npx vitest run
```

Results:
- targeted onboarding suite: passed
- ESLint: passed
- TypeScript: passed
- full Vitest suite: `39` files passed, `680` tests passed, `3` skipped

### Cross-platform validation
Validated PR `#1192` / commit `4ef7a07` on:
- `mac`
  - passed
  - commands:
    - `npx vitest run test/onboard.test.js`
    - `npx eslint bin/lib/onboard.js test/onboard.test.js`
    - `npx tsc -p jsconfig.json --noEmit`
- `brev-cpu` (`kj-nemoclaw-cpu-test`)
  - passed
  - used Node `v22.22.2` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- `brev-gpu` (`kj-nemoclaw-l40s-test`)
  - passed
  - used Node `v22.22.1` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- one initial timeout occurred on the long-running “create stream never
closes” test; immediate rerun passed cleanly
- `spark` (`spark-d8c8`)
  - passed
  - used Node `v22.22.1`
  - ran in a disposable worktree with fresh dev dependency install

Remote commands used:
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
```

Environment notes:
- Brev CPU/GPU already had usable Node 22 installs, but not on the
default shell `PATH`
- Spark needed a disposable `npm install --include=dev` because the base
checkout did not have the full JS dev toolchain

## Related prior work
This PR pulls in the good ideas, but reimplements them cleanly on top of
current `main`.

Credit to:
- `WuKongAI-CMU` / Peter for the dashboard-forward direction in #958
- `dinuduke` / Dinesh Singh for the macOS launchctl guidance direction
in #1167
- `latenighthackathon` for the already-merged sudo/lsof fix in #1073,
which this PR preserves while making the service hint platform-specific

Signed-off-by: Kevin Jones <kejones@nvidia.com>


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

* **New Features**
* Platform-specific port-conflict guidance with OS-appropriate
service-stop instructions for macOS and Linux.
* Smarter dashboard port forwarding: onboarding now ensures the
dashboard binds to loopback or to all interfaces based on the chat UI
URL, and restores forwarding when reusing an existing sandbox.

* **Tests**
* Expanded coverage for port-conflict hints, loopback detection,
forward-target resolution, and dashboard-forward behavior across sandbox
scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
lakamsani pushed a commit to lakamsani/NemoClaw that referenced this pull request Apr 4, 2026
…IA#1073)

* fix(onboard): add sudo prefix to lsof port-conflict suggestions

On Linux, lsof requires root privileges to see processes owned by
other users. Without sudo, the suggested command returns empty output,
leaving users unable to identify the conflicting process.

Closes NVIDIA#726

* fix(docs): add sudo prefix to lsof in troubleshooting guides

Update the two remaining doc copies that still showed lsof without
sudo: docs/reference/troubleshooting.md and the agent skill reference.

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>

---------

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: KJ <kejones@nvidia.com>
lakamsani pushed a commit to lakamsani/NemoClaw that referenced this pull request Apr 4, 2026
…#1192)

## Summary
- restore the dashboard forward on all onboarding paths, including
existing-sandbox reuse
- bind the dashboard forward to `0.0.0.0:18789` only when `CHAT_UI_URL`
points at a non-loopback host
- show `launchctl` guidance on macOS instead of `systemctl` for
dashboard port conflicts
- add regression coverage for dashboard bind resolution, sandbox reuse,
and platform-specific port-help output

## Issues
- Closes NVIDIA#957
- Fixes NVIDIA#1067
- Addresses NVIDIA#1088

## Why
Current onboarding only restored the dashboard forward on the full
sandbox-create path. If onboarding reused an existing ready sandbox, the
flow returned early and left the dashboard unreachable when the forward
was missing. The port-conflict help text also still showed Linux
`systemctl` guidance on macOS.

## Implementation
- added `isLoopbackHostname(...)`, `resolveDashboardForwardTarget(...)`,
and `ensureDashboardForward(...)` in `bin/lib/onboard.js`
- reused that helper in both:
  - the normal sandbox-create success path
  - the existing ready sandbox reuse path
- kept loopback binding for localhost / 127.0.0.0/8 / ::1
- switched to `0.0.0.0:18789` only for explicit non-loopback
`CHAT_UI_URL` targets
- added `getPortConflictServiceHints(...)` so preflight output stays
platform-specific without duplicating logic

## Validation
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
npx vitest run
```

Results:
- targeted onboarding suite: passed
- ESLint: passed
- TypeScript: passed
- full Vitest suite: `39` files passed, `680` tests passed, `3` skipped

### Cross-platform validation
Validated PR `NVIDIA#1192` / commit `4ef7a07` on:
- `mac`
  - passed
  - commands:
    - `npx vitest run test/onboard.test.js`
    - `npx eslint bin/lib/onboard.js test/onboard.test.js`
    - `npx tsc -p jsconfig.json --noEmit`
- `brev-cpu` (`kj-nemoclaw-cpu-test`)
  - passed
  - used Node `v22.22.2` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- `brev-gpu` (`kj-nemoclaw-l40s-test`)
  - passed
  - used Node `v22.22.1` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- one initial timeout occurred on the long-running “create stream never
closes” test; immediate rerun passed cleanly
- `spark` (`spark-d8c8`)
  - passed
  - used Node `v22.22.1`
  - ran in a disposable worktree with fresh dev dependency install

Remote commands used:
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
```

Environment notes:
- Brev CPU/GPU already had usable Node 22 installs, but not on the
default shell `PATH`
- Spark needed a disposable `npm install --include=dev` because the base
checkout did not have the full JS dev toolchain

## Related prior work
This PR pulls in the good ideas, but reimplements them cleanly on top of
current `main`.

Credit to:
- `WuKongAI-CMU` / Peter for the dashboard-forward direction in NVIDIA#958
- `dinuduke` / Dinesh Singh for the macOS launchctl guidance direction
in NVIDIA#1167
- `latenighthackathon` for the already-merged sudo/lsof fix in NVIDIA#1073,
which this PR preserves while making the service hint platform-specific

Signed-off-by: Kevin Jones <kejones@nvidia.com>


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

* **New Features**
* Platform-specific port-conflict guidance with OS-appropriate
service-stop instructions for macOS and Linux.
* Smarter dashboard port forwarding: onboarding now ensures the
dashboard binds to loopback or to all interfaces based on the chat UI
URL, and restores forwarding when reusing an existing sandbox.

* **Tests**
* Expanded coverage for port-conflict hints, loopback detection,
forward-target resolution, and dashboard-forward behavior across sandbox
scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
gemini2026 pushed a commit to gemini2026/NemoClaw that referenced this pull request Apr 14, 2026
…IA#1073)

* fix(onboard): add sudo prefix to lsof port-conflict suggestions

On Linux, lsof requires root privileges to see processes owned by
other users. Without sudo, the suggested command returns empty output,
leaving users unable to identify the conflicting process.

Closes NVIDIA#726

* fix(docs): add sudo prefix to lsof in troubleshooting guides

Update the two remaining doc copies that still showed lsof without
sudo: docs/reference/troubleshooting.md and the agent skill reference.

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>

---------

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
Co-authored-by: KJ <kejones@nvidia.com>
gemini2026 pushed a commit to gemini2026/NemoClaw that referenced this pull request Apr 14, 2026
…#1192)

## Summary
- restore the dashboard forward on all onboarding paths, including
existing-sandbox reuse
- bind the dashboard forward to `0.0.0.0:18789` only when `CHAT_UI_URL`
points at a non-loopback host
- show `launchctl` guidance on macOS instead of `systemctl` for
dashboard port conflicts
- add regression coverage for dashboard bind resolution, sandbox reuse,
and platform-specific port-help output

## Issues
- Closes NVIDIA#957
- Fixes NVIDIA#1067
- Addresses NVIDIA#1088

## Why
Current onboarding only restored the dashboard forward on the full
sandbox-create path. If onboarding reused an existing ready sandbox, the
flow returned early and left the dashboard unreachable when the forward
was missing. The port-conflict help text also still showed Linux
`systemctl` guidance on macOS.

## Implementation
- added `isLoopbackHostname(...)`, `resolveDashboardForwardTarget(...)`,
and `ensureDashboardForward(...)` in `bin/lib/onboard.js`
- reused that helper in both:
  - the normal sandbox-create success path
  - the existing ready sandbox reuse path
- kept loopback binding for localhost / 127.0.0.0/8 / ::1
- switched to `0.0.0.0:18789` only for explicit non-loopback
`CHAT_UI_URL` targets
- added `getPortConflictServiceHints(...)` so preflight output stays
platform-specific without duplicating logic

## Validation
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
npx vitest run
```

Results:
- targeted onboarding suite: passed
- ESLint: passed
- TypeScript: passed
- full Vitest suite: `39` files passed, `680` tests passed, `3` skipped

### Cross-platform validation
Validated PR `NVIDIA#1192` / commit `4ef7a07` on:
- `mac`
  - passed
  - commands:
    - `npx vitest run test/onboard.test.js`
    - `npx eslint bin/lib/onboard.js test/onboard.test.js`
    - `npx tsc -p jsconfig.json --noEmit`
- `brev-cpu` (`kj-nemoclaw-cpu-test`)
  - passed
  - used Node `v22.22.2` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- `brev-gpu` (`kj-nemoclaw-l40s-test`)
  - passed
  - used Node `v22.22.1` from `~/.nvm`
  - ran in a disposable worktree with fresh dev dependency install
- one initial timeout occurred on the long-running “create stream never
closes” test; immediate rerun passed cleanly
- `spark` (`spark-d8c8`)
  - passed
  - used Node `v22.22.1`
  - ran in a disposable worktree with fresh dev dependency install

Remote commands used:
```bash
npx vitest run test/onboard.test.js
npx eslint bin/lib/onboard.js test/onboard.test.js
npx tsc -p jsconfig.json --noEmit
```

Environment notes:
- Brev CPU/GPU already had usable Node 22 installs, but not on the
default shell `PATH`
- Spark needed a disposable `npm install --include=dev` because the base
checkout did not have the full JS dev toolchain

## Related prior work
This PR pulls in the good ideas, but reimplements them cleanly on top of
current `main`.

Credit to:
- `WuKongAI-CMU` / Peter for the dashboard-forward direction in NVIDIA#958
- `dinuduke` / Dinesh Singh for the macOS launchctl guidance direction
in NVIDIA#1167
- `latenighthackathon` for the already-merged sudo/lsof fix in NVIDIA#1073,
which this PR preserves while making the service hint platform-specific

Signed-off-by: Kevin Jones <kejones@nvidia.com>


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

* **New Features**
* Platform-specific port-conflict guidance with OS-appropriate
service-stop instructions for macOS and Linux.
* Smarter dashboard port forwarding: onboarding now ensures the
dashboard binds to loopback or to all interfaces based on the chat UI
URL, and restores forwarding when reusing an existing sandbox.

* **Tests**
* Expanded coverage for port-conflict hints, loopback detection,
forward-target resolution, and dashboard-forward behavior across sandbox
scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@wscurran wscurran added bug-fix PR fixes a bug or regression and removed fix labels Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug-fix PR fixes a bug or regression

Projects

None yet

Development

Successfully merging this pull request may close these issues.

lsof -i:8080 command on onboarding needs sudo prefix to work properly

4 participants