Repository navigation
SN-5: Settings → AI says when Gecko Suite holds the keys, and links to it - #217
Merged
Merged
Conversation
GET /settings/ai-backend tells the browser the mode and the suite's public address (SUITE_PUBLIC_URL, else SUITE_BASE_URL). Each Settings → AI tab shows a note in suite mode saying what moved, what still applies, and linking to the suite's page for it. Also fixes the UI gating on a local fal.ai key: the speech and image settings now report via_suite, so read-aloud, dictation and the image form are not hidden when the suite holds the key and none was ever saved in Notes. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1geD2ELWgL2sDpxYbx3Aw
davior
marked this pull request as ready for review
November 4, 2026 10:13
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the loop on SN-1/SN-2: with
AI_BACKEND=suite, Settings → AI now tells people what moved to Gecko Suite, what still applies on the page, and links to the suite's page for it. Nothing changes inlocalmode.GET /api/settings/ai-backendreturns{backend, suite_url}.suite_urlis the address a browser can open (SUITE_PUBLIC_URL, elseSUITE_BASE_URL), becauseSUITE_BASE_URLmay be an internal address in some deployments. It is null inlocal.utils/suiteNotice.tsand is written against what the backend really does, including what still runs on Notes' own keys (live transcription and voice mode use the Deepgram key saved here; the fal admin key still feeds the Images usage readouts; prompts and the summary prompt are still managed here).via_suite; the frontend treats that as "usable" (falKeyConfigured, the image modal, the "no key" hint). The literalhas_fal_key/has_api_keyare unchanged.stores/aiBackend.ts(read once per session, reset on sign-out; a failed read means "local", so a page never claims the suite holds the keys because of an error).Not done: the controls on the Speech tab (engine choice, fallback text) are still shown, though the note says they no longer apply; I did not grey them out. A provider added in Notes still has to be added in the suite too (the note says so); making that one step is a later piece.
Test plan
pytest -qinbackend/: 1383 passed, 1 skipped (Python 3.13 locally; CI is 3.11). New: the endpoint (public address wins over the internal one, trailing slash dropped, fallback, null in local) andvia_suiteon both settings payloads.npm test221 passed,npm run build(typechecks) passes. New tests for the wording/link module and the notice component (nothing in local mode or before the mode is known, links open in a new tab withrel="noopener noreferrer").Deployment
Nothing changes unless
AI_BACKEND=suiteis set.SUITE_PUBLIC_URL(in.env.exampleand compose). Set it only ifSUITE_BASE_URLis an internal address; otherwise leave it blank.docker compose up --build -d), then hard-refresh. Migrations, Caddy: none.AI_BACKEND=local, or redeploy the previous commit.Generated by Claude Code