hermes-agent/apps/desktop/src/lib
Brooklyn Nicholson 914d19b3a9 fix(desktop,gateway,mcp): post-merge — CI contract, review corrections, hub search
Post-merge follow-ups + several review rounds + a hub-search rework, folded together.

Merge-scuff restores (a stale-base refactor had reverted two live-on-main fixes):
- gateway: SessionStore compression-tip healing + its regression test.
- desktop: messaging session/transcript polling in desktop-controller
  (MESSAGING_POLL / ACTIVE_MESSAGING_SESSION_POLL, refreshMessagingSessions,
  refreshActiveMessagingTranscript, the richer sameCronSignature) so inbound
  platform traffic updates live again instead of freezing until manual refresh.

Profile-switch isolation (epoch/close/guard on every profile-scoped async):
- Hub store clears + in-flight runHubAction bails (and swallows the post-switch
  404 instead of a phantom toast); hub preview/scan/search/sources profile-scoped.
- MCP: probe/auth epoch guards, dirty-draft reset, sidebar mutations blocked
  until config resettles AND every persist re-checks the epoch post-await;
  profilePending clears on config settle incl. error; logs re-key on profile.
- Model settings reload on switch and epoch-guard setModelAssignment /
  saveMoaModels / API-key activation.
- Config draft resets + cancels its autosave on switch; skill editor/archive and
  star-map node dialogs close on switch; openSkillEditor / star-map openEdit
  discard stale fetches; tool-usage analytics loads are profile-guarded/keyed.

Correctness + UX:
- Unique per-skill action names for hub install AND uninstall; hub/​catalog rows
  flip only on a clean exit_code; catalog install polls the background bootstrap
  to completion, reconciles the mcp.json draft (no dropped server), and fails
  loudly on non-zero exit; MCP catalog query keyed by profile.
- /test reports needs-auth for anonymous auth:oauth servers; /auth snapshots +
  restores tokens on a failed re-auth and clears the full 300s callback window.
- config-settings shows a retry on load failure; CodeEditor/JsonDocumentEditor
  go read-only while saving so edits typed mid-save aren't dropped.
- Deep-link highlighter deletes its param only after a successful scroll.
- Restored the PageSearchShell trailing slot → Artifacts refresh button/spinner.
- /settings?tab=mcp redirect keeps server=.

Progressive hub search: fan out one query per backend-searchable source
(index-covered API sources stay unsearchable → no ~70-call GitHub re-hammer),
merge/dedupe by trust as each lands, per-source spinner overlaid on the dimmed
chip — results stream in without blocking on the slowest, no layout shift.

