windsland52/maatutorial

maafw-custom

编写、注册与调试 MaaFramework Custom 识别/动作——何时上 Custom 的判据、宿主与注册路径、binding 实现与注册、参数解析与校验、复用 pipeline 节点、Agent 子进程模式与工程规范。Use when implementing MaaFW custom recognition or action logic, deciding registration path for your host, registering customs, parsing customact…

Vedi sorgente
Documento Skill originale

Contenuto dal repository con titoli, esempi, codice, tabelle, link e immagini preservati.

MaaFW Custom 开发

Pipeline 表达不了的逻辑用 Custom 补齐:读外部状态、跨节点数据传递、动态计数、复杂判定、自定义识别算法。binding 类签名与 context API 不凭记忆写,一律路由 MaaLLMWiki 的 bindings / native-api 索引(版本锁定、引用回源;已安装 maallmwiki skill 时由其承载完整路由流程)。

硬护栏

  1. 能 pipeline 不 custom(默认方向,由成本非对称决定而非偏好):
  • 为什么偏 pipeline:custom 节点的外层仍受引擎调度与观测——next 候选顺序(先命中先执行)、max_hit、on_error、focus、option 的 pipelineoverride 照常生效,`runtask 起的子流程也由引擎执行。失去自动约束的是**回调内部**——内部循环 / 等待 / 网络 IO 不展开为节点图,节点 timeout` 打不断阻塞中的回调,耗时、取消、重试、内部状态全靠自己管,对工具链只剩日志。
  • 一律 pipeline:视觉可判定的等待 / 点击 / 滑动 / 找字 / 循环 / 分支——循环 = next 环 + 出口 + maxhit(固定次数重复用 `repeat` / `repeatdelay / repeatwaitfreezes`,v5.3+),分支 = next 顺序 + 遮蔽。
  • 才上 Custom:依赖画面外运行时数据(文件、网络、进程状态、时间)的读取或以其为判据的控制流;识别 / 动作字段表达不了的判定;外部调用。
  • 字段表达力的两条硬边界(实证项目 custom 存量的大头就在这):
  • And / Or 是布尔组合——无数值比较、无跨节点算术(数值比较、多节点数值表达式是 custom 的地盘);组合期唯一数据流是 box:box_index 选输出、sub_name 传 filtered box 作 ROI、Or 取命中者 box;
  • max_hit 只会递增,pipeline 字段读不到也清不掉命中计数——custom 内可用 get_hit_count / clear_hit_count(作用域:当前任务与其 run_task 子任务共享);跨节点"数据"仍无字段通道——anchor 是节点名变量(写 / 清 / 引用三态),不是数据存储。
  • 该转 custom 的反信号:为表达一段逻辑开始堆克隆节点、节点图膨胀难读、开始需要运行时改参数或计数(override / 状态类标准件频繁登场)——继续拆不如转。
  • 判据拿不准先回 maafw-pipeline 试拆节点。
  1. 失败要显式,且分清三种语义:
  • CustomRecognition 返回未命中 = 本候选不命中——轮询继续试后面的候选,整轮全未命中等宿主节点 timeout 后走宿主的 on_error(不是立即触发);
  • CustomAction 返回失败 = 走动作所在节点的 on_error;实现异常不吞、显式失败返回——静默假成功是排障噩梦;
  • binding 侧空返回值语义要查再写(样例:Python 动作 run 返回 None 等价成功、识别 analyze 返回 None 等价未命中——漏写 return 在动作侧就是静默假成功;以 binding 路由为准);
  • 直调 context.run_recognition() 只返回识别结果,错误分支由调用方自理。
  1. 注册名逐字符一致:注册名(装饰器或注册表中的字符串)与 pipeline 节点引用完全一致,区分大小写。改名时同步所有注册点——装饰器/注册表、pipeline 引用(先改 pipeline 用法再改注册)、有 Schema 基建则含 enum;custom 代码内的节点名引用(run_task / run_recognition / run_action 的 entry、override_next 的目标)也在同步面——调用即失败(返回值要判),不是静默失联;素材路径同样在同步面,但框架不替你报错——自定义代码读图必须自查加载结果(空图即失败),漏改多表现为静默空转(引用点全表见 maafw-pipeline 的 naming.md)。
  2. 签名路由:analyze / run 的参数结构、context API 随 binding 版本演进,以路由结果为准,本文样例仅作形态示意;不依赖框架未承诺的钩子(如 stop / 中断回调——有没有、叫什么以路由结果为准)。框架不会主动打断回调——长循环自查停止条件、外部 IO 设超时、资源清理用 finally / RAII 等该语言机制。
  • Context 能力面(上了 custom 之后有哪些杠杆;名字以 binding 路由为准):run_task / run_recognition / run_action(按节点跑,识别与动作配对);run_recognition_direct / run_action_direct(不建节点直接用引擎算法);wait_freezes(引擎等画面静止,内部自截图);override_pipeline / override_next / override_image(补丁三件);get_node_data(读当前有效节点定义,含补丁);set_anchor / get_anchor(锚点读写);get_hit_count / clear_hit_count(计数读清);get_tasker(取 controller / resource——截图链的前提);clone(分叉 context)。
  1. 状态最小化:custom 内尽量无状态;确需跨调用记忆(如"仅首次执行"哨兵)要注明生命周期——agent 进程存活期间类状态跨任务共享,任务重入会带着上次的值。

工作流

  1. 定宿主与注册路径(先于一切实现决策):能不能进程内注册由谁拥有主程序决定——细则、agent 段接线与架构见 references/agent-mode.md。
  2. 判型:
  • 自定义识别算法 → CustomRecognition(analyze 返回命中 box);
  • 外部调用 / 复杂动作 → CustomAction(run 返回成功失败);
  • 横切钩子(全局检查、失败引导)→ sink 通道而非散进 action(细则见 patterns.md「事件监听」)。

