# [Pending] 为工作流任务添加人类可读名称 (Display Name) ## 背景 目前,前端在显示任务名称时使用的是任务 ID(例如 `analysis:news_analysis`,或者是经过简单格式化后的 `news analysis`)。然而,真正的人类可读名称(例如 “新闻分析”)是定义在 `AnalysisTemplate` 配置中的,但这些名称并没有通过工作流事件传播到 `WorkflowOrchestrator` 或前端。 ## 目标 确保前端可以在工作流可视化图表(Visualizer)和标签页(Tab Headers)中显示模板中定义的本地化/人类可读的任务名称。 ## 需要的变更 ### 1. Common Contracts (`services/common-contracts`) - **文件**: `src/workflow_types.rs` 或 `src/messages.rs` - **行动**: 更新 `TaskNode` 结构体(用于 `WorkflowStateSnapshot`),增加一个 `display_name` (`Option`) 字段。 - **行动**: (可选) 如果我们需要实时更新也携带名称,可以更新 `WorkflowTaskEvent`,虽然对于静态拓扑来说,快照(Snapshot)通常就足够了。 ### 2. Workflow Orchestrator Service (`services/workflow-orchestrator-service`) - **文件**: `src/dag_scheduler.rs` - **行动**: 在通过 `add_node` 添加节点时,接受一个 `display_name` 参数。 - **文件**: `src/workflow.rs` - **行动**: 在 `build_dag` 函数中,遍历 `template.modules` 时: - 提取 `module_config.name`(例如 “新闻分析”)。 - 在创建 DAG 节点时传递这个名称。 ### 3. Frontend (`frontend`) - **文件**: `src/types/workflow.ts` - **行动**: 更新 `TaskNode` 接口以匹配新的后端 DTO。 - **文件**: `src/components/workflow/WorkflowVisualizer.tsx` & `src/pages/ReportPage.tsx` - **行动**: 如果 `node.display_name` 存在,则优先使用它;否则回退到使用 `formatNodeName(node.id)`。 ## 替代方案 / 临时方案 (纯前端) 由于前端已经(通过 `useAnalysisTemplates` hook)获取了 `AnalysisTemplate`,我们可以: 1. 从 URL 参数中获取当前的 `templateId`。 2. 查找对应的模板定义。 3. 创建一个映射表:`module_id -> module_name`。 4. 在 `ReportPage` 和 `WorkflowVisualizer` 中使用此映射表来动态解析名称。 ## 优先级 中等 - 能够显著改善用户体验 (UX),但现有功能不受影响。