From f9d62515fb9847ea7d2a6a54bfd1dc35b17ad689 Mon Sep 17 00:00:00 2001 From: netsky-lab Date: Wed, 1 Jul 2026 05:56:39 +0000 Subject: [PATCH] fix(tui): scroll to bottom when returning from subagent --- .../opencode/src/cli/cmd/tui/routes/session/index.tsx | 6 ++++-- .../opencode/src/cli/cmd/tui/routes/session/scroll.ts | 3 +++ packages/opencode/test/cli/tui/session-scroll.test.ts | 11 +++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 packages/opencode/src/cli/cmd/tui/routes/session/scroll.ts create mode 100644 packages/opencode/test/cli/tui/session-scroll.test.ts diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index b9b2e2a62..62bf0fa79 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -93,6 +93,7 @@ import { DialogGoUpsell } from "../../component/dialog-go-upsell" import { DialogTokenPlan } from "../../component/dialog-token-plan" import { SessionRetry } from "@/session/retry" import { getRevertDiffFiles } from "../../util/revert-diff" +import { conversationScrollKey } from "./scroll" addDefaultParsers(parsers.parsers) @@ -1082,8 +1083,9 @@ export function Session() { } }) - // snap to bottom when session changes - createEffect(on(() => route.sessionID, toBottom)) + // Snap to bottom when the rendered conversation changes. Subagent views share + // the same sessionID, so key by agentID as well as sessionID. + createEffect(on(() => conversationScrollKey({ sessionID: route.sessionID, agentID: currentAgentID() }), toBottom)) return ( { + expect(conversationScrollKey({ sessionID: "ses_1", agentID: "main" })).toBe("ses_1:main") + expect(conversationScrollKey({ sessionID: "ses_1", agentID: "agent_1" })).toBe("ses_1:agent_1") +}) + +test("conversationScrollKey defaults missing agentID to main", () => { + expect(conversationScrollKey({ sessionID: "ses_1" })).toBe("ses_1:main") +})