diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte
index 6d471502f..a70e79c45 100644
--- a/src/lib/components/chat/Messages/ResponseMessage.svelte
+++ b/src/lib/components/chat/Messages/ResponseMessage.svelte
@@ -332,9 +332,37 @@
}
};
+ let preprocessedDetailsCache = [];
+
+ function preprocessForEditing(content: string): string {
+ // Replace ... with unique ID placeholder
+ const detailsBlocks = [];
+ let i = 0;
+
+ content = content.replace(//gi, (match) => {
+ detailsBlocks.push(match);
+ return ` `;
+ });
+
+ // Store original blocks in the editedContent or globally (see merging later)
+ preprocessedDetailsCache = detailsBlocks;
+
+ return content;
+ }
+
+ function postprocessAfterEditing(content: string): string {
+ const restoredContent = content.replace(
+ / /g,
+ (_, index) => preprocessedDetailsCache[parseInt(index)] || ''
+ );
+
+ return restoredContent;
+ }
+
const editMessageHandler = async () => {
edit = true;
- editedContent = message.content;
+
+ editedContent = preprocessForEditing(message.content);
await tick();
@@ -343,7 +371,8 @@
};
const editMessageConfirmHandler = async () => {
- editMessage(message.id, editedContent ? editedContent : '', false);
+ const messageContent = postprocessAfterEditing(editedContent ? editedContent : '');
+ editMessage(message.id, messageContent, false);
edit = false;
editedContent = '';
@@ -352,7 +381,9 @@
};
const saveAsCopyHandler = async () => {
- editMessage(message.id, editedContent ? editedContent : '');
+ const messageContent = postprocessAfterEditing(editedContent ? editedContent : '');
+
+ editMessage(message.id, messageContent);
edit = false;
editedContent = '';
diff --git a/src/lib/components/common/Collapsible.svelte b/src/lib/components/common/Collapsible.svelte
index 795231883..2aee6e5e7 100644
--- a/src/lib/components/common/Collapsible.svelte
+++ b/src/lib/components/common/Collapsible.svelte
@@ -1,5 +1,6 @@