Brooklyn Nicholson
dd5e97bd7f
feat(desktop): make xAI Grok a first-class OAuth provider in the launcher
...
xAI Grok was only reachable via the "I have an API key" form. xAI's
OAuth (SuperGrok / Premium+) flow already exists in the backend
(`hermes auth add xai-oauth`) but was never surfaced in the desktop
onboarding launcher.
Add a loopback PKCE flow: the local backend binds the 127.0.0.1
callback listener, the client opens the browser, and the redirect lands
back automatically — no code to copy/paste. Reuses the existing xAI
OAuth helpers (discovery, callback server, token exchange, persist)
rather than duplicating them.
- web_server: catalog entry (flow: loopback) + status dispatch +
_start_xai_loopback_flow + background worker + route branch
- desktop: 'loopback' flow type, awaiting_browser status, xAI Grok card
(PROVIDER_DISPLAY / FLOW_SUBTITLES / FlowPanel waiting render)
- tests: catalog listing, start authorize-url, worker persist, state
mismatch rejection
2026-06-02 17:34:00 -05:00
..
2026-05-28 22:26:25 -07:00
2026-05-18 10:14:38 -07:00
2026-06-02 20:23:09 +00:00
2026-06-02 11:30:50 -04:00
2026-06-02 00:29:44 -07:00
2026-05-29 12:17:12 +10:00
2026-05-28 22:26:25 -07:00
2026-06-02 12:37:40 -04:00
2026-06-02 05:52:54 -07:00
2026-06-02 17:34:00 -05:00
2026-05-17 23:28:45 -07:00
2026-05-29 22:29:48 -07:00
2026-05-28 22:26:25 -07:00
2026-04-30 02:35:29 -07:00
2026-06-02 21:16:41 +10:00
2026-05-28 22:26:25 -07:00
2026-06-01 03:01:20 -07:00
2026-05-14 22:27:09 -07:00
2026-05-30 02:38:18 -07:00
2026-05-28 22:26:25 -07:00
2026-06-02 00:29:44 -07:00
2026-06-01 01:22:38 -07:00
2026-06-01 19:52:28 -07:00
2026-06-01 19:51:03 -07:00
2026-04-21 01:56:35 -07:00
2026-04-28 04:58:22 -07:00
2026-04-21 06:06:16 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-18 21:43:59 -07:00
2026-04-29 23:18:55 -07:00
2026-05-28 22:26:25 -07:00
2026-06-02 16:13:44 +10:00
2026-06-01 16:06:44 +10:00
2026-06-01 13:32:55 +10:00
2026-05-28 22:26:25 -07:00
2026-05-25 15:18:55 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-04-30 04:32:06 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-02 01:49:55 -07:00
2026-05-31 17:46:56 -05:00
2026-05-28 21:40:39 -07:00
2026-05-27 14:31:55 -07:00
2026-06-02 12:37:40 -04:00
2026-05-29 22:29:48 -07:00
2026-05-27 10:49:33 -07:00
2026-06-01 20:13:42 -07:00
2026-05-14 09:05:31 -07:00
2026-05-06 04:02:02 -07:00
2026-05-27 13:55:51 -07:00
2026-04-28 06:45:55 -07:00
2026-05-28 22:26:25 -07:00
2026-05-07 13:04:08 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-17 02:29:41 -07:00
2026-05-28 22:26:25 -07:00
2026-04-20 12:23:05 -07:00
2026-04-19 22:44:47 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-16 12:15:45 -07:00
2026-05-29 23:23:54 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-29 13:24:12 -07:00
2026-04-08 00:41:36 -07:00
2026-05-21 16:40:04 +05:30
2026-05-16 00:57:39 -07:00
2026-05-28 22:26:25 -07:00
2026-05-07 13:04:08 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-07 05:46:05 -07:00
2026-05-28 22:26:25 -07:00
2026-06-02 20:23:09 +00:00
2026-03-30 13:28:10 +09:00
2026-05-28 22:26:25 -07:00
2026-04-26 18:50:49 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00