diff --git a/backend/internal/app/cloud_agent_storyboard_test.go b/backend/internal/app/cloud_agent_storyboard_test.go index c5b3883a4..49400403c 100644 --- a/backend/internal/app/cloud_agent_storyboard_test.go +++ b/backend/internal/app/cloud_agent_storyboard_test.go @@ -102,6 +102,16 @@ func TestCloudAgentNodeCapabilityCardsExplainStoryboardTradeoffs(t *testing.T) { if !strings.Contains(videoGoodFor, "多图参考视频") { t.Fatalf("video capability card does not explain multi-image video: %s", videoGoodFor) } + frame := byType["frame"] + frameGoodFor := strings.Join(frame["goodFor"].([]string), "\n") + frameNotIdealFor := strings.Join(frame["notIdealFor"].([]string), "\n") + if !strings.Contains(frameGoodFor, "按场景或镜头组") || !strings.Contains(frameGoodFor, "制作") || !strings.Contains(frameNotIdealFor, "分镜脚本节点") { + t.Fatalf("frame capability card does not explain its use cases and limits: %+v", frame) + } + capabilityGuide := cloudAgentCapabilityGuide() + if !strings.Contains(capabilityGuide, "按场景或镜头组") || !strings.Contains(capabilityGuide, "可移动、可折叠") { + t.Fatalf("Agent system guide does not explain when to use a canvas frame: %s", capabilityGuide) + } guide := strings.Join(result["selectionGuide"].([]string), "\n") if !strings.Contains(guide, "多镜头") || !strings.Contains(guide, "model_list") || !strings.Contains(guide, "不要为了形式") { t.Fatalf("selection guide does not express soft routing: %s", guide) diff --git a/backend/internal/canvas/capability/builtin.go b/backend/internal/canvas/capability/builtin.go index ceb84676f..a633d6d0c 100644 --- a/backend/internal/canvas/capability/builtin.go +++ b/backend/internal/canvas/capability/builtin.go @@ -43,9 +43,9 @@ func BuiltinRegistry() *Registry { }), { Type: "frame", Version: "1", Label: "背板", DefaultWidth: 760, DefaultHeight: 520, - Purpose: "组织一组相关节点的画布区域。", - GoodFor: []string{"按场景整理节点", "划分工作区域"}, - NotIdealFor: []string{"承载结构化镜头数据", "替代具体业务节点"}, + Purpose: "在画布上建立可移动、可折叠的视觉分区,用来归组相关节点;背板本身不承载创作正文或生成结果。", + GoodFor: []string{"按场景或镜头组归拢脚本、参考图和生成结果", "按前期策划、制作、交付等阶段划分工作区", "为大型画布建立清晰分区,便于移动或折叠整组内容"}, + NotIdealFor: []string{"承载结构化镜头数据(应使用分镜脚本节点)", "存放需要 Agent 单独读写的正文(应使用文本或 Markdown 节点)", "替代具体业务节点或媒体生成节点"}, Tradeoffs: []string{"改善空间组织但不增加内容结构或生成能力"}, SummaryFields: []string{"label"}, DetailFields: []string{"label"}, CreateMetadata: func(string) map[string]any { diff --git a/web/src/components/canvas/nodes/markdown-node.tsx b/web/src/components/canvas/nodes/markdown-node.tsx index 6b1a94ebd..c4548c275 100644 --- a/web/src/components/canvas/nodes/markdown-node.tsx +++ b/web/src/components/canvas/nodes/markdown-node.tsx @@ -39,7 +39,6 @@ export function MarkdownNodeContent({ node, theme }: MarkdownNodeContentProps) { data-canvas-no-zoom style={{ color: theme.node.text }} onWheel={(event) => event.stopPropagation()} - onMouseDown={(event) => event.stopPropagation()} > {source}