fix: Improve skills setup panel empty state and refresh scoping#1983
Conversation
…s are detected When a project has no agent skill folders, the disabled Install Skills button looked stuck. Hide it and show muted guidance so users know to use Install to specific target instead. Co-authored-by: Cursor <cursoragent@cursor.com>
The refresh control lived next to the Target dropdown inside the foldout, so it was easy to miss. Put it on the Skills / Step 2 heading so reloading skill state is discoverable without expanding Install to specific target. Co-authored-by: Cursor <cursoragent@cursor.com>
CLI refresh reused IsChecking for the skills panel, so pressing the CLI reload control briefly showed Checking... on unrelated skills UI. Split skill-state checking into IsSkillStateChecking so CLI refresh no longer drives the shared skills panel. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Visual check screenshots (Settings / Setup Wizard). Refresh control is on the heading row in both windows. |
📝 WalkthroughWalkthroughThe skills UI separates skill-state checking from CLI checking, adds refresh controls and an empty-target message, preserves foldout behavior across updates, and removes cursor and Gemini skill targets while renaming the agents target to Common. ChangesSkills state and panel behavior
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant SkillsPresenter as UnityCliLoopSettingsSkillsPresenter
participant SetupPresenter as UnityCliLoopSettingsCliSetupPresenter
participant CliSection as CliSetupSection
participant SkillsView as SkillsSetupPanelView
SkillsPresenter->>SetupPresenter: provide scan result and installable targets
SetupPresenter->>CliSection: provide CLI and skill checking states
CliSection->>SkillsView: update skills status
SkillsView->>SkillsView: show checking, bulk install, or no-target message
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Title margins inside the heading row were included in flex centering, so the label sat above the refresh control. Move those margins to the row and clear them on the nested title so both windows align the text and button on the same vertical center. Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Packages/src/Editor/Presentation/Setup/SetupWizardWindow.uss (1)
79-89: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winMove title spacing to the new flex row.
.setup-step__titlestill hasmargin-bottom: 10px, but it is now a child of analign-items: centerrow. The refresh button is therefore centered against the label’s extra bottom margin instead of the visible title. Set the row’s bottom margin to10pxand reset the nested title margin to0.🤖 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 `@Packages/src/Editor/Presentation/Setup/SetupWizardWindow.uss` around lines 79 - 89, Update the .setup-step__title-row styles to add a 10px bottom margin, and reset .setup-step__title margin-bottom to 0 so the flex row controls spacing without affecting title/button alignment.
🤖 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 `@Packages/src/Editor/Presentation/Shared/SkillsSetupPanelView.cs`:
- Around line 154-157: Update the _skillsNoTargetsMessage visibility condition
in CliSetupSection.UpdateSkillsSubsection to also require canManageSkills, while
preserving the existing !isCheckingSkills and empty installableTargets checks.
---
Outside diff comments:
In `@Packages/src/Editor/Presentation/Setup/SetupWizardWindow.uss`:
- Around line 79-89: Update the .setup-step__title-row styles to add a 10px
bottom margin, and reset .setup-step__title margin-bottom to 0 so the flex row
controls spacing without affecting title/button alignment.
🪄 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: Pro Plus
Run ID: e8a8359a-e6bc-40cf-b09f-be27d1386c79
📒 Files selected for processing (13)
Assets/Tests/Editor/CliSetupSectionTests.csAssets/Tests/Editor/SkillsTargetSelectionResolverTests.csPackages/src/Editor/Presentation/Setup/SetupWizardWindow.csPackages/src/Editor/Presentation/Setup/SetupWizardWindow.ussPackages/src/Editor/Presentation/Setup/SetupWizardWindow.uxmlPackages/src/Editor/Presentation/Shared/SkillsSetupPanel.ussPackages/src/Editor/Presentation/Shared/SkillsSetupPanel.uxmlPackages/src/Editor/Presentation/Shared/SkillsSetupPanelView.csPackages/src/Editor/Presentation/UIToolkit/Components/CliSetupSection.csPackages/src/Editor/Presentation/UIToolkit/UnityCliLoopSettingsWindow.ussPackages/src/Editor/Presentation/UIToolkit/UnityCliLoopSettingsWindow.uxmlPackages/src/Editor/Presentation/UnityCliLoopSettingsCliSetupPresenter.csPackages/src/Editor/Presentation/UnityCliLoopSettingsWindowViewData.cs
CodeRabbit follow-up
|
Co-authored-by: Cursor <cursoragent@cursor.com>
…re missing Keep Install to specific target collapsed when every detected target is already installed or only outdated, and expand it when something still needs install. Skip expansion while states are still Checking so the resolved update can decide. Co-authored-by: Cursor <cursoragent@cursor.com>
…window Before the first skill-target scan result arrives, Settings briefly treated an empty target list as resolved. That opened Install to specific target via the empty-count rule and flashed the no-targets message. Keep skill UI in checking until a real scan result is available. Co-authored-by: Cursor <cursoragent@cursor.com>
…ill state changes Open-only foldout updates left Install to specific target expanded after a reload turned missing targets into installed ones. Apply the foldout default only when that default changes so resolved installs can collapse it again while still preserving deliberate user toggles. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Gemini CLI ended in 2026-06 when it moved to Antigravity CLI, and Cursor is no longer needed. Antigravity's default skill location is covered by Common (.agents), so the dropdown keeps only Claude, Codex, and Common. Existing .agent/--antigravity detection and Go flags are left unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Packages/src/Editor/Presentation/UnityCliLoopSettingsSkillsPresenter.cs (1)
153-157: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDo not mark an unscanned target list as resolved.
This branch clears
_installableTargetswithout calling a target detector, then sets_hasSkillTargetScanResult = true. Downstream, that can make the empty list appear resolved and show “no agent skill folders detected” even when folders exist. Keep visibility tied to an actual folder scan: scan independently of CLI installation, or leave the flag unset until a real result is available.🤖 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 `@Packages/src/Editor/Presentation/UnityCliLoopSettingsSkillsPresenter.cs` around lines 153 - 157, The CLI-not-installed branch in the UnityCliLoopSettingsSkillsPresenter flow must not mark target scanning as complete when no detector has run. Update the logic around _installableTargets and _hasSkillTargetScanResult to perform the folder scan independently of CLI installation, or leave _hasSkillTargetScanResult unset until an actual scan result exists; preserve the empty-list assignment only if it represents a real scan.
🤖 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.
Outside diff comments:
In `@Packages/src/Editor/Presentation/UnityCliLoopSettingsSkillsPresenter.cs`:
- Around line 153-157: The CLI-not-installed branch in the
UnityCliLoopSettingsSkillsPresenter flow must not mark target scanning as
complete when no detector has run. Update the logic around _installableTargets
and _hasSkillTargetScanResult to perform the folder scan independently of CLI
installation, or leave _hasSkillTargetScanResult unset until an actual scan
result exists; preserve the empty-list assignment only if it represents a real
scan.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: ef21b89c-2f2e-49ca-9350-e06b22701581
📒 Files selected for processing (15)
Assets/Tests/Editor/CliSetupSectionTests.csAssets/Tests/Editor/SkillsSetupPanelViewTests.csAssets/Tests/Editor/SkillsTargetSelectionResolverTests.csAssets/Tests/Editor/UnityCliLoopSettingsWindowRefreshPolicyTests.csPackages/src/Editor/Infrastructure/SkillSetup/SkillTargetDetector.csPackages/src/Editor/Presentation/Setup/SetupWizardWindow.ussPackages/src/Editor/Presentation/Shared/SkillsSetupPanelView.csPackages/src/Editor/Presentation/SkillsTargetSelectionResolver.csPackages/src/Editor/Presentation/UnityCliLoopSettingsCliSetupPresenter.csPackages/src/Editor/Presentation/UnityCliLoopSettingsSkillsPresenter.csPackages/src/Editor/Presentation/UnityCliLoopSettingsWindowEventHandler.csPackages/src/Editor/Presentation/UnityCliLoopSettingsWindowState.csPackages/src/Editor/Presentation/UnityCliLoopSettingsWindowViewData.cscli/dispatcher/internal/dispatcher/skills.gocli/dispatcher/internal/dispatcher/skills_test.go
💤 Files with no reviewable changes (1)
- Packages/src/Editor/Presentation/UnityCliLoopSettingsWindowViewData.cs
🚧 Files skipped from review as they are similar to previous changes (3)
- Packages/src/Editor/Presentation/Setup/SetupWizardWindow.uss
- Packages/src/Editor/Presentation/UnityCliLoopSettingsCliSetupPresenter.cs
- Assets/Tests/Editor/CliSetupSectionTests.cs
Summary
.agentslocation).User Impact
.claude/.codex/ similar folders no longer look stuck on a disabled Install Skills button.Changes
SkillsSetupPanelView.refresh-skills-state-buttonout of the Target row into each window's heading row; pass the button intoSkillsSetupPanelView.CliSetupData.IsSkillStateCheckingfromIsCheckingso CLI refresh and skill-state refresh drive separate UI paths.Verification
uloop compile→ ErrorCount 0 / WarningCount 0CliSetupSectionTests|SkillsSetupPanelViewTests|SetupWizardWindowTests|StaticFacadeStateGuardTests|SkillsTargetSelectionResolverTests) → 178 passedScreenshots
Local captures used for visual check (not committed):
/tmp/skills-panel-screenshots/Unity CLI Loop_20260724_223955_947.png/tmp/skills-panel-screenshots/Unity CLI Loop Setup_20260724_224035_989.png