From c4930eb6b219a2011cddc70a9b76f41809418114 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 29 Dec 2025 08:47:27 -0600 Subject: fix(desktop): more fine-grained state updates for permissions --- packages/ui/src/components/message-part.tsx | 9 ++++++++- packages/ui/src/components/session-turn.tsx | 23 +++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) (limited to 'packages/ui/src') diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 2d39207ec..83811494c 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -623,7 +623,14 @@ ToolRegistry.register({ const sessionId = childSessionId() if (!sessionId) return undefined const permissions = data.store.permission?.[sessionId] ?? [] - return permissions.toSorted((a, b) => a.id.localeCompare(b.id))[0] + return permissions.reduce( + (result, perm) => { + if (!result) return perm + if (perm.id < result.id) return perm + return result + }, + undefined as (typeof permissions)[number] | undefined, + ) }) const childToolPart = createMemo(() => { diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 8e9aa9f23..e1a392bf0 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -4,7 +4,7 @@ import { useDiffComponent } from "../context/diff" import { getDirectory, getFilename } from "@opencode-ai/util/path" import { checksum } from "@opencode-ai/util/encode" import { Binary } from "@opencode-ai/util/binary" -import { createEffect, createMemo, For, Match, onCleanup, ParentProps, Show, Switch } from "solid-js" +import { createEffect, createMemo, For, Match, on, onCleanup, ParentProps, Show, Switch } from "solid-js" import { createResizeObserver } from "@solid-primitives/resize-observer" import { DiffChanges } from "./diff-changes" import { Typewriter } from "./typewriter" @@ -193,11 +193,16 @@ export function SessionTurn( return false }) + const permissions = createMemo(() => data.store.permission?.[props.sessionID] ?? []) + const permissionCount = createMemo(() => permissions().length) + const permissionParts = createMemo(() => { - const permissions = data.store.permission?.[props.sessionID] ?? [] - if (!permissions.length) return [] as { part: ToolPart; message: AssistantMessage }[] + if (props.stepsExpanded) return [] as { part: ToolPart; message: AssistantMessage }[] + + const items = permissions() + if (!items.length) return [] as { part: ToolPart; message: AssistantMessage }[] - const ids = new Set(permissions.map((perm) => perm.callID)) + const ids = new Set(items.map((perm) => perm.callID)) const result: { part: ToolPart; message: AssistantMessage }[] = [] for (const message of assistantMessages()) { @@ -371,11 +376,13 @@ export function SessionTurn( } }) - createEffect(() => { - if (permissionParts().length > 0) { + createEffect( + on(permissionCount, (count, prev) => { + if (!count) return + if (prev !== undefined && count <= prev) return autoScroll.forceScrollToBottom() - } - }) + }), + ) createEffect(() => { if (working() || !isLastUserMessage()) return -- cgit v1.2.3