From 1ff682e43a2264a19a6e625542838b9d80b82301 Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Mon, 8 Jun 2026 21:07:56 +0100 Subject: [PATCH 01/15] fix(ui): simplify permission denial feedback (#535) ## Summary - make permission Deny submit immediately while preserving optional feedback - replace the gated deny-confirmation UI with a compact one-line feedback field - remove visible feedback label/hint text and update placeholders across all locales ## Validation - npm run typecheck --workspace @codenomad/ui ## Notes - Left unrelated untracked .opencode/package-lock.json out of the commit. --- .../components/permission-approval-modal.tsx | 142 +++++++----------- packages/ui/src/components/tool-call.tsx | 3 - .../components/tool-call/permission-block.tsx | 122 ++++++--------- .../ui/src/lib/i18n/messages/de/toolCall.ts | 12 +- .../ui/src/lib/i18n/messages/en/toolCall.ts | 12 +- .../ui/src/lib/i18n/messages/es/toolCall.ts | 12 +- .../ui/src/lib/i18n/messages/fr/toolCall.ts | 12 +- .../ui/src/lib/i18n/messages/he/toolCall.ts | 12 +- .../ui/src/lib/i18n/messages/ja/toolCall.ts | 12 +- .../ui/src/lib/i18n/messages/ne/toolCall.ts | 12 +- .../ui/src/lib/i18n/messages/ru/toolCall.ts | 12 +- .../src/lib/i18n/messages/zh-Hans/toolCall.ts | 12 +- .../ui/src/styles/messaging/tool-call.css | 13 +- 13 files changed, 119 insertions(+), 269 deletions(-) diff --git a/packages/ui/src/components/permission-approval-modal.tsx b/packages/ui/src/components/permission-approval-modal.tsx index d5a3c6b2..d9329286 100644 --- a/packages/ui/src/components/permission-approval-modal.tsx +++ b/packages/ui/src/components/permission-approval-modal.tsx @@ -138,8 +138,18 @@ const PermissionApprovalModal: Component = (props) const [loadingSession, setLoadingSession] = createSignal(null) const [permissionSubmitting, setPermissionSubmitting] = createSignal>(new Set()) const [permissionError, setPermissionError] = createSignal>(new Map()) - const [rejectingPermissionId, setRejectingPermissionId] = createSignal(null) - const [rejectReason, setRejectReason] = createSignal("") + const [permissionRejectReasons, setPermissionRejectReasons] = createSignal>(new Map()) + + const getPermissionRejectReason = (permissionId: string) => permissionRejectReasons().get(permissionId) ?? "" + + const setPermissionRejectReason = (permissionId: string, value: string) => { + setPermissionRejectReasons((prev) => { + const next = new Map(prev) + if (value.length === 0) next.delete(permissionId) + else next.set(permissionId, value) + return next + }) + } const setPermissionBusy = (permissionId: string, busy: boolean) => { setPermissionSubmitting((prev) => { @@ -172,10 +182,7 @@ const PermissionApprovalModal: Component = (props) const sessionId = getPermissionSessionId(permission) if (!sessionId) throw new Error("Permission request is missing sessionID") await sendPermissionResponse(props.instanceId, sessionId, permissionId, response, message) - if (rejectingPermissionId() === permissionId) { - setRejectingPermissionId(null) - setRejectReason("") - } + setPermissionRejectReason(permissionId, "") } catch (error) { setPermissionItemError( permissionId, @@ -379,86 +386,53 @@ const PermissionApprovalModal: Component = (props) {primaryTitle()} - -
- - - -
- - } - > -
- -