+ {canEdit && isHuman && onEditAndRegenerate && !isEditing && (
+
+
+
+ )}
{feedback !== undefined && runId && threadId && (
void;
+ onDraftChange: (value: string) => void;
+ onSubmit: () => void | Promise;
+ };
}) {
const { t } = useI18n();
const isHuman = message.type === "human";
@@ -411,11 +497,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 fbf3ffcfa..f781df040 100644
--- a/frontend/src/components/workspace/messages/message-list.tsx
+++ b/frontend/src/components/workspace/messages/message-list.tsx
@@ -50,6 +50,7 @@ import {
getAssistantTurnCopyData,
getAssistantTurnUsageMessages,
getBranchableAssistantGroupIds,
+ getLatestEditableTurn,
getMessageGroups,
getStreamingMessageLookup,
hasContent,
@@ -332,9 +333,11 @@ export function MessageList({
loadMoreHistory,
isHistoryLoading,
onRegenerateMessage,
+ onEditAndRegenerateMessage,
onSubmitHumanInput,
onBranchTurn,
canRegenerate = false,
+ canEdit = false,
canBranch = false,
enableSidecarActions = true,
sidecarSurface = false,
@@ -353,7 +356,11 @@ export function MessageList({
onRegenerateMessage?: (
messageId: string,
supersededMessageIds: string[],
- ) => void | Promise