chat: the @ list finds every open conversation, on every box, with spaces in the search - #1725
Conversation
…t shows them all Santosh reported a tab reading `cloudfl…` on the strip that `@chat:cloudfl` did not list. The match was fine; what the list held was not. - The recent list was a snapshot taken on the window's first `@` and kept for the life of the process, so a conversation started in another window after that, or named after it, was never on the list. It is read again every time the list opens, and not on the letters typed after the `@`. - A section was cut at eight rows with no sign of the rest. `@chat:` and `@team:` keep up to thirty-two and scroll; the bare `@` keeps eight per section beside the tasks and files. - Recent rows are keyed by the canonical transcript, the way tabs are, so a home reached through a symlink no longer lists the conversation in front, or every open tab a second time, as recent rows. - The manual says which conversations the list holds: every open tab except the one you are typing in, then the twenty most recent in this project. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… prefixes Home's box had a files-only `@` list, so `@chat:` typed there answered `no file matches`. One search behaves one way on every box: home's list now has the prefix words on its first row, the teams and conversations sections above the files, and the same `@team:`, `@chat:` and `@file:` prefixes. The catalogs are the same memory the conversation's list copies, the recent list is read again on each opening, and choosing a team or a conversation types exactly what it types in a conversation, through the one function both boxes now share. Home leaves no conversation off, because its sentence opens a new one. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`+` opens no file, so the window still carries the conversation it came from as the one in front, and the list left it off as though the person were typing inside it: `@chat:kim` beside a lit `tell me about kim jung il` said `no conversation matches`. The sentence typed on the start page opens a new conversation, so every open one is a reference there. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… list `@chat:who` found `who is kim jong il` and `@chat:who is` closed the list, because the token stopped at a space. It now walks back to the nearest `@` that begins a word, over up to three spaces, and every word of the needle must match, in any order, on teams, conversations and files alike: `@chat:who is`, `@team:har bor`, `@file:tui3 app`. Several words that match nothing close the list, since that is a sentence after a mention; one word that matches nothing still says so. One test now drives the same fixture and the same searches through a conversation's box, home's box and the new-chat page's box, so the three cannot drift apart again. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
With spaces allowed in the token, `@side-chat is a chat` walked back to the same `@` and was ranked: `is`, `a` and `chat` all matched `side chat` by their letters, the list reopened over the sentence, and enter put the mention back in its place. Two rules close that: a query that begins with the token this list just inserted, followed by a space, is the person writing on; and only the last word of a needle, the one still being typed, may match by its letters in order — the finished words before it match whole, as a prefix or a substring. The change entry moves from 1720, which another pull request now carries, to 1724; the real number is set when the pull request opens. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A bare @ walked back over up to three spaces, so ordinary prose such as `cc @ara on this` reopened the list on a matching path and enter replaced the sentence with it. Spaces now belong to prefixed searches only (`@chat:who is`, `@team:har bor`, `@file:tui3 app`); a bare @ ends at its first space as it did before, and punctuation after a chosen mention keeps the list closed. Home's @ list could panic with an index out of range (on dev too): opening it replaced the project row that supplied its folder, the loader then switched roots and cleared the paths under rows already ranked against them. Home now captures the folder before the edit, rebuilds rows with every catalog change, ignores walks from an older target, and the painters guard their indexes. A pasted opening on home now copies the same catalogs and starts the same reads as a typed one, and a first spaced search stays open until its catalog has been read. Recent rows and file walks arriving keep the row a person chose, and home's arrows keep the list's own cursor with them. Canonical recent keys are resolved inside the off-loop read, so the update loop does no symlink walks. Home's two composers draw a chosen team in its colour. The manual's @ sections are split, short, and say all of this; the change entry says what moved. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The previous commit captured home's @ file root from the row the cursor stood on before the person typed, so a list opened over another project's conversation offered that project's files while the foot, and the conversation the sentence then started, used this window's folder. The list now walks the pinned target or this window's file root (this machine's folder over --host, like a conversation's own list); the folder a home sentence opens in is unchanged from dev. Catalogs and rows still change together when the target moves, a walk from an older folder is ignored, and keys pressed with the list closed keep a completed walk. Every opening, typed or pasted, reads the recent list again, and a prefixed chat search waits for that answer instead of closing on the previous catalog. A chosen team is painted from the current team catalog, which is built only for a row holding a team mark, so a plain draft row allocates nothing. A conversation with no name of its own and nothing sent (a tab named only by its unsent draft) is not offered as a mention. The manual and the change entry say all of this. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An opening is now a new @ token, or the list coming back after the person dismissed it with esc. Letters typed into the same token, caret moves within it and the no-match rule hiding the list never start another read or another opening notice; before this, typing `@chat:no such words` read the recent list ten times. A later token starts its own read and an older answer cannot replace its rows. Home's box emptied by backspace drew the grid without syncing its @ list, so the list stayed "open" and the next @ was not an opening: a conversation started in another window was never offered on home (Ara's original head did the same). An empty home box now closes its list, and the next @ reads the recent list again. A data arrival keeps the row the person chose with the arrows while it is still offered; when nobody chose, the selection follows the best match, so a fresh read that puts the exact title on top selects it. Only the window's own unsent conversation is left off the list; held, restored and side tabs are offered as before, so a first queued follow-up stays mentionable. The manual and the change entry say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The previous commit let every new @ token start its own recent walk while earlier ones were still running, and each walk reads every session folder's meta.json: 64 quick token replacements meant 64 concurrent walks. Now one walk is in flight per window; openings while it runs share one follow-up walk after it lands, and the answer that began before them never settles their search as fresh. A burst costs at most two walks. After esc on a bare @, a comma or a period reopened the list and read again, because the separator rule only looked at a non-empty query. A space or punctuation after esc now keeps the list closed for a bare @ as it does for a typed one; a letter still reopens it with one read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Taking over: drove the real binary on both roads (plain
The manual pages and the change entry say all of the above. Left for later: switching conversations while a recent read is still in flight and then typing |
AbirAbbas
left a comment
There was a problem hiding this comment.
Verified and taken over; merging.
A tab reading
cloudfl…was on the strip and@chat:cloudfldid not list it. The match was fine; what the list held, and where it was offered, was not.This is fixed now
What changed
@, or named after it, was never on the list for as long as the window lived.@chat:and@team:keep up to thirty-two rows and scroll, instead of the first eight with no sign of the rest. The bare@still keeps eight per section beside the tasks and files.+/ctrl+t) leaves no conversation off. It opens no file, so the window still carried the conversation it came from as the one in front and left it off as if you were typing inside it —@chat:kimbeside a littell me about kim jong ilsaidno conversation matches.completeTeamIn,completeChatIn) as a conversation's box. Home leaves no conversation off, because its sentence opens a new one.@may have spaces.@chat:whofoundwho is kim jong iland@chat:who isclosed the list. The token walks back over up to three spaces to the nearest@that begins a word, and every word must match, in any order, on teams, conversations and files alike:@chat:who is,@team:har bor,@file:tui3 app. Only the last word, the one still being typed, may match by its letters in order; the finished words before it match whole. Several words that match nothing close the list, and the words typed after a mention the list just inserted never reopen it./resume), the spaces rule, and that home and the new-chat page have the same list.Tests
TestTheAtListIsTheSameOnEveryBoxdrives one fixture and the same searches through a conversation's box, home's box and the new-chat page's box, so the three cannot drift apart. The rest: recents re-read on each opening (conversation and home), the scoped cap, canonical keys, the start page,atTokenwith spaces, every-word matching with the finished-word rule, and the sentence after a chosen mention staying in the box and being sent whole.Verified in the real binary with the tmux rig and a stub model: a conversation named in a second window showing up in the first window's
@chat:list, home's list with its sections, the start-page case from the owner's screenshot, and the spaced searches.Not done: the task section's own scorer (
session.SearchTaskIndex) still treats a spaced needle as one phrase. Matching the words of a transcript rather than only its title is not in this change.🤖 Generated with Claude Code