特例不与上列并列:非标设备控制走 CustomController——按控制器接入而非注册(子类 + 工厂构造后 bind 给 Tasker),且仅掌控宿主进程时可行,agent 子进程内框架不提供控制器创建(见 agent-mode.md 的 agent 能力面)。

  1. 最小注册闭环:先接最小节点(DoNothing + 日志)跑通"注册 → pipeline 引用 → 被调到",再填实现。
  2. 建文件与实现:
  • 按业务能力分文件,与 resource 的模块目录对齐(文件形态随语言惯用法,判据见 references/patterns.md「模块边界」);
  • 通用可复用件进共享件目录;注册进唯一的注册点(装饰器或集中注册表);
  • 参数从 pipeline 的 custom_action_param / custom_recognition_param(JSON)进入,经解析工具函数做类型 / 必填 / 默认值处理与运行时校验后使用,不裸取字段;实现自带行为契约文档(docstring / 注释等该语言惯例)——写清预期行为与参数语义。
  1. 复用而非重写:
  • custom 内需要识别 / 动作时优先引用既有 pipeline 节点——context.run_recognition("<节点名>", image) 直接跑某节点的识别;
  • 图像来源按用途:识别回调判定本次画面用 argv.image;动作后要新画面经既有 controller 主动截图等完成后再取图(样例形态 context.tasker.controller.post_screencap().wait().get(),名字以 binding 路由为准);cached_image 属 controller、是最近一次已完成截图的缓存、不会自己刷新——时效可接受才用;
  • 识别 → 操作 → 再识别法则在 custom 内同样成立(见 maafw-pipeline 的 flow-patterns)。
  1. 失败、取消与状态作用域:失败三语义见硬护栏 2;长循环与外部 IO 的取消策略见硬护栏 4;跨调用状态的生命周期注明(硬护栏 5);override 补丁写明对象、作用域与生命周期(见 patterns.md「状态与作用域」)。
  2. 验证:日志带节点名 + 入参摘要 + 结果摘要(这是排错唯一线索);单元验证后转 maafw-debug 单节点流程与端到端。

审查清单

  • 判据:这个逻辑真的 pipeline 表达不了吗?有没有把流程控制藏进 custom(回调内部不展开为节点图)?
  • 命名能自解释:注册名与 pipeline 节点命名风格对齐(惯例 PascalCase),项目内统一。
  • 参数底线:入口运行时校验——类型 / 必填 / 默认值 / 错误行为明确;有 Schema 基建的项目同步 enum 与注册名,并确认校验入口真的覆盖(建文件本身不产生校验)。
  • 失败路径:三种失败语义分清;没有裸 except: pass;空返回值的 binding 语义核对过。
  • 阻塞与取消:长循环有停止检查、外部 IO 有超时、清理有 finally / RAII 等机制。
  • 注册点:改名改删时,pipeline 用法 → 注册点 → (有 Schema 则含 enum)→ custom 代码内节点名引用与素材路径,全部同步。

深入阅读(按需)

  • references/patterns.md — Custom 实现决策指南:注册与加载、模块边界、参数契约、Pipeline 复用、状态作用域、失败取消、事件监听、验证
  • references/agent-mode.md — Agent 子进程模式:启动到退出的阶段职责、连接标识符、PI_* 容错、双日志、宿主与隔离决策
dallo stesso repository

Altri Skills

Tutti gli Skills
windsland52
Community

maafw-debug

调试与验收 MaaFramework(MaaFW)应用(开发态、设备在线)——节点识别失败、点击不落点(识别成功 ≠ 点击生效)、ROI 校准与阈值调参、单节点运行验证、流程卡死与 controller 连接排查、端到端验收与 pipelineoverride 生效验证;按配置/识别/动作/流程/验收五层分诊,产出定位结论与证据,修复交接回 maafw-pipeline / maafw-interface / maafw-custom。Use when debugging or acceptance-testing a MaaFW application with a device attached — node recognition failures, clicks that miss, ROI calibration and threshold tuning, single-node run verification, stuck flows and controller connection issues, end-to-end acceptance, or pipelineo

installazioni
4
GitHub Stars
2
Aggiornato
8 ott
windsland52
Community

maafw-interface

编写、修改与审查 MaaFramework interface.json(Project Interface V2)——任务入口声明、controller/resource 配置、GUI 选项接线(pipelineoverride 与覆盖顺序)、preset 预设、pretask 启动前任务、agent 子进程配置、import 拆分与结构排错。Use when creating, editing, or reviewing an interface.json for a MaaFW project, adding user-facing options or presets, wiring pipelineoverride, configuring pretask or agent child processes, splitting interface files via import, or diagnosing interface structure errors.

installazioni
4
GitHub Stars
2
Aggiornato
8 ott
windsland52
Community

maafw-pipeline

编写、修改与审查 MaaFramework(MaaFW)Pipeline——从零新建任务与子流程(大任务逐级拆分为嵌套复用的子流程、需求翻译成状态、资源文件与节点命名、识别/动作节点编写与 ROI 圈定、next 链分支/循环/[JumpBack]/[Anchor] 中断与失败路径设计、可达性自查)与存量重构(摸底可复用节点、改名前全库搜引用、坐标卫生与反模式审查)。Use when authoring, editing, or reviewing any pipeline JSON in a MaaFW project — adding tasks, sub-flows, or nodes, breaking large tasks into nested reusable sub-flows, choosing TemplateMatch/OCR/ColorMatch or action types, sizing ROIs, designing next chains with branches, loops, interrupts, and timeout fallbacks,

installazioni
4
GitHub Stars
2
Aggiornato
8 ott