From bc4291d670924bef36313614283523ee0fd25fb0 Mon Sep 17 00:00:00 2001 From: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com> Date: Fri, 2 Oct 2026 04:09:34 +0000 Subject: [PATCH 01/14] fix(native-chat): sending brings the latest into view, with visible jumps to latest and top Sending while scrolled up left the reader parked in old history, and the way back was a faint button. A send now resumes following, opening a row to read it stops following until it is closed, and Jump to latest and Jump to top sit above the composer. Refs #23797. --- .../native-chat/NativeChatComposer.tsx | 4 + .../NativeChatJumpControls.test.tsx | 67 +++ .../native-chat/NativeChatJumpControls.tsx | 99 ++++ ...eChatMessageList.growth-windowing.test.tsx | 3 +- ...MessageList.interrupted-turn-fold.test.tsx | 3 +- ...essageList.message-rail-windowing.test.tsx | 3 +- ...tiveChatMessageList.older-history.test.tsx | 3 +- ...atMessageList.provider-retry-runs.test.tsx | 3 +- ...ChatMessageList.queued-turn-order.test.tsx | 3 +- ...ChatMessageList.rail-history-jump.test.tsx | 76 ++- ...ChatMessageList.reader-navigation.test.tsx | 447 ++++++++++++++++++ ...hatMessageList.stream-render.perf.test.tsx | 3 +- ...ChatMessageList.subagent-sections.test.tsx | 3 +- ...eChatMessageList.task-list-frames.test.tsx | 3 +- .../NativeChatMessageList.test.tsx | 3 +- ...eChatMessageList.tool-stream-cost.test.tsx | 3 +- .../native-chat/NativeChatMessageList.tsx | 66 +-- .../NativeChatMessageList.turn-fold.test.tsx | 3 +- ...ativeChatMessageList.turn-history.test.tsx | 3 +- ...iveChatMessageList.turn-indicator.test.tsx | 3 +- ...veChatMessageList.turn-membership.test.tsx | 3 +- ...NativeChatMessageList.turn-timing.test.tsx | 3 +- ...iveChatMessageList.unsent-message.test.tsx | 3 +- .../NativeChatMessageList.windowing.test.tsx | 3 +- ...iveChatResolvedView.reveal-latest.test.tsx | 106 +++++ .../native-chat/NativeChatResolvedView.tsx | 32 +- ...ativeChatResolvedView.turn-status.test.tsx | 3 +- ...tructuredSession.launch-lifecycle.test.tsx | 14 + ...tiveChatStructuredSession.test-harness.tsx | 9 +- .../NativeChatStructuredSession.test.tsx | 81 +++- .../NativeChatStructuredSession.tsx | 16 +- .../NativeChatSubagentRun.test.tsx | 26 +- .../native-chat/NativeChatSubagentRun.tsx | 10 +- .../native-chat-app-root-test-render.tsx | 12 + .../native-chat-autoscroll.test.ts | 119 ++++- .../native-chat/native-chat-autoscroll.ts | 47 ++ .../native-chat/native-chat-composer-types.ts | 4 + .../native-chat-disclosure-store.ts | 10 +- .../native-chat-reader-scroll-input.ts | 6 +- .../native-chat-send-reveal-ratchet.test.ts | 22 + .../use-native-chat-composer-submit.test.tsx | 13 +- .../use-native-chat-composer-submit.ts | 1 + ...tive-chat-picker-command-dispatch.test.tsx | 7 +- ...use-native-chat-picker-command-dispatch.ts | 4 + ...use-native-chat-pty-composer-send.test.tsx | 16 +- .../use-native-chat-pty-composer-send.ts | 2 + .../use-native-chat-rail-history-jump.test.ts | 79 +++- .../use-native-chat-rail-history-jump.ts | 74 ++- .../use-native-chat-reader-opens.test.ts | 84 ++++ .../use-native-chat-reader-opens.ts | 75 +++ .../use-native-chat-reveal-latest.ts | 17 + ...ative-chat-session-option-command.test.tsx | 7 +- .../use-native-chat-session-option-command.ts | 6 +- ...ive-chat-structured-composer-send.test.tsx | 32 +- ...se-native-chat-structured-composer-send.ts | 4 + ...use-native-chat-transcript-scroll.test.tsx | 33 ++ .../use-native-chat-transcript-scroll.ts | 94 +++- .../use-native-chat-transcript-window.ts | 8 +- ...ructured-native-chat-submit-reveal.test.ts | 35 ++ ...se-structured-native-chat-submit-reveal.ts | 89 ++++ src/renderer/src/i18n/locales/en.json | 2 + src/renderer/src/i18n/locales/es.json | 2 + src/renderer/src/i18n/locales/fr.json | 2 + src/renderer/src/i18n/locales/ja.json | 2 + src/renderer/src/i18n/locales/ko.json | 2 + src/renderer/src/i18n/locales/zh.json | 2 + 66 files changed, 1894 insertions(+), 128 deletions(-) create mode 100644 src/renderer/src/components/native-chat/NativeChatJumpControls.test.tsx create mode 100644 src/renderer/src/components/native-chat/NativeChatJumpControls.tsx create mode 100644 src/renderer/src/components/native-chat/NativeChatMessageList.reader-navigation.test.tsx create mode 100644 src/renderer/src/components/native-chat/NativeChatResolvedView.reveal-latest.test.tsx create mode 100644 src/renderer/src/components/native-chat/native-chat-app-root-test-render.tsx create mode 100644 src/renderer/src/components/native-chat/native-chat-send-reveal-ratchet.test.ts create mode 100644 src/renderer/src/components/native-chat/use-native-chat-reader-opens.test.ts create mode 100644 src/renderer/src/components/native-chat/use-native-chat-reader-opens.ts create mode 100644 src/renderer/src/components/native-chat/use-native-chat-reveal-latest.ts create mode 100644 src/renderer/src/components/native-chat/use-structured-native-chat-submit-reveal.test.ts create mode 100644 src/renderer/src/components/native-chat/use-structured-native-chat-submit-reveal.ts diff --git a/src/renderer/src/components/native-chat/NativeChatComposer.tsx b/src/renderer/src/components/native-chat/NativeChatComposer.tsx index d9fb9f1ec2d7..05b4bb3097a7 100644 --- a/src/renderer/src/components/native-chat/NativeChatComposer.tsx +++ b/src/renderer/src/components/native-chat/NativeChatComposer.tsx @@ -63,6 +63,7 @@ const NativeChatComposerPane = forwardRef { + const onLatest = vi.fn() + const startFromBeginning = vi.fn() + render( + + ()} + /> +