Skip to content

chore: update install.sh URL to vellum.ai and clean up old user-hosted onboarding logic#16798

Merged
dvargasfuertes merged 3 commits into
mainfrom
devin/1773526313-cleanup-old-user-hosted-and-install-url
Mar 15, 2026
Merged

chore: update install.sh URL to vellum.ai and clean up old user-hosted onboarding logic#16798
dvargasfuertes merged 3 commits into
mainfrom
devin/1773526313-cleanup-old-user-hosted-and-install-url

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Mar 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Two changes following the merge of #16668:

1. Update install.sh domain from assistant.vellum.aivellum.ai
All references to the install script URL and the production VELLUM_PLATFORM_URL fallback now use vellum.ai. The dev-assistant.vellum.ai dev URLs are intentionally unchanged. Affected files: install.sh, hatch.ts, gcp.ts, AssistantCli.swift, APIKeyStepView+CloudFields.swift, fetch-qr-code.sh.

2. Remove old user-hosted onboarding flow in favor of the new inline approach
PR #16668 introduced inline cloud credential fields within APIKeyStepView for the managed_sign_in_enabled path. This PR promotes that inline approach to be the only path, removing the old separate-step CloudCredentialsStepView:

  • Deleted CloudCredentialsStepView.swift — replaced by inline fields in APIKeyStepView+CloudFields.swift
  • Deleted ModelSelectionStepView.swift — dead code, not referenced in any onboarding flow
  • Simplified OnboardingFlowView — removed step 2/3 branching for cloud credentials; flow is now always WakeUp → APIKey → ImproveExperience (3 steps) or WakeUp → APIKey+Hatch (2 steps for managed)
  • Updated APIKeyStepViewshowInlineCloudFields no longer gated behind managedSignInEnabled; primaryButtonDisabled now validates cloud fields inline; saveAndContinue simplified
  • Removed needsCloudCredentials from OnboardingState and all consumers
  • Removed unused propertiesuserHostedEnabled and managedSignInEnabled on OnboardingState (each view reads the flag directly from MacOSClientFeatureFlagManager.shared)
  • Bumped currentFlowVersion to 10 — users upgrading from the old 4-step layout get their persisted step reset to 0 instead of landing on a stale index with empty credentials
  • Added primaryButtonDisabled guard to onSubmit — pressing Enter on the API key field in the non-managed path now checks cloud credential validation

The user_hosted_enabled flag itself is preserved — it still controls which hosting modes appear in the selector via APIKeyStepView.availableHostingModes.

Review & Testing Checklist for Human

  • Build the macOS app in Xcode — all Swift/SwiftUI changes were developed without Xcode. Verify the project compiles after the two file deletions (CloudCredentialsStepView.swift, ModelSelectionStepView.swift) and the removal of needsCloudCredentials, userHostedEnabled, managedSignInEnabled from OnboardingState.
  • Test non-managed onboarding with user_hosted_enabled ON — select GCP/AWS/Custom hosting mode on the APIKey screen and confirm inline cloud fields appear and validate correctly before "Continue" is enabled. Previously this was a separate step; now it's inline. Also try pressing Enter with empty cloud fields to verify the onSubmit guard works.
  • Test non-managed onboarding with user_hosted_enabled OFF — confirm the flow is unchanged: just an API key field with no hosting selector, 3 steps total.
  • Test managed sign-in flow — confirm the managed flow still works identically (no changes to that path's behavior, only removed a guard that wasn't exercised in the managed path).
  • Verify vellum.ai/install.sh serves the install script — the production VELLUM_PLATFORM_URL fallback changed from assistant.vellum.ai to vellum.ai. This URL is also used by hatch.ts for remote startup scripts and gcp.ts for curl failure recovery.

Notes

  • The deleted CloudCredentialsStepView had QR code auto-detection from the XDG data path (~/.local/share/vellum/pairing-qr/initial.png). The new inline fields in APIKeyStepView+CloudFields.swift do not have this auto-detection. If this feature is desired, it would need to be ported separately.
  • The flow version bump means any user mid-onboarding on the old layout will restart from step 0. This is intentional to avoid stale state.

Link to Devin session: https://app.devin.ai/sessions/cbf1fb8ff4af492f8ee8f872304beea3
Requested by: @dvargas92495


