ワンクリックで
deprecate-workflow-node
当用户需要弃用一个工作流节点(保留向后兼容、隐藏出模板面板)时触发该 skill。FastGPT 工作流节点的弃用流程标准化封装,覆盖模板、Dispatcher、UI 引用等所有需要改动的位置。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
当用户需要弃用一个工作流节点(保留向后兼容、隐藏出模板面板)时触发该 skill。FastGPT 工作流节点的弃用流程标准化封装,覆盖模板、Dispatcher、UI 引用等所有需要改动的位置。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
FastGPT CI workflow 双轨同步。当用户修改或新增 .github/workflows/ 下的 GitHub Actions workflow 时必须触发:同步更新 .forgejo/workflows/ 对应文件保持功能一致,或判断是否需要新建 Forgejo 版本。涉及 CI、GitHub Actions、Forgejo Actions、镜像构建、container registry、artifact、workflow yaml 改动、build-* workflow、test-* workflow 时也使用此技能。即使用户只提到"改一下 CI"或"加个 workflow"也应触发。
FastGPT Docker Compose self-hosting deployment workflow. Use when a user asks an AI agent to deploy FastGPT with Docker by referencing /deploy/SKILL.md, including creating an empty fastgpt directory, running the install script in non-interactive mode, starting Docker Compose, monitoring service health, troubleshooting compose issues, and returning the access URL plus root credentials and next steps.
手动触发的 FastGPT PR 或本地分支变更梳理技能。仅当用户显式调用 $pr-change-analysis 时使用;用于 reviewer 分析一个 GitHub PR 或当前本地分支相对 upstream/main 的需求变更、影响范围、代码质量与代码风格,不用于自动审查触发。
仅当用户明确手动指定使用 pr-review skill 时触发;不要因为用户传入 PR 链接、要求 review 或要求代码审查而自动触发。
Expert prompt engineering skill that transforms Claude into "Alpha-Prompt" - a master prompt engineer who collaboratively crafts high-quality prompts through flexible dialogue. Activates when user asks to "optimize prompt", "improve system instruction", "enhance AI instruction", or mentions prompt engineering tasks.
将 FastGPT 文档从中文翻译为面向北美用户的英文。当用户提到翻译文档、i18n、国际化、translate docs、新增/修改了中文文档需要同步英文版时,使用此 skill。也适用于用户要求检查文档翻译缺失、批量翻译、或对比中英文文档差异的场景。
| name | deprecate-workflow-node |
| description | 当用户需要弃用一个工作流节点(保留向后兼容、隐藏出模板面板)时触发该 skill。FastGPT 工作流节点的弃用流程标准化封装,覆盖模板、Dispatcher、UI 引用等所有需要改动的位置。 |
当用户需要"弃用 / 废弃 / 下线 / 不再推荐使用"某个工作流节点(例如 LoopNode、RunAppModule 等)时触发。
弃用的目标:
弃用 ≠ 删除。只断"新增入口",不断"运行通路"。
| 维度 | 处理方式 |
|---|---|
| 类型枚举值 | 保留(旧工作流引用) |
| 模板定义 | 移到 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。
操作目标:弃用
<NodeTemplateName>(FlowNodeTypeEnum.<enumKey>)
template/constants.ts:从 systemNodes 移除,确保留在 moduleTemplatesFlatdispatch/constants.ts:加 @deprecated 注释,移到 callbackMap 末尾status: PluginStatusEnum.SoonOffline(节点头部显示"即将下线"黄色标签)在动手之前,先用 grep/Explore 全局搜索节点的所有引用,确认改动范围。需要查的关键字:
# 类型枚举使用点
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/
输出一份"需要改动 / 无需改动"分类清单。通常无需改动:
useWorkflow.tsx 里嵌入到 PARENT_NODE_TYPES / unsupportedInLoop 这种"运行时识别"列表 —— 旧实例仍要工作。Flow/index.tsx 的 nodeTypes 映射 —— 旧实例需要 UI 渲染。源路径:packages/global/core/workflow/template/system/<dir>/
目标路径:packages/global/core/workflow/template/system/abandoned/<dir>/
操作:
git mv(或 Bash mv)整个目录或仅 parent 节点的 index.ts/type.ts。../)。loopStart/loopEnd 仍被 parallelRun 共用),只移动 parent 节点文件,子节点留在原位置。源路径:packages/service/core/workflow/dispatch/<dir>/<file>.ts
目标路径:packages/service/core/workflow/dispatch/abandoned/<file>.ts
操作:
git mv 文件。/* Abandoned */ 注释(与 dispatch/abandoned/runApp.ts 一致)。packages/global/core/workflow/template/constants.ts// 旧
import { LoopNode } from './system/loop/loop';
// 新
import { LoopNode } from './system/abandoned/loop/index';
// 从 systemNodes 移除(这是模板面板的来源)
const systemNodes: FlowNodeTemplateType[] = [
...
// LoopNode, ← 删除这一行
...
];
// 在 moduleTemplatesFlat 中保留 / 添加(保证旧工作流能解析)
export const moduleTemplatesFlat: FlowNodeTemplateType[] = [
...,
LoopNode, // ← 这里要有
];
⚠️ 验证点:
moduleTemplatesFlat是节点 ID → 模板对象的查找源。必须留,否则旧工作流加载时会找不到节点,画布报错。
packages/service/core/workflow/dispatch/constants.ts// 把 import 路径改成 abandoned 子目录
import { dispatchLoop } from './abandoned/runLoop';
把对应的 callbackMap 条目移到对象末尾,并加 /** @deprecated */ 注释:
export const callbackMap: Record<FlowNodeTypeEnum, Function> = {
// ...其他正常节点...
/** @deprecated */
[FlowNodeTypeEnum.loop]: dispatchLoop
};
status: PluginStatusEnum.SoonOfflineFlowNodeTemplateTypeSchema.status 是节点级的弃用 UI 信号,挂在 NodeCard.tsx 头部由 <NodeStatusBadge /> 渲染:
| 值 | 标签 | 颜色 | tooltip | 适用场景 |
|---|---|---|---|---|
Normal = 1 | 正常 | 蓝 | — | 不弃用 |
SoonOffline = 2 | 即将下线 | 黄 | "请尽快替换" | 弃用但仍可运行(推荐用这个) |
Offline = 3 | 已下线 | 红 | "已无法使用,将中断应用运行,请立即替换" | 强制下线(运行时报错) |
由于弃用的核心理念是"运行通路保留",应当用 SoonOffline;只有当节点被改成"运行时直接抛错"时才用 Offline。
import { PluginStatusEnum } from '../../../../../plugin/type';
export const FooNode: FlowNodeTemplateType = {
id: FlowNodeTypeEnum.foo,
// ...
status: PluginStatusEnum.SoonOffline, // ← 加这个
// ...
};
⚠️ 注意:这字段挂在
FlowNodeTemplateTypeSchema(即system模板的扩展)上,不在FlowNodeCommonTypeSchema上。意思是只对系统节点模板生效,store 里保存的 nodeData 不带 status,每次打开通过moduleTemplatesFlat.find(...)从模板查到。所以只需改模板,不需要数据迁移。
⚠️ schema 上还有一个看似相关的
abandon: z.boolean().optional()(FlowNodeCommonTypeSchema:72)—— 不要用它,整个仓库没有任何 UI/runtime 代码读取它,是死字段。
通常以下文件保持原样(运行时兼容需要):
projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/index.tsx — nodeTypes 中的 React 渲染映射。projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflow.tsx — PARENT_NODE_TYPES、unSupportedInLoop 等运行时校验。如果该节点在前端有"添加按钮"快捷入口(不通过模板面板触发),那种入口可以删除。
# typescript 检查
pnpm lint
# 跑相关单测(按改动文件局部跑)
cd packages/service && pnpm test ...
不要全量跑测试,只跑改动相关的。
弃用完成后,确认以下场景:
pnpm lint 通过。Record<FlowNodeTypeEnum, Function> 完整覆盖(不能删 key,否则 TS 报错)。FlowNodeTypeEnum.<enumKey> —— 旧工作流的 JSON 仍写着这个值。moduleTemplatesFlat 移除 —— 旧工作流加载时找不到模板。dispatch/constants.ts 的 callbackMap 删条目 —— 运行时报"unknown node type"。Flow/index.tsx 的 nodeTypes 映射)—— 画布渲染崩。nestedStart/nestedEnd 同时被多个容器使用)。deprecated: true —— 节点级徽章已足够,字段级是独立机制(用于"留住节点、淘汰单个字段"的场景)。