M2: macOS — Consolidate Connect into One Flow#7403
Conversation
Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
This refactor removes the only UI for setting iosPairingTokenOverride (the old override block in SettingsAdvancedTab) but keeps token-override resolution in production code (SettingsStore.resolvedIosBearerToken via PairingConfiguration.resolvedBearerToken). In the new flow, this section exposes only a gateway URL override, so users who pair against gateways requiring a custom bearer token can no longer configure or rotate that token from the app, which can leave QR pairing unusable unless they manually edit defaults.
ℹ️ About Codex in GitHub
Codex has been enabled to automatically 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 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
Addressed in #7429 |
Brings apps/web/src/domains/settings/ to feature parity with the platform repo's current end state for the billing, storage, and compute settings surfaces. Covers four "Web App Repo Move" drift issues that accumulated after settings paths were frozen on May 20: - LUM-1683: Billing UI reorder + referral stats (platform #7376) - LUM-1682: Pro billing machine resize + storage card + tier selection (platform #7310, #7312, #7323, #7338) - LUM-1761: Noa's billing UI polish (platform #7462, #7473, #7492) - LUM-1760: Shaarson's Pro storage/compute UX (platform #7389, #7390, #7392, #7395, #7399, #7400, #7403, #7404) The port targets feature parity, not 1:1 file translation: - Routing translated from platform's useAppNavigate / next/navigation to react-router (useNavigate, useSearchParams) per target conventions. - Feature flag reads translated from useAppFeatureFlags() context to the target's useFeatureFlagStore.use.X() Zustand pattern. - Component imports redirected to @vellum/design-library and @/generated/api. - Shared hooks/utils that already exist in the target (use-billing-portal-session, payment-method-brand) wired up rather than recreated. - Daemon-aware Assistant type from @/assistant/api.js used in place of platform's @/lib/assistants/api. New files: - assistant-storage-card.tsx (per-assistant Storage card) - compute-upgrade-card.tsx (rewritten with full machine-size range) - plan-feature-list.tsx (inline + checklist variants for AdjustPlanModal and PlanCard) - resize-errors.ts (extractResizeError envelope for friendly resize failure messaging) - tier-picker.tsx (Dropdown-driven tier selection for Pro upgrade) - lib/billing/machine-sizes.ts (TIER_TO_SIZES, SIZE_LABEL, SIZE_DESCRIPTION, machineSizeRank shared util) Deletions (functionality moved to general settings, per-assistant): - storage-card.tsx - machine-size-card.tsx - machine-size-modal.tsx Other changes: - onboarding-page.tsx: storage step replaces pvc-readiness polling; failures count now gates wizard progression. - billing-page.tsx: drops storage/machine card mounts; ReferralPanel renders unconditionally. - general-page.tsx: mounts AssistantStorageCard alongside ComputeUpgradeCard. - adjust-plan-modal.tsx: tier-picker + plan-feature-list, dynamic LOST_FEATURES via prop, copy and layout polish. - referralCodes and referralCodesAdmin flags removed from the store and dev panel (no longer gated upstream). - preferences-menu.tsx: drops referralCodes gating so Earn Credits always renders. - design-library dropdown.tsx: DropdownOption.disabled support + findEnabledIndex helper for keyboard/click guards (needed by tier-picker). Platform PR #7476 (unify per-assistant cards into a single ResizeCard) is not yet merged in platform and is therefore not included; the two-card layout is the current end state.
* chore(web): refresh platform.yaml for billing/storage/compute drift port Pulls the current platform OpenAPI bundle so the regenerated client picks up assistantsResize, AssistantResizeRequestRequest, provisioned_storage_gib, selected_storage_gib, and the onboarding/storage endpoint. Prerequisite for porting the Pro storage/compute UX cluster (LUM-1760) and selected storage state surfacing (LUM-1682 #7312) from platform to vellum-assistant. Refs LUM-1683, LUM-1682, LUM-1761, LUM-1760. * feat(web/settings): port billing/storage/compute drift from platform Brings apps/web/src/domains/settings/ to feature parity with the platform repo's current end state for the billing, storage, and compute settings surfaces. Covers four "Web App Repo Move" drift issues that accumulated after settings paths were frozen on May 20: - LUM-1683: Billing UI reorder + referral stats (platform #7376) - LUM-1682: Pro billing machine resize + storage card + tier selection (platform #7310, #7312, #7323, #7338) - LUM-1761: Noa's billing UI polish (platform #7462, #7473, #7492) - LUM-1760: Shaarson's Pro storage/compute UX (platform #7389, #7390, #7392, #7395, #7399, #7400, #7403, #7404) The port targets feature parity, not 1:1 file translation: - Routing translated from platform's useAppNavigate / next/navigation to react-router (useNavigate, useSearchParams) per target conventions. - Feature flag reads translated from useAppFeatureFlags() context to the target's useFeatureFlagStore.use.X() Zustand pattern. - Component imports redirected to @vellum/design-library and @/generated/api. - Shared hooks/utils that already exist in the target (use-billing-portal-session, payment-method-brand) wired up rather than recreated. - Daemon-aware Assistant type from @/assistant/api.js used in place of platform's @/lib/assistants/api. New files: - assistant-storage-card.tsx (per-assistant Storage card) - compute-upgrade-card.tsx (rewritten with full machine-size range) - plan-feature-list.tsx (inline + checklist variants for AdjustPlanModal and PlanCard) - resize-errors.ts (extractResizeError envelope for friendly resize failure messaging) - tier-picker.tsx (Dropdown-driven tier selection for Pro upgrade) - lib/billing/machine-sizes.ts (TIER_TO_SIZES, SIZE_LABEL, SIZE_DESCRIPTION, machineSizeRank shared util) Deletions (functionality moved to general settings, per-assistant): - storage-card.tsx - machine-size-card.tsx - machine-size-modal.tsx Other changes: - onboarding-page.tsx: storage step replaces pvc-readiness polling; failures count now gates wizard progression. - billing-page.tsx: drops storage/machine card mounts; ReferralPanel renders unconditionally. - general-page.tsx: mounts AssistantStorageCard alongside ComputeUpgradeCard. - adjust-plan-modal.tsx: tier-picker + plan-feature-list, dynamic LOST_FEATURES via prop, copy and layout polish. - referralCodes and referralCodesAdmin flags removed from the store and dev panel (no longer gated upstream). - preferences-menu.tsx: drops referralCodes gating so Earn Credits always renders. - design-library dropdown.tsx: DropdownOption.disabled support + findEnabledIndex helper for keyboard/click guards (needed by tier-picker). Platform PR #7476 (unify per-assistant cards into a single ResizeCard) is not yet merged in platform and is therefore not included; the two-card layout is the current end state. * fix(web/settings): drop stale eslint-disable for react-hooks/exhaustive-deps The directive was ported from platform, but apps/web's eslint config does not enable react-hooks/exhaustive-deps, so the unknown rule trips the report-unused-disable check. The useMemo dependency array still keys on clientSecret intentionally to retrigger appearance resolution on each new SetupIntent. --------- Co-authored-by: Claude <noreply@anthropic.com>
Summary
Consolidates iOS pairing settings into the Connect tab, removing the split between Connect and Advanced tabs.
Implementation
onNavigateToConnectparameter from SettingsAdvancedTabKey Technical Choices
Closes #7392
🤖 Generated with Claude Code