fix: cache pending approval denials on ESC interrupt (#479)

Co-authored-by: Letta <noreply@letta.com>
This commit is contained in:
Charles Packer
2026-01-06 15:05:16 -08:00
committed by GitHub
parent f6bbac4f63
commit 90018b6fd9

View File

@@ -2234,7 +2234,19 @@ export default function App({
} }
refreshDerived(); refreshDerived();
// Clear any pending approvals since we're cancelling // Cache any pending approvals as denials to send with the next message
// This tells the server "I'm rejecting these approvals" so it doesn't stay stuck waiting
if (pendingApprovals.length > 0) {
const denialResults = pendingApprovals.map((approval) => ({
type: "approval" as const,
tool_call_id: approval.toolCallId,
approve: false,
reason: "User interrupted the stream",
}));
setQueuedApprovalResults(denialResults);
}
// Clear local approval state
setPendingApprovals([]); setPendingApprovals([]);
setApprovalContexts([]); setApprovalContexts([]);
setApprovalResults([]); setApprovalResults([]);
@@ -2282,6 +2294,7 @@ export default function App({
isExecutingTool, isExecutingTool,
refreshDerived, refreshDerived,
setStreaming, setStreaming,
pendingApprovals,
]); ]);
// Keep ref to latest processConversation to avoid circular deps in useEffect // Keep ref to latest processConversation to avoid circular deps in useEffect