feat: UI improvements — FTS search, scrollbar, scroll-to-top, toolbar polish, copy buttons, server tooltip#34
Merged
Killea merged 3 commits intoKillea:mainfrom Mar 3, 2026
Conversation
UI-08: Floating scroll-to-top button (#btn-scroll-top) — visible when scrollTop > 300px, smooth-scrolls to top on click. UI-09: Styled scrollbar on #messages — 8px, blue accent thumb (webkit + Firefox scrollbar-color), hover brightens to --accent. UI-02: Full-text search (Fuse.js + SQLite FTS5) - Backend: messages_fts virtual table, INSERT trigger, backfill migration; msg_search() CRUD; GET /api/search endpoint; msg_search MCP tool - Frontend: Fuse.js v7.0.0 vendored; shared-search.js module; search bar with pills (Content/Author/Metadata), scope toggle (Current thread / All threads), prev/next navigation, highlight/dim, mark text wrapping, all-threads dropdown with click-to-navigate - Tests: 9 unit tests, 7 integration tests, 16 Vitest frontend tests (309 total pass, 0 regressions)
…, server tooltip - Unified toolbar button style (.toolbar-btn): transparent bg, border, accent-blue hover/active - Settings button: consistent SVG gear icon replacing emoji (topbar + thread header) - Theme toggle: dynamic sun/moon SVG icons replacing plain text - Desktop sidebar collapse/expand button (chevron animation, CSS .collapsed state) - Scroll-to-top button: resized 28px, absolute in #messages-wrap, no overlap with compose - #thread-pane scrollbar: matches #messages accent-blue style - Per-message copy button (.msg-copy-btn): clipboard + checkmark visual feedback - System prompt copy button (.msg-sys-prompt-copy-btn): on .msg-sys-prompt-body - Fix: #search-toggle-btn was white in light mode, now unified toolbar style - Fix: all-threads search navigation to empty zone (window.selectThread + poll-for-seq scroll) - Feat: Connected indicator rich tooltip via /api/metrics (30s cache) — uptime, started, schema version, threads by status, messages total + rate pills (1m/5m/15m), agents online
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR bundles two sets of UI improvements developed on
feat/ui-search-polish:PR H — Core features (commit 1)
/api/searchendpoint; frontend search bar with scope pills (current thread / all threads), Fuse.js fuzzy match, result highlighting, keyboard navigation#messages-wrap, auto-shows after 300px scroll, smooth scroll to top#messagesand#thread-panewith accent-blue thumb (webkit + Firefox scrollbar-width)UI Polish bundle (commit 2)
.toolbar-btnbase style — transparent background, light border, accent-blue hover/active scale.#btn-new-threadremains distinct CTA.#sidebar.collapsedCSS state.msg-copy-btn): Per-bubble copy-to-clipboard with checkmark feedback on hover.msg-sys-prompt-copy-btn): Copy button on.msg-sys-prompt-body(absolute bottom-right), withstopPropagationto avoid toggle conflict#search-toggle-btnwas white in light mode → now matches toolbar stylewindow.selectThread+_trySrollToPendingSeqpolling mechanism#status-dot/#status-labeltriggersAcbTooltip.showRich()with data from/api/metrics(30s cache) — uptime, started at, schema version, threads by status, messages total + activity rate (1m/5m/15m), agents onlineTest plan