diff --git a/src/client/ConnectionActionCard.tsx b/src/client/ConnectionActionCard.tsx index 3de99dc8..bbf3c275 100644 --- a/src/client/ConnectionActionCard.tsx +++ b/src/client/ConnectionActionCard.tsx @@ -9,7 +9,7 @@ import { api } from './api'; import { computerToolResult } from './ComputerToolCard'; type Receipt = { approvalId: string | null; - status: 'running' | 'done'; + status: 'running' | 'interrupted' | 'done'; result: ConnectionActionResult | null; }; const conversation = (threadId: string) => @@ -69,6 +69,7 @@ export function ConnectionActionCard({ const own = mismatch ? null : receipt; // A receipt that is still running is checked until the server finishes. const running = own?.status === 'running'; + const interrupted = own?.status === 'interrupted'; useEffect(() => { let active = true; const load = () => @@ -110,6 +111,7 @@ export function ConnectionActionCard({ }); return; } + if (!outcome) setReceipt({ approvalId, status: 'running', result: null }); // A previous approval may have run even if its response never arrived. const value = outcome ?? @@ -151,11 +153,13 @@ export function ConnectionActionCard({ ? 'Declined' : running ? 'Running' - : finished - ? 'Ended' - : !ready - ? 'Checking' - : 'Needs your approval'} + : interrupted + ? 'Interrupted' + : finished + ? 'Ended' + : !ready + ? 'Checking' + : 'Needs your approval'}
@@ -218,7 +222,9 @@ export function ConnectionActionCard({ ? 'Running…' : outcome ? 'Continue conversation' - : 'Approve & run'} + : interrupted + ? 'Retry & run' + : 'Approve & run'} {!outcome && (