From a4f0a0a7424fefcc19e52b871c531ce54cb06964 Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Mon, 22 Jun 2026 03:06:52 +0900 Subject: feat(chat): stop generation button — abort without closing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consume the stop-generation handoff (no version bumps, no new types). - App store: stopGeneration() → POST /conversations/:id/stop (fire-and-forget) - Composer: stop button (square, error color) visible only while generating, next to the send/queue button - Existing event flow handles the rest: done with reason 'aborted' clears generating; conversation.statusChanged: idle updates the tab spinner 686 tests green. --- src/features/chat/ui/Composer.svelte | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/features') diff --git a/src/features/chat/ui/Composer.svelte b/src/features/chat/ui/Composer.svelte index d519efc..5952eca 100644 --- a/src/features/chat/ui/Composer.svelte +++ b/src/features/chat/ui/Composer.svelte @@ -9,6 +9,7 @@ let { onSend, onQueue, + onStop, contextSize = undefined, status = "idle", }: { @@ -20,6 +21,8 @@ * used regardless (tests / non-steering contexts). */ onQueue?: (text: string) => void; + /** Stop the in-flight generation (`POST /conversations/:id/stop`). */ + onStop?: () => void; // Current context occupancy (latest turn's contextSize), or `undefined` // when unknown — the status bar then shows "— tokens", never 0%. contextSize?: number | undefined; @@ -110,6 +113,23 @@ + {#if status === "running" && onStop} + + {/if} -- cgit v1.2.3