Skip to content

feat(install): offer express install on Windows WSL#3824

Merged
ericksoa merged 2 commits into
mainfrom
feat/wsl-express-install
May 19, 2026
Merged

feat(install): offer express install on Windows WSL#3824
ericksoa merged 2 commits into
mainfrom
feat/wsl-express-install

Conversation

@zyang-dev

@zyang-dev zyang-dev commented May 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Enable express install for Windows WSL by routing the installer’s express path to Windows-host Ollama setup. This gives WSL users the same guided non-interactive setup path already available on DGX platforms.

Changes

  • Detect Windows WSL as an express-install-capable platform in the installer.
  • Map WSL express install to NEMOCLAW_PROVIDER=install-windows-ollama.
  • Add safe provider fallback handling when Windows-host Ollama is already installed or already reachable.
  • Add installer and onboarding selection tests for WSL/Windows-host Ollama behavior.
  • Update installer help and user docs for WSL express install.

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)

Verification

  • npx prek run --all-files passes
  • npm test passes
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • make 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: zyang-dev 267119621+zyang-dev@users.noreply.github.com

Summary by CodeRabbit

  • New Features

    • Express install now supports Windows WSL and will auto-select the Windows-host Ollama path; added NEMOCLAW_NO_EXPRESS option to skip express prompts.
  • Documentation

    • Updated quickstart, Windows preparation, and command reference to document express install on DGX Spark, DGX Station, and Windows WSL and explain WSL behavior.
  • Tests

    • Added coverage for Windows WSL express detection and Windows Ollama onboarding flows.

Review Change Stack

Signed-off-by: zyang-dev <267119621+zyang-dev@users.noreply.github.com>
@zyang-dev zyang-dev self-assigned this May 19, 2026
@coderabbitai

coderabbitai Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 19f6bd53-ac8a-4036-a4a3-099f796b56cc

📥 Commits

Reviewing files that changed from the base of the PR and between 02d1640 and 14a3664.

📒 Files selected for processing (6)
  • docs/get-started/quickstart.md
  • docs/get-started/quickstart.mdx
  • scripts/install.sh
  • src/lib/onboard.ts
  • src/lib/onboard/provider-key-fallback.test.ts
  • src/lib/onboard/provider-key-fallback.ts
✅ Files skipped from review due to trivial changes (3)
  • docs/get-started/quickstart.md
  • src/lib/onboard/provider-key-fallback.test.ts
  • docs/get-started/quickstart.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • scripts/install.sh

📝 Walkthrough

Walkthrough

Adds Windows WSL as a supported express-install platform: installer WSL detection and provider-selection branch, a typed provider-key fallback used by onboarding, updated help/docs, and tests validating detection and provider-selection (including pre-installed Ollama).

Changes

Windows WSL Express Install Support

Layer / File(s) Summary
Installer WSL detection and express install branch
scripts/install.sh, install.sh
Adds is_wsl_host() WSL detection, detect_express_platform() returns Windows WSL for WSL hosts, express-install branch sets NEMOCLAW_PROVIDER=install-windows-ollama, and help/usage output documents NEMOCLAW_NO_EXPRESS=1.
Provider resolution fallback implementation
src/lib/onboard/provider-key-fallback.ts, src/lib/onboard.ts
Adds ProviderOption and ProviderKeyFallbackContext types and resolveProviderKeyFallback to map generic install/start keys to existing provider options (special-casing Windows-host Ollama). onboard.ts uses this resolver for non-interactive providerKey resolution.
Tests: express prompt, platform injection, and provider selection
test/install-preflight.test.ts, test/onboard-selection.test.ts, src/lib/onboard/provider-key-fallback.test.ts
Extends PTY test helper to inject express platform, updates --help expectations for NEMOCLAW_NO_EXPRESS=1, adds Windows WSL express-install tests, provider-selection test for install-windows-ollama when Ollama is already installed, and unit tests for resolveProviderKeyFallback.
User-facing documentation and help text
docs/get-started/quickstart.md, docs/get-started/quickstart.mdx, docs/get-started/windows-preparation.md, docs/get-started/windows-preparation.mdx, docs/reference/commands.md, docs/reference/commands.mdx
Documents express install behavior for DGX Spark, DGX Station, and Windows WSL; notes that WSL express install uses the Windows-host Ollama setup path; updates NEMOCLAW_NO_EXPRESS description to include Windows WSL.

