From 9268c737760b86fdfa8d0c671789a97fc06faed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=87=AF?= Date: Mon, 29 Jun 2026 23:08:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=B2=99=E7=AE=B1):=20md=20=E4=BA=A7?= =?UTF-8?q?=E7=89=A9=E6=94=AF=E6=8C=81=20AI=20=E5=86=99=E4=BD=9C=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E4=B8=8E=E5=88=92=E8=AF=8D=E6=94=B9=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 MarkdownAiEditor,复用 AI 写作的 TipTap 编辑器与 AI 改写流程 - 沙箱 md 增加 AI 写作视图切换,默认仍为预览;单文件隐藏文件名避免工具栏错位 - 单智能体聊天页开启 allowVirtualMarkdownEdit,生成完成后可编辑 - 会商总结页续看时自动收起研讨原料侧栏 Co-authored-by: Cursor --- .../artifacts/artifact-file-detail.tsx | 35 +++- .../components/workspace/chats/chat-box.tsx | 2 + .../components/artifact/MarkdownAiEditor.tsx | 193 ++++++++++++++++++ .../components/Step3SummaryMode.tsx | 4 +- 4 files changed, 230 insertions(+), 4 deletions(-) create mode 100644 frontend-web/src/open-canvas/components/artifact/MarkdownAiEditor.tsx diff --git a/frontend-web/src/components/workspace/artifacts/artifact-file-detail.tsx b/frontend-web/src/components/workspace/artifacts/artifact-file-detail.tsx index 37bdd9cf..d7229ea7 100644 --- a/frontend-web/src/components/workspace/artifacts/artifact-file-detail.tsx +++ b/frontend-web/src/components/workspace/artifacts/artifact-file-detail.tsx @@ -11,6 +11,7 @@ import { LoaderIcon, PackageIcon, SaveIcon, + SparklesIcon, UploadCloudIcon, XIcon, } from "lucide-react"; @@ -37,6 +38,7 @@ import { } from "@/components/ui/select"; import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"; import { CodeEditor } from "@/components/workspace/code-editor"; +import { MarkdownAiEditor } from "@/open-canvas/components/artifact/MarkdownAiEditor"; import { publishArtifactToKnowledge } from "@/core/agents/api"; import { useAgent } from "@/core/agents/hooks"; import { apiFetch } from "@/core/api"; @@ -213,6 +215,10 @@ export function ArtifactFileDetail({ !useWriteFileStreaming && !isSkillFile && !isMock; + // 「AI 写作」md 展示开关:只要是可编辑的 markdown 就提供「AI 写作」视图(在 源码/预览 旁多一个 + // 切换项),用户可随时切过去体验划词「AI 改写」。默认仍是「预览」,避免编辑器在内容加载期间 + // 挂载导致白屏 + 避免复杂 md(表格/公式/HTML)误入有损编辑。 + const canUseAiEditor = canEditArtifact; const [draftContent, setDraftContent] = useState(""); const [hasLocalEdits, setHasLocalEdits] = useState(false); const updateArtifact = useUpdateArtifactContent(); @@ -230,7 +236,7 @@ export function ArtifactFileDetail({ return "FILE"; }, [filepath, isSkillFile, isSpreadsheetFile, language]); - const [viewMode, setViewMode] = useState<"code" | "preview">("code"); + const [viewMode, setViewMode] = useState<"code" | "preview" | "edit">("code"); const [allowAutoViewSwitch, setAllowAutoViewSwitch] = useState(true); const [isInstalling, setIsInstalling] = useState(false); const [showPreviewSwitchPulse, setShowPreviewSwitchPulse] = useState(false); @@ -267,6 +273,7 @@ export function ArtifactFileDetail({ return; } + // md/mermaid 默认预览(AI 写作视图作为可选切换项,由用户手动进入)。 if (isSupportPreview) { setViewMode("preview"); return; @@ -598,7 +605,9 @@ export function ArtifactFileDetail({ {fileTypeLabel} - {useWriteFileStreaming ? ( + {/* markdown:隐藏文件名(仅留 MD 徽标),把横向空间让给工具栏,避免窄面板下 + 工具栏换行错位;多文件仍保留切换下拉(靠它切文件)。文件名仍可在下载/另存为时取到。 */} + {language === "markdown" && !hasMultipleArtifacts ? null : useWriteFileStreaming ? (
{getFileName(filepath)}
) : hasMultipleArtifacts ? (