fix(web): keep composer enabled while generating and treat stop as neutral (BUG-551, BUG-552)

Enter now queues one follow-up instead of dropping it, and a rectification stop leaves the streamed reply with a grey notice instead of an error alert.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-06 13:08:43 +08:00
co-authored by Cursor
parent f5566c06ef
commit 055b7adca9
18 changed files with 534 additions and 74 deletions
+17
View File
@@ -0,0 +1,17 @@
export const COMPOSER_QUEUE_LABEL = "已排队,回答结束后发出";
export const COMPOSER_QUEUE_RECALL_LABEL = "撤回";
export type QueuedDraftSettle = "send" | "restore";
export function appendQueuedText(current: string, incoming: string): string {
const next = incoming.trim();
if (!next) return current.trim();
if (!current.trim()) return next;
return `${current.trimEnd()}\n${next}`;
}
export function queuedDraftSettleAction(
phase: "completed" | "succeeded" | "stopped" | "failed" | "recovering" | "readonly",
): QueuedDraftSettle {
return phase === "completed" || phase === "succeeded" ? "send" : "restore";
}
@@ -34,6 +34,10 @@ export const RECTIFICATION_EMPTY_COPY = "这段校正还没有开始。";
export const RECTIFICATION_EMPTY_ACTION_LABEL = "开始提问";
export const RECTIFICATION_HYDRATION_INCOMPLETE_NOTICE = "校正记录没有完全加载,可以继续。";
export const RECTIFICATION_STOPPED_NOTICE = "已停止,已生成的内容保留;本次不会扣点。";
export function isAbortError(caught: unknown): boolean {
return (caught instanceof DOMException || caught instanceof Error) && caught.name === "AbortError";
}
export const RECTIFICATION_INSUFFICIENT_CREDITS_NOTICE = "校正点数不足,正在前往兑换…";
export const RECTIFICATION_INSUFFICIENT_CREDITS_REDIRECT_MS = 600;