diff --git a/packages/ui/src/components/permission-approval-modal.tsx b/packages/ui/src/components/permission-approval-modal.tsx index 37250b44..60bd512a 100644 --- a/packages/ui/src/components/permission-approval-modal.tsx +++ b/packages/ui/src/components/permission-approval-modal.tsx @@ -7,6 +7,7 @@ import { getPermissionQueue, getQuestionQueue, getQuestionEnqueuedAtForInstance, + sendPermissionResponse, } from "../stores/instances" import { ensureSessionParentExpanded, loadMessages, sessions as sessionStateSessions, setActiveSessionFromList } from "../stores/sessions" import { messageStoreBus } from "../stores/message-v2/bus" @@ -130,6 +131,45 @@ function resolveToolCallFromQuestion(instanceId: string, request: QuestionReques const PermissionApprovalModal: Component = (props) => { const [loadingSession, setLoadingSession] = createSignal(null) + const [permissionSubmitting, setPermissionSubmitting] = createSignal>(new Set()) + const [permissionError, setPermissionError] = createSignal>(new Map()) + + const setPermissionBusy = (permissionId: string, busy: boolean) => { + setPermissionSubmitting((prev) => { + const next = new Set(prev) + if (busy) next.add(permissionId) + else next.delete(permissionId) + return next + }) + } + + const setPermissionItemError = (permissionId: string, message: string | null) => { + setPermissionError((prev) => { + const next = new Map(prev) + if (!message) next.delete(permissionId) + else next.set(permissionId, message) + return next + }) + } + + async function handlePermissionDecision(permission: PermissionRequestLike, response: "once" | "always" | "reject") { + const permissionId = permission?.id + if (!permissionId) return + + if (permissionSubmitting().has(permissionId)) return + + setPermissionBusy(permissionId, true) + setPermissionItemError(permissionId, null) + + try { + const sessionId = getPermissionSessionId(permission) || "" + await sendPermissionResponse(props.instanceId, sessionId, permissionId, response) + } catch (error) { + setPermissionItemError(permissionId, error instanceof Error ? error.message : "Unable to update permission") + } finally { + setPermissionBusy(permissionId, false) + } + } const permissionQueue = createMemo(() => getPermissionQueue(props.instanceId)) const questionQueue = createMemo(() => getQuestionQueue(props.instanceId)) @@ -304,17 +344,52 @@ const PermissionApprovalModal: Component = (props) - -
- {primaryTitle()} + +
+ {primaryTitle()} +
+ +
+
+ + + +
+
+ + {(err) =>
{err()}
} +
+
+ +
Load session for more information.
+
-
Load session for more information.
- - } - > + } + > {(data) => (