+ {canEdit && isHuman && onEditAndRegenerate && !isEditing && (
+
+
+
+ )}
{feedback !== undefined && runId && threadId && (
void;
+ onDraftChange: (value: string) => void;
+ onSubmit: () => void | Promise;
+ };
}) {
const { t } = useI18n();
const isHuman = message.type === "human";
@@ -447,11 +533,57 @@ function MessageContent_({
/>
)}
{filesList}
- {contentToDisplay && (
+ {editState ? (
+
+ ) : contentToDisplay ? (
- )}
+ ) : null}
);
}
diff --git a/frontend/src/components/workspace/messages/message-list.tsx b/frontend/src/components/workspace/messages/message-list.tsx
index f6544d033..9e3b16b3a 100644
--- a/frontend/src/components/workspace/messages/message-list.tsx
+++ b/frontend/src/components/workspace/messages/message-list.tsx
@@ -51,6 +51,7 @@ import {
getAssistantTurnCopyData,
getAssistantTurnUsageMessages,
getBranchableAssistantGroupIds,
+ getLatestEditableTurn,
getMessageGroups,
getStreamingMessageLookup,
hasContent,
@@ -333,9 +334,11 @@ export function MessageList({
loadMoreHistory,
isHistoryLoading,
onRegenerateMessage,
+ onEditAndRegenerateMessage,
onSubmitHumanInput,
onBranchTurn,
canRegenerate = false,
+ canEdit = false,
canBranch = false,
enableSidecarActions = true,
sidecarSurface = false,
@@ -354,7 +357,11 @@ export function MessageList({
onRegenerateMessage?: (
messageId: string,
supersededMessageIds: string[],
- ) => void | Promise