From e70e46cbdad2a9de9d3e6324973f3091bf5be31e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 03:47:15 +0000 Subject: [PATCH 1/3] Initial plan From 7ab7839397b6e2033d844cc44a8a8eaee0328997 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 03:54:03 +0000 Subject: [PATCH 2/3] fix: support multiple Claude ask question answers Co-authored-by: OpenSource03 <29690431+OpenSource03@users.noreply.github.com> --- src/components/PermissionPrompt.tsx | 47 ++++++------ .../tool-renderers/AskUserQuestion.tsx | 17 +---- src/lib/ask-user-question.test.ts | 73 +++++++++++++++++++ src/lib/ask-user-question.ts | 62 ++++++++++++++++ src/types/protocol.ts | 2 + vitest.config.electron.ts | 3 +- 6 files changed, 168 insertions(+), 36 deletions(-) create mode 100644 src/lib/ask-user-question.test.ts create mode 100644 src/lib/ask-user-question.ts diff --git a/src/components/PermissionPrompt.tsx b/src/components/PermissionPrompt.tsx index 94e5798..846f360 100644 --- a/src/components/PermissionPrompt.tsx +++ b/src/components/PermissionPrompt.tsx @@ -1,6 +1,7 @@ import { useState } from "react"; import { ShieldAlert, Check, X, Send, Play } from "lucide-react"; import { Button } from "@/components/ui/button"; +import { getAskUserQuestionKey } from "@/lib/ask-user-question"; import type { PermissionRequest, RespondPermissionFn } from "@/types"; const TOOL_LABELS: Record = { @@ -24,7 +25,7 @@ interface QuestionOption { } interface Question { - id: string; + id?: string; question: string; header: string; isOther?: boolean; @@ -128,16 +129,16 @@ function AskUserQuestionPrompt({ request, onRespond }: PermissionPromptProps) { const questions = (request.toolInput.questions ?? []) as Question[]; const [selections, setSelections] = useState>>(() => { const init: Record> = {}; - for (const q of questions) { - init[q.id] = new Set(); + for (const [index, q] of questions.entries()) { + init[getAskUserQuestionKey(q, index)] = new Set(); } return init; }); const [freeText, setFreeText] = useState>({}); - const toggleOption = (questionId: string, label: string, multiSelect: boolean) => { + const toggleOption = (questionKey: string, label: string, multiSelect: boolean) => { setSelections((prev) => { - const current = prev[questionId] ?? new Set(); + const current = prev[questionKey] ?? new Set(); const next = new Set(current); if (multiSelect) { if (next.has(label)) next.delete(label); @@ -149,23 +150,24 @@ function AskUserQuestionPrompt({ request, onRespond }: PermissionPromptProps) { next.add(label); } } - return { ...prev, [questionId]: next }; + return { ...prev, [questionKey]: next }; }); - setFreeText((prev) => ({ ...prev, [questionId]: "" })); + setFreeText((prev) => ({ ...prev, [questionKey]: "" })); }; const handleSubmit = () => { const answers: Record = {}; const answersByQuestionId: Record = {}; - for (const q of questions) { - const custom = freeText[q.id]?.trim(); + for (const [index, q] of questions.entries()) { + const questionKey = getAskUserQuestionKey(q, index); + const custom = freeText[questionKey]?.trim(); if (custom) { answers[q.question] = custom; - answersByQuestionId[q.id] = [custom]; + answersByQuestionId[questionKey] = [custom]; } else { - const selected = [...(selections[q.id] ?? [])]; + const selected = [...(selections[questionKey] ?? [])]; answers[q.question] = selected.join(", "); - answersByQuestionId[q.id] = selected; + answersByQuestionId[questionKey] = selected; } } onRespond("allow", { @@ -175,9 +177,10 @@ function AskUserQuestionPrompt({ request, onRespond }: PermissionPromptProps) { }); }; - const hasAllAnswers = questions.every((q) => { - const custom = freeText[q.id]?.trim(); - const selected = selections[q.id]; + const hasAllAnswers = questions.every((q, index) => { + const questionKey = getAskUserQuestionKey(q, index); + const custom = freeText[questionKey]?.trim(); + const selected = selections[questionKey]; return custom || (selected && selected.size > 0); }); @@ -186,19 +189,20 @@ function AskUserQuestionPrompt({ request, onRespond }: PermissionPromptProps) {
{questions.map((q, qi) => (
0 ? "border-t border-border/40" : ""}`} >

{q.question}

{(q.options ?? []).map((opt) => { - const isSelected = selections[q.id]?.has(opt.label); + const questionKey = getAskUserQuestionKey(q, qi); + const isSelected = selections[questionKey]?.has(opt.label); return (