Skip to content

refactor(web): share one setup wizard and finish Antigravity setup from model pickers - #479

Open
rynfar wants to merge 6 commits into
pylonfrom
upstream/2026-09-11-wizards-docs
Open

refactor(web): share one setup wizard and finish Antigravity setup from model pickers#479
rynfar wants to merge 6 commits into
pylonfrom
upstream/2026-09-11-wizards-docs

Conversation

@rynfar

@rynfar rynfar commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

Setup flows used three different stepper implementations with repeated dialog chrome, and window capture brought back a second copy (ui/wizard-steps) beside the shared wizard from the welcome wizard port. Separately, #455 left out upstream's provider-setup link, and Pylon's Antigravity UI port (#440) left out the client pieces that make Antigravity usable from the picker: a provider that still needs setup could not be set up from the model picker, the internal default model marker could show up raw, the Settings refresh never reloaded account models, and every server restart showed a sign-in banner for an account that was still signed in.

What changed

Shared wizard components (#10832). Welcome, Add provider, Publish repository, Pylon Connect and SnapShot setup now use WizardPopup, WizardHeader, WizardSteps, WizardPanel and WizardFooter. The duplicate ui/wizard-steps.tsx is deleted; the Connect dialog's switch to WizardSteps from #8103 is carried into the shared stepper. Publish repository keeps its completed-step summaries.

Provider-setup link (#9348 client hunks, #9754 project defaults hook-up). When an enabled provider with integrated setup (Antigravity, or any provider whose server reports setup.canInstall/canAuthenticate) is not installed, signed out, or has no usable model:

  • the model picker shows the environment's status message with Open provider setup (or Set up when several need it) and keeps that instance visible in the sidebar;
  • the provider status banner above a thread shows the same link;
  • the composer shows Open provider settings in place of the picker when no provider resolves (for the requested instance, or the first provider with setup when the thread is not locked), and when the thread's bound instance is disabled.

Each opens Settings → Providers on the owning device with that instance selected, via /settings/providers?environmentId=…&instanceId=…. A cold-opened link waits for the device list; a device that is not in the loaded list shows "Device unavailable", while a saved device that is disconnected keeps its usual "Could not connect to this device" state. A removed instance says so instead of opening another account. Pickers wired: composer, Settings → Projects machine default and project default model, text generation model, source control writer model.

Status messages keep the environment's own error (for example a subscription error) and point integrated-setup providers to setup instead of "Sign in via the CLI".

Antigravity client completion (#9348, #9647).

  • The antigravity-default marker resolves to the account catalog's default model in the picker, the trigger label ("Choose model" until a catalog exists) and the composer's model state. Antigravity never borrows another account's model or a static default, ignores custom model settings, and keeps an unavailable saved model visible.
  • The composer blocks Antigravity sends with a reason when it is not installed, signed out, has no model chosen, has not loaded its catalog, or the saved model left a ready catalog. After a server restart (installed, auth not checked yet) sends proceed and session startup checks the saved sign-in.
  • The status banner stays hidden in that restart state, so it no longer invites a needless re-sign-in; install failures, errors and confirmed sign-outs still show.
  • Settings → Providers refresh and the mobile model refresh send refreshModels, so the server reloads account model catalogs.

Sources

Upstream SHA Upstream PR Outcome
3faeee49ac67dfd9534369f1e1c627c0356b75ac #10832 Adopted
d487dfbf46be344e818725be70ee04be2436bfb4 #9647 Adopted (banner guard and send-block change; its Antigravity doc wording lands with the docs restructure PR)
06336460c9988f29c71e839c4c9c840c4552e077 #9348 Client port completed here (setup link, route target, status messages, default-model marker, send blocks, refreshModels); server and earlier UI pieces came through the Antigravity ports
9f40b2f563c662b43887b11ff99c466fe871c1af #9754 Completes the project-defaults onOpenProviderSetup hunk excluded from #455

Pylon adaptations

  • Branding kept in the wizards: PylonMark and "Set up Pylon" in the welcome wizard header (as WizardHeader identity), Pylon Connect copy, Pylon SnapShots/capture helper copy and GNOME window-picker guidance.
  • Add provider keeps Pylon behavior: multiple-instance blocking (disabled drivers, Next/Add disabled with the reason) and Prime instance/ACP/maintenance guidance and home validation.
  • GitActionsControl keeps useThreadShell and the "Unable to open repository" toast.
  • Composer selection: upstream derives the setup target in resolveComposerProviderSelection; Pylon's routing lives in resolveComposerInstanceSelection (sessions, drains, continuation transitions). It now reports unavailableInstanceId (the locked instance first, a disabled session-bound instance, never the empty draft placeholder), and resolveComposerProviderSettingsAction decides when the settings button replaces the picker. Explicit unavailability (for example Prime on native Windows) keeps the picker so another provider can be chosen.
  • Send blocks join Pylon's existing send-disabled chain after bound-provider conflicts and attachment blocks, and do not apply while answering a pending question.
  • Picker and banner: Prime's single-model provider message, locked continuation compatibility checks, and the explicit-unavailability banner are unchanged.
  • Model selection: following #9348, an instance whose listed models are all hidden resolves to no model instead of silently using a hidden one; callers keep their existing fallbacks.
  • Mobile: only the refresh change. Upstream removed mobile provider setup in #9721 (already adopted in feat(mobile): add Android agent notifications and Material You theming #456).

Verification

  • vp test run: 706 web tests in 28 files and 2 mobile tests pass. Web files: AddProviderInstanceDialog (environment, logic), AddProviderInstanceWizardSteps, SnapShotSettings, SnapShotSetupDialog.logic, providerMultipleInstances, GitActionsControl.logic, ChatView.logic, ModelPickerContent (ts, tsx), ProviderModelPicker, ProviderStatusBanner, ProviderSettingsPanel (environment, logic), settingsSearch, composerInstanceSelection, ProjectSettingsPanel.logic, SettingsPanels.logic, modelSelection, composerDraftStore, ExpandedImagePreview, composerAttachmentFiles, SnapShotCoordinator, PreviewView, useHandleNewThread, attachmentUploadQueue, composerProviderState, composer-logic. Mobile: provider-catalog-refresh.
  • New tests: setup-aware status messages and banner link; the hidden restart banner; shouldOfferModelPickerSetup; the default-marker resolution and trigger label; Antigravity model state and custom-model isolation; send-block reasons; panel target and removed-instance states; unavailableInstanceId including a disabled bound instance; the settings action decision.
  • vp run -F @t3tools/web typecheck and vp run -F @t3tools/mobile typecheck: clean.
  • vp lint and vp fmt --check on every changed file: 0 warnings, 0 errors, formatted.
  • Conflict resolution check: each wizard caller differs from upstream's post-#10832 file only by Pylon's pre-existing divergence.
  • No local client pass was run; the orchestrator does one integrated pass. Upstream evidence: #10832 before, after, step navigation recording; setup link and Antigravity picker UI in #9348.

User docs for the setup link and model refresh land with the docs restructure PR (#482), which rewrites the Antigravity guide and merges after this PR.

Ported by Claude Opus 5 in Claude Code.

@vercel

vercel Bot commented Sep 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
pylon-marketing Ready Ready Preview Sep 11, 2026 9:03am UTC

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Sep 11, 2026
@github-actions

github-actions Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 14.1 KiB 14.1 KiB +16 B (+0.1%) 15.1 KiB
Codex Thread snapshot wire 7.2 KiB 7.2 KiB +6 B (+0.1%) 7.3 KiB
Codex Live turn WebSocket wire 6.9 KiB 6.9 KiB +10 B (+0.1%) 7.8 KiB
Codex Live turn WebSocket decoded 58.8 KiB 58.8 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 10 10 0 (0.0%) 21
Claude Total thread wire 14.1 KiB 13.9 KiB −157 B (−1.1%) 15.1 KiB
Claude Thread snapshot wire 7.2 KiB 7.2 KiB +4 B (+0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.9 KiB 6.7 KiB −161 B (−2.3%) 7.8 KiB
Claude Live turn WebSocket decoded 59.7 KiB 58.8 KiB −928 B (−1.5%) 66.4 KiB
Claude Live turn messages 10 8 −2 (−20.0%) 21

Baseline: 51545d7 · PR result: 48bcc07 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 115.6 KiB
  • Claude decoded thread snapshot: 116.3 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

juliusmarminge and others added 6 commits September 11, 2026 02:51
Welcome, Add provider, Publish repository, Pylon Connect and SnapShot
setup now share WizardPopup, WizardHeader, WizardSteps, WizardPanel and
WizardFooter. The duplicate ui/wizard-steps stepper from window capture
is removed.

Pylon adaptations kept: the Pylon mark and "Set up Pylon" title in the
welcome wizard, Pylon Connect copy, Add provider's multiple-instance
blocking and Prime guidance, Pylon SnapShots copy, useThreadShell and the
repository open-link error toast in GitActionsControl.

Adopted from 3faeee49ac67dfd9534369f1e1c627c0356b75ac (#10832)
…nner

A provider that needs setup (Antigravity, or any provider whose server
reports it can install or sign in) now offers "Open provider setup" in the
model picker, the provider status banner, and the composer's no-provider
button. The link opens Settings -> Providers on that device with the
instance selected, and says so when the device or instance is gone.

Pickers wired: composer, Settings -> Projects machine and project default
model, text generation model and source control writer model. Pylon keeps
its composer instance selection (it now reports the unavailable requested
instance), Prime's single-model message, locked continuation checks and
the explicit-unavailability banner.

Adopted from 06336460c9988f29c71e839c4c9c840c4552e077 (#9348) (provider setup link, route target and status messages only)
Adopted from 9f40b2f563c662b43887b11ff99c466fe871c1af (#9754) (project defaults picker hook-up)
…ind provider setup

Review follow-ups for the provider-setup link:

- The status banner stays hidden while Antigravity is installed but its
  saved Google sign-in is not checked yet (warning, auth unknown after a
  server restart), so it no longer invites a needless re-sign-in. Sends are
  allowed in that state; session startup checks the saved credentials.
- The model picker, trigger and composer model state resolve the internal
  antigravity-default marker to the account catalog's default model, never
  borrow another account's or a static model, and keep an unavailable saved
  Antigravity model visible. The composer blocks sends with the reason when
  Antigravity is not installed, signed out, has no model chosen, has not
  loaded its catalog, or the saved model left a ready catalog.
- Settings -> Providers refresh and the mobile model refresh ask the server
  to reload account model catalogs (refreshModels).
- A thread bound to a disabled instance now reports that instance and shows
  Open provider settings in place of the picker. Explicit unavailability
  keeps the picker so another provider can be chosen.
- A cold-opened provider setup link waits for the device list before saying
  the device is unavailable.

Adopted from 06336460c9988f29c71e839c4c9c840c4552e077 (#9348) (remaining web and mobile client pieces)
Adopted from d487dfbf46be344e818725be70ee04be2436bfb4 (#9647)
@rynfar
rynfar force-pushed the upstream/2026-09-11-wizards-docs branch from 6e5465b to 48bcc07 Compare September 11, 2026 09:03
@rynfar rynfar changed the title refactor(web): share one setup wizard and open provider setup from model pickers refactor(web): share one setup wizard and finish Antigravity setup from model pickers Sep 11, 2026
rynfar added a commit that referenced this pull request Sep 11, 2026
Keep #481's quit shortcut modes, thread-menu project settings, and the
environment-ID recovery file in the rewritten pages. Document the RPC
session's shared server-config stream against the new base, restore the
staged Electron package name, sidebar order and filter rules, POSIX path
case sensitivity, and the migrate-dev-db source flag, and describe #479's
Antigravity restart, refresh, and send-block behavior. Point AGENTS.md at
Pylon's hosted origin and correct the ledger row.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants