From cac531148aae81477b495c17b4a474482b9b3821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=93=9B=F0=9D=93=B2=F0=9D=93=BD=F0=9D=93=BD?= =?UTF-8?q?=F0=9D=93=B5=F0=9D=93=AE=20=F0=9D=93=95=F0=9D=93=BB=F0=9D=93=AA?= =?UTF-8?q?=F0=9D=93=B7=F0=9D=93=B4?= Date: Fri, 26 Jun 2026 09:42:26 +0000 Subject: [PATCH] fix(desktop): show interrupt loading state --- packages/app/src/components/prompt-input.tsx | 59 ++++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index f9a99aebb6..d4a2d949ec 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -66,6 +66,7 @@ import { promptPlaceholder } from "./prompt-input/placeholder" import { createPromptInputTransientState } from "./prompt-input/transient-state" import { showToast } from "@/utils/toast" import { ImagePreview } from "@opencode-ai/ui/image-preview" +import { SessionProgressIndicatorV2 } from "@opencode-ai/session-ui/v2/session-progress-indicator-v2" export type PromptInputState = ReturnType @@ -339,6 +340,7 @@ export const PromptInput: Component = (props) => { () => prompt.capture(), Math.floor(Math.random() * EXAMPLES.length), ) + const [submissionState, setSubmissionState] = createStore({ interrupting: false }) const buttonsSpring = useSpring(() => (store.mode === "normal" ? 1 : 0), { visualDuration: 0.2, bounce: 0 }) const motion = (value: number) => ({ opacity: value, @@ -1180,6 +1182,22 @@ export const PromptInput: Component = (props) => { onSubmit: props.onSubmit, }) + const interrupt = () => { + if (submissionState.interrupting) return + if (platform.platform !== "desktop" || !props.controls.newLayoutDesigns) return abort() + + setSubmissionState("interrupting", true) + return Promise.resolve() + .then(() => abort()) + .finally(() => setSubmissionState("interrupting", false)) + } + + const handleV2Submit = (event: Event) => { + if (!stopping() || platform.platform !== "desktop") return handleSubmit(event) + event.preventDefault() + return interrupt() + } + const handleKeyDown = (event: KeyboardEvent) => { if ((event.metaKey || event.ctrlKey) && !event.altKey && !event.shiftKey && event.key.toLowerCase() === "u") { event.preventDefault() @@ -1232,7 +1250,7 @@ export const PromptInput: Component = (props) => { } if (working()) { - void abort() + void interrupt() event.preventDefault() event.stopPropagation() return @@ -1298,7 +1316,7 @@ export const PromptInput: Component = (props) => { return } if (working()) { - void abort() + void interrupt() event.preventDefault() } return @@ -1410,7 +1428,7 @@ export const PromptInput: Component = (props) => {
= (props) => {
- + + + + + +