en un clic
task-config
// MaaNTE 任务配置(tasks/*.json)编写指南。覆盖任务入口、选项类型(switch/input/select)、pipeline_override、i18n、控制器限制等。在添加新任务、修改任务选项、配置 pipeline_override 时使用。
// MaaNTE 任务配置(tasks/*.json)编写指南。覆盖任务入口、选项类型(switch/input/select)、pipeline_override、i18n、控制器限制等。在添加新任务、修改任务选项、配置 pipeline_override 时使用。
MaaNTE Pipeline JSON 编写指南。基于 MaaFramework Pipeline 协议,提供节点命名、识别算法、动作类型、流程控制、可复用节点等编码规范与模式参考。在编写、修改或审查 Pipeline JSON、设计节点流程、使用 TemplateMatch/OCR/Custom 识别或 Click/Swipe 动作时使用。
MaaNTE Python 自定义动作(CustomAction)编写指南。覆盖 agent/custom/action/ 下的 Python 代码的架构、注册、命名、maafocus 用户消息、日志、Controller API、Pipeline 集成、错误处理等编码规范和模式参考。在编写、修改或审查 Python 自定义动作,或需要了解 agent 项目结构与 MaaFramework Python 绑定集成方式时使用。
分析 MaaNTE 上游仓库公开 Issue(`https://github.com/1bananachicken/MaaNTE/issues/...` 或 `#1234`)。自动抓取 issue 正文和评论中的日志附件(`MaaNTE-logs-*.zip` 或裸日志文件),下载解压后从 `maa.log`、agent 日志(`debug/custom/`)、`mxu-tauri.log`、`mxu-web-*.log`、`mxu-agent*.log`、`config/*`、`on_error/` 截图、`.dmp` 崩溃转储中筛选关键证据,并结合 MaaNTE 当前仓库代码、MaaFramework 文档、MXU 文档判断根因、给出修复方案。供分析 MaaNTE issue、日志包、识别失败、任务卡死、控制器差异、Pipeline/Agent/MXU 问题时使用。
用"赛博道士 + 故障玄学 + 半懂不懂技术分析"的风格回复 MaaNTE 用户的简略求助。用于用户只给一句模糊问题、没有日志、没有截图、没有报错时,做一段短小离谱但认真的玄学诊断。触发词可包括"赛博算卦""玄学回复""评论区整活""帮我写一段离谱但正经的故障分析"
MaaNTE Python 日志规范。覆盖 agent/utils/logger.py 的 loguru/标准 logging 使用方式、日志级别选择、格式化与最佳实践。在编写或修改 agent/ 下的 Python 代码、添加日志输出、或审查日志质量时使用。
分析 Windows 崩溃转储文件(.dmp),诊断 MaaNTE 及其依赖项(MaaFramework、MXU)的崩溃。自动从 GitHub Releases 下载对应版本 PDB 符号,使用 minidump-stackwalk 解析堆栈轨迹并定位崩溃根因。当 issue 日志包或附件中发现 .dmp 文件,或用户要求分析 DMP/崩溃转储时使用。
| name | task-config |
| description | MaaNTE 任务配置(tasks/*.json)编写指南。覆盖任务入口、选项类型(switch/input/select)、pipeline_override、i18n、控制器限制等。在添加新任务、修改任务选项、配置 pipeline_override 时使用。 |
assets/resource/tasks/<TaskName>.json
新建 task 文件后,必须将其注册到 assets/interface.json 的 import 数组中,否则 MaaFramework 不会加载:
// assets/interface.json
{
"task": [],
"import": [
"resource/tasks/WithdrawMoney.json",
"resource/tasks/MyNewTask.json" // <-- 添加这一行
]
}
{
"task": [
{
"name": "MyTask",
"label": "$task_my_task_label",
"entry": "MyTaskEntrance", // Pipeline 入口节点名
"description": "$task_my_task_desc",
"option": [ // 启用的选项列表
"MyOption1",
"MyOption2"
],
"controller": [ // 可选:限制控制器类型
"Win32",
"Win32-Front"
]
}
],
"option": {
// 选项定义(见下文)
}
}
一个文件可定义多个 task(如 Fish.json 含 Fish 和 FishNew),共享同一组 option 定义。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | ✅ | 任务名(PascalCase) |
label | string | ✅ | UI 标签,$i18n_key 格式 |
entry | string | ✅ | Pipeline 入口节点名,对应 pipeline JSON 中的节点 key |
description | string | ❌ | UI 描述,$i18n_key 格式(不加 $ 则为纯文本) |
option | string[] | ❌ | 启用的选项名列表,对应 option 块中的 key |
controller | string[] | ❌ | 限制可用控制器:"Win32" / "Win32-Front" / "Win32-Background"。不写 = 通用 |
最常用。用户选择 Yes/No,通过 pipeline_override 控制节点 enabled:
"MySwitchOption": {
"type": "switch",
"label": "$task_xxx_option_yyy",
"description": "$task_xxx_option_yyy_desc",
"default_case": "No", // 默认值(Yes/No)
"cases": [
{
"name": "Yes",
"label": "$option_switch_case_yes", // 一般情况用全局开关文案,特殊需求可替换为自定义 i18n key
"pipeline_override": {
"SomeNode": { "enabled": true }
},
"option": [ // 可选:Yes 时显示子选项
"SubOption"
]
},
{
"name": "No",
"label": "$option_switch_case_no",
"pipeline_override": {
"SomeNode": { "enabled": false }
}
}
]
}
用户输入值,通过 {变量名} 注入到 pipeline_override:
"MyInputOption": {
"type": "input",
"label": "$task_xxx_option_yyy",
"description": "$task_xxx_option_yyy_desc",
"inputs": [
{
"name": "count",
"default": "10",
"pipeline_type": "int",
"verify": "^\\d+$" // 可选:正则校验
}
],
"pipeline_override": {
"SomeNode": {
"custom_action_param": {
"count": "{count}" // {变量名} 替换为用户输入值
}
}
}
}
预设多个选项值:
"MySelectOption": {
"type": "select",
"label": "$task_xxx_option_yyy",
"description": "$task_xxx_option_yyy_desc",
"cases": [
{
"name": "0.8",
"pipeline_override": {
"SomeNode": { "recognition": { "param": { "threshold": 0.8 } } }
}
},
{
"name": "0.6",
"pipeline_override": {
"SomeNode": { "recognition": { "param": { "threshold": 0.6 } } }
}
}
]
}
pipeline_override 是 { "节点名": { "字段": 值 } } 的映射,支持的字段包括所有 Pipeline 节点字段:
"pipeline_override": {
"NodeName": {
"enabled": true, // 启用/禁用节点
"max_hit": 3,
"next": ["OtherNode"],
"pre_delay": 200,
"post_delay": 200,
"timeout": 30000,
"recognition": {
"param": {
"roi": [0, 0, 100, 50],
"threshold": 0.7,
"expected": ["新文本"]
}
},
"action": {
"param": {
"target": [100, 200]
}
},
"custom_action_param": {
"key": "value" // CustomAction 的 JSON 参数
}
}
}
switch 的 case 中可嵌套 "option" 数组,实现"启用某功能后才显示子选项":
"AutoSkipStory": {
"type": "switch",
"cases": [
{
"name": "Yes",
"option": ["AutoSkipStoryDialog"] // Yes 时才显示
},
{
"name": "No"
}
]
}
label、description 使用 $key 格式引用翻译,key 定义在 assets/resource/locales/interface/ 下五种语言文件中:
zh_cn.json — 简体中文zh_tw.json — 繁体中文en_us.json — 英语ja_jp.json — 日语ko_kr.json — 韩语expected 只需填写完整的中文文本,多语言同步由 .github/workflows/i18n-sync.yml 工作流自动完成。需要跳过时添加 // @i18n-skip 标记option_switch_case_yes / option_switch_case_no 是全局 switch case 默认标签,所有语言文件都需定义。一般 switch 直接复用即可;若有特殊需求(如文案不应是简单的"启用/禁用"),可将 case 的 label 替换为自定义 $key$)直接显示,不走翻译controller 数组限制任务可在哪些控制器下运行:
"Win32" — 后台 SendMessage 模式(需管理员权限)"Win32-Front" — 前台 Seize 模式(会抢占鼠标)"Win32-Background" — 后台 SendMessageWithWindowPos 模式不写 controller 字段 = 所有控制器通用。多个值 = 任一匹配即可。
{
"task": [
{
"name": "MyNewTask",
"label": "$task_my_new_task_label",
"entry": "MyNewTaskEntrance",
"description": "$task_my_new_task_desc",
"option": [
"MyNewTaskAutoMode",
"MyNewTaskLoopCount"
],
"controller": [
"Win32",
"Win32-Front"
]
}
],
"option": {
"MyNewTaskAutoMode": {
"type": "switch",
"label": "$task_my_new_task_option_auto_mode",
"description": "$task_my_new_task_option_auto_mode_desc",
"default_case": "Yes",
"cases": [
{
"name": "Yes",
"label": "$option_switch_case_yes",
"pipeline_override": {
"MyNewTaskAutoStep": { "enabled": true }
}
},
{
"name": "No",
"label": "$option_switch_case_no",
"pipeline_override": {
"MyNewTaskAutoStep": { "enabled": false }
}
}
]
},
"MyNewTaskLoopCount": {
"type": "input",
"label": "$task_my_new_task_option_loop_count",
"description": "$task_my_new_task_option_loop_count_desc",
"inputs": [
{
"name": "count",
"default": "5",
"pipeline_type": "int",
"verify": "^\\d+$"
}
],
"pipeline_override": {
"MyNewTaskEntry": {
"max_hit": "{count}"
}
}
}
}
}
name 使用 PascalCaseentry 节点名在对应 Pipeline JSON 中存在assets/interface.json 的 import 数组label / description 的 $i18n_key 在所有五种语言文件中已定义expected 写完整文本,无需手动维护多语言(CI 自动同步)default_casepipeline_override 中的节点名在 Pipeline JSON 中存在custom_action_param 参数名与 Python CustomAction 解析一致controller 限制合理(前台/后台/通用)verify 正则正确