From 95b004ec0fcdb160a1a00432649db294a0dfb8db Mon Sep 17 00:00:00 2001 From: Rou <76741805+Rou325@users.noreply.github.com> Date: Tue, 8 Sep 2026 16:59:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(canvas):=20=E5=9B=BE=E7=89=87=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E7=BC=96=E5=8F=B7=20-=20=E5=90=8C=E6=AD=A5=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E4=B8=AD=E7=9A=84=E5=AA=92=E4=BD=93=E5=BC=95?= =?UTF-8?q?=E7=94=A8=20(#441)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(media): 对象存储参考素材 - 协议支持 URL 时优先发送签名链接 开启对象存储后,支持 URL 的上游协议优先发送 OSS/COS/七牛/S3 签名链接;必须传字节的协议仍走 Base64 或 multipart。本地资源回退字节,签发失败直接报错,不自动重发生成。 * fix(canvas): 图片引用清理 - 取消引用时同步移除提示词引用 * fix(canvas): 图片引用编号 - 同步提示词中的媒体引用 --- web/src/lib/canvas/canvas-resource-references.ts | 6 +++++- web/test/canvas-resource-references.test.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/web/src/lib/canvas/canvas-resource-references.ts b/web/src/lib/canvas/canvas-resource-references.ts index 1d6786685..512c5b11b 100644 --- a/web/src/lib/canvas/canvas-resource-references.ts +++ b/web/src/lib/canvas/canvas-resource-references.ts @@ -133,7 +133,11 @@ function removeCanvasMentionToken(value: string, token: string) { function replaceCanvasMentionToken(value: string, token: string, replacement: string) { if (!token) return value; const escapedToken = token.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - return value.replace(new RegExp(`${escapedToken}(?=${CANVAS_RESOURCE_MENTION_BOUNDARY.source})`, "gu"), replacement); + // Numbered media mentions can touch Chinese prose or another mention, but not a longer number. + const boundary = /^@(图片|视频|音频|文本)\d+$/.test(token) + ? "(?![0-9])" + : token.startsWith("@[node:") ? "" : `(?=${CANVAS_RESOURCE_MENTION_BOUNDARY.source})`; + return value.replace(new RegExp(`${escapedToken}${boundary}`, "gu"), replacement); } function compactRemovedCanvasMentionPrompt(value: string) { diff --git a/web/test/canvas-resource-references.test.ts b/web/test/canvas-resource-references.test.ts index 564aa1422..b1c78ec78 100644 --- a/web/test/canvas-resource-references.test.ts +++ b/web/test/canvas-resource-references.test.ts @@ -207,6 +207,19 @@ describe("canvas resource mention slots", () => { }); describe("remove canvas resource mention tokens", () => { + test("断开首图时同步紧邻中文、连续引用及两位数编号", () => { + const images = Array.from({ length: 10 }, (_, index) => imageNode(`image-${index}`)); + const target = { + ...videoNode("target"), + metadata: { composerContent: "@图片1@图片2的人物参考@图片10,@[node:image-1]保持一致" }, + }; + const nodes = [...images, target]; + const connections = images.map((image) => connection(image.id, target.id)); + const result = applyCanvasConnectionPromptSync(nodes, connections, nodes, connections.slice(1)); + expect(result.find((node) => node.id === target.id)?.metadata?.composerContent) + .toBe("@图片1的人物参考@图片9,@图片1保持一致"); + }); + test("取消引用后会清掉对应的 @图片N", () => { const image = imageNode("image-a"); const target = {