From c19417a706df207c9b86b991e24faaba710ad823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=87=AF?= Date: Sun, 17 May 2026 21:19:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=81=9C=E7=BB=A7=E7=BB=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ai-writing/AIWritingPanel.tsx | 49 +++++++++++++++---- .../src/open-canvas/hooks/useAIWriting.ts | 42 +++++++++++++--- .../src/open-canvas/types/ai-writing.ts | 1 + .../backend/app/gateway/routers/ai_writing.py | 22 ++++++++- 4 files changed, 97 insertions(+), 17 deletions(-) diff --git a/frontend-web/src/open-canvas/components/ai-writing/AIWritingPanel.tsx b/frontend-web/src/open-canvas/components/ai-writing/AIWritingPanel.tsx index 4fdd9b7d..b86ee1ee 100644 --- a/frontend-web/src/open-canvas/components/ai-writing/AIWritingPanel.tsx +++ b/frontend-web/src/open-canvas/components/ai-writing/AIWritingPanel.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { ChevronsDown, Plus, RotateCcw, Settings2, Square } from 'lucide-react'; +import { ChevronsDown, Play, Plus, RotateCcw, Settings2, Square } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; @@ -38,7 +38,7 @@ const STATUS_LABEL: Record = { export function AIWritingPanel() { const navigate = useNavigate(); const { setArtifact } = useCanvasGraphContext(); - const { state, startWriting, submitIntervention, stopWriting, reset } = useAIWriting(); + const { state, startWriting, submitIntervention, pauseWriting, resumeWriting, reset } = useAIWriting(); const { sessions, loading: sessionsLoading, refresh, rename, remove } = useAIWritingSessions(); // History view state — null means normal writing mode @@ -48,7 +48,7 @@ export function AIWritingPanel() { const isDone = state.status === 'done'; const isError = state.status === 'error'; const isRunning = !isIdle && !isDone && !isError; - const showSkeleton = isRunning && !state.currentPause; + const showSkeleton = isRunning && !state.currentPause && !state.isPaused; // ── 自动滚底逻辑 ──────────────────────────────────────────────────────────── const scrollRef = useRef(null); @@ -212,12 +212,34 @@ export function AIWritingPanel() { 新建 )} - {isRunning && ( - )} + {state.isPaused && ( + <> + + + + )} {(isDone || isError) && (