Repository navigation
Add a conversation contents drawer for navigating long chats #1026
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Summary
Add a right-side conversation contents drawer that indexes user messages and lets users jump directly to earlier points in a long chat without manually scrolling through the full transcript.
User Value
Long conversations are difficult to scan and revisit. User prompts already act as natural section headings: exposing them as a compact contents list makes it much faster to find a topic, compare earlier decisions, or resume work from a specific turn.
Proposed Behavior
- Add a compact contents control to the chat interface that opens a right-side drawer or off-canvas panel.
- Build the contents list from user messages only, in conversation order. Assistant, system, tool, and transient status messages are not listed.
- Derive each entry label from the first meaningful plain-text line of the user message, normalize whitespace, and truncate it to a stable display length. Provide an accessible fallback label for messages without usable text.
- Selecting an entry scrolls its source message into view, moves keyboard focus appropriately, and briefly highlights the destination without changing conversation data.
- Indicate the entry nearest the current viewport so users retain their location while scrolling.
- Rebuild the index when switching conversations and update it when a new user message is committed, messages are loaded, or the active timeline changes.
- Use a persistent side drawer on viewports where space allows and an off-canvas experience on smaller screens. The drawer must not cover the composer or conflict with existing sidebars, citation panels, or message actions.
- Render labels as text, not HTML, so message content cannot inject markup into the navigation UI.
Acceptance Criteria
- The chat interface exposes an accessible control for opening and closing the conversation contents drawer.
- The drawer lists each persisted user message in chronological order and does not list assistant, system, tool, or temporary messages.
- Each entry has a concise, readable, plain-text label with safe truncation and a fallback for attachment-only, image-only, or otherwise non-text prompts.
- Selecting an entry reliably scrolls to the matching message and gives users a visible destination cue.
- The active or nearest entry updates as the user moves through the conversation without causing scroll loops or noticeable lag.
- Sending a new prompt updates the index, and switching conversations clears all entries and state from the previous conversation.
- Long labels and large conversations do not overflow controls, shift the chat layout, or make the drawer unresponsive.
- Desktop, tablet, and mobile layouts remain usable; the message composer and existing panels are not obscured.
- The drawer supports keyboard operation, sensible focus management, screen-reader labels, and Escape-to-close behavior where applicable.
- Client-side rendering uses safe text APIs and never inserts user-authored message content as HTML.
- UI tests cover filtering by role, ordering, navigation, active-entry tracking, live updates, conversation switching, long text, non-text prompts, keyboard behavior, and responsive layouts.
Notes
- The first implementation should use user messages as the table-of-contents landmarks; grouping, search, generated summaries, and assistant-message entries can be considered separately.
- The index can be derived from message data already authorized and loaded by the chat experience; avoid introducing a second source of truth unless message pagination requires a lightweight server-provided index.
- Relevant implementation areas include the chat template,
static/js/chat/chat-messages.js, chat state/conversation switching modules, and existing local Bootstrap off-canvas patterns.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Type
Projects
- StatusShow more project fieldsReleased
Activity
paullizer commentedon Jul 30, 2026
Implemented by #1107 and targeted to the Development branch.