fix(*): 创作工作台 - 修复 Agent、资源引用、附件交互与 Agnes 视频协议
This commit is contained in:
71
web/test/canvas-node-generation-mentions.test.ts
Normal file
71
web/test/canvas-node-generation-mentions.test.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
|
||||
import { buildNodeGenerationContext } from "../src/components/canvas/canvas-node-generation";
|
||||
import { CanvasNodeType, type CanvasConnection, type CanvasNodeData } from "../src/types/canvas";
|
||||
|
||||
function node(id: string, type: CanvasNodeType, content: string): CanvasNodeData {
|
||||
return {
|
||||
id,
|
||||
type,
|
||||
title: id,
|
||||
position: { x: 0, y: 0 },
|
||||
width: 100,
|
||||
height: 100,
|
||||
metadata: { content },
|
||||
};
|
||||
}
|
||||
|
||||
function targetNode(): CanvasNodeData {
|
||||
return {
|
||||
id: "target",
|
||||
type: CanvasNodeType.Video,
|
||||
title: "target",
|
||||
position: { x: 0, y: 0 },
|
||||
width: 100,
|
||||
height: 100,
|
||||
metadata: { composerContent: "让 @图片1 进入画面" },
|
||||
};
|
||||
}
|
||||
|
||||
function connection(fromNodeId: string): CanvasConnection {
|
||||
return { id: `connection-${fromNodeId}`, fromNodeId, toNodeId: "target" };
|
||||
}
|
||||
|
||||
describe("canvas node generation position mentions", () => {
|
||||
test("同一个 @图片1 在换线后自动指向新的第一张图片", () => {
|
||||
const target = targetNode();
|
||||
const imageA = node("image-a", CanvasNodeType.Image, "data:image/png;base64,a");
|
||||
const imageB = node("image-b", CanvasNodeType.Image, "data:image/png;base64,b");
|
||||
|
||||
const before = buildNodeGenerationContext(target.id, [imageA, target], [connection(imageA.id)], "让 @图片1 进入画面", []);
|
||||
const after = buildNodeGenerationContext(target.id, [imageB, target], [connection(imageB.id)], "让 @图片1 进入画面", []);
|
||||
|
||||
expect(before.referenceImages.map((image) => image.id)).toEqual(["image-a"]);
|
||||
expect(after.referenceImages.map((image) => image.id)).toEqual(["image-b"]);
|
||||
expect(before.prompt).toBe("让 图片1 进入画面");
|
||||
expect(after.prompt).toBe("让 图片1 进入画面");
|
||||
});
|
||||
|
||||
test("按类型位置选择资源,提示词出现顺序不会改变槽位含义", () => {
|
||||
const target = targetNode();
|
||||
const imageA = node("image-a", CanvasNodeType.Image, "data:image/png;base64,a");
|
||||
const audioA = node("audio-a", CanvasNodeType.Audio, "data:audio/mpeg;base64,a");
|
||||
const imageB = node("image-b", CanvasNodeType.Image, "data:image/png;base64,b");
|
||||
const connections = [connection(imageA.id), connection(audioA.id), connection(imageB.id)];
|
||||
const context = buildNodeGenerationContext(target.id, [imageA, audioA, imageB, target], connections, "让 @图片2 配合 @音频1", []);
|
||||
|
||||
expect(context.referenceImages.map((image) => image.id)).toEqual(["image-b"]);
|
||||
expect(context.referenceAudios.map((audio) => audio.id)).toEqual(["audio-a"]);
|
||||
expect(context.prompt).toBe("让 图片1 配合 音频1");
|
||||
});
|
||||
|
||||
test("旧节点 token 只做读取迁移,不再进入生成提示词", () => {
|
||||
const target = targetNode();
|
||||
const image = node("image-a", CanvasNodeType.Image, "data:image/png;base64,a");
|
||||
const context = buildNodeGenerationContext(target.id, [image, target], [connection(image.id)], "让 @[node:image-a] 进入画面", []);
|
||||
|
||||
expect(context.referenceImages.map((item) => item.id)).toEqual(["image-a"]);
|
||||
expect(context.prompt).toBe("让 图片1 进入画面");
|
||||
expect(context.prompt).not.toContain("@[node:");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user