Skip to content

fix(desktop): local-only recents, per-platform sidebar sections, and Ctrl+N regressions#42537

Merged
OutThisLife merged 6 commits into
mainfrom
fix/desktop-recents-new-session-regressions-main
Jun 9, 2026
Merged

fix(desktop): local-only recents, per-platform sidebar sections, and Ctrl+N regressions#42537
OutThisLife merged 6 commits into
mainfrom
fix/desktop-recents-new-session-regressions-main

Conversation

@OutThisLife

@OutThisLife OutThisLife commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

Restores the desktop chat sidebar and the Ctrl+N new-session flow after a cluster of recent regressions, and reworks how messaging-platform threads are surfaced.

Sidebar

  • Recents are local-only. cron and every messaging-platform source (telegram, discord, slack, ...) are excluded from the chat-recents query, so Load More pages through interactive local chats instead of interleaving gateway threads that buried them.
  • Each messaging platform is its own self-managed section. A separate slice (refreshMessagingSessions) fetches messaging threads and renders one section per platform with its icon, count, and a per-platform "load more" - no source-grouping magic inside recents.
  • Handoff-origin badge. When a thread is handed off from a messaging platform its live source becomes local (tui/desktop); the row keeps an origin-platform badge via handoff_platform, so a Telegram thread continued in the desktop still reads as Telegram.
  • Ordering fix. orderByIds/reconcileOrderIds previously appended ids missing from the persisted order to the bottom; callers pass recency-sorted lists, so a brand-new Ctrl+N session sank below the saved order. Fresh ids now prepend so new activity surfaces at the top.

New-chat "Thinking" hang (first session)

  • Terminal/attention state transitions (turn finished, error, agent now awaiting input) were RAF-batched. Electron throttles requestAnimationFrame to ~0 while the window is backgrounded/occluded/unfocused, stranding the deferred flush. Critical transitions (!busy || needsInput) now flush synchronously; the busy heartbeat stays RAF-batched to avoid scroll churn.

Ctrl+N

  • Stale quick-create profile state is cleared before Ctrl+N starts a new session.

Follow-up regression fix (June 9)

  • Primary assistant stream bypasses smooth reveal. MarkdownTextImpl now renders through DeferStreamingText directly (without SmoothStreamingText). This isolates smooth reveal to reasoning surfaces and removes the intermittent "new session exists but no visible response until refresh" behavior seen after consecutive Ctrl+N flows.

Test plan

  • Load More pages through local chats only; messaging platforms appear as their own sections with icons + counts + per-platform load more
  • Handed-off (telegram->desktop) thread shows the telegram badge on its row
  • New Ctrl+N session appears at the top of recents
  • First new-chat turn never sticks on "Thinking" (incl. when window unfocused/backgrounded)
  • Consecutive Ctrl+N new chats stream assistant output without requiring app refresh

Exclude messaging platform threads from chat recents pagination so Load More returns chat sessions, and clear stale quick-create profile state before Ctrl+N starts a new session.
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

🔎 Lint report: fix/desktop-recents-new-session-regressions-main vs origin/main

ruff

Total: 0 on HEAD, 0 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 0 pre-existing issues carried over.

ty (type checker)

Total: 10609 on HEAD, 10609 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 5561 pre-existing issues carried over.

Diagnostics are surfaced as warnings — this check never fails the build.

@alt-glitch alt-glitch added type/bug Something isn't working P3 Low — cosmetic, nice to have labels Jun 9, 2026

@tonydwb tonydwb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Summary

Verdict: Approved

Overview

This PR restores recents pagination and Ctrl+N new-session flow by excluding messaging platform sessions from recents.

Changes

  • Adds MESSAGING_SESSION_SOURCE_IDS constant
  • Excludes messaging platform sessions from recents sidebar
  • Fixes new chat profile targeting for keyboard shortcut

Quality

  • Clean fix
  • No security concerns

Reviewed by Hermes Agent

…king

Two renderer regressions in the desktop chat app:

- Sidebar ordering: orderByIds/reconcileOrderIds appended ids missing from
  the persisted order to the BOTTOM. Callers pass recency-sorted lists
  (newest first), so a brand-new Ctrl+N session sank below the saved order
  and read as "my latest session never showed up". Prepend fresh ids so new
  activity surfaces at the top.

- New-chat stuck on "Thinking": terminal/attention state transitions
  (turn finished, error, or agent now waiting on user) were RAF-batched.
  Electron throttles requestAnimationFrame to ~0 while the window is
  backgrounded, occluded, or unfocused, stranding the deferred flush. Flush
  critical transitions (!busy || needsInput) synchronously; keep the busy
  heartbeat RAF-batched to avoid scroll churn.

Does not touch the messaging-source exclusion in chat recents queries.
The "keep chat recents focused" change excluded every messaging-platform
source (telegram, discord, slack, …) from the recents query. That silently
undid the messaging-source-folder feature already on main (ede4f5a): the
sidebar builds those folders purely from the loaded recents page, so once the
sources were filtered out the folders never rendered — telegram and friends
vanished from the left sidebar.

Only cron stays excluded (it has its own dedicated section). Messaging
sessions belong in the sidebar and render with their platform folder/icon.
Removes the now-unused MESSAGING_SESSION_SOURCE_IDS export.
…ar section

Recents are local-only again: cron and every messaging platform are excluded
from the chat-recents query, so "Load more" pages through interactive local
chats instead of interleaving gateway threads that bury them.

Each messaging platform (telegram, discord, ...) is now fetched as its own
slice (refreshMessagingSessions) and rendered as a self-managed sidebar
section with its platform icon, count, and per-platform "load more" — no
source-grouping magic inside recents.

