From be4d26a54f02c35d674aa68da615add9a62d89cd Mon Sep 17 00:00:00 2001 From: dwrz Date: Mon, 29 Jun 2026 18:52:01 +0000 Subject: [PATCH] Add delete stopped streaming messages --- internal/service/static/main.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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);