diff options
| author | Adam <[email protected]> | 2025-12-29 08:47:27 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-29 08:47:38 -0600 |
| commit | c4930eb6b219a2011cddc70a9b76f41809418114 (patch) | |
| tree | ce90fdd5b21622fcb8b1a3b851e0842d771ac112 /packages/ui/src | |
| parent | a24549fce77b12f025f0583063df2c7f23ad3ffc (diff) | |
| download | opencode-c4930eb6b219a2011cddc70a9b76f41809418114.tar.gz opencode-c4930eb6b219a2011cddc70a9b76f41809418114.zip | |
fix(desktop): more fine-grained state updates for permissions
Diffstat (limited to 'packages/ui/src')
| -rw-r--r-- | packages/ui/src/components/message-part.tsx | 9 | ||||
| -rw-r--r-- | packages/ui/src/components/session-turn.tsx | 23 |
2 files changed, 23 insertions, 9 deletions
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 |
