Repository navigation
feat: pin a session; clicking no longer reorders the list; bigger work-row marks on iOS - #653
Merged
Merged
Conversation
… counts as interaction
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.
What
Pin a session. In the sessions rail a thumbtack appears at the top right of a session card on hover, beside the "open side by side" button, which moves over to make room. Click it and the pin turns solid; the session jumps to the top of its group and stays there, across reloads and devices, until you click it again.
Also, from the same ask: the iOS work rows' harness, trigger and run-location marks were too small and are now readable.
How
pinned_atonlocal_terminals(migration1792000000_local_terminal_pins),pinnedAton the sharedLocalTerminaltype (Swift and Kotlin regenerated),POST/DELETE /api/local/terminals/:id/pinanswering the updated row (404 when not yours),pinTerminal/unpinTerminalidempotent and publishinglocal:changedso other tabs and the apps re-sort.session-order.tsputs pinned sessions first within the live and finished sections (their own usual order among themselves); the rail's row gains the pin button (session-pin-<id>,aria-pressed), optimistic so the row moves at once and the feed's next refresh agrees; the split button keeps its behaviour. The pinned glyph is the heading colour with a filled icon, so it reads solid white on the dark theme and solid dark on the light one.docs/optio-local.md; CHANGELOG.Also: clicking a session no longer moves it
Jon noticed sessions still jumping in the rail. Lists order sessions by when you last typed into them, but the server counted every input frame as typing. The browser's terminal sends more than keystrokes on that path: the focus-in report a click produces when the program has focus reporting on (Claude Code does), mouse reports, and the emulator's own answers to the program's queries. Opening or clicking a session therefore stamped it as "just typed into" and jumped it to the top.
isTerminalTypingin@optio/shared(query replies, mouse and focus reports excluded; escape-prefixed keys, pastes and ⌃F3 kept) now gates the interaction stamp inws/local-terminal-stream.ts; the web's pointer-report classifier moved to the shared module so both sides agree. Tests: 7 shared cases, the web's 11 stream-policy cases.Tests
e2e/session-pin.spec.ts: two live shells on one fake daemon; hover → pin → the row is first andaria-pressed; the server row haspinnedAt; a reload keeps the order; unpin restores it (passes, 25 s).session-order.test.ts+3 (pinned first within a section, pinned finished rows, null vs missing); web tier 739 / 739.local-terminal-pin.int.test.ts(pin, idempotent pin time, unpin, re-unpin); unit tier 2960 / 2960; OpenAPI dump valid with the two routes.pnpm turbo typecheck13 / 13, Prettier clean, migration prefix check clean.