test(web): /api/skills list carries usage + provenance (CI contract).
2026-07-03 15:22:43 -05:00
..
keybinds refactor(desktop): generalize focus check to isFocusWithin primitive 2026-06-28 19:11:48 -05:00
ansi.test.ts fix(desktop): triage batch of GUI quality-of-life fixes (#37536) 2026-06-02 16:33:22 -04:00
ansi.ts desktop: registry-driven slash commands + first-class /resume & /handoff (#42351) 2026-06-11 01:49:24 +00:00
chat-messages.test.ts fix(desktop): coalesce interleaved reasoning/content stream parts 2026-06-15 17:48:35 -05:00
chat-messages.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
chat-runtime.test.ts fix(desktop): parse multiline slash commands + hand degenerate payloads back 2026-07-02 11:36:21 -05:00
chat-runtime.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
clipboard.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
commit-changelog.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
commit-changelog.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
completion-sound.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
desktop-fs.test.ts fix(desktop): restore remote file picker attachments 2026-07-02 12:32:30 -05:00
desktop-fs.ts fix(desktop): restore remote file picker attachments 2026-07-02 12:32:30 -05:00
desktop-git.test.ts fix(desktop): remote project picker UX and profile-scoped fs/git routing 2026-06-28 16:23:39 -05:00
desktop-git.ts fix(desktop): remote project picker UX and profile-scoped fs/git routing 2026-06-28 16:23:39 -05:00
desktop-slash-commands.test.ts feat(desktop): /journey opens the memory graph overlay instead of printing text 2026-07-02 12:27:52 -05:00
desktop-slash-commands.ts feat(desktop): /journey opens the memory graph overlay instead of printing text 2026-07-02 12:27:52 -05:00
desktop-toolsets.test.ts fix(desktop): hide platform/internal toolsets from the Skills & Tools list 2026-06-24 19:18:29 -05:00
desktop-toolsets.ts fix(desktop): hide platform/internal toolsets from the Skills & Tools list 2026-06-24 19:18:29 -05:00
embedded-images.test.ts fix(desktop): avoid stack overflow on embedded image replay 2026-06-22 18:19:36 -05:00
embedded-images.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
excluded-paths.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
external-link.test.tsx fix(desktop): render debug-report paste URLs as real clickable links 2026-06-08 21:35:21 -04:00
external-link.tsx fix(desktop): render debug-report paste URLs as real clickable links 2026-06-08 21:35:21 -04:00
format.ts feat(desktop): Capabilities foundation — shared utils, master-detail, editors, primitives 2026-07-03 05:08:13 -05:00
gateway-events.test.ts fix(desktop): don't drop the focused chat's own stream when unscoped (#42359) 2026-06-08 15:24:15 -05:00
gateway-events.ts fix(desktop): don't drop the focused chat's own stream when unscoped (#42359) 2026-06-08 15:24:15 -05:00
gateway-rpc.test.ts test(desktop): cover projects RPC capability probing 2026-06-30 21:23:38 +07:00
gateway-rpc.ts fix(desktop): detect stale backend for projects.create 2026-06-30 21:23:38 +07:00
gateway-ws-url.test.ts refactor(desktop+dashboard): extract shared WebSocket/JSON-RPC layer 2026-06-28 21:20:35 -05:00
generated-images.test.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
generated-images.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
haptics.ts feat(desktop): drag sessions into chat as @session links + spawn loader 2026-06-04 19:41:51 -05:00
icons.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
incremental-external-store-runtime.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
json-format.test.ts feat(desktop): Capabilities foundation — shared utils, master-detail, editors, primitives 2026-07-03 05:08:13 -05:00
json-format.ts feat(desktop): Capabilities foundation — shared utils, master-detail, editors, primitives 2026-07-03 05:08:13 -05:00
katex-memo.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
loadout.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
local-preview.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
markdown-code.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
markdown-code.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
markdown-preprocess.ts perf(desktop): keep oversized messages from freezing the chat 2026-06-17 08:25:52 -05:00
mcp-tool-filter.test.ts feat(mcp): first-class MCP tab — catalog, GUI auth/probe/logs, per-tool gating 2026-07-03 05:08:28 -05:00
mcp-tool-filter.ts feat(mcp): first-class MCP tab — catalog, GUI auth/probe/logs, per-tool gating 2026-07-03 05:08:28 -05:00
media.remote.test.ts fix(desktop,gateway,mcp): post-merge — CI contract, review corrections, hub search 2026-07-03 15:22:43 -05:00
media.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
model-options.test.ts fix(desktop): load remote model options before session 2026-07-02 12:50:46 -05:00
model-options.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
model-status-label.test.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
model-status-label.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
mutable-ref.ts chore(desktop): zero eslint/typecheck debt + prettier pass (#39100) 2026-06-04 14:10:38 +00:00
oneshot.ts feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
persisted.ts feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
pool.test.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
pool.ts feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
preview-targets.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
preview-targets.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
profile-color.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
project-idea-templates.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
provider-setup-errors.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
provider-setup-errors.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
query-client.ts feat(desktop): Capabilities foundation — shared utils, master-detail, editors, primitives 2026-07-03 05:08:13 -05:00
remend-tail.test.ts perf(desktop): incremental markdown rendering during streams 2026-06-12 21:07:36 -05:00
remend-tail.ts perf(desktop): incremental markdown rendering during streams 2026-06-12 21:07:36 -05:00
runtime-readiness.test.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
runtime-readiness.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
sanitize.test.ts feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
sanitize.ts feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
selectable-card.ts feat(desktop): floating pet, pop-out overlay + Cmd+K picker 2026-06-20 14:18:40 -05:00
session-branch-tree.test.ts feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
session-branch-tree.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
session-export.ts fix(desktop): route profile session reads 2026-06-11 18:09:24 -05:00
session-ids.test.ts test(desktop): cover runtime->stored notification id resolution 2026-06-19 17:50:35 +05:30
session-ids.ts fix(desktop): resume stored session id on notification click 2026-06-19 17:50:35 +05:30
session-search.test.ts Show platform sources in desktop sessions 2026-06-07 23:44:04 -07:00
session-search.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
session-source.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
speech-text.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
statusbar.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
storage.test.ts fix(desktop): keep recents sorted unless manually reordered (#45404) 2026-06-13 00:38:10 -05:00
storage.ts feat(desktop): add shared project UI primitives 2026-06-25 16:40:27 -05:00
summarize-command.test.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
summarize-command.ts fix(desktop): compact tool row titles 2026-06-25 00:01:11 -05:00
svg-image.ts feat(desktop): zoomable primitive — open full, pan/zoom, copy 2026-06-26 03:40:49 -05:00
text.ts feat(desktop): Capabilities foundation — shared utils, master-detail, editors, primitives 2026-07-03 05:08:13 -05:00
time.ts feat(desktop): Capabilities foundation — shared utils, master-detail, editors, primitives 2026-07-03 05:08:13 -05:00
todos.test.ts feat(desktop): composer status stack, live subagent windows, editable prompts (#44630) 2026-06-12 08:30:06 -05:00
todos.ts feat(desktop): composer status stack, live subagent windows, editable prompts (#44630) 2026-06-12 08:30:06 -05:00
tool-result-summary.test.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
tool-result-summary.ts refactor(desktop): adopt shared utils + app-wide cleanups 2026-07-03 13:48:44 -05:00
trackpad-gestures.ts feat(desktop): Memory Graph — playable radial timeline of memories + skills 2026-06-30 00:54:21 -05:00
update-copy.test.ts fix(desktop): name the update target in the overlay; honest no-changelog copy 2026-06-08 08:58:26 -07:00
update-copy.ts fix(desktop): name the update target in the overlay; honest no-changelog copy 2026-06-08 08:58:26 -07:00
use-enter-animation.ts fix(desktop): prevent IME Enter from splitting messages and viewport resize from disarming scroll anchor (#38333) 2026-06-03 20:14:52 +00:00
use-session-slice.ts perf(desktop): stop ChatBar re-rendering on cross-session status/queue churn 2026-06-30 04:19:10 -05:00
utils.ts Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
voice-playback.ts fix(desktop): wire Ctrl+B voice, declutter voice settings, stop endless TTS hang 2026-06-24 18:26:14 -05:00
yolo-session.ts style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00