summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-29 14:40:53 -0600
committerAdam <[email protected]>2025-12-29 14:40:53 -0600
commit35a626e7113dfe1ea89d765dbffa41a7a648ff89 (patch)
tree03637f454a943a9e3ee481194ac6a3029f720c30
parentbb7b0ff2213406078693d9b2900bd7c4493c9cf5 (diff)
downloadopencode-35a626e7113dfe1ea89d765dbffa41a7a648ff89.tar.gz
opencode-35a626e7113dfe1ea89d765dbffa41a7a648ff89.zip
fix(desktop): don't flash permissions with auto-accept
-rw-r--r--packages/ui/src/components/message-part.tsx18
1 files changed, 15 insertions, 3 deletions
diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx
index be40fbd33..cf4daebbf 100644
--- a/packages/ui/src/components/message-part.tsx
+++ b/packages/ui/src/components/message-part.tsx
@@ -93,7 +93,7 @@ export type PartComponent = Component<MessagePartProps>
export const PART_MAPPING: Record<string, PartComponent | undefined> = {}
-const TEXT_RENDER_THROTTLE_MS = 250
+const TEXT_RENDER_THROTTLE_MS = 100
function same<T>(a: readonly T[], b: readonly T[]) {
if (a === b) return true
@@ -441,6 +441,18 @@ PART_MAPPING["tool"] = function ToolPartDisplay(props) {
return next
})
+ const [showPermission, setShowPermission] = createSignal(false)
+
+ createEffect(() => {
+ const perm = permission()
+ if (perm) {
+ const timeout = setTimeout(() => setShowPermission(true), 50)
+ onCleanup(() => clearTimeout(timeout))
+ } else {
+ setShowPermission(false)
+ }
+ })
+
const [forceOpen, setForceOpen] = createSignal(false)
createEffect(() => {
if (permission()) setForceOpen(true)
@@ -466,7 +478,7 @@ PART_MAPPING["tool"] = function ToolPartDisplay(props) {
const render = ToolRegistry.render(part.tool) ?? GenericTool
return (
- <div data-component="tool-part-wrapper" data-permission={!!permission()}>
+ <div data-component="tool-part-wrapper" data-permission={showPermission()}>
<Switch>
<Match when={part.state.status === "error" && part.state.error}>
{(error) => {
@@ -507,7 +519,7 @@ PART_MAPPING["tool"] = function ToolPartDisplay(props) {
/>
</Match>
</Switch>
- <Show when={permission()}>
+ <Show when={showPermission() && permission()}>
{(perm) => (
<div data-component="permission-prompt">
<div data-slot="permission-message">{perm().title}</div>