fix: 岗位会商历史按用户隔离,并为 write-file 预览启用 AI 写作视图

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
董宏凯andCursor committed 2026-08-25 17:32:56 +08:00
1 parent 8c3d6a02fc
commit 8ce3a62826
5 files changed
+67 -38

No files matched your search

@@ -366,10 +366,15 @@ export function ArtifactFileDetail({
!useWriteFileStreaming &&
!isSkillFile &&
!isMock;
// 「AI 写作」md 展示开关:只要是可编辑的 markdown 就提供「AI 写作」视图(在 源码/预览 旁多一个
// 切换项),用户可随时切过去体验划词「AI 改写」。默认仍是「预览」,避免编辑器在内容加载期间
// 挂载导致白屏 + 避免复杂 md(表格/公式/HTML)误入有损编辑。
const canUseAiEditor = canEditArtifact;
// 「AI 写作」md 展示开关:在 源码/预览 旁多一个切换项,支持划词「AI 改写」。
// 深度研究等 write-file 虚拟预览没有 artifacts PATCH,但仍应提供该视图(本地 draft);
// 流式写入中不挂载,避免编辑器在内容加载期间白屏。
const canUseAiEditor =
language === "markdown" &&
!isSkillFile &&
!isMock &&
!thread.isLoading &&
(canEditArtifact || useWriteFileStreaming);
const [draftContent, setDraftContent] = useState("");
const [hasLocalEdits, setHasLocalEdits] = useState(false);
const [documentRewriteDialogOpen, setDocumentRewriteDialogOpen] = useState(false);
@@ -393,7 +398,9 @@ export function ArtifactFileDetail({
const maxGeneratedImages = imageCapabilities.data?.imageGeneration?.maxImages ?? 4;
const displayContent = documentRewriteActive
? documentRewrite.run.draft
: (canEditArtifact ? draftContent : (content ?? ""));
: (canEditArtifact || (canUseAiEditor && hasLocalEdits)
? draftContent
: (content ?? ""));
const artifactContentPending =
isCodeFile &&
!useWriteFileStreaming &&
@@ -443,17 +450,26 @@ export function ArtifactFileDetail({
setViewMode("code");
}, [documentRewriteActive]);
useEffect(() => {
if (viewMode !== "edit" || canUseAiEditor) return;
setViewMode(isSupportPreview ? "preview" : "code");
}, [canUseAiEditor, isSupportPreview, viewMode]);
useEffect(() => {
setDraftContent(content ?? "");
setHasLocalEdits(false);
}, [filepathFromProps]);
useEffect(() => {
if (!canEditArtifact || hasLocalEdits || documentRewriteActive) {
if (
(!canEditArtifact && !canUseAiEditor) ||
hasLocalEdits ||
documentRewriteActive
) {
return;
}
setDraftContent(content ?? "");
}, [canEditArtifact, content, documentRewriteActive, hasLocalEdits]);
}, [canEditArtifact, canUseAiEditor, content, documentRewriteActive, hasLocalEdits]);
useEffect(() => {
if (
@@ -1709,8 +1725,9 @@ export function ArtifactFileDetail({
)}
{viewMode === "edit" && canUseAiEditor && !documentRewriteActive && (
<MarkdownAiEditor
// 编辑用原始内容(与源码模式一致,不脱敏);保存仍走头部「保存 Markdown」按钮。
markdown={displayContent ?? ""}
// 编辑用原始内容(与源码模式一致,不脱敏);有 artifacts 保存能力时走头部「保存 Markdown」。
// write-file 虚拟预览(如深度研究)仅本地 draft,切换预览/源码仍可见本次改动。
markdown={(hasLocalEdits || canEditArtifact ? draftContent : content) ?? ""}
onChange={(value) => {
setDraftContent(value);
setHasLocalEdits(true);