Open with Devin

…d onboarding logic

- Update all install.sh references from assistant.vellum.ai to vellum.ai
- Update production VELLUM_PLATFORM_URL fallback to vellum.ai
- Remove CloudCredentialsStepView.swift (replaced by inline cloud fields in APIKeyStepView)
- Remove dead code ModelSelectionStepView.swift (unused in onboarding flow)
- Show inline cloud credential fields for all paths, not just managed sign-in
- Simplify onboarding flow to always be 3 steps (WakeUp -> APIKey -> ImproveExperience)
- Remove needsCloudCredentials property and related branching
- Update primaryButtonDisabled to validate cloud fields inline
- Simplify saveAndContinue to use showHostingSelector for cloud provider selection

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

devin-ai-integration[bot]

This comment was marked as resolved.

- Bump currentFlowVersion to 10 so users upgrading from old step layout
  get their persisted step reset instead of landing on a stale index
- Add primaryButtonDisabled guard to onSubmit handler to prevent Enter
  from bypassing cloud credential field validation

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f2d25ab94b

ℹ️ 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".

Comment on lines +404 to +405
saveModelToConfig("claude-opus-4-6")
state.advance()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Validate cloud credentials before advancing on submit

After moving cloud credentials inline, primaryButtonDisabled enforces those fields, but saveAndContinue() now advances as long as the API key is non-empty. The API-key SecureField still calls saveAndContinue() on submit, so pressing Enter in GCP/AWS/custom modes can skip required cloud credential input and continue to hatching with incomplete config. Add equivalent credential validation inside saveAndContinue() (or gate the submit path) so keyboard submit cannot bypass the disabled-button checks.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already addressed in 1373863 — the onSubmit handler now has guard !primaryButtonDisabled else { return } before calling saveAndContinue(), preventing Enter from bypassing cloud credential validation.

Comment on lines 106 to 107
case 2:
if state.needsCloudCredentials {
CloudCredentialsStepView(state: state)
} else {
ImproveExperienceStepView(state: state)
}
case 3:
ImproveExperienceStepView(state: state)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Bump flow version when reassigning step 2 content

Step 2 now goes straight to ImproveExperienceStepView, but persisted onboarding state is only reset when onboarding.flowVersion changes in OnboardingState.init. Because this commit changes the meaning of step 2 without bumping the flow version, users resumed from the old user-hosted flow at step 2 (previously CloudCredentials) will skip the new inline credential step and can finish onboarding with missing cloud settings. Increment the flow version (or remap legacy saved steps) to avoid restoring users into the wrong stage.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already addressed in 1373863currentFlowVersion was bumped from 9 to 10, so users with persisted state from the old layout will get reset to step 0.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 new potential issues.

View 4 additional findings in Devin Review.

Open in Devin Review

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 QR code auto-detection from XDG path was not ported from deleted CloudCredentialsStepView

The deleted CloudCredentialsStepView.swift had auto-detection logic (lines 76-86) that checked for a QR code PNG at $XDG_DATA_HOME/vellum/pairing-qr/initial.png and pre-populated state.customQRCodeImageData. This logic was NOT ported to the new inline APIKeyStepView or its cloud fields extension. The onAppear in APIKeyStepView.swift:130-158 only restores file names from existing state but doesn't auto-detect from the filesystem path.

This means users who ran fetch-qr-code.sh before opening the app will no longer have the QR code auto-populated — they'll need to manually select it via the file picker. This may be intentional (simplification) or an oversight.

(Refers to lines 130-158)

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — the QR code auto-detection from the XDG path was intentionally not ported. This is called out in the PR description under Notes. If the feature is desired in the inline flow, it can be added separately.

…OnboardingState

These properties are no longer referenced — each view reads the flags
directly from MacOSClientFeatureFlagManager.shared via local computed
properties.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@vellum-automation

Copy link
Copy Markdown
Contributor

📦 macOS DMG artifact for this PR is ready for download: Download vellum-assistant-pr-16798.dmg

@dvargasfuertes dvargasfuertes merged commit 1d604c3 into main Mar 15, 2026
6 checks passed
@dvargasfuertes dvargasfuertes deleted the devin/1773526313-cleanup-old-user-hosted-and-install-url branch March 15, 2026 00:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant