diff --git a/internal/service/static/main.js b/internal/service/static/main.js index 4f3d998..a643102 100644 --- a/internal/service/static/main.js +++ b/internal/service/static/main.js @@ -1508,6 +1508,8 @@ class Odidere { this.isAutoScrollEnabled = true; this.currentController = new AbortController(); + let streamingMessage = null; + try { const hasNewInput = text || this.attachments.length > 0 || this.locationData; @@ -1572,7 +1574,6 @@ class Odidere { // Stash assistant messages with tool_calls until their results arrive. let pendingTools = null; - let streamingMessage = null; const streamingMeta = (usage, timings) => { const meta = {}; if (voice) meta.voice = voice; @@ -1787,6 +1788,25 @@ class Odidere { } catch (e) { if (e.name === 'AbortError') { console.debug('request aborted'); + if (streamingMessage) { + const $msg = streamingMessage.$el; + const $deleteBtn = document.createElement('button'); + $deleteBtn.type = 'button'; + $deleteBtn.className = + 'message__action-btn message__action-btn--delete'; + $deleteBtn.dataset.action = 'delete'; + $deleteBtn.setAttribute('aria-label', 'Delete message'); + $deleteBtn.innerHTML = ``; + $deleteBtn.addEventListener('click', (e) => + this.#handleDeleteClick(e, streamingMessage.message.id), + ); + $msg + .querySelector('.message__actions-buttons') + .insertBefore( + $deleteBtn, + $msg.querySelector('.message__actions-buttons').firstChild, + ); + } return; } console.error('failed to send request:', e);