Repository navigation
mark unread messages in Chat, count them in the sidebar and notify on the desktop - #198
Merged
Merged
Conversation
…and tell of it on the desktop A conversation keeps how far its member has read it (AgentThread.readSeq), moved on by the Chat page while it is in view and by what the person says. The persona list says which conversations have something unread; the sidebar's Chat counts them, as does the window's title and the desktop app's badge; and, turned on under Account, a notification tells of an answer that comes while the person is elsewhere, opening the conversation when clicked.
…n looks at it, and tell of an answer once across tabs
…gain, tell of an answer the page has not shown, and open a notification's page where nothing listens
…n's last answer from its newest entry, keep a notification's path on the app's origin, and send no read the api refused again
…e-indicator # Conflicts: # packages/web/src/pages/account-page.tsx
hkonsti
force-pushed
the
hkonsti/unread-message-indicator
branch
from
November 5, 2026 22:52
38100c0 to
30bd828
Compare
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.
A conversation now keeps how far its member has read it:
AgentThread.readSeq, theseqof the last entry they have seen, moved on by the Chat page while it is in view and by what the person says, never back. Nothing tracked that before, so there was no way to tell what an agent said while the person was elsewhere.The persona list says which conversations have something unread, and a new
POST chat/personas/:personaId/readmarks one read to its end. In the web app a provider around the human side polls the list from every page and on focus: the sidebar's Chat counts the conversations with something new, as does the window's title, and each such row in Chat's list is marked, the open one never. Turned on under Account, a notification tells of an answer that comes while the person is elsewhere and opens the conversation when clicked: through the browser's Notification API, or through the desktop app, whose preload gains notify, the page to open and a badge count, and whose main process shows the system's notification, focuses the window and sets the Dock badge.The migration backfills every thread's cursor to its last entry, so nothing already there turns unread on deploy. A background tab reads nothing: marking happens only while the page is visible, so what comes then is told of like anywhere else. Verified against the local stack: the badge, the row mark, the title and the read marking behave; tests cover the store, the route, the provider, the notifications helper, the list marks and the sidebar badge.
Open workspace in Conductor