Skip to content

Add a conversation contents drawer for navigating long chats #1026

Closed

Description

@paullizer

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.

Activity

  1. moved this from Pending Evaluation to Pending Assignment in Simple Chat Roadmapon Jul 14, 2026
  2. moved this from Pending Assignment to Scheduled in Simple Chat Roadmapon Jul 21, 2026
  3. paullizer commented on Jul 30, 2026

    @paullizer
    CollaboratorAuthor

    Implemented by #1107 and targeted to the Development branch.

  4. moved this from Scheduled to Released in Simple Chat Roadmapon Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions