hermes-agent/apps/desktop/src
Brooklyn Nicholson 570337c099 fix(desktop): clearing the composer lands on the same empty state every way
Select-all + Delete cleared the composer; select-all + Cut left it holding
a draft. Both produce identical DOM, so the split was in the reader.

An emptied editor keeps a placeholder <br> \u2014 scaffolding
normalizeComposerEditorDom adds so the contenteditable doesn't collapse to
a sliver, not a line the user typed. composerPlainText read it as "\n",
and syncDraftFromEditor (session swap, pagehide) skipped the
normalize+sanitize its rAF twin runs. Cut's residue reached that reader;
Delete's went through the flush path and got cleaned.

Fixed where the two disagree rather than at each call site: an editor
holding nothing but its placeholder break reads as empty. A real
Shift+Enter break, a trailing break after text, and a nested lone <br>
are all unchanged \u2014 the exemption is scoped to the editor root by its slot
marker. syncDraftFromEditor now normalizes and sanitizes like the flush
path, so both readers see one truth.
2026-07-30 07:29:31 -05:00
..
app fix(desktop): clearing the composer lands on the same empty state every way 2026-07-30 07:29:31 -05:00
assets/tiers feat(desktop): Billing page revamp — current-plan card, in-app plans view, tier art (#68722) 2026-07-22 08:07:52 +05:30
components Merge pull request #74734 from NousResearch/bb/tab-context-menu 2026-07-30 05:23:06 -05:00
contrib fix(desktop): widen local plugin-root fix — profile-aware root + dir-watch path 2026-07-28 23:53:20 -07:00
debug fmt(js): npm run fix on merge (#72532) 2026-07-27 07:16:27 +00:00
fonts fix(desktop): crisp terminal text via opaque xterm canvas 2026-06-12 19:36:30 -05:00
hooks perf(desktop): share one ResizeObserver instead of one per consumer 2026-07-26 19:56:55 -05:00
i18n Merge pull request #74734 from NousResearch/bb/tab-context-menu 2026-07-30 05:23:06 -05:00
lib fix(desktop): keep a mid-turn model pick painted in the composer (#74759) 2026-07-30 10:34:48 +00:00
plugins feat(desktop): plugin manager, runtime loader, and plugins settings 2026-07-13 17:57:53 -04:00
sdk feat(sdk): expose FloatingAnchor to plugins 2026-07-28 01:11:12 -05:00
store A finished turn ends on its changed files (#74732) 2026-07-30 10:11:58 +00:00
themes fix(desktop): use the native Menlo/Monaco mono stack for code 2026-07-30 05:48:20 -05:00
types feat(desktop): two-way reaction UI — tapback pill, frimousse picker, live paint 2026-07-30 00:08:28 -05:00
global.d.ts feat(desktop): File > Open Folder… menu item 2026-07-30 01:15:01 -05:00
hermes-cron-scope.test.ts fix(desktop): scope the cron jobs list to the active profile 2026-07-19 12:19:22 -07:00
hermes-parity.test.ts feat(desktop): CLI/dashboard parity — skills hub, MCP test/toggle/catalog, maintenance ops, log filters (#57441) 2026-07-03 01:02:47 -07:00
hermes-profile-scope.test.ts style: eslint padding fix in profile-scope test (salvage follow-up) 2026-07-28 11:58:03 -07:00
hermes.test.ts [verified] fix(desktop): scope TTS requests to active profile 2026-07-28 11:58:03 -07:00
hermes.ts fmt(js): npm run fix on merge (#74740) 2026-07-30 09:42:51 +00:00
main.tsx feat(desktop): confirm before quitting with a turn in flight 2026-07-27 15:47:57 -05:00
pairing-scope.test.ts fix(pairing): scope the approve/revoke endpoints to a profile 2026-07-29 18:43:50 -05:00
styles.css fix(desktop): use the native Menlo/Monaco mono stack for code 2026-07-30 05:48:20 -05:00
vite-env.d.ts
webhooks-rest.test.ts feat(desktop): add Webhooks page for subscription CRUD (#69687) 2026-07-24 14:06:10 -04:00