Redesign WSL gateway setup and OpenClaw onboard UX - #925
Conversation
Presentation-only redesign of the OpenClaw Windows setup/onboarding flow. No changes to connection, pairing, the install pipeline, credentials, or the gateway protocol. - Welcome: 2-card chooser (Install a local gateway [WSL, recommended] / Connect to an existing gateway). - Capabilities: rebuilt into a stepped, accreting flow like the gateway-onboard transcript: (1) what your agent can do (profile + fine-tune toggles), (2) Windows permissions (merged in from the old standalone step; each OS permission row shows only when its capability is enabled), (3) review & install. Honors SetupConfig.SkipPermissions by hiding step 2 (2-step flow) without touching the SetupConfig schema. Writes the 9 CapabilitiesConfig flags before the pipeline runs. - Gateway onboard: restyle + vertical transcript of answered steps; auto-scroll keeps the active step's title in view (so long option lists no longer hide the step intro). Protocol methods unchanged. - Progress: tighter step rows; "Live activity" ledger flows below the steps and opens downward instead of being pinned to the window bottom; themed spinner. - Complete: summary cards + node-mode callout (removed the "what changed" expander). - Brand-red accent themed for the setup window only (light + dark). Filled controls use WCAG-AA reds (white text >= 5:1); the bright coral #FF5C5C failed AA at 3.03:1, so it is kept only for accent text/links. - Shared SetupPermissionHelper used by both the merged step and the legacy standalone PermissionsPage (kept for the dev preview route). - Dev-only preview route via OPENCLAW_SETUP_PREVIEW_PAGE, gated to DEBUG builds (inert in Release) so it can never bypass the setup run lock or pipeline. Before/after + real onboard walkthrough screenshots in docs/onboarding-redesign/. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refine the setup flow around transparent WSL gateway installation, native WinUI styling, milestone handoff, and onboarding recovery actions. Keep gateway/install behavior unchanged while making the user-facing steps clearer and more consistent. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Restore the main-branch off-UI-thread existing gateway detection contract for the redesigned Welcome page, and make onboarding progress indicators advance through the gateway install and onboard steps separately. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Remove stale setup screenshots, delete the unused tray SetupWizardWindow and obsolete SetupEngine permissions page, and route direct OpenClaw onboard entry points through the new gateway-installed handoff so users keep the redesigned setup context. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Expose preview-only setup error and OpenClaw onboard error states so the PR screenshot set can cover the recovery UI without checking image artifacts into the repo. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use the OpenClaw mascot with a corner success badge for the setup complete state, matching the gateway-installed and setup-failed visual language. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Delete the abandoned Onboarding V2 preview harness and visual-diff assets, remove stale lobster branding references, and harden the gateway-installed handoff with inline feedback if onboarding cannot start immediately. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Persist capability profile selections into the runtime node settings used after tray restart, and save the final launch-at-startup choice before restarting the tray. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Ensure capability profile selections are written to the runtime Node* settings used after restart, and persist only the final startup preference when setup completes so direct onboard does not reset existing capability choices. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Start direct onboard windows directly at the gateway-installed handoff and surface permission status read failures inline so setup never silently degrades. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Hide and skip persisting the startup preference for direct OpenClaw onboard sessions so existing AutoStart choices are not overwritten, while fresh setup still defaults startup on. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
When direct OpenClaw onboard hides the startup preference row, compute the completion AutoStart payload from the row visibility so existing Start with Windows choices are preserved. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Allow idle setup windows to switch to the safe direct-onboard handoff, remove an unreachable wizard error branch, and make corrupt settings backups collision-proof. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Drop an accidentally committed local cache file from the onboarding review cleanup. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Only apply the Standard profile fallback for the bundled placeholder config, allow idle setup windows to switch to the direct-onboard handoff, and clean up small review edge cases. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Remove a local impeccable cache artifact from the post-rebase review fixes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Presentation-only redesign of the OpenClaw Windows setup/onboarding flow. No changes to connection, pairing, the install pipeline, credentials, or the gateway protocol. - Welcome: 2-card chooser (Install a local gateway [WSL, recommended] / Connect to an existing gateway). - Capabilities: rebuilt into a stepped, accreting flow like the gateway-onboard transcript: (1) what your agent can do (profile + fine-tune toggles), (2) Windows permissions (merged in from the old standalone step; each OS permission row shows only when its capability is enabled), (3) review & install. Honors SetupConfig.SkipPermissions by hiding step 2 (2-step flow) without touching the SetupConfig schema. Writes the 9 CapabilitiesConfig flags before the pipeline runs. - Gateway onboard: restyle + vertical transcript of answered steps; auto-scroll keeps the active step's title in view (so long option lists no longer hide the step intro). Protocol methods unchanged. - Progress: tighter step rows; "Live activity" ledger flows below the steps and opens downward instead of being pinned to the window bottom; themed spinner. - Complete: summary cards + node-mode callout (removed the "what changed" expander). - Brand-red accent themed for the setup window only (light + dark). Filled controls use WCAG-AA reds (white text >= 5:1); the bright coral #FF5C5C failed AA at 3.03:1, so it is kept only for accent text/links. - Shared SetupPermissionHelper used by both the merged step and the legacy standalone PermissionsPage (kept for the dev preview route). - Dev-only preview route via OPENCLAW_SETUP_PREVIEW_PAGE, gated to DEBUG builds (inert in Release) so it can never bypass the setup run lock or pipeline. Before/after + real onboard walkthrough screenshots in docs/onboarding-redesign/. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refine the setup flow around transparent WSL gateway installation, native WinUI styling, milestone handoff, and onboarding recovery actions. Keep gateway/install behavior unchanged while making the user-facing steps clearer and more consistent. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Restore the main-branch off-UI-thread existing gateway detection contract for the redesigned Welcome page, and make onboarding progress indicators advance through the gateway install and onboard steps separately. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Remove stale setup screenshots, delete the unused tray SetupWizardWindow and obsolete SetupEngine permissions page, and route direct OpenClaw onboard entry points through the new gateway-installed handoff so users keep the redesigned setup context. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Expose preview-only setup error and OpenClaw onboard error states so the PR screenshot set can cover the recovery UI without checking image artifacts into the repo. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use the OpenClaw mascot with a corner success badge for the setup complete state, matching the gateway-installed and setup-failed visual language. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Delete the abandoned Onboarding V2 preview harness and visual-diff assets, remove stale lobster branding references, and harden the gateway-installed handoff with inline feedback if onboarding cannot start immediately. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Persist capability profile selections into the runtime node settings used after tray restart, and save the final launch-at-startup choice before restarting the tray. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Ensure capability profile selections are written to the runtime Node* settings used after restart, and persist only the final startup preference when setup completes so direct onboard does not reset existing capability choices. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Start direct onboard windows directly at the gateway-installed handoff and surface permission status read failures inline so setup never silently degrades. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Hide and skip persisting the startup preference for direct OpenClaw onboard sessions so existing AutoStart choices are not overwritten, while fresh setup still defaults startup on. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
When direct OpenClaw onboard hides the startup preference row, compute the completion AutoStart payload from the row visibility so existing Start with Windows choices are preserved. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Allow idle setup windows to switch to the safe direct-onboard handoff, remove an unreachable wizard error branch, and make corrupt settings backups collision-proof. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Drop an accidentally committed local cache file from the onboarding review cleanup. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e66d158e12
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| private async Task ShowGatewayWizardAsync() | ||
| { | ||
| var (setupWindow, createdNew) = await EnsureSetupWindowAsync(); | ||
| var (setupWindow, createdNew) = await EnsureSetupWindowAsync(startAtGatewayInstalledMilestone: true); |
There was a problem hiding this comment.
Use the active gateway URL for direct onboard
With this new Settings → OpenClaw onboard path, the setup window is created from the bundled default config, while WizardPage.ConnectClientAsync still uses config.EffectiveGatewayUrl even though it reads credentials from the active GatewayRecord. For an app-managed WSL gateway installed with a custom port or URL, this path now tries the default ws://localhost:18789 and fails to start onboard despite the active record being reachable. Pass the active record URL/config into this milestone path or have the wizard connect to record.Url.
Useful? React with 👍 / 👎.
|
@clawsweeper re-review Fixed the Device capability contract in
Windows ARM64 validation: full build passed; Shared 2691 passed / 31 skipped; Tray 1515 passed; SetupEngine 367 passed. AutoReview and final rubber-duck review both clean. New exact-head CI/E2E is running and remains a merge gate. |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review Fixed the active-gateway endpoint blocker in
Windows 11 ARM64 validation: full build passed; Shared 2722/2722; Tray 1516/1516; SetupEngine 367/367; Connection 399/399. AutoReview is clean. Exact-head UIA proof and the PR proof package now point to |
|
🦞🧹 I asked ClawSweeper to review this item again. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b2841c9598
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| var client = new OpenClawGatewayClient(config.EffectiveGatewayUrl, token, logger: NullLogger.Instance, identityPath: identityPath) | ||
| // The active record owns the endpoint as well as the credential identity. Resolve | ||
| // tunnel-backed records to their Windows-side local forward instead of bypassing SSH. | ||
| var gatewayUrl = GatewayClientEndpointResolver.Resolve(record); |
There was a problem hiding this comment.
Start the SSH forward before using its local endpoint
For active records that have SshTunnel, this path now switches the wizard to ws://localhost:<LocalPort>, but it never starts or validates that SSH forward. The normal gateway connection path starts the tunnel via _tunnelManager.StartAsync before using the local URL; the setup wizard path does not, while GatewayHostAccessClassifier still exposes the Settings OpenClaw Onboard card for managed WSL records that also carry SSH metadata. In that disconnected/tunnel-down state, onboarding fails even though the active record is valid, so start the tunnel through the same service/manager or avoid resolving tunnel-backed records here unless the forward is known to be up.
Useful? React with 👍 / 👎.
Summary
Change Type (select all)
Scope (select all touched areas)
winnodeLinked Issue/PR
Validation
Required closeout:
.\build.ps1✅dotnet test .\tests\OpenClaw.SetupEngine.Tests\\OpenClaw.SetupEngine.Tests.csproj --no-restore✅ 363 passeddotnet test .\tests\OpenClaw.Shared.Tests\\OpenClaw.Shared.Tests.csproj --no-restore✅ 2689 passed, 31 skippeddotnet test .\tests\OpenClaw.Tray.Tests\\OpenClaw.Tray.Tests.csproj --no-restore✅ 1454 passedMaintainer closeout (70b5648) after config/security-boundary patch:
dotnet restore .\src\OpenClaw.SetupEngine.UI\OpenClaw.SetupEngine.UI.csproj -r win-x64✅.\build.ps1✅dotnet test .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj --no-restore✅ 367 passeddotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore✅ 2691 passed, 31 skippeddotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore✅ 1512 passeddotnet test .\tests\OpenClaw.Connection.Tests\OpenClaw.Connection.Tests.csproj --no-restore✅ 395 passeddotnet test .\tests\OpenClaw.WinNode.Cli.Tests\OpenClaw.WinNode.Cli.Tests.csproj --no-restore✅ 120 passed (known OnnxRuntime version conflict warnings)Final maintainer closeout (
b2841c9598cd9942ee740721685cb5519bcc2bc8) after wizard-state, capability-contract, and active-endpoint review:build.ps1on Windows 11 ARM64 ✅OPENCLAW_RUN_INTEGRATION=1 dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore✅ 2722 passeddotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore✅ 1516 passeddotnet test .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj✅ 367 passeddotnet test .\tests\OpenClaw.Connection.Tests\OpenClaw.Connection.Tests.csproj --no-restore✅ 399 passedFocused active-endpoint regressions (custom port, SSH local forward, invalid tunnel ports) ✅ 4 passed
AutoReview ✅ 0 actionable findings
Rubber-duck review found and drove the mixed WSL+SSH endpoint fix; final implementation review clean.
Exact-head successful WSL setup/connect E2E ✅ 15 passed, 2 expected MXC skips (job 85262965268)
Additional sweep:
dotnet test .\tests\OpenClaw.Connection.Tests\OpenClaw.Connection.Tests.csproj✅ 376 passeddotnet test .\tests\OpenClaw.WinNode.Cli.Tests\OpenClaw.WinNode.Cli.Tests.csproj✅ 120 passeddotnet test .\tests\OpenClawTray.FunctionalUI.Tests\OpenClawTray.FunctionalUI.Tests.csproj✅ 10 passeddotnet test .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -r win-arm64✅ 76 passeddotnet test .\tests\OpenClaw.E2ETests\OpenClaw.E2ETests.csproj✅ 20 skipped (real-gateway gated)dotnet test .\tests\OpenClaw.Tray.IntegrationTests\OpenClaw.Tray.IntegrationTests.csproj✅ 18 skipped (integration-gated)Real behavior proof
win-arm64, isolated tray data.70b5648f26db5e2fe743a807a2cd9e3124ebce92.b2841c9598cd9942ee740721685cb5519bcc2bc8.Custom capabilities (review); setup/direct-onboard requests cannot replace an already-active wizard; direct onboard uses the active gateway's custom endpoint while SSH-backed records stay on their Windows-side local forward.HCS_E_HYPERV_NOT_INSTALLED). This VM therefore proves installer/UI/error/rollback behavior only. Exact-head GitHub Actions Windows E2E successfully proved distro creation, gateway startup, pairing, and setup/connect completion.{"ExactHead":"b2841c9598cd9942ee740721685cb5519bcc2bc8","Labels":[{"Label":"System","Present":true},{"Label":"Canvas","Present":true},{"Label":"Screen capture","Present":true},{"Label":"Camera","Present":true},{"Label":"Location","Present":true},{"Label":"Browser","Present":true},{"Label":"Device","Present":false},{"Label":"Text-to-speech","Present":true},{"Label":"Speech-to-text","Present":true},{"Label":"Basic device info and status stay available while Node Mode is on.","Present":true}]}Key excerpts:
Maintainer proof for the patched security/config behavior on
70b5648f26db5e2fe743a807a2cd9e3124ebce92:Code/security re-review and rubber-duck review found the previous hard-coded setup-copy and capability-persistence findings fixed with no remaining blocker.
Runtime capability enforcement proof:
Focused persistence regression proof:
Security Impact (required)
No— no new capability or OS permission surface added.No.Yes— direct onboarding now uses the active gateway record's endpoint, including its custom port, and resolves SSH-backed records to the Windows-side local forward.No.Yes— default capability profile is now Standard instead of silently inheriting the prior full default; users can still choose Full access before install.Yes, explain risk + mitigation: The default is intentionally more explicit and reviewable. The capability profile, relevant Windows permissions, and install review are visible before setup runs. Endpoint resolution is centralized and rejects invalid tunnel ports, preventing credentials from bypassing a configured SSH forward.Compatibility / Migration
Yes.No.No.Review Conversations
Rubber-duck review
Final rubber-duck/Hanselman reviews found no code blocker after fixes. Post-rebase dual review found no high-consensus issues; single-model feedback was fixed or validated. Final review additionally made custom capability states explicit, refreshed Windows permission status after returning from Settings, prevented an active onboard wizard from being replaced, and kept custom-port onboarding on the active record without bypassing SSH local forwards. Exact-head Windows E2E passed.