| name | generate-pi-task |
| description | 根据 MaaFramework Pipeline 定义生成或更新 Project Interface 任务 JSON。用于创建、编辑或扩展 assets/tasks/ 下的任务文件,将 Pipeline 节点映射为用户可配置选项(switch/select/checkbox/input)并绑定 pipeline_override。 |
| license | MIT |
| compatibility | Designed for Claude Code |
MaaFramework Project Interface 任务生成
功能说明
- 读取 Pipeline JSON 文件,识别可切换节点(通常是含
enabled 字段的节点)。
- 分析节点关系,确定选项类型:
switch、select、checkbox、input。
- 生成或更新
assets/tasks/*.json,遵循 tools/schema/interface_import.schema.json。
- 更新
assets/interface.json 的 import[]。
- 补充
assets/locales/interface/ 下项目实际支持语言的 i18n 键。
使用场景
- 为 Pipeline 创建新的 Project Interface 任务文件。
- 向已有任务文件添加选项。
- 把 Pipeline 的可配置节点暴露为用户可选配置。
- 用户提到“生成任务”、“PI 任务”、“pipeline 选项”、“interface 任务”、“pipeline_override”。
工作流程
1. 读取规范文件
从当前项目读取:
tools/schema/interface_import.schema.json — 任务文件 schema。
tools/schema/interface.schema.json — 主 PI schema。
tools/schema/pipeline.schema.json — Pipeline 节点 schema。
如果 schema 路径不同,先按当前项目实际结构查找,不要硬编码。
2. 读取 Interface 上下文
- 读取
assets/interface.json。
- 读取
import[] 中已有任务文件,收集已有任务名和 option key,避免冲突。
- 记录
group[] 定义,确认新任务应归属哪个分组。
- 检查
assets/locales/interface/ 实际有哪些语言文件;只维护项目已经存在的语言。
3. 确定目标文件
- 当前活动文件在
assets/tasks/ 且已被 interface.json import → 编辑该文件。
- 当前活动文件是 Pipeline JSON → 从
assets/resource/pipeline/{PipelineName}/ 推导 pipeline 名称,检查 assets/tasks/{PipelineName}.json 是否存在。
- 无上下文 → 询问用户要为哪个 pipeline 生成。
- 新建任务文件时,同步在
assets/interface.json 的 import[] 中添加相对路径,例如 tasks/MyTask.json。
4. 读取 Pipeline 文件
- 读取
assets/resource/pipeline/{PipelineName}/ 下相关 .json 文件。
- 提取每个节点的:节点名、
enabled、next[]、desc、recognition、action。
- 构建节点图:通过
next[] 建立父→子映射,识别兄弟节点和嵌套选项。
- 如果 Pipeline 跨目录引用公共节点,只把当前任务应由用户配置的业务节点纳入选项。
5. 确定选项类型
详见 选项类型决策参考。快速规则:
- 单个含
enabled 的独立节点 → switch。
- 同一父节点下互斥的
enabled 子节点 → select。
- 多个可同时启用的独立项目 →
checkbox。
- 选择某个 case 后才显示的子选项 → 嵌套
case.option[]。
- 可配置数值/文本参数 →
input,配合 pipeline_type 和 「FieldName」 引用。
6. 生成任务 JSON
严格遵循 interface_import.schema.json。典型结构:
{
"task": [
{
"name": "PipelineName",
"label": "$task.PipelineName.label",
"entry": "PipelineName",
"description": "$task.PipelineName.description",
"option": ["OptionKey"],
"group": ["daily"]
}
],
"option": {
"OptionKey": {
"type": "switch",
"label": "$option.OptionKey.label",
"cases": [
{
"name": "Yes",
"pipeline_override": {
"TargetNode": {"enabled": true}
}
},
{
"name": "No",
"pipeline_override": {
"TargetNode": {"enabled": false}
}
}
]
}
}
}
Locale 规则
向 assets/locales/interface/ 下项目实际存在的语言文件补充键:
task.{Name}.label
task.{Name}.description
option.{OptionKey}.label
option.{OptionKey}.{CaseName} 或项目 schema 要求的 case label key
原则:
- 用户可见字符串使用
$ i18n key,不在任务文件中硬编码显示文案。
- 中文描述可优先参考 Pipeline 节点的
desc。
- 其它语言无法确定官方译名时,给出合理占位并在回复中请用户确认。
- 只维护当前项目已有 locale 文件,不要凭空新增语言文件,除非用户明确要求。
注意事项
interface_import.schema.json 才是任务文件 schema,不是 interface.schema.json。
entry 必须与 Pipeline 入口节点名完全一致,区分大小写。
interface.json 中的 import 路径通常相对 assets/interface.json,例如 tasks/MyTask.json。
enabled: false 表示节点默认关闭,选项通常让用户将其开启。
enabled: true 表示节点默认开启,选项通常让用户将其关闭。
switch 的 cases 通常为 Yes 和 No 两个。
select 的每个 case 需要启用自身节点,同时禁用同组互斥兄弟节点。
checkbox 的每个 case 通常只启用自身节点,不禁用兄弟节点。
- 若项目已有同类任务采用不同顺序或 default_case,优先保持项目一致性。
验证清单