FEATURE: add a scalable Chat Library with search, grouping, filters and keyboard navigation #162

Open
opened 2026-09-09 15:05:17 +00:00 by nsaspy · 0 comments
Owner

Parent direction: #23. Performance dependencies: #18, #19, #21.

Problem

The current primary chat discovery surface is a narrow sidebar list of loaded contexts. There is no first-class chat search or library surface, and the sidebar becomes both hard to scan and expensive to render as the collection grows.

A user with hundreds/thousands of chats needs a way to find a conversation by intent/metadata rather than scrolling an ever-longer list.

Product direction

Add a dedicated Chat Library / Navigator that works from lightweight catalog metadata rather than requiring every historical chat to be a hydrated AgentContext.

Core capabilities:

  • fuzzy/search-as-you-type by chat name and catalog metadata
  • filters for project, agent/profile, running/paused/error, branch/parent state, pinned/archived, and date ranges
  • sorting by recent activity, creation, name, project/profile, custom/plugin sort keys
  • grouping by project/profile/date/status and plugin-provided groups
  • pinned/favorites and archive/hide-from-recents workflow
  • recent/running section optimized for fast switching
  • parent/branch/thread visualization that is understandable without deeply nested tiny rows
  • compact metadata/preview cards or rows showing useful context without loading full chat history
  • keyboard-first switching / command-palette integration
  • responsive full-surface mode on desktop/mobile rather than forcing all discovery through the sidebar

Backend/API requirements

Do not fetch the entire hydrated context roster just to populate this surface.

Define a paginated/queryable chat-catalog API with:

  • stable cursor pagination
  • bounded page size
  • metadata-only payloads
  • deterministic sort semantics
  • server-side filtering/search for large collections
  • explicit catalog version/invalidation
  • on-demand hydrate/open action

Full-text message search may be a later/indexed layer; metadata search must not wait for it.

Plugin extensibility

Plugins must be able to contribute bounded, versioned extensions without forcing whole-list rescans:

  • badges/decorators
  • row/card actions
  • context-menu actions
  • filters/facets
  • sort/group keys with materialization/invalidation rules
  • optional preview metadata
  • plugin-owned library views

Preserve/bridge current sidebar row extension behavior.

Acceptance

  • Search/filter works interactively with 10,000+ catalog entries without hydrating all chats.
  • API is paginated and bounded; no initial request returns the entire historical corpus.
  • Opening a result hydrates/selects the chat correctly.
  • Running/recent chats remain quickly accessible even with a huge archive.
  • Parent/child/branched conversations are visually intelligible.
  • Pinned and archived state persists and has defined import/export behavior.
  • Keyboard navigation and accessible focus semantics are covered.
  • Plugin filters/actions/decorators have explicit performance budgets and invalidation semantics.
  • Mobile and desktop layouts are both usable.
  • Benchmarks include initial open, query latency, scroll/render frame time, and memory at 1k/10k/100k synthetic catalog rows.

Mirrored from lost-rob0t/a0-symbolics#24 via tracker sync.

Parent direction: #23. Performance dependencies: #18, #19, #21. ## Problem The current primary chat discovery surface is a narrow sidebar list of loaded contexts. There is no first-class chat search or library surface, and the sidebar becomes both hard to scan and expensive to render as the collection grows. A user with hundreds/thousands of chats needs a way to find a conversation by intent/metadata rather than scrolling an ever-longer list. ## Product direction Add a dedicated **Chat Library / Navigator** that works from lightweight catalog metadata rather than requiring every historical chat to be a hydrated AgentContext. Core capabilities: - fuzzy/search-as-you-type by chat name and catalog metadata - filters for project, agent/profile, running/paused/error, branch/parent state, pinned/archived, and date ranges - sorting by recent activity, creation, name, project/profile, custom/plugin sort keys - grouping by project/profile/date/status and plugin-provided groups - pinned/favorites and archive/hide-from-recents workflow - recent/running section optimized for fast switching - parent/branch/thread visualization that is understandable without deeply nested tiny rows - compact metadata/preview cards or rows showing useful context without loading full chat history - keyboard-first switching / command-palette integration - responsive full-surface mode on desktop/mobile rather than forcing all discovery through the sidebar ## Backend/API requirements Do not fetch the entire hydrated context roster just to populate this surface. Define a paginated/queryable chat-catalog API with: - stable cursor pagination - bounded page size - metadata-only payloads - deterministic sort semantics - server-side filtering/search for large collections - explicit catalog version/invalidation - on-demand hydrate/open action Full-text message search may be a later/indexed layer; metadata search must not wait for it. ## Plugin extensibility Plugins must be able to contribute bounded, versioned extensions without forcing whole-list rescans: - badges/decorators - row/card actions - context-menu actions - filters/facets - sort/group keys with materialization/invalidation rules - optional preview metadata - plugin-owned library views Preserve/bridge current sidebar row extension behavior. ## Acceptance - [ ] Search/filter works interactively with 10,000+ catalog entries without hydrating all chats. - [ ] API is paginated and bounded; no initial request returns the entire historical corpus. - [ ] Opening a result hydrates/selects the chat correctly. - [ ] Running/recent chats remain quickly accessible even with a huge archive. - [ ] Parent/child/branched conversations are visually intelligible. - [ ] Pinned and archived state persists and has defined import/export behavior. - [ ] Keyboard navigation and accessible focus semantics are covered. - [ ] Plugin filters/actions/decorators have explicit performance budgets and invalidation semantics. - [ ] Mobile and desktop layouts are both usable. - [ ] Benchmarks include initial open, query latency, scroll/render frame time, and memory at 1k/10k/100k synthetic catalog rows. --- *Mirrored from [`lost-rob0t/a0-symbolics#24`](https://github.com/lost-rob0t/a0-symbolics/issues/24)* via tracker sync.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nsaspy/a0-symbolics#162
No description provided.