Skip to content

feat(onboarding): built-in engine upgrade announcement and onboarding/picker polish#251

Merged
quiet-node merged 20 commits into
mainfrom
claude/wonderful-bose-c7c5aa
Jun 24, 2026
Merged

feat(onboarding): built-in engine upgrade announcement and onboarding/picker polish#251
quiet-node merged 20 commits into
mainfrom
claude/wonderful-bose-c7c5aa

Conversation

@quiet-node

Copy link
Copy Markdown
Owner

Overview

A one-time "Local AI, now built in" announcement for users upgrading from a pre-0.15 (Ollama-only) install, so they discover the bundled engine and can adopt it or stay on Ollama. Brand-new installs never see it. Bundled with the announcement is a round of onboarding and model-picker fit-and-finish.

What's included

Upgrade announcement

  • Shown once to upgraders (active provider is Ollama-kind, onboarding already complete, not yet announced). "Try Built-in Engine" switches the active provider and continues to the starter picker; "Keep using Ollama" continues to the existing Ollama setup check. New users never see it.
  • Copy sells convenience and integration, never exclusivity (every raw capability is at parity with Ollama). "v0.15" links the GitHub release tag, and "Hugging Face" links huggingface.co.

Onboarding transitions

  • Every step transition is covered with an NSPanel alpha bracket so the window never flashes a mismatched size or position mid-swap; a generation-guarded backend timer guarantees the panel can never stay hidden.
  • Card widths are pinned (flexShrink: 0) so a card measured mid-resize can no longer lock the picker to a narrow width.

Starter picker

  • Tiers are presented as equal peers, with no "recommended" highlight.
  • The "use my existing Ollama" escape hatch is hidden for upgraders, who already made that choice on the announcement.

Ask-bar model picker

  • The empty state is download-aware: while a first model is downloading it acknowledges that instead of routing to Settings. The "Settings" link and a new "Browse models" pill deep-link to Settings, Models, Discover.
  • The filter row hides when there are no models, and the stray top border above the picker drawer is removed.

Settings

  • A new open_settings_window command plus a navigation event so the picker links land on the Discover model browser rather than the default Providers view.
  • A filter box on the Library pane.

How it works

The announcement routing is a pure decide_startup_route(stage, ax, sr, announced, pending) over a per-install latch. The post-permission stage is unreliable (a relaunch writes Intro, a TCC reset clobbers the stage), so the upgrader is detected at the one reliable moment (first 0.15 launch, before the permission flow runs) and the announcement then fires off that latch wherever the user lands. Transition flashes are hidden by driving the overlay panel to alpha 0 across each resize and content swap and fading it back once the new screen has settled, with the backend timer as the safety net.

Testing

100% frontend and backend coverage maintained, and bun run validate-build is clean. The onboarding transition timing (a frame-level effect that unit tests cannot observe) was verified in the running app.

Note

This branch merges the latest main, including #250 (cross-window download sync). The merge keeps main's pilled reasoning_always cell in the starter matrix over this branch's earlier plain-text treatment.

…soning cell

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…upgraders

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…the download strip

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
… flashes

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…ced highlight

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…dow flashes

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…ease tag

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…aders

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…tings

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…e.co

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…to Discover

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…-c7c5aa

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>

# Conflicts:
#	src/components/StarterMatrix.tsx
#	src/components/__tests__/StarterMatrix.test.tsx
… and update text in BuiltinAnnouncementStep

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…tid was dropped

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
…odel

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
@quiet-node quiet-node merged commit cfc0c62 into main Jun 24, 2026
3 checks passed
@quiet-node quiet-node deleted the claude/wonderful-bose-c7c5aa branch June 24, 2026 05:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant