mirror of
https://github.com/stablyai/orca.git
synced 2026-11-14 18:07:45 +00:00
* perf(native-chat): draw only the visible rows of an opened tool run An opened tool run rendered every call it held, so a long autonomous stretch kept thousands of rows, their DOM and their per-row state alive while only a dozen were visible in the run's capped box. The run now owns a keyed window over its rows (the shared TanStack virtualizer plus the existing row+offset scroll anchor): - rows keep today's keys and order; small runs and Find-with-a-query draw every row through the same keyed tree, so nothing remounts at the switch - the reader is remembered as a row and offset (pixel top while unmeasured), following the end only for new work, and forgetting on close as before - the box's cap keeps the measured height of opened details, including ones scrolled out of view; the full task list now remembers its open state - the first/last rows, a diff reveal target, recently interacted rows, the focused row's Tab neighbours and a text selection's span stay drawn Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): finish tool-run follow, keep reveals, bound per-move work Review repairs for the windowed tool run: - a follow started by new work always gets its completion frame, so a result that adds no row cannot leave it armed to chase later detail growth - the row anchor restores only when rows arrive or the pane shows again, so a diff reveal or the reader's own scrolling is not pulled back - opened-detail room is kept incrementally and travels with the run's remembered position across outer windowing - focus neighbours, item keys and window rows no longer cost work per move proportional to the run's length; selection is tracked only while visible - thoughts with no words are not keyboard stops; the restored row stays drawn until the reader moves Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): finish hidden follows, let reveals win, keep draw-all scrolling free Second review repair for the windowed tool run: - a follow is certified only by a real, visible tail measurement, and that measurement wakes it even when no size changed; a hidden pane resumes it - a diff reveal cancels any pending restore and follow on every request - a hidden pane returns to its row (not its reset pixel offset) on show - draw-every-row mode (Find, short runs) rebuilds nothing as the reader scrolls; selection spans re-derive after the pane was hidden - remembered detail heights are copied only when one changes Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): certify a tool-run follow only by a laid-out tail A follow's landing is confirmed only when the last row that draws something has a real, non-zero size; a measurement callback carrying a cached or zero size no longer ends it early, and a run whose rows draw nothing has no landing to wait for. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): keep draw-all tool runs cheap per scroll and prove follow wake paths Draw-all (Find) no longer records the scroll anchor or rebuilds the selection span on every scroll, and its trailing spacer skips the end scan. Tests now cover a task list crossing the window threshold and Find, and pin both follow-completion paths. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): skip anchor scans under a wide selection and recover the reader's row after A selection wider than a window keeps its rows drawn, so recording the anchor on each scroll would scan them all; recording now waits, as it does under Find. The reader's row is then taken from the virtualizer's offsets when recording resumes or the pane hides, so showing it again does not return to an older row. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): type the tool-run selection-span gate and settle the anchor on hide Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): merge duplicate tool-run window import Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore(native-chat): prune the structured session's compiler bailout after the main sync Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): keep the tool-run measurement callback current without a render-time ref write Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): keep a reader who jumps past an open run's drawn rows where they jumped The window redraws inside the scroll that moves it, and a restore still pending from earlier work could run first and send the reader back to the row they left. The reader's own scroll now points the anchor at their row from the window's offsets before that redraw. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): re-point the anchor on reader scrolls only while the run is windowed Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): keep a hidden tool run's saved row from its box's reset offset A hidden box resets its offset and may report that as a scroll or as the offset at unmount. Scroll recording (the run's and the anchor hook's) and the hook's unmount record now wait while the pane is hidden, so the row kept at hide time is the one a returning reader lands on. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): give an opened tool run sole ownership of its reader's place The run and the shared scroll-anchor hook each decided when a saved row still owned the box, and each local exclusion left another path for a stale restore or capture. The run now keeps one row-and-offset place from the window's full measurement model, admits a landing only on mount or show, lets every reader scroll retire pending work first, records nothing while hidden, and takes a reveal before any landing. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): confirm every tool-run landing correction and model the browser's scroll report in tests A real change (size, row list, the held row's measurement) now grants a landing a fresh, bounded confirmation budget, so a correction made after an earlier budget ran out is still confirmed. A pending landing's own writes no longer re-arm following. The reader harness delivers the scroll event a browser sends after an offset change. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(native-chat): keep the reveal-return case on one memory record and before the reveal's scroll report Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(native-chat): return the reader harness's scroll writes to their earlier behaviour (rig-stop ruling) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): keep a revealed file's own row as the tool run's saved place A reveal now records the card's row and offset from the page as the card aligns, rather than reading the window's size model, which may still hold that row's collapsed height. Remount tests report the landing's own scroll the way a browser would; the pinned reveal case needs no report. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(native-chat): read an opened tool run's reader place from the rows actually drawn The window's size model can hold a row's old height for a frame after it grows, so a scroll report read through it could record a later row than the reader sees. Capture now takes the row at the box top from the drawn rows' own geometry, found by a binary search over the run's in-flow children, and uses the model only where the top lies in an undrawn gap; a box with no geometry keeps the last place. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(native-chat): type the reader-position owner test's rows without assertions Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>