hermes-agent/apps/desktop/src/store
brooklyn! 4ddb03390a
fix(desktop): collect + persist API key for custom OpenAI endpoints (#43896)
The desktop "Local / custom endpoint" onboarding never collected an API
key and /api/model/set silently dropped one, so an auth-gated endpoint
(e.g. a hosted vLLM behind a key) could never enumerate models — and
Settings' "Set up custom endpoint" routed `custom` into a non-existent
OAuth flow, booting the user back to the first screen (the reported loop).

Backend (web_server.py):
- /api/providers/validate accepts an optional api_key and sends it as a
  Bearer header when probing a custom endpoint's /v1/models.
- /api/model/set accepts api_key, persists it to model.api_key (same
  switch/preserve lifecycle as base_url), and registers a named
  custom_providers entry via _save_custom_provider — matching the
  `hermes model` CLI flow so the endpoint shows up as a ready picker row.

Desktop:
- ApiKeyForm shows an optional API key field for the local/custom option;
  the key is threaded through saveOnboardingLocalEndpoint → validate +
  setModelAssignment.
- New onboarding `localEndpoint` intent + startManualLocalEndpoint(); the
  Settings "Set up custom endpoint" button now opens the local-endpoint
  form (URL + key) instead of the OAuth dead-end.
- Added localApiKeyPlaceholder i18n key (en + types + zh).

Tests: api_key lifecycle on _apply_main_model_assignment, key persistence
+ custom_providers registration on /api/model/set, Bearer-header probe;
onboarding store forwards + persists the key.
2026-06-12 00:03:55 +00:00
..
activity.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
boot.ts feat(desktop): persist i18n language in config 2026-06-05 10:32:26 -07:00
clarify.test.ts fix(desktop): surface background-session clarify prompts instead of hanging 2026-06-03 21:07:33 -05:00
clarify.ts fix(desktop): surface background-session clarify prompts instead of hanging 2026-06-03 21:07:33 -05:00
command-palette.ts feat(desktop): global Cmd+K palette + UI consistency overhaul 2026-06-03 23:45:45 -05:00
composer-input-history.test.ts feat(desktop): arrow up/down to navigate previous user messages 2026-06-05 20:32:29 -05:00
composer-input-history.ts feat(desktop): integrate arrow history with the message queue 2026-06-05 20:33:53 -05:00
composer-queue.test.ts fix(desktop): reliable composer message queue (#40221) 2026-06-05 20:21:41 -05:00
composer-queue.ts fix(desktop): reliable composer message queue (#40221) 2026-06-05 20:21:41 -05:00
composer.test.ts feat(desktop): strict per-thread drafts on decoupled composer 2026-06-11 00:01:06 -05:00
composer.ts feat(desktop): strict per-thread drafts on decoupled composer 2026-06-11 00:01:06 -05:00
cron.ts fix(desktop): cron overlay mutations sync the sidebar instantly 2026-06-06 16:47:46 -05:00
gateway.ts feat(desktop): concurrent multi-profile gateway sockets 2026-06-04 20:44:19 -05:00
haptics.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
keybinds.ts feat(desktop): Mac-style session switcher (^Tab / ^⇧Tab / ^1-9) (#43111) 2026-06-09 20:12:46 -05:00
layout.ts fix(desktop): sidebar sections never overlap — two-mode CSS scroll + collapse/cap groups (#43147) 2026-06-10 01:11:45 +00:00
model-visibility.test.ts fix(desktop): preserve explicit hide-all choice in model visibility dialog (#43496) 2026-06-11 13:27:38 -05:00
model-visibility.ts fix(desktop): preserve explicit hide-all choice in model visibility dialog (#43496) 2026-06-11 13:27:38 -05:00
notifications.ts feat(desktop): persist i18n language in config 2026-06-05 10:32:26 -07:00
onboarding.test.ts fix(desktop): collect + persist API key for custom OpenAI endpoints (#43896) 2026-06-12 00:03:55 +00:00
onboarding.ts fix(desktop): collect + persist API key for custom OpenAI endpoints (#43896) 2026-06-12 00:03:55 +00:00
panes.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
panes.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
preview.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
preview.ts fix(desktop): stage dropped files into the remote session workspace 2026-06-09 16:50:08 -05:00
profile.ts feat(desktop): rebindable keyboard shortcuts panel 2026-06-06 11:41:57 -05:00
prompts.test.ts fix(approval): carry allow_permanent to TUI + desktop approval prompts 2026-06-11 18:23:59 -05:00
prompts.ts chore(approval): tighten allow_permanent comments + DRY the no-always opt set 2026-06-11 18:42:59 -05:00
session-switcher.test.ts feat(desktop): Mac-style session switcher (^Tab / ^⇧Tab / ^1-9) (#43111) 2026-06-09 20:12:46 -05:00
session-switcher.ts feat(desktop): Mac-style session switcher (^Tab / ^⇧Tab / ^1-9) (#43111) 2026-06-09 20:12:46 -05:00
session.test.ts fix(desktop): scope remote workspace defaults 2026-06-11 09:41:35 -07:00
session.ts fix(desktop): scope remote workspace defaults 2026-06-11 09:41:35 -07:00
subagents.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
subagents.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
thread-scroll.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
tool-diffs.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
tool-view.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
updates.test.ts fix(desktop): close the backend update overlay on success; error on no-return 2026-06-08 08:58:26 -07:00
updates.ts feat(desktop+gateway): remote-gateway file attachments via file.attach 2026-06-09 00:03:49 -07:00
voice-playback.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
windows.test.ts feat(desktop): open any chat in its own window (#43219) 2026-06-09 21:09:45 -05:00
windows.ts feat(desktop): open any chat in its own window (#43219) 2026-06-09 21:09:45 -05:00