Handed-off sessions (live source becomes local after a handoff) keep their
origin-platform badge on the row via handoff_platform, so a Telegram thread
continued in the desktop still reads as Telegram.
@OutThisLife OutThisLife changed the title fix(desktop): restore recents pagination and Ctrl+N new-session flow fix(desktop): local-only recents, per-platform sidebar sections, and Ctrl+N regressions Jun 9, 2026
An intermittent create/stream race can leave selected/active session ids
null while the route stays on /:sid — the transcript then sticks empty
even though the turn completed and persisted (the "second Ctrl+N shows no
response" symptom). The pathname didn't change, so route-resume's normal
gate skipped and the view stayed stuck.

Resume whenever the routed session isn't the loaded one, gated on
freshDraftReady so the /:sid -> /new transition (which also momentarily
nulls selected/active a render before the pathname flips) is NOT treated
as stranded. selectedStoredSessionIdRef is set synchronously at resume
entry, so this can't loop, and the resume cached fast-path restores the
already-streamed messages without a refetch.
Render main assistant text through deferred markdown directly instead of the smooth-reveal wrapper. This isolates the wrapper to reasoning surfaces and avoids the intermittent blank-response regression after consecutive new-session flows.
@OutThisLife

Copy link
Copy Markdown
Collaborator Author

Follow-up cleanup pushed in 9880f3993.

What changed:

  • apps/desktop/src/components/assistant-ui/markdown-text.tsx
    • MarkdownTextImpl now renders via DeferStreamingText directly.
    • Removed SmoothStreamingText from the primary assistant text path only.

Why:

  • Keeps reasoning/disclosure behavior intact while avoiding the intermittent desktop regression where a fresh Ctrl+N session could exist in the sidebar but not visibly stream until refresh.

Validation notes:

  • Local manual repro path used throughout: desktop dev app -> Cmd+N -> new chat -> verify live assistant streaming.

@OutThisLife OutThisLife enabled auto-merge (squash) June 9, 2026 14:23
@OutThisLife OutThisLife merged commit d046169 into main Jun 9, 2026
20 checks passed
@OutThisLife OutThisLife deleted the fix/desktop-recents-new-session-regressions-main branch June 9, 2026 14:24
wachoo pushed a commit to wachoo/hermes-agent that referenced this pull request Jun 10, 2026
…Ctrl+N regressions (NousResearch#42537)

* fix(desktop): keep chat recents focused and reset hotkey target

Exclude messaging platform threads from chat recents pagination so Load More returns chat sessions, and clear stale quick-create profile state before Ctrl+N starts a new session.

* fix(desktop): surface new sessions in sidebar + unstick new-chat Thinking

Two renderer regressions in the desktop chat app:

- Sidebar ordering: orderByIds/reconcileOrderIds appended ids missing from
  the persisted order to the BOTTOM. Callers pass recency-sorted lists
  (newest first), so a brand-new Ctrl+N session sank below the saved order
  and read as "my latest session never showed up". Prepend fresh ids so new
  activity surfaces at the top.

- New-chat stuck on "Thinking": terminal/attention state transitions
  (turn finished, error, or agent now waiting on user) were RAF-batched.
  Electron throttles requestAnimationFrame to ~0 while the window is
  backgrounded, occluded, or unfocused, stranding the deferred flush. Flush
  critical transitions (!busy || needsInput) synchronously; keep the busy
  heartbeat RAF-batched to avoid scroll churn.

Does not touch the messaging-source exclusion in chat recents queries.

* fix(desktop): stop excluding messaging platforms from chat recents

The "keep chat recents focused" change excluded every messaging-platform
source (telegram, discord, slack, …) from the recents query. That silently
undid the messaging-source-folder feature already on main (ede4f5a): the
sidebar builds those folders purely from the loaded recents page, so once the
sources were filtered out the folders never rendered — telegram and friends
vanished from the left sidebar.

Only cron stays excluded (it has its own dedicated section). Messaging
sessions belong in the sidebar and render with their platform folder/icon.
Removes the now-unused MESSAGING_SESSION_SOURCE_IDS export.

* fix(desktop): give each messaging platform its own self-managed sidebar section

Recents are local-only again: cron and every messaging platform are excluded
from the chat-recents query, so "Load more" pages through interactive local
chats instead of interleaving gateway threads that bury them.

Each messaging platform (telegram, discord, ...) is now fetched as its own
slice (refreshMessagingSessions) and rendered as a self-managed sidebar
section with its platform icon, count, and per-platform "load more" — no
source-grouping magic inside recents.

Handed-off sessions (live source becomes local after a handoff) keep their
origin-platform badge on the row via handoff_platform, so a Telegram thread
continued in the desktop still reads as Telegram.

* fix(desktop): self-heal a stranded routed session in route-resume

An intermittent create/stream race can leave selected/active session ids
null while the route stays on /:sid — the transcript then sticks empty
even though the turn completed and persisted (the "second Ctrl+N shows no
response" symptom). The pathname didn't change, so route-resume's normal
gate skipped and the view stayed stuck.

Resume whenever the routed session isn't the loaded one, gated on
freshDraftReady so the /:sid -> /new transition (which also momentarily
nulls selected/active a render before the pathname flips) is NOT treated
as stranded. selectedStoredSessionIdRef is set synchronously at resume
entry, so this can't loop, and the resume cached fast-path restores the
already-streamed messages without a refetch.

* fix(desktop): bypass smooth reveal on primary markdown stream

Render main assistant text through deferred markdown directly instead of the smooth-reveal wrapper. This isolates the wrapper to reasoning surfaces and avoids the intermittent blank-response regression after consecutive new-session flows.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
… prevent zoom-position bug

Brooklyn's sidebar rework (NousResearch#42537/NousResearch#43147) moved the cron jobs section inside a flex-1 overflow-y-auto div, causing it to jump position on zoom. Moved it outside the scrollable container (inside a Fragment) so it stays fixed between sessions and profiles regardless of viewport size.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
…pacing

Cron jobs section was moved inside the scrollable sessions container
by the sidebar rework (NousResearch#42537/NousResearch#43147), causing zoom-dependent position
shifts. Moved it back outside into a Fragment sibling and capped
content height to max-h-28 (~4 rows) for a compact strip.

Also balanced sidebar spacing: reduced nav row bottom padding and
adjusted search field margins so the search bar is visually centered
between the navigation row and PINNED section header.

3 files, 11 insertions, 7 deletions.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
…pacing

Cron jobs section was moved inside the scrollable sessions container
by the sidebar rework (NousResearch#42537/NousResearch#43147), causing zoom-dependent position
shifts. Moved it back outside into a Fragment sibling and capped
content height to max-h-28 (~4 rows) for a compact strip.

Also balanced sidebar spacing: reduced nav row bottom padding and
adjusted search field margins so the search bar is visually centered
between the navigation row and PINNED section header.

3 files, 11 insertions, 7 deletions.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to max-h-28 (~4 visible rows)
- Reduce nav row bottom padding for balanced side spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

3 files, +15/-7.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
changman pushed a commit to changman/hermes-agent that referenced this pull request Jun 10, 2026
…Ctrl+N regressions (NousResearch#42537)

* fix(desktop): keep chat recents focused and reset hotkey target

Exclude messaging platform threads from chat recents pagination so Load More returns chat sessions, and clear stale quick-create profile state before Ctrl+N starts a new session.

* fix(desktop): surface new sessions in sidebar + unstick new-chat Thinking

Two renderer regressions in the desktop chat app:

- Sidebar ordering: orderByIds/reconcileOrderIds appended ids missing from
  the persisted order to the BOTTOM. Callers pass recency-sorted lists
  (newest first), so a brand-new Ctrl+N session sank below the saved order
  and read as "my latest session never showed up". Prepend fresh ids so new
  activity surfaces at the top.

- New-chat stuck on "Thinking": terminal/attention state transitions
  (turn finished, error, or agent now waiting on user) were RAF-batched.
  Electron throttles requestAnimationFrame to ~0 while the window is
  backgrounded, occluded, or unfocused, stranding the deferred flush. Flush
  critical transitions (!busy || needsInput) synchronously; keep the busy
  heartbeat RAF-batched to avoid scroll churn.

Does not touch the messaging-source exclusion in chat recents queries.

* fix(desktop): stop excluding messaging platforms from chat recents

The "keep chat recents focused" change excluded every messaging-platform
source (telegram, discord, slack, …) from the recents query. That silently
undid the messaging-source-folder feature already on main (ede4f5a): the
sidebar builds those folders purely from the loaded recents page, so once the
sources were filtered out the folders never rendered — telegram and friends
vanished from the left sidebar.

Only cron stays excluded (it has its own dedicated section). Messaging
sessions belong in the sidebar and render with their platform folder/icon.
Removes the now-unused MESSAGING_SESSION_SOURCE_IDS export.

* fix(desktop): give each messaging platform its own self-managed sidebar section

Recents are local-only again: cron and every messaging platform are excluded
from the chat-recents query, so "Load more" pages through interactive local
chats instead of interleaving gateway threads that bury them.

Each messaging platform (telegram, discord, ...) is now fetched as its own
slice (refreshMessagingSessions) and rendered as a self-managed sidebar
section with its platform icon, count, and per-platform "load more" — no
source-grouping magic inside recents.

Handed-off sessions (live source becomes local after a handoff) keep their
origin-platform badge on the row via handoff_platform, so a Telegram thread
continued in the desktop still reads as Telegram.

* fix(desktop): self-heal a stranded routed session in route-resume

An intermittent create/stream race can leave selected/active session ids
null while the route stays on /:sid — the transcript then sticks empty
even though the turn completed and persisted (the "second Ctrl+N shows no
response" symptom). The pathname didn't change, so route-resume's normal
gate skipped and the view stayed stuck.

Resume whenever the routed session isn't the loaded one, gated on
freshDraftReady so the /:sid -> /new transition (which also momentarily
nulls selected/active a render before the pathname flips) is NOT treated
as stranded. selectedStoredSessionIdRef is set synchronously at resume
entry, so this can't loop, and the resume cached fast-path restores the
already-streamed messages without a refetch.

* fix(desktop): bypass smooth reveal on primary markdown stream

Render main assistant text through deferred markdown directly instead of the smooth-reveal wrapper. This isolates the wrapper to reasoning surfaces and avoids the intermittent blank-response regression after consecutive new-session flows.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 10, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 11, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 11, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 12, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 12, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 12, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 12, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 12, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 13, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 13, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 13, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 13, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 13, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 13, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
ValentinSergief pushed a commit to ValentinSergief/hermes-agent that referenced this pull request Jun 13, 2026
…ced spacing, running dot

- Move cron jobs section outside scrollable sessions container
  into a Fragment sibling (fixes zoom-position regression from NousResearch#42537)
- Compact cron jobs content to ~4 visible items
- Reduce nav row bottom padding for balanced sidebar spacing
- Add animate-ping indicator on cron job dot while executing
  (timing heuristic: next_run_at in recent past = job running)
- Use same accent glow + ring animation as live session dots

2 files, +20/-8.
alt-glitch pushed a commit that referenced this pull request Jun 14, 2026
…Ctrl+N regressions (#42537)

* fix(desktop): keep chat recents focused and reset hotkey target

Exclude messaging platform threads from chat recents pagination so Load More returns chat sessions, and clear stale quick-create profile state before Ctrl+N starts a new session.

* fix(desktop): surface new sessions in sidebar + unstick new-chat Thinking

Two renderer regressions in the desktop chat app:

- Sidebar ordering: orderByIds/reconcileOrderIds appended ids missing from
  the persisted order to the BOTTOM. Callers pass recency-sorted lists
  (newest first), so a brand-new Ctrl+N session sank below the saved order
  and read as "my latest session never showed up". Prepend fresh ids so new
  activity surfaces at the top.

- New-chat stuck on "Thinking": terminal/attention state transitions
  (turn finished, error, or agent now waiting on user) were RAF-batched.
  Electron throttles requestAnimationFrame to ~0 while the window is
  backgrounded, occluded, or unfocused, stranding the deferred flush. Flush
  critical transitions (!busy || needsInput) synchronously; keep the busy
  heartbeat RAF-batched to avoid scroll churn.

Does not touch the messaging-source exclusion in chat recents queries.

* fix(desktop): stop excluding messaging platforms from chat recents

The "keep chat recents focused" change excluded every messaging-platform
source (telegram, discord, slack, …) from the recents query. That silently
undid the messaging-source-folder feature already on main (b3d77bd): the
sidebar builds those folders purely from the loaded recents page, so once the
sources were filtered out the folders never rendered — telegram and friends
vanished from the left sidebar.

Only cron stays excluded (it has its own dedicated section). Messaging
sessions belong in the sidebar and render with their platform folder/icon.
Removes the now-unused MESSAGING_SESSION_SOURCE_IDS export.

* fix(desktop): give each messaging platform its own self-managed sidebar section

Recents are local-only again: cron and every messaging platform are excluded
from the chat-recents query, so "Load more" pages through interactive local
chats instead of interleaving gateway threads that bury them.

Each messaging platform (telegram, discord, ...) is now fetched as its own
slice (refreshMessagingSessions) and rendered as a self-managed sidebar
section with its platform icon, count, and per-platform "load more" — no
source-grouping magic inside recents.

Handed-off sessions (live source becomes local after a handoff) keep their
origin-platform badge on the row via handoff_platform, so a Telegram thread
continued in the desktop still reads as Telegram.

* fix(desktop): self-heal a stranded routed session in route-resume

An intermittent create/stream race can leave selected/active session ids
null while the route stays on /:sid — the transcript then sticks empty
even though the turn completed and persisted (the "second Ctrl+N shows no
response" symptom). The pathname didn't change, so route-resume's normal
gate skipped and the view stayed stuck.

Resume whenever the routed session isn't the loaded one, gated on
freshDraftReady so the /:sid -> /new transition (which also momentarily
nulls selected/active a render before the pathname flips) is NOT treated
as stranded. selectedStoredSessionIdRef is set synchronously at resume
entry, so this can't loop, and the resume cached fast-path restores the
already-streamed messages without a refetch.

* fix(desktop): bypass smooth reveal on primary markdown stream

Render main assistant text through deferred markdown directly instead of the smooth-reveal wrapper. This isolates the wrapper to reasoning surfaces and avoids the intermittent blank-response regression after consecutive new-session flows.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low — cosmetic, nice to have type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants