feat(ui): surface human feedback delivery states

Show retrying, exhausted, and recovered delivery state in classic and default task threads, with attention links and explicit retry controls.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-08-16 20:05:28 +00:00
1 parent a6c28fa414
commit 2879b35607
21 files changed
+1331 -10

No files matched your search

@@ -43,6 +43,9 @@ interface TaskChatThreadViewProps {
renderMessageActions?: (item: TaskChatMessageItem) => ReactNode;
/** Renders an interrupt action beside a queued human message. */
renderQueuedAction?: (item: TaskChatMessageItem) => ReactNode;
onRetryFeedbackDelivery?: (commentId: string) => Promise<void> | void;
retryingFeedbackDeliveryCommentId?: string | null;
failedFeedbackDeliveryRetryCommentId?: string | null;
/** Content appended inside the transcript scroller after the settled thread. */
tail?: ReactNode;
/** Optional streaming-aware key when `tail` changes without changing `items`. */
@@ -59,6 +62,9 @@ function renderItem(
renderBrief?: () => ReactNode,
renderMessageActions?: (item: TaskChatMessageItem) => ReactNode,
renderQueuedAction?: (item: TaskChatMessageItem) => ReactNode,
onRetryFeedbackDelivery?: (commentId: string) => Promise<void> | void,
retryingFeedbackDeliveryCommentId?: string | null,
failedFeedbackDeliveryRetryCommentId?: string | null,
) {
switch (item.kind) {
case "message": {
@@ -73,6 +79,9 @@ function renderItem(
item={item}
actions={actions}
queuedAction={renderQueuedAction?.(item)}
onRetryFeedbackDelivery={onRetryFeedbackDelivery}
retryingFeedbackDeliveryCommentId={retryingFeedbackDeliveryCommentId}
failedFeedbackDeliveryRetryCommentId={failedFeedbackDeliveryRetryCommentId}
attachedTurn={
item.attachedTurn ? (
<TaskChatTurn
@@ -140,6 +149,9 @@ export function TaskChatThreadView({
renderBrief,
renderMessageActions,
renderQueuedAction,
onRetryFeedbackDelivery,
retryingFeedbackDeliveryCommentId,
failedFeedbackDeliveryRetryCommentId,
tail,
contentKey,
className,
@@ -161,6 +173,9 @@ export function TaskChatThreadView({
renderBrief,
renderMessageActions,
renderQueuedAction,
onRetryFeedbackDelivery,
retryingFeedbackDeliveryCommentId,
failedFeedbackDeliveryRetryCommentId,
)}
</div>
))}