hermes-agent/web/src/pages
xxxigm 2fef3e2df2 fix(webui): split merge-into-tail compaction so reply renders as its own bubble (#29824)
The compressor has a "double-collision" fallback path: when the
chosen ``summary_role`` collides with the first tail message AND
the flipped role would collide with the last head message, it can't
emit a standalone summary turn (consecutive same-role messages
break Anthropic and friends). It instead prepends the summary +
end-of-summary marker to the first tail message's content via
``_merge_summary_into_tail``.

With the matching anchor from the previous commit, that first tail
message is now usually the user's previously-visible assistant
reply — so the persisted assistant turn ends up shaped as
``[CONTEXT COMPACTION ...] ... --- END OF CONTEXT SUMMARY --- ...
THE ACTUAL REPLY``. Without splitting it, the session viewer
renders one big "Context handoff" bubble and the reply text is
buried inside the metadata blob — which is exactly the
"can't see the last reply" experience #29824 reports, just one
layer deeper.

Added ``splitCompactionContent`` that detects the merge marker
(kept in sync with ``--- END OF CONTEXT SUMMARY — respond to the
message below, not the summary above ---`` in
``agent/context_compressor.py``) and ``MessageBubble`` now
recurses on the two halves: the prefix half renders as the muted
"Context handoff" row, the remainder half renders with the
original assistant styling. Pure (non-merged) summary messages
hit the no-remainder branch and still render as a single
"Context handoff" row, preserving the original behaviour.
2026-06-12 15:41:57 -07:00
..
AnalyticsPage.tsx feat(dashboard): nous-blue theme, bulk sessions, schedule picker (#37383) 2026-06-02 12:37:40 -04:00
ChannelsPage.tsx fix: dedupe concurrent gateway restarts + surface restart outcome in onboarding UI 2026-06-10 01:35:12 -07:00
ChatPage.tsx feat(dashboard): unify multi-profile management — one machine dashboard, global profile switcher (#44007) 2026-06-11 03:29:33 -07:00
ConfigPage.tsx fix(dashboard): Config page header shows the switched profile's config.yaml path (#44374) 2026-06-11 09:46:15 -07:00
CronPage.tsx refactor(cron): rebrand Cron Recipes -> Automation Blueprints 2026-06-11 10:49:47 -07:00
DocsPage.tsx fix(web): force light color-scheme on docs iframe 2026-05-07 04:55:47 -07:00
EnvPage.tsx feat(dashboard): enrich profiles dashboard and de-dupe channel env vars (#37872) 2026-06-03 10:37:36 -04:00
FilesPage.tsx Move folder creation into dialog 2026-06-10 09:53:12 -07:00
LogsPage.tsx Merge remote-tracking branch 'origin/main' into refactor/use-ds-primitives 2026-05-28 14:20:49 -04:00
McpPage.tsx feat(dashboard): complete admin panel — MCP catalog, enable/disable toggles, hook creation, system stats (#36736) 2026-06-02 00:16:11 -04:00
ModelsPage.tsx Update implementation to make it cleaner 2026-06-12 11:03:44 -07:00
PairingPage.tsx feat(dashboard): full administration panel — MCP, pairing, webhooks, credentials, memory, gateway, ops (#36704) 2026-06-01 02:58:02 -07:00
PluginsPage.tsx feat(plugins): install from a subdirectory within a repo (#42963) 2026-06-09 13:42:51 -04:00
ProfileBuilderPage.tsx feat(dashboard): full-featured profile builder (model + skills + MCPs) (#39084) 2026-06-10 09:18:32 -07:00
ProfilesPage.tsx fix(dashboard): dedupe useNavigate import/declaration in ProfilesPage 2026-06-10 20:34:53 -07:00
SessionsPage.tsx fix(webui): split merge-into-tail compaction so reply renders as its own bubble (#29824) 2026-06-12 15:41:57 -07:00
SkillsPage.tsx feat(dashboard): SKILL.md editor on Skills page + attach-skill selector in cron modals (#44231) 2026-06-11 06:10:27 -07:00
SystemPage.tsx fix(dashboard): normalize model assignments + confirm-modal for backup import (#44237) 2026-06-11 05:07:58 -07:00
WebhooksPage.tsx Enable webhooks from dashboard page 2026-06-10 22:55:06 -07:00