# Deprecate Workflow Node

当用户需要弃用一个工作流节点（保留向后兼容、隐藏出模板面板）时触发该 skill。FastGPT 工作流节点的弃用流程标准化封装，覆盖模板、Dispatcher、UI...

- Repository: https://github.com/labring/FastGPT (29968 stars)
- Category: Design
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add labring/FastGPT --skill deprecate-workflow-node -g -a claude-code -y`
Codex: `npx skills add labring/FastGPT --skill deprecate-workflow-node -g -a codex -y`
Cursor: `npx skills add labring/FastGPT --skill deprecate-workflow-node -g -a cursor -y`
Gemini CLI: `npx skills add labring/FastGPT --skill deprecate-workflow-node -g -a gemini-cli -y`

## Description

当用户需要弃用一个工作流节点（保留向后兼容、隐藏出模板面板）时触发该 skill。FastGPT 工作流节点的弃用流程标准化封装，覆盖模板、Dispatcher、UI 引用等所有需要改动的位置。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

## When to Use This Skill

当用户需要"弃用 / 废弃 / 下线 / 不再推荐使用"某个工作流节点（例如 `LoopNode`、`RunAppModule` 等）时触发。

弃用的目标：
- 已存在的工作流仍能正常加载和运行（保持运行时兼容）。
- 新建工作流时，模板面板**不再展示**该节点。
- 节点的类型枚举值（FlowNodeTypeEnum）必须保留，否则旧工作流会找不到节点定义。

## 核心理念

弃用 ≠ 删除。**只断"新增入口"，不断"运行通路"**。

| 维度          | 处理方式                                       |
| ------------- | ---------------------------------------------- |
| 类型枚举值    | 保留（旧工作流引用）                           |
| 模板定义      | 移到 `abandoned/` 目录，从模板面板列表中移除 |
| Dispatcher    | 移到 `abandoned/` 目录，添加 `@deprecated` 注释 |
| moduleTemplatesFlat | 必须保留，否则节点无法在画布上渲染       |
| **节点级 UI 徽章** | 模板加 `status: PluginStatusEnum.SoonOffline`，节点头部出现黄色"即将下线"标签 + tooltip"请尽快替换" |
| 子节点 / 关联节点 | 仅当确认无其他节点共享时才一并弃用         |
| i18n key      | 不动（旧工作流仍会读取 name/intro 文案）       |

> ℹ️ 字段级 `deprecated: true`（`FlowNodeInputItemType.deprecated` / `FlowNodeOutputItemType.deprecated`）是**独立机制**，用于在保留节点的前提下淘汰单个字段（旧字段保留兼容、新字段替代）。**整节点弃用时不要用它**, , 节点级徽章已经足够指示，再加字段级会让信号过度冗余。

## 参考案例

仓库内已有一个完整的弃用案例可参考：`FlowNodeTypeEnum.runApp`。可通过对比 `git log --diff-filter=R -- "**/abandoned/runApp/**"` 找到当时的迁移 commit。

## TODO 模板（执行前先复制并填写）

> 操作目标：弃用 `<NodeTemplateName>`（FlowNodeTypeEnum.`<enumKey>`）

- [ ] 1. **确认影响面**
- [ ] 2. **移动模板定义**到 abandoned 目录
- [ ] 3. **移动 Dispatcher**到 abandoned 目录
- [ ] 4. **更新 `template/constants.ts`**：从 `systemNodes` 移除，确保留在 `moduleTemplatesFlat`
- [ ] 5. **更新 `dispatch/constants.ts`**：加 `@deprecated` 注释，移到 callbackMap 末尾
- [ ] 6. **节点级徽章**：模板加 `status: PluginStatusEnum.SoonOffline`（节点头部显示"即将下线"黄色标签）
- [ ] 7. **检查 UI / Hook 引用**（不一定需要改）
- [ ] 8. **运行 lint + typecheck + 局部测试**

---

## 详细步骤

### 1. 确认影响面（必做）

在动手之前，**先用 grep/Explore 全局搜索**节点的所有引用，确认改动范围。需要查的关键字：

```bash
# 类型枚举使用点
grep -rn "FlowNodeTypeEnum\.<enumKey>\b" packages/ projects/ --include="*.ts" --include="*.tsx"

# 模板对象（如 LoopNode）
grep -rn "<TemplateExport>\b" packages/ projects/ --include="*.ts"

# 子节点是否被其他容器复用（重要！）
grep -rn "FlowNodeTypeEnum\.<childEnum>" packages/ projects/
```

The rest: https://github.com/labring/FastGPT/blob/HEAD/.agents/skills/core/workflow/deprecate_workflow_node/SKILL.md
