Skip to content

fix(onboarding): surface unavailable-agent install cards in the Local CLI empty state (#4662) - #4733

Draft
maxmilian wants to merge 1 commit into
nexu-io:mainfrom
maxmilian:fix/4662-onboarding-install-cards
Draft

fix(onboarding): surface unavailable-agent install cards in the Local CLI empty state (#4662)#4733
maxmilian wants to merge 1 commit into
nexu-io:mainfrom
maxmilian:fix/4662-onboarding-install-cards

Conversation

@maxmilian

@maxmilian maxmilian commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Fixes #4662

Why

Onboarding β†’ Local coding agent is one of the first screens a new user hits. When no usable local CLI agent is detected, the empty state showed only a flat "No agents detected yet…" sentence + a Rescan button β€” a dead end at the exact moment the user most needs install guidance. Settings β†’ Local CLI already renders rich per-agent install cards (Install/Docs links + diagnostics), so onboarding was strictly worse than Settings for the same situation. This surfaces the same cards in onboarding so the empty state becomes actionable.

(Filed by QA during #4632; the maintainer confirmed it's current behavior β€” not a fixture artifact β€” and suggested the shared-component approach.)

What users will see

In onboarding β†’ Local coding agent, when no usable agent is detected, the empty state now shows the same unavailable-agent install cards as Settings: each supported CLI's icon + name + short description, Install / Docs links, and per-agent diagnostics (e.g. "… was not found on your PATH" with a fix action). The "No agents detected yet" sentence stays as the intro. Settings is unchanged.

Surface area

  • UI β€” onboarding Local CLI empty state now renders the unavailable-agent install-card grid

(No new deps, API/contract, or i18n keys β€” reuses the existing Settings card markup + translation keys.)

Screenshots

Before β€” bare empty state (reporter's capture in the issue):

before

After β€” onboarding empty state now surfaces the install cards:

pr4662-after

Bug fix verification

  • Test path: apps/web/tests/components/EntryShell.onboarding-unavailable-agents.test.tsx
  • Red on base / green on branch: yes. The primary test fails at expect(grid).toBeTruthy() (the .agent-grid-unavailable grid is absent) against the pre-fix bare empty state, and passes with the fix. A second test β€” wires the diagnostic Install fix-button to openExternalUrl β€” was also confirmed red without the onboarding onOpenFixUrl wiring, then green with it.
  • Also covered: AMR is excluded from the onboarding grid; the no-unavailable-agents case renders only the sentence (no grid).

Validation

  • Implementation: extracted the unavailable-agent install-card grid (previously inline in SettingsDialog.tsx) into a shared UnavailableAgentGrid component, reused in both Settings and onboarding (the maintainer-preferred "option 2"). Settings behavior is preserved byte-for-byte β€” the AMR-attribution / external-open handlers are passed in as props; onboarding excludes AMR (it has its own connect flow) and wires the diagnostic fix-buttons to openExternalUrl.
  • pnpm typecheck (all packages): clean (exit 0)
  • pnpm --filter @open-design/web test: 344 files / 3436 passed, 1 skipped, 0 failed

@maxmilian
maxmilian marked this pull request as ready for review June 24, 2026 07:55
@lefarcen lefarcen added size/L PR changes 300-700 lines risk/medium Medium risk: regular code changes type/bugfix Bug fix labels Jun 24, 2026
@lefarcen

Copy link
Copy Markdown
Contributor

Thanks @maxmilian β€” opened as a draft, so I'll hold off on the full review until you mark it 'Ready for review'. Ping me whenever it's ready.

β€” open-design team

@maxmilian

Copy link
Copy Markdown
Contributor Author

Thanks @lefarcen β€” heads-up that this is already out of draft: I flipped it to Ready for review at 07:55 UTC, just before your note landed (07:58), so it likely read the stale draft state. It's ready for the full review whenever you/the pool reviewer can pick it up. πŸ™

@lefarcen lefarcen added the needs-validation Runtime change detected; needs human or /explore agent validation. label Jun 24, 2026
@lefarcen

Copy link
Copy Markdown
Contributor

Thanks for the heads-up β€” I picked up the ready-for-review state now.

πŸ§ͺ This PR changes a user-facing onboarding flow, so it needs a manual QA pass before merge. Please hold off self-merging for now; we'll loop QA in once it's merge-ready.

@maxmilian

Copy link
Copy Markdown
Contributor Author

Hi @lefarcen β€” I noticed this got converted back to draft on the 27th. Just want to make sure I'm not blocking anything: is there a change you'd like me to make, or is the draft state just parking it out of the merge queue while it waits for manual QA? Happy to address whatever's needed β€” let me know and I'll turn it around. πŸ™

@lefarcen

Copy link
Copy Markdown
Contributor

Hey @maxmilian β€” no new change request from me right now. From what I can see, the draft state is just parking this while the remaining manual gates finish: design is already approved, QA has been queued, and I don't need anything else from you unless QA or the code reviewer turns up something specific.

So for now you're not blocking this one β€” if another reviewer asks for a follow-up, we'll call it out directly here.

@kokisanai

Copy link
Copy Markdown
Contributor

Hi @maxmilian!

This PR looks quiet for a bit, so I'm checking in to make sure it doesn't get stuck.

If you are waiting on review, feedback, or a specific unblock from the team, feel free to say so here. If faster coordination helps, you can also drop into our contributors channel in Discord:
https://discord.gg/3C6EWXbdQQ

We want to help move this forward instead of letting it stall.

@lefarcen
lefarcen requested a review from chaoxiaoche July 2, 2026 02:52
@lefarcen

lefarcen commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Quick status for @maxmilian: this isn't waiting on a code change from you right now.

The remaining blocker on my side is design sign-off for the onboarding UI change; once that's in, QA can take the manual pass. If either reviewer needs a follow-up, we'll call it out here.

@lefarcen
lefarcen requested review from PerishCode and xiaoche-hub and removed request for chaoxiaoche July 2, 2026 02:57
@lefarcen
lefarcen removed the request for review from xiaoche-hub July 9, 2026 03:45
@lefarcen lefarcen added the needs-design-review Awaiting design review (external UI change); cleared by the Odcrew App applying design-approved label Jul 9, 2026
… CLI empty state (nexu-io#4662)

When onboarding's Local CLI step detected zero usable agents, the empty
state showed only the `settings.noAgentsDetected` sentence + a Rescan
button β€” none of the install cards, Install/Docs links, or per-agent
diagnostics that Settings > Local CLI already provides.

Extract the unavailable-agent install-card grid out of SettingsDialog
into a shared `UnavailableAgentGrid` component and reuse it in both
SettingsDialog and the onboarding empty state, so the two views stay in
sync as agents are added. Settings behavior is unchanged (the component
takes the AMR-attribution / external-open handlers as props); onboarding
passes the unavailable agents it already has from the scan result.

Adds a falsifiable regression test for the onboarding empty-state render
path (cards + Install/Docs links + diagnostic row).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@maxmilian
maxmilian force-pushed the fix/4662-onboarding-install-cards branch from 51d9f9c to ca33936 Compare July 9, 2026 08:55
@maxmilian

Copy link
Copy Markdown
Contributor Author

Rebased onto the latest main β€” conflict-free again. Heads-up that the force-push dismissed the earlier approval; nothing about the change itself moved.

The conflict was textual: upstream's modelCapabilityTags import landed on the line directly above this branch's UnavailableAgentGrid import in EntryShell.tsx. Both are kept.

Since this branch also lifts ~82 lines out of SettingsDialog.tsx into the shared grid, and main has touched that file a dozen times since the branch point, a clean merge wasn't enough to trust. Re-verified after the rebase:

  • tsc -b --noEmit on apps/web β€” clean
  • EntryShell.onboarding-unavailable-agents.test.tsx β€” 4/4 pass
  • the full SettingsDialog.* suite β€” 219/219 pass

#4662 is still open and no equivalent fix has landed upstream, so this is still the change that closes it. Still parked on the manual QA pass as far as I know β€” no action needed from me unless QA or design turns something up.

@lefarcen

lefarcen commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Thanks for rebasing and for re-running the checks after the conflict.

From our side this still looks like the same onboarding fix on the new head, so there isn't anything new needed from you right now β€” it's still waiting on the remaining design sign-off before QA picks it up.

@maxmilian

Copy link
Copy Markdown
Contributor Author

Just keeping this alive so it doesn't get swept into auto-close β€” still nothing outstanding on my end. It's rebased onto latest main and green on the current head, and I'm happy to leave it parked as a draft until the design sign-off and QA pass land. Ping me if anything turns up and I'll turn it around quickly.

@lefarcen

Copy link
Copy Markdown
Contributor

Thanks for the keep-alive. I re-checked the current head and the changed paths are still the same onboarding install-card extraction in EntryShell, SettingsDialog, UnavailableAgentGrid, plus the onboarding regression test, so there isn't anything new needed from you right now.

This can stay parked as a draft while design sign-off lands; once that clears, QA is the next step. If either gate turns up something concrete, we'll call it out here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-design-review Awaiting design review (external UI change); cleared by the Odcrew App applying design-approved needs-validation Runtime change detected; needs human or /explore agent validation. risk/medium Medium risk: regular code changes size/L PR changes 300-700 lines type/bugfix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Onboarding Local CLI empty state lacks install guidance

3 participants