feat: add guided setup command - #753
Conversation
56fef68 to
3680877
Compare
|
Review resolution map — the 8 inline findings from the original review on the superseded #744 were migrated and resolved as follows (that PR was closed when this work was split into the #748–753 stack, so the threads were stranded there):
via LD Research 🤖 |
97c6a7d to
73cc570
Compare
73cc570 to
fa402b8
Compare
fa402b8 to
4799b3e
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 3 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 4799b3e. Configure here.
| if len(m.environments) == 0 { | ||
| return m.spinner.View() + " Loading environments..." | ||
| } | ||
| return m.envList.View() + "\n" + mutedStyle.Render("← back · esc quit") |
There was a problem hiding this comment.
Empty lists spin forever
Medium Severity
The project and environment screens treat an empty slice the same as “still loading,” so a successful fetch with no items leaves the wizard stuck on the spinner. Users can only quit; there is no empty-state message or way to continue.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 4799b3e. Configure here.
| switch msg := msg.(type) { | ||
| case tea.WindowSizeMsg: | ||
| m.width = msg.Width | ||
| m.height = msg.Height |
There was a problem hiding this comment.
Lists ignore terminal resize
Low Severity
WindowSizeMsg updates width/height but never calls SetSize on the project, environment, or SDK lists. If the size message arrives after those lists are built, or the terminal is resized, the lists keep stale or zero dimensions (height-4 can be negative when height is still 0).
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 4799b3e. Configure here.
ldcli setup walks a project through installing a LaunchDarkly SDK: detect the language and package manager, pick a project and environment, install the SDK with the project's own tool, create a flag, write or show initialization code, then poll until the SDK connects. Orchestration lives in internal/setup.Service so the wizard UI and the detect/install/init subcommands share one path. The wizard is split into model, update, view, and commands rather than one file. Environments gains List so the wizard can offer a choice of environments. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4799b3e to
eeb4ae7
Compare


Describe the solution you've provided
Final layer: the user-facing
setupcommand. Adds thecmd/setuppackage (detect,install,initsubcommands and the interactive wizard) over theinternal/setuplibrary, wires it into the root command, and deprecatesquickstartin favor ofsetup.The
ldcli setupwizard walks a user through detecting their project, installing the SDK, creating a first flag, injecting init code, and verifying an evaluation.Related issues
Top of the
setup-ldfeature stack. Stacked PR — base isffantl/setup-ld/4-verifier.Note: this branch's
cmd/root.goalso carries thePersistentPreRunchange from #748; that diff drops out once #748 merges to main and this stack is rebased.Requirements
Note
Medium Risk
The wizard runs package installs and may modify project files via injection, and creates flags via the API; auth-exempt flag behavior changed globally for setup/login paths, though covered by tests.
Overview
Introduces
ldcli setupas the primary onboarding path: an interactive Bubble Tea wizard (project/environment selection, local detection, SDK choice with override safeguards, plan preview, install, flag creation, code injection, optional SDK-active verification) backed by newinternal/setup.Serviceorchestration and injectable detector/installer onAPIClients.Also adds hidden subcommands
setup detect,setup install, andsetup initfor scripted/JSON workflows.quickstartremains registered but is hidden and deprecated in favor ofsetup; root usage text and registration tests were updated sosetup/quickstart/symbolsstay in sync.Auth handling for exempt commands (including
setup) no longer usesDisableFlagParsing; it clears the--access-tokenrequired annotation viaclearAccessTokenRequirement, so subcommand required flags still validate. The wizard fails fast with login guidance when no token is set.environments.ClientgainsListfor the wizard’s environment picker.Reviewed by Cursor Bugbot for commit eeb4ae7. Bugbot is set up for automated code reviews on this repo. Configure here.