Skip to content

feat(desktop): show profile ownership in all-profile recents - #86259

Open
wevial wants to merge 1 commit into
NousResearch:mainfrom
wevial:fix/flat-recents-profile-tags
Open

feat(desktop): show profile ownership in all-profile recents#86259
wevial wants to merge 1 commit into
NousResearch:mainfrom
wevial:fix/flat-recents-profile-tags

Conversation

@wevial

@wevial wevial commented Aug 14, 2026

Copy link
Copy Markdown

What does this PR do?

Shows the existing owning-profile identity glyph on ordinary recent-session rows when Hermes Desktop is displaying a flat All Profiles list.

Pinned sessions and search results already surface profile ownership in this view, but ordinary recents did not. That makes same-titled sessions—especially Bot Mode's canonical Bot Chat sessions—indistinguishable without opening them.

The implementation reuses the existing accessible ProfileTag / ProfileGlyph path and adds a small policy helper. It shows named-profile glyphs only when profile ownership is otherwise absent: flat All Profiles recents. Profile-grouped and scoped/single-profile views remain unchanged, as do pinned/search behavior, session titles, persistence, and routing.

Related Issue

Fixes #86258

Related: #66003 / #66449 introduced the same ownership treatment for pinned sessions and search results.

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

Changes Made

  • apps/desktop/src/app/chat/sidebar/recents-profile-tags.ts
    • add a pure policy helper for profile-tag visibility in ordinary recents
  • apps/desktop/src/app/chat/sidebar/recents-profile-tags.test.ts
    • cover flat All Profiles, Profile-grouped, and scoped-profile states
  • apps/desktop/src/app/chat/sidebar/index.tsx
    • request profile tags for ordinary recents only when the policy applies
  • apps/desktop/src/app/chat/sidebar/session-row.tsx
  • apps/desktop/src/app/chat/sidebar/sessions-section.tsx
    • update comments to describe the broader flat cross-profile use case

How to Test

  1. Configure two or more named profiles and create sessions under them.
  2. Select All Profiles and keep the Sessions sidebar in its flat/date-grouped view.
  3. Confirm named-profile rows show their existing color/initial glyph and that hovering exposes Profile: <name>.
  4. Change sidebar grouping to Profile and confirm redundant per-row glyphs disappear.
  5. Select one profile and confirm the scoped view remains unchanged.

Automated validation:

Focused policy test: 3/3 passed
Focused + related sidebar tests: 15/15 passed
Complete Desktop UI suite: 3,845/3,845 passed
Desktop TypeScript configurations: passed
ESLint on touched files: passed
Prettier check on touched files: passed
git diff --check: passed

Native validation used an isolated Electron instance on macOS, leaving the installed Hermes app untouched. It confirmed profile glyphs in flat All Profiles recents and suppression under Profile grouping.

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (fix(scope):, feat(scope):, etc.)
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature (no unrelated commits)
  • I've run pytest tests/ -q and all tests pass — N/A; this is a Desktop renderer-only change. The complete Desktop UI suite passed.
  • I've added tests for my changes (required for bug fixes, strongly encouraged for features)
  • I've tested on my platform: macOS 26.5.2, Hermes Desktop 0.20.1

Documentation & Housekeeping

  • I've updated relevant documentation (README, docs/, docstrings) — N/A; existing behavior is extended without a user-facing configuration change
  • I've updated cli-config.yaml.example if I added/changed config keys — N/A; no config changes
  • I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows — N/A; no architecture/workflow changes
  • I've considered cross-platform impact (Windows, macOS) per the compatibility guide; the change is renderer-only and uses the existing cross-platform glyph path
  • I've updated tool descriptions/schemas if I changed tool behavior — N/A; no tool behavior changes

Screenshots / Logs

Before and after: profile ownership glyphs in flat All Profiles recents

Before, ordinary flat All Profiles rows showed repeated Bot Chat titles with no profile ownership marker. After, the same rows show their existing named-profile color/initial glyphs; profile grouping removes the now-redundant row glyphs.

Native visual validation and the complete Desktop UI suite are reported above.

@alt-glitch alt-glitch added type/bug Something isn't working P3 Low — cosmetic, nice to have comp/desktop Electron desktop app (apps/desktop/*) area/profiles Multi-profile isolation, HERMES_HOME scoping labels Aug 14, 2026
@wevial
wevial force-pushed the fix/flat-recents-profile-tags branch from 1c790ce to 6703b0a Compare August 14, 2026 18:28
@wevial wevial changed the title fix(desktop): show profile ownership in all-profile recents feat(desktop): show profile ownership in all-profile recents Aug 14, 2026
@Enough1122

Copy link
Copy Markdown
Contributor

AI code review — automated review for reference, author can ignore or act on any point.

feat(desktop): show profile ownership in all-profile recents

No blocking issues found. A few minor observations:

  1. apps/desktop/src/app/chat/sidebar/recents-profile-tags.ts — the new helper is a pure boolean function with good test coverage; consider inlining it into session-row.tsx or sessions-section.tsx since it is a single expression, or keep it if the explicit name improves readability at the call site (the current call site reads well, so this is a style preference only).
  2. The gate showAllProfiles && !groupedByProfile only covers the recents lane. The comment on SidebarSessionRowProps.showProfile was updated to drop the "Pinned and search results" mention, but the diff doesn't show whether Pinned/search rows in the all-profiles view still pass showProfile independently — if they do, the two paths now derive the tag decision differently (recents via the helper, pinned/search via their own prop wiring). Worth a quick check that both stay consistent with the updated doc comment.
  3. session-row.tsx doc comment change ("flat cross-profile lists in the All-profiles view where no profile group header communicates ownership") is a nice clarification — the implicit assumption is that group headers, when present, always render even in collapsed state. If a collapsed group header hides its label, rows inside a collapsed group could lose ownership context; not observable from this diff, just flagging the coupling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/profiles Multi-profile isolation, HERMES_HOME scoping comp/desktop Electron desktop app (apps/desktop/*) 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.

Desktop: show owning profile in flat All Profiles recents

3 participants