Sequence Diagram

sequenceDiagram
  participant User as CLI installer
  participant scripts as scripts/install.sh
  participant detect as detect_express_platform()
  participant resolver as resolveProviderKeyFallback()
  participant onboard as setupNim()
  User->>scripts: run installer (interactive)
  scripts->>detect: detect_express_platform()
  detect->>scripts: "Windows WSL" (if is_wsl_host)
  scripts->>scripts: set NEMOCLAW_PROVIDER=install-windows-ollama
  scripts->>onboard: invoke onboarding with providerKey
  onboard->>resolver: resolveProviderKeyFallback(options, providerKey, {isWindowsHostOllama})
  resolver-->>onboard: selected provider option (or undefined)
  onboard-->>User: perform selected provider action
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#3790: touches onboarding provider-selection logic and install-vllm routing, related to provider-key resolution changes.

Suggested labels

NemoClaw CLI, Getting Started

Suggested reviewers

  • ericksoa
  • jyaunches
  • cv

Poem

🐰 I hopped through scripts and docs with glee,

WSL now joins express install's spree,
Detection sings "Windows WSL" bright,
Providers resolve to match the right,
Quickstarts and tests all set to see.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 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 feature: adding express install support for Windows WSL, which is the core objective of this PR.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/wsl-express-install

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


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

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: wsl-e2e, cloud-onboard-e2e
Optional E2E: gpu-e2e, wsl-repo-cloud-openclaw

Dispatch hint: cloud-onboard-e2e

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • wsl-e2e (high): Required because WSL detection and installer Docker-preflight behavior changed. This workflow runs the install/build/full E2E flow inside Ubuntu WSL on windows-latest and is the closest existing end-to-end guard for WSL onboarding regressions.
  • cloud-onboard-e2e (high): Required because installer/bootstrap and auto-onboarding behavior changed. This job exercises the public/raw installer path, installs the PR ref, runs non-interactive onboarding, creates a sandbox, and verifies health/security/inference through the real user flow.

Optional E2E

  • gpu-e2e (very high): Optional confidence for adjacent local Ollama onboarding behavior. The PR refactors provider-key fallback logic that includes install-ollama/ollama mappings, but the main risk is Windows-host Ollama, which this Linux GPU Ollama E2E does not directly cover.
  • wsl-repo-cloud-openclaw (high): Optional scenario-runner variant for WSL smoke/platform suites if maintainers want scenario-framework coverage in addition to the legacy WSL full E2E workflow.

New E2E recommendations

  • wsl-express-windows-ollama (high): Existing WSL E2E runs non-interactive cloud onboarding and skips the new interactive express prompt. No existing E2E validates that accepting WSL express install sets NEMOCLAW_PROVIDER=install-windows-ollama, starts/installs Windows-host Ollama, and completes sandbox onboarding through host.docker.internal.
    • Suggested test: Add a WSL scenario or workflow job for interactive WSL express install with Windows-host Ollama: simulate/prepare Windows Ollama availability, accept the express prompt, verify provider selection is install-windows-ollama/start-windows-ollama as appropriate, and verify inference from the sandbox.
  • provider-key-fallback-e2e (medium): The new provider-key fallback helper has unit coverage, but there is no E2E that starts onboarding with NEMOCLAW_PROVIDER=install-windows-ollama when Windows-host Ollama is already installed or already reachable and confirms the fallback does not silently select WSL/Linux Ollama.
    • Suggested test: Add an E2E or scenario validation suite for non-interactive WSL onboarding with NEMOCLAW_PROVIDER=install-windows-ollama across installed/already-running Windows-host Ollama states, asserting provider recovery and sandbox inference.

Dispatch hint

  • Workflow: nightly-e2e.yaml
  • jobs input: cloud-onboard-e2e

@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.

Actionable comments posted: 2

🧹 Nitpick comments (2)
docs/get-started/quickstart.md (1)

67-67: ⚡ Quick win

Use present tense instead of modal verb.

Change "can offer" to "offers" to describe current behavior in present tense rather than possibility.

As per coding guidelines, use present tense for descriptions of current behavior.

Suggested fix
-On DGX Spark, DGX Station, and Windows WSL, an interactive installer can offer express install after you accept the third-party software notice.
+On DGX Spark, DGX Station, and Windows WSL, an interactive installer offers express install after you accept the third-party software notice.
🤖 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 `@docs/get-started/quickstart.md` at line 67, Update the sentence "On DGX
Spark, DGX Station, and Windows WSL, an interactive installer can offer express
install after you accept the third-party software notice." to use present tense
by replacing "can offer" with "offers" so it reads "...an interactive installer
offers express install..."; make this change in docs/get-started/quickstart.md
where that sentence appears.
docs/get-started/quickstart.mdx (1)

54-54: ⚡ Quick win

Use present tense instead of modal verb.

Change "can offer" to "offers" to describe current behavior in present tense rather than possibility.

As per coding guidelines, use present tense for descriptions of current behavior.

Suggested fix
-On DGX Spark, DGX Station, and Windows WSL, an interactive installer can offer express install after you accept the third-party software notice.
+On DGX Spark, DGX Station, and Windows WSL, an interactive installer offers express install after you accept the third-party software notice.
🤖 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 `@docs/get-started/quickstart.mdx` at line 54, Update the sentence in the
quickstart doc where it currently reads "On DGX Spark, DGX Station, and Windows
WSL, an interactive installer can offer express install after you accept the
third-party software notice." to use present tense by replacing "can offer" with
"offers" so it reads "an interactive installer offers express install"; edit the
line in docs/get-started/quickstart.mdx accordingly.
🤖 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.

Inline comments:
In `@scripts/install.sh`:
- Around line 2121-2134: Docker preflight checks still rely on
environment-variable-only detection causing incorrect Linux Docker install paths
on some WSL setups; update the Docker preflight logic to call and reuse the
canonical is_wsl_host() function (instead of checking only
WSL_DISTRO_NAME/WSL_INTEROP) wherever the script currently branches for WSL vs
non-WSL Docker setup (e.g., the Docker install decision block and any checks
referencing WSL env vars); replace the env-var-only condition with a call to
is_wsl_host and ensure the resulting truthy/falsey result drives the
WSL-specific Docker branch so /proc-based WSL detection is honored.

In `@src/lib/onboard.ts`:
- Around line 6403-6417: The block that computes selected for providerKey values
"install-windows-ollama" and "start-windows-ollama" should be extracted into a
small helper (e.g., mapWindowsOllamaOption) under src/lib/onboard/ so this file
only makes a thin call; create a helper that accepts (providerKey, options,
ollamaHost, OLLAMA_HOST_DOCKER_INTERNAL) and returns the appropriate option (the
same logic that checks for "start-windows-ollama", "install-windows-ollama" and
picks "start-windows-ollama" or "ollama" when ollamaHost ===
OLLAMA_HOST_DOCKER_INTERNAL), then replace the large inline if/else in
onboard.ts with selected = mapWindowsOllamaOption(providerKey, options,
ollamaHost).

---

Nitpick comments:
In `@docs/get-started/quickstart.md`:
- Line 67: Update the sentence "On DGX Spark, DGX Station, and Windows WSL, an
interactive installer can offer express install after you accept the third-party
software notice." to use present tense by replacing "can offer" with "offers" so
it reads "...an interactive installer offers express install..."; make this
change in docs/get-started/quickstart.md where that sentence appears.

In `@docs/get-started/quickstart.mdx`:
- Line 54: Update the sentence in the quickstart doc where it currently reads
"On DGX Spark, DGX Station, and Windows WSL, an interactive installer can offer
express install after you accept the third-party software notice." to use
present tense by replacing "can offer" with "offers" so it reads "an interactive
installer offers express install"; edit the line in
docs/get-started/quickstart.mdx accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 033978cc-7462-4bf5-b54c-ffacbdfa4eb4

📥 Commits

Reviewing files that changed from the base of the PR and between 326f338 and 02d1640.

📒 Files selected for processing (11)
  • docs/get-started/quickstart.md
  • docs/get-started/quickstart.mdx
  • docs/get-started/windows-preparation.md
  • docs/get-started/windows-preparation.mdx
  • docs/reference/commands.md
  • docs/reference/commands.mdx
  • install.sh
  • scripts/install.sh
  • src/lib/onboard.ts
  • test/install-preflight.test.ts
  • test/onboard-selection.test.ts

Comment thread scripts/install.sh
Comment thread src/lib/onboard.ts Outdated
Signed-off-by: zyang-dev <267119621+zyang-dev@users.noreply.github.com>

@ericksoa ericksoa 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.

Reviewed the WSL express install path, including installer detection, provider fallback behavior, docs, and targeted validation. The resolved CodeRabbit concerns are addressed at the current head, and the focused build/docs/test coverage passes locally.

@ericksoa ericksoa merged commit a4e4d6c into main May 19, 2026
30 checks passed
@ericksoa ericksoa deleted the feat/wsl-express-install branch May 19, 2026 22:23
@miyoungc miyoungc mentioned this pull request May 20, 2026
12 tasks
miyoungc added a commit that referenced this pull request May 20, 2026
## Summary
Refreshes the NemoClaw docs for v0.0.46 by updating version metadata,
release notes, and generated user skills. The refresh also keeps public
docs aligned with the docs skip list by removing non-public experimental
references from the generated output.

## Related Issue
None.

## Changes
- #3744 and #3824 -> `docs/about/release-notes.mdx`: Added Windows
bootstrap and WSL express install coverage for v0.0.46.
- #3392 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/reference/network-policies.mdx`,
and policy examples: Refreshed public messaging channel docs around
WhatsApp and matching policy presets.
- #3742, #3767, #3732, #3786, #3777, and #3808 ->
`docs/about/release-notes.mdx`: Added release-note coverage for Hermes
managed tools, Bedrock Runtime endpoint detection, WSL Ollama proxying,
Model Router Python fallback, plugin command registration, and
tool-catalog latency improvements.
- #3124 -> `docs/about/release-notes.mdx`: Added release-note coverage
for hosted uninstall flag guidance.
- Generated `nemoclaw-user-*` skills from the updated MDX docs for the
v0.0.46 release.

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

## Verification
- [ ] `npx prek run --all-files` passes
- [ ] `npm test` passes
- [ ] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [x] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [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)

Verification notes:
- Commit hooks passed, including markdownlint, gitleaks, docs-to-skills
verification, env-var docs, and skills YAML checks.
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx` passed.
- `bash test/e2e/e2e-cloud-experimental/check-docs.sh --only-links
--local-only --with-skills` passed.
- `git diff --check` passed.
- `make docs` was attempted but blocked before MDX validation because
`npx` received HTTP 403 fetching `fern-api` from npm.

---
Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>

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

* **New Features**
* Released v0.0.46: improved Windows setup, WhatsApp messaging support,
Hermes sandbox/tool routing, Anthropic endpoint compatibility, Ollama
proxy routing, model-router fallback, OpenClaw plugin/backup
compatibility, sandbox build tooling fixes, and updated uninstall flag
behavior.

* **Documentation**
* Removed WeChat from messaging flows and presets across guides and CLI
docs; clarified onboarding and channel setup for WhatsApp. Clarified
runtime mutability and filesystem (Landlock) behavior — some changes
require sandbox rebuilds; prefer host-side commands for durable config.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/3911?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
ericksoa pushed a commit that referenced this pull request May 20, 2026
## Summary
- force the installer Docker bootstrap unit-test helper to exercise the
non-WSL Linux path
- keep the real installer behavior unchanged: WSL hosts still skip Linux
Docker bootstrap

## Why
PR #3824 broadened WSL detection from WSL env vars to `/proc` probes via
`is_wsl_host`. That is correct for runtime behavior, but these unit
tests are specifically validating Linux Docker bootstrap branches with
stubbed `docker`, `id`, `sudo`, and `systemctl`. On the real WSL
main-watch runner, `/proc` identifies WSL, so `ensure_docker` returns
before touching the stubs and the tests fail with empty output.

This overrides `is_wsl_host` inside that sourced-test harness only, so
the tests keep validating the intended Linux branches on every host.

## Test plan
- `npm ci --ignore-scripts`
- `npx vitest run test/install-preflight.test.ts --testNamePattern
"installer Docker bootstrap" --testTimeout 60000`

Fixes the WSL-only failures in `CI / Platform Vitest Main Watch` after
#3824.


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

## Summary by CodeRabbit

* **Tests**
* Enhanced testing for Linux Docker bootstrap procedures to ensure
comprehensive coverage of installation scenarios across different system
configurations.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/3899?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@wscurran wscurran added platform: wsl Affects Windows Subsystem for Linux feature PR adds or expands user-visible functionality and removed Platform: Windows/WSL labels Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature PR adds or expands user-visible functionality platform: wsl Affects Windows Subsystem for Linux v0.0.46 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants