feat: [ENG-2465] add web UI Configuration page + promote ByteRover provider onboarding#545
feat: [ENG-2465] add web UI Configuration page + promote ByteRover provider onboarding#545
Conversation
|
Claude finished @wzlng's task in 4m 34s —— View job PR Review — feat: [ENG-2354] Configuration page + ByteRover provider onboarding
SummaryThis is a solid, well-scoped PR. The Configuration page design is clean with good UX patterns (skeleton loading, deep-link anchors, inline validation, "Use account" CTA). The security thinking on the Overall score: 4 / 5 Issues requiring attention🔴 Bug — 🟠 Security — 🟡 Unhandled rejection — Smaller issues
Highlights
|
…ovider onboarding Configuration page - Git identity panel: get/set user.name & user.email via the daemon, one-click seed from the signed-in ByteRover account. - Remote panel: single `origin`, HTTPS-only validation, replace preview, Initialize VC CTA when git is uninitialized, "Find in ByteRover" link. - Shared SettingsSection + CalloutRow primitives; `bg-card` alignment with ConnectorsPanel; skeleton loading rows. Provider onboarding - ByteRover pinned to top of the selector with an amber "Native" pill. - OAuth popup opens on row click (drops the redundant login-prompt confirmation); 800ms minimum visible delay before popup navigates. - ProviderFlowDialog mountable globally via provider-store so any surface can open it (task error CTA, etc.). Error routing - toastVcError maps VC config gaps to a toast action that deep-links to /configuration#identity or #remotes. - Task ErrorSection shows "Configure provider" for provider-class errors; checks llmservice:error broadcast (task:error isn't always structured). - formatError overrides aligned with Configuration page copy. Header - Responsive: Local badge hides <lg, HelpMenu/BranchDropdown/version collapse at narrower sizes, provider label truncates by breakpoint. - StatusDot primitive (tone + pulsing) — pulsing amber when unconfigured, green corner dot on the Plug when active. - `brv vc init` invalidates the remote query so panel auto-refreshes. Other - ProjectDropdown: "Open local folder" opens OS file manager via new locations:reveal transport event (registry-guarded, no shell interp). - Global toast position = top-center; removed per-call overrides. - CSP: allow img-src https: for OAuth provider avatars. - BRV_GIT_REMOTE_BASE_URL surfaced via config:getEnvironment for the Remote URL input placeholder. Tests - Pure util tests: detect-git-url-type, is-valid-email, validate-remote-url, is-provider-task-error, reveal-command.
- Deep-link toast CTAs to /configuration#identity and #remotes so VC errors land on the exact panel the user needs to fix, not the page top. - Split http:// detection from https:// in detectGitUrlType and surface a dedicated "Plain HTTP isn't supported" validator message. - Extract the duplicated `hasCode` type guard from get-vc-config and get-vc-remote into src/webui/lib/transport-error.ts. - Drop the duplicate sm/md/lg max-width on ConnectorsPanel — the parent wrapper in ConfigurationPage already applies the same constraints, so the self-constraint was a drift risk. - Fix LoginPromptStep's retry(): the start effect's deps didn't include anything that changed on retry, so the UI got stuck on "Preparing sign-in…" forever. Added a retryCount trigger to the deps. - Comment the deliberately broad `img-src https:` CSP directive: OAuth provider avatar CDNs can't be enumerated ahead of time. - Unit-test toastVcError's CTA wiring (CONFIG_KEY_NOT_SET, NO_REMOTE, unknown-code fall-through) and the new http-vs-https url validation paths.
|
Claude finished @wzlng's task in 2m 3s —— View job Re-review — post-cleanup commit (
|
| Issue | Resolution |
|---|---|
hasCode type guard duplicated |
Extracted to src/webui/lib/transport-error.ts; both get-vc-config.ts and get-vc-remote.ts now import from it ✅ |
Missing test for toast-vc-error.ts |
test/unit/webui/lib/toast-vc-error.test.ts added; covers CONFIG_KEY_NOT_SET CTA, NO_REMOTE CTA, and unknown-code plain toast ✅ |
document.querySelector(hash) selector risk |
Resolved by removing hash-based scroll entirely from configuration-page.tsx — the #identity/#remotes/#connectors anchor sections and the useEffect were dropped ✅ |
ConnectorsPanel max-width duplication |
Removed sm:max-w-lg md:max-w-xl lg:max-w-2xl from the panel; it now fills its parent with w-full ✅ |
img-src https: needs a comment |
Comment added in webui-middleware.ts lines 38–42 explaining the open-ended provider CDN rationale ✅ |
One trade-off to note
Dropping the hash anchors simplifies the code but loses the scroll-to-section behaviour the PR description advertised. Toast CTAs (Set identity, Set remote) now navigate to /configuration without scrolling to the relevant panel. With three short panels on a single page this is probably fine, but worth a deliberate decision rather than a side-effect of the CSS selector cleanup.
Updated overall score: 4.5 / 5 — the one remaining issue (connectByteRover fire-and-forget) is low-severity. All structural and security concerns are resolved.
- Replace the "Not set" callout (foreground title + dashed alert chrome) with a calmer account-led row: avatar + suggested identity, soft "from your ByteRover account — optional, used for commit attribution" sub-line, and ghost Edit / primary Apply actions. Fixes user feedback that the previous copy read as required-field-error. - Drop the unused CalloutRow import from this file (kept for other panels). - locations-handler: pass `windowsHide: true` to the reveal-folder spawn so the brief CMD flash is suppressed on Windows; minor format-only line-wrap on the REVEAL onRequest registration.
|
Claude finished @wzlng's task in 1m 39s —— View job Re-review — post-synchronize commit (
|
| Issue | Status |
|---|---|
🔴 windowsHide on spawn |
✅ Fixed in d449491 |
🟡 connectByteRover fire-and-forget |
⏳ Still open (low severity) |
| 🟡 Email shown twice when no display name | New in d449491 |
Nitpick: initials() on email address |
New in d449491 |
Updated overall score: 4.5 / 5 — the blocking issue is resolved. Two low-severity items remain; neither is a merge blocker.
Configuration page
origin, HTTPS-only validation, replace preview, Initialize VC CTA when git is uninitialized, "Find in ByteRover" link.bg-cardalignment with ConnectorsPanel; skeleton loading rows.Provider onboarding
Error routing
Header
brv vc initinvalidates the remote query so panel auto-refreshes.Other
Tests