import { ArrowRight, FileText } from "lucide-react"; import { Handle, Position, type NodeProps } from "@xyflow/react"; import type { CanvasNodeData } from "@/lib/layout"; import { SourceNoticeBadge, StatusBadge } from "@/components/ui/Badges"; import { CardFields } from "@/components/flow/CardFields"; import { SourceComparisonButton } from "@/components/flow/SourceComparisonButton"; export function StoryCard({ data }: NodeProps) { const { item, onOpen } = data as unknown as CanvasNodeData; if (!item || item.itemType !== "story") return null; const role = roleLabel(item.role); const actor = actorLabel(item.role); const hasFields = Boolean(item.card.primary || item.card.secondary.length); return
{ if (event.target !== event.currentTarget) return; if (event.key === "Enter" || event.key === " ") { event.preventDefault(); onOpen(item, "business"); } }}>
{actor.label}{role !== item.title ? {role} : null}
{item.status ? : null}

{item.title}

{item.detailRef || hasFields ? : null} {item.artifactRef ? : null}
; } function roleLabel(role: string) { return ({ "planning-analysis": "规划解析", objective: "创作目标", goal: "本轮目标", plan: "实现规划", "branch-task": "实现任务", "data-decision": "数据取舍", "candidate-output": "候选脚本", "domain-output": "领域事实", "multipath-review": "多方案评审", "multipath-decision": "多路决策", "round-evaluation": "主脚本整体评审", "round-result": "本轮产出", "final-result": "最终结果" } as Record)[role] || "运行步骤"; } function actorLabel(role: string) { if (role === "multipath-review" || role === "round-evaluation") return { label: role === "multipath-review" ? "多方案评审 Agent" : "整体评审 Agent", tone: "evaluator" }; if (["branch-task", "data-decision", "candidate-output", "domain-output"].includes(role)) return { label: "实现 Agent", tone: "implementer" }; return { label: "主 Agent", tone: "main" }; }